dominds 1.26.2 → 1.26.4
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 +2 -0
- package/README.zh.md +2 -0
- package/dist/cli.js +10 -8
- package/dist/docs/cli-usage.md +1 -1
- package/dist/docs/cli-usage.zh.md +1 -1
- package/dist/llm/gen/mock.js +11 -3
- package/dist/llm/kernel-driver/context-health.d.ts +1 -0
- package/dist/llm/kernel-driver/context-health.js +7 -0
- package/dist/llm/kernel-driver/drive.js +25 -30
- package/dist/llm/kernel-driver/idle-reminder-wake.js +6 -2
- package/dist/llm/kernel-driver/reminder-context.d.ts +26 -0
- package/dist/llm/kernel-driver/reminder-context.js +82 -0
- package/dist/llm/kernel-driver/reply-guidance.js +10 -4
- package/dist/llm/kernel-driver/tellask-special.js +50 -35
- package/dist/mcp/supervisor.js +2 -2
- package/dist/minds/system-prompt-parts.js +30 -30
- package/dist/minds/system-prompt.js +63 -40
- package/dist/persistence.js +15 -1
- package/dist/runtime/driver-messages.d.ts +38 -7
- package/dist/runtime/driver-messages.js +320 -119
- package/dist/runtime/inter-dialog-format.js +24 -12
- package/dist/runtime/reply-prompt-copy.d.ts +8 -8
- package/dist/runtime/reply-prompt-copy.js +69 -38
- package/dist/server/api-routes.js +7 -2
- package/dist/server/certificates.js +65 -25
- package/dist/server/dominds-self-update.d.ts +1 -0
- package/dist/server/dominds-self-update.js +113 -56
- package/dist/supervisor-protocol.d.ts +2 -3
- package/dist/tools/mcp.js +12 -12
- package/dist/tools/prompts/control/en/index.md +2 -2
- package/dist/tools/prompts/control/en/principles.md +12 -12
- package/dist/tools/prompts/control/en/scenarios.md +5 -5
- package/dist/tools/prompts/control/en/tools.md +10 -10
- package/dist/tools/prompts/control/zh/index.md +3 -3
- package/dist/tools/prompts/control/zh/principles.md +12 -12
- package/dist/tools/prompts/control/zh/scenarios.md +7 -7
- package/dist/tools/prompts/control/zh/tools.md +11 -11
- package/dist/tools/prompts/mcp_admin/en/principles.md +4 -4
- package/dist/tools/prompts/mcp_admin/en/scenarios.md +1 -1
- package/dist/tools/prompts/mcp_admin/en/tools.md +3 -3
- package/dist/tools/prompts/mcp_admin/zh/principles.md +4 -4
- package/dist/tools/prompts/mcp_admin/zh/scenarios.md +1 -1
- package/dist/tools/prompts/mcp_admin/zh/tools.md +3 -3
- package/dist/tools/team_mgmt-mcp-manual.js +12 -12
- package/package.json +2 -1
- package/webapp/dist/assets/{_basePickBy-DUivPKf7.js → _basePickBy-mFK6EVZU.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-DUivPKf7.js.map → _basePickBy-mFK6EVZU.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-hcs024vD.js → _baseUniq-C8zyOqn7.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-hcs024vD.js.map → _baseUniq-C8zyOqn7.js.map} +1 -1
- package/webapp/dist/assets/{arc-Dr6-FXp5.js → arc-Vdl3uhV8.js} +2 -2
- package/webapp/dist/assets/{arc-Dr6-FXp5.js.map → arc-Vdl3uhV8.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js.map → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js → blockDiagram-WCTKOSBZ-Bozcnodw.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js.map → blockDiagram-WCTKOSBZ-Bozcnodw.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js → c4Diagram-IC4MRINW-CLkxlY6N.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js.map → c4Diagram-IC4MRINW-CLkxlY6N.js.map} +1 -1
- package/webapp/dist/assets/{channel-CWWjsXtU.js → channel-CqGyLCM_.js} +2 -2
- package/webapp/dist/assets/{channel-CWWjsXtU.js.map → channel-CqGyLCM_.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js → chunk-4BX2VUAB-BNsJpMh4.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js.map → chunk-4BX2VUAB-BNsJpMh4.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js → chunk-55IACEB6-B59p6vzX.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js.map → chunk-55IACEB6-B59p6vzX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js → chunk-FMBD7UC4-CB17a_Ki.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js.map → chunk-FMBD7UC4-CB17a_Ki.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js → chunk-JSJVCQXG-DVnVflN-.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js.map → chunk-JSJVCQXG-DVnVflN-.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js → chunk-KX2RTZJC-D9_5LvIO.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js.map → chunk-KX2RTZJC-D9_5LvIO.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js → chunk-NQ4KR5QH-CZWI2G2c.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js.map → chunk-NQ4KR5QH-CZWI2G2c.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js → chunk-QZHKN3VN-WCLg8cNX.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js.map → chunk-QZHKN3VN-WCLg8cNX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js → chunk-WL4C6EOR-BFkz_P__.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js.map → chunk-WL4C6EOR-BFkz_P__.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js → classDiagram-VBA2DB6C-DWQ1VnaI.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js.map → classDiagram-VBA2DB6C-DWQ1VnaI.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js.map → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js.map} +1 -1
- package/webapp/dist/assets/{clone-Drtik9pk.js → clone-D3QHqx6z.js} +2 -2
- package/webapp/dist/assets/{clone-Drtik9pk.js.map → clone-D3QHqx6z.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js → cose-bilkent-S5V4N54A-D2dZHRG3.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js.map → cose-bilkent-S5V4N54A-D2dZHRG3.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js → dagre-KLK3FWXG-Cwz7pFDo.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js.map → dagre-KLK3FWXG-Cwz7pFDo.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js → diagram-E7M64L7V-C6z0VVoW.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js.map → diagram-E7M64L7V-C6z0VVoW.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js → diagram-IFDJBPK2-CZ1KR1hO.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js.map → diagram-IFDJBPK2-CZ1KR1hO.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js → diagram-P4PSJMXO-ChwZDZYa.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js.map → diagram-P4PSJMXO-ChwZDZYa.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js → erDiagram-INFDFZHY-DCnHsk_Z.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js.map → erDiagram-INFDFZHY-DCnHsk_Z.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js → flowDiagram-PKNHOUZH-C5Hi85ST.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js.map → flowDiagram-PKNHOUZH-C5Hi85ST.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js → ganttDiagram-A5KZAMGK-vT15RP6A.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js.map → ganttDiagram-A5KZAMGK-vT15RP6A.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js.map → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js.map} +1 -1
- package/webapp/dist/assets/{graph-CvhwAY6w.js → graph-CqFTrHii.js} +3 -3
- package/webapp/dist/assets/{graph-CvhwAY6w.js.map → graph-CqFTrHii.js.map} +1 -1
- package/webapp/dist/assets/{index-BOO_zFrI.js → index-C_PzQ5W5.js} +600 -400
- package/webapp/dist/assets/{index-BOO_zFrI.js.map → index-C_PzQ5W5.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js → infoDiagram-LFFYTUFH-DlyOw8IT.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js.map → infoDiagram-LFFYTUFH-DlyOw8IT.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js → ishikawaDiagram-PHBUUO56-iZCVn19K.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js.map → ishikawaDiagram-PHBUUO56-iZCVn19K.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js → journeyDiagram-4ABVD52K-B95gnBKj.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js.map → journeyDiagram-4ABVD52K-B95gnBKj.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js → kanban-definition-K7BYSVSG-DQ2gfPUK.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js.map → kanban-definition-K7BYSVSG-DQ2gfPUK.js.map} +1 -1
- package/webapp/dist/assets/{layout-BttZf7fQ.js → layout-VOBFudHV.js} +5 -5
- package/webapp/dist/assets/{layout-BttZf7fQ.js.map → layout-VOBFudHV.js.map} +1 -1
- package/webapp/dist/assets/{linear-B75vD4Ho.js → linear-BtBp93s2.js} +2 -2
- package/webapp/dist/assets/{linear-B75vD4Ho.js.map → linear-BtBp93s2.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js → mindmap-definition-YRQLILUH-m2w1nBbY.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js.map → mindmap-definition-YRQLILUH-m2w1nBbY.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js → pieDiagram-SKSYHLDU-ByoyS2as.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js.map → pieDiagram-SKSYHLDU-ByoyS2as.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js → quadrantDiagram-337W2JSQ-BnKSsLfA.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js.map → quadrantDiagram-337W2JSQ-BnKSsLfA.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js → requirementDiagram-Z7DCOOCP-jU2C7qJN.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js.map → requirementDiagram-Z7DCOOCP-jU2C7qJN.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js → sankeyDiagram-WA2Y5GQK-R175tX8b.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js.map → sankeyDiagram-WA2Y5GQK-R175tX8b.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js.map → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js → stateDiagram-RAJIS63D-DZSAyRfJ.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js.map → stateDiagram-RAJIS63D-DZSAyRfJ.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js → stateDiagram-v2-FVOUBMTO-x29lKJpl.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js.map → stateDiagram-v2-FVOUBMTO-x29lKJpl.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js → timeline-definition-YZTLITO2-BQR2qEXt.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js.map → timeline-definition-YZTLITO2-BQR2qEXt.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js → treemap-KZPCXAKY-b823qTE1.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js.map → treemap-KZPCXAKY-b823qTE1.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js → vennDiagram-LZ73GAT5-BrxPNUYz.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js.map → vennDiagram-LZ73GAT5-BrxPNUYz.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js → xychartDiagram-JWTSCODW-BgOzlz6Z.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js.map → xychartDiagram-JWTSCODW-BgOzlz6Z.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -9,6 +9,7 @@ exports.setDomindsSelfUpdateBroadcaster = setDomindsSelfUpdateBroadcaster;
|
|
|
9
9
|
exports.getDomindsSelfUpdateStatus = getDomindsSelfUpdateStatus;
|
|
10
10
|
exports.installLatestDominds = installLatestDominds;
|
|
11
11
|
exports.restartDomindsIntoLatest = restartDomindsIntoLatest;
|
|
12
|
+
exports.forceRestartDominds = forceRestartDominds;
|
|
12
13
|
const child_process_1 = require("child_process");
|
|
13
14
|
const crypto_1 = require("crypto");
|
|
14
15
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
@@ -1099,10 +1100,11 @@ async function getDomindsSelfUpdateStatus() {
|
|
|
1099
1100
|
});
|
|
1100
1101
|
}
|
|
1101
1102
|
if (restartPromise !== null) {
|
|
1103
|
+
const targetVersion = latestObservation.kind === 'ok' ? latestObservation.latestVersion : null;
|
|
1102
1104
|
return buildStatus({
|
|
1103
1105
|
currentVersion: runningVersion,
|
|
1104
|
-
installedVersion: runningVersion,
|
|
1105
|
-
latestVersion:
|
|
1106
|
+
installedVersion: targetVersion ?? runningVersion,
|
|
1107
|
+
latestVersion: targetVersion,
|
|
1106
1108
|
checkedAt: latestObservation.kind === 'unknown' ? null : latestObservation.checkedAt,
|
|
1107
1109
|
mode: cfg.mode,
|
|
1108
1110
|
runKind,
|
|
@@ -1110,7 +1112,7 @@ async function getDomindsSelfUpdateStatus() {
|
|
|
1110
1112
|
busy: 'restarting',
|
|
1111
1113
|
reason: 'restart_required',
|
|
1112
1114
|
message: 'Dominds restart is in progress',
|
|
1113
|
-
targetVersion
|
|
1115
|
+
targetVersion,
|
|
1114
1116
|
});
|
|
1115
1117
|
}
|
|
1116
1118
|
if (latestObservation.kind === 'unknown') {
|
|
@@ -1353,7 +1355,7 @@ async function requestSupervisorRestart(params) {
|
|
|
1353
1355
|
debugDir: params.trace.debugDir,
|
|
1354
1356
|
currentVersion: params.currentVersion,
|
|
1355
1357
|
targetVersion: params.targetVersion,
|
|
1356
|
-
|
|
1358
|
+
restartStrategy: params.restartStrategy,
|
|
1357
1359
|
};
|
|
1358
1360
|
await new Promise((resolve, reject) => {
|
|
1359
1361
|
process.send?.(message, (error) => {
|
|
@@ -1422,6 +1424,69 @@ async function stopAndExitForRestart() {
|
|
|
1422
1424
|
}
|
|
1423
1425
|
process.exit(0);
|
|
1424
1426
|
}
|
|
1427
|
+
async function requestDomindsRestart(params) {
|
|
1428
|
+
const cfg = assertRuntimeConfig();
|
|
1429
|
+
const runKind = detectRunKind(cfg.mode);
|
|
1430
|
+
if (runKind === 'disabled') {
|
|
1431
|
+
throw new Error('Dominds restart requires a production run kind');
|
|
1432
|
+
}
|
|
1433
|
+
restartState = { kind: 'restarting', targetVersion: params.targetVersion };
|
|
1434
|
+
publishStatusUpdateSoon();
|
|
1435
|
+
const restartCwd = process.cwd();
|
|
1436
|
+
const trace = buildRestartTraceContext();
|
|
1437
|
+
activeRestartTraceFile = trace.traceFile;
|
|
1438
|
+
try {
|
|
1439
|
+
await appendRestartTraceBestEffort(trace, params.traceEvent, {
|
|
1440
|
+
runKind,
|
|
1441
|
+
restartStrategy: params.restartStrategy,
|
|
1442
|
+
currentVersion: params.currentVersion,
|
|
1443
|
+
targetVersion: params.targetVersion,
|
|
1444
|
+
restartCwd,
|
|
1445
|
+
host: cfg.host,
|
|
1446
|
+
port: cfg.port,
|
|
1447
|
+
traceFile: trace.traceFile,
|
|
1448
|
+
});
|
|
1449
|
+
await requestSupervisorRestart({
|
|
1450
|
+
trace,
|
|
1451
|
+
restartStrategy: params.restartStrategy,
|
|
1452
|
+
currentVersion: params.currentVersion,
|
|
1453
|
+
targetVersion: params.targetVersion,
|
|
1454
|
+
});
|
|
1455
|
+
await appendRestartTraceBestEffort(trace, 'parent.supervisor_restart_requested', {
|
|
1456
|
+
retiringPid: process.pid,
|
|
1457
|
+
host: cfg.host,
|
|
1458
|
+
port: cfg.port,
|
|
1459
|
+
});
|
|
1460
|
+
log.info('Dominds supervisor restart requested', undefined, {
|
|
1461
|
+
traceFile: trace.traceFile,
|
|
1462
|
+
forced: params.traceEvent === 'parent.force_restart_requested',
|
|
1463
|
+
restartStrategy: params.restartStrategy,
|
|
1464
|
+
});
|
|
1465
|
+
setImmediate(() => {
|
|
1466
|
+
void stopAndExitForRestart().catch((error) => {
|
|
1467
|
+
void appendRestartTraceBestEffort(trace, 'parent.stop_and_exit.error', {
|
|
1468
|
+
message: error instanceof Error ? error.message : String(error),
|
|
1469
|
+
stack: error instanceof Error ? (error.stack ?? null) : null,
|
|
1470
|
+
});
|
|
1471
|
+
log.error('Failed to stop Dominds server during restart', error);
|
|
1472
|
+
restartState = params.rollbackState;
|
|
1473
|
+
activeRestartTraceFile = null;
|
|
1474
|
+
publishStatusUpdateSoon();
|
|
1475
|
+
});
|
|
1476
|
+
});
|
|
1477
|
+
}
|
|
1478
|
+
catch (error) {
|
|
1479
|
+
await appendRestartTraceBestEffort(trace, 'parent.restart_error', {
|
|
1480
|
+
message: error instanceof Error ? error.message : String(error),
|
|
1481
|
+
stack: error instanceof Error ? (error.stack ?? null) : null,
|
|
1482
|
+
});
|
|
1483
|
+
restartState = params.rollbackState;
|
|
1484
|
+
activeRestartTraceFile = null;
|
|
1485
|
+
publishStatusUpdateSoon();
|
|
1486
|
+
throw error;
|
|
1487
|
+
}
|
|
1488
|
+
return await getDomindsSelfUpdateStatus();
|
|
1489
|
+
}
|
|
1425
1490
|
async function restartDomindsIntoLatest() {
|
|
1426
1491
|
const cfg = assertRuntimeConfig();
|
|
1427
1492
|
if (cfg.mode !== 'production') {
|
|
@@ -1452,63 +1517,55 @@ async function restartDomindsIntoLatest() {
|
|
|
1452
1517
|
else if (previousRestartRequiredState === null) {
|
|
1453
1518
|
throw new Error('Dominds restart requires a completed install or a restartable session');
|
|
1454
1519
|
}
|
|
1455
|
-
|
|
1520
|
+
return await requestDomindsRestart({
|
|
1521
|
+
traceEvent: 'parent.restart_requested',
|
|
1522
|
+
restartStrategy: runKind === 'npx' ? 'npx_latest' : 'current_entrypoint',
|
|
1523
|
+
currentVersion: status.currentVersion,
|
|
1524
|
+
targetVersion: status.targetVersion,
|
|
1525
|
+
rollbackState: previousRestartRequiredState ?? IDLE_RESTART_STATE,
|
|
1526
|
+
});
|
|
1527
|
+
})()
|
|
1528
|
+
.catch((error) => {
|
|
1529
|
+
const statusSnapshot = restartState.kind === 'restarting' ? restartState : null;
|
|
1530
|
+
log.error('Dominds version restart failed', error, {
|
|
1531
|
+
runKind: detectRunKind(cfg.mode),
|
|
1532
|
+
restartState: statusSnapshot,
|
|
1533
|
+
});
|
|
1534
|
+
throw error;
|
|
1535
|
+
})
|
|
1536
|
+
.finally(() => {
|
|
1537
|
+
restartPromise = null;
|
|
1456
1538
|
publishStatusUpdateSoon();
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
});
|
|
1470
|
-
await requestSupervisorRestart({
|
|
1471
|
-
trace,
|
|
1472
|
-
runKind,
|
|
1473
|
-
currentVersion: status.currentVersion,
|
|
1474
|
-
targetVersion: status.targetVersion,
|
|
1475
|
-
});
|
|
1476
|
-
await appendRestartTraceBestEffort(trace, 'parent.supervisor_restart_requested', {
|
|
1477
|
-
retiringPid: process.pid,
|
|
1478
|
-
host: cfg.host,
|
|
1479
|
-
port: cfg.port,
|
|
1480
|
-
});
|
|
1481
|
-
log.info('Dominds supervisor restart requested', undefined, {
|
|
1482
|
-
traceFile: trace.traceFile,
|
|
1483
|
-
});
|
|
1484
|
-
setImmediate(() => {
|
|
1485
|
-
void stopAndExitForRestart().catch((error) => {
|
|
1486
|
-
void appendRestartTraceBestEffort(trace, 'parent.stop_and_exit.error', {
|
|
1487
|
-
message: error instanceof Error ? error.message : String(error),
|
|
1488
|
-
stack: error instanceof Error ? (error.stack ?? null) : null,
|
|
1489
|
-
});
|
|
1490
|
-
log.error('Failed to stop Dominds server during restart', error);
|
|
1491
|
-
restartState = previousRestartRequiredState ?? IDLE_RESTART_STATE;
|
|
1492
|
-
activeRestartTraceFile = null;
|
|
1493
|
-
publishStatusUpdateSoon();
|
|
1494
|
-
});
|
|
1495
|
-
});
|
|
1496
|
-
}
|
|
1497
|
-
catch (error) {
|
|
1498
|
-
await appendRestartTraceBestEffort(trace, 'parent.restart_error', {
|
|
1499
|
-
message: error instanceof Error ? error.message : String(error),
|
|
1500
|
-
stack: error instanceof Error ? (error.stack ?? null) : null,
|
|
1501
|
-
});
|
|
1502
|
-
restartState = previousRestartRequiredState ?? IDLE_RESTART_STATE;
|
|
1503
|
-
activeRestartTraceFile = null;
|
|
1504
|
-
publishStatusUpdateSoon();
|
|
1505
|
-
throw error;
|
|
1506
|
-
}
|
|
1539
|
+
});
|
|
1540
|
+
return await restartPromise;
|
|
1541
|
+
}
|
|
1542
|
+
async function forceRestartDominds() {
|
|
1543
|
+
const cfg = assertRuntimeConfig();
|
|
1544
|
+
if (cfg.mode !== 'production') {
|
|
1545
|
+
throw new Error('Dominds force restart is disabled in development mode');
|
|
1546
|
+
}
|
|
1547
|
+
if (installPromise !== null) {
|
|
1548
|
+
throw new Error('Dominds force restart is blocked while installation is in progress');
|
|
1549
|
+
}
|
|
1550
|
+
if (restartPromise !== null) {
|
|
1507
1551
|
return await getDomindsSelfUpdateStatus();
|
|
1552
|
+
}
|
|
1553
|
+
if (restartState.kind === 'restarting') {
|
|
1554
|
+
return await getDomindsSelfUpdateStatus();
|
|
1555
|
+
}
|
|
1556
|
+
restartPromise = (async () => {
|
|
1557
|
+
const runningVersion = getRunningVersion();
|
|
1558
|
+
return await requestDomindsRestart({
|
|
1559
|
+
traceEvent: 'parent.force_restart_requested',
|
|
1560
|
+
restartStrategy: 'current_entrypoint',
|
|
1561
|
+
currentVersion: runningVersion,
|
|
1562
|
+
targetVersion: runningVersion,
|
|
1563
|
+
rollbackState: IDLE_RESTART_STATE,
|
|
1564
|
+
});
|
|
1508
1565
|
})()
|
|
1509
1566
|
.catch((error) => {
|
|
1510
1567
|
const statusSnapshot = restartState.kind === 'restarting' ? restartState : null;
|
|
1511
|
-
log.error('Dominds
|
|
1568
|
+
log.error('Dominds force restart failed', error, {
|
|
1512
1569
|
runKind: detectRunKind(cfg.mode),
|
|
1513
1570
|
restartState: statusSnapshot,
|
|
1514
1571
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { DomindsSelfUpdateRunKind } from '@longrun-ai/kernel/types';
|
|
2
1
|
export declare const DOMINDS_SUPERVISOR_RESTART_WEBUI = "dominds.supervisor.restart_webui.v1";
|
|
3
|
-
export type
|
|
2
|
+
export type DomindsSupervisorRestartStrategy = 'current_entrypoint' | 'npx_latest';
|
|
4
3
|
export type DomindsSupervisorRestartWebuiMessage = Readonly<{
|
|
5
4
|
type: typeof DOMINDS_SUPERVISOR_RESTART_WEBUI;
|
|
6
5
|
cwd: string;
|
|
@@ -10,6 +9,6 @@ export type DomindsSupervisorRestartWebuiMessage = Readonly<{
|
|
|
10
9
|
debugDir: string;
|
|
11
10
|
currentVersion: string;
|
|
12
11
|
targetVersion: string | null;
|
|
13
|
-
|
|
12
|
+
restartStrategy: DomindsSupervisorRestartStrategy;
|
|
14
13
|
}>;
|
|
15
14
|
export type DomindsRunnerToSupervisorMessage = DomindsSupervisorRestartWebuiMessage;
|
package/dist/tools/mcp.js
CHANGED
|
@@ -57,7 +57,7 @@ const mcpReleaseSchema = {
|
|
|
57
57
|
properties: {
|
|
58
58
|
serverId: {
|
|
59
59
|
type: 'string',
|
|
60
|
-
description: "MCP server id from `.minds/mcp.yaml` (e.g., 'playwright'). Releases this dialog's current leased MCP
|
|
60
|
+
description: "MCP server id from `.minds/mcp.yaml` (e.g., 'playwright'). Releases this dialog's current leased MCP connection/process for that server.",
|
|
61
61
|
},
|
|
62
62
|
},
|
|
63
63
|
required: ['serverId'],
|
|
@@ -68,7 +68,7 @@ const mcpDisableSchema = {
|
|
|
68
68
|
properties: {
|
|
69
69
|
serverId: {
|
|
70
70
|
type: 'string',
|
|
71
|
-
description: "MCP server id from `.minds/mcp.yaml` (e.g., 'playwright'). Stops any loaded
|
|
71
|
+
description: "MCP server id from `.minds/mcp.yaml` (e.g., 'playwright'). Stops any loaded MCP connection/leases and writes servers.<id>.enabled=false.",
|
|
72
72
|
},
|
|
73
73
|
},
|
|
74
74
|
required: ['serverId'],
|
|
@@ -109,10 +109,10 @@ exports.mcpRestartTool = {
|
|
|
109
109
|
exports.mcpReleaseTool = {
|
|
110
110
|
type: 'func',
|
|
111
111
|
name: 'mcp_release',
|
|
112
|
-
description: "Release this dialog's current leased MCP
|
|
112
|
+
description: "Release this dialog's current leased MCP connection/process for a server.",
|
|
113
113
|
descriptionI18n: {
|
|
114
|
-
en: "Release this dialog's current leased MCP
|
|
115
|
-
zh: '释放当前对话为某个 server 持有的 MCP
|
|
114
|
+
en: "Release this dialog's current leased MCP connection/process for a server.",
|
|
115
|
+
zh: '释放当前对话为某个 server 持有的 MCP 连接/进程。',
|
|
116
116
|
},
|
|
117
117
|
parameters: mcpReleaseSchema,
|
|
118
118
|
argsValidation: 'dominds',
|
|
@@ -147,10 +147,10 @@ exports.mcpReleaseTool = {
|
|
|
147
147
|
exports.mcpDisableTool = {
|
|
148
148
|
type: 'func',
|
|
149
149
|
name: 'mcp_disable',
|
|
150
|
-
description: 'Disable a configured MCP server, clear its loaded
|
|
150
|
+
description: 'Disable a configured MCP server, clear its loaded MCP connection/leases, and persist enabled=false in `.minds/mcp.yaml`.',
|
|
151
151
|
descriptionI18n: {
|
|
152
|
-
en: 'Disable a configured MCP server, clear its loaded
|
|
153
|
-
zh: '禁用指定 MCP
|
|
152
|
+
en: 'Disable a configured MCP server, clear its loaded MCP connection/leases, and persist enabled=false in `.minds/mcp.yaml`.',
|
|
153
|
+
zh: '禁用指定 MCP 服务器,清理其已加载 MCP 连接/租约,并在 `.minds/mcp.yaml` 中持久写入 enabled=false。',
|
|
154
154
|
},
|
|
155
155
|
parameters: mcpDisableSchema,
|
|
156
156
|
argsValidation: 'dominds',
|
|
@@ -210,18 +210,18 @@ exports.mcpLeaseReminderOwner = {
|
|
|
210
210
|
? [
|
|
211
211
|
`${prefix} MCP 工具集租约 [${reminder.id}]: \`${serverId}\``,
|
|
212
212
|
'',
|
|
213
|
-
`你当前看到的是系统维护的 MCP 租约状态。该 MCP server 被视为非“真正无状态”;当前对话持有一个 MCP
|
|
213
|
+
`你当前看到的是系统维护的 MCP 租约状态。该 MCP server 被视为非“真正无状态”;当前对话持有一个 MCP 连接/进程(HTTP 连接或 stdio 进程)。`,
|
|
214
214
|
(0, driver_messages_1.formatAutoMaintainedReminderManualMirrorBan)(workLanguage),
|
|
215
215
|
'',
|
|
216
|
-
|
|
216
|
+
`该提醒项只说明当前对话持有的连接/进程;它不决定该 server 的全局工具注册/可见性。`,
|
|
217
217
|
].join('\n')
|
|
218
218
|
: [
|
|
219
219
|
`${prefix} MCP toolset lease [${reminder.id}]: \`${serverId}\``,
|
|
220
220
|
'',
|
|
221
|
-
`You are looking at system-maintained MCP lease state. This MCP server is treated as non-stateless, and the current dialog holds one MCP
|
|
221
|
+
`You are looking at system-maintained MCP lease state. This MCP server is treated as non-stateless, and the current dialog holds one MCP connection/process for it (an HTTP connection or stdio process).`,
|
|
222
222
|
(0, driver_messages_1.formatAutoMaintainedReminderManualMirrorBan)(workLanguage),
|
|
223
223
|
'',
|
|
224
|
-
`This reminder only describes the
|
|
224
|
+
`This reminder only describes the connection/process held by the current dialog; it does not determine global tool registration/visibility for that server.`,
|
|
225
225
|
].join('\n'),
|
|
226
226
|
};
|
|
227
227
|
},
|
|
@@ -29,7 +29,7 @@ control is Dominds' **dialog control toolset** for managing dialog state, remind
|
|
|
29
29
|
- **Reminder management**: Three reminder scopes: `dialog` / `task` / `agent`. Default to `task` for current work under the same Taskdoc; use `dialog` only for truly dialog-local notes; use `agent` only for urgent, short-lived, globally visible cues
|
|
30
30
|
- **Taskdoc operations**: Append to, replace, or delete task contract sections (goals/constraints/progress); within Taskdoc, `progress` is the team-shared, quasi-real-time, scannable task bulletin board
|
|
31
31
|
- **Context maintenance**: Reduce cognitive load without losing key resume state
|
|
32
|
-
- **Reply routing**: Separate
|
|
32
|
+
- **Reply routing**: Separate asking the tellasker back, sending the final reply, and ordinary plain text in Side Dialog / ask-back flows
|
|
33
33
|
|
|
34
34
|
## Quick Navigation
|
|
35
35
|
|
|
@@ -58,7 +58,7 @@ Reminders are temporary current-work information for:
|
|
|
58
58
|
- Recording blocking issues
|
|
59
59
|
- Holding continuation-package bridge notes before `clear_mind`
|
|
60
60
|
|
|
61
|
-
Reminders are not for manually copying
|
|
61
|
+
Reminders are not for manually copying environment state automatically maintained by Dominds, such as background process status, in-flight background asks/collaboration, or browser/session attachment state. Dominds-managed reminders, panels, and tool outputs are the authoritative place for that state; manual notes go stale easily and create cognitive noise.
|
|
62
62
|
|
|
63
63
|
Scope rule:
|
|
64
64
|
|
|
@@ -42,7 +42,7 @@ Default to `task`. Use `dialog` only when the note is truly dialog-local; use `a
|
|
|
42
42
|
- `agent` reminders stay visible in all later dialogs you lead
|
|
43
43
|
- Can be added, modified, or deleted at any time
|
|
44
44
|
- Should stay compact, scannable, and directly actionable by default
|
|
45
|
-
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates a structured continuation-package reminder; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. If
|
|
45
|
+
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates a structured continuation-package reminder; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. If Dominds has already warned that context is tight or critical, Side Dialog reminders have no fixed length limit and rough multi-reminder carry-over is acceptable
|
|
46
46
|
|
|
47
47
|
**Difference from memory:**
|
|
48
48
|
| Feature | dialog reminder | task reminder | agent reminder | personal memory |
|
|
@@ -104,17 +104,17 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
104
104
|
- Do not treat an agent teammate like a human coworker who can only handle one conversation at a time. Same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task
|
|
105
105
|
- Call `tellaskBack({ tellaskContent })` only when the tellasker must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership
|
|
106
106
|
- If a human must personally perform login / GUI / captcha / high-risk authorization: call `askHuman({ tellaskContent })`
|
|
107
|
-
- If the current Side Dialog is complete and the
|
|
108
|
-
- If the current Side Dialog is complete and the
|
|
109
|
-
- If you are answering a tellasker `tellaskBack` follow-up and
|
|
110
|
-
- Plain text is not the completion channel for inter-dialog delivery
|
|
107
|
+
- If the current Side Dialog is complete and the task header says `replyTellask`: call `replyTellask({ replyContent })`
|
|
108
|
+
- If the current Side Dialog is complete and the task header says `replyTellaskSessionless`: call `replyTellaskSessionless({ replyContent })`
|
|
109
|
+
- If you are answering a tellasker `tellaskBack` follow-up and Dominds shows `replyTellaskBack`: call `replyTellaskBack({ replyContent })`
|
|
110
|
+
- Plain text is not the completion channel for inter-dialog delivery. If you write final content for the requester but do not send it through the reply tool named by Dominds, Dominds may temporarily remind you to use that tool. Do not treat plain text as the formal reply path; the other dialog may not receive a formal reply that way.
|
|
111
111
|
|
|
112
112
|
### Low-Burden Rule
|
|
113
113
|
|
|
114
|
-
- Focus on doing the current task correctly first;
|
|
115
|
-
- Do not memorize reply variants by yourself; follow the current
|
|
116
|
-
-
|
|
117
|
-
- If
|
|
114
|
+
- Focus on doing the current task correctly first; send the final reply only when the final content is ready and Dominds names a reply tool
|
|
115
|
+
- Do not memorize reply variants by yourself; follow the current task header and the reply tool currently named/shown by Dominds
|
|
116
|
+
- Reply tool descriptions are intentionally minimal and spec-like; use this manual's principles / scenarios for situational guidance
|
|
117
|
+
- If Dominds names/shows only one reply tool, that is the only correct completion path for the current state
|
|
118
118
|
- `tellaskBack` is valid only when ownership cannot be determined from existing SOP, or when the tellasker must answer; it is not the default first move for every blocked state
|
|
119
119
|
|
|
120
120
|
## Best Practices
|
|
@@ -137,10 +137,10 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
137
137
|
|
|
138
138
|
- Keep concise: reminders are often 1-3 items; prefer `update_reminder` to compress/merge
|
|
139
139
|
- Separate carriers: information that must synchronize the team's current effective state, key decisions, next steps, or still-active blockers belongs in `progress`, the quasi-real-time task bulletin board; reminders keep local resume details
|
|
140
|
-
- Do not duplicate system state: background process status, in-flight background asks/collaboration, browser/session attachment state, and similar
|
|
140
|
+
- Do not duplicate system state: background process status, in-flight background asks/collaboration, browser/session attachment state, and similar environment state automatically maintained by Dominds do not belong in manual reminders. Dominds-managed reminders, panels, and tool outputs are the authoritative place for that state; manual copies go stale easily and create cognitive noise
|
|
141
141
|
- Team-facing: keep `progress` scannable and centered on what is still effective now; do not let it degrade into a personal log, raw chronology, scratchpad, or stale history pile. Use `mind_more` for small additions; when cleanup/reordering/compression is needed, call `recall_taskdoc` first and then use `change_mind` with the returned `content_hash` as `previous_content_hash`
|
|
142
142
|
- Condense when needed: `mind_more` is not the default bookkeeping move. If one topic already has several phase notes, prefer `change_mind` to merge them into the current summary; put the detailed expansion in formal rtws documentation and keep a document pointer in Taskdoc. If the replacement would overwrite existing content, proceed only with direct human confirmation or after applying a human-approved SOP/acceptance standard that considers the existing content
|
|
143
|
-
- Collapse before clearing: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then creates a structured continuation-package reminder; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders. If
|
|
143
|
+
- Collapse before clearing: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then creates a structured continuation-package reminder; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders. If Dominds has already warned that context is tight or critical, rough multi-reminder carry-over is acceptable but must be reconciled first in the new course
|
|
144
144
|
- Avoid raw-material dumps: do not paste long logs or large tool outputs into reminders
|
|
145
145
|
- Documentation layering: Taskdoc says “what the team should sync on / do next now”; formal rtws documentation carries “why, how, detailed evidence, and the full process”. When Taskdoc references formal rtws documentation, use a stable path/section name/relevant command instead of copying the full content
|
|
146
146
|
|
|
@@ -164,5 +164,5 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
164
164
|
1. `dialog` reminders end with the dialog; `task` reminders stay visible under the current Taskdoc; `agent` reminders stay visible in all later dialogs you lead
|
|
165
165
|
2. Use `do_mind` to create missing Taskdoc sections; use `mind_more` for small Taskdoc additions; use `change_mind` for full-section replacement of existing sections only after merging existing content and calling `recall_taskdoc` for the current `content_hash`; use `never_mind` when a whole section file should be deleted. Do not treat `mind_more` as a chronology tool; when cleanup, stale-entry removal, or same-topic consolidation is needed, use `recall_taskdoc` then `change_mind`
|
|
166
166
|
3. `do_mind` / `mind_more` / `change_mind` / `never_mind` do not start a new course
|
|
167
|
-
4. A continuation-package reminder should keep only details still not covered by Taskdoc but easy to lose during resume; in the Main Dialog, undocumented discussion details from current dialog history that the next course needs to know should be written to the appropriate Taskdoc sections first; in a Side Dialog
|
|
167
|
+
4. A continuation-package reminder should keep only details still not covered by Taskdoc but easy to lose during resume; in the Main Dialog, undocumented discussion details from current dialog history that the next course needs to know should be written to the appropriate Taskdoc sections first; in a Side Dialog after Dominds warns that context is tight or critical, maintain sufficiently detailed continuation-package reminders only
|
|
168
168
|
5. Do not turn `task` / `agent` reminders into a long-term fact dump; move durable knowledge into `personal_memory`
|
|
@@ -57,11 +57,11 @@ delete_reminder({
|
|
|
57
57
|
- If the information should synchronize the whole team's current effective state, put it in Taskdoc `progress` instead
|
|
58
58
|
- If the note is durable knowledge rather than an active current-work cue, move it to `personal_memory` instead
|
|
59
59
|
|
|
60
|
-
## Scenario 2: Side Dialog is complete, and the
|
|
60
|
+
## Scenario 2: Side Dialog is complete, and the task header requires replyTellask
|
|
61
61
|
|
|
62
62
|
### Scenario Description
|
|
63
63
|
|
|
64
|
-
The current Side Dialog is finished, and the
|
|
64
|
+
The current Side Dialog is finished, and the task header explicitly says "when complete, call `replyTellask`".
|
|
65
65
|
|
|
66
66
|
### Example
|
|
67
67
|
|
|
@@ -74,7 +74,7 @@ replyTellask({
|
|
|
74
74
|
|
|
75
75
|
### Key Points
|
|
76
76
|
|
|
77
|
-
- Do not replace this with a plain final message;
|
|
77
|
+
- Do not replace this with a plain final message; formal delivery must use the reply tool named by Dominds, or the other dialog may not receive a formal reply
|
|
78
78
|
- Put the final deliverable body directly in `replyContent`
|
|
79
79
|
- If the header says `replyTellaskSessionless`, use the same shape with that exact function name
|
|
80
80
|
|
|
@@ -97,13 +97,13 @@ tellaskBack({
|
|
|
97
97
|
|
|
98
98
|
- This example uses `tellaskBack` because tellasker input is specifically required
|
|
99
99
|
- If team SOP / role ownership already identifies the responsible executor, directly use `tellask` / `tellaskSessionless` for that owner instead of mapping every unfinished state to `tellaskBack`
|
|
100
|
-
- Do not use
|
|
100
|
+
- Do not use reply tools for intermediate clarifications
|
|
101
101
|
|
|
102
102
|
## Scenario 4: Tellasker answered the ask-back, so use replyTellaskBack to close
|
|
103
103
|
|
|
104
104
|
### Scenario Description
|
|
105
105
|
|
|
106
|
-
You previously sent a `tellaskBack`, the tellasker has now replied, and
|
|
106
|
+
You previously sent a `tellaskBack`, the tellasker has now replied, and Dominds shows `replyTellaskBack`.
|
|
107
107
|
|
|
108
108
|
### Example
|
|
109
109
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
The **tool descriptions themselves** for these functions intentionally stay minimal and spec-like. This section carries the smallest practical lookup for when they appear and how to choose among them.
|
|
25
25
|
|
|
26
|
-
| Function | Minimal parameter contract | When
|
|
26
|
+
| Function | Minimal parameter contract | When Dominds shows it | Effect |
|
|
27
27
|
| ------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
28
28
|
| `replyTellask` | `{ replyContent: string }` | Current Side Dialog comes from a sessioned `tellask` and is ready for final delivery | Delivers the final result for the current tellask session |
|
|
29
29
|
| `replyTellaskSessionless` | `{ replyContent: string }` | Current Side Dialog comes from a one-shot `tellaskSessionless` and is ready for final delivery | Delivers the final result for the current one-shot tellask |
|
|
@@ -32,11 +32,11 @@ The **tool descriptions themselves** for these functions intentionally stay mini
|
|
|
32
32
|
|
|
33
33
|
### Minimal Usage Rules
|
|
34
34
|
|
|
35
|
-
- Focus on doing the current task correctly first;
|
|
36
|
-
- Call whichever
|
|
37
|
-
- If the
|
|
35
|
+
- Focus on doing the current task correctly first; send the final reply only when the final content is ready and Dominds names a reply tool
|
|
36
|
+
- Call whichever reply tool Dominds currently shows; do not switch to another reply tool by yourself
|
|
37
|
+
- If the task header explicitly names a reply tool, follow that exact name
|
|
38
38
|
- Put only the final deliverable body in `replyContent`; do not wrap it in meta-explanations like "I am now calling replyTellask"
|
|
39
|
-
- If you
|
|
39
|
+
- If you write final deliverable content but do not send it through the reply tool named by Dominds, Dominds may temporarily remind you to use that tool; do not treat plain text as the formal reply path, because the other dialog may not receive a formal reply that way
|
|
40
40
|
|
|
41
41
|
### 1. add_reminder
|
|
42
42
|
|
|
@@ -45,8 +45,8 @@ Add reminder.
|
|
|
45
45
|
Use when:
|
|
46
46
|
|
|
47
47
|
- Adding a new temporary current-work item
|
|
48
|
-
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates continuation-package notes; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. When
|
|
49
|
-
- Record only manually maintained current-work / continuation details; do not put
|
|
48
|
+
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates continuation-package notes; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. When Dominds has already warned that context is tight or critical, Side Dialog reminders have no fixed length limit and rough bridge notes are acceptable
|
|
49
|
+
- Record only manually maintained current-work / continuation details; do not put environment state automatically maintained by Dominds, such as background process status, in-flight background asks, or session attachment state, into manual reminders
|
|
50
50
|
|
|
51
51
|
**Parameters:**
|
|
52
52
|
|
|
@@ -92,7 +92,7 @@ Use when:
|
|
|
92
92
|
- Compressing / merging existing reminders
|
|
93
93
|
- Rewriting pre-clear resume info into continuation-package notes
|
|
94
94
|
- Removing details that have already been promoted into Taskdoc
|
|
95
|
-
- Removing or rewriting system environment state that was mistakenly captured in a manual reminder;
|
|
95
|
+
- Removing or rewriting system environment state that was mistakenly captured in a manual reminder; Dominds-managed reminders, panels, and tool outputs are the authoritative place for that state
|
|
96
96
|
|
|
97
97
|
**Parameters:**
|
|
98
98
|
|
|
@@ -360,7 +360,7 @@ message: <error message>
|
|
|
360
360
|
|
|
361
361
|
- Normal reminders should stay concise, fresh, and directly actionable; often 1-3 items total
|
|
362
362
|
- For a continuation package, use structured notes by default: next step, key pointers, run/verify, easy-to-lose volatile details
|
|
363
|
-
- If
|
|
363
|
+
- If Dominds has already warned that context is tight or critical: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then keeps necessary continuation-package reminders; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders with no fixed length limit. Rough multi-reminder bridge notes are acceptable and should be reconciled as the first step only after Dominds actually starts the new course
|
|
364
364
|
- Keep only details still not covered by Taskdoc; do not repeat team-shared status. If the team needs “where we are now / which decisions are in effect / what is next / which blockers still hold”, write it back to Taskdoc `progress`
|
|
365
|
-
- Do not manually record
|
|
365
|
+
- Do not manually record environment state automatically maintained by Dominds, such as whether background processes are still running, in-flight background asks/collaboration, or browser/session attachment state. Manual copies go stale easily and conflict with the Dominds-managed status, creating cognitive noise
|
|
366
366
|
- Do not paste long logs, large tool outputs, or raw material into reminders
|
|
@@ -29,7 +29,7 @@ control 是 Dominds 的**对话控制工具集**,用于管理对话状态、
|
|
|
29
29
|
- **提醒管理**:提醒分 `dialog` / `task` / `agent` 三个 scope;默认是 `task`,用于同一差遣牒任务下的手头工作;`dialog` 只用于真正对话局部的提醒;`agent` 只用于紧急、短期、全局刺眼提醒
|
|
30
30
|
- **差遣牒操作**:追加、替换或删除任务契约章节(goals/constraints/progress);其中 `progress` 是全队共享、准实时、可扫读的任务公告牌
|
|
31
31
|
- **上下文维护**:在不丢关键恢复线索的前提下降低认知负载
|
|
32
|
-
-
|
|
32
|
+
- **回复路由**:在支线/回问语境下,区分回问诉请者、发送最终回贴与普通文本的职责边界
|
|
33
33
|
|
|
34
34
|
## 快速导航
|
|
35
35
|
|
|
@@ -56,9 +56,9 @@ control 是 Dominds 的**对话控制工具集**,用于管理对话状态、
|
|
|
56
56
|
- 标记待处理事项
|
|
57
57
|
- 追踪当前下一步/阻塞
|
|
58
58
|
- 记录阻塞问题
|
|
59
|
-
- 在 `clear_mind`
|
|
59
|
+
- 在 `clear_mind` 前承载接续包;若 Dominds 已提醒当前程吃紧/告急,可先带多条粗略提醒项过桥
|
|
60
60
|
|
|
61
|
-
提醒不用于手工复制 Dominds
|
|
61
|
+
提醒不用于手工复制 Dominds 会自动维护的系统状态,例如后台进程状态、后台进行中诉请/协作、浏览器/会话附件状态等。这些状态以 Dominds 自动维护的提醒、面板和工具输出为准;手工记录很容易过时并造成认知干扰。
|
|
62
62
|
|
|
63
63
|
scope 规则:
|
|
64
64
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
- `agent` 提醒会在所有由你主理的后续对话里继续可见
|
|
43
43
|
- 可随时添加、修改、删除
|
|
44
44
|
- 默认应保持少量、可扫读、可直接指导下一步
|
|
45
|
-
- 准备 `clear_mind`
|
|
45
|
+
- 准备 `clear_mind` 时,主线对话先把应由下一程知会的未落文档讨论细节补进差遣牒,再压缩成结构化接续包提醒项;支线对话直接维护足够详尽的接续包提醒项。若 Dominds 已提醒上下文吃紧/告急,支线提醒项没有固定长度限制,也可先保留多条粗略提醒项过桥
|
|
46
46
|
|
|
47
47
|
**与 memory 的区别:**
|
|
48
48
|
| 特性 | dialog reminder | task reminder | agent reminder | personal memory |
|
|
@@ -103,17 +103,17 @@
|
|
|
103
103
|
- 不要把智能体队友当成真人同事:祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务
|
|
104
104
|
- 只有当必须向诉请者补需求、澄清目标、裁决取舍、确认验收口径、提供缺失输入,或现有规程无法明确判责时:调用 `tellaskBack({ tellaskContent })`
|
|
105
105
|
- 需要人类亲自登录 / GUI / 验证码 / 高风险授权时:调用 `askHuman({ tellaskContent })`
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
- 当前是在回复一条诉请者发来的 `tellaskBack` 续诉请,且
|
|
109
|
-
-
|
|
106
|
+
- 当前支线已经完成,且当前任务开头明确要求 `replyTellask`:调用 `replyTellask({ replyContent })`
|
|
107
|
+
- 当前支线已经完成,且当前任务开头明确要求 `replyTellaskSessionless`:调用 `replyTellaskSessionless({ replyContent })`
|
|
108
|
+
- 当前是在回复一条诉请者发来的 `tellaskBack` 续诉请,且 Dominds 显示了 `replyTellaskBack`:调用 `replyTellaskBack({ replyContent })`
|
|
109
|
+
- 普通文本不是跨对话完成交付通道;如果你直接写出了可回给诉请者的最终内容但没按 Dominds 点名的回复工具发送,Dominds 可能临时提醒你改用那个工具。不要把普通文本当成正式回贴路径;对方可能收不到正式回贴。
|
|
110
110
|
|
|
111
111
|
### 心智负担最小化规则
|
|
112
112
|
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
- 若
|
|
113
|
+
- 先专注把当前任务做对;只有最终内容准备好、且 Dominds 点名了回复工具时,才发送最终回贴
|
|
114
|
+
- 不要靠记忆硬选回复工具;以当前任务开头和 Dominds 当前点名/显示的回复工具为准
|
|
115
|
+
- 回复工具自身说明文案故意保持极简,只承载最小规格;情景判断看本手册的 principles / scenarios
|
|
116
|
+
- 若 Dominds 只点名/显示一个回复工具,那就是当前应调用的唯一完成路径
|
|
117
117
|
- `tellaskBack` 只在“无法按现有规程明确判责,或必须回问诉请者”时成立,不是所有阻塞的默认第一动作
|
|
118
118
|
|
|
119
119
|
## 最佳实践
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
|
|
123
123
|
- **当前手头工作**:当前下一步、阻塞、关键定位信息
|
|
124
124
|
- **易丢细节**:临时路径、id、命令、样例输入
|
|
125
|
-
- **换程接续**:在 `clear_mind`
|
|
125
|
+
- **换程接续**:在 `clear_mind` 前整理接续包;若 Dominds 已提醒当前程吃紧/告急,可先保留多条粗略提醒项
|
|
126
126
|
- **任务延续提示**:如果在当前差遣牒任务内都应该继续看到它,用 `task`
|
|
127
127
|
- **全局刺眼提示**:如果它应该在所有由你主理的后续对话里继续看到,而且是短期、紧急、全局刺眼提醒,用 `agent`
|
|
128
128
|
|
|
@@ -136,10 +136,10 @@
|
|
|
136
136
|
|
|
137
137
|
- 保持简洁:默认提醒项常见 1–3 条,优先 `update_reminder` 压缩/合并
|
|
138
138
|
- 区分载体:需要向全队同步的当前有效状态、关键决策、下一步与仍成立阻塞,写入 `progress` 这一准实时任务公告牌;提醒项只留个人/当前对话恢复所需细节
|
|
139
|
-
- 避免重复系统状态:后台进程状态、后台进行中诉请/协作、浏览器/会话附件状态等 Dominds
|
|
139
|
+
- 避免重复系统状态:后台进程状态、后台进行中诉请/协作、浏览器/会话附件状态等 Dominds 会自动维护的信息,不要写进手工提醒项;这些状态以 Dominds 自动维护的提醒、面板和工具输出为准,手工副本容易过时并造成认知干扰
|
|
140
140
|
- 面向全队:`progress` 应保持可扫读、以“当前仍有效”为准,不要退化成个人日志、流水账、临时便签或历史残影堆积;少量新增用 `mind_more`,需要清旧/重排/压缩时先调用 `recall_taskdoc`,再用 `change_mind` 并携带返回的 `content_hash` 作为 `previous_content_hash`
|
|
141
141
|
- 按需整理:`mind_more` 不是默认记账动作。若同一主题已有多条阶段性记录,优先用 `change_mind` 合并成当前摘要;把细节放进 rtws 正式文档,并在差遣牒里保留文档定位 pointer。若会冲掉原有内容,必须有直接人类确认,或已按人类认可 SOP/验收标准充分考虑原有内容后再改写
|
|
142
|
-
-
|
|
142
|
+
- 换程前收束:主线对话先把尚未落实到文档、且下一程需要知会的讨论细节写入差遣牒合适章节,再整理结构化接续包提醒项;支线对话不要维护差遣牒,也不要整理差遣牒更新提案,直接维护足够详尽的接续包提醒项。若 Dominds 已提醒上下文吃紧/告急,则先保留多条粗略提醒项过桥也可以;当前程只做落文档/保信息 + `clear_mind`(支线只做保信息 + `clear_mind`),Dominds 真正开启新一程后第一步再收敛
|
|
143
143
|
- 拒绝原料堆积:不要把长日志/大段 tool output 直接塞进提醒项
|
|
144
144
|
- 文档分层:差遣牒写“现在应如何同步/推进”,正式文档写“为什么、怎么做、详细证据和完整过程”。差遣牒需要引用正式文档时,写稳定路径/章节名/相关命令,而不是复制整段内容
|
|
145
145
|
|
|
@@ -57,11 +57,11 @@ delete_reminder({
|
|
|
57
57
|
- 如果信息需要向全队同步当前有效状态、关键决策、下一步或仍成立阻塞,应写入 Taskdoc `progress`
|
|
58
58
|
- 如果内容本质上是长期知识而不是当前手头工作提示,应改存到 `personal_memory`
|
|
59
59
|
|
|
60
|
-
## 场景 2
|
|
60
|
+
## 场景 2:支线已完成,按任务开头要求调用 replyTellask
|
|
61
61
|
|
|
62
62
|
### 场景描述
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
当前支线处理完毕,任务开头明确写着“完成任务时必须调用 `replyTellask`”。
|
|
65
65
|
|
|
66
66
|
### 示例
|
|
67
67
|
|
|
@@ -73,9 +73,9 @@ replyTellask({
|
|
|
73
73
|
|
|
74
74
|
### 关键点
|
|
75
75
|
|
|
76
|
-
-
|
|
76
|
+
- 不要再发一条普通最终消息代替;正式回贴必须走 Dominds 点名的回复工具,否则对方可能收不到正式回贴
|
|
77
77
|
- `replyContent` 直接放最终交付正文
|
|
78
|
-
-
|
|
78
|
+
- 若任务开头写的是 `replyTellaskSessionless`,则同结构替换函数名
|
|
79
79
|
|
|
80
80
|
## 场景 3:当前未完成,需要回问诉请者
|
|
81
81
|
|
|
@@ -90,20 +90,20 @@ tellaskBack({
|
|
|
90
90
|
tellaskContent: '还缺少生产环境端口与部署入口信息。请补充这两项后我再继续给出最终方案。',
|
|
91
91
|
});
|
|
92
92
|
|
|
93
|
-
// 等诉请者补充后,
|
|
93
|
+
// 等诉请者补充后,Dominds 会在当前对话里继续推进
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
### 关键点
|
|
97
97
|
|
|
98
98
|
- 这里只是“必须向诉请者补输入”的例子,所以用 `tellaskBack`
|
|
99
99
|
- 若团队规程 / SOP / 职责卡已经能明确执行负责人,应直接 `tellask` / `tellaskSessionless` 对应负责人,而不是机械因为“未完成态”就用 `tellaskBack`
|
|
100
|
-
- `tellaskBack`
|
|
100
|
+
- `tellaskBack` 只负责把问题问回去,不负责最终交付;中间澄清不要调用回复工具
|
|
101
101
|
|
|
102
102
|
## 场景 4:收到 ask-back 续诉请后,用 replyTellaskBack 收口
|
|
103
103
|
|
|
104
104
|
### 场景描述
|
|
105
105
|
|
|
106
|
-
你之前发过 `tellaskBack`,诉请者现在补回了所需信息,
|
|
106
|
+
你之前发过 `tellaskBack`,诉请者现在补回了所需信息,Dominds 显示了 `replyTellaskBack`。
|
|
107
107
|
|
|
108
108
|
### 示例
|
|
109
109
|
|