dominds 1.17.2 → 1.17.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/apps-host/host.js +13 -2
- package/dist/apps-host/ipc-types.js +18 -1
- package/dist/dialog-fork.js +1 -0
- package/dist/dialog.js +5 -0
- package/dist/docs/mcp-support.md +4 -1
- package/dist/docs/team_mgmt-toolset.md +8 -7
- package/dist/docs/team_mgmt-toolset.zh.md +6 -5
- package/dist/mcp/manual-problems.d.ts +33 -0
- package/dist/mcp/manual-problems.js +323 -0
- package/dist/mcp/supervisor.js +23 -1
- package/dist/persistence.js +12 -0
- package/dist/priming.js +7 -0
- package/dist/shared-reminders.js +2 -0
- package/dist/tool.d.ts +5 -0
- package/dist/tool.js +66 -4
- package/dist/tools/app-reminders.js +20 -3
- package/dist/tools/ctrl.js +43 -4
- package/dist/tools/manual/output-limit.d.ts +9 -0
- package/dist/tools/manual/output-limit.js +12 -0
- package/dist/tools/os.js +173 -37
- package/dist/tools/pending-tellask-reminder.d.ts +1 -1
- package/dist/tools/pending-tellask-reminder.js +39 -19
- package/dist/tools/team_mgmt-manual.d.ts +2 -0
- package/dist/tools/team_mgmt-manual.js +160 -0
- package/dist/tools/team_mgmt-mcp-manual.d.ts +27 -0
- package/dist/tools/team_mgmt-mcp-manual.js +643 -0
- package/dist/tools/team_mgmt.d.ts +11 -1
- package/dist/tools/team_mgmt.js +22 -867
- package/dist/tools/toolset-manual.js +5 -5
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-EK9iGcOl.js → _basePickBy-CgM-M_q8.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-EK9iGcOl.js.map → _basePickBy-CgM-M_q8.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-BHtz-XvO.js → _baseUniq-B06twih4.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-BHtz-XvO.js.map → _baseUniq-B06twih4.js.map} +1 -1
- package/webapp/dist/assets/{arc-NqUmMwkS.js → arc-CoXJvjeB.js} +2 -2
- package/webapp/dist/assets/{arc-NqUmMwkS.js.map → arc-CoXJvjeB.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CJ7Jb15a.js → architectureDiagram-2XIMDMQ5-BLFRWTKn.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CJ7Jb15a.js.map → architectureDiagram-2XIMDMQ5-BLFRWTKn.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-RNM7ujN4.js → blockDiagram-WCTKOSBZ-CYRE6deu.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-RNM7ujN4.js.map → blockDiagram-WCTKOSBZ-CYRE6deu.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DKra5-za.js → c4Diagram-IC4MRINW-B26QTIJt.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DKra5-za.js.map → c4Diagram-IC4MRINW-B26QTIJt.js.map} +1 -1
- package/webapp/dist/assets/{channel-CxE9sL_E.js → channel-C5U2W0P9.js} +2 -2
- package/webapp/dist/assets/{channel-CxE9sL_E.js.map → channel-C5U2W0P9.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BlyIt9uv.js → chunk-4BX2VUAB-7z2PgnSv.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BlyIt9uv.js.map → chunk-4BX2VUAB-7z2PgnSv.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-DsPShmjL.js → chunk-55IACEB6-6sRVmXqs.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-DsPShmjL.js.map → chunk-55IACEB6-6sRVmXqs.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-C2i0rEFF.js → chunk-FMBD7UC4-BwYp8OtY.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-C2i0rEFF.js.map → chunk-FMBD7UC4-BwYp8OtY.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-CK8inzJx.js → chunk-JSJVCQXG-CRq8LK53.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-CK8inzJx.js.map → chunk-JSJVCQXG-CRq8LK53.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-BjEK5_oI.js → chunk-KX2RTZJC-CzFE355P.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-BjEK5_oI.js.map → chunk-KX2RTZJC-CzFE355P.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-Clf489xc.js → chunk-NQ4KR5QH-3cQSOzCt.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-Clf489xc.js.map → chunk-NQ4KR5QH-3cQSOzCt.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-CMikir3s.js → chunk-QZHKN3VN-DWkpxb-w.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-CMikir3s.js.map → chunk-QZHKN3VN-DWkpxb-w.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-1gtCLicd.js → chunk-WL4C6EOR-DkpfoQzK.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-1gtCLicd.js.map → chunk-WL4C6EOR-DkpfoQzK.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-kzzlkQ_D.js → classDiagram-VBA2DB6C-mVfJeuZL.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-kzzlkQ_D.js.map → classDiagram-VBA2DB6C-mVfJeuZL.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-kzzlkQ_D.js → classDiagram-v2-RAHNMMFH-mVfJeuZL.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-kzzlkQ_D.js.map → classDiagram-v2-RAHNMMFH-mVfJeuZL.js.map} +1 -1
- package/webapp/dist/assets/{clone-XglJh1R0.js → clone-5uLJc7AC.js} +2 -2
- package/webapp/dist/assets/{clone-XglJh1R0.js.map → clone-5uLJc7AC.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A--gZrh2tG.js → cose-bilkent-S5V4N54A-CoiJzdQi.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A--gZrh2tG.js.map → cose-bilkent-S5V4N54A-CoiJzdQi.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-D_JMhNNL.js → dagre-KLK3FWXG-DU_3BSOq.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-D_JMhNNL.js.map → dagre-KLK3FWXG-DU_3BSOq.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-HkYhqJDL.js → diagram-E7M64L7V-DgqOvF1U.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-HkYhqJDL.js.map → diagram-E7M64L7V-DgqOvF1U.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-BFv5iU5U.js → diagram-IFDJBPK2-CFWMc1oD.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-BFv5iU5U.js.map → diagram-IFDJBPK2-CFWMc1oD.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-Dg46tTnk.js → diagram-P4PSJMXO-lrqvXDXp.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-Dg46tTnk.js.map → diagram-P4PSJMXO-lrqvXDXp.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BzJClUtq.js → erDiagram-INFDFZHY-C28KjRkA.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BzJClUtq.js.map → erDiagram-INFDFZHY-C28KjRkA.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-IBGgxeki.js → flowDiagram-PKNHOUZH-DkxGh-JF.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-IBGgxeki.js.map → flowDiagram-PKNHOUZH-DkxGh-JF.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DdxgzFKe.js → ganttDiagram-A5KZAMGK-BmZnHD96.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DdxgzFKe.js.map → ganttDiagram-A5KZAMGK-BmZnHD96.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-C14OpSSI.js → gitGraphDiagram-K3NZZRJ6-xiHqomZC.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-C14OpSSI.js.map → gitGraphDiagram-K3NZZRJ6-xiHqomZC.js.map} +1 -1
- package/webapp/dist/assets/{graph-BrKKvSVx.js → graph-ozb0amP0.js} +3 -3
- package/webapp/dist/assets/{graph-BrKKvSVx.js.map → graph-ozb0amP0.js.map} +1 -1
- package/webapp/dist/assets/{index-BV_dDe3L.js → index-Cyx7eev_.js} +700 -165
- package/webapp/dist/assets/{index-BV_dDe3L.js.map → index-Cyx7eev_.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-k0Yv94VI.js → infoDiagram-LFFYTUFH-fLl_TA1F.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-k0Yv94VI.js.map → infoDiagram-LFFYTUFH-fLl_TA1F.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-C3EYBxjN.js → ishikawaDiagram-PHBUUO56-ZL9tBKUr.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-C3EYBxjN.js.map → ishikawaDiagram-PHBUUO56-ZL9tBKUr.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BnSlOrbq.js → journeyDiagram-4ABVD52K--aRyymZs.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BnSlOrbq.js.map → journeyDiagram-4ABVD52K--aRyymZs.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CNYH0HDF.js → kanban-definition-K7BYSVSG-BO_QdW_O.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CNYH0HDF.js.map → kanban-definition-K7BYSVSG-BO_QdW_O.js.map} +1 -1
- package/webapp/dist/assets/{layout-NtmBC9CZ.js → layout-Bu3Xw0z2.js} +5 -5
- package/webapp/dist/assets/{layout-NtmBC9CZ.js.map → layout-Bu3Xw0z2.js.map} +1 -1
- package/webapp/dist/assets/{linear-BrqwApt9.js → linear-Bq77itJm.js} +2 -2
- package/webapp/dist/assets/{linear-BrqwApt9.js.map → linear-Bq77itJm.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DcknQb8H.js → mindmap-definition-YRQLILUH-CHB8qv8L.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DcknQb8H.js.map → mindmap-definition-YRQLILUH-CHB8qv8L.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-wydKHXzN.js → pieDiagram-SKSYHLDU-Cxg_wh4K.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-wydKHXzN.js.map → pieDiagram-SKSYHLDU-Cxg_wh4K.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D6i3VaFO.js → quadrantDiagram-337W2JSQ-DFguuaS9.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D6i3VaFO.js.map → quadrantDiagram-337W2JSQ-DFguuaS9.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-C0sBwH6H.js → requirementDiagram-Z7DCOOCP--tJ_dfsT.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-C0sBwH6H.js.map → requirementDiagram-Z7DCOOCP--tJ_dfsT.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-33jPg4PK.js → sankeyDiagram-WA2Y5GQK-f0zWimMc.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-33jPg4PK.js.map → sankeyDiagram-WA2Y5GQK-f0zWimMc.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-CJsKHnh5.js → sequenceDiagram-2WXFIKYE-dwXRRnyq.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-CJsKHnh5.js.map → sequenceDiagram-2WXFIKYE-dwXRRnyq.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-B6A5jTdU.js → stateDiagram-RAJIS63D-DToxcEC2.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-B6A5jTdU.js.map → stateDiagram-RAJIS63D-DToxcEC2.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-6YIjpVKr.js → stateDiagram-v2-FVOUBMTO-BY5hDUqz.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-6YIjpVKr.js.map → stateDiagram-v2-FVOUBMTO-BY5hDUqz.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BQS5KHfj.js → timeline-definition-YZTLITO2-CT3WRcFt.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BQS5KHfj.js.map → timeline-definition-YZTLITO2-CT3WRcFt.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-DB1uUX8l.js → treemap-KZPCXAKY-Lnkh2bpd.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-DB1uUX8l.js.map → treemap-KZPCXAKY-Lnkh2bpd.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BtcfWZJx.js → vennDiagram-LZ73GAT5-CYSLSh1w.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BtcfWZJx.js.map → vennDiagram-LZ73GAT5-CYSLSh1w.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CfIdcI74.js → xychartDiagram-JWTSCODW-DgvaqrGO.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CfIdcI74.js.map → xychartDiagram-JWTSCODW-DgvaqrGO.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
package/dist/persistence.js
CHANGED
|
@@ -358,6 +358,7 @@ function serializeReminderSnapshot(reminder) {
|
|
|
358
358
|
meta: reminder.meta,
|
|
359
359
|
echoback: reminder.echoback,
|
|
360
360
|
scope: reminder.scope ?? 'dialog',
|
|
361
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
361
362
|
createdAt: reminder.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
362
363
|
priority: reminder.priority ?? 'medium',
|
|
363
364
|
};
|
|
@@ -370,6 +371,7 @@ function cloneReminderSnapshot(snapshot) {
|
|
|
370
371
|
meta: snapshot.meta,
|
|
371
372
|
echoback: snapshot.echoback,
|
|
372
373
|
scope: snapshot.scope,
|
|
374
|
+
renderMode: snapshot.renderMode,
|
|
373
375
|
createdAt: snapshot.createdAt,
|
|
374
376
|
priority: snapshot.priority,
|
|
375
377
|
};
|
|
@@ -1202,6 +1204,9 @@ function isReminderPriority(value) {
|
|
|
1202
1204
|
function isReminderScope(value) {
|
|
1203
1205
|
return value === 'dialog' || value === 'personal' || value === 'agent_shared';
|
|
1204
1206
|
}
|
|
1207
|
+
function isReminderRenderMode(value) {
|
|
1208
|
+
return value === 'plain' || value === 'markdown';
|
|
1209
|
+
}
|
|
1205
1210
|
function isReminderStateFile(value) {
|
|
1206
1211
|
if (!isRecord(value))
|
|
1207
1212
|
return false;
|
|
@@ -1222,6 +1227,8 @@ function isReminderStateFile(value) {
|
|
|
1222
1227
|
return false;
|
|
1223
1228
|
if (entry.scope !== undefined && !isReminderScope(entry.scope))
|
|
1224
1229
|
return false;
|
|
1230
|
+
if (entry.renderMode !== undefined && !isReminderRenderMode(entry.renderMode))
|
|
1231
|
+
return false;
|
|
1225
1232
|
if (typeof entry.createdAt !== 'string')
|
|
1226
1233
|
return false;
|
|
1227
1234
|
if (!isReminderPriority(entry.priority))
|
|
@@ -4437,6 +4444,9 @@ class DialogPersistence {
|
|
|
4437
4444
|
try {
|
|
4438
4445
|
const dialogPath = this.getDialogEventsPath(dialogId, status);
|
|
4439
4446
|
const remindersFilePath = path.join(dialogPath, 'reminders.json');
|
|
4447
|
+
// The dialog directory must already exist from the normal dialog lifecycle.
|
|
4448
|
+
// Do not create it here just to save reminders: missing directories should stay loud
|
|
4449
|
+
// so stale-path/status-transition bugs cannot silently recreate an old dialog location.
|
|
4440
4450
|
const reminderState = {
|
|
4441
4451
|
reminders: reminders.map((r) => ({
|
|
4442
4452
|
id: r.id,
|
|
@@ -4445,6 +4455,7 @@ class DialogPersistence {
|
|
|
4445
4455
|
meta: r.meta,
|
|
4446
4456
|
echoback: r.echoback,
|
|
4447
4457
|
scope: r.scope ?? 'dialog',
|
|
4458
|
+
renderMode: r.renderMode ?? 'markdown',
|
|
4448
4459
|
createdAt: r.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
4449
4460
|
priority: r.priority ?? 'medium',
|
|
4450
4461
|
})),
|
|
@@ -4497,6 +4508,7 @@ class DialogPersistence {
|
|
|
4497
4508
|
meta: r.meta,
|
|
4498
4509
|
echoback: r.echoback,
|
|
4499
4510
|
scope: r.scope ?? 'dialog',
|
|
4511
|
+
renderMode: r.renderMode ?? 'markdown',
|
|
4500
4512
|
createdAt: r.createdAt,
|
|
4501
4513
|
priority: r.priority,
|
|
4502
4514
|
});
|
package/dist/priming.js
CHANGED
|
@@ -186,6 +186,10 @@ function parseReminderSnapshots(frontmatter) {
|
|
|
186
186
|
if (createdAt !== undefined && typeof createdAt !== 'string') {
|
|
187
187
|
throw new Error(`${context}.createdAt must be a string when provided`);
|
|
188
188
|
}
|
|
189
|
+
const renderMode = item['renderMode'];
|
|
190
|
+
if (renderMode !== undefined && renderMode !== 'plain' && renderMode !== 'markdown') {
|
|
191
|
+
throw new Error(`${context}.renderMode must be "plain" or "markdown" when provided`);
|
|
192
|
+
}
|
|
189
193
|
const priority = parseReminderPriority(item['priority'], context);
|
|
190
194
|
reminders.push({
|
|
191
195
|
id: typeof id === 'string' ? id : undefined,
|
|
@@ -194,6 +198,7 @@ function parseReminderSnapshots(frontmatter) {
|
|
|
194
198
|
meta,
|
|
195
199
|
echoback,
|
|
196
200
|
scope: scope === 'dialog' || scope === 'personal' || scope === 'agent_shared' ? scope : undefined,
|
|
201
|
+
renderMode: renderMode === 'plain' || renderMode === 'markdown' ? renderMode : undefined,
|
|
197
202
|
createdAt: typeof createdAt === 'string' ? createdAt : undefined,
|
|
198
203
|
priority,
|
|
199
204
|
});
|
|
@@ -208,6 +213,7 @@ function reminderToSnapshot(reminder) {
|
|
|
208
213
|
meta: reminder.meta,
|
|
209
214
|
echoback: reminder.echoback,
|
|
210
215
|
scope: reminder.scope,
|
|
216
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
211
217
|
createdAt: reminder.createdAt,
|
|
212
218
|
priority: reminder.priority,
|
|
213
219
|
};
|
|
@@ -229,6 +235,7 @@ function materializeReminderSnapshot(snapshot, context) {
|
|
|
229
235
|
meta: snapshot.meta,
|
|
230
236
|
echoback: snapshot.echoback,
|
|
231
237
|
scope: snapshot.scope,
|
|
238
|
+
renderMode: snapshot.renderMode ?? 'markdown',
|
|
232
239
|
createdAt: snapshot.createdAt,
|
|
233
240
|
priority: snapshot.priority,
|
|
234
241
|
});
|
package/dist/shared-reminders.js
CHANGED
|
@@ -74,6 +74,7 @@ function serializeReminder(reminder) {
|
|
|
74
74
|
meta: reminder.meta,
|
|
75
75
|
echoback: reminder.echoback,
|
|
76
76
|
scope: reminder.scope ?? 'agent_shared',
|
|
77
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
77
78
|
createdAt: reminder.createdAt ?? (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
78
79
|
priority: reminder.priority ?? 'medium',
|
|
79
80
|
};
|
|
@@ -89,6 +90,7 @@ function materializeStoredReminder(snapshot) {
|
|
|
89
90
|
meta: snapshot.meta,
|
|
90
91
|
echoback: snapshot.echoback,
|
|
91
92
|
scope: snapshot.scope ?? 'agent_shared',
|
|
93
|
+
renderMode: snapshot.renderMode ?? 'markdown',
|
|
92
94
|
createdAt: snapshot.createdAt,
|
|
93
95
|
priority: snapshot.priority,
|
|
94
96
|
});
|
package/dist/tool.d.ts
CHANGED
|
@@ -51,8 +51,10 @@ type PreparedRawToolArguments = Readonly<{
|
|
|
51
51
|
export interface ReminderOptions {
|
|
52
52
|
readonly echoback?: boolean;
|
|
53
53
|
readonly scope?: ReminderScope;
|
|
54
|
+
readonly renderMode?: ReminderRenderMode;
|
|
54
55
|
}
|
|
55
56
|
export type ReminderScope = 'dialog' | 'personal' | 'agent_shared';
|
|
57
|
+
export type ReminderRenderMode = 'plain' | 'markdown';
|
|
56
58
|
export type ReminderPriority = 'high' | 'medium' | 'low';
|
|
57
59
|
export interface Reminder extends ReminderOptions {
|
|
58
60
|
readonly id: string;
|
|
@@ -61,6 +63,7 @@ export interface Reminder extends ReminderOptions {
|
|
|
61
63
|
readonly meta?: JsonValue;
|
|
62
64
|
readonly createdAt?: string;
|
|
63
65
|
readonly priority?: ReminderPriority;
|
|
66
|
+
readonly renderMode?: ReminderRenderMode;
|
|
64
67
|
}
|
|
65
68
|
export declare function reminderEchoBackEnabled(reminder: Reminder): boolean;
|
|
66
69
|
export declare function reminderIsVirtual(reminder: Reminder): boolean;
|
|
@@ -75,8 +78,10 @@ export declare function materializeReminder(input: Readonly<{
|
|
|
75
78
|
scope?: ReminderScope;
|
|
76
79
|
createdAt?: string;
|
|
77
80
|
priority?: ReminderPriority;
|
|
81
|
+
renderMode?: ReminderRenderMode;
|
|
78
82
|
}>): Reminder;
|
|
79
83
|
export declare function cloneReminder(reminder: Reminder): Reminder;
|
|
84
|
+
export declare function computeReminderRenderRevision(reminder: Reminder): string;
|
|
80
85
|
export declare function compareReminderDisplayOrder(a: Reminder, b: Reminder): number;
|
|
81
86
|
export declare function getReminderOwnerName(reminder: Pick<Reminder, 'owner'>): string | undefined;
|
|
82
87
|
export declare function reminderOwnedBy(reminder: Reminder, owner: ReminderOwner | string): boolean;
|
package/dist/tool.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.reminderIsListed = reminderIsListed;
|
|
|
10
10
|
exports.generateReminderId = generateReminderId;
|
|
11
11
|
exports.materializeReminder = materializeReminder;
|
|
12
12
|
exports.cloneReminder = cloneReminder;
|
|
13
|
+
exports.computeReminderRenderRevision = computeReminderRenderRevision;
|
|
13
14
|
exports.compareReminderDisplayOrder = compareReminderDisplayOrder;
|
|
14
15
|
exports.getReminderOwnerName = getReminderOwnerName;
|
|
15
16
|
exports.reminderOwnedBy = reminderOwnedBy;
|
|
@@ -18,6 +19,7 @@ exports.formatToolArgumentsForContext = formatToolArgumentsForContext;
|
|
|
18
19
|
exports.prepareRawToolArguments = prepareRawToolArguments;
|
|
19
20
|
exports.resolveFuncToolInvocationArguments = resolveFuncToolInvocationArguments;
|
|
20
21
|
const id_1 = require("@longrun-ai/kernel/utils/id");
|
|
22
|
+
const crypto_1 = require("crypto");
|
|
21
23
|
function toolResult(content, outcome, contentItems) {
|
|
22
24
|
return {
|
|
23
25
|
content,
|
|
@@ -69,6 +71,7 @@ function materializeReminder(input) {
|
|
|
69
71
|
scope: input.scope ?? 'dialog',
|
|
70
72
|
createdAt: input.createdAt,
|
|
71
73
|
priority: input.priority,
|
|
74
|
+
renderMode: input.renderMode ?? 'markdown',
|
|
72
75
|
};
|
|
73
76
|
}
|
|
74
77
|
function cloneReminder(reminder) {
|
|
@@ -81,16 +84,75 @@ function cloneReminder(reminder) {
|
|
|
81
84
|
scope: reminder.scope,
|
|
82
85
|
createdAt: reminder.createdAt,
|
|
83
86
|
priority: reminder.priority,
|
|
87
|
+
renderMode: reminder.renderMode,
|
|
84
88
|
});
|
|
85
89
|
}
|
|
90
|
+
function computeReminderRenderRevision(reminder) {
|
|
91
|
+
const payload = JSON.stringify({
|
|
92
|
+
id: reminder.id,
|
|
93
|
+
content: reminder.content,
|
|
94
|
+
meta: reminder.meta ?? null,
|
|
95
|
+
echoback: reminder.echoback ?? true,
|
|
96
|
+
scope: reminder.scope ?? 'dialog',
|
|
97
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
98
|
+
});
|
|
99
|
+
return `sha256:${(0, crypto_1.createHash)('sha256').update(payload, 'utf8').digest('hex')}`;
|
|
100
|
+
}
|
|
101
|
+
function extractReminderDisplayTimestamp(reminder) {
|
|
102
|
+
let displayTs = reminder.createdAt ?? '';
|
|
103
|
+
let displayTsMs = parseReminderSortTimestamp(displayTs);
|
|
104
|
+
const meta = reminder.meta;
|
|
105
|
+
if (typeof meta !== 'object' || meta === null || Array.isArray(meta)) {
|
|
106
|
+
return { raw: displayTs, ms: displayTsMs };
|
|
107
|
+
}
|
|
108
|
+
const updatedAt = meta['updatedAt'];
|
|
109
|
+
if (typeof updatedAt === 'string') {
|
|
110
|
+
const updatedAtMs = parseReminderSortTimestamp(updatedAt);
|
|
111
|
+
if (updatedAtMs !== null && (displayTsMs === null || updatedAtMs > displayTsMs)) {
|
|
112
|
+
displayTs = updatedAt;
|
|
113
|
+
displayTsMs = updatedAtMs;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const lastUpdated = meta['lastUpdated'];
|
|
117
|
+
if (typeof lastUpdated === 'string') {
|
|
118
|
+
const lastUpdatedMs = parseReminderSortTimestamp(lastUpdated);
|
|
119
|
+
if (lastUpdatedMs !== null && (displayTsMs === null || lastUpdatedMs > displayTsMs)) {
|
|
120
|
+
displayTs = lastUpdated;
|
|
121
|
+
displayTsMs = lastUpdatedMs;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { raw: displayTs, ms: displayTsMs };
|
|
125
|
+
}
|
|
126
|
+
function parseReminderSortTimestamp(value) {
|
|
127
|
+
const trimmed = value.trim();
|
|
128
|
+
if (trimmed === '')
|
|
129
|
+
return null;
|
|
130
|
+
const unifiedMatch = trimmed.match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/);
|
|
131
|
+
if (unifiedMatch) {
|
|
132
|
+
const [, year, month, day, hour, minute, second] = unifiedMatch;
|
|
133
|
+
const parsed = new Date(Number(year), Number(month) - 1, Number(day), Number(hour), Number(minute), Number(second)).getTime();
|
|
134
|
+
return Number.isNaN(parsed) ? null : parsed;
|
|
135
|
+
}
|
|
136
|
+
const parsed = Date.parse(trimmed);
|
|
137
|
+
return Number.isNaN(parsed) ? null : parsed;
|
|
138
|
+
}
|
|
86
139
|
// Reminder presentation order is a framework-level concern distinct from owner semantics.
|
|
87
140
|
// Keep it centralized so dialog-local reminders and agent-shared reminders stay in the same
|
|
88
141
|
// newest-first order everywhere they are merged, rendered, or injected.
|
|
89
142
|
function compareReminderDisplayOrder(a, b) {
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
93
|
-
|
|
143
|
+
const aDisplayTs = extractReminderDisplayTimestamp(a);
|
|
144
|
+
const bDisplayTs = extractReminderDisplayTimestamp(b);
|
|
145
|
+
if (aDisplayTs.ms !== null || bDisplayTs.ms !== null) {
|
|
146
|
+
if (aDisplayTs.ms === null)
|
|
147
|
+
return 1;
|
|
148
|
+
if (bDisplayTs.ms === null)
|
|
149
|
+
return -1;
|
|
150
|
+
if (aDisplayTs.ms !== bDisplayTs.ms) {
|
|
151
|
+
return bDisplayTs.ms - aDisplayTs.ms;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (aDisplayTs.raw !== bDisplayTs.raw) {
|
|
155
|
+
return bDisplayTs.raw.localeCompare(aDisplayTs.raw);
|
|
94
156
|
}
|
|
95
157
|
return b.id.localeCompare(a.id);
|
|
96
158
|
}
|
|
@@ -7,6 +7,7 @@ exports.applyAppReminderRequests = applyAppReminderRequests;
|
|
|
7
7
|
const evt_registry_1 = require("../evt-registry");
|
|
8
8
|
const driver_messages_1 = require("../runtime/driver-messages");
|
|
9
9
|
const work_language_1 = require("../runtime/work-language");
|
|
10
|
+
const shared_reminders_1 = require("../shared-reminders");
|
|
10
11
|
const tool_1 = require("../tool");
|
|
11
12
|
const registry_1 = require("./registry");
|
|
12
13
|
const APP_REMINDER_META_KEYS = new Set([
|
|
@@ -137,6 +138,7 @@ function toReminderState(reminder) {
|
|
|
137
138
|
content: reminder.content,
|
|
138
139
|
meta: extractOwnerMeta(reminder.meta),
|
|
139
140
|
echoback: reminder.echoback,
|
|
141
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
140
142
|
};
|
|
141
143
|
}
|
|
142
144
|
function findOwnedReminderEntries(dlg, descriptor, owner) {
|
|
@@ -167,12 +169,20 @@ function fallbackRenderedReminder(reminder) {
|
|
|
167
169
|
}
|
|
168
170
|
async function persistAndPublishReminders(dlg) {
|
|
169
171
|
await dlg.dlgStore.persistReminders(dlg, dlg.reminders);
|
|
170
|
-
const
|
|
172
|
+
const sharedReminders = await (0, shared_reminders_1.loadAgentSharedReminders)(dlg.agentId);
|
|
173
|
+
const visibleReminders = [
|
|
174
|
+
...dlg.reminders.map((reminder) => (0, tool_1.cloneReminder)(reminder)),
|
|
175
|
+
...sharedReminders,
|
|
176
|
+
];
|
|
177
|
+
visibleReminders.sort(tool_1.compareReminderDisplayOrder);
|
|
178
|
+
const reminders = visibleReminders.map((reminder) => ({
|
|
171
179
|
content: reminder.content,
|
|
172
180
|
meta: isRecord(reminder.meta) ? reminder.meta : undefined,
|
|
173
181
|
reminder_id: reminder.id,
|
|
182
|
+
renderRevision: (0, tool_1.computeReminderRenderRevision)(reminder),
|
|
174
183
|
echoback: (0, tool_1.reminderEchoBackEnabled)(reminder),
|
|
175
184
|
scope: reminder.scope,
|
|
185
|
+
renderMode: reminder.renderMode ?? 'markdown',
|
|
176
186
|
}));
|
|
177
187
|
const evt = { type: 'full_reminders_update', reminders };
|
|
178
188
|
(0, evt_registry_1.postDialogEvent)(dlg, evt);
|
|
@@ -276,7 +286,10 @@ async function applyAppReminderRequests(dlg, params) {
|
|
|
276
286
|
case 'noop':
|
|
277
287
|
break;
|
|
278
288
|
case 'add': {
|
|
279
|
-
dlg.addReminder(result.reminder.content, owner, buildAppReminderMeta(descriptor, result.reminder.meta), normalizeInsertPosition(dlg.reminders.length, result.position), {
|
|
289
|
+
dlg.addReminder(result.reminder.content, owner, buildAppReminderMeta(descriptor, result.reminder.meta), normalizeInsertPosition(dlg.reminders.length, result.position), {
|
|
290
|
+
echoback: result.reminder.echoback,
|
|
291
|
+
renderMode: result.reminder.renderMode ?? 'markdown',
|
|
292
|
+
});
|
|
280
293
|
changed = true;
|
|
281
294
|
break;
|
|
282
295
|
}
|
|
@@ -285,7 +298,11 @@ async function applyAppReminderRequests(dlg, params) {
|
|
|
285
298
|
if (!target) {
|
|
286
299
|
throw new Error(`App '${params.appId}' reminder owner '${request.ownerRef}' returned invalid ownedIndex=${result.ownedIndex}`);
|
|
287
300
|
}
|
|
288
|
-
dlg.updateReminder(target.index, result.reminder.content, buildAppReminderMeta(descriptor, result.reminder.meta), {
|
|
301
|
+
dlg.updateReminder(target.index, result.reminder.content, buildAppReminderMeta(descriptor, result.reminder.meta), {
|
|
302
|
+
echoback: result.reminder.echoback,
|
|
303
|
+
// Preserve the existing render mode when the app does not explicitly override it.
|
|
304
|
+
renderMode: result.reminder.renderMode ?? target.reminder.renderMode ?? 'markdown',
|
|
305
|
+
});
|
|
289
306
|
changed = true;
|
|
290
307
|
break;
|
|
291
308
|
}
|
package/dist/tools/ctrl.js
CHANGED
|
@@ -181,6 +181,11 @@ function computeReminderInsertIndex(reminders, positionValue, predicate) {
|
|
|
181
181
|
}
|
|
182
182
|
return insertIndex;
|
|
183
183
|
}
|
|
184
|
+
function parseReminderRenderMode(value) {
|
|
185
|
+
if (value === undefined)
|
|
186
|
+
return 'markdown';
|
|
187
|
+
return value === 'plain' || value === 'markdown' ? value : null;
|
|
188
|
+
}
|
|
184
189
|
function getContinuationPackageContextHealthLevel(snapshot) {
|
|
185
190
|
if (snapshot?.kind !== 'available') {
|
|
186
191
|
return undefined;
|
|
@@ -380,6 +385,11 @@ exports.addReminderTool = {
|
|
|
380
385
|
enum: ['dialog', 'personal'],
|
|
381
386
|
description: 'Reminder visibility scope. Defaults to dialog.',
|
|
382
387
|
},
|
|
388
|
+
render_mode: {
|
|
389
|
+
type: 'string',
|
|
390
|
+
enum: ['markdown', 'plain'],
|
|
391
|
+
description: 'How the reminder should render in WebUI. Defaults to markdown.',
|
|
392
|
+
},
|
|
383
393
|
},
|
|
384
394
|
},
|
|
385
395
|
argsValidation: 'dominds',
|
|
@@ -399,6 +409,10 @@ exports.addReminderTool = {
|
|
|
399
409
|
if (reminderScope === null) {
|
|
400
410
|
return (0, tool_1.toolFailure)(t.invalidFormatAdd);
|
|
401
411
|
}
|
|
412
|
+
const reminderRenderMode = parseReminderRenderMode(args['render_mode']);
|
|
413
|
+
if (reminderRenderMode === null) {
|
|
414
|
+
return (0, tool_1.toolFailure)(t.invalidFormatAdd);
|
|
415
|
+
}
|
|
402
416
|
const positionValue = args['position'];
|
|
403
417
|
const contextHealthLevel = getContinuationPackageContextHealthLevel(dlg.getLastContextHealth());
|
|
404
418
|
const reminderMeta = contextHealthLevel === undefined
|
|
@@ -410,7 +424,10 @@ exports.addReminderTool = {
|
|
|
410
424
|
if (reminderScope === 'dialog') {
|
|
411
425
|
try {
|
|
412
426
|
const insertIndex = computeReminderInsertIndex(dlg.reminders, positionValue, () => true);
|
|
413
|
-
dlg.addReminder(reminderContent, undefined, reminderMeta, insertIndex, {
|
|
427
|
+
dlg.addReminder(reminderContent, undefined, reminderMeta, insertIndex, {
|
|
428
|
+
scope: 'dialog',
|
|
429
|
+
renderMode: reminderRenderMode,
|
|
430
|
+
});
|
|
414
431
|
return (0, tool_result_messages_1.formatToolActionResult)(language, 'added');
|
|
415
432
|
}
|
|
416
433
|
catch (error) {
|
|
@@ -432,6 +449,7 @@ exports.addReminderTool = {
|
|
|
432
449
|
content: reminderContent,
|
|
433
450
|
meta: reminderMeta,
|
|
434
451
|
scope: 'personal',
|
|
452
|
+
renderMode: reminderRenderMode,
|
|
435
453
|
});
|
|
436
454
|
reminders.push(reminder);
|
|
437
455
|
});
|
|
@@ -467,6 +485,11 @@ exports.updateReminderTool = {
|
|
|
467
485
|
properties: {
|
|
468
486
|
reminder_id: { type: 'string', description: 'Stable reminder id.' },
|
|
469
487
|
content: { type: 'string', description: 'New reminder content.' },
|
|
488
|
+
render_mode: {
|
|
489
|
+
type: 'string',
|
|
490
|
+
enum: ['markdown', 'plain'],
|
|
491
|
+
description: 'Optional render mode override. Defaults to preserving current mode.',
|
|
492
|
+
},
|
|
470
493
|
},
|
|
471
494
|
},
|
|
472
495
|
argsValidation: 'dominds',
|
|
@@ -498,12 +521,21 @@ exports.updateReminderTool = {
|
|
|
498
521
|
const reminderContent = typeof contentValue === 'string' ? contentValue.trim() : '';
|
|
499
522
|
if (!reminderContent)
|
|
500
523
|
return (0, tool_1.toolFailure)(t.reminderContentEmpty);
|
|
524
|
+
const requestedRenderMode = args['render_mode'];
|
|
525
|
+
const reminderRenderMode = requestedRenderMode === undefined
|
|
526
|
+
? reminder.renderMode
|
|
527
|
+
: parseReminderRenderMode(requestedRenderMode);
|
|
528
|
+
if (reminderRenderMode === null) {
|
|
529
|
+
return (0, tool_1.toolFailure)(t.invalidFormatUpdate);
|
|
530
|
+
}
|
|
501
531
|
const contextHealthLevel = getContinuationPackageContextHealthLevel(dlg.getLastContextHealth());
|
|
502
532
|
if (contextHealthLevel === undefined) {
|
|
503
533
|
const stripResult = removeContinuationPackageReminderMeta(reminder?.meta);
|
|
504
534
|
if (stripResult.changed) {
|
|
505
535
|
if (resolved.target.source === 'dialog') {
|
|
506
|
-
dlg.updateReminder(resolved.target.index, reminderContent, stripResult.nextMeta
|
|
536
|
+
dlg.updateReminder(resolved.target.index, reminderContent, stripResult.nextMeta, {
|
|
537
|
+
renderMode: reminderRenderMode,
|
|
538
|
+
});
|
|
507
539
|
}
|
|
508
540
|
else {
|
|
509
541
|
await (0, shared_reminders_1.mutateAgentSharedReminders)(resolved.target.agentId, (reminders) => {
|
|
@@ -511,6 +543,7 @@ exports.updateReminderTool = {
|
|
|
511
543
|
...reminders[resolved.target.index],
|
|
512
544
|
content: reminderContent,
|
|
513
545
|
meta: stripResult.nextMeta,
|
|
546
|
+
renderMode: reminderRenderMode ?? reminders[resolved.target.index]?.renderMode,
|
|
514
547
|
};
|
|
515
548
|
});
|
|
516
549
|
dlg.touchReminders();
|
|
@@ -518,13 +551,16 @@ exports.updateReminderTool = {
|
|
|
518
551
|
return (0, tool_result_messages_1.formatToolActionResult)(language, 'updated');
|
|
519
552
|
}
|
|
520
553
|
if (resolved.target.source === 'dialog') {
|
|
521
|
-
dlg.updateReminder(resolved.target.index, reminderContent
|
|
554
|
+
dlg.updateReminder(resolved.target.index, reminderContent, undefined, {
|
|
555
|
+
renderMode: reminderRenderMode,
|
|
556
|
+
});
|
|
522
557
|
}
|
|
523
558
|
else {
|
|
524
559
|
await (0, shared_reminders_1.mutateAgentSharedReminders)(resolved.target.agentId, (reminders) => {
|
|
525
560
|
reminders[resolved.target.index] = {
|
|
526
561
|
...reminders[resolved.target.index],
|
|
527
562
|
content: reminderContent,
|
|
563
|
+
renderMode: reminderRenderMode ?? reminders[resolved.target.index]?.renderMode,
|
|
528
564
|
};
|
|
529
565
|
});
|
|
530
566
|
dlg.touchReminders();
|
|
@@ -537,7 +573,9 @@ exports.updateReminderTool = {
|
|
|
537
573
|
contextHealthLevel,
|
|
538
574
|
});
|
|
539
575
|
if (resolved.target.source === 'dialog') {
|
|
540
|
-
dlg.updateReminder(resolved.target.index, reminderContent, reminderMeta
|
|
576
|
+
dlg.updateReminder(resolved.target.index, reminderContent, reminderMeta, {
|
|
577
|
+
renderMode: reminderRenderMode,
|
|
578
|
+
});
|
|
541
579
|
}
|
|
542
580
|
else {
|
|
543
581
|
await (0, shared_reminders_1.mutateAgentSharedReminders)(resolved.target.agentId, (reminders) => {
|
|
@@ -545,6 +583,7 @@ exports.updateReminderTool = {
|
|
|
545
583
|
...reminders[resolved.target.index],
|
|
546
584
|
content: reminderContent,
|
|
547
585
|
meta: reminderMeta,
|
|
586
|
+
renderMode: reminderRenderMode ?? reminders[resolved.target.index]?.renderMode,
|
|
548
587
|
};
|
|
549
588
|
});
|
|
550
589
|
dlg.touchReminders();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Budget for a single directly readable manual request.
|
|
3
|
+
*
|
|
4
|
+
* This is a product budget, not a measured runtime maximum: build-time validation can only see
|
|
5
|
+
* statically known manual surfaces, while rtws-specific app/MCP manuals are discovered later.
|
|
6
|
+
* Keep enough headroom for legitimate long-form chapters, but still fail obviously bloated
|
|
7
|
+
* handbook content during build instead of discovering it only at runtime.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MANUAL_SINGLE_REQUEST_CHAR_LIMIT = 25000;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MANUAL_SINGLE_REQUEST_CHAR_LIMIT = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Budget for a single directly readable manual request.
|
|
6
|
+
*
|
|
7
|
+
* This is a product budget, not a measured runtime maximum: build-time validation can only see
|
|
8
|
+
* statically known manual surfaces, while rtws-specific app/MCP manuals are discovered later.
|
|
9
|
+
* Keep enough headroom for legitimate long-form chapters, but still fail obviously bloated
|
|
10
|
+
* handbook content during build instead of discovering it only at runtime.
|
|
11
|
+
*/
|
|
12
|
+
exports.MANUAL_SINGLE_REQUEST_CHAR_LIMIT = 25000;
|