dominds 0.8.7 → 0.8.9
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/cli/manual.js +5 -2
- package/dist/dialog-run-state.js +18 -1
- package/dist/docs/dialog-system.md +74 -36
- package/dist/docs/dialog-system.zh.md +71 -36
- package/dist/docs/dominds-terminology.md +30 -15
- package/dist/docs/fbr.md +12 -15
- package/dist/docs/fbr.zh.md +14 -17
- package/dist/docs/keep-going.zh.md +162 -0
- package/dist/docs/q4h.md +5 -5
- package/dist/docs/q4h.zh.md +5 -5
- 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 +12 -12
- package/dist/docs/team-mgmt-toolset.zh.md +12 -12
- package/dist/docs/tellask-collab.md +39 -13
- package/dist/docs/tellask-collab.zh.md +38 -12
- package/dist/llm/defaults.yaml +7 -0
- package/dist/llm/driver-v2/core.js +16 -4
- package/dist/llm/driver-v2/tellask-bridge.js +9 -6
- package/dist/minds/promptdocs.js +263 -0
- package/dist/minds/system-prompt.js +28 -0
- package/dist/server/api-routes.js +1 -1
- package/dist/shared/i18n/driver-messages.js +0 -10
- package/dist/shared/utils/inter-dialog-format.js +25 -9
- package/dist/showing-by-doing.js +34 -31
- package/dist/snippets/README.en.md +3 -0
- package/dist/static/assets/{_baseUniq-BD4L1En6.js → _baseUniq-rwtkYcxR.js} +2 -2
- package/dist/static/assets/{_baseUniq-BD4L1En6.js.map → _baseUniq-rwtkYcxR.js.map} +1 -1
- package/dist/static/assets/{arc-CiT0QyKL.js → arc-BTyYupKm.js} +2 -2
- package/dist/static/assets/{arc-CiT0QyKL.js.map → arc-BTyYupKm.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CVmn9WWl.js → architectureDiagram-VXUJARFQ-D4-EEDYn.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CVmn9WWl.js.map → architectureDiagram-VXUJARFQ-D4-EEDYn.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-D-lDhhYK.js → blockDiagram-VD42YOAC-lp1hslWH.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-D-lDhhYK.js.map → blockDiagram-VD42YOAC-lp1hslWH.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DqB2vQg0.js → c4Diagram-YG6GDRKO-CzfjUT-v.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DqB2vQg0.js.map → c4Diagram-YG6GDRKO-CzfjUT-v.js.map} +1 -1
- package/dist/static/assets/{channel-DK0lTvYw.js → channel-JDsHVrdu.js} +2 -2
- package/dist/static/assets/{channel-DK0lTvYw.js.map → channel-JDsHVrdu.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-BKIaLua2.js → chunk-4BX2VUAB-D_AEpkik.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-BKIaLua2.js.map → chunk-4BX2VUAB-D_AEpkik.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-DJzjYAfG.js → chunk-55IACEB6-3UliSZil.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-DJzjYAfG.js.map → chunk-55IACEB6-3UliSZil.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-BKrZorXR.js → chunk-B4BG7PRW-CCSPITb4.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-BKrZorXR.js.map → chunk-B4BG7PRW-CCSPITb4.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-T8vlHFzX.js → chunk-DI55MBZ5-C8yHXGlB.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-T8vlHFzX.js.map → chunk-DI55MBZ5-C8yHXGlB.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-Ck-wGXOH.js → chunk-FMBD7UC4-DxXHAkjy.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-Ck-wGXOH.js.map → chunk-FMBD7UC4-DxXHAkjy.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-DXEmgZy1.js → chunk-QN33PNHL-DCAYEM3a.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-DXEmgZy1.js.map → chunk-QN33PNHL-DCAYEM3a.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-skp0d7Z5.js → chunk-QZHKN3VN-DeUpec6F.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-skp0d7Z5.js.map → chunk-QZHKN3VN-DeUpec6F.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-BLPqXWiC.js → chunk-TZMSLE5B-CBqy05uj.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-BLPqXWiC.js.map → chunk-TZMSLE5B-CBqy05uj.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-BnL38CfP.js → classDiagram-2ON5EDUG-DNPFStZY.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-BnL38CfP.js.map → classDiagram-2ON5EDUG-DNPFStZY.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BnL38CfP.js → classDiagram-v2-WZHVMYZB-DNPFStZY.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BnL38CfP.js.map → classDiagram-v2-WZHVMYZB-DNPFStZY.js.map} +1 -1
- package/dist/static/assets/{clone-BizhJUyY.js → clone-BAGTZpbL.js} +2 -2
- package/dist/static/assets/{clone-BizhJUyY.js.map → clone-BAGTZpbL.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-BYkdVEyo.js → cose-bilkent-S5V4N54A-B9NEtdLi.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-BYkdVEyo.js.map → cose-bilkent-S5V4N54A-B9NEtdLi.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-Dx3MF6Vf.js → dagre-6UL2VRFP-BnofEgY-.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-Dx3MF6Vf.js.map → dagre-6UL2VRFP-BnofEgY-.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-D72iHgGT.js → diagram-PSM6KHXK-CXN3JGnX.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-D72iHgGT.js.map → diagram-PSM6KHXK-CXN3JGnX.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-TAdaDXCD.js → diagram-QEK2KX5R-Bpf_NUSv.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-TAdaDXCD.js.map → diagram-QEK2KX5R-Bpf_NUSv.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-CIHCjso7.js → diagram-S2PKOQOG-D_SIAoY9.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-CIHCjso7.js.map → diagram-S2PKOQOG-D_SIAoY9.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-UwmxzLFe.js → erDiagram-Q2GNP2WA-dzhjooSh.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-UwmxzLFe.js.map → erDiagram-Q2GNP2WA-dzhjooSh.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-BHMfjtLb.js → flowDiagram-NV44I4VS-BXhfqZju.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-BHMfjtLb.js.map → flowDiagram-NV44I4VS-BXhfqZju.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DgFZ2Tss.js → ganttDiagram-JELNMOA3-D05vcZ4f.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DgFZ2Tss.js.map → ganttDiagram-JELNMOA3-D05vcZ4f.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-Bx70pens.js → gitGraphDiagram-NY62KEGX-CQe5stSg.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-Bx70pens.js.map → gitGraphDiagram-NY62KEGX-CQe5stSg.js.map} +1 -1
- package/dist/static/assets/{graph-CTeLR7V9.js → graph-KwgPFpCM.js} +3 -3
- package/dist/static/assets/{graph-CTeLR7V9.js.map → graph-KwgPFpCM.js.map} +1 -1
- package/dist/static/assets/{index-Dk3Y5xFN.js → index-B2yxi4rE.js} +66 -54
- package/dist/static/assets/index-B2yxi4rE.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-BXuamYlp.js → infoDiagram-WHAUD3N6-BeYGZtD7.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-BXuamYlp.js.map → infoDiagram-WHAUD3N6-BeYGZtD7.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DlHDnf1C.js → journeyDiagram-XKPGCS4Q-Cds1EaPv.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DlHDnf1C.js.map → journeyDiagram-XKPGCS4Q-Cds1EaPv.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-CE78kpjk.js → kanban-definition-3W4ZIXB7-PVug-7Ew.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-CE78kpjk.js.map → kanban-definition-3W4ZIXB7-PVug-7Ew.js.map} +1 -1
- package/dist/static/assets/{layout-CwEDdoLZ.js → layout-CYmyvr8n.js} +5 -5
- package/dist/static/assets/{layout-CwEDdoLZ.js.map → layout-CYmyvr8n.js.map} +1 -1
- package/dist/static/assets/{linear-DySzt0_b.js → linear-DAZdg4CR.js} +2 -2
- package/dist/static/assets/{linear-DySzt0_b.js.map → linear-DAZdg4CR.js.map} +1 -1
- package/dist/static/assets/{min-BobJ0IGS.js → min-BFZBB1Eh.js} +3 -3
- package/dist/static/assets/{min-BobJ0IGS.js.map → min-BFZBB1Eh.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C6YHQOYr.js → mindmap-definition-VGOIOE7T-CwOzFU9Z.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C6YHQOYr.js.map → mindmap-definition-VGOIOE7T-CwOzFU9Z.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-CS3bw7nO.js → pieDiagram-ADFJNKIX-m3-_s56r.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-CS3bw7nO.js.map → pieDiagram-ADFJNKIX-m3-_s56r.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DA8KltS6.js → quadrantDiagram-AYHSOK5B-CgsN9Zih.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DA8KltS6.js.map → quadrantDiagram-AYHSOK5B-CgsN9Zih.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-gpRhELLx.js → requirementDiagram-UZGBJVZJ-gCVOVHjp.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-gpRhELLx.js.map → requirementDiagram-UZGBJVZJ-gCVOVHjp.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4V6BNsU.js → sankeyDiagram-TZEHDZUN-B2MQ4SbV.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4V6BNsU.js.map → sankeyDiagram-TZEHDZUN-B2MQ4SbV.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-D9FBgXQP.js → sequenceDiagram-WL72ISMW-DzKBb9NP.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-D9FBgXQP.js.map → sequenceDiagram-WL72ISMW-DzKBb9NP.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-D2ubI3pq.js → stateDiagram-FKZM4ZOC-CUis_SbN.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-D2ubI3pq.js.map → stateDiagram-FKZM4ZOC-CUis_SbN.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-rc_6AuIv.js → stateDiagram-v2-4FDKWEC3-DyrlNAib.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-rc_6AuIv.js.map → stateDiagram-v2-4FDKWEC3-DyrlNAib.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-CwSj73ze.js → timeline-definition-IT6M3QCI-Cbncr0Ri.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-CwSj73ze.js.map → timeline-definition-IT6M3QCI-Cbncr0Ri.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-D0n0ynwO.js → treemap-KMMF4GRG-WK9byIa9.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-D0n0ynwO.js.map → treemap-KMMF4GRG-WK9byIa9.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DMTyj-VZ.js → xychartDiagram-PRI3JC2R-B2Du-Xj7.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DMTyj-VZ.js.map → xychartDiagram-PRI3JC2R-B2Du-Xj7.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/builtins.js +1 -1
- package/dist/tools/context-health.js +7 -7
- package/dist/tools/manual/render.js +11 -3
- package/dist/tools/manual/schema.js +18 -6
- package/dist/tools/prompts/codex_style_tools/en/errors.md +7 -5
- package/dist/tools/prompts/codex_style_tools/en/index.md +13 -3
- package/dist/tools/prompts/codex_style_tools/en/principles.md +10 -0
- package/dist/tools/prompts/codex_style_tools/en/scenarios.md +2 -0
- package/dist/tools/prompts/codex_style_tools/en/tools.md +12 -8
- package/dist/tools/prompts/codex_style_tools/zh/errors.md +7 -5
- package/dist/tools/prompts/codex_style_tools/zh/index.md +13 -3
- package/dist/tools/prompts/codex_style_tools/zh/principles.md +10 -0
- package/dist/tools/prompts/codex_style_tools/zh/scenarios.md +2 -0
- package/dist/tools/prompts/codex_style_tools/zh/tools.md +12 -8
- package/dist/tools/prompts/control/en/errors.md +7 -5
- package/dist/tools/prompts/control/en/index.md +13 -3
- package/dist/tools/prompts/control/en/principles.md +10 -0
- package/dist/tools/prompts/control/en/scenarios.md +2 -0
- package/dist/tools/prompts/control/en/tools.md +12 -8
- package/dist/tools/prompts/control/zh/errors.md +7 -5
- package/dist/tools/prompts/control/zh/index.md +13 -3
- package/dist/tools/prompts/control/zh/principles.md +10 -0
- package/dist/tools/prompts/control/zh/scenarios.md +2 -0
- package/dist/tools/prompts/control/zh/tools.md +12 -8
- package/dist/tools/prompts/mcp_admin/en/errors.md +7 -5
- package/dist/tools/prompts/mcp_admin/en/index.md +13 -3
- package/dist/tools/prompts/mcp_admin/en/principles.md +10 -0
- package/dist/tools/prompts/mcp_admin/en/scenarios.md +2 -0
- package/dist/tools/prompts/mcp_admin/en/tools.md +12 -8
- package/dist/tools/prompts/mcp_admin/zh/errors.md +7 -5
- package/dist/tools/prompts/mcp_admin/zh/index.md +13 -3
- package/dist/tools/prompts/mcp_admin/zh/principles.md +10 -0
- package/dist/tools/prompts/mcp_admin/zh/scenarios.md +2 -0
- package/dist/tools/prompts/mcp_admin/zh/tools.md +12 -8
- package/dist/tools/prompts/memory/en/errors.md +7 -5
- package/dist/tools/prompts/memory/en/index.md +13 -3
- package/dist/tools/prompts/memory/en/principles.md +10 -0
- package/dist/tools/prompts/memory/en/scenarios.md +2 -0
- package/dist/tools/prompts/memory/en/tools.md +12 -8
- package/dist/tools/prompts/memory/zh/errors.md +7 -5
- package/dist/tools/prompts/memory/zh/index.md +13 -3
- package/dist/tools/prompts/memory/zh/principles.md +10 -0
- package/dist/tools/prompts/memory/zh/scenarios.md +2 -0
- package/dist/tools/prompts/memory/zh/tools.md +12 -8
- package/dist/tools/prompts/os/en/errors.md +7 -5
- package/dist/tools/prompts/os/en/index.md +13 -3
- package/dist/tools/prompts/os/en/principles.md +10 -0
- package/dist/tools/prompts/os/en/scenarios.md +2 -0
- package/dist/tools/prompts/os/en/tools.md +12 -8
- package/dist/tools/prompts/os/zh/errors.md +7 -5
- package/dist/tools/prompts/os/zh/index.md +13 -3
- package/dist/tools/prompts/os/zh/principles.md +10 -0
- package/dist/tools/prompts/os/zh/scenarios.md +2 -0
- package/dist/tools/prompts/os/zh/tools.md +12 -8
- package/dist/tools/prompts/team_memory/en/errors.md +7 -5
- package/dist/tools/prompts/team_memory/en/index.md +13 -3
- package/dist/tools/prompts/team_memory/en/principles.md +10 -0
- package/dist/tools/prompts/team_memory/en/scenarios.md +2 -0
- package/dist/tools/prompts/team_memory/en/tools.md +12 -8
- package/dist/tools/prompts/team_memory/zh/errors.md +7 -5
- package/dist/tools/prompts/team_memory/zh/index.md +13 -3
- package/dist/tools/prompts/team_memory/zh/principles.md +10 -0
- package/dist/tools/prompts/team_memory/zh/scenarios.md +2 -0
- package/dist/tools/prompts/team_memory/zh/tools.md +12 -8
- package/dist/tools/prompts/team_mgmt/en/errors.md +7 -5
- package/dist/tools/prompts/team_mgmt/en/index.md +13 -3
- package/dist/tools/prompts/team_mgmt/en/principles.md +10 -0
- package/dist/tools/prompts/team_mgmt/en/scenarios.md +2 -0
- package/dist/tools/prompts/team_mgmt/en/tools.md +12 -8
- package/dist/tools/prompts/team_mgmt/zh/errors.md +7 -5
- package/dist/tools/prompts/team_mgmt/zh/index.md +13 -3
- package/dist/tools/prompts/team_mgmt/zh/principles.md +10 -0
- package/dist/tools/prompts/team_mgmt/zh/scenarios.md +2 -0
- package/dist/tools/prompts/team_mgmt/zh/tools.md +12 -8
- package/dist/tools/prompts/ws_mod/en/errors.md +7 -5
- package/dist/tools/prompts/ws_mod/en/index.md +13 -3
- package/dist/tools/prompts/ws_mod/en/principles.md +10 -0
- package/dist/tools/prompts/ws_mod/en/scenarios.md +2 -0
- package/dist/tools/prompts/ws_mod/en/tools.md +12 -8
- package/dist/tools/prompts/ws_mod/zh/errors.md +7 -5
- package/dist/tools/prompts/ws_mod/zh/index.md +13 -3
- package/dist/tools/prompts/ws_mod/zh/principles.md +10 -0
- package/dist/tools/prompts/ws_mod/zh/scenarios.md +2 -0
- package/dist/tools/prompts/ws_mod/zh/tools.md +12 -8
- package/dist/tools/toolset-manual.js +2 -4
- 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-Dk3Y5xFN.js.map +0 -1
package/dist/cli/manual.js
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.main = main;
|
|
16
|
+
require("../tools/builtins");
|
|
16
17
|
const render_1 = require("../tools/manual/render");
|
|
17
18
|
const spec_1 = require("../tools/manual/spec");
|
|
18
19
|
const registry_1 = require("../tools/registry");
|
|
19
|
-
require("../tools/builtins");
|
|
20
20
|
function printUsage() {
|
|
21
21
|
console.log('Usage: dominds manual <toolsetId> [--topic <name>|--topics <a,b,c>|--all] [--lang <en|zh>]');
|
|
22
22
|
console.log(' dominds manual --list');
|
|
@@ -134,7 +134,10 @@ function toAvailableToolNames(toolsetId) {
|
|
|
134
134
|
const toolset = (0, registry_1.getToolset)(toolsetId) ?? [];
|
|
135
135
|
const names = new Set();
|
|
136
136
|
for (const tool of toolset) {
|
|
137
|
-
if (tool &&
|
|
137
|
+
if (tool &&
|
|
138
|
+
typeof tool === 'object' &&
|
|
139
|
+
'type' in tool &&
|
|
140
|
+
tool.type === 'func') {
|
|
138
141
|
names.add(tool.name);
|
|
139
142
|
}
|
|
140
143
|
}
|
package/dist/dialog-run-state.js
CHANGED
|
@@ -37,6 +37,19 @@ const activeRunsByDialogKey = new Map();
|
|
|
37
37
|
function setRunStateBroadcaster(fn) {
|
|
38
38
|
broadcastToClients = fn;
|
|
39
39
|
}
|
|
40
|
+
function syncRunControlCountsAfterActiveRunChange(trigger, dialogId) {
|
|
41
|
+
void (async () => {
|
|
42
|
+
try {
|
|
43
|
+
await broadcastRunControlCountsSnapshot();
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
log.warn('Failed to broadcast run-control counts snapshot after active-run change', err, {
|
|
47
|
+
dialogId: dialogId.valueOf(),
|
|
48
|
+
trigger,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
})();
|
|
52
|
+
}
|
|
40
53
|
function classifyRunControlBucket(state) {
|
|
41
54
|
if (!state)
|
|
42
55
|
return 'none';
|
|
@@ -110,10 +123,14 @@ function createActiveRun(dialogId) {
|
|
|
110
123
|
}
|
|
111
124
|
const run = { abortController: new AbortController() };
|
|
112
125
|
activeRunsByDialogKey.set(key, run);
|
|
126
|
+
syncRunControlCountsAfterActiveRunChange('create_active_run', dialogId);
|
|
113
127
|
return run.abortController.signal;
|
|
114
128
|
}
|
|
115
129
|
function clearActiveRun(dialogId) {
|
|
116
|
-
activeRunsByDialogKey.delete(dialogId.key());
|
|
130
|
+
const deleted = activeRunsByDialogKey.delete(dialogId.key());
|
|
131
|
+
if (!deleted)
|
|
132
|
+
return;
|
|
133
|
+
syncRunControlCountsAfterActiveRunChange('clear_active_run', dialogId);
|
|
117
134
|
}
|
|
118
135
|
function getStopRequestedReason(dialogId) {
|
|
119
136
|
return activeRunsByDialogKey.get(dialogId.key())?.stopRequested;
|
|
@@ -27,20 +27,30 @@ This document provides detailed implementation specifications for the Dominds di
|
|
|
27
27
|
## Terminology
|
|
28
28
|
|
|
29
29
|
This chapter defines the implementation-facing terms used throughout this document.
|
|
30
|
-
For bilingual / user-facing naming conventions (mainline dialog / sideline dialog; tellasker / tellaskee), see [`dominds-terminology.md`](./dominds-terminology.md).
|
|
30
|
+
For bilingual / user-facing naming conventions (mainline dialog / sideline dialog; tellasker dialog / tellaskee dialog), see [`dominds-terminology.md`](./dominds-terminology.md).
|
|
31
31
|
For Taskdoc package structure and encapsulation rules, see [`encapsulated-taskdoc.md`](./encapsulated-taskdoc.md).
|
|
32
32
|
|
|
33
33
|
### Supdialog
|
|
34
34
|
|
|
35
35
|
A **supdialog** (short for "super dialog") is the supdialog in a hierarchical dialog relationship. It orchestrates and manages subdialogs, providing context, objectives, and guidance while receiving results, questions, and escalations from its subdialogs. The supdialog maintains the overall task context and determines when subdialogs are no longer needed.
|
|
36
36
|
|
|
37
|
+
Note: **supdialog** is a structural parent in the dialog hierarchy. It is not the same as the **tellasker dialog** (the caller for the current Tellask). For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog; for TYPE B/C, the tellasker dialog may be a different dialog.
|
|
38
|
+
|
|
37
39
|
A supdialog may receive **TellaskBack** from its subdialogs during their task execution. When a subdialog needs guidance or additional context, it can Tellask back via `tellaskBack({ tellaskContent: "..." })` (TYPE A / `TellaskBack` / 回问诉请), which provides responses that feed back into the subdialog's context.
|
|
38
40
|
|
|
39
41
|
### Subdialog
|
|
40
42
|
|
|
41
43
|
A **subdialog** is a specialized dialog spawned by a supdialog to handle specific subtasks. Subdialogs operate with fresh context, focusing on targeted objectives while maintaining a communication link back to their supdialog.
|
|
42
44
|
|
|
43
|
-
**TellaskBack**: A subdialog can Tellask its
|
|
45
|
+
**TellaskBack**: A subdialog can Tellask its **tellasker dialog** to request clarification during task execution. In TYPE A, the tellasker dialog is the direct supdialog. This allows the subdialog to ask questions and receive guidance while maintaining its own context and progress.
|
|
46
|
+
|
|
47
|
+
### Tellasker dialog / Tellaskee dialog (caller roles)
|
|
48
|
+
|
|
49
|
+
A **tellasker dialog** is the dialog that issued the current Tellask (the caller). A **tellaskee dialog** is the dialog handling that Tellask (this dialog). These are **call roles**, not hierarchy:
|
|
50
|
+
|
|
51
|
+
- For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog.
|
|
52
|
+
- For TYPE B/C, the tellasker dialog may be a different dialog (root dialog or another sideline dialog).
|
|
53
|
+
- Responses route to the **current tellasker dialog** recorded in `assignmentFromSup`.
|
|
44
54
|
|
|
45
55
|
### Main Dialog (Root Dialog)
|
|
46
56
|
|
|
@@ -48,7 +58,7 @@ The **main dialog** (also called **root dialog**) is the top-level dialog in a d
|
|
|
48
58
|
|
|
49
59
|
### Q4H (Questions for Human)
|
|
50
60
|
|
|
51
|
-
A **Q4H** is a pending question raised by a dialog (main or subdialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the
|
|
61
|
+
A **Q4H** is a pending question raised by a dialog (main or subdialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded.
|
|
52
62
|
|
|
53
63
|
### Subdialog Index (subdlg.yaml)
|
|
54
64
|
|
|
@@ -141,14 +151,14 @@ This section documents the three distinct types of teammate Tellasks in the Domi
|
|
|
141
151
|
|
|
142
152
|
```mermaid
|
|
143
153
|
flowchart TD
|
|
144
|
-
M[LLM emits tellaskSessionless({ targetAgentId: "mention", tellaskContent: "..." })] --> Q{Is this a subdialog
|
|
154
|
+
M[LLM emits tellaskSessionless({ targetAgentId: "mention", tellaskContent: "..." })] --> Q{Is this a subdialog Tellasking its direct supdialog (tellasker dialog for TYPE A)?}
|
|
145
155
|
Q -- yes --> A[TYPE A: TellaskBack<br/>(`TellaskBack` / 回问诉请)<br/>Primary: tellaskBack({ tellaskContent: "..." }) (NO sessionSlug)]
|
|
146
156
|
Q -- no --> T{Is sessionSlug present?}
|
|
147
157
|
T -- yes --> B[TYPE B: Registered subdialog Tellask<br/>(`Tellask Session` / 长线诉请)<br/>tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })]
|
|
148
158
|
T -- no --> C[TYPE C: Transient subdialog Tellask<br/>(`Fresh Tellask` / 一次性诉请)<br/>tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })]
|
|
149
159
|
```
|
|
150
160
|
|
|
151
|
-
### TYPE A:
|
|
161
|
+
### TYPE A: TellaskBack (Type A / `TellaskBack` / 回问诉请)
|
|
152
162
|
|
|
153
163
|
**Primary syntax**: `tellaskBack({ tellaskContent: "..." })` (NO `sessionSlug`) — `tellaskBack({ tellaskContent: "..." }) sessionSlug ...` is a **syntax error**
|
|
154
164
|
|
|
@@ -157,21 +167,35 @@ flowchart TD
|
|
|
157
167
|
**Behavior**:
|
|
158
168
|
|
|
159
169
|
1. Current subdialog **suspends**
|
|
160
|
-
2. Driver switches to drive the **
|
|
161
|
-
3.
|
|
162
|
-
4. Subdialog **resumes** with
|
|
170
|
+
2. Driver switches to drive the **tellasker dialog** (direct supdialog for TYPE A; uses `subdialog.supdialog` reference)
|
|
171
|
+
3. Tellasker dialog response flows back to the subdialog
|
|
172
|
+
4. Subdialog **resumes** with tellasker dialog's response in context
|
|
163
173
|
|
|
164
174
|
**Key Characteristics**:
|
|
165
175
|
|
|
166
176
|
- Uses `subdialog.supdialog` reference (no registry lookup)
|
|
167
177
|
- No registration - supdialog relationship is inherent
|
|
168
|
-
- Supdialog is always the direct parent in the hierarchy
|
|
178
|
+
- Supdialog is always the direct parent in the hierarchy (the tellasker dialog for TYPE A)
|
|
169
179
|
- `tellaskBack({ tellaskContent: "..." })` is the canonical Type A syntax: it always routes to the tellasker (the dialog that issued the current Tellask).
|
|
170
180
|
- This matters especially when the supdialog’s `agentId` is identical to the subdialog’s `agentId` (common when a sideline
|
|
171
181
|
is created via `freshBootsReasoning({ tellaskContent: "..." })`), where an explicit `tellaskBack({ tellaskContent: "..." })` is easier to get wrong by accident.
|
|
172
182
|
- The explicit `tellaskBack({ tellaskContent: "..." })` form is accepted as a semantic fallback for backwards compatibility, but is more
|
|
173
183
|
error-prone in FBR/self-subdialog cases.
|
|
174
184
|
|
|
185
|
+
**Sideline delivery rule (normative)**:
|
|
186
|
+
|
|
187
|
+
- A sideline dialog may reply directly to the tellasker dialog **only when all assigned goals are complete**.
|
|
188
|
+
- If any goal is incomplete or critical context is missing, it MUST issue `tellaskBack({ tellaskContent: "..." })` to request clarification or next-step confirmation before proceeding.
|
|
189
|
+
- **FBR exception**: FBR sideline dialogs are tellask-free (no `tellaskBack`); they must list missing context and return.
|
|
190
|
+
|
|
191
|
+
**Content markers (first line required)**:
|
|
192
|
+
|
|
193
|
+
- `【tellaskBack】` — required when asking the tellasker dialog for clarification / next-step confirmation.
|
|
194
|
+
- `【最终完成】` — required for final delivery when all goals are complete.
|
|
195
|
+
- FBR-only: `【FBR-直接回复】` or `【FBR-仅推理】` for FBR sideline responses.
|
|
196
|
+
|
|
197
|
+
Note: no extra "Status: ..." line is required; the first-line marker is the stage reminder.
|
|
198
|
+
|
|
175
199
|
**Example**:
|
|
176
200
|
|
|
177
201
|
```
|
|
@@ -214,7 +238,7 @@ headline text is ignored for tellaskSession parsing.
|
|
|
214
238
|
|
|
215
239
|
**Current Caller Tracking (important for reuse):**
|
|
216
240
|
|
|
217
|
-
When a registered subdialog is Tellasked again (same `agentId!sessionSlug`), the caller can be a **different dialog** (
|
|
241
|
+
When a registered subdialog is Tellasked again (same `agentId!sessionSlug`), the caller can be a **different dialog** (root dialog or another sideline dialog). On every Type B Tellask, the subdialog’s metadata is updated with:
|
|
218
242
|
|
|
219
243
|
- The **current caller dialog ID** (so responses route back to the _latest_ caller)
|
|
220
244
|
- The **Tellask info** (headline/body, origin role, origin member, callId)
|
|
@@ -279,7 +303,7 @@ Result (second call):
|
|
|
279
303
|
2. Create **NEW subdialog** with the specified agentId
|
|
280
304
|
3. Drive the new subdialog:
|
|
281
305
|
- For general Type C, the subdialog is full-fledged (supcalls, teammate Tellasks, tools per config).
|
|
282
|
-
- For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools;
|
|
306
|
+
- For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools; no Tellasks).
|
|
283
307
|
4. Subdialog response flows back to parent
|
|
284
308
|
5. Parent **resumes** with subdialog's response
|
|
285
309
|
|
|
@@ -287,7 +311,7 @@ Result (second call):
|
|
|
287
311
|
|
|
288
312
|
- **No registry lookup** - always creates a new subdialog
|
|
289
313
|
- **Not registered** - no persistence across Tellasks
|
|
290
|
-
- The subdialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and
|
|
314
|
+
- The subdialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and tellask-free (see `fbr.md`).
|
|
291
315
|
- Only difference from TYPE B: no registry lookup/resume capability
|
|
292
316
|
- Used for one-off, independent tasks
|
|
293
317
|
|
|
@@ -336,7 +360,7 @@ The Dominds dialog system is built on four interconnected core mechanisms that w
|
|
|
336
360
|
```mermaid
|
|
337
361
|
flowchart TD
|
|
338
362
|
H[Dialog hierarchy<br/>(root ↔ subdialogs)] <--> S[Subdialog supply<br/>(responses, pending list, registry)]
|
|
339
|
-
H --> Q[Q4H (
|
|
363
|
+
H --> Q[Q4H (askHuman({ tellaskContent: "..." }))<br/>(q4h.yaml index)]
|
|
340
364
|
S --> Q
|
|
341
365
|
|
|
342
366
|
Q --> UI[Frontend Q4H panel<br/>(questions_count_update)]
|
|
@@ -350,7 +374,7 @@ flowchart TD
|
|
|
350
374
|
|
|
351
375
|
### Key Design Principles
|
|
352
376
|
|
|
353
|
-
1. **Q4H Index in `q4h.yaml`**: Q4H questions are indexed in `q4h.yaml` (as an index, not source of truth) and cleared by mental clarity operations. The actual question content is in the dialog's messages where the
|
|
377
|
+
1. **Q4H Index in `q4h.yaml`**: Q4H questions are indexed in `q4h.yaml` (as an index, not source of truth) and cleared by mental clarity operations. The actual question content is in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded. They do not survive `clear_mind`.
|
|
354
378
|
|
|
355
379
|
2. **Hierarchical Q4H**: Any dialog in the hierarchy can raise Q4H on its own right (root dialog or subdialog). Questions are indexed in the dialog that asked them, not passed upward.
|
|
356
380
|
|
|
@@ -364,7 +388,7 @@ flowchart TD
|
|
|
364
388
|
|
|
365
389
|
7. **State Preservation Contract**:
|
|
366
390
|
- `clear_mind`: Clears messages, clears Q4H index, preserves reminders, preserves registry
|
|
367
|
-
- Subdialog completion: Writes response to
|
|
391
|
+
- Subdialog completion: Writes response to the current tellasker dialog, removes from pending list (registry unchanged)
|
|
368
392
|
- Subdialog declared dead: marks runState dead and removes its Type B registry entry; same slug can be reused as a fresh sideline dialog
|
|
369
393
|
- Q4H answer: Clears the answered question from index, continues the dialog
|
|
370
394
|
|
|
@@ -383,7 +407,7 @@ Q4H (Questions for Human) is the mechanism by which dialogs can suspend executio
|
|
|
383
407
|
* HumanQuestion - index entry persisted in q4h.yaml per dialog
|
|
384
408
|
* NOTE: This is an INDEX, not the source of truth. The actual question
|
|
385
409
|
* content is in the dialog's messages where the askHuman() Tellask was recorded
|
|
386
|
-
* (invoked via
|
|
410
|
+
* (invoked via askHuman({ tellaskContent: "..." })).
|
|
387
411
|
*/
|
|
388
412
|
interface HumanQuestion {
|
|
389
413
|
readonly id: string; // Unique identifier (UUID) - matches message ID
|
|
@@ -395,7 +419,7 @@ interface HumanQuestion {
|
|
|
395
419
|
|
|
396
420
|
**Storage Location**: `<dialog-path>/q4h.yaml` - serves as an index for quick lookup
|
|
397
421
|
|
|
398
|
-
**Source of Truth**: The actual
|
|
422
|
+
**Source of Truth**: The actual `askHuman({ tellaskContent: "..." })` Tellask is stored in the dialog's messages (course JSONL files), where the question was asked.
|
|
399
423
|
|
|
400
424
|
### Q4H Mechanism Flow
|
|
401
425
|
|
|
@@ -419,24 +443,23 @@ sequenceDiagram
|
|
|
419
443
|
|
|
420
444
|
### When Does a Dialog Raise Q4H?
|
|
421
445
|
|
|
422
|
-
Q4H is raised when the
|
|
446
|
+
Q4H is raised when the `askHuman({ tellaskContent: "..." })` tellask function is invoked by ANY dialog (root or subdialog) on its own right:
|
|
423
447
|
|
|
424
448
|
```typescript
|
|
425
|
-
// From main/llm/driver.ts
|
|
426
|
-
const isQ4H =
|
|
449
|
+
// From main/llm/driver-v2/tellask-bridge.ts
|
|
450
|
+
const isQ4H = callName === 'askHuman';
|
|
427
451
|
```
|
|
428
452
|
|
|
429
453
|
**Invocation Pattern**:
|
|
430
454
|
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
!?<question body content>
|
|
455
|
+
```typescript
|
|
456
|
+
askHuman({ tellaskContent: '<question headline>\n<question body content>' });
|
|
434
457
|
```
|
|
435
458
|
|
|
436
459
|
### Q4H Recording Process
|
|
437
460
|
|
|
438
461
|
```typescript
|
|
439
|
-
// When
|
|
462
|
+
// When askHuman({ tellaskContent: "..." }) is detected as a teammate Tellask
|
|
440
463
|
async function recordQuestionForHuman(
|
|
441
464
|
dlg: Dialog,
|
|
442
465
|
mentionList: string,
|
|
@@ -554,7 +577,7 @@ sequenceDiagram
|
|
|
554
577
|
Sup->>Sub: creates subdialog (Type B or C)
|
|
555
578
|
Note over Sup: Supdialog is blocked on pending subdialogs
|
|
556
579
|
|
|
557
|
-
Sub->>WS: emits
|
|
580
|
+
Sub->>WS: emits askHuman({ tellaskContent: "..." }) question
|
|
558
581
|
WS-->>UI: questions_count_update
|
|
559
582
|
Note over Sub: Subdialog cannot proceed until answered
|
|
560
583
|
|
|
@@ -607,11 +630,11 @@ flowchart TD
|
|
|
607
630
|
|
|
608
631
|
### Subdialog Response Supply Mechanism
|
|
609
632
|
|
|
610
|
-
**Core Principle**: Subdialogs supply responses to
|
|
633
|
+
**Core Principle**: Subdialogs supply responses to the **current tellasker dialog's** context via persistence, not callbacks (the tellasker is the direct supdialog for TYPE A; for TYPE B/C it may be a different dialog).
|
|
611
634
|
|
|
612
635
|
```mermaid
|
|
613
636
|
sequenceDiagram
|
|
614
|
-
participant Sup as
|
|
637
|
+
participant Sup as Tellasker dialog
|
|
615
638
|
participant Driver as Backend driver
|
|
616
639
|
participant Sub as Subdialog
|
|
617
640
|
participant Store as Persistence
|
|
@@ -923,10 +946,25 @@ interface RegistryMethods {
|
|
|
923
946
|
**Context Inheritance**: New subdialogs automatically receive:
|
|
924
947
|
|
|
925
948
|
- Reference to the same rtws (runtime workspace) Taskdoc (recommended: `tasks/feature-auth.tsk/`); `dlg.taskDocPath` is fixed at dialog creation and never reassigned
|
|
926
|
-
-
|
|
949
|
+
- Tellasker dialog Tellask context (mentionList + tellaskContent) explaining their purpose
|
|
927
950
|
- Access to shared team memories
|
|
928
951
|
- Access to their agent's individual memories
|
|
929
952
|
|
|
953
|
+
### Subdialog course header (required)
|
|
954
|
+
|
|
955
|
+
At the start of every subdialog course, the runtime must prepend a role header to the assignment prompt:
|
|
956
|
+
|
|
957
|
+
- EN: `You are the responder (tellaskee dialog) for this dialog; the tellasker dialog is @xxx (the current caller).`
|
|
958
|
+
- ZH: `你是当前被诉请者对话(tellaskee dialog)的主理人;诉请者对话(tellasker dialog)为 @xxx(当前发起本次诉请)。`
|
|
959
|
+
|
|
960
|
+
**FBR special handling**: FBR is a self-subdialog and must keep a dedicated header to avoid confusion:
|
|
961
|
+
|
|
962
|
+
- EN (example): `This is an FBR sideline dialog; the tellasker dialog is @xxx (may be the same agent).`
|
|
963
|
+
- ZH(示例): `这是一次 FBR 支线对话;诉请者对话为 @xxx(可能与当前对话同一 agent)。`
|
|
964
|
+
|
|
965
|
+
**Insertion point**: prefer a single insertion point by updating `formatAssignmentFromSupdialog()` (covers `dialog.ts`, `tellask-bridge`, and `agent-priming`).
|
|
966
|
+
Frontend twin must stay in sync: `dominds/webapp/src/shared/utils/inter-dialog-format.ts`.
|
|
967
|
+
|
|
930
968
|
**Storage**: All subdialogs are stored flat under the main dialog's (root dialog's) `subdialogs/` directory, regardless of nesting depth.
|
|
931
969
|
|
|
932
970
|
**Navigation**: Each subdialog maintains a reference to its parent, enabling upward traversal to the main dialog.
|
|
@@ -950,9 +988,9 @@ interface RegistryMethods {
|
|
|
950
988
|
|
|
951
989
|
### Communication Patterns
|
|
952
990
|
|
|
953
|
-
**Upward Communication**: Subdialogs communicate results, questions, and escalations to their
|
|
991
|
+
**Upward Communication**: Subdialogs communicate results, questions, and escalations to their **tellasker dialog** (the caller).
|
|
954
992
|
|
|
955
|
-
- **Clarification Requests (TYPE A / `TellaskBack`)**: A subdialog may Tellask its
|
|
993
|
+
- **Clarification Requests (TYPE A / `TellaskBack`)**: A subdialog may Tellask its tellasker dialog to request clarification while working on its subtask. For TYPE A, the tellasker dialog is the direct supdialog. The tellasker dialog provides guidance, and the subdialog continues with updated context.
|
|
956
994
|
- **Subtask Response**: When a subdialog produces a final "saying" content block (no pending Q4H), that message is treated as the response to the **current caller** recorded in `assignmentFromSup` (root or another subdialog). This keeps responses aligned with the most recent Tellask site.
|
|
957
995
|
- **Q4H Escalation**: If a subdialog has Q4H, it suspends. The user can answer via the UI, which triggers continuation of the subdialog only.
|
|
958
996
|
- **Registered Subdialogs (TYPE B / `Tellask Session`)**: A parent can resume a previously created registered subdialog, enabling ongoing task continuation.
|
|
@@ -1045,7 +1083,7 @@ To make the UI **faithfully reflect the original generation order**, and to ensu
|
|
|
1045
1083
|
|
|
1046
1084
|
**Teammate Tellask Capability**: Agents can invoke all three types of teammate Tellasks:
|
|
1047
1085
|
|
|
1048
|
-
- TYPE A / `TellaskBack`: Tellask supdialog for
|
|
1086
|
+
- TYPE A / `TellaskBack`: Tellask the tellasker dialog for clarification (direct supdialog for TYPE A)
|
|
1049
1087
|
- TYPE B / `Tellask Session`: Tellask/resume registered subdialogs
|
|
1050
1088
|
- TYPE C / `Fresh Tellask`: Spawn transient subdialogs
|
|
1051
1089
|
|
|
@@ -1096,10 +1134,10 @@ rendered in different markdown viewers.
|
|
|
1096
1134
|
sequenceDiagram
|
|
1097
1135
|
participant Sub as Subdialog
|
|
1098
1136
|
participant Driver as Backend driver
|
|
1099
|
-
participant Sup as
|
|
1137
|
+
participant Sup as Tellasker dialog (direct supdialog)
|
|
1100
1138
|
|
|
1101
1139
|
Sub->>Driver: emits `tellaskBack({ tellaskContent: "..." })` + question
|
|
1102
|
-
Driver->>Sup: drive
|
|
1140
|
+
Driver->>Sup: drive tellasker dialog to answer
|
|
1103
1141
|
Sup-->>Driver: response text
|
|
1104
1142
|
Driver-->>Sub: resume subdialog with response in context
|
|
1105
1143
|
```
|
|
@@ -1148,7 +1186,7 @@ sequenceDiagram
|
|
|
1148
1186
|
|
|
1149
1187
|
```mermaid
|
|
1150
1188
|
flowchart TD
|
|
1151
|
-
A[
|
|
1189
|
+
A[askHuman({ tellaskContent: "..." }) Tellask emitted] --> B[Append HumanQuestion entry to q4h.yaml]
|
|
1152
1190
|
B --> C[Emit questions_count_update]
|
|
1153
1191
|
C --> D[UI shows Q4H badge / list]
|
|
1154
1192
|
D --> E{How is it cleared?}
|
|
@@ -1173,7 +1211,7 @@ sequenceDiagram
|
|
|
1173
1211
|
|
|
1174
1212
|
Sup->>Sub: create subdialog (Type B or C)
|
|
1175
1213
|
Note over Sup,Sub: Supdialog becomes blocked on pending subdialogs
|
|
1176
|
-
Sub->>WS: emits
|
|
1214
|
+
Sub->>WS: emits askHuman({ tellaskContent: "..." }) question (Q4H)
|
|
1177
1215
|
WS-->>UI: questions_count_update (global)
|
|
1178
1216
|
|
|
1179
1217
|
Note over Sub: Subdialog cannot proceed until answered
|
|
@@ -1202,7 +1240,7 @@ sequenceDiagram
|
|
|
1202
1240
|
participant Store as Persistence (q4h.yaml)
|
|
1203
1241
|
participant UI as Frontend
|
|
1204
1242
|
|
|
1205
|
-
User->>Main:
|
|
1243
|
+
User->>Main: askHuman({ tellaskContent: "..." }) question
|
|
1206
1244
|
Main->>Store: recordQuestionForHuman()
|
|
1207
1245
|
Main-->>UI: questions_count_update
|
|
1208
1246
|
Main-->>Main: suspend root drive loop
|