dominds 0.7.0 → 0.7.2
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/agent-priming.js +162 -24
- package/dist/docs/dialog-system.md +18 -16
- package/dist/docs/dialog-system.zh.md +20 -19
- package/dist/llm/driver-v2/core.js +101 -1
- package/dist/llm/driver-v2/orchestrator.js +7 -0
- package/dist/llm/driver-v2/round.js +114 -4
- package/dist/llm/driver-v2/tellask-bridge.js +29 -2
- package/dist/llm/driver.js +54 -2
- package/dist/persistence.js +20 -0
- package/dist/server/websocket-handler.js +99 -7
- package/dist/shared/diligence.js +8 -2
- package/dist/static/assets/{_baseUniq-BxKNVs_E.js → _baseUniq-C04fddeD.js} +2 -2
- package/dist/static/assets/{_baseUniq-BxKNVs_E.js.map → _baseUniq-C04fddeD.js.map} +1 -1
- package/dist/static/assets/{arc-SobL0GO-.js → arc-qmZerooe.js} +2 -2
- package/dist/static/assets/{arc-SobL0GO-.js.map → arc-qmZerooe.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-MMDS1QOC.js → architectureDiagram-VXUJARFQ-DPAwJ19g.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-MMDS1QOC.js.map → architectureDiagram-VXUJARFQ-DPAwJ19g.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-BOsSirNK.js → blockDiagram-VD42YOAC-M0jbEJ-1.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-BOsSirNK.js.map → blockDiagram-VD42YOAC-M0jbEJ-1.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-D4jQkzwx.js → c4Diagram-YG6GDRKO-DlF8gwFw.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-D4jQkzwx.js.map → c4Diagram-YG6GDRKO-DlF8gwFw.js.map} +1 -1
- package/dist/static/assets/{channel-CNJ5IKbI.js → channel-B2Ph7be3.js} +2 -2
- package/dist/static/assets/{channel-CNJ5IKbI.js.map → channel-B2Ph7be3.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-Dzp3xxyo.js → chunk-4BX2VUAB-BZ2L6PK1.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-Dzp3xxyo.js.map → chunk-4BX2VUAB-BZ2L6PK1.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-CbmixuSI.js → chunk-55IACEB6-COXFmnJW.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-CbmixuSI.js.map → chunk-55IACEB6-COXFmnJW.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-CdpmYjdb.js → chunk-B4BG7PRW-B1HiWlBq.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-CdpmYjdb.js.map → chunk-B4BG7PRW-B1HiWlBq.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-wBUIgR3h.js → chunk-DI55MBZ5-BO3wQRnL.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-wBUIgR3h.js.map → chunk-DI55MBZ5-BO3wQRnL.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-l62jcBz-.js → chunk-FMBD7UC4-BdavRHSy.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-l62jcBz-.js.map → chunk-FMBD7UC4-BdavRHSy.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-BXfKZUpE.js → chunk-QN33PNHL-DchoUNF7.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-BXfKZUpE.js.map → chunk-QN33PNHL-DchoUNF7.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-BYB4VxWj.js → chunk-QZHKN3VN-Dr3uVTtK.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-BYB4VxWj.js.map → chunk-QZHKN3VN-Dr3uVTtK.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-CvlWEnXl.js → chunk-TZMSLE5B-BhOcHZNs.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-CvlWEnXl.js.map → chunk-TZMSLE5B-BhOcHZNs.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-x2kw_AQY.js → classDiagram-2ON5EDUG-Dep-MR6W.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-x2kw_AQY.js.map → classDiagram-2ON5EDUG-Dep-MR6W.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-x2kw_AQY.js → classDiagram-v2-WZHVMYZB-Dep-MR6W.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-x2kw_AQY.js.map → classDiagram-v2-WZHVMYZB-Dep-MR6W.js.map} +1 -1
- package/dist/static/assets/{clone-CfBpi3MU.js → clone-DzoL-dSX.js} +2 -2
- package/dist/static/assets/{clone-CfBpi3MU.js.map → clone-DzoL-dSX.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DQSzPb7y.js → cose-bilkent-S5V4N54A-Bqu_DqDB.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DQSzPb7y.js.map → cose-bilkent-S5V4N54A-Bqu_DqDB.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BuBo_U3J.js → dagre-6UL2VRFP-49InNTzs.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BuBo_U3J.js.map → dagre-6UL2VRFP-49InNTzs.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-J2z13Z5A.js → diagram-PSM6KHXK-C1IsQq8m.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-J2z13Z5A.js.map → diagram-PSM6KHXK-C1IsQq8m.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-x8XUGykE.js → diagram-QEK2KX5R-DyJeSg_Y.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-x8XUGykE.js.map → diagram-QEK2KX5R-DyJeSg_Y.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-BE6Nr1BM.js → diagram-S2PKOQOG-aeLjjldp.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-BE6Nr1BM.js.map → diagram-S2PKOQOG-aeLjjldp.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-D3qVnFAh.js → erDiagram-Q2GNP2WA-BUcv4AUq.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-D3qVnFAh.js.map → erDiagram-Q2GNP2WA-BUcv4AUq.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-Cjp9Rt9t.js → flowDiagram-NV44I4VS-DfmTKlf_.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-Cjp9Rt9t.js.map → flowDiagram-NV44I4VS-DfmTKlf_.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D_hc66FC.js → ganttDiagram-JELNMOA3-BpJE8Lhp.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D_hc66FC.js.map → ganttDiagram-JELNMOA3-BpJE8Lhp.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-1I_zaTtz.js → gitGraphDiagram-NY62KEGX-DmznjSYb.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-1I_zaTtz.js.map → gitGraphDiagram-NY62KEGX-DmznjSYb.js.map} +1 -1
- package/dist/static/assets/{graph-K6mmQESm.js → graph-CcKyIZaL.js} +3 -3
- package/dist/static/assets/{graph-K6mmQESm.js.map → graph-CcKyIZaL.js.map} +1 -1
- package/dist/static/assets/{index-RV1MEt3b.js → index-CQr8MdPI.js} +77 -44
- package/dist/static/assets/index-CQr8MdPI.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-CqazW4ov.js → infoDiagram-WHAUD3N6-DwRPjndM.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-CqazW4ov.js.map → infoDiagram-WHAUD3N6-DwRPjndM.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CCwUViz2.js → journeyDiagram-XKPGCS4Q-BRAFSgVa.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CCwUViz2.js.map → journeyDiagram-XKPGCS4Q-BRAFSgVa.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BKj9P06Z.js → kanban-definition-3W4ZIXB7-DlJ7-fgN.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BKj9P06Z.js.map → kanban-definition-3W4ZIXB7-DlJ7-fgN.js.map} +1 -1
- package/dist/static/assets/{layout-BcrPlYah.js → layout-CcW5-Iee.js} +5 -5
- package/dist/static/assets/{layout-BcrPlYah.js.map → layout-CcW5-Iee.js.map} +1 -1
- package/dist/static/assets/{linear-DYXbzldi.js → linear-sKdPIuOH.js} +2 -2
- package/dist/static/assets/{linear-DYXbzldi.js.map → linear-sKdPIuOH.js.map} +1 -1
- package/dist/static/assets/{min-CAfJrdkg.js → min-CQ0AYqmk.js} +3 -3
- package/dist/static/assets/{min-CAfJrdkg.js.map → min-CQ0AYqmk.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CXWJYrd0.js → mindmap-definition-VGOIOE7T-CTRwSlu8.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CXWJYrd0.js.map → mindmap-definition-VGOIOE7T-CTRwSlu8.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DjKlsPYr.js → pieDiagram-ADFJNKIX-DmD5KRKE.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DjKlsPYr.js.map → pieDiagram-ADFJNKIX-DmD5KRKE.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-fcJtlyUO.js → quadrantDiagram-AYHSOK5B-C5sqZOBF.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-fcJtlyUO.js.map → quadrantDiagram-AYHSOK5B-C5sqZOBF.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DmB9Ezaa.js → requirementDiagram-UZGBJVZJ-DBAUwM-7.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DmB9Ezaa.js.map → requirementDiagram-UZGBJVZJ-DBAUwM-7.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CdGDwaMo.js → sankeyDiagram-TZEHDZUN-CkaxkOo7.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CdGDwaMo.js.map → sankeyDiagram-TZEHDZUN-CkaxkOo7.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-C-jiKkhi.js → sequenceDiagram-WL72ISMW-CJ6wMDXh.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-C-jiKkhi.js.map → sequenceDiagram-WL72ISMW-CJ6wMDXh.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-M9808W5W.js → stateDiagram-FKZM4ZOC-C66ZP2NW.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-M9808W5W.js.map → stateDiagram-FKZM4ZOC-C66ZP2NW.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-JE0YQyVh.js → stateDiagram-v2-4FDKWEC3-DdoOy271.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-JE0YQyVh.js.map → stateDiagram-v2-4FDKWEC3-DdoOy271.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-a2Rh8B62.js → timeline-definition-IT6M3QCI-2A2Mqedz.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-a2Rh8B62.js.map → timeline-definition-IT6M3QCI-2A2Mqedz.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-D3tvybuo.js → treemap-KMMF4GRG-CTbGSr5o.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-D3tvybuo.js.map → treemap-KMMF4GRG-CTbGSr5o.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-kmwKLP3Y.js → xychartDiagram-PRI3JC2R-C_S3XXZI.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-kmwKLP3Y.js.map → xychartDiagram-PRI3JC2R-C_S3XXZI.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/package.json +1 -1
- package/dist/static/assets/index-RV1MEt3b.js.map +0 -1
|
@@ -11,6 +11,7 @@ const dialog_instance_registry_1 = require("../dialog-instance-registry");
|
|
|
11
11
|
const dialog_run_state_1 = require("../dialog-run-state");
|
|
12
12
|
const evt_registry_1 = require("../evt-registry");
|
|
13
13
|
const driver_entry_1 = require("../llm/driver-entry");
|
|
14
|
+
const runtime_utils_1 = require("../llm/driver-v2/runtime-utils");
|
|
14
15
|
const log_1 = require("../log");
|
|
15
16
|
const persistence_1 = require("../persistence");
|
|
16
17
|
const problems_1 = require("../problems");
|
|
@@ -42,6 +43,14 @@ const wsLiveDlg = new WeakMap();
|
|
|
42
43
|
const wsSub = new WeakMap();
|
|
43
44
|
const wsUiLanguage = new WeakMap();
|
|
44
45
|
let broadcastDialogsIndexMessage = null;
|
|
46
|
+
let broadcastRunControlRefreshMessage = null;
|
|
47
|
+
function emitRunControlRefresh(reason) {
|
|
48
|
+
broadcastRunControlRefreshMessage?.({
|
|
49
|
+
type: 'run_control_refresh',
|
|
50
|
+
reason,
|
|
51
|
+
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
45
54
|
async function syncPendingTellaskReminderBestEffort(dialog, where) {
|
|
46
55
|
try {
|
|
47
56
|
await (0, pending_tellask_reminder_1.syncPendingTellaskReminderState)(dialog);
|
|
@@ -249,6 +258,18 @@ async function handleDeclareSubdialogDead(ws, packet) {
|
|
|
249
258
|
}
|
|
250
259
|
if (!metadata)
|
|
251
260
|
return;
|
|
261
|
+
if ('tellaskSession' in metadata &&
|
|
262
|
+
typeof metadata.tellaskSession === 'string' &&
|
|
263
|
+
metadata.tellaskSession.trim() !== '') {
|
|
264
|
+
const rootRestored = await restoreDialogForDrive(new dialog_1.DialogID(dialogIdObj.rootId), 'running');
|
|
265
|
+
if (!(rootRestored instanceof dialog_1.RootDialog)) {
|
|
266
|
+
throw new Error(`Expected root dialog instance for ${dialogIdObj.rootId}`);
|
|
267
|
+
}
|
|
268
|
+
const removed = rootRestored.unregisterSubdialog(metadata.agentId, metadata.tellaskSession);
|
|
269
|
+
if (removed) {
|
|
270
|
+
await rootRestored.saveSubdialogRegistry();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
252
273
|
if (!('assignmentFromSup' in metadata))
|
|
253
274
|
return;
|
|
254
275
|
if (!metadata.assignmentFromSup)
|
|
@@ -265,8 +286,8 @@ async function handleDeclareSubdialogDead(ws, packet) {
|
|
|
265
286
|
}
|
|
266
287
|
const parentDialog = await restoreDialogForDrive(callerDialogIdObj, 'running');
|
|
267
288
|
const responseText = (0, runtime_language_1.getWorkLanguage)() === 'zh'
|
|
268
|
-
? `系统反馈:支线对话 ${dialogIdObj.valueOf()}
|
|
269
|
-
: `System notice: sideline dialog ${dialogIdObj.valueOf()} has been declared dead by the user (irreversible).
|
|
289
|
+
? `系统反馈:支线对话 ${dialogIdObj.valueOf()} 已被用户宣布卡死(不可逆)。后续可以重用相同的 slug 发起全新支线对话;只是之前的上下文已不再,诉请正文请提供最新的完整上下文信息。`
|
|
290
|
+
: `System notice: sideline dialog ${dialogIdObj.valueOf()} has been declared dead by the user (irreversible). You may reuse the same slug to start a brand-new sideline dialog, but previous context is no longer retained; include the latest complete context in the tellask body.`;
|
|
270
291
|
const responseTextWithNote = note === ''
|
|
271
292
|
? responseText
|
|
272
293
|
: (0, runtime_language_1.getWorkLanguage)() === 'zh'
|
|
@@ -314,6 +335,10 @@ async function handleSetDiligencePush(ws, packet) {
|
|
|
314
335
|
ws.send(JSON.stringify({ type: 'error', message: `Dialog ${dialogIdObj.valueOf()} not found` }));
|
|
315
336
|
return;
|
|
316
337
|
}
|
|
338
|
+
const latestBefore = await persistence_1.DialogPersistence.loadDialogLatest(dialogIdObj, foundStatus);
|
|
339
|
+
const prevDisableDiligencePush = latestBefore && typeof latestBefore.disableDiligencePush === 'boolean'
|
|
340
|
+
? latestBefore.disableDiligencePush
|
|
341
|
+
: false;
|
|
317
342
|
await persistence_1.DialogPersistence.mutateDialogLatest(dialogIdObj, (previous) => ({
|
|
318
343
|
kind: 'patch',
|
|
319
344
|
patch: { disableDiligencePush },
|
|
@@ -330,6 +355,13 @@ async function handleSetDiligencePush(ws, packet) {
|
|
|
330
355
|
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
331
356
|
};
|
|
332
357
|
ws.send(JSON.stringify(msg));
|
|
358
|
+
const shouldTriggerImmediateDiligence = foundStatus === 'running' &&
|
|
359
|
+
prevDisableDiligencePush &&
|
|
360
|
+
!disableDiligencePush &&
|
|
361
|
+
rootDialog instanceof dialog_1.RootDialog;
|
|
362
|
+
if (shouldTriggerImmediateDiligence) {
|
|
363
|
+
void maybeTriggerImmediateDiligencePrompt(rootDialog);
|
|
364
|
+
}
|
|
333
365
|
}
|
|
334
366
|
catch (error) {
|
|
335
367
|
log.warn('Failed to handle set_diligence_push', error);
|
|
@@ -344,6 +376,55 @@ function clampNonNegativeFiniteInt(value, fallback) {
|
|
|
344
376
|
return fallback;
|
|
345
377
|
return Math.max(0, Math.floor(value));
|
|
346
378
|
}
|
|
379
|
+
async function maybeTriggerImmediateDiligencePrompt(rootDialog) {
|
|
380
|
+
try {
|
|
381
|
+
if (rootDialog.disableDiligencePush) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(rootDialog.id, 'running');
|
|
385
|
+
const runState = latest?.runState;
|
|
386
|
+
if (runState && runState.kind !== 'idle_waiting_user') {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const suspension = await rootDialog.getSuspensionStatus();
|
|
390
|
+
if (!suspension.canDrive) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const queuedResponses = await persistence_1.DialogPersistence.loadSubdialogResponsesQueue(rootDialog.id);
|
|
394
|
+
if (queuedResponses.length > 0) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const team = await team_1.Team.load();
|
|
398
|
+
const prepared = await (0, runtime_utils_1.maybePrepareDiligenceAutoContinuePrompt)({
|
|
399
|
+
dlg: rootDialog,
|
|
400
|
+
isRootDialog: true,
|
|
401
|
+
remainingBudget: rootDialog.diligencePushRemainingBudget,
|
|
402
|
+
diligencePushMax: resolveMemberDiligencePushMax(team, rootDialog.agentId),
|
|
403
|
+
});
|
|
404
|
+
rootDialog.diligencePushRemainingBudget = prepared.nextRemainingBudget;
|
|
405
|
+
await persistence_1.DialogPersistence.mutateDialogLatest(rootDialog.id, () => ({
|
|
406
|
+
kind: 'patch',
|
|
407
|
+
patch: { diligencePushRemainingBudget: rootDialog.diligencePushRemainingBudget },
|
|
408
|
+
}));
|
|
409
|
+
if (prepared.kind !== 'disabled') {
|
|
410
|
+
(0, evt_registry_1.postDialogEvent)(rootDialog, {
|
|
411
|
+
type: 'diligence_budget_evt',
|
|
412
|
+
maxInjectCount: prepared.maxInjectCount,
|
|
413
|
+
injectedCount: Math.max(0, prepared.maxInjectCount - prepared.nextRemainingBudget),
|
|
414
|
+
remainingCount: Math.max(0, prepared.nextRemainingBudget),
|
|
415
|
+
disableDiligencePush: rootDialog.disableDiligencePush,
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
if (prepared.kind === 'prompt') {
|
|
419
|
+
await (0, driver_entry_1.driveDialogStream)(rootDialog, prepared.prompt, true);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
log.warn('Failed to trigger immediate diligence prompt after enabling keep-going', error, {
|
|
424
|
+
dialogId: rootDialog.id.valueOf(),
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
347
428
|
async function handleRefillDiligencePushBudget(ws, packet) {
|
|
348
429
|
const { dialog } = packet;
|
|
349
430
|
if (!isRecord(dialog)) {
|
|
@@ -887,7 +968,7 @@ async function handleUserMsg2Dlg(ws, packet) {
|
|
|
887
968
|
existingDialog.status === 'running' &&
|
|
888
969
|
existingSub &&
|
|
889
970
|
existingSub.dialogKey === existingDialog.id.valueOf()) {
|
|
890
|
-
await (0, driver_entry_1.driveDialogStream)(existingDialog, { content, msgId, grammar: 'tellask', userLanguageCode }, true);
|
|
971
|
+
await (0, driver_entry_1.driveDialogStream)(existingDialog, { content, msgId, grammar: 'tellask', userLanguageCode, origin: 'user' }, true);
|
|
891
972
|
return;
|
|
892
973
|
}
|
|
893
974
|
// Dialog not found in wsLiveDlg - drive using the canonical root/subdialog instances.
|
|
@@ -907,7 +988,7 @@ async function handleUserMsg2Dlg(ws, packet) {
|
|
|
907
988
|
return;
|
|
908
989
|
}
|
|
909
990
|
await setupWebSocketSubscription(ws, dialog);
|
|
910
|
-
await (0, driver_entry_1.driveDialogStream)(dialog, { content, msgId, grammar: 'tellask', userLanguageCode }, true);
|
|
991
|
+
await (0, driver_entry_1.driveDialogStream)(dialog, { content, msgId, grammar: 'tellask', userLanguageCode, origin: 'user' }, true);
|
|
911
992
|
return;
|
|
912
993
|
}
|
|
913
994
|
catch (restoreError) {
|
|
@@ -966,6 +1047,7 @@ async function handleEmergencyStop(ws, packet) {
|
|
|
966
1047
|
throw new Error('Internal error: handleEmergencyStop called with non emergency_stop packet');
|
|
967
1048
|
}
|
|
968
1049
|
await (0, dialog_run_state_1.requestEmergencyStopAll)();
|
|
1050
|
+
emitRunControlRefresh('emergency_stop');
|
|
969
1051
|
}
|
|
970
1052
|
async function handleResumeDialog(ws, packet) {
|
|
971
1053
|
if (packet.type !== 'resume_dialog') {
|
|
@@ -984,7 +1066,7 @@ async function handleResumeDialog(ws, packet) {
|
|
|
984
1066
|
return;
|
|
985
1067
|
}
|
|
986
1068
|
const restored = await restoreDialogForDrive(dialogIdObj, 'running');
|
|
987
|
-
await (0, driver_entry_1.driveDialogStream)(restored, undefined, true);
|
|
1069
|
+
await (0, driver_entry_1.driveDialogStream)(restored, undefined, true, { allowResumeFromInterrupted: true });
|
|
988
1070
|
}
|
|
989
1071
|
async function handleResumeAll(ws, packet) {
|
|
990
1072
|
if (packet.type !== 'resume_all') {
|
|
@@ -999,13 +1081,14 @@ async function handleResumeAll(ws, packet) {
|
|
|
999
1081
|
void (async () => {
|
|
1000
1082
|
try {
|
|
1001
1083
|
const dlg = await restoreDialogForDrive(id, 'running');
|
|
1002
|
-
await (0, driver_entry_1.driveDialogStream)(dlg, undefined, true);
|
|
1084
|
+
await (0, driver_entry_1.driveDialogStream)(dlg, undefined, true, { allowResumeFromInterrupted: true });
|
|
1003
1085
|
}
|
|
1004
1086
|
catch (err) {
|
|
1005
1087
|
log.warn('resume_all: failed to resume dialog', err, { dialogId: id.valueOf() });
|
|
1006
1088
|
}
|
|
1007
1089
|
})();
|
|
1008
1090
|
}
|
|
1091
|
+
emitRunControlRefresh('resume_all');
|
|
1009
1092
|
}
|
|
1010
1093
|
/**
|
|
1011
1094
|
* Handle user answer to a Q4H (Questions for Human) question
|
|
@@ -1075,7 +1158,7 @@ async function handleUserAnswer2Q4H(ws, packet) {
|
|
|
1075
1158
|
};
|
|
1076
1159
|
(0, evt_registry_1.postDialogEvent)(dialog, answeredEvent);
|
|
1077
1160
|
// Resume the dialog with the user's answer.
|
|
1078
|
-
await (0, driver_entry_1.driveDialogStream)(dialog, { content, msgId, grammar: 'tellask', userLanguageCode }, true);
|
|
1161
|
+
await (0, driver_entry_1.driveDialogStream)(dialog, { content, msgId, grammar: 'tellask', userLanguageCode, origin: 'user' }, true);
|
|
1079
1162
|
}
|
|
1080
1163
|
catch (error) {
|
|
1081
1164
|
log.error('Error processing Q4H user answer:', error);
|
|
@@ -1119,6 +1202,15 @@ function setupWebSocketServer(httpServer, clients, auth, serverWorkLanguage) {
|
|
|
1119
1202
|
}
|
|
1120
1203
|
}
|
|
1121
1204
|
};
|
|
1205
|
+
// Broadcast global run-control refresh hints so all clients converge from persisted dialog index.
|
|
1206
|
+
broadcastRunControlRefreshMessage = (msg) => {
|
|
1207
|
+
const data = JSON.stringify(msg);
|
|
1208
|
+
for (const ws of clients) {
|
|
1209
|
+
if (ws.readyState === 1) {
|
|
1210
|
+
ws.send(data);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
};
|
|
1122
1214
|
// Broadcast rtws Problems snapshots to all connected clients.
|
|
1123
1215
|
(0, problems_1.setProblemsBroadcaster)((msg) => {
|
|
1124
1216
|
const data = JSON.stringify(msg);
|
package/dist/shared/diligence.js
CHANGED
|
@@ -23,9 +23,12 @@ exports.DILIGENCE_FALLBACK_TEXT = {
|
|
|
23
23
|
'扪心自问时,自诉请正文需要包含对当前状况的完整事实性总结(但不要包含差遣牒已有内容);`!?@self` 发起后不要立即下最终行动决策,先等回贴再综合。综合完成后必须立刻执行已确定行动(工具调用/诉请队友),避免停留在“仅汇报决定”的状态。',
|
|
24
24
|
'',
|
|
25
25
|
'队友如果回复 “将要/可以” 做 XXX 的,你要审视祂所说是否符合整体/分项任务目标,是否值得继续:',
|
|
26
|
-
'',
|
|
27
26
|
'- 如果祂建议的事情可做可不做,那么就可以忽略,不以琐碎小事安排工作。',
|
|
28
27
|
'- 如果值得继续,你可加以纠正或鼓励,并立即诉请其继续,不要留祂停在那里等待指令,这是不可接受的。',
|
|
28
|
+
'',
|
|
29
|
+
'系统会把“尚未收到反馈、仍在执行中的诉请”自动展示为提醒项;请以提醒项作为是否仍在执行中的唯一判断依据。',
|
|
30
|
+
'',
|
|
31
|
+
'凡是不在提醒项里的历史诉请,都不要继续等待(通常代表已回贴或已结束当前轮次)。若该工作线仍需推进,必须立即使用同一个 `!tellaskSession <slug>` 再次诉请对应队友,明确要求继续执行下一步。',
|
|
29
32
|
].join('\n'),
|
|
30
33
|
en: [
|
|
31
34
|
'Do a self-check (run one FBR): does the Taskdoc already contain a sufficiently clear goal definition?',
|
|
@@ -47,8 +50,11 @@ exports.DILIGENCE_FALLBACK_TEXT = {
|
|
|
47
50
|
'When running FBR, the self-tellask body must include a complete factual summary of the current situation (but do not repeat information already present in the Taskdoc). After `!?@self`, do not finalize the next action immediately; wait for feedback first, then synthesize. Once synthesized, immediately execute the chosen action (tool call / teammate tellask), and avoid staying in a “decision report only” state.',
|
|
48
51
|
'',
|
|
49
52
|
'If a teammate replies that they “will/can do X”, examine whether it aligns with the overall/sub-task goals and is worth continuing:',
|
|
50
|
-
'',
|
|
51
53
|
'- If it is optional and low impact, ignore it instead of assigning trivial work.',
|
|
52
54
|
'- If it is worth continuing, correct or encourage as needed and immediately tellask them to continue; leaving them idle and waiting for instructions is unacceptable.',
|
|
55
|
+
'',
|
|
56
|
+
'The system automatically surfaces still-running tellasks (those without feedback yet) as reminder items; treat reminders as the single source of truth for whether a tellask is still in progress.',
|
|
57
|
+
'',
|
|
58
|
+
'For any historical tellask not listed in reminders, do not keep waiting (it usually means the previous round already replied or ended). If that workstream should continue, immediately re-tellask the same teammate with the same `!tellaskSession <slug>` and explicitly ask for the next step.',
|
|
53
59
|
].join('\n'),
|
|
54
60
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { aV as isObjectLike, br as baseGetTag, aE as isArray, aT as Symbol$1, bs as arrayLikeKeys, bt as baseKeys, aD as isArrayLike, bu as memoize, bv as isArguments, bw as MapCache, bm as eq, bx as Uint8Array, aW as getTag, a$ as isBuffer, b2 as Stack, by as isTypedArray, aZ as isObject, bz as isLength, bp as isIndex, aF as identity, bn as baseFor, bA as Set } from "./index-
|
|
1
|
+
import { aV as isObjectLike, br as baseGetTag, aE as isArray, aT as Symbol$1, bs as arrayLikeKeys, bt as baseKeys, aD as isArrayLike, bu as memoize, bv as isArguments, bw as MapCache, bm as eq, bx as Uint8Array, aW as getTag, a$ as isBuffer, b2 as Stack, by as isTypedArray, aZ as isObject, bz as isLength, bp as isIndex, aF as identity, bn as baseFor, bA as Set } from "./index-CQr8MdPI.js";
|
|
2
2
|
var symbolTag$1 = "[object Symbol]";
|
|
3
3
|
function isSymbol(value) {
|
|
4
4
|
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1;
|
|
@@ -658,4 +658,4 @@ export {
|
|
|
658
658
|
hasIn as x,
|
|
659
659
|
toString as y
|
|
660
660
|
};
|
|
661
|
-
//# sourceMappingURL=_baseUniq-
|
|
661
|
+
//# sourceMappingURL=_baseUniq-C04fddeD.js.map
|