dominds 1.4.2 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/README.zh.md +24 -0
- package/dist/apps/app-json.js +38 -3
- package/dist/apps/dialog-run-controls.js +4 -0
- package/dist/apps/enabled-apps.js +8 -1
- package/dist/apps/installed-file.js +207 -0
- package/dist/apps/run-app-json.js +6 -6
- package/dist/apps/runtime-port.js +91 -0
- package/dist/apps/runtime.js +316 -68
- package/dist/apps-host/client.js +153 -3
- package/dist/apps-host/host.js +339 -2
- package/dist/apps-host/ipc-types.js +215 -30
- package/dist/cli/install.js +21 -1
- package/dist/dialog-fork.js +609 -0
- package/dist/dialog.js +2 -2
- package/dist/docs/agent-priming.md +38 -0
- package/dist/docs/agent-priming.zh.md +34 -0
- package/dist/docs/app-constitution.md +153 -2
- package/dist/docs/app-constitution.zh.md +153 -2
- package/dist/docs/dialog-persistence.md +31 -0
- package/dist/docs/dialog-persistence.zh.md +31 -0
- package/dist/docs/dialog-system.md +29 -0
- package/dist/docs/dialog-system.zh.md +29 -0
- package/dist/docs/kernel-app-architecture.md +286 -0
- package/dist/docs/kernel-app-architecture.zh.md +285 -0
- package/dist/llm/defaults.yaml +16 -0
- package/dist/llm/driver-entry.js +28 -0
- package/dist/llm/driver-v2/context-health.js +121 -0
- package/dist/llm/driver-v2/context.js +56 -0
- package/dist/llm/driver-v2/core.js +1545 -0
- package/dist/llm/driver-v2/index.js +26 -0
- package/dist/llm/driver-v2/orchestrator.js +158 -0
- package/dist/llm/driver-v2/policy.js +129 -0
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2/round.js +366 -0
- package/dist/llm/driver-v2/runtime-utils.js +365 -0
- package/dist/llm/driver-v2/saying-events.js +20 -0
- package/dist/llm/driver-v2/subdialog-txn.js +42 -0
- package/dist/llm/driver-v2/supdialog-response.js +400 -0
- package/dist/llm/driver-v2/tellask-bridge.js +1148 -0
- package/dist/llm/driver-v2/types.js +10 -0
- package/dist/llm/driver-v2-ref-only/context-health.js +121 -0
- package/dist/llm/driver-v2-ref-only/context.js +17 -0
- package/dist/llm/driver-v2-ref-only/core.js +1710 -0
- package/dist/llm/driver-v2-ref-only/index.js +26 -0
- package/dist/llm/driver-v2-ref-only/orchestrator.js +158 -0
- package/dist/llm/driver-v2-ref-only/policy.js +129 -0
- package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2-ref-only/round.js +366 -0
- package/dist/llm/driver-v2-ref-only/runtime-utils.js +473 -0
- package/dist/llm/driver-v2-ref-only/saying-events.js +18 -0
- package/dist/llm/driver-v2-ref-only/subdialog-txn.js +42 -0
- package/dist/llm/driver-v2-ref-only/supdialog-response.js +453 -0
- package/dist/llm/driver-v2-ref-only/tellask-bridge.js +1178 -0
- package/dist/llm/driver-v2-ref-only/types.js +10 -0
- package/dist/llm/gen/anthropic.js +68 -15
- package/dist/llm/gen/codex.js +59 -10
- package/dist/llm/gen/openai-compatible.js +38 -9
- package/dist/llm/gen/openai.js +58 -11
- package/dist/llm/gen/tool-output-limit.js +50 -0
- package/dist/llm/kernel-driver/subdialog.js +23 -12
- package/dist/llm/kernel-driver/tellask-special.js +20 -4
- package/dist/minds/load.js +7 -0
- package/dist/persistence.js +216 -30
- package/dist/priming.js +171 -18
- package/dist/server/api-routes.js +82 -0
- package/dist/server/setup-routes.js +15 -0
- package/dist/shared/types/storage.js +77 -0
- package/dist/static/assets/{_basePickBy-B2o4z1Hf.js → _basePickBy-B-A5XrWM.js} +3 -3
- package/dist/static/assets/{_basePickBy-B2o4z1Hf.js.map → _basePickBy-B-A5XrWM.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-CLmcxjdl.js → _baseUniq-BANLb0cu.js} +2 -2
- package/dist/static/assets/{_baseUniq-CLmcxjdl.js.map → _baseUniq-BANLb0cu.js.map} +1 -1
- package/dist/static/assets/{arc-CymD_KN7.js → arc-CYZYnojf.js} +2 -2
- package/dist/static/assets/{arc-CymD_KN7.js.map → arc-CYZYnojf.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DJQfSJUH.js → architectureDiagram-VXUJARFQ-Cxf4pmYG.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DJQfSJUH.js.map → architectureDiagram-VXUJARFQ-Cxf4pmYG.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-pHVz60D0.js → blockDiagram-VD42YOAC-wvs0G30c.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-pHVz60D0.js.map → blockDiagram-VD42YOAC-wvs0G30c.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-B0WnCfAT.js → c4Diagram-YG6GDRKO-BKFNexn4.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-B0WnCfAT.js.map → c4Diagram-YG6GDRKO-BKFNexn4.js.map} +1 -1
- package/dist/static/assets/{channel-CX9BlKil.js → channel-_1qpxJWy.js} +2 -2
- package/dist/static/assets/{channel-CX9BlKil.js.map → channel-_1qpxJWy.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-lXArRj3o.js → chunk-4BX2VUAB-BIdC0phm.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-lXArRj3o.js.map → chunk-4BX2VUAB-BIdC0phm.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-CdqwynH9.js → chunk-55IACEB6-BNvGenQ9.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-CdqwynH9.js.map → chunk-55IACEB6-BNvGenQ9.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-Y-uXcJst.js → chunk-B4BG7PRW-jmf-1Wv7.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-Y-uXcJst.js.map → chunk-B4BG7PRW-jmf-1Wv7.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-C5xSbRST.js → chunk-DI55MBZ5-nmEmcikR.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-C5xSbRST.js.map → chunk-DI55MBZ5-nmEmcikR.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-5uefwCjI.js → chunk-FMBD7UC4-kGysaq_j.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-5uefwCjI.js.map → chunk-FMBD7UC4-kGysaq_j.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-DzWVcvpI.js → chunk-QN33PNHL-8JwMLFIJ.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-DzWVcvpI.js.map → chunk-QN33PNHL-8JwMLFIJ.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-BrrvAZdP.js → chunk-QZHKN3VN-DZleEj00.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-BrrvAZdP.js.map → chunk-QZHKN3VN-DZleEj00.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-DyKOlPTY.js → chunk-TZMSLE5B-CXxl_uqH.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-DyKOlPTY.js.map → chunk-TZMSLE5B-CXxl_uqH.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-FCrnlCWC.js → classDiagram-2ON5EDUG-C-7R0QB6.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-FCrnlCWC.js.map → classDiagram-2ON5EDUG-C-7R0QB6.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-FCrnlCWC.js → classDiagram-v2-WZHVMYZB-C-7R0QB6.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-FCrnlCWC.js.map → classDiagram-v2-WZHVMYZB-C-7R0QB6.js.map} +1 -1
- package/dist/static/assets/{clone-BlI81KqZ.js → clone-BwOKYSj8.js} +2 -2
- package/dist/static/assets/{clone-BlI81KqZ.js.map → clone-BwOKYSj8.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-yM7S2atz.js → cose-bilkent-S5V4N54A-BCBalM7p.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-yM7S2atz.js.map → cose-bilkent-S5V4N54A-BCBalM7p.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BcweuZHt.js → dagre-6UL2VRFP-uV2ekQoj.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BcweuZHt.js.map → dagre-6UL2VRFP-uV2ekQoj.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-D4-QwLW1.js → diagram-PSM6KHXK-D-ZMog1-.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-D4-QwLW1.js.map → diagram-PSM6KHXK-D-ZMog1-.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-BVbuejJn.js → diagram-QEK2KX5R-BThSELUH.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-BVbuejJn.js.map → diagram-QEK2KX5R-BThSELUH.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-pB6N6Tq_.js → diagram-S2PKOQOG-Di-YN5cd.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-pB6N6Tq_.js.map → diagram-S2PKOQOG-Di-YN5cd.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLKmthuw.js → erDiagram-Q2GNP2WA-lBZ9DITn.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLKmthuw.js.map → erDiagram-Q2GNP2WA-lBZ9DITn.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-BsBhWukh.js → flowDiagram-NV44I4VS-C_60PNQR.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-BsBhWukh.js.map → flowDiagram-NV44I4VS-C_60PNQR.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-Debz-J-C.js → ganttDiagram-JELNMOA3-Dvqq-VHJ.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-Debz-J-C.js.map → ganttDiagram-JELNMOA3-Dvqq-VHJ.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BnAPFBGR.js → gitGraphDiagram-V2S2FVAM-BTj8orRe.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BnAPFBGR.js.map → gitGraphDiagram-V2S2FVAM-BTj8orRe.js.map} +1 -1
- package/dist/static/assets/{graph-DbzWiBNK.js → graph-BqCzR2Nl.js} +3 -3
- package/dist/static/assets/{graph-DbzWiBNK.js.map → graph-BqCzR2Nl.js.map} +1 -1
- package/dist/static/assets/{index-B-8J28g7.js → index-DrTqAfFy.js} +386 -201
- package/dist/static/assets/index-DrTqAfFy.js.map +1 -0
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CZ5hWoxV.js → infoDiagram-HS3SLOUP-DlC6wsrv.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CZ5hWoxV.js.map → infoDiagram-HS3SLOUP-DlC6wsrv.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CKN3oSxk.js → journeyDiagram-XKPGCS4Q-Dg_RgtQX.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CKN3oSxk.js.map → journeyDiagram-XKPGCS4Q-Dg_RgtQX.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BQCMklfJ.js → kanban-definition-3W4ZIXB7-DuGS3lId.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BQCMklfJ.js.map → kanban-definition-3W4ZIXB7-DuGS3lId.js.map} +1 -1
- package/dist/static/assets/{layout-C5B58szc.js → layout-FDz2bstZ.js} +5 -5
- package/dist/static/assets/{layout-C5B58szc.js.map → layout-FDz2bstZ.js.map} +1 -1
- package/dist/static/assets/{linear-_32fut6G.js → linear-CzsdvPGb.js} +2 -2
- package/dist/static/assets/{linear-_32fut6G.js.map → linear-CzsdvPGb.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C_goMzjx.js → mindmap-definition-VGOIOE7T-WsAF5UNp.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C_goMzjx.js.map → mindmap-definition-VGOIOE7T-WsAF5UNp.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BQ2n0cOB.js → pieDiagram-ADFJNKIX-DJpRJ5ei.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BQ2n0cOB.js.map → pieDiagram-ADFJNKIX-DJpRJ5ei.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BLg7_neg.js → quadrantDiagram-AYHSOK5B-CMyIzTkY.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BLg7_neg.js.map → quadrantDiagram-AYHSOK5B-CMyIzTkY.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DwkJt0zi.js → requirementDiagram-UZGBJVZJ-D_yqVXGu.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DwkJt0zi.js.map → requirementDiagram-UZGBJVZJ-D_yqVXGu.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DmxmatUB.js → sankeyDiagram-TZEHDZUN-D4-cF724.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DmxmatUB.js.map → sankeyDiagram-TZEHDZUN-D4-cF724.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KHU_eApU.js → sequenceDiagram-WL72ISMW-B7J3gWYN.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KHU_eApU.js.map → sequenceDiagram-WL72ISMW-B7J3gWYN.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-B3DBCxAL.js → stateDiagram-FKZM4ZOC-DwEYYCcu.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-B3DBCxAL.js.map → stateDiagram-FKZM4ZOC-DwEYYCcu.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-C-uIk7gh.js → stateDiagram-v2-4FDKWEC3-D4LOOQV5.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-C-uIk7gh.js.map → stateDiagram-v2-4FDKWEC3-D4LOOQV5.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-SysEcQCC.js → timeline-definition-IT6M3QCI-CyG-TJ_A.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-SysEcQCC.js.map → timeline-definition-IT6M3QCI-CyG-TJ_A.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-d0AbKEc4.js → treemap-GDKQZRPO-yY4GiKmU.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-d0AbKEc4.js.map → treemap-GDKQZRPO-yY4GiKmU.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CmSQMxUh.js → xychartDiagram-PRI3JC2R-5TYN_q15.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CmSQMxUh.js.map → xychartDiagram-PRI3JC2R-5TYN_q15.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/team.js +33 -4
- package/dist/tools/app-reminders.js +280 -0
- package/dist/tools/prompts/memory/en/errors.md +155 -0
- package/dist/tools/prompts/memory/en/index.md +47 -0
- package/dist/tools/prompts/memory/en/principles.md +79 -0
- package/dist/tools/prompts/memory/en/scenarios.md +174 -0
- package/dist/tools/prompts/memory/en/tools.md +154 -0
- package/dist/tools/prompts/memory/zh/errors.md +155 -0
- package/dist/tools/prompts/memory/zh/index.md +47 -0
- package/dist/tools/prompts/memory/zh/principles.md +79 -0
- package/dist/tools/prompts/memory/zh/scenarios.md +174 -0
- package/dist/tools/prompts/memory/zh/tools.md +154 -0
- package/dist/tools/ripgrep.js +197 -63
- package/package.json +2 -2
- package/dist/static/assets/index-B-8J28g7.js.map +0 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DRIVER_V2_IMPLEMENTATION_STATE = void 0;
|
|
4
|
+
exports.driveDialogStream = driveDialogStream;
|
|
5
|
+
exports.emitSayingEvents = emitSayingEvents;
|
|
6
|
+
exports.supplyResponseToSupdialog = supplyResponseToSupdialog;
|
|
7
|
+
exports.runBackendDriver = runBackendDriver;
|
|
8
|
+
exports.restoreDialogHierarchy = restoreDialogHierarchy;
|
|
9
|
+
const orchestrator_1 = require("./orchestrator");
|
|
10
|
+
const restore_dialog_hierarchy_1 = require("./restore-dialog-hierarchy");
|
|
11
|
+
exports.DRIVER_V2_IMPLEMENTATION_STATE = 'active';
|
|
12
|
+
async function driveDialogStream(...args) {
|
|
13
|
+
return await (0, orchestrator_1.driveDialogStream)(...args);
|
|
14
|
+
}
|
|
15
|
+
async function emitSayingEvents(...args) {
|
|
16
|
+
return await (0, orchestrator_1.emitSayingEvents)(...args);
|
|
17
|
+
}
|
|
18
|
+
async function supplyResponseToSupdialog(...args) {
|
|
19
|
+
return await (0, orchestrator_1.supplyResponseToSupdialog)(...args);
|
|
20
|
+
}
|
|
21
|
+
function runBackendDriver() {
|
|
22
|
+
return (0, orchestrator_1.runBackendDriver)();
|
|
23
|
+
}
|
|
24
|
+
async function restoreDialogHierarchy(...args) {
|
|
25
|
+
return await (0, restore_dialog_hierarchy_1.restoreDialogHierarchy)(...args);
|
|
26
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.driveDialogStream = driveDialogStream;
|
|
4
|
+
exports.emitSayingEvents = emitSayingEvents;
|
|
5
|
+
exports.supplyResponseToSupdialog = supplyResponseToSupdialog;
|
|
6
|
+
exports.runBackendDriver = runBackendDriver;
|
|
7
|
+
const dialog_global_registry_1 = require("../../dialog-global-registry");
|
|
8
|
+
const log_1 = require("../../log");
|
|
9
|
+
const persistence_1 = require("../../persistence");
|
|
10
|
+
const round_1 = require("./round");
|
|
11
|
+
const saying_events_1 = require("./saying-events");
|
|
12
|
+
const supdialog_response_1 = require("./supdialog-response");
|
|
13
|
+
const types_1 = require("./types");
|
|
14
|
+
async function driveDialogStream(...driveArgs) {
|
|
15
|
+
const runtime = (0, types_1.createDriverV2RuntimeState)();
|
|
16
|
+
return await (0, round_1.executeDriveRound)({
|
|
17
|
+
runtime,
|
|
18
|
+
driveArgs,
|
|
19
|
+
scheduleDrive: (dialog, options) => {
|
|
20
|
+
void driveDialogStream(dialog, options.humanPrompt, options.waitInQue, options.driveOptions);
|
|
21
|
+
},
|
|
22
|
+
driveDialog: async (dialog, options) => {
|
|
23
|
+
await driveDialogStream(dialog, options.humanPrompt, options.waitInQue, options.driveOptions);
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async function emitSayingEvents(...args) {
|
|
28
|
+
const [dlg, content] = args;
|
|
29
|
+
return await (0, saying_events_1.emitSayingEvents)(dlg, content);
|
|
30
|
+
}
|
|
31
|
+
async function supplyResponseToSupdialog(...args) {
|
|
32
|
+
const [parentDialog, subdialogId, responseText, callType, callId, status, calleeResponseRef] = args;
|
|
33
|
+
return await (0, supdialog_response_1.supplyResponseToSupdialogV2)({
|
|
34
|
+
parentDialog,
|
|
35
|
+
subdialogId,
|
|
36
|
+
responseText,
|
|
37
|
+
callType,
|
|
38
|
+
callId,
|
|
39
|
+
status,
|
|
40
|
+
calleeResponseRef,
|
|
41
|
+
scheduleDrive: (dialog, options) => {
|
|
42
|
+
void driveDialogStream(dialog, options.humanPrompt, options.waitInQue, options.driveOptions);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function formatDriveTriggerForLog(trigger) {
|
|
47
|
+
return {
|
|
48
|
+
action: trigger.action,
|
|
49
|
+
rootId: trigger.rootId,
|
|
50
|
+
entryFound: trigger.entryFound,
|
|
51
|
+
previousNeedsDrive: trigger.previousNeedsDrive,
|
|
52
|
+
nextNeedsDrive: trigger.nextNeedsDrive,
|
|
53
|
+
source: trigger.source,
|
|
54
|
+
reason: trigger.reason,
|
|
55
|
+
emittedAtMs: trigger.emittedAtMs,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function driveQueuedDialogsOnce() {
|
|
59
|
+
const dialogsToDrive = dialog_global_registry_1.globalDialogRegistry.getDialogsNeedingDrive();
|
|
60
|
+
for (const rootDialog of dialogsToDrive) {
|
|
61
|
+
try {
|
|
62
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(rootDialog.id, 'running');
|
|
63
|
+
const runStateKind = latest?.runState?.kind;
|
|
64
|
+
if (runStateKind === 'interrupted' || runStateKind === 'proceeding_stop_requested') {
|
|
65
|
+
dialog_global_registry_1.globalDialogRegistry.markNotNeedingDrive(rootDialog.id.rootId, {
|
|
66
|
+
source: 'driver_v2_backend_loop',
|
|
67
|
+
reason: `run_state_blocked:${runStateKind}`,
|
|
68
|
+
});
|
|
69
|
+
await persistence_1.DialogPersistence.setNeedsDrive(rootDialog.id, false, rootDialog.status);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (!(await rootDialog.canDrive())) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
await driveDialogStream(rootDialog, undefined, true);
|
|
76
|
+
const status = await rootDialog.getSuspensionStatus();
|
|
77
|
+
const shouldStayQueued = rootDialog.hasUpNext() || !status.canDrive;
|
|
78
|
+
if (shouldStayQueued) {
|
|
79
|
+
dialog_global_registry_1.globalDialogRegistry.markNeedsDrive(rootDialog.id.rootId, {
|
|
80
|
+
source: 'driver_v2_backend_loop',
|
|
81
|
+
reason: rootDialog.hasUpNext() ? 'post_drive_upnext_pending' : 'post_drive_suspended',
|
|
82
|
+
});
|
|
83
|
+
await persistence_1.DialogPersistence.setNeedsDrive(rootDialog.id, true, rootDialog.status);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
dialog_global_registry_1.globalDialogRegistry.markNotNeedingDrive(rootDialog.id.rootId, {
|
|
87
|
+
source: 'driver_v2_backend_loop',
|
|
88
|
+
reason: 'post_drive_idle',
|
|
89
|
+
});
|
|
90
|
+
await persistence_1.DialogPersistence.setNeedsDrive(rootDialog.id, false, rootDialog.status);
|
|
91
|
+
}
|
|
92
|
+
const lastTrigger = dialog_global_registry_1.globalDialogRegistry.getLastDriveTrigger(rootDialog.id.rootId);
|
|
93
|
+
const lastTriggerAgeMs = lastTrigger !== undefined ? Math.max(0, Date.now() - lastTrigger.emittedAtMs) : undefined;
|
|
94
|
+
if (status.subdialogs) {
|
|
95
|
+
log_1.log.debug(`Dialog ${rootDialog.id.rootId} suspended, waiting for subdialogs`, undefined, {
|
|
96
|
+
rootId: rootDialog.id.rootId,
|
|
97
|
+
waitingQ4H: status.q4h,
|
|
98
|
+
waitingSubdialogs: status.subdialogs,
|
|
99
|
+
hasQueuedUpNext: rootDialog.hasUpNext(),
|
|
100
|
+
lastDriveTrigger: lastTrigger
|
|
101
|
+
? {
|
|
102
|
+
action: lastTrigger.action,
|
|
103
|
+
source: lastTrigger.source,
|
|
104
|
+
reason: lastTrigger.reason,
|
|
105
|
+
emittedAtMs: lastTrigger.emittedAtMs,
|
|
106
|
+
ageMs: lastTriggerAgeMs,
|
|
107
|
+
entryFound: lastTrigger.entryFound,
|
|
108
|
+
previousNeedsDrive: lastTrigger.previousNeedsDrive,
|
|
109
|
+
nextNeedsDrive: lastTrigger.nextNeedsDrive,
|
|
110
|
+
}
|
|
111
|
+
: null,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (status.q4h) {
|
|
115
|
+
log_1.log.debug(`Dialog ${rootDialog.id.rootId} awaiting Q4H answer`, undefined, {
|
|
116
|
+
rootId: rootDialog.id.rootId,
|
|
117
|
+
waitingQ4H: status.q4h,
|
|
118
|
+
waitingSubdialogs: status.subdialogs,
|
|
119
|
+
hasQueuedUpNext: rootDialog.hasUpNext(),
|
|
120
|
+
lastDriveTrigger: lastTrigger
|
|
121
|
+
? {
|
|
122
|
+
action: lastTrigger.action,
|
|
123
|
+
source: lastTrigger.source,
|
|
124
|
+
reason: lastTrigger.reason,
|
|
125
|
+
emittedAtMs: lastTrigger.emittedAtMs,
|
|
126
|
+
ageMs: lastTriggerAgeMs,
|
|
127
|
+
entryFound: lastTrigger.entryFound,
|
|
128
|
+
previousNeedsDrive: lastTrigger.previousNeedsDrive,
|
|
129
|
+
nextNeedsDrive: lastTrigger.nextNeedsDrive,
|
|
130
|
+
}
|
|
131
|
+
: null,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
log_1.log.error(`Error driving dialog ${rootDialog.id.rootId}:`, err, undefined, {
|
|
137
|
+
dialogId: rootDialog.id.rootId,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function runBackendDriver() {
|
|
143
|
+
return (async () => {
|
|
144
|
+
while (true) {
|
|
145
|
+
try {
|
|
146
|
+
await driveQueuedDialogsOnce();
|
|
147
|
+
const trigger = await dialog_global_registry_1.globalDialogRegistry.waitForDriveTrigger();
|
|
148
|
+
log_1.log.debug('Backend driver woke from drive trigger event', undefined, {
|
|
149
|
+
trigger: formatDriveTriggerForLog(trigger),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
catch (loopErr) {
|
|
153
|
+
log_1.log.error('Error in backend driver loop:', loopErr);
|
|
154
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
})();
|
|
158
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildDriverV2Policy = buildDriverV2Policy;
|
|
4
|
+
exports.validateDriverV2PolicyInvariants = validateDriverV2PolicyInvariants;
|
|
5
|
+
exports.resolveDriverV2PolicyViolationKind = resolveDriverV2PolicyViolationKind;
|
|
6
|
+
const dialog_1 = require("../../dialog");
|
|
7
|
+
const system_prompt_parts_1 = require("../../minds/system-prompt-parts");
|
|
8
|
+
function isToollessFbrSelfSubdialog(dlg) {
|
|
9
|
+
if (!(dlg instanceof dialog_1.SubDialog))
|
|
10
|
+
return false;
|
|
11
|
+
return dlg.assignmentFromSup.callName === 'freshBootsReasoning';
|
|
12
|
+
}
|
|
13
|
+
function mergeModelParams(base, overlay) {
|
|
14
|
+
if (!base && !overlay)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (!base)
|
|
17
|
+
return overlay;
|
|
18
|
+
if (!overlay)
|
|
19
|
+
return base;
|
|
20
|
+
return {
|
|
21
|
+
max_tokens: overlay.max_tokens ?? base.max_tokens,
|
|
22
|
+
codex: { ...(base.codex ?? {}), ...(overlay.codex ?? {}) },
|
|
23
|
+
openai: { ...(base.openai ?? {}), ...(overlay.openai ?? {}) },
|
|
24
|
+
anthropic: { ...(base.anthropic ?? {}), ...(overlay.anthropic ?? {}) },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function buildFbrSystemPrompt(language) {
|
|
28
|
+
const prefix = language === 'zh'
|
|
29
|
+
? [
|
|
30
|
+
'# 扪心自问(FBR)支线对话',
|
|
31
|
+
'',
|
|
32
|
+
'- 你正在处理一次由 `freshBootsReasoning` 函数触发的 FBR 支线对话。',
|
|
33
|
+
'- 诉请正文是主要任务上下文;不要假设能访问上游对话历史。',
|
|
34
|
+
'- 若使用可恢复会话,你可以使用本支线对话自身的 tellaskSession 历史作为显式上下文。',
|
|
35
|
+
'- 若诉请正文缺少关键上下文,请在输出中列出缺失信息与阻塞原因。',
|
|
36
|
+
'- 当前 FBR 为技术性禁函数工具模式:不得发起任何函数调用(包括 tellaskBack / tellask / tellaskSessionless / askHuman)。',
|
|
37
|
+
].join('\n')
|
|
38
|
+
: [
|
|
39
|
+
'# Fresh Boots Reasoning (FBR) sideline dialog',
|
|
40
|
+
'',
|
|
41
|
+
'- This is an FBR sideline dialog triggered via the `freshBootsReasoning` function.',
|
|
42
|
+
'- The tellask body is the primary task context; do not assume access to upstream dialog history.',
|
|
43
|
+
'- If this is a resumable session, you may use this sideline dialog’s own tellaskSession history as explicit context.',
|
|
44
|
+
'- If the tellask body is missing critical context, list what is missing and why it blocks reasoning.',
|
|
45
|
+
'- This FBR turn is in technical no-function mode: do not emit any function call (including tellaskBack / tellask / tellaskSessionless / askHuman).',
|
|
46
|
+
].join('\n');
|
|
47
|
+
return prefix.trim();
|
|
48
|
+
}
|
|
49
|
+
function buildDriverV2Policy(args) {
|
|
50
|
+
const { dlg, agent, systemPrompt, agentTools, language } = args;
|
|
51
|
+
if (!isToollessFbrSelfSubdialog(dlg)) {
|
|
52
|
+
return {
|
|
53
|
+
mode: 'default',
|
|
54
|
+
effectiveAgent: agent,
|
|
55
|
+
effectiveSystemPrompt: systemPrompt,
|
|
56
|
+
effectiveAgentTools: agentTools,
|
|
57
|
+
prependedContextMessages: [],
|
|
58
|
+
tellaskPolicy: 'allow_any',
|
|
59
|
+
allowFunctionCalls: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const effectiveAgent = Object.assign(Object.create(agent), {
|
|
63
|
+
model_params: mergeModelParams(agent.model_params, agent.fbr_model_params),
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
mode: 'fbr_toolless',
|
|
67
|
+
effectiveAgent,
|
|
68
|
+
effectiveSystemPrompt: buildFbrSystemPrompt(language),
|
|
69
|
+
effectiveAgentTools: [],
|
|
70
|
+
prependedContextMessages: [
|
|
71
|
+
{
|
|
72
|
+
type: 'environment_msg',
|
|
73
|
+
role: 'user',
|
|
74
|
+
content: (0, system_prompt_parts_1.buildNoToolsNotice)(language),
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
tellaskPolicy: 'deny_all',
|
|
78
|
+
allowFunctionCalls: false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function validateDriverV2PolicyInvariants(policy, language) {
|
|
82
|
+
if (policy.mode !== 'fbr_toolless') {
|
|
83
|
+
return { ok: true };
|
|
84
|
+
}
|
|
85
|
+
if (policy.effectiveAgentTools.length > 0) {
|
|
86
|
+
return { ok: false, detail: 'FBR effectiveAgentTools must be empty.' };
|
|
87
|
+
}
|
|
88
|
+
if (policy.allowFunctionCalls) {
|
|
89
|
+
return { ok: false, detail: 'FBR allowFunctionCalls must be false.' };
|
|
90
|
+
}
|
|
91
|
+
if (policy.tellaskPolicy !== 'deny_all') {
|
|
92
|
+
return { ok: false, detail: 'FBR tellaskPolicy must be deny_all.' };
|
|
93
|
+
}
|
|
94
|
+
const expectedNoToolsNotice = (0, system_prompt_parts_1.buildNoToolsNotice)(language);
|
|
95
|
+
if (policy.prependedContextMessages.length !== 1) {
|
|
96
|
+
return { ok: false, detail: 'FBR must prepend exactly one no-tools notice message.' };
|
|
97
|
+
}
|
|
98
|
+
const [notice] = policy.prependedContextMessages;
|
|
99
|
+
if (!notice ||
|
|
100
|
+
notice.type !== 'environment_msg' ||
|
|
101
|
+
notice.role !== 'user' ||
|
|
102
|
+
notice.content !== expectedNoToolsNotice) {
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
detail: 'FBR prepended notice must exactly match buildNoToolsNotice(language).',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return { ok: true };
|
|
109
|
+
}
|
|
110
|
+
function hasTellaskPolicyViolation(policy, tellaskCallCount) {
|
|
111
|
+
if (policy.tellaskPolicy === 'allow_any') {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return tellaskCallCount > 0;
|
|
115
|
+
}
|
|
116
|
+
function resolveDriverV2PolicyViolationKind(args) {
|
|
117
|
+
const tellaskViolation = hasTellaskPolicyViolation(args.policy, args.tellaskCallCount);
|
|
118
|
+
const toolViolation = !args.policy.allowFunctionCalls && args.functionCallCount > 0;
|
|
119
|
+
if (tellaskViolation && toolViolation) {
|
|
120
|
+
return 'tellask_and_tool';
|
|
121
|
+
}
|
|
122
|
+
if (tellaskViolation) {
|
|
123
|
+
return 'tellask';
|
|
124
|
+
}
|
|
125
|
+
if (toolViolation) {
|
|
126
|
+
return 'tool';
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.restoreDialogHierarchy = restoreDialogHierarchy;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const dialog_1 = require("../../dialog");
|
|
10
|
+
const dialog_global_registry_1 = require("../../dialog-global-registry");
|
|
11
|
+
const dialog_instance_registry_1 = require("../../dialog-instance-registry");
|
|
12
|
+
const log_1 = require("../../log");
|
|
13
|
+
const persistence_1 = require("../../persistence");
|
|
14
|
+
async function restoreDialogHierarchy(rootDialogId, status = 'running') {
|
|
15
|
+
try {
|
|
16
|
+
const rootDialogIdent = new dialog_1.DialogID(rootDialogId);
|
|
17
|
+
const rootMeta = await persistence_1.DialogPersistence.loadRootDialogMetadata(rootDialogIdent, status);
|
|
18
|
+
if (rootMeta?.supdialogId) {
|
|
19
|
+
throw new Error(`Expected root dialog ${rootDialogId} but found subdialog metadata with supdialogId: ${rootMeta.supdialogId}`);
|
|
20
|
+
}
|
|
21
|
+
const rootDialog = await (0, dialog_instance_registry_1.getOrRestoreRootDialog)(rootDialogId, status);
|
|
22
|
+
if (!rootDialog) {
|
|
23
|
+
throw new Error(`Failed to restore dialog hierarchy for ${rootDialogId} from status ${status}`);
|
|
24
|
+
}
|
|
25
|
+
dialog_global_registry_1.globalDialogRegistry.register(rootDialog);
|
|
26
|
+
const subdialogs = new Map();
|
|
27
|
+
const rootPath = persistence_1.DialogPersistence.getRootDialogPath(rootDialogIdent, status);
|
|
28
|
+
const subdialogsPath = path_1.default.join(rootPath, 'subdialogs');
|
|
29
|
+
let allSubdialogIds = [];
|
|
30
|
+
try {
|
|
31
|
+
const entries = await fs_1.default.promises.readdir(subdialogsPath, { withFileTypes: true });
|
|
32
|
+
allSubdialogIds = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const code = typeof err === 'object' && err !== null && 'code' in err
|
|
36
|
+
? err.code
|
|
37
|
+
: undefined;
|
|
38
|
+
if (code !== 'ENOENT') {
|
|
39
|
+
log_1.log.warn(`Failed to read subdialogs directory: ${subdialogsPath}, returning empty array`, err);
|
|
40
|
+
}
|
|
41
|
+
allSubdialogIds = [];
|
|
42
|
+
}
|
|
43
|
+
for (const subdialogId of allSubdialogIds) {
|
|
44
|
+
const restoredSubdialogId = new dialog_1.DialogID(subdialogId, rootDialog.id.rootId);
|
|
45
|
+
const dialog = await (0, dialog_instance_registry_1.ensureDialogLoaded)(rootDialog, restoredSubdialogId, status);
|
|
46
|
+
if (dialog && dialog.id.selfId !== dialog.id.rootId) {
|
|
47
|
+
subdialogs.set(subdialogId, dialog);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let totalMessages = rootDialog.msgs.length;
|
|
51
|
+
let totalCourses = rootDialog.currentCourse;
|
|
52
|
+
for (const dialog of subdialogs.values()) {
|
|
53
|
+
totalMessages += dialog.msgs.length;
|
|
54
|
+
if (dialog.currentCourse > totalCourses) {
|
|
55
|
+
totalCourses = dialog.currentCourse;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const summary = {
|
|
59
|
+
totalMessages,
|
|
60
|
+
totalCourses,
|
|
61
|
+
completionStatus: 'incomplete',
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
rootDialog,
|
|
65
|
+
subdialogs,
|
|
66
|
+
summary,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
log_1.log.error(`Failed to restore dialog hierarchy for ${rootDialogId}:`, error);
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|