dominds 1.24.4 → 1.25.1
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 +48 -1
- package/README.zh.md +48 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +22 -0
- package/dist/dialog-display-state.d.ts +4 -4
- package/dist/dialog-display-state.js +28 -10
- package/dist/dialog-drive-work.js +5 -0
- package/dist/dialog-global-registry.d.ts +9 -8
- package/dist/dialog-global-registry.js +39 -38
- package/dist/dialog-instance-registry.js +7 -0
- package/dist/dialog-interruption.d.ts +2 -0
- package/dist/dialog-interruption.js +6 -0
- package/dist/dialog.d.ts +9 -9
- package/dist/dialog.js +82 -56
- package/dist/docs/design.md +4 -0
- package/dist/docs/design.zh.md +4 -0
- package/dist/docs/dialog-system.md +7 -7
- package/dist/docs/dialog-system.zh.md +4 -4
- package/dist/docs/dlg-drive-algo.zh.md +544 -0
- package/dist/docs/roadmap.md +2 -0
- package/dist/docs/roadmap.zh.md +2 -0
- package/dist/llm/gen/mock.d.ts +2 -2
- package/dist/llm/gen/mock.js +2 -2
- package/dist/llm/kernel-driver/drive.js +100 -101
- package/dist/llm/kernel-driver/engine.d.ts +1 -1
- package/dist/llm/kernel-driver/flow.js +687 -205
- package/dist/llm/kernel-driver/idle-reminder-wake.js +1 -1
- package/dist/llm/kernel-driver/loop.js +131 -61
- package/dist/llm/kernel-driver/runtime.js +1 -1
- package/dist/llm/kernel-driver/sideDialog.d.ts +1 -1
- package/dist/llm/kernel-driver/sideDialog.js +21 -15
- package/dist/llm/kernel-driver/tellask-special.js +25 -29
- package/dist/llm/kernel-driver/types.d.ts +7 -28
- package/dist/llm/kernel-driver/types.js +0 -1
- package/dist/minds/system-prompt-parts.js +4 -4
- package/dist/persistence-errors.d.ts +1 -1
- package/dist/persistence.d.ts +61 -25
- package/dist/persistence.js +658 -342
- package/dist/priming.js +116 -35
- package/dist/recovery/open-generation-recovery.d.ts +1 -0
- package/dist/recovery/{proceeding-drive.js → open-generation-recovery.js} +25 -25
- package/dist/recovery/reply-delivery-recovery.d.ts +3 -0
- package/dist/recovery/{reply-special.js → reply-delivery-recovery.js} +12 -12
- package/dist/runtime/driver-messages.d.ts +1 -1
- package/dist/runtime/driver-messages.js +37 -19
- package/dist/server/api-routes.js +18 -0
- package/dist/server/server-core.d.ts +1 -0
- package/dist/server/server-core.js +11 -0
- package/dist/server/websocket-handler.js +6 -5
- package/dist/server.js +4 -4
- package/dist/shared-reminders.d.ts +11 -3
- package/dist/shared-reminders.js +62 -34
- package/dist/tool.d.ts +1 -1
- package/dist/tool.js +1 -1
- package/dist/tools/app-reminders.js +8 -2
- package/dist/tools/builtins.js +4 -2
- package/dist/tools/ctrl.js +34 -109
- package/dist/tools/os.js +6 -6
- package/dist/tools/prompts/control/en/errors.md +5 -19
- package/dist/tools/prompts/control/en/index.md +5 -4
- package/dist/tools/prompts/control/en/principles.md +23 -19
- package/dist/tools/prompts/control/en/scenarios.md +17 -11
- package/dist/tools/prompts/control/en/tools.md +4 -6
- package/dist/tools/prompts/control/zh/errors.md +5 -19
- package/dist/tools/prompts/control/zh/index.md +5 -4
- package/dist/tools/prompts/control/zh/principles.md +22 -19
- package/dist/tools/prompts/control/zh/scenarios.md +17 -11
- package/dist/tools/prompts/control/zh/tools.md +4 -6
- package/dist/tools/prompts/personal_memory/en/index.md +1 -1
- package/dist/tools/prompts/personal_memory/en/principles.md +2 -2
- package/dist/tools/prompts/personal_memory/zh/index.md +1 -1
- package/dist/tools/prompts/personal_memory/zh/principles.md +2 -2
- package/dist/tools/prompts/skills/en/errors.md +2 -0
- package/dist/tools/prompts/skills/en/index.md +1 -0
- package/dist/tools/prompts/skills/en/tools.md +6 -0
- package/dist/tools/prompts/skills/zh/errors.md +2 -0
- package/dist/tools/prompts/skills/zh/index.md +1 -0
- package/dist/tools/prompts/skills/zh/tools.md +6 -0
- package/dist/tools/ripgrep.js +386 -44
- package/dist/tools/skills.d.ts +1 -0
- package/dist/tools/skills.js +81 -1
- package/dist/tools/team_mgmt.js +46 -10
- package/package.json +5 -5
- package/webapp/dist/assets/{_basePickBy-ZLV93S3E.js → _basePickBy-CG55qWp2.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-ZLV93S3E.js.map → _basePickBy-CG55qWp2.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-D0wSOJ06.js → _baseUniq-Dd4UGB2O.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-D0wSOJ06.js.map → _baseUniq-Dd4UGB2O.js.map} +1 -1
- package/webapp/dist/assets/{arc-BHclbMTS.js → arc-C2qiF4r3.js} +2 -2
- package/webapp/dist/assets/{arc-BHclbMTS.js.map → arc-C2qiF4r3.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CK99gE_D.js → architectureDiagram-2XIMDMQ5-DQ4Z8fy_.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CK99gE_D.js.map → architectureDiagram-2XIMDMQ5-DQ4Z8fy_.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-fE5MBTEU.js → blockDiagram-WCTKOSBZ-CPvOuMZA.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-fE5MBTEU.js.map → blockDiagram-WCTKOSBZ-CPvOuMZA.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BSLyPyoU.js → c4Diagram-IC4MRINW-DElaFpnJ.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BSLyPyoU.js.map → c4Diagram-IC4MRINW-DElaFpnJ.js.map} +1 -1
- package/webapp/dist/assets/{channel-DSvMpp-a.js → channel-BR7mZa90.js} +2 -2
- package/webapp/dist/assets/{channel-DSvMpp-a.js.map → channel-BR7mZa90.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-OXEX170k.js → chunk-4BX2VUAB-DTmXCBYX.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-OXEX170k.js.map → chunk-4BX2VUAB-DTmXCBYX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-BFQ_spQD.js → chunk-55IACEB6-DeBB4aJ4.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-BFQ_spQD.js.map → chunk-55IACEB6-DeBB4aJ4.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-CbQ2BBPs.js → chunk-FMBD7UC4-CXpgeev4.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-CbQ2BBPs.js.map → chunk-FMBD7UC4-CXpgeev4.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-C4P1mjCL.js → chunk-JSJVCQXG-DWfckfhO.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-C4P1mjCL.js.map → chunk-JSJVCQXG-DWfckfhO.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-BMd-daMY.js → chunk-KX2RTZJC-DWG_wpHB.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-BMd-daMY.js.map → chunk-KX2RTZJC-DWG_wpHB.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-B_ZhWMXR.js → chunk-NQ4KR5QH-DRcsqoac.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-B_ZhWMXR.js.map → chunk-NQ4KR5QH-DRcsqoac.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-Cbf92xIw.js → chunk-QZHKN3VN-B9GPAJ2s.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-Cbf92xIw.js.map → chunk-QZHKN3VN-B9GPAJ2s.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-PtH-blkK.js → chunk-WL4C6EOR-V3Fq1ULq.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-PtH-blkK.js.map → chunk-WL4C6EOR-V3Fq1ULq.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Dc3ncaD0.js → classDiagram-VBA2DB6C-DspG486Z.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Dc3ncaD0.js.map → classDiagram-VBA2DB6C-DspG486Z.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Dc3ncaD0.js → classDiagram-v2-RAHNMMFH-DspG486Z.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Dc3ncaD0.js.map → classDiagram-v2-RAHNMMFH-DspG486Z.js.map} +1 -1
- package/webapp/dist/assets/{clone-E9Ad85BC.js → clone-M8ztABN5.js} +2 -2
- package/webapp/dist/assets/{clone-E9Ad85BC.js.map → clone-M8ztABN5.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-nj0o74.js → cose-bilkent-S5V4N54A-DZihobe3.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-nj0o74.js.map → cose-bilkent-S5V4N54A-DZihobe3.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-CyJYNIbm.js → dagre-KLK3FWXG-DBLWy3vi.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-CyJYNIbm.js.map → dagre-KLK3FWXG-DBLWy3vi.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C8eweQ7b.js → diagram-E7M64L7V-D7IrPWaY.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-C8eweQ7b.js.map → diagram-E7M64L7V-D7IrPWaY.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-DMdygRl0.js → diagram-IFDJBPK2-DbF-vN3U.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-DMdygRl0.js.map → diagram-IFDJBPK2-DbF-vN3U.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-BQDZHb0a.js → diagram-P4PSJMXO-BxBVRVaM.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-BQDZHb0a.js.map → diagram-P4PSJMXO-BxBVRVaM.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-C1HaXN6E.js → erDiagram-INFDFZHY-ny9JoOhV.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-C1HaXN6E.js.map → erDiagram-INFDFZHY-ny9JoOhV.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-24nNqQyo.js → flowDiagram-PKNHOUZH-BMgWUlvY.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-24nNqQyo.js.map → flowDiagram-PKNHOUZH-BMgWUlvY.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BWPOFaLV.js → ganttDiagram-A5KZAMGK-CCYpj3PM.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BWPOFaLV.js.map → ganttDiagram-A5KZAMGK-CCYpj3PM.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js → gitGraphDiagram-K3NZZRJ6-BFJGaDtk.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js.map → gitGraphDiagram-K3NZZRJ6-BFJGaDtk.js.map} +1 -1
- package/webapp/dist/assets/{graph-OHu4dL2n.js → graph-Cp0m7fHH.js} +3 -3
- package/webapp/dist/assets/{graph-OHu4dL2n.js.map → graph-Cp0m7fHH.js.map} +1 -1
- package/webapp/dist/assets/{index-CDCDAfqP.js → index-EvfDN91D.js} +63 -46
- package/webapp/dist/assets/{index-CDCDAfqP.js.map → index-EvfDN91D.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CvaBM5j6.js → infoDiagram-LFFYTUFH-Dnve0aOc.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CvaBM5j6.js.map → infoDiagram-LFFYTUFH-Dnve0aOc.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DB1l2Uue.js → ishikawaDiagram-PHBUUO56-DkSZM5sz.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DB1l2Uue.js.map → ishikawaDiagram-PHBUUO56-DkSZM5sz.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-TQR6_teO.js → journeyDiagram-4ABVD52K-D8_2EbDV.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-TQR6_teO.js.map → journeyDiagram-4ABVD52K-D8_2EbDV.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-B-BOuC-U.js → kanban-definition-K7BYSVSG-BdmMXQQk.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-B-BOuC-U.js.map → kanban-definition-K7BYSVSG-BdmMXQQk.js.map} +1 -1
- package/webapp/dist/assets/{layout-B8yqIqbx.js → layout-3tA84hoP.js} +5 -5
- package/webapp/dist/assets/{layout-B8yqIqbx.js.map → layout-3tA84hoP.js.map} +1 -1
- package/webapp/dist/assets/{linear-CoLfiZKK.js → linear-CpN6Japh.js} +2 -2
- package/webapp/dist/assets/{linear-CoLfiZKK.js.map → linear-CpN6Japh.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-P70BMIHI.js → mindmap-definition-YRQLILUH-HiYNz7qL.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-P70BMIHI.js.map → mindmap-definition-YRQLILUH-HiYNz7qL.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DsS_4dTB.js → pieDiagram-SKSYHLDU-DCVp50CX.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DsS_4dTB.js.map → pieDiagram-SKSYHLDU-DCVp50CX.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DoM9PEq-.js → quadrantDiagram-337W2JSQ-CCX7dwY0.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DoM9PEq-.js.map → quadrantDiagram-337W2JSQ-CCX7dwY0.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bn3lYMMI.js → requirementDiagram-Z7DCOOCP-Cba7jjkf.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bn3lYMMI.js.map → requirementDiagram-Z7DCOOCP-Cba7jjkf.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-97kCegRT.js → sankeyDiagram-WA2Y5GQK-Bz4iUubD.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-97kCegRT.js.map → sankeyDiagram-WA2Y5GQK-Bz4iUubD.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DXqjQjf6.js → sequenceDiagram-2WXFIKYE-DsFI9bic.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DXqjQjf6.js.map → sequenceDiagram-2WXFIKYE-DsFI9bic.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DQcTPKWP.js → stateDiagram-RAJIS63D-DLv9OSg4.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DQcTPKWP.js.map → stateDiagram-RAJIS63D-DLv9OSg4.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DHmxRVJn.js → stateDiagram-v2-FVOUBMTO-DVlwzCvy.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DHmxRVJn.js.map → stateDiagram-v2-FVOUBMTO-DVlwzCvy.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BlovQQ4B.js → timeline-definition-YZTLITO2-DnKbq6n0.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BlovQQ4B.js.map → timeline-definition-YZTLITO2-DnKbq6n0.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CGu93c9S.js → treemap-KZPCXAKY-D9fYHZ__.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CGu93c9S.js.map → treemap-KZPCXAKY-D9fYHZ__.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-Do1jprrz.js → vennDiagram-LZ73GAT5-CzKI47Ba.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-Do1jprrz.js.map → vennDiagram-LZ73GAT5-CzKI47Ba.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BKa1DxVq.js → xychartDiagram-JWTSCODW-Bt-gKvam.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BKa1DxVq.js.map → xychartDiagram-JWTSCODW-Bt-gKvam.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
- package/dist/docs/issues/tellask-background-continuation-live-bugs-2026-05-17.zh.md +0 -101
- package/dist/docs/tellask-background-continuation-refactor.zh.md +0 -1146
- package/dist/recovery/proceeding-drive.d.ts +0 -1
- package/dist/recovery/reply-special.d.ts +0 -3
package/dist/dialog.js
CHANGED
|
@@ -48,9 +48,9 @@ const work_language_1 = require("./runtime/work-language");
|
|
|
48
48
|
const shared_reminders_1 = require("./shared-reminders");
|
|
49
49
|
const tool_1 = require("./tool");
|
|
50
50
|
const id_2 = require("./utils/id");
|
|
51
|
-
async function
|
|
51
|
+
async function queueRootDialogDrive(rootId, meta) {
|
|
52
52
|
const { globalDialogRegistry } = await Promise.resolve().then(() => __importStar(require('./dialog-global-registry')));
|
|
53
|
-
globalDialogRegistry.
|
|
53
|
+
globalDialogRegistry.queueRootDrive(rootId, meta);
|
|
54
54
|
}
|
|
55
55
|
class InvalidReminderIndexError extends Error {
|
|
56
56
|
constructor(index, total) {
|
|
@@ -228,7 +228,7 @@ class Dialog {
|
|
|
228
228
|
this._currentCourse = 1;
|
|
229
229
|
this._remindersVer = 0;
|
|
230
230
|
// Prompts queued for future drives (set by startNewCourse or deferred-resume flows).
|
|
231
|
-
this.
|
|
231
|
+
this._queuedPrompts = [];
|
|
232
232
|
this._driveIntents = [];
|
|
233
233
|
this._driveIntentMode = 'legacy';
|
|
234
234
|
// Course prefix messages injected into LLM context on every course.
|
|
@@ -243,7 +243,7 @@ class Dialog {
|
|
|
243
243
|
// Track the generation sequence when _generationStarted was set
|
|
244
244
|
// Used to ensure proper ordering when multiple generations occur
|
|
245
245
|
this._generationStartedGenseq = 0;
|
|
246
|
-
// Pending sideDialog IDs (for
|
|
246
|
+
// Pending sideDialog IDs (for active callee tracking)
|
|
247
247
|
this._activeCalleeDialogIds = [];
|
|
248
248
|
// Phase 11: Suspension state for Type A sideDialog mechanism
|
|
249
249
|
// Tracks whether this dialog is in normal state, suspended, or resuming from suspension
|
|
@@ -457,9 +457,6 @@ class Dialog {
|
|
|
457
457
|
addActiveCalleeDialogs(ids) {
|
|
458
458
|
this._activeCalleeDialogIds.push(...ids);
|
|
459
459
|
}
|
|
460
|
-
removeActiveCalleeDispatch(id) {
|
|
461
|
-
this._activeCalleeDialogIds = this._activeCalleeDialogIds.filter((activeCallee) => activeCallee.selfId !== id.selfId);
|
|
462
|
-
}
|
|
463
460
|
clearActiveCalleeDialogs() {
|
|
464
461
|
this._activeCalleeDialogIds = [];
|
|
465
462
|
}
|
|
@@ -544,17 +541,23 @@ class Dialog {
|
|
|
544
541
|
index,
|
|
545
542
|
reminder,
|
|
546
543
|
}));
|
|
547
|
-
const
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
index
|
|
555
|
-
reminder
|
|
556
|
-
|
|
557
|
-
|
|
544
|
+
const sharedTargets = [
|
|
545
|
+
{ kind: 'task', agentId: this.agentId, taskDocPath: this.taskDocPath },
|
|
546
|
+
{ kind: 'agent', agentId: this.agentId },
|
|
547
|
+
];
|
|
548
|
+
for (const sharedTarget of sharedTargets) {
|
|
549
|
+
const sharedReminders = await (0, shared_reminders_1.loadSharedReminders)(sharedTarget);
|
|
550
|
+
for (let index = 0; index < sharedReminders.length; index += 1) {
|
|
551
|
+
const reminder = sharedReminders[index];
|
|
552
|
+
if (!reminder)
|
|
553
|
+
continue;
|
|
554
|
+
targets.push({
|
|
555
|
+
source: 'runtime',
|
|
556
|
+
index,
|
|
557
|
+
reminder,
|
|
558
|
+
target: sharedTarget,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
558
561
|
}
|
|
559
562
|
// Visible reminders are always merged into a single newest-first stream regardless of
|
|
560
563
|
// storage scope, so UI rendering, reminder injection, and reminder-id targeting agree.
|
|
@@ -632,10 +635,18 @@ class Dialog {
|
|
|
632
635
|
* Returns reminder contents with metadata for the frontend.
|
|
633
636
|
*/
|
|
634
637
|
async processReminderUpdates() {
|
|
635
|
-
const
|
|
638
|
+
const taskSharedTarget = {
|
|
639
|
+
kind: 'task',
|
|
640
|
+
agentId: this.agentId,
|
|
641
|
+
taskDocPath: this.taskDocPath,
|
|
642
|
+
};
|
|
643
|
+
const runtimeTarget = { kind: 'agent', agentId: this.agentId };
|
|
644
|
+
const taskSharedReminders = await (0, shared_reminders_1.loadSharedReminders)(taskSharedTarget);
|
|
645
|
+
const runtimeReminders = await (0, shared_reminders_1.loadSharedReminders)(runtimeTarget);
|
|
636
646
|
const localChanged = await this.processReminderCollection(this.reminders);
|
|
637
|
-
const
|
|
638
|
-
|
|
647
|
+
const taskSharedChanged = await this.processReminderCollection(taskSharedReminders);
|
|
648
|
+
const runtimeChanged = await this.processReminderCollection(runtimeReminders);
|
|
649
|
+
if (localChanged || taskSharedChanged || runtimeChanged) {
|
|
639
650
|
this.touchReminders();
|
|
640
651
|
}
|
|
641
652
|
// Centralized persistence - called when emitting event.
|
|
@@ -647,17 +658,28 @@ class Dialog {
|
|
|
647
658
|
log_1.log.warn('Failed to persist reminders', err, { dialogId: this.id.valueOf() });
|
|
648
659
|
}
|
|
649
660
|
try {
|
|
650
|
-
await (0, shared_reminders_1.
|
|
661
|
+
await (0, shared_reminders_1.replaceSharedReminders)(taskSharedTarget, taskSharedReminders);
|
|
662
|
+
}
|
|
663
|
+
catch (err) {
|
|
664
|
+
log_1.log.warn('Failed to persist task-scoped reminders', err, {
|
|
665
|
+
dialogId: this.id.valueOf(),
|
|
666
|
+
agentId: this.agentId,
|
|
667
|
+
taskDocPath: this.taskDocPath,
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
try {
|
|
671
|
+
await (0, shared_reminders_1.replaceSharedReminders)(runtimeTarget, runtimeReminders);
|
|
651
672
|
}
|
|
652
673
|
catch (err) {
|
|
653
|
-
log_1.log.warn('Failed to persist agent-
|
|
674
|
+
log_1.log.warn('Failed to persist agent-scoped reminders', err, {
|
|
654
675
|
dialogId: this.id.valueOf(),
|
|
655
676
|
agentId: this.agentId,
|
|
656
677
|
});
|
|
657
678
|
}
|
|
658
679
|
const visibleReminders = [
|
|
659
680
|
...this.reminders.map((reminder) => (0, tool_1.cloneReminder)(reminder)),
|
|
660
|
-
...
|
|
681
|
+
...taskSharedReminders,
|
|
682
|
+
...runtimeReminders,
|
|
661
683
|
];
|
|
662
684
|
visibleReminders.sort(tool_1.compareReminderDisplayOrder);
|
|
663
685
|
const reminders = visibleReminders.map((r) => ({
|
|
@@ -755,11 +777,11 @@ class Dialog {
|
|
|
755
777
|
return this._updatedAt;
|
|
756
778
|
}
|
|
757
779
|
replaceQueuedPromptState(existingMsgId, nextPrompt) {
|
|
758
|
-
const queueIndex = this.
|
|
780
|
+
const queueIndex = this._queuedPrompts.findIndex((prompt) => prompt.msgId === existingMsgId);
|
|
759
781
|
if (queueIndex < 0) {
|
|
760
|
-
throw new Error(`
|
|
782
|
+
throw new Error(`Queued prompt replacement invariant violation: dialog=${this.id.valueOf()} existingMsgId=${existingMsgId}`);
|
|
761
783
|
}
|
|
762
|
-
this.
|
|
784
|
+
this._queuedPrompts[queueIndex] = nextPrompt;
|
|
763
785
|
for (let index = this._driveIntents.length - 1; index >= 0; index -= 1) {
|
|
764
786
|
const intent = this._driveIntents[index];
|
|
765
787
|
if (intent.kind !== 'prompt' || intent.prompt.msgId !== existingMsgId)
|
|
@@ -822,7 +844,7 @@ class Dialog {
|
|
|
822
844
|
}
|
|
823
845
|
default: {
|
|
824
846
|
const _exhaustive = nextPrompt;
|
|
825
|
-
throw new Error(`
|
|
847
|
+
throw new Error(`Queued prompt replacement invariant violation: unsupported queued prompt`);
|
|
826
848
|
}
|
|
827
849
|
}
|
|
828
850
|
})(),
|
|
@@ -830,7 +852,7 @@ class Dialog {
|
|
|
830
852
|
};
|
|
831
853
|
return nextPrompt;
|
|
832
854
|
}
|
|
833
|
-
throw new Error(`
|
|
855
|
+
throw new Error(`Queued prompt replacement invariant violation: missing drive intent dialog=${this.id.valueOf()} existingMsgId=${existingMsgId}`);
|
|
834
856
|
}
|
|
835
857
|
setPendingRuntimePrompt(prompt) {
|
|
836
858
|
const prepared = typeof prompt === 'string'
|
|
@@ -875,7 +897,7 @@ class Dialog {
|
|
|
875
897
|
const prompt = runtimeCommon;
|
|
876
898
|
return prompt;
|
|
877
899
|
})();
|
|
878
|
-
this.
|
|
900
|
+
this._queuedPrompts = [
|
|
879
901
|
normalized.calleeDialogReplyTarget !== undefined
|
|
880
902
|
? {
|
|
881
903
|
kind: 'new_course_runtime_sideDialog',
|
|
@@ -927,7 +949,7 @@ class Dialog {
|
|
|
927
949
|
return normalizedExisting;
|
|
928
950
|
}
|
|
929
951
|
enqueueQueuedPromptState(state) {
|
|
930
|
-
this.
|
|
952
|
+
this._queuedPrompts.push(state);
|
|
931
953
|
const promptCommon = {
|
|
932
954
|
content: state.prompt,
|
|
933
955
|
...(state.contentItems === undefined ? {} : { contentItems: state.contentItems }),
|
|
@@ -980,7 +1002,7 @@ class Dialog {
|
|
|
980
1002
|
}
|
|
981
1003
|
default: {
|
|
982
1004
|
const _exhaustive = state;
|
|
983
|
-
throw new Error(`
|
|
1005
|
+
throw new Error(`Queued prompt enqueue invariant violation: unsupported queued prompt`);
|
|
984
1006
|
}
|
|
985
1007
|
}
|
|
986
1008
|
})(),
|
|
@@ -988,14 +1010,14 @@ class Dialog {
|
|
|
988
1010
|
});
|
|
989
1011
|
this._updatedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
990
1012
|
}
|
|
991
|
-
|
|
992
|
-
if (this.
|
|
1013
|
+
peekLatestQueuedPrompt() {
|
|
1014
|
+
if (this._queuedPrompts.length === 0) {
|
|
993
1015
|
return undefined;
|
|
994
1016
|
}
|
|
995
|
-
return this.
|
|
1017
|
+
return this._queuedPrompts[this._queuedPrompts.length - 1];
|
|
996
1018
|
}
|
|
997
1019
|
queueUserPromptAtGenerationBoundary(options) {
|
|
998
|
-
const existing = this.
|
|
1020
|
+
const existing = this.peekLatestQueuedPrompt();
|
|
999
1021
|
const trimmed = options.prompt.trim();
|
|
1000
1022
|
if (!trimmed) {
|
|
1001
1023
|
throw new Error('Prompt is required to queue generation-boundary user prompt');
|
|
@@ -1050,7 +1072,7 @@ class Dialog {
|
|
|
1050
1072
|
return created;
|
|
1051
1073
|
}
|
|
1052
1074
|
queueRegisteredAssignmentUpdatePrompt(options) {
|
|
1053
|
-
const existing = this.
|
|
1075
|
+
const existing = this.peekLatestQueuedPrompt();
|
|
1054
1076
|
const trimmed = options.prompt.trim();
|
|
1055
1077
|
if (!trimmed) {
|
|
1056
1078
|
throw new Error('Prompt is required to queue registered assignment update');
|
|
@@ -1093,7 +1115,7 @@ class Dialog {
|
|
|
1093
1115
|
async persistPendingRuntimePrompt(prompt) {
|
|
1094
1116
|
await this.dlgStore.persistPendingRuntimePrompt(this, prompt);
|
|
1095
1117
|
if (this.id.selfId === this.id.rootId) {
|
|
1096
|
-
await
|
|
1118
|
+
await queueRootDialogDrive(this.id.rootId, {
|
|
1097
1119
|
source: 'dialog_runtime_prompt',
|
|
1098
1120
|
reason: `queued_runtime_prompt:${prompt.msgId}`,
|
|
1099
1121
|
});
|
|
@@ -1155,14 +1177,14 @@ class Dialog {
|
|
|
1155
1177
|
});
|
|
1156
1178
|
return created;
|
|
1157
1179
|
}
|
|
1158
|
-
|
|
1159
|
-
return this.
|
|
1180
|
+
hasQueuedPrompt() {
|
|
1181
|
+
return this._queuedPrompts.length > 0;
|
|
1160
1182
|
}
|
|
1161
|
-
|
|
1162
|
-
return this.
|
|
1183
|
+
peekQueuedPrompt() {
|
|
1184
|
+
return this._queuedPrompts[0];
|
|
1163
1185
|
}
|
|
1164
|
-
|
|
1165
|
-
return this.
|
|
1186
|
+
takeQueuedPrompt() {
|
|
1187
|
+
return this._queuedPrompts.shift();
|
|
1166
1188
|
}
|
|
1167
1189
|
setActiveRunControlSpec(spec) {
|
|
1168
1190
|
this._activeRunControlSpec = spec;
|
|
@@ -1244,7 +1266,7 @@ class Dialog {
|
|
|
1244
1266
|
await this.dlgStore.startNewCourse(this, nextPrompt);
|
|
1245
1267
|
}
|
|
1246
1268
|
if (this.id.selfId === this.id.rootId) {
|
|
1247
|
-
await
|
|
1269
|
+
await queueRootDialogDrive(this.id.rootId, {
|
|
1248
1270
|
source: 'dialog_start_new_course',
|
|
1249
1271
|
reason: `queued_runtime_prompt:${nextPrompt.msgId}`,
|
|
1250
1272
|
});
|
|
@@ -1265,6 +1287,7 @@ class Dialog {
|
|
|
1265
1287
|
runControl: runControlSpec,
|
|
1266
1288
|
});
|
|
1267
1289
|
}
|
|
1290
|
+
return normalized;
|
|
1268
1291
|
}
|
|
1269
1292
|
// Proxy methods for DialogStore - route calls through dialog object instead of direct dlgStore access
|
|
1270
1293
|
async receiveFuncResult(result) {
|
|
@@ -1498,7 +1521,15 @@ class Dialog {
|
|
|
1498
1521
|
// Mark generation as started with the actual genseq
|
|
1499
1522
|
// This ensures sideDialog_final_response_evt waits for both user_text and generating_start_evt
|
|
1500
1523
|
this.markGenerationStarted();
|
|
1501
|
-
|
|
1524
|
+
try {
|
|
1525
|
+
return await this.dlgStore.notifyGeneratingStart(this, msgId);
|
|
1526
|
+
}
|
|
1527
|
+
catch (err) {
|
|
1528
|
+
this._generationStarted = false;
|
|
1529
|
+
this._generationStartedGenseq = 0;
|
|
1530
|
+
this._activeGenCourse = undefined;
|
|
1531
|
+
throw err;
|
|
1532
|
+
}
|
|
1502
1533
|
}
|
|
1503
1534
|
async notifyGeneratingFinish(contextHealth, llmGenModel) {
|
|
1504
1535
|
if (contextHealth) {
|
|
@@ -1507,17 +1538,12 @@ class Dialog {
|
|
|
1507
1538
|
try {
|
|
1508
1539
|
await this.dlgStore.notifyGeneratingFinish(this, contextHealth, llmGenModel);
|
|
1509
1540
|
}
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
});
|
|
1541
|
+
finally {
|
|
1542
|
+
// Reset generation tracking for the next course even when persistence fails loudly.
|
|
1543
|
+
this._generationStarted = false;
|
|
1544
|
+
this._generationStartedGenseq = 0;
|
|
1545
|
+
this._activeGenCourse = undefined;
|
|
1516
1546
|
}
|
|
1517
|
-
// Reset generation tracking for the next course
|
|
1518
|
-
this._generationStarted = false;
|
|
1519
|
-
this._generationStartedGenseq = 0;
|
|
1520
|
-
this._activeGenCourse = undefined;
|
|
1521
1547
|
}
|
|
1522
1548
|
async streamError(error) {
|
|
1523
1549
|
if (this.dlgStore) {
|
package/dist/docs/design.md
CHANGED
|
@@ -10,6 +10,10 @@ Dominds implements **Social Division of Labor** for AI agents - a systematic app
|
|
|
10
10
|
|
|
11
11
|
**Key Design Principle**: Agents operate in **autonomous "YOLO mode"** with **Fresh Boots Reasoning** - making independent decisions with clean mental states through strategic context reset and task-centered focus architecture.
|
|
12
12
|
|
|
13
|
+
**Liveness Principle**: If humans and agents can still continue the business dialogue with reasonable judgment, the system should prefer keeping the conversation alive. Technical projection drift, local semantic noise, or imperfect intermediate states should not automatically override the business continuation path. Only conflicts that would cause wrong delivery, duplicate consumption, unaccountable behavior, or broken safety boundaries must stop the path loudly.
|
|
14
|
+
|
|
15
|
+
**Expressiveness Principle**: After liveness, the system should keep business intent direct and easy to state. Prefer fewer extra abstractions, fewer newly invented labels, and less technical phrasing that obscures the business meaning. Specific “this should not be too wordy” judgments belong in the concrete business scenario, not as a low-level instruction to optimize for shortest paths or quiet logs.
|
|
16
|
+
|
|
13
17
|
## Table of Contents
|
|
14
18
|
|
|
15
19
|
1. [The Problem: Agentic Disorientation](#the-problem-agentic-disorientation)
|
package/dist/docs/design.zh.md
CHANGED
|
@@ -10,6 +10,10 @@ Dominds 为 AI 智能体实现了**社会分工**——一种通过战略性心
|
|
|
10
10
|
|
|
11
11
|
**关键设计原则**:智能体在**自主 "YOLO 模式"** 下运行,配备**扪心自问(FBR)**——通过战略性上下文重置和以任务为中心的专注架构,以干净的心理状态做出独立决策。
|
|
12
12
|
|
|
13
|
+
**保活原则**:只要人类与智能体还能基于当前业务判断继续推进,系统就应优先让对话继续跑下去;技术投影、局部语义失真、日志噪音或中间态不洁净,不应自动覆盖业务接续路径。真正会导致错误交付、重复消费、不可判责或安全边界破坏的冲突,才必须阻断并 loud diagnostic。
|
|
14
|
+
|
|
15
|
+
**顺直原则**:在不削弱保活的前提下,业务意图的表达还应尽量更直白,少一点额外抽象、少一点新口径、少一点技术性兜圈子。真正“这里不该太啰嗦”的判断,应体现在具体业务场景里,而不是把“最短路径”“少噪音”这类技术抽象当成低阶工作的直接原则。
|
|
16
|
+
|
|
13
17
|
## 目录
|
|
14
18
|
|
|
15
19
|
1. [问题:智能体迷失方向](#问题智能体迷失方向)
|
|
@@ -729,7 +729,7 @@ sequenceDiagram
|
|
|
729
729
|
Side-->>Store: persist final response
|
|
730
730
|
Driver-->>Asker: supply result-arrival fact + clear pending callee
|
|
731
731
|
opt result arrival creates an explicit drive source
|
|
732
|
-
Driver-->>Asker:
|
|
732
|
+
Driver-->>Asker: upsert result_arrival trigger + wake queue
|
|
733
733
|
end
|
|
734
734
|
```
|
|
735
735
|
|
|
@@ -1231,7 +1231,7 @@ Dominds' runtime does **not** persist a single enum-like “awaiting …” stat
|
|
|
1231
1231
|
driven is derived from persisted facts:
|
|
1232
1232
|
|
|
1233
1233
|
- Persisted status (API/index): `running | completed | archived`
|
|
1234
|
-
- Persisted `latest.yaml`: `status`, `
|
|
1234
|
+
- Persisted `latest.yaml`: `status`, `nextStep.triggers`, `generating`
|
|
1235
1235
|
- Derived gates: `hasPendingQ4H()`; active callee dispatches are background callee facts, not a drive gate
|
|
1236
1236
|
|
|
1237
1237
|
**Persisted status lifecycle:**
|
|
@@ -1250,12 +1250,12 @@ stateDiagram-v2
|
|
|
1250
1250
|
flowchart TD
|
|
1251
1251
|
A[status=running] --> B{canDrive?\\n(no pending Q4H)}
|
|
1252
1252
|
B -- no --> S[Suspended\\n(waiting on Q4H)]
|
|
1253
|
-
S -->|Q4H answered| C{
|
|
1253
|
+
S -->|Q4H answered| C{nextStep trigger?}
|
|
1254
1254
|
R[result arrival] --> C
|
|
1255
|
-
B -- yes --> C{
|
|
1255
|
+
B -- yes --> C{nextStep trigger?}
|
|
1256
1256
|
C -- no --> I[Idle\\n(waiting for trigger)]
|
|
1257
1257
|
C -- yes --> D[Drive loop\\n(generating=true while streaming)]
|
|
1258
|
-
D --> E{
|
|
1258
|
+
D --> E{hasQueuedPrompt?}
|
|
1259
1259
|
E -- yes --> C
|
|
1260
1260
|
E -- no --> I
|
|
1261
1261
|
```
|
|
@@ -1306,7 +1306,7 @@ sequenceDiagram
|
|
|
1306
1306
|
Side-->>Driver: final response
|
|
1307
1307
|
Driver-->>Tellasker: supply result-arrival fact + clear pending callee
|
|
1308
1308
|
opt result arrival creates an explicit drive source
|
|
1309
|
-
Driver-->>Tellasker:
|
|
1309
|
+
Driver-->>Tellasker: upsert result_arrival trigger + wake queue
|
|
1310
1310
|
end
|
|
1311
1311
|
```
|
|
1312
1312
|
|
|
@@ -1381,7 +1381,7 @@ sequenceDiagram
|
|
|
1381
1381
|
Side-->>Asker: sideDialog response supplied to tellasker (result-arrival fact; clears this pending callee)
|
|
1382
1382
|
|
|
1383
1383
|
opt Asker has a result-arrival drive source
|
|
1384
|
-
Asker-->>Asker:
|
|
1384
|
+
Asker-->>Asker: upsert result_arrival trigger + wake queue (result-arrival handling)
|
|
1385
1385
|
end
|
|
1386
1386
|
```
|
|
1387
1387
|
|
|
@@ -714,7 +714,7 @@ sequenceDiagram
|
|
|
714
714
|
Side-->>Store: 持久化最终响应
|
|
715
715
|
Driver-->>Asker: 供应结果到达事实 + 清除 pending callee
|
|
716
716
|
opt 结果到达形成显式驱动源
|
|
717
|
-
Driver-->>Asker:
|
|
717
|
+
Driver-->>Asker: 写入 result_arrival trigger + Wake Queue
|
|
718
718
|
end
|
|
719
719
|
```
|
|
720
720
|
|
|
@@ -1214,7 +1214,7 @@ Dominds 的运行时**不**持久化单一的类似枚举的 "awaiting …" 状
|
|
|
1214
1214
|
驱动是从持久化的事实派生的:
|
|
1215
1215
|
|
|
1216
1216
|
- 持久化状态(API/索引):`running | completed | archived`
|
|
1217
|
-
- 持久化 `latest.yaml`:`status`、`
|
|
1217
|
+
- 持久化 `latest.yaml`:`status`、`nextStep.triggers`、`generating`
|
|
1218
1218
|
- 派生的门控:`hasPendingQ4H()`;active callee dispatches 是后台被诉请者事实,不是驱动门控
|
|
1219
1219
|
|
|
1220
1220
|
**持久化状态生命周期**:
|
|
@@ -1286,7 +1286,7 @@ sequenceDiagram
|
|
|
1286
1286
|
Side-->>Driver: 最终响应
|
|
1287
1287
|
Driver-->>Tellasker: 供应结果到达事实 + 清除 pending callee
|
|
1288
1288
|
opt 结果到达形成显式驱动源
|
|
1289
|
-
Driver-->>Tellasker:
|
|
1289
|
+
Driver-->>Tellasker: 写入 result_arrival trigger + Wake Queue(结果到达处理)
|
|
1290
1290
|
end
|
|
1291
1291
|
```
|
|
1292
1292
|
|
|
@@ -1358,7 +1358,7 @@ sequenceDiagram
|
|
|
1358
1358
|
Side-->>Asker: callee 响应供应给诉请者(结果到达事实;清除该 pending callee)
|
|
1359
1359
|
|
|
1360
1360
|
opt 诉请者有 result-arrival 驱动事实
|
|
1361
|
-
Asker-->>Asker:
|
|
1361
|
+
Asker-->>Asker: 写入 result_arrival trigger + Wake Queue(结果到达处理)
|
|
1362
1362
|
end
|
|
1363
1363
|
```
|
|
1364
1364
|
|