dominds 1.27.3 → 1.27.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/dist/dialog-fork.js +2 -1
- package/dist/dialog.d.ts +3 -3
- package/dist/dialog.js +7 -4
- package/dist/llm/kernel-driver/drive.js +65 -38
- package/dist/mcp/supervisor.js +4 -1
- package/dist/minds/system-prompt-parts.js +30 -30
- package/dist/persistence.js +65 -16
- package/dist/priming.js +2 -3
- package/dist/runtime/driver-messages.js +42 -28
- package/dist/shared-reminders.js +2 -2
- package/dist/tool.d.ts +7 -4
- package/dist/tool.js +10 -4
- package/dist/tools/app-reminders.js +4 -3
- package/dist/tools/ctrl.js +4 -1
- package/dist/tools/pending-tellask-reminder.js +1 -0
- package/dist/tools/prompts/control/en/index.md +3 -3
- package/dist/tools/prompts/control/en/principles.md +4 -4
- package/dist/tools/prompts/control/en/scenarios.md +10 -3
- package/dist/tools/prompts/control/en/tools.md +4 -4
- package/dist/tools/prompts/control/zh/index.md +3 -3
- package/dist/tools/prompts/control/zh/principles.md +4 -4
- package/dist/tools/prompts/control/zh/scenarios.md +10 -3
- package/dist/tools/prompts/control/zh/tools.md +4 -4
- package/package.json +1 -1
package/dist/persistence.js
CHANGED
|
@@ -697,8 +697,8 @@ function serializeReminderSnapshot(reminder) {
|
|
|
697
697
|
ownerName: reminder.owner?.name,
|
|
698
698
|
meta: reminder.meta,
|
|
699
699
|
echoback: reminder.echoback,
|
|
700
|
-
scope: reminder.scope
|
|
701
|
-
renderMode: reminder.renderMode
|
|
700
|
+
scope: reminder.scope,
|
|
701
|
+
renderMode: reminder.renderMode,
|
|
702
702
|
createdAt: reminder.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
703
703
|
priority: reminder.priority ?? 'medium',
|
|
704
704
|
};
|
|
@@ -9308,6 +9308,7 @@ class DialogPersistence {
|
|
|
9308
9308
|
static resolvePendingUserInterjectionReplyFromCourseEvents(events, course) {
|
|
9309
9309
|
let pendingUserInterjectionReply;
|
|
9310
9310
|
let visibleReplySettled = false;
|
|
9311
|
+
let visibleReplyGenseq;
|
|
9311
9312
|
for (const event of events) {
|
|
9312
9313
|
if (event.type === 'human_text_record') {
|
|
9313
9314
|
if (event.origin !== 'user')
|
|
@@ -9321,6 +9322,7 @@ class DialogPersistence {
|
|
|
9321
9322
|
genseq: (0, storage_1.toCallSiteGenseqNo)(event.genseq),
|
|
9322
9323
|
};
|
|
9323
9324
|
visibleReplySettled = false;
|
|
9325
|
+
visibleReplyGenseq = undefined;
|
|
9324
9326
|
continue;
|
|
9325
9327
|
}
|
|
9326
9328
|
if (pendingUserInterjectionReply === undefined) {
|
|
@@ -9328,23 +9330,38 @@ class DialogPersistence {
|
|
|
9328
9330
|
}
|
|
9329
9331
|
if (event.type === 'agent_words_record') {
|
|
9330
9332
|
visibleReplySettled = true;
|
|
9333
|
+
visibleReplyGenseq = event.genseq;
|
|
9331
9334
|
continue;
|
|
9332
9335
|
}
|
|
9333
9336
|
if (event.type === 'func_call_record' || event.type === 'tellask_call_record') {
|
|
9334
|
-
|
|
9337
|
+
if (visibleReplyGenseq === undefined || event.genseq <= visibleReplyGenseq) {
|
|
9338
|
+
visibleReplySettled = false;
|
|
9339
|
+
visibleReplyGenseq = undefined;
|
|
9340
|
+
}
|
|
9335
9341
|
}
|
|
9336
9342
|
}
|
|
9337
9343
|
return visibleReplySettled ? undefined : pendingUserInterjectionReply;
|
|
9338
9344
|
}
|
|
9339
9345
|
static resolveAnsweredUserInterjectionA2HFromCourseEvents(args) {
|
|
9340
9346
|
let pendingUserInterjectionReply;
|
|
9341
|
-
let
|
|
9342
|
-
let
|
|
9347
|
+
let visibleAnswer;
|
|
9348
|
+
let hasAutoDriveAfterVisibleAnswer = false;
|
|
9349
|
+
let possibleAutoDriveStartGenseq;
|
|
9343
9350
|
for (const event of args.events) {
|
|
9344
9351
|
if (event.type === 'human_text_record') {
|
|
9345
|
-
if (event.origin !== 'user')
|
|
9352
|
+
if (event.origin !== 'user') {
|
|
9353
|
+
if (visibleAnswer !== undefined &&
|
|
9354
|
+
possibleAutoDriveStartGenseq !== undefined &&
|
|
9355
|
+
event.genseq === possibleAutoDriveStartGenseq) {
|
|
9356
|
+
hasAutoDriveAfterVisibleAnswer = true;
|
|
9357
|
+
}
|
|
9346
9358
|
continue;
|
|
9359
|
+
}
|
|
9347
9360
|
if (typeof event.q4hAnswerCallId === 'string' && event.q4hAnswerCallId.trim() !== '') {
|
|
9361
|
+
pendingUserInterjectionReply = undefined;
|
|
9362
|
+
visibleAnswer = undefined;
|
|
9363
|
+
hasAutoDriveAfterVisibleAnswer = false;
|
|
9364
|
+
possibleAutoDriveStartGenseq = undefined;
|
|
9348
9365
|
continue;
|
|
9349
9366
|
}
|
|
9350
9367
|
pendingUserInterjectionReply = {
|
|
@@ -9352,24 +9369,56 @@ class DialogPersistence {
|
|
|
9352
9369
|
course: (0, storage_1.toDialogCourseNumber)(args.course),
|
|
9353
9370
|
genseq: (0, storage_1.toCallSiteGenseqNo)(event.genseq),
|
|
9354
9371
|
};
|
|
9355
|
-
|
|
9356
|
-
|
|
9372
|
+
visibleAnswer = undefined;
|
|
9373
|
+
hasAutoDriveAfterVisibleAnswer = false;
|
|
9374
|
+
possibleAutoDriveStartGenseq = undefined;
|
|
9357
9375
|
continue;
|
|
9358
9376
|
}
|
|
9359
9377
|
if (pendingUserInterjectionReply === undefined) {
|
|
9360
9378
|
continue;
|
|
9361
9379
|
}
|
|
9362
9380
|
if (event.type === 'agent_words_record') {
|
|
9363
|
-
|
|
9364
|
-
|
|
9381
|
+
if (visibleAnswer !== undefined &&
|
|
9382
|
+
(hasAutoDriveAfterVisibleAnswer ||
|
|
9383
|
+
(possibleAutoDriveStartGenseq !== undefined &&
|
|
9384
|
+
event.genseq === possibleAutoDriveStartGenseq))) {
|
|
9385
|
+
hasAutoDriveAfterVisibleAnswer = true;
|
|
9386
|
+
continue;
|
|
9387
|
+
}
|
|
9388
|
+
visibleAnswer = { content: event.content, genseq: event.genseq };
|
|
9389
|
+
continue;
|
|
9390
|
+
}
|
|
9391
|
+
if (event.type === 'gen_start_record') {
|
|
9392
|
+
if (visibleAnswer !== undefined &&
|
|
9393
|
+
(typeof event.msgId !== 'string' || event.msgId.trim() === '')) {
|
|
9394
|
+
hasAutoDriveAfterVisibleAnswer = true;
|
|
9395
|
+
possibleAutoDriveStartGenseq = undefined;
|
|
9396
|
+
}
|
|
9397
|
+
else if (visibleAnswer !== undefined) {
|
|
9398
|
+
possibleAutoDriveStartGenseq = event.genseq;
|
|
9399
|
+
}
|
|
9400
|
+
continue;
|
|
9401
|
+
}
|
|
9402
|
+
if (event.type === 'agent_thought_record' || event.type === 'runtime_guide_record') {
|
|
9403
|
+
if (visibleAnswer !== undefined &&
|
|
9404
|
+
possibleAutoDriveStartGenseq !== undefined &&
|
|
9405
|
+
event.genseq === possibleAutoDriveStartGenseq) {
|
|
9406
|
+
hasAutoDriveAfterVisibleAnswer = true;
|
|
9407
|
+
}
|
|
9365
9408
|
continue;
|
|
9366
9409
|
}
|
|
9367
9410
|
if (event.type === 'func_call_record' || event.type === 'tellask_call_record') {
|
|
9368
|
-
|
|
9369
|
-
|
|
9411
|
+
if (visibleAnswer !== undefined && event.genseq > visibleAnswer.genseq) {
|
|
9412
|
+
hasAutoDriveAfterVisibleAnswer = true;
|
|
9413
|
+
continue;
|
|
9414
|
+
}
|
|
9415
|
+
visibleAnswer = undefined;
|
|
9416
|
+
possibleAutoDriveStartGenseq = undefined;
|
|
9370
9417
|
}
|
|
9371
9418
|
}
|
|
9372
|
-
if (
|
|
9419
|
+
if (pendingUserInterjectionReply === undefined ||
|
|
9420
|
+
visibleAnswer === undefined ||
|
|
9421
|
+
!hasAutoDriveAfterVisibleAnswer) {
|
|
9373
9422
|
return undefined;
|
|
9374
9423
|
}
|
|
9375
9424
|
if (pendingUserInterjectionReply.msgId !== args.pending?.msgId) {
|
|
@@ -9379,16 +9428,16 @@ class DialogPersistence {
|
|
|
9379
9428
|
args.dialogId.rootId,
|
|
9380
9429
|
args.dialogId.selfId,
|
|
9381
9430
|
`c${String(args.course)}`,
|
|
9382
|
-
`g${String(
|
|
9431
|
+
`g${String(visibleAnswer.genseq)}`,
|
|
9383
9432
|
pendingUserInterjectionReply.msgId,
|
|
9384
9433
|
].join('|');
|
|
9385
9434
|
return {
|
|
9386
9435
|
id: `a2h-${Buffer.from(answerIdSource).toString('base64url')}`,
|
|
9387
|
-
content:
|
|
9436
|
+
content: visibleAnswer.content,
|
|
9388
9437
|
answeredAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
9389
9438
|
answerRef: {
|
|
9390
9439
|
course: (0, storage_1.toDialogCourseNumber)(args.course),
|
|
9391
|
-
genseq: (0, storage_1.toCallSiteGenseqNo)(
|
|
9440
|
+
genseq: (0, storage_1.toCallSiteGenseqNo)(visibleAnswer.genseq),
|
|
9392
9441
|
},
|
|
9393
9442
|
};
|
|
9394
9443
|
}
|
package/dist/priming.js
CHANGED
|
@@ -227,7 +227,7 @@ function reminderToSnapshot(reminder) {
|
|
|
227
227
|
meta: reminder.meta,
|
|
228
228
|
echoback: reminder.echoback,
|
|
229
229
|
scope: reminder.scope,
|
|
230
|
-
renderMode: reminder.renderMode
|
|
230
|
+
renderMode: reminder.renderMode,
|
|
231
231
|
createdAt: reminder.createdAt,
|
|
232
232
|
priority: reminder.priority,
|
|
233
233
|
};
|
|
@@ -2203,8 +2203,7 @@ async function applyPrimingRemindersToDialog(args) {
|
|
|
2203
2203
|
const taskReminders = [];
|
|
2204
2204
|
const agentReminders = [];
|
|
2205
2205
|
for (const reminder of args.reminders) {
|
|
2206
|
-
|
|
2207
|
-
switch (scope) {
|
|
2206
|
+
switch (reminder.scope) {
|
|
2208
2207
|
case 'dialog':
|
|
2209
2208
|
dialogReminders.push(reminder);
|
|
2210
2209
|
break;
|
|
@@ -135,16 +135,18 @@ function formatNewCourseStartPrompt(language, args) {
|
|
|
135
135
|
: `Dominds 因上下文已告急而自动开启了第 ${args.nextCourse} 程对话。`;
|
|
136
136
|
return (`${noticePrefix} ${prefix} ` +
|
|
137
137
|
'这是 Dominds 的换程提示,不是新的用户诉求;不要把这条提示当成新的待办,也不要只回复“收到/好的/我会先整理提醒项”。' +
|
|
138
|
-
'
|
|
139
|
-
'
|
|
138
|
+
'现在已经进入新一程:如果见到上一程的上下文吃紧/告急状况记录,此时既已消除。第一步先读取当前对话范围(scope=dialog)的接续包提醒项,尤其是其中写明的当前对话任务目标,并按这个目标恢复当前这一路主线对话/支线对话,不要仅凭同一差遣牒里的其它主线或支线内容改道。' +
|
|
139
|
+
'随后复核并在必要时整理接续包提醒项,以清醒头脑删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项;若提醒项已经足够清晰,就不要为了整理而整理。' +
|
|
140
|
+
'完成这一步后,直接按照当前对话范围提醒项里的任务目标继续推进;除非任务自然需要对用户交付结果,否则不要为这条提示单独回复。');
|
|
140
141
|
}
|
|
141
142
|
const prefix = args.source === 'clear_mind'
|
|
142
143
|
? `This is dialog course #${args.nextCourse}. You just cleared your mind.`
|
|
143
144
|
: `Dominds auto-started dialog course #${args.nextCourse} because context was critical.`;
|
|
144
145
|
return (`${noticePrefix} ${prefix} ` +
|
|
145
146
|
'This is a Dominds course-transition notice, not a new user request; do not treat it as a new to-do, and do not reply with a standalone "acknowledged/ok/I will reorganize the reminders first". ' +
|
|
146
|
-
'You are now in a new course:
|
|
147
|
-
'
|
|
147
|
+
'You are now in a new course: if you see records that the previous course was context-tight or context-critical, that condition is now resolved. First read the current-dialog scoped (scope=dialog) continuation-package reminders, especially the current dialog task goal written there, and resume this specific Main Dialog or Side Dialog from that goal instead of drifting into other Main/Side Dialog work that shares the same Taskdoc. ' +
|
|
148
|
+
'Then review and, if needed, rewrite any continuation-package reminders with a clear head, remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders; if the reminders are already clear enough, do not churn on them. ' +
|
|
149
|
+
'After that, continue directly from the task goal in the current-dialog scoped reminders; unless the task naturally calls for a user-facing delivery, do not send a standalone reply just for this notice.');
|
|
148
150
|
}
|
|
149
151
|
function formatDiligenceAutoContinuePrompt(language, diligenceText) {
|
|
150
152
|
const noticePrefix = formatSystemNoticePrefix(language);
|
|
@@ -795,14 +797,16 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
795
797
|
'',
|
|
796
798
|
'影响:对话历史中的工具调用/结果信息很多已经过时,成为你的思考负担。',
|
|
797
799
|
'',
|
|
798
|
-
'
|
|
800
|
+
'行动:你当前处于支线对话。本程不要维护差遣牒,也不要整理差遣牒更新提案;当前目标是维护足够详尽的当前对话范围(scope=dialog)接续包提醒项,然后主动 clear_mind 开启新一程继续工作。',
|
|
799
801
|
'',
|
|
800
|
-
'
|
|
802
|
+
'重点提醒:接续包提醒项必须写明当前这一路支线对话的任务目标;同一差遣牒下可能还有同一智能体的其它主线/支线对话,下一程要靠 scope=dialog 提醒项继续本路对话,不能靠共享差遣牒猜目标。',
|
|
803
|
+
'',
|
|
804
|
+
'提醒项应覆盖:当前对话历史中下一程需要知道的任务目标、讨论细节、下一步行动、关键定位信息、运行/验证信息、临时路径/ID/样例输入,以及任何恢复工作容易丢的判断依据。提醒项没有固定长度限制,宁可完整一些;允许写成多条粗略提醒项,不必在当前程强行压成单条。',
|
|
801
805
|
'',
|
|
802
806
|
'Dominds 已提醒当前上下文吃紧:不要继续扩张上下文,也不要提前进入“按接续包做清醒复核”的模式;真正清理冗余、合并提醒项,放到 Dominds 开启新一程后再做。',
|
|
803
807
|
'',
|
|
804
808
|
'操作:',
|
|
805
|
-
'- 优先新增详尽接续包提醒项:add_reminder({ "content": "..." })',
|
|
809
|
+
'- 优先新增详尽接续包提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
|
|
806
810
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
807
811
|
].join('\n');
|
|
808
812
|
}
|
|
@@ -813,14 +817,15 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
813
817
|
'',
|
|
814
818
|
'影响:对话历史中的工具调用/结果信息很多已经过时,成为你的思考负担。',
|
|
815
819
|
'',
|
|
816
|
-
'
|
|
820
|
+
'行动:你当前处于主线对话。先新增或更新当前对话范围(scope=dialog)接续包提醒项,并把当前这一路主线对话的任务目标写清楚。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息记进 scope=dialog 新提醒项过桥(任务目标 + 下一步行动 + 关键定位信息 + 运行/验证信息 + 容易丢的临时细节);允许先带着一定冗余,也允许先写成多条粗略提醒项,不必在当前程强行压成单条。',
|
|
817
821
|
'',
|
|
818
|
-
'Dominds 已提醒当前上下文吃紧:不要继续扩张上下文,也不要提前进入“按接续包做清醒复核”的模式;那是 Dominds
|
|
822
|
+
'Dominds 已提醒当前上下文吃紧:不要继续扩张上下文,也不要提前进入“按接续包做清醒复核”的模式;那是 Dominds 真正开启新一程后的第一步。当前程的目标是先用 scope=dialog 提醒项保住本路对话目标,再把需要共享的事实补进差遣牒,最后把差遣牒仍未覆盖、但恢复本路对话会丢的信息带过桥;真正清理冗余、合并提醒项,放到新一程再做。然后主动 clear_mind,开启新一程对话继续工作。',
|
|
819
823
|
'',
|
|
820
824
|
'操作:',
|
|
825
|
+
'- 必须确保当前对话范围提醒项写明本路任务目标:add_reminder({ "content": "...", "scope": "dialog" }) 或 update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
821
826
|
'- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
822
827
|
'- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
823
|
-
'-
|
|
828
|
+
'- 优先新增当前对话 scope=dialog 过桥提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
|
|
824
829
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
825
830
|
].join('\n');
|
|
826
831
|
}
|
|
@@ -832,12 +837,14 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
832
837
|
'',
|
|
833
838
|
`Dominds 最多再提醒你 ${args.promptsRemainingAfterThis} 次,之后将自动清理头脑开启新一程对话。`,
|
|
834
839
|
'',
|
|
835
|
-
'
|
|
840
|
+
'行动:你当前处于支线对话。本程不要维护差遣牒,也不要整理差遣牒更新提案;当前目标是尽快维护足够详尽的当前对话范围(scope=dialog)接续包提醒项,然后 clear_mind。',
|
|
841
|
+
'',
|
|
842
|
+
'重点提醒:接续包提醒项必须写明当前这一路支线对话的任务目标;同一差遣牒下可能还有同一智能体的其它主线/支线对话,下一程要靠 scope=dialog 提醒项继续本路对话,不能靠共享差遣牒猜目标。',
|
|
836
843
|
'',
|
|
837
|
-
'
|
|
844
|
+
'提醒项应覆盖:当前对话历史中下一程需要知道的任务目标、讨论细节、下一步行动、关键定位信息、运行/验证信息、临时路径/ID/样例输入,以及任何恢复工作容易丢的判断依据。提醒项没有固定长度限制,宁可完整一些;允许写成多条粗略提醒项,甚至带一定冗余也可以,不必在当前程强行整理干净。',
|
|
838
845
|
'',
|
|
839
846
|
'操作:',
|
|
840
|
-
'- 优先新增详尽接续包提醒项:add_reminder({ "content": "..." })',
|
|
847
|
+
'- 优先新增详尽接续包提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
|
|
841
848
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
842
849
|
'- clear_mind({})',
|
|
843
850
|
'',
|
|
@@ -851,16 +858,17 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
851
858
|
'',
|
|
852
859
|
`Dominds 最多再提醒你 ${args.promptsRemainingAfterThis} 次,之后将自动清理头脑开启新一程对话。`,
|
|
853
860
|
'',
|
|
854
|
-
'行动:你当前处于主线对话。尽快保住易丢信息,然后 clear_mind。Dominds
|
|
861
|
+
'行动:你当前处于主线对话。尽快保住易丢信息,然后 clear_mind。Dominds 已提醒当前上下文告急:先新增或更新当前对话范围(scope=dialog)接续包提醒项,并把当前这一路主线对话的任务目标写清楚。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息新增 scope=dialog 提醒项带过桥;允许先保留多条粗略提醒项,甚至带一定冗余也可以,不必在当前程强行整理干净。',
|
|
855
862
|
'',
|
|
856
863
|
'操作:',
|
|
864
|
+
'- 必须确保当前对话范围提醒项写明本路任务目标:add_reminder({ "content": "...", "scope": "dialog" }) 或 update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
857
865
|
'- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
858
866
|
'- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
859
|
-
'-
|
|
867
|
+
'- 优先新增当前对话 scope=dialog 过桥提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
|
|
860
868
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
861
869
|
'- clear_mind({})',
|
|
862
870
|
'',
|
|
863
|
-
'
|
|
871
|
+
'接续包要点:当前对话任务目标 + 下一步行动 + 关键定位信息 + 运行验证方式 + 容易丢的临时细节;不要重复差遣牒已有内容,本程刚落入差遣牒的讨论细节只需提示下一程先查差遣牒。Dominds 已提醒当前上下文告急:不要提前做“新一程清醒复核”;Dominds 真正开启新一程后,第一步才是按当前对话范围提醒项里的任务目标继续本路对话,并重新审视整理:删除冗余、纠正偏激/失真思路、合并并压缩成高质量提醒项。',
|
|
864
872
|
].join('\n');
|
|
865
873
|
}
|
|
866
874
|
if (args.kind === 'caution' && args.mode === 'soft') {
|
|
@@ -872,14 +880,16 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
872
880
|
'',
|
|
873
881
|
'Impact: stale call/results in dialog history are creating cognitive noise.',
|
|
874
882
|
'',
|
|
875
|
-
'Action: you are in a Side Dialog. Do not maintain Taskdoc in this course, and do not draft Taskdoc update proposals. The current goal is to maintain sufficiently detailed continuation-package reminders, then proactively clear_mind to start a new dialog course.',
|
|
883
|
+
'Action: you are in a Side Dialog. Do not maintain Taskdoc in this course, and do not draft Taskdoc update proposals. The current goal is to maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders, then proactively clear_mind to start a new dialog course.',
|
|
876
884
|
'',
|
|
877
|
-
'
|
|
885
|
+
'Priority reminder: the continuation-package reminder must state this specific Side Dialog task goal. The same Taskdoc may have other Main/Side Dialogs for the same agent, so the next course must continue this dialog from scope=dialog reminders instead of guessing the goal from the shared Taskdoc.',
|
|
886
|
+
'',
|
|
887
|
+
'Reminders should cover: the task goal, discussion details from current dialog history that the next course needs to know, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and any reasoning needed to resume safely. Reminders have no fixed length limit, so prefer being complete; rough multi-reminder carry-over is acceptable, and you do not need to force everything into one clean reminder in the current course.',
|
|
878
888
|
'',
|
|
879
889
|
'Dominds has already warned that context is tight for the current course, so do not keep expanding context and do not switch early into “clear-headed continuation-package review” mode; reminder cleanup and dedup belong to the new course.',
|
|
880
890
|
'',
|
|
881
891
|
'Operations:',
|
|
882
|
-
'- Prefer adding a detailed continuation-package reminder first: add_reminder({ "content": "..." })',
|
|
892
|
+
'- Prefer adding a detailed continuation-package reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
|
|
883
893
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
884
894
|
].join('\n');
|
|
885
895
|
}
|
|
@@ -890,14 +900,15 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
890
900
|
'',
|
|
891
901
|
'Impact: stale call/results in dialog history are creating cognitive noise.',
|
|
892
902
|
'',
|
|
893
|
-
'Action: you are in the Main Dialog. First
|
|
903
|
+
'Action: you are in the Main Dialog. First add or update a current-dialog scoped (scope=dialog) continuation-package reminder and state this specific Main Dialog task goal clearly. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, write information still not covered by Taskdoc but easy to lose for resuming this dialog into scope=dialog bridge reminders (task goal + next step + key pointers + run/verify info + easy-to-lose volatile details). Some redundancy is acceptable, and rough multi-reminder carry-over is acceptable too; do not force everything into one clean reminder in the current course.',
|
|
894
904
|
'',
|
|
895
|
-
'Dominds has already warned that context is tight for the current course, so do not keep expanding context and do not switch early into “clear-headed continuation-package review” mode; that is the first step only after Dominds actually starts the new course. In the current course, the goal is to first fill Taskdoc with
|
|
905
|
+
'Dominds has already warned that context is tight for the current course, so do not keep expanding context and do not switch early into “clear-headed continuation-package review” mode; that is the first step only after Dominds actually starts the new course. In the current course, the goal is to first preserve this dialog goal in a scope=dialog reminder, then fill Taskdoc only with facts that need to be shared, and finally carry forward details still not covered by Taskdoc but needed to resume this dialog; reminder cleanup and dedup belong to the new course. Then proactively clear_mind to start a new dialog course.',
|
|
896
906
|
'',
|
|
897
907
|
'Operations:',
|
|
908
|
+
'- Ensure a current-dialog scoped reminder states this dialog task goal: add_reminder({ "content": "...", "scope": "dialog" }) or update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
898
909
|
'- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
899
910
|
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content: first call recall_taskdoc({"selector":"<selector>"}) for content_hash, then change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
900
|
-
'- Prefer adding a bridge reminder first: add_reminder({ "content": "..." })',
|
|
911
|
+
'- Prefer adding a current-dialog scope=dialog bridge reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
|
|
901
912
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
902
913
|
].join('\n');
|
|
903
914
|
}
|
|
@@ -909,12 +920,14 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
909
920
|
'',
|
|
910
921
|
`Dominds will remind you ${args.promptsRemainingAfterThis} more time(s), then automatically clear mind.`,
|
|
911
922
|
'',
|
|
912
|
-
'Action: you are in a Side Dialog. Do not maintain Taskdoc in this course, and do not draft Taskdoc update proposals. The current goal is to maintain sufficiently detailed continuation-package reminders as soon as possible, then clear_mind.',
|
|
923
|
+
'Action: you are in a Side Dialog. Do not maintain Taskdoc in this course, and do not draft Taskdoc update proposals. The current goal is to maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders as soon as possible, then clear_mind.',
|
|
924
|
+
'',
|
|
925
|
+
'Priority reminder: the continuation-package reminder must state this specific Side Dialog task goal. The same Taskdoc may have other Main/Side Dialogs for the same agent, so the next course must continue this dialog from scope=dialog reminders instead of guessing the goal from the shared Taskdoc.',
|
|
913
926
|
'',
|
|
914
|
-
'Reminders should cover: discussion details from current dialog history that the next course needs to know, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and any reasoning needed to resume safely. Reminders have no fixed length limit, so prefer being complete; multiple rough reminders, including some redundancy, are acceptable as a bridge.',
|
|
927
|
+
'Reminders should cover: the task goal, discussion details from current dialog history that the next course needs to know, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and any reasoning needed to resume safely. Reminders have no fixed length limit, so prefer being complete; multiple rough reminders, including some redundancy, are acceptable as a bridge.',
|
|
915
928
|
'',
|
|
916
929
|
'Operations:',
|
|
917
|
-
'- Prefer adding a detailed continuation-package reminder first: add_reminder({ "content": "..." })',
|
|
930
|
+
'- Prefer adding a detailed continuation-package reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
|
|
918
931
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
919
932
|
'- clear_mind({})',
|
|
920
933
|
'',
|
|
@@ -928,16 +941,17 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
928
941
|
'',
|
|
929
942
|
`Dominds will remind you ${args.promptsRemainingAfterThis} more time(s), then automatically clear mind.`,
|
|
930
943
|
'',
|
|
931
|
-
'Action: you are in the Main Dialog. Preserve easy-to-lose information, then clear_mind. Because Dominds has warned that context is critical, first
|
|
944
|
+
'Action: you are in the Main Dialog. Preserve easy-to-lose information, then clear_mind. Because Dominds has warned that context is critical, first add or update a current-dialog scoped (scope=dialog) continuation-package reminder and state this specific Main Dialog task goal clearly. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, add scope=dialog bridge reminders for information still not covered by Taskdoc but easy to lose when resuming this dialog. Multiple rough reminders, including some redundancy, are acceptable as a bridge; do not spend the current course forcing them into a clean final package.',
|
|
932
945
|
'',
|
|
933
946
|
'Operations:',
|
|
947
|
+
'- Ensure a current-dialog scoped reminder states this dialog task goal: add_reminder({ "content": "...", "scope": "dialog" }) or update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
934
948
|
'- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
935
949
|
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content: first call recall_taskdoc({"selector":"<selector>"}) for content_hash, then change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
936
|
-
'- Prefer adding a bridge reminder first: add_reminder({ "content": "..." })',
|
|
950
|
+
'- Prefer adding a current-dialog scope=dialog bridge reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
|
|
937
951
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
938
952
|
'- clear_mind({})',
|
|
939
953
|
'',
|
|
940
|
-
'Continuation package: next step + key pointers + run/verify info + easy-to-lose volatile details. Do not duplicate Taskdoc content; for discussion details just written into Taskdoc in this course, only remind the next course to review Taskdoc first. Because Dominds has warned that context is critical in the current course, do not start the new-course cleanup early; once Dominds actually starts the new course, the first step is to reconcile rough bridge reminders by removing redundancy, correcting biased or distorted bridge notes, and merging/compressing them into high-quality reminders.',
|
|
954
|
+
'Continuation package: current dialog task goal + next step + key pointers + run/verify info + easy-to-lose volatile details. Do not duplicate Taskdoc content; for discussion details just written into Taskdoc in this course, only remind the next course to review Taskdoc first. Because Dominds has warned that context is critical in the current course, do not start the new-course cleanup early; once Dominds actually starts the new course, the first step is to continue this dialog from the task goal in current-dialog scoped reminders and reconcile rough bridge reminders by removing redundancy, correcting biased or distorted bridge notes, and merging/compressing them into high-quality reminders.',
|
|
941
955
|
].join('\n');
|
|
942
956
|
}
|
|
943
957
|
function formatAgentFacingCriticalUserInterjectionRemediationGuide(language, args) {
|
package/dist/shared-reminders.js
CHANGED
|
@@ -106,8 +106,8 @@ function serializeReminder(reminder) {
|
|
|
106
106
|
ownerName: reminder.owner?.name,
|
|
107
107
|
meta: reminder.meta,
|
|
108
108
|
echoback: reminder.echoback,
|
|
109
|
-
scope: reminder.scope
|
|
110
|
-
renderMode: reminder.renderMode
|
|
109
|
+
scope: reminder.scope,
|
|
110
|
+
renderMode: reminder.renderMode,
|
|
111
111
|
createdAt: reminder.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
112
112
|
priority: reminder.priority ?? 'medium',
|
|
113
113
|
};
|
package/dist/tool.d.ts
CHANGED
|
@@ -50,7 +50,11 @@ type PreparedRawToolArguments = Readonly<{
|
|
|
50
50
|
}>;
|
|
51
51
|
export interface ReminderOptions {
|
|
52
52
|
readonly echoback?: boolean;
|
|
53
|
-
readonly scope
|
|
53
|
+
readonly scope: ReminderScope;
|
|
54
|
+
readonly renderMode: ReminderRenderMode;
|
|
55
|
+
}
|
|
56
|
+
export interface ReminderUpdateOptions {
|
|
57
|
+
readonly echoback?: boolean;
|
|
54
58
|
readonly renderMode?: ReminderRenderMode;
|
|
55
59
|
}
|
|
56
60
|
export type ReminderScope = 'dialog' | 'task' | 'agent' | 'runtime';
|
|
@@ -63,7 +67,6 @@ export interface Reminder extends ReminderOptions {
|
|
|
63
67
|
readonly meta?: JsonValue;
|
|
64
68
|
readonly createdAt?: string;
|
|
65
69
|
readonly priority?: ReminderPriority;
|
|
66
|
-
readonly renderMode?: ReminderRenderMode;
|
|
67
70
|
}
|
|
68
71
|
export declare function reminderEchoBackEnabled(reminder: Reminder): boolean;
|
|
69
72
|
export declare function reminderIsVirtual(reminder: Reminder): boolean;
|
|
@@ -75,10 +78,10 @@ export declare function materializeReminder(input: Readonly<{
|
|
|
75
78
|
owner?: ReminderOwner;
|
|
76
79
|
meta?: JsonValue;
|
|
77
80
|
echoback?: boolean;
|
|
78
|
-
scope
|
|
81
|
+
scope: ReminderScope;
|
|
79
82
|
createdAt?: string;
|
|
80
83
|
priority?: ReminderPriority;
|
|
81
|
-
renderMode
|
|
84
|
+
renderMode: ReminderRenderMode;
|
|
82
85
|
}>): Reminder;
|
|
83
86
|
export declare function cloneReminder(reminder: Reminder): Reminder;
|
|
84
87
|
export declare function computeReminderRenderRevision(reminder: Reminder): string;
|
package/dist/tool.js
CHANGED
|
@@ -63,16 +63,22 @@ function ensureReminderId(value) {
|
|
|
63
63
|
return trimmed && trimmed.length > 0 ? trimmed : generateReminderId();
|
|
64
64
|
}
|
|
65
65
|
function materializeReminder(input) {
|
|
66
|
+
if (input.scope === undefined) {
|
|
67
|
+
throw new Error('materializeReminder requires explicit scope');
|
|
68
|
+
}
|
|
69
|
+
if (input.renderMode === undefined) {
|
|
70
|
+
throw new Error('materializeReminder requires explicit renderMode');
|
|
71
|
+
}
|
|
66
72
|
return {
|
|
67
73
|
id: ensureReminderId(input.id),
|
|
68
74
|
content: input.content,
|
|
69
75
|
owner: input.owner,
|
|
70
76
|
meta: input.meta,
|
|
71
77
|
echoback: input.echoback,
|
|
72
|
-
scope: input.scope
|
|
78
|
+
scope: input.scope,
|
|
73
79
|
createdAt: input.createdAt,
|
|
74
80
|
priority: input.priority,
|
|
75
|
-
renderMode: input.renderMode
|
|
81
|
+
renderMode: input.renderMode,
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
84
|
function cloneReminder(reminder) {
|
|
@@ -94,8 +100,8 @@ function computeReminderRenderRevision(reminder) {
|
|
|
94
100
|
content: reminder.content,
|
|
95
101
|
meta: reminder.meta ?? null,
|
|
96
102
|
echoback: reminder.echoback ?? true,
|
|
97
|
-
scope: reminder.scope
|
|
98
|
-
renderMode: reminder.renderMode
|
|
103
|
+
scope: reminder.scope,
|
|
104
|
+
renderMode: reminder.renderMode,
|
|
99
105
|
});
|
|
100
106
|
return `sha256:${(0, crypto_1.createHash)('sha256').update(payload, 'utf8').digest('hex')}`;
|
|
101
107
|
}
|
|
@@ -139,7 +139,7 @@ function toReminderState(reminder) {
|
|
|
139
139
|
content: reminder.content,
|
|
140
140
|
meta: extractOwnerMeta(reminder.meta),
|
|
141
141
|
echoback: reminder.echoback,
|
|
142
|
-
renderMode: reminder.renderMode
|
|
142
|
+
renderMode: reminder.renderMode,
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
145
|
function findOwnedReminderEntries(dlg, descriptor, owner) {
|
|
@@ -201,7 +201,7 @@ async function persistAndPublishReminders(dlg) {
|
|
|
201
201
|
renderRevision: (0, tool_1.computeReminderRenderRevision)(reminder),
|
|
202
202
|
echoback: (0, tool_1.reminderEchoBackEnabled)(reminder),
|
|
203
203
|
scope: reminder.scope,
|
|
204
|
-
renderMode: reminder.renderMode
|
|
204
|
+
renderMode: reminder.renderMode,
|
|
205
205
|
}));
|
|
206
206
|
const evt = { type: 'full_reminders_update', reminders };
|
|
207
207
|
(0, evt_registry_1.postDialogEvent)(dlg, evt);
|
|
@@ -321,6 +321,7 @@ async function applyAppReminderRequests(dlg, params) {
|
|
|
321
321
|
case 'add': {
|
|
322
322
|
dlg.addReminder(result.reminder.content, owner, buildAppReminderMeta(descriptor, result.reminder.meta), normalizeInsertPosition(dlg.reminders.length, result.position), {
|
|
323
323
|
echoback: result.reminder.echoback,
|
|
324
|
+
scope: 'dialog',
|
|
324
325
|
renderMode: result.reminder.renderMode ?? 'markdown',
|
|
325
326
|
});
|
|
326
327
|
changed = true;
|
|
@@ -334,7 +335,7 @@ async function applyAppReminderRequests(dlg, params) {
|
|
|
334
335
|
dlg.updateReminder(target.index, result.reminder.content, buildAppReminderMeta(descriptor, result.reminder.meta), {
|
|
335
336
|
echoback: result.reminder.echoback,
|
|
336
337
|
// Preserve the existing render mode when the app does not explicitly override it.
|
|
337
|
-
renderMode: result.reminder.renderMode ?? target.reminder.renderMode
|
|
338
|
+
renderMode: result.reminder.renderMode ?? target.reminder.renderMode,
|
|
338
339
|
});
|
|
339
340
|
changed = true;
|
|
340
341
|
break;
|
package/dist/tools/ctrl.js
CHANGED
|
@@ -815,7 +815,10 @@ exports.clearMindTool = {
|
|
|
815
815
|
createdBy: 'clear_mind',
|
|
816
816
|
contextHealthLevel,
|
|
817
817
|
});
|
|
818
|
-
dlg.addReminder(reminderContent, undefined, continuationMeta
|
|
818
|
+
dlg.addReminder(reminderContent, undefined, continuationMeta, undefined, {
|
|
819
|
+
scope: 'dialog',
|
|
820
|
+
renderMode: 'markdown',
|
|
821
|
+
});
|
|
819
822
|
}
|
|
820
823
|
await dlg.startNewCourse(t.clearedCoursePrompt(dlg.currentCourse + 1));
|
|
821
824
|
// Context health snapshot is inherently tied to the previous prompt/context.
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
control is Dominds' **dialog control toolset** for managing dialog state, reminders, taskdocs, and inter-dialog reply closure semantics:
|
|
28
28
|
|
|
29
|
-
- **Reminder management**: Three reminder scopes: `dialog` / `task` / `agent`. Default to `task` for current work under the same Taskdoc; use `dialog`
|
|
29
|
+
- **Reminder management**: Three reminder scopes: `dialog` / `task` / `agent`. Default to `task` for ordinary current work under the same Taskdoc; use `dialog` for truly dialog-local notes, and continuation packages before `clear_mind` must explicitly use `scope=dialog` and state this dialog task goal; 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
32
|
- **Reply routing**: Separate asking the tellasker back, sending the final reply, and ordinary plain text in Side Dialog / ask-back flows
|
|
@@ -56,13 +56,13 @@ Reminders are temporary current-work information for:
|
|
|
56
56
|
- Marking pending tasks
|
|
57
57
|
- Tracking current next steps / blockers
|
|
58
58
|
- Recording blocking issues
|
|
59
|
-
- Holding continuation-package bridge notes before `clear_mind`
|
|
59
|
+
- Holding current-dialog scoped continuation-package bridge notes before `clear_mind`
|
|
60
60
|
|
|
61
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
|
|
|
65
|
-
- `dialog`: current-dialog current work
|
|
65
|
+
- `dialog`: current-dialog current work; continuation packages before `clear_mind` must explicitly use this scope and state this dialog task goal
|
|
66
66
|
- `task`: current work under the current Taskdoc, and the default scope
|
|
67
67
|
- `agent`: urgent, short-lived, globally visible cues you should keep seeing across later dialogs you lead
|
|
68
68
|
|
|
@@ -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 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`,
|
|
45
|
+
- Before `clear_mind`, first state this dialog task goal in a current-dialog scoped (`scope=dialog`) continuation-package reminder. A Main Dialog records only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into Taskdoc, then keeps resume-critical details for this dialog in `dialog` reminders; a Side Dialog directly maintains sufficiently detailed `dialog` 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 |
|
|
@@ -124,7 +124,7 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
124
124
|
|
|
125
125
|
- **Current work**: next step, blockers, key pointers
|
|
126
126
|
- **Easy-to-lose details**: temporary paths, ids, commands, sample inputs
|
|
127
|
-
- **Course transition**: continuation-package notes before `clear_mind
|
|
127
|
+
- **Course transition**: current-dialog scoped (`scope=dialog`) continuation-package notes before `clear_mind`; they must state this dialog task goal, including rough multi-reminder carry-over when already degraded
|
|
128
128
|
- **Task carry-over**: if you should keep seeing the note under the current Taskdoc, use `task`
|
|
129
129
|
- **Global urgent cue**: if you should keep seeing it across later dialogs you lead, and it is urgent, short-lived, and globally visible, use `agent`
|
|
130
130
|
|
|
@@ -141,7 +141,7 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
141
141
|
- 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
|
|
142
142
|
- 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`
|
|
143
143
|
- 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
|
|
144
|
-
- Collapse before clearing: the Main Dialog first
|
|
144
|
+
- Collapse before clearing: the Main Dialog first states this dialog task goal in a `scope=dialog` continuation-package reminder, then writes only facts that other dialogs/teammates sharing the same Taskdoc truly need into the appropriate Taskdoc sections, and keeps resume-critical details for this dialog in `dialog` reminders; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed `dialog` continuation-package reminders. If Dominds has already warned that context is tight or critical, rough multi-reminder carry-over is acceptable; once the new course starts, continue this dialog from the task goal in `scope=dialog` reminders before reconciling
|
|
145
145
|
- Avoid raw-material dumps: do not paste long logs or large tool outputs into reminders
|
|
146
146
|
- 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
|
|
147
147
|
|
|
@@ -165,5 +165,5 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
165
165
|
1. `dialog` reminders end with the dialog; `task` reminders stay visible under the current Taskdoc; `agent` reminders stay visible in later dialogs you lead
|
|
166
166
|
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`
|
|
167
167
|
3. `do_mind` / `mind_more` / `change_mind` / `never_mind` do not start a new course
|
|
168
|
-
4. A continuation-package reminder
|
|
168
|
+
4. A continuation-package reminder must be current-dialog scoped (`scope=dialog`) and state this dialog task goal. In the Main Dialog, write only facts that other dialogs/teammates sharing the same Taskdoc truly need into Taskdoc, while reminders keep details still not covered by Taskdoc but easy to lose when resuming this dialog; in a Side Dialog after Dominds warns that context is tight or critical, maintain sufficiently detailed `dialog` continuation-package reminders only
|
|
169
169
|
5. Do not turn `task` / `agent` reminders into a long-term fact dump; move durable knowledge into `personal_memory`
|