dominds 0.7.6 → 0.8.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/README.md +2 -2
- package/README.zh.md +2 -2
- package/dist/agent-priming.js +169 -200
- package/dist/cli/read.js +2 -7
- package/dist/dialog-factory.js +6 -4
- package/dist/dialog-instance-registry.js +2 -2
- package/dist/dialog.js +99 -91
- package/dist/docs/dialog-persistence.md +2 -2
- package/dist/docs/dialog-persistence.zh.md +2 -2
- package/dist/docs/dialog-system.md +86 -90
- package/dist/docs/dialog-system.zh.md +82 -83
- package/dist/docs/diligence-push.md +2 -2
- package/dist/docs/diligence-push.zh.md +2 -2
- package/dist/docs/dominds-agent-priming.md +11 -11
- package/dist/docs/dominds-agent-priming.zh.md +9 -9
- package/dist/docs/dominds-terminology.md +34 -34
- package/dist/docs/fbr-implementation.md +4 -4
- package/dist/docs/fbr-implementation.zh.md +4 -4
- package/dist/docs/fbr.md +31 -53
- package/dist/docs/fbr.zh.md +30 -48
- package/dist/docs/mottos.md +2 -3
- package/dist/docs/mottos.zh.md +2 -2
- package/dist/docs/q4h.md +6 -6
- package/dist/docs/q4h.zh.md +6 -6
- package/dist/docs/tellask-collab.md +13 -13
- package/dist/docs/tellask-collab.zh.md +18 -18
- package/dist/llm/driver-entry.js +9 -33
- package/dist/llm/driver-v2/core.js +413 -111
- package/dist/llm/driver-v2/index.js +5 -0
- package/dist/llm/driver-v2/orchestrator.js +4 -3
- package/dist/llm/driver-v2/policy.js +17 -23
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2/round.js +18 -7
- package/dist/llm/driver-v2/runtime-utils.js +3 -5
- package/dist/llm/driver-v2/saying-events.js +4 -42
- package/dist/llm/driver-v2/supdialog-response.js +110 -23
- package/dist/llm/driver-v2/tellask-bridge.js +560 -458
- package/dist/mcp/sdk-client.js +1 -1
- package/dist/mcp/server-runtime.js +1 -1
- package/dist/mcp/stdio-client.js +6 -6
- package/dist/mcp/tool-names.js +1 -1
- package/dist/minds/builtin/fuxi/persona.en.md +10 -10
- package/dist/minds/builtin/fuxi/persona.zh.md +12 -12
- package/dist/minds/builtin/pangu/persona.en.md +7 -7
- package/dist/minds/builtin/pangu/persona.zh.md +6 -6
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +15 -12
- package/dist/minds/system-prompt.js +58 -56
- package/dist/persistence.js +675 -527
- package/dist/server/api-routes.js +1 -1
- package/dist/server/websocket-handler.js +10 -20
- package/dist/server.js +3 -3
- package/dist/shared/diligence.js +12 -12
- package/dist/shared/i18n/driver-messages.js +28 -118
- package/dist/shared/utils/inter-dialog-format.js +53 -53
- package/dist/snippets/starting.en.md +1 -1
- package/dist/snippets/starting.zh.md +1 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js → _baseUniq-D4N_zVXV.js} +2 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js.map → _baseUniq-D4N_zVXV.js.map} +1 -1
- package/dist/static/assets/{arc-Boi4s2EY.js → arc-7bP9qomB.js} +2 -2
- package/dist/static/assets/{arc-Boi4s2EY.js.map → arc-7bP9qomB.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js → architectureDiagram-VXUJARFQ-DToIiZuZ.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js.map → architectureDiagram-VXUJARFQ-DToIiZuZ.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js → blockDiagram-VD42YOAC-C-pRNHpf.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js.map → blockDiagram-VD42YOAC-C-pRNHpf.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js → c4Diagram-YG6GDRKO-Bnp-nWKO.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js.map → c4Diagram-YG6GDRKO-Bnp-nWKO.js.map} +1 -1
- package/dist/static/assets/{channel-DBG_xYT_.js → channel-CTv1SsAF.js} +2 -2
- package/dist/static/assets/{channel-DBG_xYT_.js.map → channel-CTv1SsAF.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js → chunk-4BX2VUAB-D_OGa3ss.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js.map → chunk-4BX2VUAB-D_OGa3ss.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js → chunk-55IACEB6-I4o4MCuM.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js.map → chunk-55IACEB6-I4o4MCuM.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js → chunk-B4BG7PRW-Bp-TIXg6.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js.map → chunk-B4BG7PRW-Bp-TIXg6.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js → chunk-DI55MBZ5-Bnph5Hmd.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js.map → chunk-DI55MBZ5-Bnph5Hmd.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js → chunk-FMBD7UC4-q3UyRsNI.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js.map → chunk-FMBD7UC4-q3UyRsNI.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js → chunk-QN33PNHL-BxUlvLXP.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js.map → chunk-QN33PNHL-BxUlvLXP.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js → chunk-QZHKN3VN-DpQR9BVw.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js.map → chunk-QZHKN3VN-DpQR9BVw.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js → chunk-TZMSLE5B-BX8vrVo0.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js.map → chunk-TZMSLE5B-BX8vrVo0.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js → classDiagram-2ON5EDUG-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js.map → classDiagram-2ON5EDUG-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js.map → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{clone-rjxmrDHc.js → clone-Cl5zSMrO.js} +2 -2
- package/dist/static/assets/{clone-rjxmrDHc.js.map → clone-Cl5zSMrO.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js → cose-bilkent-S5V4N54A-B-FUX86B.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js.map → cose-bilkent-S5V4N54A-B-FUX86B.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js → dagre-6UL2VRFP-Bj8vSSpT.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js.map → dagre-6UL2VRFP-Bj8vSSpT.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js → diagram-PSM6KHXK-BPcgy7jf.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js.map → diagram-PSM6KHXK-BPcgy7jf.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js → diagram-QEK2KX5R-DHxd6LWi.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js.map → diagram-QEK2KX5R-DHxd6LWi.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js → diagram-S2PKOQOG-C4ynhhLr.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js.map → diagram-S2PKOQOG-C4ynhhLr.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js → erDiagram-Q2GNP2WA-CQ25uxxf.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js.map → erDiagram-Q2GNP2WA-CQ25uxxf.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js → flowDiagram-NV44I4VS-ChkkAldk.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js.map → flowDiagram-NV44I4VS-ChkkAldk.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js → ganttDiagram-JELNMOA3-CBt_Zorl.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js.map → ganttDiagram-JELNMOA3-CBt_Zorl.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js → gitGraphDiagram-NY62KEGX-CtBc2dOO.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js.map → gitGraphDiagram-NY62KEGX-CtBc2dOO.js.map} +1 -1
- package/dist/static/assets/{graph-DDHIhCSW.js → graph-BGzNnzuI.js} +3 -3
- package/dist/static/assets/{graph-DDHIhCSW.js.map → graph-BGzNnzuI.js.map} +1 -1
- package/dist/static/assets/{index-CUZD-Ua6.js → index-Vrp1PT3b.js} +654 -355
- package/dist/static/assets/index-Vrp1PT3b.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js → infoDiagram-WHAUD3N6-BYJF-Ol5.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js.map → infoDiagram-WHAUD3N6-BYJF-Ol5.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js.map → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js → kanban-definition-3W4ZIXB7-DBH-HEwY.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js.map → kanban-definition-3W4ZIXB7-DBH-HEwY.js.map} +1 -1
- package/dist/static/assets/{layout-C7mFT1m6.js → layout-DdWO-uEo.js} +5 -5
- package/dist/static/assets/{layout-C7mFT1m6.js.map → layout-DdWO-uEo.js.map} +1 -1
- package/dist/static/assets/{linear-WSX0brRY.js → linear-BY3MovaF.js} +2 -2
- package/dist/static/assets/{linear-WSX0brRY.js.map → linear-BY3MovaF.js.map} +1 -1
- package/dist/static/assets/{min-DOTQTP4p.js → min-aHCJK1uN.js} +3 -3
- package/dist/static/assets/{min-DOTQTP4p.js.map → min-aHCJK1uN.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js → mindmap-definition-VGOIOE7T-BjJnBRtB.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js.map → mindmap-definition-VGOIOE7T-BjJnBRtB.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js → pieDiagram-ADFJNKIX-xAcmdymv.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js.map → pieDiagram-ADFJNKIX-xAcmdymv.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js → quadrantDiagram-AYHSOK5B-BPbEGCEj.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js.map → quadrantDiagram-AYHSOK5B-BPbEGCEj.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js → requirementDiagram-UZGBJVZJ--w6UfXy0.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js.map → requirementDiagram-UZGBJVZJ--w6UfXy0.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js → sankeyDiagram-TZEHDZUN-B_T6TQwh.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js.map → sankeyDiagram-TZEHDZUN-B_T6TQwh.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js → sequenceDiagram-WL72ISMW-DX_oVvqA.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js.map → sequenceDiagram-WL72ISMW-DX_oVvqA.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js → stateDiagram-FKZM4ZOC-BAybZU8l.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js.map → stateDiagram-FKZM4ZOC-BAybZU8l.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js.map → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js → timeline-definition-IT6M3QCI-DOYN-4XM.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js.map → timeline-definition-IT6M3QCI-DOYN-4XM.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js → treemap-KMMF4GRG-CQXygT0T.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js.map → treemap-KMMF4GRG-CQXygT0T.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js → xychartDiagram-PRI3JC2R-ByFAvTeN.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js.map → xychartDiagram-PRI3JC2R-ByFAvTeN.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/builtins.js +0 -8
- package/dist/tools/env.js +1 -1
- package/dist/tools/mcp.js +31 -9
- package/dist/tools/pending-tellask-reminder.js +14 -17
- package/dist/tools/team-mgmt.js +1 -1
- package/package.json +1 -1
- package/dist/static/assets/index-CUZD-Ua6.js.map +0 -1
package/dist/agent-priming.js
CHANGED
|
@@ -78,7 +78,7 @@ function throwIfAgentPrimingStopped(dlg, abortSignal) {
|
|
|
78
78
|
throw new AgentPrimingInterruptedError('user_stop');
|
|
79
79
|
}
|
|
80
80
|
async function emitSayingEventsAndPersist(dlg, content) {
|
|
81
|
-
|
|
81
|
+
await (0, driver_entry_1.emitSayingEvents)(dlg, content);
|
|
82
82
|
const genseq = dlg.activeGenSeqOrUndefined;
|
|
83
83
|
if (dlg.generationStarted &&
|
|
84
84
|
typeof genseq === 'number' &&
|
|
@@ -95,7 +95,47 @@ async function emitSayingEventsAndPersist(dlg, content) {
|
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
|
|
98
|
+
}
|
|
99
|
+
async function emitSyntheticTellaskCall(dlg, payload) {
|
|
100
|
+
const callId = payload.callId?.trim() ? payload.callId.trim() : `priming-${(0, id_1.generateShortId)()}`;
|
|
101
|
+
switch (payload.callName) {
|
|
102
|
+
case 'tellask':
|
|
103
|
+
case 'tellaskSessionless': {
|
|
104
|
+
const mentionList = (payload.mentionList ?? [])
|
|
105
|
+
.map((value) => value.trim())
|
|
106
|
+
.filter((value) => value !== '');
|
|
107
|
+
if (mentionList.length < 1) {
|
|
108
|
+
throw new Error('emitSyntheticTellaskCall requires mentionList for teammate tellasks');
|
|
109
|
+
}
|
|
110
|
+
await dlg.callingStart({
|
|
111
|
+
callName: payload.callName,
|
|
112
|
+
callId,
|
|
113
|
+
mentionList,
|
|
114
|
+
tellaskContent: payload.tellaskContent,
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
callId,
|
|
118
|
+
callName: payload.callName,
|
|
119
|
+
mentionList,
|
|
120
|
+
tellaskContent: payload.tellaskContent,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
case 'freshBootsReasoning': {
|
|
124
|
+
if (payload.mentionList !== undefined && payload.mentionList.length > 0) {
|
|
125
|
+
throw new Error('emitSyntheticTellaskCall: freshBootsReasoning must not carry mentionList');
|
|
126
|
+
}
|
|
127
|
+
await dlg.callingStart({
|
|
128
|
+
callName: payload.callName,
|
|
129
|
+
callId,
|
|
130
|
+
tellaskContent: payload.tellaskContent,
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
callId,
|
|
134
|
+
callName: payload.callName,
|
|
135
|
+
tellaskContent: payload.tellaskContent,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
99
139
|
}
|
|
100
140
|
async function emitUiOnlyMarkdownEventsAndPersist(dlg, content) {
|
|
101
141
|
const trimmed = content.trim();
|
|
@@ -182,7 +222,7 @@ function scheduleAgentPrimingForNewDialog(dlg, options) {
|
|
|
182
222
|
})
|
|
183
223
|
.catch((err) => {
|
|
184
224
|
if (isAgentPrimingInterruptedError(err)) {
|
|
185
|
-
log_1.log.
|
|
225
|
+
log_1.log.debug('Agent Priming interrupted; will retry on next dialog', undefined, {
|
|
186
226
|
agentId,
|
|
187
227
|
reason: err.reason,
|
|
188
228
|
});
|
|
@@ -206,7 +246,7 @@ function scheduleAgentPrimingForNewDialog(dlg, options) {
|
|
|
206
246
|
.catch((err) => {
|
|
207
247
|
// Best-effort: avoid unhandled rejections; the dialog itself is already marked interrupted.
|
|
208
248
|
if (isAgentPrimingInterruptedError(err)) {
|
|
209
|
-
log_1.log.
|
|
249
|
+
log_1.log.debug('Agent Priming interrupted; will retry on next dialog', undefined, {
|
|
210
250
|
agentId,
|
|
211
251
|
reason: err.reason,
|
|
212
252
|
});
|
|
@@ -222,10 +262,6 @@ function scheduleAgentPrimingForNewDialog(dlg, options) {
|
|
|
222
262
|
inflightByAgentId.set(agentId, task);
|
|
223
263
|
return task.then(() => undefined);
|
|
224
264
|
}
|
|
225
|
-
function prefixTellaskBodyLines(text) {
|
|
226
|
-
const lines = text.replace(/\r\n/g, '\n').split('\n');
|
|
227
|
-
return lines.map((line) => `!? ${line}`).join('\n');
|
|
228
|
-
}
|
|
229
265
|
function takeFirstNonEmptyLine(text) {
|
|
230
266
|
const lines = text.replace(/\r\n/g, '\n').split('\n');
|
|
231
267
|
for (const line of lines) {
|
|
@@ -641,7 +677,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
641
677
|
: shellPolicy === 'self_is_specialist'
|
|
642
678
|
? [
|
|
643
679
|
'本次对话主理人属于 `shell_specialists`,将略去 shell 诉请环节。',
|
|
644
|
-
'由 Dominds 运行时获取标准环境事实(`uname -a` + rtws git 现状),随后进入
|
|
680
|
+
'由 Dominds 运行时获取标准环境事实(`uname -a` + rtws git 现状),随后进入 `freshBootsReasoning` FBR。',
|
|
645
681
|
]
|
|
646
682
|
: [
|
|
647
683
|
'本团队未配置 shell 专员。',
|
|
@@ -656,7 +692,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
656
692
|
: shellPolicy === 'self_is_specialist'
|
|
657
693
|
? [
|
|
658
694
|
'The dialog owner is a member of `shell_specialists`, so we skip the shell Tellask step.',
|
|
659
|
-
'Dominds runtime collects standard environment facts (`uname -a` + rtws git state), then we enter
|
|
695
|
+
'Dominds runtime collects standard environment facts (`uname -a` + rtws git state), then we enter `freshBootsReasoning` FBR.',
|
|
660
696
|
]
|
|
661
697
|
: [
|
|
662
698
|
'This team has no configured shell specialist.',
|
|
@@ -669,7 +705,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
669
705
|
'## Prelude:智能体启动(复用缓存)',
|
|
670
706
|
'',
|
|
671
707
|
'这段序幕用于把“诉请 + 回传 + FBR + 综合提炼”变成体感(引导祂做给自己看)。',
|
|
672
|
-
'
|
|
708
|
+
'关键时序:`freshBootsReasoning` 只表示发起;必须等待 FBR 支线回贴返回后,才在主线做综合决策。',
|
|
673
709
|
'本次对话复用了本进程内缓存:未重复执行命令。',
|
|
674
710
|
'',
|
|
675
711
|
...shellPolicyLinesZh,
|
|
@@ -679,7 +715,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
679
715
|
'## Prelude:智能体启动',
|
|
680
716
|
'',
|
|
681
717
|
'这段序幕用于把“诉请 + 回传 + FBR + 综合提炼”变成体感(引导祂做给自己看)。',
|
|
682
|
-
'
|
|
718
|
+
'关键时序:`freshBootsReasoning` 只表示发起;必须等待 FBR 支线回贴返回后,才在主线做综合决策。',
|
|
683
719
|
'',
|
|
684
720
|
...shellPolicyLinesZh,
|
|
685
721
|
'',
|
|
@@ -690,7 +726,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
690
726
|
'## Prelude: Agent Priming (Reused)',
|
|
691
727
|
'',
|
|
692
728
|
'This prelude makes Tellask + return + FBR + distillation feel real (guiding the agent to show it to itself).',
|
|
693
|
-
'Critical timing:
|
|
729
|
+
'Critical timing: `freshBootsReasoning` is initiation only; mainline distillation/decision happens only after FBR sideline feedback returns.',
|
|
694
730
|
'This dialog reused the in-process cache (no commands were re-run).',
|
|
695
731
|
'',
|
|
696
732
|
...shellPolicyLinesEn,
|
|
@@ -700,7 +736,7 @@ function formatPreludeIntro(language, reused, shellPolicy, shellSpecialistId) {
|
|
|
700
736
|
'## Prelude: Agent Priming',
|
|
701
737
|
'',
|
|
702
738
|
'This prelude makes Tellask + return + FBR + distillation feel real (guiding the agent to show it to itself).',
|
|
703
|
-
'Critical timing:
|
|
739
|
+
'Critical timing: `freshBootsReasoning` is initiation only; mainline distillation/decision happens only after FBR sideline feedback returns.',
|
|
704
740
|
'',
|
|
705
741
|
...shellPolicyLinesEn,
|
|
706
742
|
'',
|
|
@@ -714,7 +750,7 @@ function formatShellTellaskBody(language, shellSpecialistId) {
|
|
|
714
750
|
'',
|
|
715
751
|
'背景规则:对话主理人不得执行任何 shell 命令;所有 shell 命令必须通过你执行并回传。',
|
|
716
752
|
'请不要建议我“自己在本地跑一下”。',
|
|
717
|
-
'收到回传后,我会基于该环境信息发起一次
|
|
753
|
+
'收到回传后,我会基于该环境信息发起一次 `freshBootsReasoning` 扪心自问(FBR),先等待该次 FBR 的全部支线回贴,再在主线做综合提炼并形成一条可复用的“智能体启动(Agent Priming)”笔记。',
|
|
718
754
|
'',
|
|
719
755
|
'要求:',
|
|
720
756
|
'- 通过 shell 工具执行:uname -a(只执行这一条)',
|
|
@@ -729,7 +765,7 @@ function formatShellTellaskBody(language, shellSpecialistId) {
|
|
|
729
765
|
'',
|
|
730
766
|
'Rule: the dialog owner must not run any shell commands; all shell commands must be executed by you and returned.',
|
|
731
767
|
'Do not suggest that I “just run it locally”.',
|
|
732
|
-
'After I receive your output, I will initiate
|
|
768
|
+
'After I receive your output, I will initiate `freshBootsReasoning` Fresh Boots Reasoning (FBR) on this environment, wait for all feedback from that FBR run, then distill a reusable “Agent Priming” note in mainline.',
|
|
733
769
|
'',
|
|
734
770
|
'Requirements:',
|
|
735
771
|
'- Use shell tools to run exactly: uname -a (and only this command)',
|
|
@@ -835,23 +871,13 @@ function formatFbrTellaskBody(language, snapshotText, options) {
|
|
|
835
871
|
const effortLineEn = options.fbrEffort >= 1
|
|
836
872
|
? 'Conversation setup: you are one awakened “fresh-boots self.” Terminology mapping: in this FBR sideline, you are the tellaskee (the fresh-boots self), and the tellasker is the outer self (current mainline). In this same round, other fresh-boots selves also provide parallel drafts (no stable mapping—do not treat them as fixed identities). The outer self will make unified decisions only after all feedback returns; provide only this one independent draft and do not finalize next-action decisions for the outer self.'
|
|
837
873
|
: 'Conversation setup: FBR is disabled for this member (no parallel fresh-boots drafts).';
|
|
838
|
-
const
|
|
839
|
-
|
|
840
|
-
'提示:如果你还想知道更多系统细节,可在本 FBR 支线对话中用 `!?@tellasker` 回问诉请者(tellasker,也就是外表自我/当前主线)。',
|
|
841
|
-
'(当前这次 FBR 请不要真的发起任何诉请;只需说明你会回问什么。)',
|
|
842
|
-
].join('\n');
|
|
843
|
-
})();
|
|
844
|
-
const tellaskBackHintEn = (() => {
|
|
845
|
-
return [
|
|
846
|
-
'Hint: if you want more system details, ask back in this FBR sideline dialog via `!?@tellasker` (to the tellasker, i.e. the outer-self mainline dialog).',
|
|
847
|
-
'(In this FBR run, do not actually emit any tellasks; just state what you would ask back.)',
|
|
848
|
-
].join('\n');
|
|
849
|
-
})();
|
|
874
|
+
const missingContextHintZh = '提示:本 FBR 支线禁止任何诉请/函数调用;若信息不足,请直接列出“缺失信息 + 为什么阻塞判断”。';
|
|
875
|
+
const missingContextHintEn = 'Hint: this FBR sideline forbids all tellask/function calls; if context is missing, list the missing facts and why they block reasoning.';
|
|
850
876
|
if (language === 'zh') {
|
|
851
877
|
return [
|
|
852
878
|
effortLineZh,
|
|
853
879
|
'',
|
|
854
|
-
|
|
880
|
+
missingContextHintZh,
|
|
855
881
|
'',
|
|
856
882
|
'请基于下面环境信息回答:',
|
|
857
883
|
'- 在这个环境里要注意些什么?',
|
|
@@ -865,7 +891,7 @@ function formatFbrTellaskBody(language, snapshotText, options) {
|
|
|
865
891
|
return [
|
|
866
892
|
effortLineEn,
|
|
867
893
|
'',
|
|
868
|
-
|
|
894
|
+
missingContextHintEn,
|
|
869
895
|
'',
|
|
870
896
|
'Based on the environment info below, answer:',
|
|
871
897
|
'- What should we watch out for in this environment?',
|
|
@@ -877,7 +903,7 @@ function formatFbrTellaskBody(language, snapshotText, options) {
|
|
|
877
903
|
].join('\n');
|
|
878
904
|
}
|
|
879
905
|
async function generatePrimingNoteViaMainlineAgent(options) {
|
|
880
|
-
const { dlg, shellSnapshotText, shellResponseText, vcsRound1Text, vcsRound2Text, fbrResponses,
|
|
906
|
+
const { dlg, shellSnapshotText, shellResponseText, vcsRound1Text, vcsRound2Text, fbrResponses, fbrCallId, assertNotStopped, } = options;
|
|
881
907
|
// Trigger a normal drive and rely on driver.ts context assembly.
|
|
882
908
|
// Agent Priming must not trigger Diligence Push (“鞭策”); it should be best-effort
|
|
883
909
|
// one-shot distillation with no keep-going injection.
|
|
@@ -928,18 +954,7 @@ async function generatePrimingNoteViaMainlineAgent(options) {
|
|
|
928
954
|
? `${trimmed.slice(0, cap).trimEnd()}\n\n(已截断:仅显示前 ${cap} 字符)`
|
|
929
955
|
: `${trimmed.slice(0, cap).trimEnd()}\n\n(truncated: first ${cap} chars only)`;
|
|
930
956
|
const fbrLabel = (() => {
|
|
931
|
-
const head = fbrTellaskHead.trim();
|
|
932
957
|
const callId = fbrCallId.trim();
|
|
933
|
-
if (head && callId) {
|
|
934
|
-
return language === 'zh'
|
|
935
|
-
? `FBR 草稿 #${i + 1}(tellaskHead: ${head};callId: ${callId})`
|
|
936
|
-
: `FBR draft #${i + 1} (tellaskHead: ${head}; callId: ${callId})`;
|
|
937
|
-
}
|
|
938
|
-
if (head) {
|
|
939
|
-
return language === 'zh'
|
|
940
|
-
? `FBR 草稿 #${i + 1}(tellaskHead: ${head})`
|
|
941
|
-
: `FBR draft #${i + 1} (tellaskHead: ${head})`;
|
|
942
|
-
}
|
|
943
958
|
if (callId) {
|
|
944
959
|
return language === 'zh'
|
|
945
960
|
? `FBR 草稿 #${i + 1}(callId: ${callId})`
|
|
@@ -956,8 +971,8 @@ async function generatePrimingNoteViaMainlineAgent(options) {
|
|
|
956
971
|
const internalPrompt = language === 'zh'
|
|
957
972
|
? [
|
|
958
973
|
'你正在进行智能体启动(Agent Priming)的“综合提炼”步骤。',
|
|
959
|
-
'你收到本提示时,意味着该次
|
|
960
|
-
'请基于下方提供的环境快照(以及可选的
|
|
974
|
+
'你收到本提示时,意味着该次 `freshBootsReasoning` FBR 的并发回贴已经收齐;本步骤只做综合提炼,不重新发起 FBR。',
|
|
975
|
+
'请基于下方提供的环境快照(以及可选的 `freshBootsReasoning` FBR 草稿),综合提炼出一条可复用的“智能体启动(Agent Priming)笔记”。',
|
|
961
976
|
'',
|
|
962
977
|
'证据材料(仅供综合提炼;不要逐条复述):',
|
|
963
978
|
evidenceBlock ? evidenceBlock : '(无)',
|
|
@@ -974,8 +989,8 @@ async function generatePrimingNoteViaMainlineAgent(options) {
|
|
|
974
989
|
].join('\n')
|
|
975
990
|
: [
|
|
976
991
|
'You are in the Agent Priming distillation step.',
|
|
977
|
-
'Receiving this prompt means feedback from this
|
|
978
|
-
'Based on the environment snapshot (and optional
|
|
992
|
+
'Receiving this prompt means feedback from this `freshBootsReasoning` FBR run has already been collected; this step is distillation only, not another FBR initiation.',
|
|
993
|
+
'Based on the environment snapshot (and optional `freshBootsReasoning` FBR drafts) below, distill a reusable “Agent Priming note”.',
|
|
979
994
|
'',
|
|
980
995
|
'Evidence (for distillation only; do not repeat draft-by-draft):',
|
|
981
996
|
evidenceBlock ? evidenceBlock : '(empty)',
|
|
@@ -1020,20 +1035,20 @@ function buildCoursePrefixMsgs(entry) {
|
|
|
1020
1035
|
const header = (() => {
|
|
1021
1036
|
if (language === 'zh') {
|
|
1022
1037
|
if (entry.shellPolicy === 'specialist_only') {
|
|
1023
|
-
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已真实跑通一次“诉请(shell 专员)+ 回传 +
|
|
1038
|
+
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已真实跑通一次“诉请(shell 专员)+ 回传 + `freshBootsReasoning` FBR + 综合提炼”,并遵循“发起 FBR → 等待回贴 → 综合决策”的时序。以下为压缩转录,作为每一程对话的开头上下文注入。';
|
|
1024
1039
|
}
|
|
1025
1040
|
if (entry.shellPolicy === 'no_specialist') {
|
|
1026
|
-
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已获取环境快照并完成一次
|
|
1041
|
+
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已获取环境快照并完成一次 `freshBootsReasoning` FBR + 综合提炼(无 shell 专员;不得执行任意 shell 命令),并遵循“发起 FBR → 等待回贴 → 综合决策”的时序。以下为压缩转录,作为每一程对话的开头上下文注入。';
|
|
1027
1042
|
}
|
|
1028
|
-
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已获取环境快照并完成一次
|
|
1043
|
+
return '智能体启动(Agent Priming)上下文:本进程在对话创建时已获取环境快照并完成一次 `freshBootsReasoning` FBR + 综合提炼,并遵循“发起 FBR → 等待回贴 → 综合决策”的时序。以下为压缩转录,作为每一程对话的开头上下文注入。';
|
|
1029
1044
|
}
|
|
1030
1045
|
if (entry.shellPolicy === 'specialist_only') {
|
|
1031
|
-
return 'Agent Priming context: this process already ran a real Tellask (shell specialist) + return +
|
|
1046
|
+
return 'Agent Priming context: this process already ran a real Tellask (shell specialist) + return + `freshBootsReasoning` FBR + distillation at dialog creation, following the timing contract “initiate FBR -> wait for feedback -> synthesize/decide”. The condensed transcript below is injected at the start of each course.';
|
|
1032
1047
|
}
|
|
1033
1048
|
if (entry.shellPolicy === 'no_specialist') {
|
|
1034
|
-
return 'Agent Priming context: this process captured an environment snapshot and ran
|
|
1049
|
+
return 'Agent Priming context: this process captured an environment snapshot and ran `freshBootsReasoning` FBR + distillation at dialog creation (no shell specialist; do not run arbitrary shell commands), following the timing contract “initiate FBR -> wait for feedback -> synthesize/decide”. The condensed transcript below is injected at the start of each course.';
|
|
1035
1050
|
}
|
|
1036
|
-
return 'Agent Priming context: this process captured an environment snapshot and ran
|
|
1051
|
+
return 'Agent Priming context: this process captured an environment snapshot and ran `freshBootsReasoning` FBR + distillation at dialog creation, following the timing contract “initiate FBR -> wait for feedback -> synthesize/decide”. The condensed transcript below is injected at the start of each course.';
|
|
1037
1052
|
})();
|
|
1038
1053
|
const shellSnapshotLabel = language === 'zh'
|
|
1039
1054
|
? 'Shell 环境快照(当前 Dominds 运行时;来自 `uname -a`)'
|
|
@@ -1137,23 +1152,19 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1137
1152
|
assertNotStopped();
|
|
1138
1153
|
// Phase 1: shell ask (and optional prelude intro)
|
|
1139
1154
|
let shellCallId = null;
|
|
1140
|
-
let
|
|
1155
|
+
let shellMentionList = null;
|
|
1141
1156
|
try {
|
|
1142
1157
|
assertNotStopped();
|
|
1143
1158
|
await dlg.notifyGeneratingStart();
|
|
1144
1159
|
await emitUiOnlyMarkdownEventsAndPersist(dlg, formatPreludeIntro(language, true, entry.shellPolicy, entry.shell.kind === 'specialist_tellask' ? entry.shell.specialistId : null));
|
|
1145
1160
|
if (entry.shell.kind === 'specialist_tellask') {
|
|
1146
|
-
const
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
if (shellCall) {
|
|
1154
|
-
shellCallId = shellCall.callId;
|
|
1155
|
-
shellTellaskHead = shellCall.tellaskHead;
|
|
1156
|
-
}
|
|
1161
|
+
const shellCall = await emitSyntheticTellaskCall(dlg, {
|
|
1162
|
+
callName: 'tellaskSessionless',
|
|
1163
|
+
mentionList: [`@${entry.shell.specialistId}`],
|
|
1164
|
+
tellaskContent: entry.shell.tellaskBody,
|
|
1165
|
+
});
|
|
1166
|
+
shellCallId = shellCall.callId;
|
|
1167
|
+
shellMentionList = shellCall.mentionList ?? null;
|
|
1157
1168
|
}
|
|
1158
1169
|
else {
|
|
1159
1170
|
await emitSayingEventsAndPersist(dlg, entry.shell.directNoteMarkdown);
|
|
@@ -1168,9 +1179,9 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1168
1179
|
}
|
|
1169
1180
|
}
|
|
1170
1181
|
// Phase 2: shell response (separate bubble)
|
|
1171
|
-
if (entry.shell.kind === 'specialist_tellask' && shellCallId &&
|
|
1182
|
+
if (entry.shell.kind === 'specialist_tellask' && shellCallId && shellMentionList) {
|
|
1172
1183
|
assertNotStopped();
|
|
1173
|
-
await dlg.receiveTeammateResponse(entry.shell.specialistId,
|
|
1184
|
+
await dlg.receiveTeammateResponse(entry.shell.specialistId, 'tellaskSessionless', shellMentionList, entry.shell.tellaskBody, 'completed', dlg.id, {
|
|
1174
1185
|
response: entry.shell.responseText,
|
|
1175
1186
|
agentId: entry.shell.specialistId,
|
|
1176
1187
|
callId: shellCallId,
|
|
@@ -1180,23 +1191,19 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1180
1191
|
// Phase 2.5: VCS long-session drill (two rounds)
|
|
1181
1192
|
if (entry.vcs.kind === 'specialist_session') {
|
|
1182
1193
|
let round1CallId = null;
|
|
1183
|
-
let
|
|
1194
|
+
let round1MentionList = null;
|
|
1184
1195
|
let round2CallId = null;
|
|
1185
|
-
let
|
|
1196
|
+
let round2MentionList = null;
|
|
1186
1197
|
try {
|
|
1187
1198
|
assertNotStopped();
|
|
1188
1199
|
await dlg.notifyGeneratingStart();
|
|
1189
|
-
const
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
if (round1) {
|
|
1197
|
-
round1CallId = round1.callId;
|
|
1198
|
-
round1TellaskHead = round1.tellaskHead;
|
|
1199
|
-
}
|
|
1200
|
+
const round1 = await emitSyntheticTellaskCall(dlg, {
|
|
1201
|
+
callName: 'tellask',
|
|
1202
|
+
mentionList: [`@${entry.vcs.specialistId}`],
|
|
1203
|
+
tellaskContent: entry.vcs.round1.tellaskBody,
|
|
1204
|
+
});
|
|
1205
|
+
round1CallId = round1.callId;
|
|
1206
|
+
round1MentionList = round1.mentionList ?? null;
|
|
1200
1207
|
}
|
|
1201
1208
|
finally {
|
|
1202
1209
|
try {
|
|
@@ -1206,9 +1213,9 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1206
1213
|
// best-effort
|
|
1207
1214
|
}
|
|
1208
1215
|
}
|
|
1209
|
-
if (round1CallId &&
|
|
1216
|
+
if (round1CallId && round1MentionList) {
|
|
1210
1217
|
assertNotStopped();
|
|
1211
|
-
await dlg.receiveTeammateResponse(entry.vcs.specialistId,
|
|
1218
|
+
await dlg.receiveTeammateResponse(entry.vcs.specialistId, 'tellask', round1MentionList, entry.vcs.round1.tellaskBody, 'completed', dlg.id, {
|
|
1212
1219
|
response: entry.vcs.round1.responseText,
|
|
1213
1220
|
agentId: entry.vcs.specialistId,
|
|
1214
1221
|
callId: round1CallId,
|
|
@@ -1218,17 +1225,13 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1218
1225
|
try {
|
|
1219
1226
|
assertNotStopped();
|
|
1220
1227
|
await dlg.notifyGeneratingStart();
|
|
1221
|
-
const
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
if (round2) {
|
|
1229
|
-
round2CallId = round2.callId;
|
|
1230
|
-
round2TellaskHead = round2.tellaskHead;
|
|
1231
|
-
}
|
|
1228
|
+
const round2 = await emitSyntheticTellaskCall(dlg, {
|
|
1229
|
+
callName: 'tellask',
|
|
1230
|
+
mentionList: [`@${entry.vcs.specialistId}`],
|
|
1231
|
+
tellaskContent: entry.vcs.round2.tellaskBody,
|
|
1232
|
+
});
|
|
1233
|
+
round2CallId = round2.callId;
|
|
1234
|
+
round2MentionList = round2.mentionList ?? null;
|
|
1232
1235
|
}
|
|
1233
1236
|
finally {
|
|
1234
1237
|
try {
|
|
@@ -1238,9 +1241,9 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1238
1241
|
// best-effort
|
|
1239
1242
|
}
|
|
1240
1243
|
}
|
|
1241
|
-
if (round2CallId &&
|
|
1244
|
+
if (round2CallId && round2MentionList) {
|
|
1242
1245
|
assertNotStopped();
|
|
1243
|
-
await dlg.receiveTeammateResponse(entry.vcs.specialistId,
|
|
1246
|
+
await dlg.receiveTeammateResponse(entry.vcs.specialistId, 'tellask', round2MentionList, entry.vcs.round2.tellaskBody, 'completed', dlg.id, {
|
|
1244
1247
|
response: entry.vcs.round2.responseText,
|
|
1245
1248
|
agentId: entry.vcs.specialistId,
|
|
1246
1249
|
callId: round2CallId,
|
|
@@ -1278,24 +1281,17 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1278
1281
|
}
|
|
1279
1282
|
// Phase 3: FBR ask (call bubble)
|
|
1280
1283
|
let fbrCallId = null;
|
|
1281
|
-
let fbrTellaskHead = null;
|
|
1282
1284
|
const effort = Math.max(0, Math.floor(entry.fbr.effort));
|
|
1283
1285
|
if (effort >= 1 && entry.fbr.responses.length > 0) {
|
|
1284
1286
|
try {
|
|
1285
1287
|
assertNotStopped();
|
|
1286
1288
|
await dlg.notifyGeneratingStart();
|
|
1287
|
-
const fbrCallBody = [entry.fbr.selfTeaser, '', entry.fbr.
|
|
1288
|
-
const
|
|
1289
|
-
'
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
const fbrCalls = await emitSayingEventsAndPersist(dlg, fbrCallContent);
|
|
1294
|
-
const fbrCall = fbrCalls.find((c) => c.validation.kind === 'valid');
|
|
1295
|
-
if (fbrCall) {
|
|
1296
|
-
fbrCallId = fbrCall.callId;
|
|
1297
|
-
fbrTellaskHead = fbrCall.tellaskHead;
|
|
1298
|
-
}
|
|
1289
|
+
const fbrCallBody = [entry.fbr.selfTeaser, '', entry.fbr.tellaskContent].join('\n');
|
|
1290
|
+
const fbrCall = await emitSyntheticTellaskCall(dlg, {
|
|
1291
|
+
callName: 'freshBootsReasoning',
|
|
1292
|
+
tellaskContent: fbrCallBody,
|
|
1293
|
+
});
|
|
1294
|
+
fbrCallId = fbrCall.callId;
|
|
1299
1295
|
}
|
|
1300
1296
|
finally {
|
|
1301
1297
|
try {
|
|
@@ -1306,13 +1302,13 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1306
1302
|
}
|
|
1307
1303
|
}
|
|
1308
1304
|
// Phase 4: FBR responses (separate bubbles, in stable index order)
|
|
1309
|
-
if (fbrCallId
|
|
1305
|
+
if (fbrCallId) {
|
|
1310
1306
|
const normalized = Math.max(1, effort);
|
|
1311
1307
|
const responses = entry.fbr.responses.slice(0, normalized);
|
|
1312
1308
|
for (let i = 0; i < responses.length; i++) {
|
|
1313
1309
|
assertNotStopped();
|
|
1314
1310
|
const raw = responses[i] ?? '';
|
|
1315
|
-
await dlg.receiveTeammateResponse(entry.fbr.responderAgentId,
|
|
1311
|
+
await dlg.receiveTeammateResponse(entry.fbr.responderAgentId, 'freshBootsReasoning', undefined, entry.fbr.tellaskContent, 'completed', dlg.id, {
|
|
1316
1312
|
response: raw,
|
|
1317
1313
|
agentId: entry.fbr.responderAgentId,
|
|
1318
1314
|
callId: fbrCallId,
|
|
@@ -1342,7 +1338,7 @@ async function replayAgentPriming(dlg, entry) {
|
|
|
1342
1338
|
kind: 'interrupted',
|
|
1343
1339
|
reason: { kind: err.reason },
|
|
1344
1340
|
};
|
|
1345
|
-
log_1.log.
|
|
1341
|
+
log_1.log.debug('Agent Priming replay interrupted by stop request', undefined, {
|
|
1346
1342
|
dialogId: dlg.id.valueOf(),
|
|
1347
1343
|
reason: err.reason,
|
|
1348
1344
|
});
|
|
@@ -1430,7 +1426,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1430
1426
|
? 'self_is_specialist'
|
|
1431
1427
|
: 'specialist_only';
|
|
1432
1428
|
let shellCallId = null;
|
|
1433
|
-
let
|
|
1429
|
+
let shellMentionList = null;
|
|
1434
1430
|
let shellTellaskBodyForSubdialog = null;
|
|
1435
1431
|
// Phase 1: shell ask (and optional prelude intro)
|
|
1436
1432
|
if (shellPolicy === 'specialist_only' && specialistId !== null) {
|
|
@@ -1440,19 +1436,14 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1440
1436
|
try {
|
|
1441
1437
|
await dlg.notifyGeneratingStart();
|
|
1442
1438
|
await emitUiOnlyMarkdownEventsAndPersist(dlg, formatPreludeIntro(language, false, shellPolicy, specialistId));
|
|
1443
|
-
const
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
const calls = await emitSayingEventsAndPersist(dlg, shellCallSaying);
|
|
1449
|
-
const call = calls.find((c) => c.validation.kind === 'valid');
|
|
1450
|
-
if (!call) {
|
|
1451
|
-
throw new Error('Failed to emit shell specialist tellask call');
|
|
1452
|
-
}
|
|
1439
|
+
const call = await emitSyntheticTellaskCall(dlg, {
|
|
1440
|
+
callName: 'tellaskSessionless',
|
|
1441
|
+
mentionList: [`@${specialistId}`],
|
|
1442
|
+
tellaskContent: shellTellaskBody,
|
|
1443
|
+
});
|
|
1453
1444
|
shellCallId = call.callId;
|
|
1454
|
-
|
|
1455
|
-
shellTellaskBodyForSubdialog = call.
|
|
1445
|
+
shellMentionList = call.mentionList;
|
|
1446
|
+
shellTellaskBodyForSubdialog = call.tellaskContent;
|
|
1456
1447
|
}
|
|
1457
1448
|
finally {
|
|
1458
1449
|
try {
|
|
@@ -1520,23 +1511,15 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1520
1511
|
if (shellPolicy === 'specialist_only' &&
|
|
1521
1512
|
specialistId !== null &&
|
|
1522
1513
|
shellCallId &&
|
|
1523
|
-
|
|
1514
|
+
shellMentionList) {
|
|
1524
1515
|
const ensuredSpecialistId = specialistId;
|
|
1525
|
-
if (ensuredSpecialistId === null) {
|
|
1526
|
-
throw new Error('Missing shell specialist id');
|
|
1527
|
-
}
|
|
1528
1516
|
const ensuredShellCallId = shellCallId;
|
|
1529
|
-
|
|
1530
|
-
throw new Error('Missing shell callId');
|
|
1531
|
-
}
|
|
1532
|
-
const ensuredShellTellaskHead = shellTellaskHead;
|
|
1533
|
-
if (!ensuredShellTellaskHead) {
|
|
1534
|
-
throw new Error('Missing shell tellaskHead');
|
|
1535
|
-
}
|
|
1517
|
+
const ensuredShellMentionList = shellMentionList;
|
|
1536
1518
|
const tellaskBody = shellTellaskBodyForSubdialog ?? shellTellaskBody;
|
|
1537
1519
|
assertNotStopped();
|
|
1538
1520
|
const sub = await dlg.withLock(async () => {
|
|
1539
|
-
return await dlg.createSubDialog(ensuredSpecialistId,
|
|
1521
|
+
return await dlg.createSubDialog(ensuredSpecialistId, ensuredShellMentionList, tellaskBody, {
|
|
1522
|
+
callName: 'tellaskSessionless',
|
|
1540
1523
|
originMemberId: dlg.agentId,
|
|
1541
1524
|
callerDialogId: dlg.id.selfId,
|
|
1542
1525
|
callId: ensuredShellCallId,
|
|
@@ -1544,10 +1527,11 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1544
1527
|
});
|
|
1545
1528
|
});
|
|
1546
1529
|
const initPrompt = (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
1530
|
+
callName: 'tellaskSessionless',
|
|
1547
1531
|
fromAgentId: dlg.agentId,
|
|
1548
1532
|
toAgentId: sub.agentId,
|
|
1549
|
-
|
|
1550
|
-
tellaskBody,
|
|
1533
|
+
mentionList: ensuredShellMentionList,
|
|
1534
|
+
tellaskContent: tellaskBody,
|
|
1551
1535
|
language,
|
|
1552
1536
|
collectiveTargets: [ensuredSpecialistId],
|
|
1553
1537
|
});
|
|
@@ -1564,7 +1548,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1564
1548
|
}
|
|
1565
1549
|
assertNotStopped();
|
|
1566
1550
|
await dlg.withLock(async () => {
|
|
1567
|
-
await dlg.receiveTeammateResponse(ensuredSpecialistId,
|
|
1551
|
+
await dlg.receiveTeammateResponse(ensuredSpecialistId, 'tellaskSessionless', ensuredShellMentionList, tellaskBody, 'completed', sub.id, {
|
|
1568
1552
|
response: shellResponseText,
|
|
1569
1553
|
agentId: ensuredSpecialistId,
|
|
1570
1554
|
callId: ensuredShellCallId,
|
|
@@ -1578,24 +1562,19 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1578
1562
|
try {
|
|
1579
1563
|
vcsRound1Body = formatVcsSessionRound1TellaskBody(language);
|
|
1580
1564
|
let round1CallId = '';
|
|
1581
|
-
let
|
|
1565
|
+
let round1MentionList = [];
|
|
1582
1566
|
let round1TellaskBodyForSubdialog = '';
|
|
1583
1567
|
await dlg.withLock(async () => {
|
|
1584
1568
|
try {
|
|
1585
1569
|
await dlg.notifyGeneratingStart();
|
|
1586
|
-
const
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
const calls = await emitSayingEventsAndPersist(dlg, round1CallSaying);
|
|
1592
|
-
const call = calls.find((c) => c.validation.kind === 'valid');
|
|
1593
|
-
if (!call) {
|
|
1594
|
-
throw new Error('Failed to emit VCS session round-1 tellask call');
|
|
1595
|
-
}
|
|
1570
|
+
const call = await emitSyntheticTellaskCall(dlg, {
|
|
1571
|
+
callName: 'tellask',
|
|
1572
|
+
mentionList: [`@${ensuredSpecialistId}`],
|
|
1573
|
+
tellaskContent: vcsRound1Body,
|
|
1574
|
+
});
|
|
1596
1575
|
round1CallId = call.callId;
|
|
1597
|
-
|
|
1598
|
-
round1TellaskBodyForSubdialog = call.
|
|
1576
|
+
round1MentionList = call.mentionList;
|
|
1577
|
+
round1TellaskBodyForSubdialog = call.tellaskContent;
|
|
1599
1578
|
}
|
|
1600
1579
|
finally {
|
|
1601
1580
|
try {
|
|
@@ -1608,11 +1587,12 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1608
1587
|
});
|
|
1609
1588
|
assertNotStopped();
|
|
1610
1589
|
const round1Sub = await dlg.withLock(async () => {
|
|
1611
|
-
return await dlg.createSubDialog(ensuredSpecialistId,
|
|
1590
|
+
return await dlg.createSubDialog(ensuredSpecialistId, round1MentionList, round1TellaskBodyForSubdialog || vcsRound1Body, {
|
|
1591
|
+
callName: 'tellask',
|
|
1612
1592
|
originMemberId: dlg.agentId,
|
|
1613
1593
|
callerDialogId: dlg.id.selfId,
|
|
1614
1594
|
callId: round1CallId,
|
|
1615
|
-
|
|
1595
|
+
sessionSlug: PRIMING_VCS_SESSION_SLUG,
|
|
1616
1596
|
collectiveTargets: [ensuredSpecialistId],
|
|
1617
1597
|
});
|
|
1618
1598
|
});
|
|
@@ -1623,10 +1603,11 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1623
1603
|
await rootDialog.saveSubdialogRegistry();
|
|
1624
1604
|
}
|
|
1625
1605
|
const round1Prompt = (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
1606
|
+
callName: 'tellask',
|
|
1626
1607
|
fromAgentId: dlg.agentId,
|
|
1627
1608
|
toAgentId: round1Sub.agentId,
|
|
1628
|
-
|
|
1629
|
-
|
|
1609
|
+
mentionList: round1MentionList,
|
|
1610
|
+
tellaskContent: round1TellaskBodyForSubdialog || vcsRound1Body,
|
|
1630
1611
|
language,
|
|
1631
1612
|
collectiveTargets: [ensuredSpecialistId],
|
|
1632
1613
|
});
|
|
@@ -1643,7 +1624,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1643
1624
|
}
|
|
1644
1625
|
assertNotStopped();
|
|
1645
1626
|
await dlg.withLock(async () => {
|
|
1646
|
-
await dlg.receiveTeammateResponse(ensuredSpecialistId,
|
|
1627
|
+
await dlg.receiveTeammateResponse(ensuredSpecialistId, 'tellask', round1MentionList, round1TellaskBodyForSubdialog || vcsRound1Body, 'completed', round1Sub.id, {
|
|
1647
1628
|
response: vcsRound1ResponseText,
|
|
1648
1629
|
agentId: ensuredSpecialistId,
|
|
1649
1630
|
callId: round1CallId,
|
|
@@ -1652,24 +1633,19 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1652
1633
|
});
|
|
1653
1634
|
vcsRound2Body = formatVcsSessionRound2TellaskBody(language, vcsRound1ResponseText);
|
|
1654
1635
|
let round2CallId = '';
|
|
1655
|
-
let
|
|
1636
|
+
let round2MentionList = [];
|
|
1656
1637
|
let round2TellaskBodyForSubdialog = '';
|
|
1657
1638
|
await dlg.withLock(async () => {
|
|
1658
1639
|
try {
|
|
1659
1640
|
await dlg.notifyGeneratingStart();
|
|
1660
|
-
const
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
const calls = await emitSayingEventsAndPersist(dlg, round2CallSaying);
|
|
1666
|
-
const call = calls.find((c) => c.validation.kind === 'valid');
|
|
1667
|
-
if (!call) {
|
|
1668
|
-
throw new Error('Failed to emit VCS session round-2 tellask call');
|
|
1669
|
-
}
|
|
1641
|
+
const call = await emitSyntheticTellaskCall(dlg, {
|
|
1642
|
+
callName: 'tellask',
|
|
1643
|
+
mentionList: [`@${ensuredSpecialistId}`],
|
|
1644
|
+
tellaskContent: vcsRound2Body,
|
|
1645
|
+
});
|
|
1670
1646
|
round2CallId = call.callId;
|
|
1671
|
-
|
|
1672
|
-
round2TellaskBodyForSubdialog = call.
|
|
1647
|
+
round2MentionList = call.mentionList;
|
|
1648
|
+
round2TellaskBodyForSubdialog = call.tellaskContent;
|
|
1673
1649
|
}
|
|
1674
1650
|
finally {
|
|
1675
1651
|
try {
|
|
@@ -1681,10 +1657,11 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1681
1657
|
}
|
|
1682
1658
|
});
|
|
1683
1659
|
const round2Prompt = (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
1660
|
+
callName: 'tellask',
|
|
1684
1661
|
fromAgentId: dlg.agentId,
|
|
1685
1662
|
toAgentId: round1Sub.agentId,
|
|
1686
|
-
|
|
1687
|
-
|
|
1663
|
+
mentionList: round2MentionList,
|
|
1664
|
+
tellaskContent: round2TellaskBodyForSubdialog || vcsRound2Body,
|
|
1688
1665
|
language,
|
|
1689
1666
|
collectiveTargets: [ensuredSpecialistId],
|
|
1690
1667
|
});
|
|
@@ -1701,7 +1678,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1701
1678
|
}
|
|
1702
1679
|
assertNotStopped();
|
|
1703
1680
|
await dlg.withLock(async () => {
|
|
1704
|
-
await dlg.receiveTeammateResponse(ensuredSpecialistId,
|
|
1681
|
+
await dlg.receiveTeammateResponse(ensuredSpecialistId, 'tellask', round2MentionList, round2TellaskBodyForSubdialog || vcsRound2Body, 'completed', round1Sub.id, {
|
|
1705
1682
|
response: vcsRound2ResponseText,
|
|
1706
1683
|
agentId: ensuredSpecialistId,
|
|
1707
1684
|
callId: round2CallId,
|
|
@@ -1792,27 +1769,20 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1792
1769
|
fbrCallBody = formatFbrTellaskBody(language, fbrSnapshotText.trim() ? fbrSnapshotText : snapshotText, { fbrEffort });
|
|
1793
1770
|
selfTeaser = formatFbrSelfTeaser(language);
|
|
1794
1771
|
let fbrCallId = null;
|
|
1795
|
-
let
|
|
1772
|
+
let fbrCallName = null;
|
|
1796
1773
|
// Phase 3: FBR ask (call bubble)
|
|
1797
1774
|
if (fbrEffort >= 1) {
|
|
1798
1775
|
assertNotStopped();
|
|
1799
1776
|
await dlg.withLock(async () => {
|
|
1800
1777
|
try {
|
|
1801
1778
|
await dlg.notifyGeneratingStart();
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
'',
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
'',
|
|
1808
|
-
].join('\n');
|
|
1809
|
-
const fbrCalls = await emitSayingEventsAndPersist(dlg, fbrSaying);
|
|
1810
|
-
const fbrCall = fbrCalls.find((c) => c.validation.kind === 'valid');
|
|
1811
|
-
if (!fbrCall) {
|
|
1812
|
-
throw new Error('Failed to emit FBR tellask call');
|
|
1813
|
-
}
|
|
1779
|
+
await emitUiOnlyMarkdownEventsAndPersist(dlg, selfTeaser);
|
|
1780
|
+
const fbrCall = await emitSyntheticTellaskCall(dlg, {
|
|
1781
|
+
callName: 'freshBootsReasoning',
|
|
1782
|
+
tellaskContent: fbrCallBody,
|
|
1783
|
+
});
|
|
1814
1784
|
fbrCallId = fbrCall.callId;
|
|
1815
|
-
|
|
1785
|
+
fbrCallName = fbrCall.callName;
|
|
1816
1786
|
}
|
|
1817
1787
|
finally {
|
|
1818
1788
|
try {
|
|
@@ -1824,11 +1794,11 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1824
1794
|
}
|
|
1825
1795
|
});
|
|
1826
1796
|
// Phase 4: FBR responses (separate bubbles; order is not meaningful)
|
|
1827
|
-
if (!fbrCallId ||
|
|
1828
|
-
throw new Error('Missing FBR callId/
|
|
1797
|
+
if (!fbrCallId || fbrCallName !== 'freshBootsReasoning') {
|
|
1798
|
+
throw new Error('Missing FBR callId/callName');
|
|
1829
1799
|
}
|
|
1830
1800
|
const ensuredFbrCallId = fbrCallId;
|
|
1831
|
-
const
|
|
1801
|
+
const ensuredFbrCallName = fbrCallName;
|
|
1832
1802
|
const perInstance = Array.from({ length: fbrEffort }, (_, idx) => idx + 1);
|
|
1833
1803
|
const created = await Promise.all(perInstance.map(async (i) => {
|
|
1834
1804
|
assertNotStopped();
|
|
@@ -1843,7 +1813,8 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1843
1813
|
: fbrCallBody;
|
|
1844
1814
|
assertNotStopped();
|
|
1845
1815
|
const sub = await dlg.withLock(async () => {
|
|
1846
|
-
return await dlg.createSubDialog(dlg.agentId,
|
|
1816
|
+
return await dlg.createSubDialog(dlg.agentId, undefined, instanceBody, {
|
|
1817
|
+
callName: ensuredFbrCallName,
|
|
1847
1818
|
originMemberId: dlg.agentId,
|
|
1848
1819
|
callerDialogId: dlg.id.selfId,
|
|
1849
1820
|
callId: ensuredFbrCallId,
|
|
@@ -1851,10 +1822,10 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1851
1822
|
});
|
|
1852
1823
|
});
|
|
1853
1824
|
const initPrompt = (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
1825
|
+
callName: ensuredFbrCallName,
|
|
1854
1826
|
fromAgentId: dlg.agentId,
|
|
1855
1827
|
toAgentId: sub.agentId,
|
|
1856
|
-
|
|
1857
|
-
tellaskBody: instanceBody,
|
|
1828
|
+
tellaskContent: instanceBody,
|
|
1858
1829
|
language,
|
|
1859
1830
|
collectiveTargets: [dlg.agentId],
|
|
1860
1831
|
});
|
|
@@ -1875,7 +1846,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1875
1846
|
fbrResponsesForCache.push(responseText);
|
|
1876
1847
|
fbrResponsesForInjection.push({ subdialogId: r.sub.id.selfId, response: responseText });
|
|
1877
1848
|
await dlg.withLock(async () => {
|
|
1878
|
-
await dlg.receiveTeammateResponse(dlg.agentId,
|
|
1849
|
+
await dlg.receiveTeammateResponse(dlg.agentId, ensuredFbrCallName, undefined, fbrCallBody, 'completed', r.sub.id, {
|
|
1879
1850
|
response: responseText,
|
|
1880
1851
|
agentId: dlg.agentId,
|
|
1881
1852
|
callId: ensuredFbrCallId,
|
|
@@ -1884,13 +1855,13 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1884
1855
|
});
|
|
1885
1856
|
}
|
|
1886
1857
|
}
|
|
1887
|
-
if (!fbrCallId ||
|
|
1858
|
+
if (!fbrCallId || fbrCallName !== 'freshBootsReasoning') {
|
|
1888
1859
|
if (fbrEffort >= 1) {
|
|
1889
|
-
throw new Error('Missing FBR callId/
|
|
1860
|
+
throw new Error('Missing FBR callId/callName for Agent Priming distillation.');
|
|
1890
1861
|
}
|
|
1891
1862
|
// FBR disabled (fbr_effort == 0): distill from shell snapshot only.
|
|
1892
1863
|
fbrCallId = '';
|
|
1893
|
-
|
|
1864
|
+
fbrCallName = 'freshBootsReasoning';
|
|
1894
1865
|
}
|
|
1895
1866
|
const primingNote = await generatePrimingNoteViaMainlineAgent({
|
|
1896
1867
|
dlg,
|
|
@@ -1899,7 +1870,6 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1899
1870
|
vcsRound1Text: vcsEvidenceRound1Text,
|
|
1900
1871
|
vcsRound2Text: vcsEvidenceRound2Text,
|
|
1901
1872
|
fbrResponses: fbrResponsesForInjection,
|
|
1902
|
-
fbrTellaskHead: fbrTellaskHead,
|
|
1903
1873
|
fbrCallId: fbrCallId,
|
|
1904
1874
|
assertNotStopped,
|
|
1905
1875
|
});
|
|
@@ -1949,8 +1919,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1949
1919
|
inventoryText: vcsInventoryText,
|
|
1950
1920
|
},
|
|
1951
1921
|
fbr: {
|
|
1952
|
-
|
|
1953
|
-
tellaskBody: fbrCallBody,
|
|
1922
|
+
tellaskContent: fbrCallBody,
|
|
1954
1923
|
selfTeaser,
|
|
1955
1924
|
responderAgentId: dlg.agentId,
|
|
1956
1925
|
effort: fbrEffort,
|
|
@@ -1969,7 +1938,7 @@ async function runAgentPrimingLive(dlg) {
|
|
|
1969
1938
|
kind: 'interrupted',
|
|
1970
1939
|
reason: { kind: err.reason },
|
|
1971
1940
|
};
|
|
1972
|
-
log_1.log.
|
|
1941
|
+
log_1.log.debug('Agent Priming live run interrupted by stop request', undefined, {
|
|
1973
1942
|
dialogId: dlg.id.valueOf(),
|
|
1974
1943
|
reason: err.reason,
|
|
1975
1944
|
});
|