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/dialog-fork.js
CHANGED
|
@@ -483,9 +483,10 @@ async function appendForkBaselineState(plan, baselineSideDialogCreatedRecords) {
|
|
|
483
483
|
ownerName: reminder.owner?.name,
|
|
484
484
|
meta: reminder.meta,
|
|
485
485
|
echoback: reminder.echoback,
|
|
486
|
-
scope: reminder.scope
|
|
486
|
+
scope: reminder.scope,
|
|
487
487
|
createdAt: reminder.createdAt ?? baselineTs,
|
|
488
488
|
priority: reminder.priority ?? 'medium',
|
|
489
|
+
renderMode: reminder.renderMode,
|
|
489
490
|
})),
|
|
490
491
|
};
|
|
491
492
|
const q4hRecord = {
|
package/dist/dialog.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { ChatMessage, FuncResultMsg, TellaskCarryoverMsg, TellaskResultMsg } fro
|
|
|
21
21
|
import type { ToolResultImageIngest, UserImageIngest } from './llm/gen';
|
|
22
22
|
import { type SharedReminderTarget } from './shared-reminders';
|
|
23
23
|
import type { JsonValue } from './tool';
|
|
24
|
-
import { Reminder, ReminderOptions, ReminderOwner } from './tool';
|
|
24
|
+
import { Reminder, ReminderOptions, ReminderOwner, ReminderUpdateOptions } from './tool';
|
|
25
25
|
export declare class InvalidReminderIndexError extends Error {
|
|
26
26
|
readonly index: number;
|
|
27
27
|
readonly total: number;
|
|
@@ -265,9 +265,9 @@ export declare abstract class Dialog {
|
|
|
265
265
|
* Post a dialog event using the standard event registry.
|
|
266
266
|
*/
|
|
267
267
|
postEvent(event: DialogEvent): void;
|
|
268
|
-
addReminder(content: string, owner
|
|
268
|
+
addReminder(content: string, owner: ReminderOwner | undefined, meta: JsonValue | undefined, position: number | undefined, options: ReminderOptions): Reminder;
|
|
269
269
|
deleteReminder(index: number): Reminder;
|
|
270
|
-
updateReminder(index: number, content: string, meta?: JsonValue, options?:
|
|
270
|
+
updateReminder(index: number, content: string, meta?: JsonValue, options?: ReminderUpdateOptions): Reminder;
|
|
271
271
|
clearReminders(): void;
|
|
272
272
|
listVisibleReminderTargets(): Promise<VisibleReminderTarget[]>;
|
|
273
273
|
listVisibleReminders(): Promise<Reminder[]>;
|
package/dist/dialog.js
CHANGED
|
@@ -478,13 +478,16 @@ class Dialog {
|
|
|
478
478
|
//
|
|
479
479
|
// Reminder management methods
|
|
480
480
|
addReminder(content, owner, meta, position, options) {
|
|
481
|
+
if (options === undefined) {
|
|
482
|
+
throw new Error('Dialog.addReminder requires explicit reminder options');
|
|
483
|
+
}
|
|
481
484
|
const reminder = (0, tool_1.materializeReminder)({
|
|
482
485
|
content,
|
|
483
486
|
owner,
|
|
484
487
|
meta,
|
|
485
|
-
echoback: options
|
|
486
|
-
scope: options
|
|
487
|
-
renderMode: options
|
|
488
|
+
echoback: options.echoback,
|
|
489
|
+
scope: options.scope,
|
|
490
|
+
renderMode: options.renderMode,
|
|
488
491
|
});
|
|
489
492
|
const insertIndex = position !== undefined ? position : this.reminders.length;
|
|
490
493
|
if (insertIndex < 0 || insertIndex > this.reminders.length) {
|
|
@@ -651,7 +654,7 @@ class Dialog {
|
|
|
651
654
|
renderRevision: (0, tool_1.computeReminderRenderRevision)(r),
|
|
652
655
|
echoback: (0, tool_1.reminderEchoBackEnabled)(r),
|
|
653
656
|
scope: r.scope,
|
|
654
|
-
renderMode: r.renderMode
|
|
657
|
+
renderMode: r.renderMode,
|
|
655
658
|
}));
|
|
656
659
|
}
|
|
657
660
|
emitFullRemindersUpdate(reminders) {
|
|
@@ -359,38 +359,41 @@ async function maybeResolveAnsweredUserInterjection(args) {
|
|
|
359
359
|
return undefined;
|
|
360
360
|
}
|
|
361
361
|
const course = args.dlg.activeGenCourseOrUndefined ?? args.dlg.currentCourse;
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
},
|
|
377
|
-
};
|
|
378
|
-
const existingAnswers = await persistence_1.DialogPersistence.loadAnswersToHumanState(args.dlg.id, args.dlg.status);
|
|
379
|
-
if (!existingAnswers.some((item) => item.id === answer.id)) {
|
|
380
|
-
await persistence_1.DialogPersistence.appendAnswerToHumanState(args.dlg.id, answer, args.dlg.status);
|
|
381
|
-
const metadata = await persistence_1.DialogPersistence.loadDialogMetadata(args.dlg.id, args.dlg.status);
|
|
382
|
-
const taskDocPath = metadata?.taskDocPath ?? args.dlg.taskDocPath ?? '';
|
|
383
|
-
const event = {
|
|
384
|
-
type: 'new_a2h_answered',
|
|
385
|
-
answer: {
|
|
386
|
-
...answer,
|
|
387
|
-
selfId: args.dlg.id.selfId,
|
|
388
|
-
rootId: args.dlg.id.rootId,
|
|
389
|
-
agentId: metadata?.agentId ?? args.dlg.agentId,
|
|
390
|
-
taskDocPath,
|
|
362
|
+
const answer = args.recordAnswerToHuman
|
|
363
|
+
? {
|
|
364
|
+
id: `a2h-${Buffer.from([
|
|
365
|
+
args.dlg.id.rootId,
|
|
366
|
+
args.dlg.id.selfId,
|
|
367
|
+
`c${String(course)}`,
|
|
368
|
+
`g${String(args.assistantSayingGenseq)}`,
|
|
369
|
+
pending.msgId,
|
|
370
|
+
].join('|')).toString('base64url')}`,
|
|
371
|
+
content: args.assistantSayingContent,
|
|
372
|
+
answeredAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
373
|
+
answerRef: {
|
|
374
|
+
course,
|
|
375
|
+
genseq: args.assistantSayingGenseq,
|
|
391
376
|
},
|
|
392
|
-
}
|
|
393
|
-
|
|
377
|
+
}
|
|
378
|
+
: undefined;
|
|
379
|
+
if (answer !== undefined) {
|
|
380
|
+
const existingAnswers = await persistence_1.DialogPersistence.loadAnswersToHumanState(args.dlg.id, args.dlg.status);
|
|
381
|
+
if (!existingAnswers.some((item) => item.id === answer.id)) {
|
|
382
|
+
await persistence_1.DialogPersistence.appendAnswerToHumanState(args.dlg.id, answer, args.dlg.status);
|
|
383
|
+
const metadata = await persistence_1.DialogPersistence.loadDialogMetadata(args.dlg.id, args.dlg.status);
|
|
384
|
+
const taskDocPath = metadata?.taskDocPath ?? args.dlg.taskDocPath ?? '';
|
|
385
|
+
const event = {
|
|
386
|
+
type: 'new_a2h_answered',
|
|
387
|
+
answer: {
|
|
388
|
+
...answer,
|
|
389
|
+
selfId: args.dlg.id.selfId,
|
|
390
|
+
rootId: args.dlg.id.rootId,
|
|
391
|
+
agentId: metadata?.agentId ?? args.dlg.agentId,
|
|
392
|
+
taskDocPath,
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
(0, evt_registry_1.postDialogEvent)(args.dlg, event);
|
|
396
|
+
}
|
|
394
397
|
}
|
|
395
398
|
await persistence_1.DialogPersistence.mutateDialogLatest(args.dlg.id, (previous) => {
|
|
396
399
|
const previousPending = previous.pendingUserInterjectionReply;
|
|
@@ -778,7 +781,7 @@ function formatContextHealthLargeToolReturnUnavailable(args) {
|
|
|
778
781
|
'',
|
|
779
782
|
'不要再尝试获取各种大段的输出,都不会显示给你。现在先做两件事:',
|
|
780
783
|
'1. 把需要回传给主线对话的结论、证据定位和风险整理清楚。',
|
|
781
|
-
'2.
|
|
784
|
+
'2. 用当前对话范围(scope=dialog)提醒项写明本路对话任务目标,并把下一程恢复当前支线工作需要的信息带过桥。',
|
|
782
785
|
'',
|
|
783
786
|
'然后调用 clear_mind({}) 开启新一程,并尽快完成当前支线回复。',
|
|
784
787
|
'',
|
|
@@ -790,7 +793,7 @@ function formatContextHealthLargeToolReturnUnavailable(args) {
|
|
|
790
793
|
'',
|
|
791
794
|
'不要再尝试获取各种大段的输出,都不会显示给你。现在先做两件事:',
|
|
792
795
|
'1. 把下一程对话需要知道的此程细节信息写入差遣牒合适章节。',
|
|
793
|
-
'2.
|
|
796
|
+
'2. 对于不适合差遣牒章节覆盖、但下一程恢复当前对话需要的信息,用当前对话范围(scope=dialog)提醒项写明本路对话任务目标并带过桥。',
|
|
794
797
|
'',
|
|
795
798
|
'然后调用 clear_mind({}) 开启新一程。',
|
|
796
799
|
'',
|
|
@@ -803,7 +806,7 @@ function formatContextHealthLargeToolReturnUnavailable(args) {
|
|
|
803
806
|
'',
|
|
804
807
|
'Do not try again to fetch any kind of large output; it still will not be shown. Do two things now:',
|
|
805
808
|
'1. Organize the conclusions, evidence pointers, and risks that need to go back to the Mainline dialog.',
|
|
806
|
-
'2.
|
|
809
|
+
'2. Use current-dialog scoped (scope=dialog) reminders to state this dialog task goal and carry over the details needed to resume this Sideline dialog in the next course.',
|
|
807
810
|
'',
|
|
808
811
|
'Then call clear_mind({}) to start a new course, and finish the current Sideline dialog reply as soon as possible.',
|
|
809
812
|
'',
|
|
@@ -815,7 +818,7 @@ function formatContextHealthLargeToolReturnUnavailable(args) {
|
|
|
815
818
|
'',
|
|
816
819
|
'Do not try again to fetch any kind of large output; it still will not be shown. Do two things now:',
|
|
817
820
|
'1. Write the details from this course that the next course needs into the appropriate Taskdoc sections.',
|
|
818
|
-
'2.
|
|
821
|
+
'2. For information that does not fit a Taskdoc section but is needed to resume this dialog in the next course, use current-dialog scoped (scope=dialog) reminders to state this dialog task goal and carry it over.',
|
|
819
822
|
'',
|
|
820
823
|
'Then call clear_mind({}) to start a new course.',
|
|
821
824
|
'',
|
|
@@ -3825,6 +3828,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3825
3828
|
const currentRoundAnsweringGenseq = dlg.activeGenSeqOrUndefined;
|
|
3826
3829
|
const hasCurrentRoundAnsweringOutput = currentRoundAnsweringGenseq !== undefined &&
|
|
3827
3830
|
lastAssistantAnsweringGenseq === currentRoundAnsweringGenseq;
|
|
3831
|
+
let pendingVisibleUserInterjectionAnswer;
|
|
3828
3832
|
if (userInterjectionMsgIdForVisibleAnswer !== undefined &&
|
|
3829
3833
|
!hasCurrentRoundAnsweringOutput) {
|
|
3830
3834
|
const streamedCurrentRoundSayingContent = batchOutputs.length === 0 &&
|
|
@@ -3835,14 +3839,25 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3835
3839
|
lastAssistantSayingGenseq !== previousAssistantSayingGenseq
|
|
3836
3840
|
? lastAssistantSayingGenseq
|
|
3837
3841
|
: null;
|
|
3838
|
-
|
|
3839
|
-
dlg,
|
|
3842
|
+
pendingVisibleUserInterjectionAnswer = {
|
|
3840
3843
|
userPromptMsgId: userInterjectionMsgIdForVisibleAnswer,
|
|
3841
3844
|
assistantSayingContent: currentRoundAssistantSayingContent ?? streamedCurrentRoundSayingContent,
|
|
3842
3845
|
assistantSayingGenseq: currentRoundAssistantSayingGenseq ?? streamedCurrentRoundSayingGenseq,
|
|
3843
3846
|
functionCallGenseqs: currentRoundFunctionCallGenseqs,
|
|
3844
|
-
}
|
|
3847
|
+
};
|
|
3845
3848
|
}
|
|
3849
|
+
const settleVisibleUserInterjectionAnswer = async (recordAnswerToHuman) => {
|
|
3850
|
+
const pendingAnswer = pendingVisibleUserInterjectionAnswer;
|
|
3851
|
+
if (pendingAnswer === undefined) {
|
|
3852
|
+
return;
|
|
3853
|
+
}
|
|
3854
|
+
pendingVisibleUserInterjectionAnswer = undefined;
|
|
3855
|
+
await maybeResolveAnsweredUserInterjection({
|
|
3856
|
+
dlg,
|
|
3857
|
+
...pendingAnswer,
|
|
3858
|
+
recordAnswerToHuman,
|
|
3859
|
+
});
|
|
3860
|
+
};
|
|
3846
3861
|
if (routed.tellaskToolOutputs.length > 0) {
|
|
3847
3862
|
newMsgs.push(...routed.tellaskToolOutputs);
|
|
3848
3863
|
}
|
|
@@ -3905,6 +3920,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3905
3920
|
}
|
|
3906
3921
|
await persistDialogFbrState(dlg, undefined);
|
|
3907
3922
|
dlg.setFbrConclusionToolsEnabled(false);
|
|
3923
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
3908
3924
|
break;
|
|
3909
3925
|
}
|
|
3910
3926
|
if (inspection.kind === 'rejected') {
|
|
@@ -3924,6 +3940,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3924
3940
|
await persistDialogFbrState(dlg, nextFbrState);
|
|
3925
3941
|
dlg.setFbrConclusionToolsEnabled((0, fbr_1.isFbrFinalizationState)(nextFbrState));
|
|
3926
3942
|
pendingPrompt = buildKernelDriverFbrPrompt(dlg, nextFbrState);
|
|
3943
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
3927
3944
|
continue;
|
|
3928
3945
|
}
|
|
3929
3946
|
fbrConclusion = {
|
|
@@ -3943,6 +3960,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3943
3960
|
}
|
|
3944
3961
|
await persistDialogFbrState(dlg, undefined);
|
|
3945
3962
|
dlg.setFbrConclusionToolsEnabled(false);
|
|
3963
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
3946
3964
|
break;
|
|
3947
3965
|
}
|
|
3948
3966
|
if (routed.shouldStopAfterReplyTool) {
|
|
@@ -3962,12 +3980,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
3962
3980
|
call.name === 'replyTellaskBack')
|
|
3963
3981
|
.map((call) => call.name),
|
|
3964
3982
|
});
|
|
3983
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
3965
3984
|
break;
|
|
3966
3985
|
}
|
|
3967
3986
|
const queuedNewCoursePrompt = await consumeQueuedNewCourseRuntimePromptForSameDrive(dlg);
|
|
3968
3987
|
if (queuedNewCoursePrompt !== undefined) {
|
|
3969
3988
|
pendingPrompt = queuedNewCoursePrompt;
|
|
3970
3989
|
skipTaskdocForThisDrive = false;
|
|
3990
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
3971
3991
|
continue;
|
|
3972
3992
|
}
|
|
3973
3993
|
// Start an immediate post-tool generation only when this round produced tool outputs that
|
|
@@ -4009,6 +4029,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4009
4029
|
remindersVer: dlg.remindersVer,
|
|
4010
4030
|
pubRemindersVer,
|
|
4011
4031
|
});
|
|
4032
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
4012
4033
|
break;
|
|
4013
4034
|
}
|
|
4014
4035
|
if (dlg.remindersVer > pubRemindersVer) {
|
|
@@ -4032,6 +4053,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4032
4053
|
pubRemindersVer,
|
|
4033
4054
|
});
|
|
4034
4055
|
await preserveDiligenceBudgetAcrossQ4H(dlg);
|
|
4056
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
4035
4057
|
break;
|
|
4036
4058
|
}
|
|
4037
4059
|
if (!shouldStartImmediatePostToolGeneration) {
|
|
@@ -4053,6 +4075,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4053
4075
|
rootId: dlg.id.rootId,
|
|
4054
4076
|
selfId: dlg.id.selfId,
|
|
4055
4077
|
});
|
|
4078
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
4056
4079
|
break;
|
|
4057
4080
|
}
|
|
4058
4081
|
const healthFirst = await maybeContinueWithHealthPromptBeforeDiligence({
|
|
@@ -4065,6 +4088,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4065
4088
|
if (healthFirst.resetTaskdoc) {
|
|
4066
4089
|
skipTaskdocForThisDrive = false;
|
|
4067
4090
|
}
|
|
4091
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
4068
4092
|
continue;
|
|
4069
4093
|
}
|
|
4070
4094
|
const next = await maybeContinueWithDiligencePrompt({
|
|
@@ -4074,6 +4098,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4074
4098
|
});
|
|
4075
4099
|
if (next.kind === 'continue') {
|
|
4076
4100
|
pendingPrompt = next.prompt;
|
|
4101
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
4077
4102
|
continue;
|
|
4078
4103
|
}
|
|
4079
4104
|
lastToolRoundStopDiagnostics = buildToolRoundStopDiagnostics({
|
|
@@ -4088,6 +4113,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4088
4113
|
remindersVer: dlg.remindersVer,
|
|
4089
4114
|
pubRemindersVer,
|
|
4090
4115
|
});
|
|
4116
|
+
await settleVisibleUserInterjectionAnswer(false);
|
|
4091
4117
|
break;
|
|
4092
4118
|
}
|
|
4093
4119
|
await repairMissingImmediateFollowupTrigger({
|
|
@@ -4102,6 +4128,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
4102
4128
|
resolvingImmediateToolResultUserPromptMsgId = resolvingImmediateToolResultForUserPrompt
|
|
4103
4129
|
? currentUserPromptMsgId
|
|
4104
4130
|
: undefined;
|
|
4131
|
+
await settleVisibleUserInterjectionAnswer(true);
|
|
4105
4132
|
continue;
|
|
4106
4133
|
}
|
|
4107
4134
|
catch (err) {
|
package/dist/mcp/supervisor.js
CHANGED
|
@@ -109,7 +109,10 @@ function ensureLeaseReminder(dlg, serverId) {
|
|
|
109
109
|
'',
|
|
110
110
|
`This MCP server is treated as non-stateless; the current dialog holds an underlying process/connection with explicit lifecycle management.`,
|
|
111
111
|
].join('\n');
|
|
112
|
-
dlg.addReminder(content, owner, makeLeaseReminderMeta(serverId)
|
|
112
|
+
dlg.addReminder(content, owner, makeLeaseReminderMeta(serverId), undefined, {
|
|
113
|
+
scope: 'dialog',
|
|
114
|
+
renderMode: 'markdown',
|
|
115
|
+
});
|
|
113
116
|
}
|
|
114
117
|
class McpServerDispatch {
|
|
115
118
|
serverId;
|
|
@@ -138,40 +138,40 @@ function getMemoryPromptCopy(ctx) {
|
|
|
138
138
|
const runtimeMarkers = (0, inter_dialog_format_1.getRuntimeTransferMarkers)(ctx.language);
|
|
139
139
|
const contextHealthLineZh = ctx.contextHealthPromptMode === 'critical'
|
|
140
140
|
? ctx.isSideDialog
|
|
141
|
-
? 'Dominds
|
|
142
|
-
: 'Dominds
|
|
141
|
+
? 'Dominds 已提醒上下文告急:立即停止继续大实现/大阅读。你当前处于支线对话;本程不维护差遣牒,也不整理差遣牒更新提案,只维护足够详尽的当前对话范围(scope=dialog)接续包提醒项并写明本路任务目标,然后 `clear_mind`。提醒项没有固定长度限制。'
|
|
142
|
+
: 'Dominds 已提醒上下文告急:立即停止继续大实现/大阅读。本程只做保信息:先用当前对话范围(scope=dialog)接续包提醒项写明本路任务目标,再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的接续包提醒项并 `clear_mind`。'
|
|
143
143
|
: ctx.contextHealthPromptMode === 'caution'
|
|
144
144
|
? ctx.isSideDialog
|
|
145
|
-
? 'Dominds
|
|
146
|
-
: 'Dominds
|
|
145
|
+
? 'Dominds 已提醒上下文吃紧:不要继续扩张上下文。你当前处于支线对话;本程不维护差遣牒,也不整理差遣牒更新提案,优先维护足够详尽的当前对话范围(scope=dialog)接续包提醒项并写明本路任务目标,然后尽快 `clear_mind`。提醒项没有固定长度限制。'
|
|
146
|
+
: 'Dominds 已提醒上下文吃紧:不要继续扩张上下文。本程优先用当前对话范围(scope=dialog)接续包提醒项写明本路任务目标,再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的提醒项并尽快 `clear_mind`,不要继续大实现/大阅读。'
|
|
147
147
|
: '当前没有生效中的上下文保全提示,按正常工作流推进。';
|
|
148
148
|
const taskdocLogLineZh = ctx.contextHealthPromptMode === 'critical'
|
|
149
149
|
? ctx.isSideDialog
|
|
150
|
-
? 'Dominds
|
|
151
|
-
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds
|
|
150
|
+
? 'Dominds 已提醒上下文告急:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前这一路支线对话的任务目标、讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入当前对话范围(scope=dialog)接续包提醒项。提醒项没有固定长度限制,宁可完整一些;允许多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
|
|
151
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文告急:先确保当前对话范围(scope=dialog)接续包提醒项写明本路任务目标;再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;本程允许先保留多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
|
|
152
152
|
: ctx.contextHealthPromptMode === 'caution'
|
|
153
153
|
? ctx.isSideDialog
|
|
154
|
-
? 'Dominds
|
|
155
|
-
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds
|
|
156
|
-
: '不要把长日志/大段 tool output
|
|
154
|
+
? 'Dominds 已提醒上下文吃紧:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前这一路支线对话的任务目标、讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入当前对话范围(scope=dialog)接续包提醒项。提醒项没有固定长度限制,宁可完整一些;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
|
|
155
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文吃紧:先确保当前对话范围(scope=dialog)接续包提醒项写明本路任务目标;再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
|
|
156
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。准备 `clear_mind` 的接续包提醒项必须是当前对话范围(scope=dialog),写明本路任务目标,并保持结构化、便于快速恢复。';
|
|
157
157
|
const contextHealthLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
158
158
|
? ctx.isSideDialog
|
|
159
|
-
? 'Dominds has warned that context is critical: stop large implementations/reads immediately. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Only maintain sufficiently detailed continuation-package reminders
|
|
160
|
-
: 'Dominds has warned that context is critical: stop large implementations/reads immediately. In this course, only preserve information: first
|
|
159
|
+
? 'Dominds has warned that context is critical: stop large implementations/reads immediately. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Only maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders, state this dialog task goal, then `clear_mind`. Reminders have no fixed length limit.'
|
|
160
|
+
: 'Dominds has warned that context is critical: stop large implementations/reads immediately. In this course, only preserve information: first state this dialog task goal in a current-dialog scoped (scope=dialog) continuation-package reminder, then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into continuation-package reminders and `clear_mind`.'
|
|
161
161
|
: ctx.contextHealthPromptMode === 'caution'
|
|
162
162
|
? ctx.isSideDialog
|
|
163
|
-
? 'Dominds has warned that context is tight: do not keep expanding context. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Prioritize sufficiently detailed continuation-package reminders
|
|
164
|
-
: 'Dominds has warned that context is tight: do not keep expanding context. In this course, first record
|
|
163
|
+
? 'Dominds has warned that context is tight: do not keep expanding context. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Prioritize sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders, state this dialog task goal, then `clear_mind`. Reminders have no fixed length limit.'
|
|
164
|
+
: 'Dominds has warned that context is tight: do not keep expanding context. In this course, first state this dialog task goal in a current-dialog scoped (scope=dialog) continuation-package reminder, then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into reminders and `clear_mind`; do not continue large implementations/reads.'
|
|
165
165
|
: 'There is no active context-preservation notice in effect right now; proceed with the normal workflow.';
|
|
166
166
|
const taskdocLogLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
167
167
|
? ctx.isSideDialog
|
|
168
|
-
? 'Dominds has warned that context is critical: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put
|
|
169
|
-
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is critical: first review current-dialog discussion details not yet written into documentation
|
|
168
|
+
? 'Dominds has warned that context is critical: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put this specific Side Dialog task goal, discussion details, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into current-dialog scoped (scope=dialog) continuation-package reminders. Reminders have no fixed length limit, so prefer being complete. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
|
|
169
|
+
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is critical: first make sure a current-dialog scoped (scope=dialog) continuation-package reminder states this dialog task goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you have first called `recall_taskdoc` to get the current `content_hash` as `previous_content_hash`. Continuation-package reminders should keep only details still not covered by Taskdoc but easy to lose when resuming this dialog. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
|
|
170
170
|
: ctx.contextHealthPromptMode === 'caution'
|
|
171
171
|
? ctx.isSideDialog
|
|
172
|
-
? 'Dominds has warned that context is tight: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put
|
|
173
|
-
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is tight: first review current-dialog discussion details not yet written into documentation
|
|
174
|
-
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts.
|
|
172
|
+
? 'Dominds has warned that context is tight: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put this specific Side Dialog task goal, discussion details, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into current-dialog scoped (scope=dialog) continuation-package reminders. Reminders have no fixed length limit, so prefer being complete. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
|
|
173
|
+
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is tight: first make sure a current-dialog scoped (scope=dialog) continuation-package reminder states this dialog task goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you have first called `recall_taskdoc` to get the current `content_hash` as `previous_content_hash`. Continuation-package reminders should keep only details still not covered by Taskdoc but easy to lose when resuming this dialog. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
|
|
174
|
+
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Continuation-package reminders before `clear_mind` must be current-dialog scoped (scope=dialog), state this dialog task goal, and stay structured for fast resume.';
|
|
175
175
|
if (ctx.language === 'zh') {
|
|
176
176
|
return {
|
|
177
177
|
title: '### 记忆系统(重要)',
|
|
@@ -180,29 +180,29 @@ function getMemoryPromptCopy(ctx) {
|
|
|
180
180
|
taskdocContractLine: '- 差遣牒(`*.tsk/`):全队共享的任务契约(goals/constraints/progress);不是个人笔记,保持足够短,每轮都应可通读。',
|
|
181
181
|
taskdocSemanticsLine: '- 章节语义约定:`progress` 是全队共享、准实时、可扫读的任务公告牌,用来记录当前有效状态、关键决策、下一步与仍成立阻塞;不是流水账,也不是个人工作记录。`goals` / `constraints` 是较稳定的任务契约;每次更新都必须保留仍然有效的他人条目。',
|
|
182
182
|
taskdocSectionReplaceLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
183
|
-
? '- Dominds
|
|
183
|
+
? '- Dominds 已提醒当前上下文吃紧/告急,且你处于支线对话:本程不要维护差遣牒,也不要整理差遣牒更新提案;把本路任务目标和下一程需要恢复的细节写入足够详尽的当前对话范围(scope=dialog)接续包提醒项。'
|
|
184
184
|
: `- 更新差遣牒时:少量新增条目可用 \`mind_more\` 追加(默认 progress);缺失章节用 \`do_mind\` 创建;需要删除陈旧项、重排结构或压缩时,先对照上下文中注入的当前内容完成合并,再调用 \`recall_taskdoc\` 取得当前 \`content_hash\`,然后用带 \`previous_content_hash\` 的 \`change_mind\` 整章替换;需要删除整章文件时用 \`never_mind\`;禁止覆盖/抹掉他人条目;自己负责维护的条目必须标注责任人(例如 \`- [owner:@${ctx.agentId}] ...\` 或用 \`### @${ctx.agentId}\` 分块)。`,
|
|
185
185
|
progressLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
186
|
-
? '- Dominds 已提醒当前上下文吃紧/告急,且你处于支线对话:本程不更新 `progress
|
|
186
|
+
? '- Dominds 已提醒当前上下文吃紧/告急,且你处于支线对话:本程不更新 `progress`;只把本路任务目标和下一程接续所需信息写入当前对话范围(scope=dialog)提醒项。'
|
|
187
187
|
: '- 更新 `progress` 时:它必须始终是可供全队扫读的完整当前快照,而不是只追加自己这一轮的零散笔记。',
|
|
188
188
|
injectedTaskdocLine: '- 重要:差遣牒内容会被系统以内联形式注入到上下文中(本轮生成视角下即为最新;注入内容不包括全局约束)。需要回顾时请直接基于上下文里的差遣牒内容回顾与决策,不要试图用通用文件工具读取 `*.tsk/` 下的文件(会被拒绝)。',
|
|
189
189
|
constraintsLine: '- 约定:`constraints` 只写任务特有的硬要求,不得写入系统提示/工具文档里已明确且由系统强制执行的通用规则(例如 `*.tsk/` 封装禁止通用文件工具)。一经发现重复,必须删除并告知用户。',
|
|
190
190
|
remindersLine: ctx.isSideDialog
|
|
191
|
-
? '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind`
|
|
192
|
-
: '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind`
|
|
191
|
+
? '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind` 开启新一程对话时,整理当前对话范围(scope=dialog)的“结构化接续包提醒项”,必须写明本路任务目标,并保留恢复工作容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。若 Dominds 已提醒当前程吃紧/告急,支线对话不要维护差遣牒,也不要整理差遣牒更新提案;只维护足够详尽的 scope=dialog 接续包提醒项,提醒项没有固定长度限制,允许先保留多条粗略提醒项把信息带过桥;当前程只做保信息 + clear_mind;只有 Dominds 实际开启新一程后,第一步才是按 scope=dialog 提醒项里的本路任务目标继续,再复核整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。'
|
|
192
|
+
: '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind` 开启新一程对话时,先用当前对话范围(scope=dialog)结构化接续包提醒项写明本路任务目标,再把尚未落实到文档、且下一程需要同一差遣牒其它对话/队友知会的讨论细节落到差遣牒合适章节;提醒项只保留差遣牒仍未覆盖、但恢复本路对话容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。若 Dominds 已提醒当前程吃紧/告急,则允许先保留多条粗略 scope=dialog 提醒项把信息带过桥;当前程只做落文档、保信息 + clear_mind;只有 Dominds 实际开启新一程后,第一步才是按 scope=dialog 提醒项里的本路任务目标继续,再复核整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。',
|
|
193
193
|
teamMemoryLine: '- 团队记忆:稳定的团队约定/工程规约(跨任务共享)。',
|
|
194
194
|
personalMemoryLine: '- 个人记忆:稳定的个人习惯/偏好与职责域知识;记忆会在每次生成时自动注入上下文,应保持少量且准确(关键文档/代码的精确路径 + 最小必要事实)。不要记录具体任务状态。',
|
|
195
195
|
skillsLine: '- Skills:可复用操作指引/检查清单/触发条件与边界。工作区关联强的事实、路径、局部契约进 memory/env;独立于工作区内容的“怎么做”进 skill。skill 不授予工具权限;需要脚本/MCP/外部能力时应配套 app/toolset/权限配置。',
|
|
196
196
|
sideDialogDutyLine: ctx.contextHealthPromptMode === 'normal'
|
|
197
197
|
? `你当前处于支线对话:此处不允许 \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`。当你判断需要更新差遣牒(尤其是 progress 公告牌)时,请在合适时机直接诉请差遣牒维护人 \`@${ctx.taskdocMaintainerId}\` 执行更新,并给出要新增的章节、要追加的条目、已合并好的“新全文/替换稿”,或要删除的章节。不要声称已更新,除非看到回执。`
|
|
198
|
-
: '你当前处于支线对话,且 Dominds
|
|
198
|
+
: '你当前处于支线对话,且 Dominds 已提醒上下文吃紧/告急:本程不要维护差遣牒,也不要整理差遣牒更新提案。请把本路任务目标、下一程需要恢复的讨论细节、定位、验证方式和临时信息写入足够详尽的当前对话范围(scope=dialog)接续包提醒项。',
|
|
199
199
|
mainDialogDutyLine: '你当前处于主线对话:你负责综合维护全队共享差遣牒(尤其是 progress 公告牌)。当队友/支线对话提出更新建议时,及时合并、压缩并保持清晰。',
|
|
200
200
|
teammateTellaskRoundDoneLine: `队友诉请重要语义:当你在诉请者上下文中收到带${runtimeMarkers.finalCompleted}标记的回贴,表示该轮诉请已经结束;对方不会继续执行同一轮诉请。此时如果目标未达成,“等待”是错误的:必须显式发起新一轮 tellask 才能继续推进。并行语义:不要把智能体队友当成真人同事;祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 sessionSlug = 接着同一件事说,并更新那件正在做的事;tellaskSessionless 或不同 sessionSlug = 另一件独立任务。`,
|
|
201
201
|
teamMemoryHintLine: '提示:你具备团队记忆工具(`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`),可在必要时维护团队记忆(谨慎、少量、只写稳定约定)。',
|
|
202
202
|
personalMemoryHintLine: `提示:你具备个人记忆工具(\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`)。个人记忆仅对当前智能体可见,且系统会自动按成员隔离到 \`.minds/memory/individual/<member-id>/...\`;因此 \`path\` 不应包含你的成员 id(不要写 \`${ctx.agentId}/...\`)。首次创建时直接用 \`add_personal_memory\` 即可,目录会由系统自动创建。记忆会在每次生成时自动注入上下文:保持少量、保持准确、按“未来会一起更新的内容”合并;写稳定事实(关键路径 + 最小必要约定),不要写任务进度/当天状态;一旦你修改了相关文件或发现记忆过期/冲突,立刻用 \`replace_personal_memory\` 更新。`,
|
|
203
203
|
sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
|
|
204
204
|
? `工作流:先做事 → 再提炼(\`update_reminder\`;必要时整理差遣牒追加条目/更新提案并诉请 \`@${ctx.taskdocMaintainerId}\` 合并写入)→ 然后 \`clear_mind\` 清空噪音。`
|
|
205
|
-
: '工作流:停止扩张上下文 →
|
|
205
|
+
: '工作流:停止扩张上下文 → 维护足够详尽的当前对话范围(scope=dialog)接续包提醒项(`add_reminder` 或 `update_reminder`,必须写明本路任务目标,没有固定长度限制)→ 然后 `clear_mind` 开启新一程。',
|
|
206
206
|
mainDialogWorkflowLine: '工作流:先做事 -> 再提炼(`update_reminder` + `mind_more(progress)`;需要压缩/删旧时先 `recall_taskdoc` 取得 `content_hash`,再用带 `previous_content_hash` 的 `change_mind`;要删除整章文件时用 `never_mind`)-> 然后 `clear_mind` 清空噪音。',
|
|
207
207
|
...(ctx.isSideDialog
|
|
208
208
|
? {}
|
|
@@ -220,29 +220,29 @@ function getMemoryPromptCopy(ctx) {
|
|
|
220
220
|
taskdocContractLine: '- Taskdoc (`*.tsk/`): the team-shared task contract (goals/constraints/progress). It is not a personal notebook; keep it small enough to read every course.',
|
|
221
221
|
taskdocSemanticsLine: '- Section semantics: `progress` is the team-shared, quasi-real-time, scannable task bulletin board for current effective state, key decisions, next steps, and still-active blockers; it is not a raw log or personal work record. `goals` / `constraints` are the more stable task contract; every update must preserve still-valid entries from others.',
|
|
222
222
|
taskdocSectionReplaceLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
223
|
-
? '- Dominds has warned that context is tight/critical in this Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course; put resume-critical details into sufficiently detailed continuation-package reminders.'
|
|
223
|
+
? '- Dominds has warned that context is tight/critical in this Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course; put this dialog task goal and resume-critical details into sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders.'
|
|
224
224
|
: `- When updating Taskdoc: use \`mind_more\` for small append-only additions (defaults to progress); create missing sections with \`do_mind\`; when stale entries must be removed, reordered, or compressed, first merge against the current injected content, then call \`recall_taskdoc\` to get the current \`content_hash\`, then use \`change_mind\` for a full-section replacement with that value as \`previous_content_hash\`; when a whole section file should be removed, use \`never_mind\`; do not overwrite other contributors; add an explicit owner tag for entries you maintain (e.g., \`- [owner:@${ctx.agentId}] ...\` or a \`### @${ctx.agentId}\` block).`,
|
|
225
225
|
progressLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
226
|
-
? '- Dominds has warned that context is tight/critical in this Side Dialog: do not update `progress` in this course; put resume-critical information into reminders only.'
|
|
226
|
+
? '- Dominds has warned that context is tight/critical in this Side Dialog: do not update `progress` in this course; put this dialog task goal and resume-critical information into current-dialog scoped (scope=dialog) reminders only.'
|
|
227
227
|
: '- When updating `progress`, keep it as a complete, team-scannable current snapshot instead of appending only your own latest notes.',
|
|
228
228
|
injectedTaskdocLine: '- Important: the Taskdoc content is injected inline into the context (the latest as of this generation; injected content excludes global constraints). Review the injected Taskdoc instead of trying to read files under `*.tsk/` via general file tools (they will be rejected).',
|
|
229
229
|
constraintsLine: '- Convention: Taskdoc `constraints` must contain task-specific requirements only; do not include global, system-enforced rules already stated in system prompt/tool docs (e.g. `.tsk/` encapsulation bans general file tools). If duplication is found, you MUST remove it and notify the user.',
|
|
230
230
|
remindersLine: ctx.isSideDialog
|
|
231
|
-
? '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, create a structured continuation-package reminder
|
|
232
|
-
: '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, first record undocumented discussion details that the
|
|
231
|
+
? '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, create a current-dialog scoped (scope=dialog) structured continuation-package reminder, state this dialog task goal, and preserve details easy to lose during resume (first step, key pointers, run/verify info, volatile ids/paths). If Dominds has warned that the current course is tight/critical, you are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; only maintain sufficiently detailed scope=dialog continuation-package reminders. Reminders have no fixed length limit, rough multi-reminder bridge notes are acceptable, and in the current course you should only preserve volatile information and clear_mind. Only after Dominds actually starts the new course does the mandatory first step become continuing this dialog from the task goal in scope=dialog reminders, then reviewing and rewriting those continuation/rough reminders with a clear head: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
|
|
232
|
+
: '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, first state this dialog task goal in a current-dialog scoped (scope=dialog) structured continuation-package reminder, then record undocumented discussion details that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. Reminders should keep only details still not covered by Taskdoc but easy to lose when resuming this dialog (first step, key pointers, run/verify info, volatile ids/paths). If Dominds has warned that the current course is tight/critical, rough multi-reminder scope=dialog bridge notes are acceptable; in the current course, only document missing details, preserve volatile information, and clear_mind. Only after Dominds actually starts the new course does the mandatory first step become continuing this dialog from the task goal in scope=dialog reminders, then reviewing and rewriting those continuation/rough reminders with a clear head: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.',
|
|
233
233
|
teamMemoryLine: '- Team memory: stable shared conventions (cross-task).',
|
|
234
234
|
personalMemoryLine: '- Personal memory: stable personal habits/preferences and responsibility-scope knowledge. Memory is automatically injected into context on each generation: keep it small and accurate (exact key doc/code paths + minimal key facts); do not store per-task state.',
|
|
235
235
|
skillsLine: '- Skills: reusable operating guidance, checklists, triggers, and boundaries. Workspace-coupled facts, paths, and local contracts belong in memory/env; workspace-independent “how to do it” procedures belong in skills. Skills do not grant tool permissions; pair scripts/MCP/external capabilities with apps/toolsets/permission configuration.',
|
|
236
236
|
sideDialogDutyLine: ctx.contextHealthPromptMode === 'normal'
|
|
237
237
|
? `You are currently in a Side Dialog: \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\` are not allowed here. When Taskdoc should be updated (especially the shared progress bulletin board), tellask the Taskdoc maintainer \`@${ctx.taskdocMaintainerId}\` with the new section to create, entries to append, a fully merged replacement draft, or the section to delete. Do not claim it is updated until you see a receipt.`
|
|
238
|
-
: 'You are currently in a Side Dialog, and Dominds has warned that context is tight/critical: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course. Put discussion details, pointers, verification method, and volatile resume information into sufficiently detailed continuation-package reminders.',
|
|
238
|
+
: 'You are currently in a Side Dialog, and Dominds has warned that context is tight/critical: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course. Put this dialog task goal, discussion details, pointers, verification method, and volatile resume information into sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders.',
|
|
239
239
|
mainDialogDutyLine: 'You are currently in the Main Dialog: you are responsible for keeping the team-shared Taskdoc coherent and up to date (especially the progress bulletin board). Merge proposals from teammates/Side Dialogs promptly and keep it concise.',
|
|
240
240
|
teammateTellaskRoundDoneLine: `Teammate Tellask semantics: when you receive a tellasker reply with the ${runtimeMarkers.finalCompleted} marker, that Tellask round is finished; the tellaskee will not keep executing the same call in the background. If the objective is not met, “waiting” is wrong: you must explicitly start a new Tellask round to continue. Parallel semantics: 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.`,
|
|
241
241
|
teamMemoryHintLine: 'Hint: you have team-memory tools (`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`) and may maintain team memory when it is truly stable and worth sharing.',
|
|
242
242
|
personalMemoryHintLine: `Hint: you have personal-memory tools (\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`). Personal memory is private to the current agent and is automatically isolated under \`.minds/memory/individual/<member-id>/...\`; therefore \`path\` MUST NOT include your member id (do not write \`${ctx.agentId}/...\`). For first-time setup, just call \`add_personal_memory\`—the directory will be created automatically. Memory is automatically injected into context on each generation: keep it small, keep it accurate, and group facts that are updated together. Store stable facts (exact key paths + minimal contracts), not daily state/progress. If you changed those files or detect staleness/conflicts, immediately \`replace_personal_memory\` to keep it accurate.`,
|
|
243
243
|
sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
|
|
244
244
|
? `Workflow: do work → distill (\`update_reminder\`; when Taskdoc needs updates, draft append entries, a merged replacement, or a section deletion and ask \`@${ctx.taskdocMaintainerId}\`) → then \`clear_mind\` to drop noise.`
|
|
245
|
-
: 'Workflow: stop expanding context → maintain sufficiently detailed continuation-package reminders (`add_reminder` or `update_reminder`, with no fixed length limit) → then `clear_mind` to start a new course.',
|
|
245
|
+
: 'Workflow: stop expanding context → maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders (`add_reminder` or `update_reminder`, must state this dialog task goal, with no fixed length limit) → then `clear_mind` to start a new course.',
|
|
246
246
|
mainDialogWorkflowLine: 'Workflow: do work -> distill (`update_reminder` + `mind_more(progress)`; when compression/deletion is needed, first use `recall_taskdoc` to get `content_hash`, then use `change_mind` with `previous_content_hash`; use `never_mind` when removing a whole section file) -> then `clear_mind` to drop noise.',
|
|
247
247
|
...(ctx.isSideDialog
|
|
248
248
|
? {}
|