dominds 1.9.1 → 1.9.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/docs/memory-system.zh.md +1 -0
- package/dist/docs/txt-editing-tools.md +2 -0
- package/dist/docs/txt-editing-tools.zh.md +1 -0
- package/dist/llm/kernel-driver/subdialog.d.ts +2 -0
- package/dist/llm/kernel-driver/subdialog.js +9 -4
- package/dist/llm/kernel-driver/tellask-special.js +2 -3
- package/dist/persistence.js +31 -16
- package/dist/priming.js +32 -12
- package/dist/runtime/driver-messages.js +4 -4
- package/dist/runtime/inter-dialog-format.d.ts +10 -0
- package/dist/runtime/inter-dialog-format.js +21 -0
- package/dist/server/api-routes.js +212 -89
- package/dist/server/auth.d.ts +1 -0
- package/dist/server/auth.js +21 -0
- package/dist/server/server-core.js +15 -0
- package/dist/tools/os.js +129 -31
- package/dist/tools/prompts/os/en/tools.md +7 -0
- package/dist/tools/prompts/os/zh/tools.md +7 -0
- package/dist/tools/prompts/team_mgmt/en/index.md +1 -0
- package/dist/tools/prompts/team_mgmt/en/principles.md +1 -0
- package/dist/tools/prompts/team_mgmt/en/scenarios.md +2 -0
- package/dist/tools/prompts/team_mgmt/zh/index.md +1 -0
- package/dist/tools/prompts/team_mgmt/zh/principles.md +1 -0
- package/dist/tools/prompts/team_mgmt/zh/scenarios.md +2 -0
- package/dist/tools/prompts/ws_mod/en/index.md +1 -0
- package/dist/tools/prompts/ws_mod/en/principles.md +1 -0
- package/dist/tools/prompts/ws_mod/zh/index.md +1 -0
- package/dist/tools/prompts/ws_mod/zh/principles.md +1 -0
- package/dist/tools/prompts/ws_mod.en.md +4 -0
- package/dist/tools/prompts/ws_mod.zh.md +4 -0
- package/dist/tools/team_mgmt.js +2 -2
- package/dist/tools/txt.js +21 -11
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-BCSeQ8Mb.js → _basePickBy-BfH-AyMu.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-BCSeQ8Mb.js.map → _basePickBy-BfH-AyMu.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-B5WIJgde.js → _baseUniq-BNsMcBuE.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-B5WIJgde.js.map → _baseUniq-BNsMcBuE.js.map} +1 -1
- package/webapp/dist/assets/{arc-CWDgoT74.js → arc-Bs3CcPvC.js} +2 -2
- package/webapp/dist/assets/{arc-CWDgoT74.js.map → arc-Bs3CcPvC.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DFdZI4Uu.js → architectureDiagram-2XIMDMQ5-C-KYTHQZ.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DFdZI4Uu.js.map → architectureDiagram-2XIMDMQ5-C-KYTHQZ.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DRcKQf9Q.js → blockDiagram-WCTKOSBZ-D9B_SH9m.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DRcKQf9Q.js.map → blockDiagram-WCTKOSBZ-D9B_SH9m.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-B0AMlCwV.js → c4Diagram-IC4MRINW-BDMmvUDN.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-B0AMlCwV.js.map → c4Diagram-IC4MRINW-BDMmvUDN.js.map} +1 -1
- package/webapp/dist/assets/{channel-B0ljx2su.js → channel-DkOACQ-Q.js} +2 -2
- package/webapp/dist/assets/{channel-B0ljx2su.js.map → channel-DkOACQ-Q.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-DbKTqY07.js → chunk-4BX2VUAB-C2YYQQdn.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-DbKTqY07.js.map → chunk-4BX2VUAB-C2YYQQdn.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-DwJgszOl.js → chunk-55IACEB6-BLL_vvlL.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-DwJgszOl.js.map → chunk-55IACEB6-BLL_vvlL.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-BzUcOjMH.js → chunk-FMBD7UC4-DbvS-iIS.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-BzUcOjMH.js.map → chunk-FMBD7UC4-DbvS-iIS.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-B-adw7iw.js → chunk-JSJVCQXG-BYsOBtUv.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-B-adw7iw.js.map → chunk-JSJVCQXG-BYsOBtUv.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-a1S8VCMi.js → chunk-KX2RTZJC-qqotPQTC.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-a1S8VCMi.js.map → chunk-KX2RTZJC-qqotPQTC.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BkpgGRb2.js → chunk-NQ4KR5QH-DtayaIyM.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BkpgGRb2.js.map → chunk-NQ4KR5QH-DtayaIyM.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-BzG0M8E7.js → chunk-QZHKN3VN-ByCgInOy.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-BzG0M8E7.js.map → chunk-QZHKN3VN-ByCgInOy.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-Jdr3sqWq.js → chunk-WL4C6EOR-n6R_kv7j.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-Jdr3sqWq.js.map → chunk-WL4C6EOR-n6R_kv7j.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Bgs-IGF1.js → classDiagram-VBA2DB6C-Cr6hx981.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Bgs-IGF1.js.map → classDiagram-VBA2DB6C-Cr6hx981.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Bgs-IGF1.js → classDiagram-v2-RAHNMMFH-Cr6hx981.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Bgs-IGF1.js.map → classDiagram-v2-RAHNMMFH-Cr6hx981.js.map} +1 -1
- package/webapp/dist/assets/{clone-8W6qtrsz.js → clone-CVYUyjRt.js} +2 -2
- package/webapp/dist/assets/{clone-8W6qtrsz.js.map → clone-CVYUyjRt.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-gwXVRMa3.js → cose-bilkent-S5V4N54A-CbVvMD8B.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-gwXVRMa3.js.map → cose-bilkent-S5V4N54A-CbVvMD8B.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-CgLK6cUW.js → dagre-KLK3FWXG-BuefmyeA.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-CgLK6cUW.js.map → dagre-KLK3FWXG-BuefmyeA.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-BUDea9FM.js → diagram-E7M64L7V-DbxkA6bq.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-BUDea9FM.js.map → diagram-E7M64L7V-DbxkA6bq.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-CiVS6fbK.js → diagram-IFDJBPK2-6eTYxZlY.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-CiVS6fbK.js.map → diagram-IFDJBPK2-6eTYxZlY.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-DpYGO4Wi.js → diagram-P4PSJMXO-BaxnuVrQ.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-DpYGO4Wi.js.map → diagram-P4PSJMXO-BaxnuVrQ.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Cz1TI05E.js → erDiagram-INFDFZHY-CdM7JIpN.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Cz1TI05E.js.map → erDiagram-INFDFZHY-CdM7JIpN.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CxjVowsG.js → flowDiagram-PKNHOUZH-DWXwTxvt.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CxjVowsG.js.map → flowDiagram-PKNHOUZH-DWXwTxvt.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C3t2AHs5.js → ganttDiagram-A5KZAMGK-icFBfjxa.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C3t2AHs5.js.map → ganttDiagram-A5KZAMGK-icFBfjxa.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D3Fz3qNA.js → gitGraphDiagram-K3NZZRJ6-DvG6Al7K.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D3Fz3qNA.js.map → gitGraphDiagram-K3NZZRJ6-DvG6Al7K.js.map} +1 -1
- package/webapp/dist/assets/{graph-DEeBvsT_.js → graph-DttgpnyF.js} +3 -3
- package/webapp/dist/assets/{graph-DEeBvsT_.js.map → graph-DttgpnyF.js.map} +1 -1
- package/webapp/dist/assets/{index-D-SgXZTb.js → index-glyVn6qA.js} +1059 -268
- package/webapp/dist/assets/index-glyVn6qA.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CcsQeBG4.js → infoDiagram-LFFYTUFH-Be7NVGsk.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CcsQeBG4.js.map → infoDiagram-LFFYTUFH-Be7NVGsk.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CAV8iv45.js → ishikawaDiagram-PHBUUO56-aBgICO2W.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CAV8iv45.js.map → ishikawaDiagram-PHBUUO56-aBgICO2W.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C_mKL3Wf.js → journeyDiagram-4ABVD52K-6ZhQR2pT.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C_mKL3Wf.js.map → journeyDiagram-4ABVD52K-6ZhQR2pT.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Ptg6jh3y.js → kanban-definition-K7BYSVSG-BD5WcwkZ.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Ptg6jh3y.js.map → kanban-definition-K7BYSVSG-BD5WcwkZ.js.map} +1 -1
- package/webapp/dist/assets/{layout-vY-lESK1.js → layout-BicT-AKX.js} +5 -5
- package/webapp/dist/assets/{layout-vY-lESK1.js.map → layout-BicT-AKX.js.map} +1 -1
- package/webapp/dist/assets/{linear-Cw12N-49.js → linear-mfPB9dWF.js} +2 -2
- package/webapp/dist/assets/{linear-Cw12N-49.js.map → linear-mfPB9dWF.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH--gGSoZfe.js → mindmap-definition-YRQLILUH-kLbwaG3m.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH--gGSoZfe.js.map → mindmap-definition-YRQLILUH-kLbwaG3m.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DBQkeFNk.js → pieDiagram-SKSYHLDU-C2kjOvDJ.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DBQkeFNk.js.map → pieDiagram-SKSYHLDU-C2kjOvDJ.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRqQEQ5R.js → quadrantDiagram-337W2JSQ-EBFouDoS.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRqQEQ5R.js.map → quadrantDiagram-337W2JSQ-EBFouDoS.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bg-ZQVHw.js → requirementDiagram-Z7DCOOCP-q8a4FaYa.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bg-ZQVHw.js.map → requirementDiagram-Z7DCOOCP-q8a4FaYa.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-ADkSZ215.js → sankeyDiagram-WA2Y5GQK-BQB-fWeY.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-ADkSZ215.js.map → sankeyDiagram-WA2Y5GQK-BQB-fWeY.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-D4N6ze3Y.js → sequenceDiagram-2WXFIKYE-VQq6HFC4.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-D4N6ze3Y.js.map → sequenceDiagram-2WXFIKYE-VQq6HFC4.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-vNdpo2RN.js → stateDiagram-RAJIS63D-CYdwXt96.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-vNdpo2RN.js.map → stateDiagram-RAJIS63D-CYdwXt96.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DklmFziq.js → stateDiagram-v2-FVOUBMTO-BtL9yVRW.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DklmFziq.js.map → stateDiagram-v2-FVOUBMTO-BtL9yVRW.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BrGjv8Mt.js → timeline-definition-YZTLITO2-Mir0gPkJ.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BrGjv8Mt.js.map → timeline-definition-YZTLITO2-Mir0gPkJ.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CuF9Fl6a.js → treemap-KZPCXAKY-BZkUTsQ5.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CuF9Fl6a.js.map → treemap-KZPCXAKY-BZkUTsQ5.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BsWMgmkQ.js → vennDiagram-LZ73GAT5-01He2Gl0.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BsWMgmkQ.js.map → vennDiagram-LZ73GAT5-01He2Gl0.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-MwmjJKc5.js → xychartDiagram-JWTSCODW-D1Igvf_e.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-MwmjJKc5.js.map → xychartDiagram-JWTSCODW-D1Igvf_e.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
- package/webapp/dist/assets/index-D-SgXZTb.js.map +0 -1
|
@@ -149,6 +149,7 @@ TL;DR:
|
|
|
149
149
|
有一类提醒项来自运行时环境(例如后台进程状态、MCP 租用/到期等)。它们更像信号灯:
|
|
150
150
|
|
|
151
151
|
- 你应该阅读并据此调整行为
|
|
152
|
+
- 默认应“静默吸收”这类状态信号;除非它实际改变当前判断/计划/风险,否则不要在回复里专门确认、复述或总结它
|
|
152
153
|
- 但它们的生命周期通常由系统管理(自动更新/自动清理),不要把它们当成个人工作日志
|
|
153
154
|
- 在消息语义上,这类提醒应视为**系统提示**:通常落在 `role=user` 侧,并带显眼头标(如 `【系统提示】`),避免与个人工作提醒混淆
|
|
154
155
|
|
|
@@ -114,6 +114,7 @@ Chinese version: [中文版](./txt-editing-tools.zh.md)
|
|
|
114
114
|
|
|
115
115
|
- 每个 plan hunk 带 TTL(输出 `expires_at_ms`)。
|
|
116
116
|
- hunk 存储于进程内内存;进程重启后丢失。
|
|
117
|
+
- prepare 结果在 apply 前不会落盘;此时再次读取文件仍只能看到旧内容。若想基于该结果继续下一笔修改,必须先 apply 当前 hunk,再重新 prepare。
|
|
117
118
|
- `apply_file_modification` 会检查:
|
|
118
119
|
- hunk 是否存在且未过期
|
|
119
120
|
- hunk 是否由当前成员规划(`WRONG_OWNER` 拒绝)
|
|
@@ -278,6 +279,7 @@ This is the design doc for `ws_mod` text editing as implemented.
|
|
|
278
279
|
- Function tool calls in one message run in parallel → **prepare → apply must be two messages**.
|
|
279
280
|
- Applies are serialized per file in-process (queue by `createdAtMs`, then `hunkId`).
|
|
280
281
|
- `hunk_id` is TTL-limited and in-memory; apply checks ownership and access.
|
|
282
|
+
- Before apply, the prepared change is not persisted, so re-reading still returns the old file content; if you want the next edit based on that prepared result, apply the current hunk first, then prepare again.
|
|
281
283
|
- `create_new_file` creates a new file (empty content allowed) and refuses to overwrite existing files (YAML-only output).
|
|
282
284
|
- `overwrite_entire_file` is the exception full-file overwrite tool, guarded by `known_old_total_lines/known_old_total_bytes`, and it refuses diff/patch-like content by default unless `content_format='diff'|'patch'`.
|
|
283
285
|
- Some providers (e.g. Codex) may require “all fields present” in function calls; for those providers only, use sentinels like empty strings / 0 to express “unset/default”. For most providers, omit optional fields naturally.
|
|
@@ -114,6 +114,7 @@ updated: 2026-01-24
|
|
|
114
114
|
|
|
115
115
|
- 每个 plan hunk 带 TTL(输出 `expires_at_ms`)。
|
|
116
116
|
- hunk 存储于进程内内存;进程重启后丢失。
|
|
117
|
+
- prepare 结果在 apply 前不会落盘;此时再次读取文件仍只能看到旧内容。若想基于该结果继续下一笔修改,必须先 apply 当前 hunk,再重新 prepare。
|
|
117
118
|
- `apply_file_modification` 会检查:
|
|
118
119
|
- hunk 是否存在且未过期
|
|
119
120
|
- hunk 是否由当前成员规划(`WRONG_OWNER` 拒绝)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type CallerCourseNumber } from '@longrun-ai/kernel/types/storage';
|
|
1
2
|
import { Dialog, DialogID, SubDialog } from '../../dialog';
|
|
2
3
|
import type { KernelDriverDriveCallOptions, KernelDriverSubdialogReplyTarget } from './types';
|
|
3
4
|
export type SubdialogReplyTarget = KernelDriverSubdialogReplyTarget;
|
|
@@ -13,6 +14,7 @@ export declare function supplyResponseToSupdialog(args: {
|
|
|
13
14
|
course: number;
|
|
14
15
|
genseq: number;
|
|
15
16
|
};
|
|
17
|
+
callerCourseOverride?: CallerCourseNumber;
|
|
16
18
|
scheduleDrive: ScheduleDriveFn;
|
|
17
19
|
subdialog?: SubDialog;
|
|
18
20
|
}): Promise<void>;
|
|
@@ -148,7 +148,7 @@ async function resolveLatestAssignmentAnchorRef(args) {
|
|
|
148
148
|
return undefined;
|
|
149
149
|
}
|
|
150
150
|
async function supplyResponseToSupdialog(args) {
|
|
151
|
-
const { parentDialog, subdialogId, responseText, callType, callId, status = 'completed', calleeResponseRef, scheduleDrive, subdialog: maybeSubdialog, } = args;
|
|
151
|
+
const { parentDialog, subdialogId, responseText, callType, callId, status = 'completed', calleeResponseRef, callerCourseOverride, scheduleDrive, subdialog: maybeSubdialog, } = args;
|
|
152
152
|
try {
|
|
153
153
|
const result = await (0, subdialog_txn_1.withSubdialogTxnLock)(parentDialog.id, async () => {
|
|
154
154
|
const pendingSubdialogs = await persistence_1.DialogPersistence.loadPendingSubdialogs(parentDialog.id, parentDialog.status);
|
|
@@ -231,6 +231,9 @@ async function supplyResponseToSupdialog(args) {
|
|
|
231
231
|
sessionSlug,
|
|
232
232
|
callId: pendingRecord?.callId,
|
|
233
233
|
callingCourse: pendingRecord?.callingCourse,
|
|
234
|
+
callerCourse: pendingRecord?.callingCourse !== undefined
|
|
235
|
+
? (0, storage_1.toCallerCourseNumber)(pendingRecord.callingCourse)
|
|
236
|
+
: callerCourseOverride,
|
|
234
237
|
shouldRevive,
|
|
235
238
|
};
|
|
236
239
|
});
|
|
@@ -271,6 +274,10 @@ async function supplyResponseToSupdialog(args) {
|
|
|
271
274
|
})
|
|
272
275
|
: undefined;
|
|
273
276
|
if (resolvedCallId !== '' && calleeResponseRef) {
|
|
277
|
+
if (result.callerCourse === undefined) {
|
|
278
|
+
throw new Error(`tellask response anchor invariant violation: missing callerCourse ` +
|
|
279
|
+
`(parentId=${parentDialog.id.selfId}, subdialogId=${subdialogId.selfId}, callId=${resolvedCallId})`);
|
|
280
|
+
}
|
|
274
281
|
const assignmentRef = await resolveLatestAssignmentAnchorRef({
|
|
275
282
|
calleeDialogId: subdialogId,
|
|
276
283
|
callId: resolvedCallId,
|
|
@@ -308,9 +315,7 @@ async function supplyResponseToSupdialog(args) {
|
|
|
308
315
|
? (0, storage_1.toAssignmentGenerationSeqNumber)(assignmentRef.genseq)
|
|
309
316
|
: undefined,
|
|
310
317
|
callerDialogId: parentDialog.id.selfId,
|
|
311
|
-
callerCourse: result.
|
|
312
|
-
? (0, storage_1.toCallerCourseNumber)(result.callingCourse)
|
|
313
|
-
: undefined,
|
|
318
|
+
callerCourse: result.callerCourse,
|
|
314
319
|
};
|
|
315
320
|
await persistence_1.DialogPersistence.appendEvent(subdialogId, calleeResponseRef.course, anchorRecord, parentDialog.status);
|
|
316
321
|
}
|
|
@@ -386,15 +386,13 @@ async function finishRegisteredTellaskReplacement(args) {
|
|
|
386
386
|
const { ownerDialog, subdialog, pendingRecord, responseBody } = args;
|
|
387
387
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
388
388
|
const requesterId = ownerDialog.agentId;
|
|
389
|
-
const response = (0, inter_dialog_format_1.
|
|
390
|
-
callName: pendingRecord.callName,
|
|
389
|
+
const response = (0, inter_dialog_format_1.formatTellaskReplacementNoticeContent)({
|
|
391
390
|
responderId: subdialog.agentId,
|
|
392
391
|
requesterId,
|
|
393
392
|
mentionList: pendingRecord.mentionList,
|
|
394
393
|
sessionSlug: pendingRecord.sessionSlug,
|
|
395
394
|
tellaskContent: pendingRecord.tellaskContent,
|
|
396
395
|
responseBody,
|
|
397
|
-
status: 'failed',
|
|
398
396
|
language,
|
|
399
397
|
});
|
|
400
398
|
const carryoverOriginCourse = pendingRecord.callingCourse;
|
|
@@ -800,6 +798,7 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
800
798
|
course: sub.currentCourse,
|
|
801
799
|
genseq: finalized.responseGenseq,
|
|
802
800
|
},
|
|
801
|
+
callerCourseOverride: callingCourse !== undefined ? (0, storage_1.toCallerCourseNumber)(callingCourse) : undefined,
|
|
803
802
|
scheduleDrive: callbacks.scheduleDrive,
|
|
804
803
|
});
|
|
805
804
|
sub.setFbrConclusionToolsEnabled(false);
|
package/dist/persistence.js
CHANGED
|
@@ -2260,22 +2260,37 @@ class DiskFileDialogStore extends dialog_1.DialogStore {
|
|
|
2260
2260
|
break;
|
|
2261
2261
|
}
|
|
2262
2262
|
case 'tellask_call_anchor_record': {
|
|
2263
|
-
const anchorEvent =
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2263
|
+
const anchorEvent = event.anchorRole === 'assignment'
|
|
2264
|
+
? {
|
|
2265
|
+
type: 'tellask_call_anchor_evt',
|
|
2266
|
+
course,
|
|
2267
|
+
genseq: event.genseq,
|
|
2268
|
+
anchorRole: 'assignment',
|
|
2269
|
+
callId: event.callId,
|
|
2270
|
+
assignmentCourse: event.assignmentCourse,
|
|
2271
|
+
assignmentGenseq: event.assignmentGenseq,
|
|
2272
|
+
dialog: {
|
|
2273
|
+
selfId: dialog.id.selfId,
|
|
2274
|
+
rootId: dialog.id.rootId,
|
|
2275
|
+
},
|
|
2276
|
+
timestamp: event.ts,
|
|
2277
|
+
}
|
|
2278
|
+
: {
|
|
2279
|
+
type: 'tellask_call_anchor_evt',
|
|
2280
|
+
course,
|
|
2281
|
+
genseq: event.genseq,
|
|
2282
|
+
anchorRole: 'response',
|
|
2283
|
+
callId: event.callId,
|
|
2284
|
+
assignmentCourse: event.assignmentCourse,
|
|
2285
|
+
assignmentGenseq: event.assignmentGenseq,
|
|
2286
|
+
callerDialogId: event.callerDialogId,
|
|
2287
|
+
callerCourse: event.callerCourse,
|
|
2288
|
+
dialog: {
|
|
2289
|
+
selfId: dialog.id.selfId,
|
|
2290
|
+
rootId: dialog.id.rootId,
|
|
2291
|
+
},
|
|
2292
|
+
timestamp: event.ts,
|
|
2293
|
+
};
|
|
2279
2294
|
if (ws.readyState === 1) {
|
|
2280
2295
|
ws.send(JSON.stringify(anchorEvent));
|
|
2281
2296
|
}
|
package/dist/priming.js
CHANGED
|
@@ -746,27 +746,47 @@ function normalizePrimingRecordFromJson(raw) {
|
|
|
746
746
|
if (callerDialogId !== undefined && typeof callerDialogId !== 'string') {
|
|
747
747
|
throw new Error(`${context}.callerDialogId must be a string when provided`);
|
|
748
748
|
}
|
|
749
|
-
const
|
|
749
|
+
const baseRecord = {
|
|
750
750
|
ts: '',
|
|
751
751
|
type,
|
|
752
752
|
...(0, storage_1.toRootGenerationAnchor)({
|
|
753
753
|
rootCourse: expectIntegerField(raw, 'rootCourse', context),
|
|
754
754
|
rootGenseq: expectIntegerField(raw, 'rootGenseq', context),
|
|
755
755
|
}),
|
|
756
|
-
anchorRole,
|
|
757
756
|
callId: expectStringField(raw, 'callId', context),
|
|
758
757
|
genseq: expectIntegerField(raw, 'genseq', context),
|
|
758
|
+
...(assignmentCourse !== undefined
|
|
759
|
+
? { assignmentCourse: (0, storage_1.toAssignmentCourseNumber)(assignmentCourse) }
|
|
760
|
+
: {}),
|
|
761
|
+
...(assignmentGenseq !== undefined
|
|
762
|
+
? { assignmentGenseq: (0, storage_1.toAssignmentGenerationSeqNumber)(assignmentGenseq) }
|
|
763
|
+
: {}),
|
|
759
764
|
};
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
765
|
+
let record;
|
|
766
|
+
switch (anchorRole) {
|
|
767
|
+
case 'assignment':
|
|
768
|
+
if (callerDialogId !== undefined || callerCourse !== undefined) {
|
|
769
|
+
throw new Error(`${context} assignment anchor must not provide callerDialogId/callerCourse`);
|
|
770
|
+
}
|
|
771
|
+
record = {
|
|
772
|
+
...baseRecord,
|
|
773
|
+
anchorRole: 'assignment',
|
|
774
|
+
};
|
|
775
|
+
break;
|
|
776
|
+
case 'response':
|
|
777
|
+
if (typeof callerDialogId !== 'string' || callerDialogId.trim() === '') {
|
|
778
|
+
throw new Error(`${context}.callerDialogId must be a non-empty string for response`);
|
|
779
|
+
}
|
|
780
|
+
if (callerCourse === undefined) {
|
|
781
|
+
throw new Error(`${context}.callerCourse is required for response`);
|
|
782
|
+
}
|
|
783
|
+
record = {
|
|
784
|
+
...baseRecord,
|
|
785
|
+
anchorRole: 'response',
|
|
786
|
+
callerDialogId,
|
|
787
|
+
callerCourse: (0, storage_1.toCallerCourseNumber)(callerCourse),
|
|
788
|
+
};
|
|
789
|
+
break;
|
|
770
790
|
}
|
|
771
791
|
if (sourceTag)
|
|
772
792
|
record.sourceTag = sourceTag;
|
|
@@ -78,12 +78,12 @@ function formatRegisteredTellaskCallerUpdateNotice(language) {
|
|
|
78
78
|
if (language === 'zh') {
|
|
79
79
|
return [
|
|
80
80
|
prefix,
|
|
81
|
-
'
|
|
81
|
+
'刚才那轮诉请不用再等了;对方接下来会按你刚更新的要求继续处理,后续请以最新要求为准。',
|
|
82
82
|
].join('\n');
|
|
83
83
|
}
|
|
84
84
|
return [
|
|
85
85
|
prefix,
|
|
86
|
-
'You no longer need to wait on that earlier request. The teammate will continue
|
|
86
|
+
'You no longer need to wait on that earlier request. The teammate will continue under your updated request, so treat the latest request as the one now in effect.',
|
|
87
87
|
].join('\n');
|
|
88
88
|
}
|
|
89
89
|
function formatRegisteredTellaskCalleeUpdateNotice(language) {
|
|
@@ -188,7 +188,7 @@ function formatReminderItemGuide(language, index, content, options) {
|
|
|
188
188
|
return [
|
|
189
189
|
`提醒项 #${index}(工具状态)`,
|
|
190
190
|
'',
|
|
191
|
-
'
|
|
191
|
+
'我把这条当作工具维护的状态参考。默认不在对外回复里专门确认、复述或总结它;只有它实际改变当前判断、计划或风险时,我才提炼真正相关的部分。',
|
|
192
192
|
'',
|
|
193
193
|
`这条提醒项由工具 ${managementTool} 管理;如果我要调整它,就用 ${managementTool}(不要用 update_reminder)。`,
|
|
194
194
|
'',
|
|
@@ -232,7 +232,7 @@ function formatReminderItemGuide(language, index, content, options) {
|
|
|
232
232
|
const updateExampleSafe = updateExample ?? `${managementTool}({ ... })`;
|
|
233
233
|
return `REMINDER ITEM #${index} (TOOL STATE)
|
|
234
234
|
|
|
235
|
-
I treat this as a tool-maintained state reference
|
|
235
|
+
I treat this as a tool-maintained state reference. By default I should not explicitly acknowledge, restate, or summarize it in my outward reply; I should only extract the parts that materially change my current judgment, plan, or risk.
|
|
236
236
|
|
|
237
237
|
This reminder is managed by tool ${managementTool}; if I need to change it, I should use ${managementTool} instead of update_reminder.
|
|
238
238
|
|
|
@@ -48,6 +48,15 @@ export type TellaskResponseFormatInput = {
|
|
|
48
48
|
status?: 'completed' | 'failed';
|
|
49
49
|
language?: LanguageCode;
|
|
50
50
|
};
|
|
51
|
+
export type TellaskReplacementNoticeFormatInput = {
|
|
52
|
+
responderId: string;
|
|
53
|
+
requesterId: string;
|
|
54
|
+
mentionList?: string[];
|
|
55
|
+
sessionSlug?: string;
|
|
56
|
+
tellaskContent: string;
|
|
57
|
+
responseBody: string;
|
|
58
|
+
language?: LanguageCode;
|
|
59
|
+
};
|
|
51
60
|
export type TellaskCarryoverResultFormatInput = {
|
|
52
61
|
originCourse: number;
|
|
53
62
|
callName: 'tellask' | 'tellaskSessionless' | 'freshBootsReasoning';
|
|
@@ -70,4 +79,5 @@ export declare function formatAssignmentFromSupdialog(input: SubdialogAssignment
|
|
|
70
79
|
export declare function formatUpdatedAssignmentFromSupdialog(input: SubdialogAssignmentFormatInput): string;
|
|
71
80
|
export declare function formatSupdialogCallPrompt(input: SupdialogCallPromptInput): string;
|
|
72
81
|
export declare function formatTellaskResponseContent(input: TellaskResponseFormatInput): string;
|
|
82
|
+
export declare function formatTellaskReplacementNoticeContent(input: TellaskReplacementNoticeFormatInput): string;
|
|
73
83
|
export declare function formatTellaskCarryoverResultContent(input: TellaskCarryoverResultFormatInput): string;
|
|
@@ -18,6 +18,7 @@ exports.formatAssignmentFromSupdialog = formatAssignmentFromSupdialog;
|
|
|
18
18
|
exports.formatUpdatedAssignmentFromSupdialog = formatUpdatedAssignmentFromSupdialog;
|
|
19
19
|
exports.formatSupdialogCallPrompt = formatSupdialogCallPrompt;
|
|
20
20
|
exports.formatTellaskResponseContent = formatTellaskResponseContent;
|
|
21
|
+
exports.formatTellaskReplacementNoticeContent = formatTellaskReplacementNoticeContent;
|
|
21
22
|
exports.formatTellaskCarryoverResultContent = formatTellaskCarryoverResultContent;
|
|
22
23
|
const driver_messages_1 = require("./driver-messages");
|
|
23
24
|
const markdown_format_1 = require("./markdown-format");
|
|
@@ -219,6 +220,26 @@ function formatTellaskResponseContent(input) {
|
|
|
219
220
|
: `regarding the original tellask: ${mentionLine} • ${sessionSlug}`;
|
|
220
221
|
return `${markerPrefix}${hello}\n\n${(0, markdown_format_1.markdownQuote)(input.responseBody)}\n\n${tail}\n\n${(0, markdown_format_1.markdownQuote)(tellaskContent)}\n`;
|
|
221
222
|
}
|
|
223
|
+
function formatTellaskReplacementNoticeContent(input) {
|
|
224
|
+
const language = input.language ?? 'en';
|
|
225
|
+
const tellaskContent = requireNonEmpty(input.tellaskContent, 'tellaskContent');
|
|
226
|
+
const responseBody = requireNonEmpty(input.responseBody, 'responseBody');
|
|
227
|
+
const mentionIds = (input.mentionList ?? [])
|
|
228
|
+
.map((item) => stripMentionPrefix(item))
|
|
229
|
+
.filter((item) => item !== '');
|
|
230
|
+
const mentionLine = mentionIds.length === 0
|
|
231
|
+
? `@${requireNonEmpty(input.requesterId, 'requesterId')}`
|
|
232
|
+
: mentionIds.map((mentionId) => `@${mentionId}`).join(' ');
|
|
233
|
+
const sessionSlug = input.sessionSlug?.trim() ?? '';
|
|
234
|
+
const tail = language === 'zh'
|
|
235
|
+
? sessionSlug === ''
|
|
236
|
+
? `对应原始诉请: ${mentionLine}`
|
|
237
|
+
: `对应原始诉请: ${mentionLine} • ${sessionSlug}`
|
|
238
|
+
: sessionSlug === ''
|
|
239
|
+
? `applies to the original tellask: ${mentionLine}`
|
|
240
|
+
: `applies to the original tellask: ${mentionLine} • ${sessionSlug}`;
|
|
241
|
+
return `${responseBody}\n\n${tail}\n\n${(0, markdown_format_1.markdownQuote)(tellaskContent)}\n`;
|
|
242
|
+
}
|
|
222
243
|
function formatTellaskCarryoverResultContent(input) {
|
|
223
244
|
const language = input.language ?? 'en';
|
|
224
245
|
const tellaskContent = requireNonEmpty(input.tellaskContent, 'tellaskContent');
|