dominds 0.7.2 → 0.7.3
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-global-registry.js +58 -3
- package/dist/dialog.js +17 -0
- package/dist/evt-registry.js +16 -7
- package/dist/llm/driver-v2/context.js +2 -1
- package/dist/llm/driver-v2/core.js +1 -118
- package/dist/llm/driver-v2/orchestrator.js +65 -38
- package/dist/llm/driver-v2/round.js +117 -31
- package/dist/llm/driver-v2/runtime-utils.js +1 -0
- package/dist/llm/driver-v2/supdialog-response.js +5 -18
- package/dist/llm/driver-v2/tellask-bridge.js +66 -4
- package/dist/persistence.js +8 -0
- package/dist/server/websocket-handler.js +43 -26
- package/dist/static/assets/{_baseUniq-C04fddeD.js → _baseUniq-zV3pyJ-s.js} +2 -2
- package/dist/static/assets/{_baseUniq-C04fddeD.js.map → _baseUniq-zV3pyJ-s.js.map} +1 -1
- package/dist/static/assets/{arc-qmZerooe.js → arc-Ctgmrh71.js} +2 -2
- package/dist/static/assets/{arc-qmZerooe.js.map → arc-Ctgmrh71.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DPAwJ19g.js → architectureDiagram-VXUJARFQ-CAH1Zinn.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DPAwJ19g.js.map → architectureDiagram-VXUJARFQ-CAH1Zinn.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-M0jbEJ-1.js → blockDiagram-VD42YOAC-Djz6JdD2.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-M0jbEJ-1.js.map → blockDiagram-VD42YOAC-Djz6JdD2.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DlF8gwFw.js → c4Diagram-YG6GDRKO-CSuskOyq.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DlF8gwFw.js.map → c4Diagram-YG6GDRKO-CSuskOyq.js.map} +1 -1
- package/dist/static/assets/{channel-B2Ph7be3.js → channel-Ym6U59Kh.js} +2 -2
- package/dist/static/assets/{channel-B2Ph7be3.js.map → channel-Ym6U59Kh.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-BZ2L6PK1.js → chunk-4BX2VUAB-CqbVylSz.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-BZ2L6PK1.js.map → chunk-4BX2VUAB-CqbVylSz.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-COXFmnJW.js → chunk-55IACEB6-CeWj8Jm_.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-COXFmnJW.js.map → chunk-55IACEB6-CeWj8Jm_.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-B1HiWlBq.js → chunk-B4BG7PRW-BjxJkuhq.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-B1HiWlBq.js.map → chunk-B4BG7PRW-BjxJkuhq.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-BO3wQRnL.js → chunk-DI55MBZ5-9kxfXB4B.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-BO3wQRnL.js.map → chunk-DI55MBZ5-9kxfXB4B.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-BdavRHSy.js → chunk-FMBD7UC4-DyM3IVWB.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-BdavRHSy.js.map → chunk-FMBD7UC4-DyM3IVWB.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-DchoUNF7.js → chunk-QN33PNHL-DGU21aEB.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-DchoUNF7.js.map → chunk-QN33PNHL-DGU21aEB.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-Dr3uVTtK.js → chunk-QZHKN3VN-Cw9Hpt-y.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-Dr3uVTtK.js.map → chunk-QZHKN3VN-Cw9Hpt-y.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-BhOcHZNs.js → chunk-TZMSLE5B-J-eTCnFj.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-BhOcHZNs.js.map → chunk-TZMSLE5B-J-eTCnFj.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-Dep-MR6W.js → classDiagram-2ON5EDUG-BvoDAd8E.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-Dep-MR6W.js.map → classDiagram-2ON5EDUG-BvoDAd8E.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-Dep-MR6W.js → classDiagram-v2-WZHVMYZB-BvoDAd8E.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-Dep-MR6W.js.map → classDiagram-v2-WZHVMYZB-BvoDAd8E.js.map} +1 -1
- package/dist/static/assets/{clone-DzoL-dSX.js → clone-CojsCkky.js} +2 -2
- package/dist/static/assets/{clone-DzoL-dSX.js.map → clone-CojsCkky.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-Bqu_DqDB.js → cose-bilkent-S5V4N54A-BEtK3OcG.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-Bqu_DqDB.js.map → cose-bilkent-S5V4N54A-BEtK3OcG.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-49InNTzs.js → dagre-6UL2VRFP-C5DMaVj0.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-49InNTzs.js.map → dagre-6UL2VRFP-C5DMaVj0.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-C1IsQq8m.js → diagram-PSM6KHXK-kVP0dZ6K.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-C1IsQq8m.js.map → diagram-PSM6KHXK-kVP0dZ6K.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-DyJeSg_Y.js → diagram-QEK2KX5R-C4p2yibe.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-DyJeSg_Y.js.map → diagram-QEK2KX5R-C4p2yibe.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-aeLjjldp.js → diagram-S2PKOQOG-B3vObsYY.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-aeLjjldp.js.map → diagram-S2PKOQOG-B3vObsYY.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-BUcv4AUq.js → erDiagram-Q2GNP2WA-AKQItpVu.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-BUcv4AUq.js.map → erDiagram-Q2GNP2WA-AKQItpVu.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-DfmTKlf_.js → flowDiagram-NV44I4VS-2dalJoL3.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-DfmTKlf_.js.map → flowDiagram-NV44I4VS-2dalJoL3.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-BpJE8Lhp.js → ganttDiagram-JELNMOA3-DUw98Lbz.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-BpJE8Lhp.js.map → ganttDiagram-JELNMOA3-DUw98Lbz.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-DmznjSYb.js → gitGraphDiagram-NY62KEGX-DdwIFk8M.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-DmznjSYb.js.map → gitGraphDiagram-NY62KEGX-DdwIFk8M.js.map} +1 -1
- package/dist/static/assets/{graph-CcKyIZaL.js → graph-BBEAP9Z9.js} +3 -3
- package/dist/static/assets/{graph-CcKyIZaL.js.map → graph-BBEAP9Z9.js.map} +1 -1
- package/dist/static/assets/{index-CQr8MdPI.js → index-CqMOe9zt.js} +149 -101
- package/dist/static/assets/index-CqMOe9zt.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-DwRPjndM.js → infoDiagram-WHAUD3N6-Cep11ST9.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-DwRPjndM.js.map → infoDiagram-WHAUD3N6-Cep11ST9.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-BRAFSgVa.js → journeyDiagram-XKPGCS4Q-Ba8wkBNB.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-BRAFSgVa.js.map → journeyDiagram-XKPGCS4Q-Ba8wkBNB.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-DlJ7-fgN.js → kanban-definition-3W4ZIXB7-DhxNBORX.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-DlJ7-fgN.js.map → kanban-definition-3W4ZIXB7-DhxNBORX.js.map} +1 -1
- package/dist/static/assets/{layout-CcW5-Iee.js → layout-Ckbr6Zyz.js} +5 -5
- package/dist/static/assets/{layout-CcW5-Iee.js.map → layout-Ckbr6Zyz.js.map} +1 -1
- package/dist/static/assets/{linear-sKdPIuOH.js → linear-BrSsI51I.js} +2 -2
- package/dist/static/assets/{linear-sKdPIuOH.js.map → linear-BrSsI51I.js.map} +1 -1
- package/dist/static/assets/{min-CQ0AYqmk.js → min-CeEvLc8D.js} +3 -3
- package/dist/static/assets/{min-CQ0AYqmk.js.map → min-CeEvLc8D.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CTRwSlu8.js → mindmap-definition-VGOIOE7T-7ctLd3o3.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CTRwSlu8.js.map → mindmap-definition-VGOIOE7T-7ctLd3o3.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DmD5KRKE.js → pieDiagram-ADFJNKIX-CqyILziW.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DmD5KRKE.js.map → pieDiagram-ADFJNKIX-CqyILziW.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-C5sqZOBF.js → quadrantDiagram-AYHSOK5B-Byi_xYum.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-C5sqZOBF.js.map → quadrantDiagram-AYHSOK5B-Byi_xYum.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DBAUwM-7.js → requirementDiagram-UZGBJVZJ-Boj5vxiZ.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DBAUwM-7.js.map → requirementDiagram-UZGBJVZJ-Boj5vxiZ.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CkaxkOo7.js → sankeyDiagram-TZEHDZUN-DzoUAdfa.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CkaxkOo7.js.map → sankeyDiagram-TZEHDZUN-DzoUAdfa.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CJ6wMDXh.js → sequenceDiagram-WL72ISMW-BKKxpG1m.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CJ6wMDXh.js.map → sequenceDiagram-WL72ISMW-BKKxpG1m.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-C66ZP2NW.js → stateDiagram-FKZM4ZOC-B-J7uRZT.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-C66ZP2NW.js.map → stateDiagram-FKZM4ZOC-B-J7uRZT.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-DdoOy271.js → stateDiagram-v2-4FDKWEC3-BOzmoUba.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-DdoOy271.js.map → stateDiagram-v2-4FDKWEC3-BOzmoUba.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-2A2Mqedz.js → timeline-definition-IT6M3QCI-zu1Rojx9.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-2A2Mqedz.js.map → timeline-definition-IT6M3QCI-zu1Rojx9.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-CTbGSr5o.js → treemap-KMMF4GRG-C4D91awC.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-CTbGSr5o.js.map → treemap-KMMF4GRG-C4D91awC.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C_S3XXZI.js → xychartDiagram-PRI3JC2R-YvLKaPZ-.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C_S3XXZI.js.map → xychartDiagram-PRI3JC2R-YvLKaPZ-.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/package.json +1 -1
- package/dist/static/assets/index-CQr8MdPI.js.map +0 -1
|
@@ -181,6 +181,7 @@ async function suspendForKeepGoingBudgetExhausted(options) {
|
|
|
181
181
|
bodyContent: question.bodyContent,
|
|
182
182
|
askedAt: question.askedAt,
|
|
183
183
|
callId: question.callId,
|
|
184
|
+
remainingCallIds: question.remainingCallIds,
|
|
184
185
|
callSiteRef: question.callSiteRef,
|
|
185
186
|
rootId: dlg.id.rootId,
|
|
186
187
|
agentId: dlg.agentId,
|
|
@@ -9,9 +9,7 @@ const dialog_instance_registry_1 = require("../../dialog-instance-registry");
|
|
|
9
9
|
const log_1 = require("../../log");
|
|
10
10
|
const persistence_1 = require("../../persistence");
|
|
11
11
|
const runtime_language_1 = require("../../shared/runtime-language");
|
|
12
|
-
const id_1 = require("../../shared/utils/id");
|
|
13
12
|
const inter_dialog_format_1 = require("../../shared/utils/inter-dialog-format");
|
|
14
|
-
const time_1 = require("../../shared/utils/time");
|
|
15
13
|
const pending_tellask_reminder_1 = require("../../tools/pending-tellask-reminder");
|
|
16
14
|
const subdialog_txn_1 = require("./subdialog-txn");
|
|
17
15
|
async function syncPendingTellaskReminderBestEffort(dlg, where) {
|
|
@@ -98,20 +96,6 @@ async function supplyResponseToSupdialogV2(args) {
|
|
|
98
96
|
if (tellaskHead.trim() === '') {
|
|
99
97
|
tellaskHead = responseText.slice(0, 100) + (responseText.length > 100 ? '...' : '');
|
|
100
98
|
}
|
|
101
|
-
const completedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
102
|
-
const responseId = (0, id_1.generateShortId)();
|
|
103
|
-
await persistence_1.DialogPersistence.appendSubdialogResponse(parentDialog.id, {
|
|
104
|
-
responseId,
|
|
105
|
-
subdialogId: subdialogId.selfId,
|
|
106
|
-
response: responseText,
|
|
107
|
-
completedAt,
|
|
108
|
-
status,
|
|
109
|
-
callType,
|
|
110
|
-
tellaskHead,
|
|
111
|
-
responderId,
|
|
112
|
-
originMemberId,
|
|
113
|
-
callId: callId ?? '',
|
|
114
|
-
});
|
|
115
99
|
await persistence_1.DialogPersistence.savePendingSubdialogs(parentDialog.id, filteredPending);
|
|
116
100
|
const hasQ4H = await parentDialog.hasPendingQ4H();
|
|
117
101
|
const shouldRevive = !hasQ4H && filteredPending.length === 0;
|
|
@@ -134,7 +118,7 @@ async function supplyResponseToSupdialogV2(args) {
|
|
|
134
118
|
originMemberId: result.originMemberId ?? parentDialog.agentId,
|
|
135
119
|
});
|
|
136
120
|
// Keep in-memory dialog context in sync with live teammate-response events immediately.
|
|
137
|
-
//
|
|
121
|
+
// v2 context assembly now relies on dialog msgs + persisted teammate_response_record only.
|
|
138
122
|
const immediateMirror = {
|
|
139
123
|
type: 'tellask_result_msg',
|
|
140
124
|
role: 'tool',
|
|
@@ -153,7 +137,10 @@ async function supplyResponseToSupdialogV2(args) {
|
|
|
153
137
|
if (result.shouldRevive) {
|
|
154
138
|
log_1.log.info(`All Type ${callType} subdialogs complete, parent ${parentDialog.id.selfId} auto-reviving`);
|
|
155
139
|
if (parentDialog instanceof dialog_1.RootDialog) {
|
|
156
|
-
dialog_global_registry_1.globalDialogRegistry.markNeedsDrive(parentDialog.id.rootId
|
|
140
|
+
dialog_global_registry_1.globalDialogRegistry.markNeedsDrive(parentDialog.id.rootId, {
|
|
141
|
+
source: 'driver_v2_supply_response',
|
|
142
|
+
reason: `all_pending_subdialogs_resolved:type_${callType}`,
|
|
143
|
+
});
|
|
157
144
|
}
|
|
158
145
|
scheduleDrive(parentDialog, {
|
|
159
146
|
waitInQue: true,
|
|
@@ -46,7 +46,6 @@ const inter_dialog_format_1 = require("../../shared/utils/inter-dialog-format");
|
|
|
46
46
|
const time_1 = require("../../shared/utils/time");
|
|
47
47
|
const team_1 = require("../../team");
|
|
48
48
|
const pending_tellask_reminder_1 = require("../../tools/pending-tellask-reminder");
|
|
49
|
-
const id_2 = require("../../utils/id");
|
|
50
49
|
const subdialog_txn_1 = require("./subdialog-txn");
|
|
51
50
|
function showErrorToAi(err) {
|
|
52
51
|
try {
|
|
@@ -419,13 +418,21 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
419
418
|
const isQ4H = firstMention === 'human';
|
|
420
419
|
if (isQ4H) {
|
|
421
420
|
try {
|
|
422
|
-
const
|
|
421
|
+
const normalizedCallId = callId.trim();
|
|
422
|
+
if (normalizedCallId === '') {
|
|
423
|
+
throw new Error(`Q4H call invariant violation: empty callId (rootId=${dlg.id.rootId} selfId=${dlg.id.selfId})`);
|
|
424
|
+
}
|
|
425
|
+
const questionId = `q4h-${dlg.id.rootId}-${dlg.id.selfId}-c${dlg.currentCourse}-${normalizedCallId}`;
|
|
426
|
+
const normalizedRemainingCallIds = Array.from(new Set((options?.q4hRemainingCallIds ?? [])
|
|
427
|
+
.map((value) => value.trim())
|
|
428
|
+
.filter((value) => value !== '' && value !== normalizedCallId)));
|
|
423
429
|
const question = {
|
|
424
430
|
id: questionId,
|
|
425
431
|
tellaskHead: tellaskHead.trim(),
|
|
426
432
|
bodyContent: body.trim(),
|
|
427
433
|
askedAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
428
|
-
callId:
|
|
434
|
+
callId: normalizedCallId,
|
|
435
|
+
remainingCallIds: normalizedRemainingCallIds.length > 0 ? normalizedRemainingCallIds : undefined,
|
|
429
436
|
callSiteRef: {
|
|
430
437
|
course: dlg.currentCourse,
|
|
431
438
|
messageIndex: dlg.msgs.length,
|
|
@@ -441,6 +448,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
441
448
|
bodyContent: question.bodyContent,
|
|
442
449
|
askedAt: question.askedAt,
|
|
443
450
|
callId: question.callId,
|
|
451
|
+
remainingCallIds: question.remainingCallIds,
|
|
444
452
|
callSiteRef: question.callSiteRef,
|
|
445
453
|
rootId: dlg.id.rootId,
|
|
446
454
|
agentId: dlg.agentId,
|
|
@@ -1076,7 +1084,61 @@ async function executeTellaskCalls(args) {
|
|
|
1076
1084
|
const callbacks = ensureCallbacks(args.callbacks);
|
|
1077
1085
|
const malformedToolOutputs = await emitMalformedTellaskResponses(dlg, collectedCalls);
|
|
1078
1086
|
const validCalls = collectedCalls.filter((call) => call.validation.kind === 'valid');
|
|
1079
|
-
const
|
|
1087
|
+
const q4hCalls = validCalls.filter((call) => call.validation.firstMention === 'human');
|
|
1088
|
+
const nonQ4HCalls = validCalls
|
|
1089
|
+
.filter((call) => call.validation.firstMention !== 'human')
|
|
1090
|
+
.map((call) => ({ ...call }));
|
|
1091
|
+
let mergedQ4HCall = null;
|
|
1092
|
+
if (q4hCalls.length === 1) {
|
|
1093
|
+
mergedQ4HCall = { ...q4hCalls[0] };
|
|
1094
|
+
}
|
|
1095
|
+
else if (q4hCalls.length > 1) {
|
|
1096
|
+
const primary = q4hCalls[0];
|
|
1097
|
+
const remainingCallIds = q4hCalls
|
|
1098
|
+
.slice(1)
|
|
1099
|
+
.map((call) => call.callId.trim())
|
|
1100
|
+
.filter((callId) => callId !== '');
|
|
1101
|
+
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
1102
|
+
const intro = language === 'zh'
|
|
1103
|
+
? `我这次有 ${q4hCalls.length} 个问题,想请你一次性回复:`
|
|
1104
|
+
: `I have ${q4hCalls.length} questions this round. Please answer them in one response:`;
|
|
1105
|
+
const mergedBody = [
|
|
1106
|
+
intro,
|
|
1107
|
+
...q4hCalls.map((call, index) => {
|
|
1108
|
+
const body = call.body.trim();
|
|
1109
|
+
const normalizedBody = body !== ''
|
|
1110
|
+
? body
|
|
1111
|
+
: language === 'zh'
|
|
1112
|
+
? '请结合当前上下文补充这一项。'
|
|
1113
|
+
: 'Please provide this item based on the current context.';
|
|
1114
|
+
return language === 'zh'
|
|
1115
|
+
? `问题 ${index + 1}:\n${normalizedBody}`
|
|
1116
|
+
: `Question ${index + 1}:\n${normalizedBody}`;
|
|
1117
|
+
}),
|
|
1118
|
+
].join('\n\n');
|
|
1119
|
+
mergedQ4HCall = {
|
|
1120
|
+
...primary,
|
|
1121
|
+
body: mergedBody,
|
|
1122
|
+
q4hRemainingCallIds: remainingCallIds.length > 0 ? remainingCallIds : undefined,
|
|
1123
|
+
};
|
|
1124
|
+
log_1.log.info('Q4H multi-question normalized into a single prompt', {
|
|
1125
|
+
rootId: dlg.id.rootId,
|
|
1126
|
+
selfId: dlg.id.selfId,
|
|
1127
|
+
mergedCount: q4hCalls.length,
|
|
1128
|
+
primaryCallId: primary.callId,
|
|
1129
|
+
remainingCallIds,
|
|
1130
|
+
});
|
|
1131
|
+
}
|
|
1132
|
+
const executionCalls = mergedQ4HCall
|
|
1133
|
+
? [...nonQ4HCalls, mergedQ4HCall]
|
|
1134
|
+
: nonQ4HCalls;
|
|
1135
|
+
const results = [];
|
|
1136
|
+
for (const call of executionCalls) {
|
|
1137
|
+
const result = await executeTellaskCall(dlg, agent, call.validation.firstMention, call.tellaskHead, call.body, call.callId, callbacks, {
|
|
1138
|
+
q4hRemainingCallIds: call.q4hRemainingCallIds,
|
|
1139
|
+
});
|
|
1140
|
+
results.push(result);
|
|
1141
|
+
}
|
|
1080
1142
|
const suspend = results.some((result) => result.suspend);
|
|
1081
1143
|
const toolOutputs = [...malformedToolOutputs, ...results.flatMap((result) => result.toolOutputs)];
|
|
1082
1144
|
const subdialogsCreated = results.flatMap((result) => result.subdialogsCreated);
|
package/dist/persistence.js
CHANGED
|
@@ -2451,6 +2451,14 @@ class DialogPersistence {
|
|
|
2451
2451
|
throw new Error(`Q4H duplicate call id violation: dialog=${dialogId.valueOf()} status=${status} callId=${normalizedCallId} existingQuestionId=${byCallId.id} incomingQuestionId=${questionId} existingAskedAt=${byCallId.askedAt} incomingAskedAt=${question.askedAt}`);
|
|
2452
2452
|
}
|
|
2453
2453
|
}
|
|
2454
|
+
if (previousQuestions.length > 0) {
|
|
2455
|
+
const existingIds = previousQuestions.map((q) => q.id).join(',');
|
|
2456
|
+
const existingCallIds = previousQuestions
|
|
2457
|
+
.map((q) => (typeof q.callId === 'string' ? q.callId.trim() : ''))
|
|
2458
|
+
.filter((value) => value !== '')
|
|
2459
|
+
.join(',');
|
|
2460
|
+
throw new Error(`Q4H multi-pending violation: dialog=${dialogId.valueOf()} status=${status} existingCount=${previousQuestions.length} existingQuestionIds=${existingIds} existingCallIds=${existingCallIds} incomingQuestionId=${questionId} incomingCallId=${normalizedCallId ?? ''}`);
|
|
2461
|
+
}
|
|
2454
2462
|
return { kind: 'append', question };
|
|
2455
2463
|
}, status);
|
|
2456
2464
|
}
|
|
@@ -390,9 +390,11 @@ async function maybeTriggerImmediateDiligencePrompt(rootDialog) {
|
|
|
390
390
|
if (!suspension.canDrive) {
|
|
391
391
|
return;
|
|
392
392
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
393
|
+
if ((0, driver_entry_1.getActiveDriverEngine)() === 'v1') {
|
|
394
|
+
const queuedResponses = await persistence_1.DialogPersistence.loadSubdialogResponsesQueue(rootDialog.id);
|
|
395
|
+
if (queuedResponses.length > 0) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
396
398
|
}
|
|
397
399
|
const team = await team_1.Team.load();
|
|
398
400
|
const prepared = await (0, runtime_utils_1.maybePrepareDiligenceAutoContinuePrompt)({
|
|
@@ -755,31 +757,29 @@ async function handleDisplayDialog(ws, packet) {
|
|
|
755
757
|
catch (err) {
|
|
756
758
|
log.warn(`Failed to send dlg_run_state_evt for ${dialogIdObj.valueOf()}:`, err);
|
|
757
759
|
}
|
|
758
|
-
// Emit Q4H
|
|
759
|
-
//
|
|
760
|
+
// Emit one Q4H snapshot to ensure frontend has current global questions state.
|
|
761
|
+
// Do NOT replay per-question `new_q4h_asked` events here: those are real-time
|
|
762
|
+
// incremental events and replaying them on display refresh can create duplicate
|
|
763
|
+
// delivery paths and blur event semantics.
|
|
760
764
|
try {
|
|
761
765
|
const allQuestions = await persistence_1.DialogPersistence.loadAllQ4HState();
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
},
|
|
780
|
-
};
|
|
781
|
-
ws.send(JSON.stringify(newQ4HEvent));
|
|
782
|
-
}
|
|
766
|
+
const response = {
|
|
767
|
+
type: 'q4h_state_response',
|
|
768
|
+
questions: allQuestions.map((q) => ({
|
|
769
|
+
id: q.id,
|
|
770
|
+
selfId: q.selfId,
|
|
771
|
+
rootId: q.rootId,
|
|
772
|
+
agentId: q.agentId,
|
|
773
|
+
taskDocPath: q.taskDocPath,
|
|
774
|
+
tellaskHead: q.tellaskHead,
|
|
775
|
+
bodyContent: q.bodyContent,
|
|
776
|
+
askedAt: q.askedAt,
|
|
777
|
+
callId: q.callId,
|
|
778
|
+
remainingCallIds: q.remainingCallIds,
|
|
779
|
+
callSiteRef: q.callSiteRef,
|
|
780
|
+
})),
|
|
781
|
+
};
|
|
782
|
+
ws.send(JSON.stringify(response));
|
|
783
783
|
}
|
|
784
784
|
catch (err) {
|
|
785
785
|
log.warn(`Failed to emit Q4H state for ${dialogIdObj}:`, err);
|
|
@@ -818,6 +818,7 @@ async function handleGetQ4HState(ws, _packet) {
|
|
|
818
818
|
bodyContent: q.bodyContent,
|
|
819
819
|
askedAt: q.askedAt,
|
|
820
820
|
callId: q.callId,
|
|
821
|
+
remainingCallIds: q.remainingCallIds,
|
|
821
822
|
callSiteRef: q.callSiteRef,
|
|
822
823
|
}));
|
|
823
824
|
// Send single response packet with all questions (not PubChan events)
|
|
@@ -1157,6 +1158,22 @@ async function handleUserAnswer2Q4H(ws, packet) {
|
|
|
1157
1158
|
selfId: dialogId,
|
|
1158
1159
|
};
|
|
1159
1160
|
(0, evt_registry_1.postDialogEvent)(dialog, answeredEvent);
|
|
1161
|
+
const hasPendingSubdialogs = await dialog.hasPendingSubdialogs();
|
|
1162
|
+
if (hasPendingSubdialogs) {
|
|
1163
|
+
dialog.queueUpNextPrompt({
|
|
1164
|
+
prompt: content,
|
|
1165
|
+
msgId,
|
|
1166
|
+
grammar: 'tellask',
|
|
1167
|
+
userLanguageCode,
|
|
1168
|
+
});
|
|
1169
|
+
log.info('Deferred Q4H answer until pending subdialogs resolve', {
|
|
1170
|
+
rootId: dialog.id.rootId,
|
|
1171
|
+
selfId: dialog.id.selfId,
|
|
1172
|
+
questionId,
|
|
1173
|
+
msgId,
|
|
1174
|
+
});
|
|
1175
|
+
return;
|
|
1176
|
+
}
|
|
1160
1177
|
// Resume the dialog with the user's answer.
|
|
1161
1178
|
await (0, driver_entry_1.driveDialogStream)(dialog, { content, msgId, grammar: 'tellask', userLanguageCode, origin: 'user' }, true);
|
|
1162
1179
|
}
|
|
@@ -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-CqMOe9zt.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-zV3pyJ-s.js.map
|