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.
Files changed (129) hide show
  1. package/dist/docs/memory-system.zh.md +1 -0
  2. package/dist/docs/txt-editing-tools.md +2 -0
  3. package/dist/docs/txt-editing-tools.zh.md +1 -0
  4. package/dist/llm/kernel-driver/subdialog.d.ts +2 -0
  5. package/dist/llm/kernel-driver/subdialog.js +9 -4
  6. package/dist/llm/kernel-driver/tellask-special.js +2 -3
  7. package/dist/persistence.js +31 -16
  8. package/dist/priming.js +32 -12
  9. package/dist/runtime/driver-messages.js +4 -4
  10. package/dist/runtime/inter-dialog-format.d.ts +10 -0
  11. package/dist/runtime/inter-dialog-format.js +21 -0
  12. package/dist/server/api-routes.js +212 -89
  13. package/dist/server/auth.d.ts +1 -0
  14. package/dist/server/auth.js +21 -0
  15. package/dist/server/server-core.js +15 -0
  16. package/dist/tools/os.js +129 -31
  17. package/dist/tools/prompts/os/en/tools.md +7 -0
  18. package/dist/tools/prompts/os/zh/tools.md +7 -0
  19. package/dist/tools/prompts/team_mgmt/en/index.md +1 -0
  20. package/dist/tools/prompts/team_mgmt/en/principles.md +1 -0
  21. package/dist/tools/prompts/team_mgmt/en/scenarios.md +2 -0
  22. package/dist/tools/prompts/team_mgmt/zh/index.md +1 -0
  23. package/dist/tools/prompts/team_mgmt/zh/principles.md +1 -0
  24. package/dist/tools/prompts/team_mgmt/zh/scenarios.md +2 -0
  25. package/dist/tools/prompts/ws_mod/en/index.md +1 -0
  26. package/dist/tools/prompts/ws_mod/en/principles.md +1 -0
  27. package/dist/tools/prompts/ws_mod/zh/index.md +1 -0
  28. package/dist/tools/prompts/ws_mod/zh/principles.md +1 -0
  29. package/dist/tools/prompts/ws_mod.en.md +4 -0
  30. package/dist/tools/prompts/ws_mod.zh.md +4 -0
  31. package/dist/tools/team_mgmt.js +2 -2
  32. package/dist/tools/txt.js +21 -11
  33. package/package.json +3 -3
  34. package/webapp/dist/assets/{_basePickBy-BCSeQ8Mb.js → _basePickBy-BfH-AyMu.js} +3 -3
  35. package/webapp/dist/assets/{_basePickBy-BCSeQ8Mb.js.map → _basePickBy-BfH-AyMu.js.map} +1 -1
  36. package/webapp/dist/assets/{_baseUniq-B5WIJgde.js → _baseUniq-BNsMcBuE.js} +2 -2
  37. package/webapp/dist/assets/{_baseUniq-B5WIJgde.js.map → _baseUniq-BNsMcBuE.js.map} +1 -1
  38. package/webapp/dist/assets/{arc-CWDgoT74.js → arc-Bs3CcPvC.js} +2 -2
  39. package/webapp/dist/assets/{arc-CWDgoT74.js.map → arc-Bs3CcPvC.js.map} +1 -1
  40. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DFdZI4Uu.js → architectureDiagram-2XIMDMQ5-C-KYTHQZ.js} +7 -7
  41. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DFdZI4Uu.js.map → architectureDiagram-2XIMDMQ5-C-KYTHQZ.js.map} +1 -1
  42. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DRcKQf9Q.js → blockDiagram-WCTKOSBZ-D9B_SH9m.js} +7 -7
  43. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DRcKQf9Q.js.map → blockDiagram-WCTKOSBZ-D9B_SH9m.js.map} +1 -1
  44. package/webapp/dist/assets/{c4Diagram-IC4MRINW-B0AMlCwV.js → c4Diagram-IC4MRINW-BDMmvUDN.js} +3 -3
  45. package/webapp/dist/assets/{c4Diagram-IC4MRINW-B0AMlCwV.js.map → c4Diagram-IC4MRINW-BDMmvUDN.js.map} +1 -1
  46. package/webapp/dist/assets/{channel-B0ljx2su.js → channel-DkOACQ-Q.js} +2 -2
  47. package/webapp/dist/assets/{channel-B0ljx2su.js.map → channel-DkOACQ-Q.js.map} +1 -1
  48. package/webapp/dist/assets/{chunk-4BX2VUAB-DbKTqY07.js → chunk-4BX2VUAB-C2YYQQdn.js} +2 -2
  49. package/webapp/dist/assets/{chunk-4BX2VUAB-DbKTqY07.js.map → chunk-4BX2VUAB-C2YYQQdn.js.map} +1 -1
  50. package/webapp/dist/assets/{chunk-55IACEB6-DwJgszOl.js → chunk-55IACEB6-BLL_vvlL.js} +2 -2
  51. package/webapp/dist/assets/{chunk-55IACEB6-DwJgszOl.js.map → chunk-55IACEB6-BLL_vvlL.js.map} +1 -1
  52. package/webapp/dist/assets/{chunk-FMBD7UC4-BzUcOjMH.js → chunk-FMBD7UC4-DbvS-iIS.js} +2 -2
  53. package/webapp/dist/assets/{chunk-FMBD7UC4-BzUcOjMH.js.map → chunk-FMBD7UC4-DbvS-iIS.js.map} +1 -1
  54. package/webapp/dist/assets/{chunk-JSJVCQXG-B-adw7iw.js → chunk-JSJVCQXG-BYsOBtUv.js} +2 -2
  55. package/webapp/dist/assets/{chunk-JSJVCQXG-B-adw7iw.js.map → chunk-JSJVCQXG-BYsOBtUv.js.map} +1 -1
  56. package/webapp/dist/assets/{chunk-KX2RTZJC-a1S8VCMi.js → chunk-KX2RTZJC-qqotPQTC.js} +2 -2
  57. package/webapp/dist/assets/{chunk-KX2RTZJC-a1S8VCMi.js.map → chunk-KX2RTZJC-qqotPQTC.js.map} +1 -1
  58. package/webapp/dist/assets/{chunk-NQ4KR5QH-BkpgGRb2.js → chunk-NQ4KR5QH-DtayaIyM.js} +4 -4
  59. package/webapp/dist/assets/{chunk-NQ4KR5QH-BkpgGRb2.js.map → chunk-NQ4KR5QH-DtayaIyM.js.map} +1 -1
  60. package/webapp/dist/assets/{chunk-QZHKN3VN-BzG0M8E7.js → chunk-QZHKN3VN-ByCgInOy.js} +2 -2
  61. package/webapp/dist/assets/{chunk-QZHKN3VN-BzG0M8E7.js.map → chunk-QZHKN3VN-ByCgInOy.js.map} +1 -1
  62. package/webapp/dist/assets/{chunk-WL4C6EOR-Jdr3sqWq.js → chunk-WL4C6EOR-n6R_kv7j.js} +6 -6
  63. package/webapp/dist/assets/{chunk-WL4C6EOR-Jdr3sqWq.js.map → chunk-WL4C6EOR-n6R_kv7j.js.map} +1 -1
  64. package/webapp/dist/assets/{classDiagram-VBA2DB6C-Bgs-IGF1.js → classDiagram-VBA2DB6C-Cr6hx981.js} +7 -7
  65. package/webapp/dist/assets/{classDiagram-VBA2DB6C-Bgs-IGF1.js.map → classDiagram-VBA2DB6C-Cr6hx981.js.map} +1 -1
  66. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Bgs-IGF1.js → classDiagram-v2-RAHNMMFH-Cr6hx981.js} +7 -7
  67. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Bgs-IGF1.js.map → classDiagram-v2-RAHNMMFH-Cr6hx981.js.map} +1 -1
  68. package/webapp/dist/assets/{clone-8W6qtrsz.js → clone-CVYUyjRt.js} +2 -2
  69. package/webapp/dist/assets/{clone-8W6qtrsz.js.map → clone-CVYUyjRt.js.map} +1 -1
  70. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-gwXVRMa3.js → cose-bilkent-S5V4N54A-CbVvMD8B.js} +2 -2
  71. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-gwXVRMa3.js.map → cose-bilkent-S5V4N54A-CbVvMD8B.js.map} +1 -1
  72. package/webapp/dist/assets/{dagre-KLK3FWXG-CgLK6cUW.js → dagre-KLK3FWXG-BuefmyeA.js} +7 -7
  73. package/webapp/dist/assets/{dagre-KLK3FWXG-CgLK6cUW.js.map → dagre-KLK3FWXG-BuefmyeA.js.map} +1 -1
  74. package/webapp/dist/assets/{diagram-E7M64L7V-BUDea9FM.js → diagram-E7M64L7V-DbxkA6bq.js} +8 -8
  75. package/webapp/dist/assets/{diagram-E7M64L7V-BUDea9FM.js.map → diagram-E7M64L7V-DbxkA6bq.js.map} +1 -1
  76. package/webapp/dist/assets/{diagram-IFDJBPK2-CiVS6fbK.js → diagram-IFDJBPK2-6eTYxZlY.js} +7 -7
  77. package/webapp/dist/assets/{diagram-IFDJBPK2-CiVS6fbK.js.map → diagram-IFDJBPK2-6eTYxZlY.js.map} +1 -1
  78. package/webapp/dist/assets/{diagram-P4PSJMXO-DpYGO4Wi.js → diagram-P4PSJMXO-BaxnuVrQ.js} +7 -7
  79. package/webapp/dist/assets/{diagram-P4PSJMXO-DpYGO4Wi.js.map → diagram-P4PSJMXO-BaxnuVrQ.js.map} +1 -1
  80. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cz1TI05E.js → erDiagram-INFDFZHY-CdM7JIpN.js} +5 -5
  81. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cz1TI05E.js.map → erDiagram-INFDFZHY-CdM7JIpN.js.map} +1 -1
  82. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CxjVowsG.js → flowDiagram-PKNHOUZH-DWXwTxvt.js} +7 -7
  83. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CxjVowsG.js.map → flowDiagram-PKNHOUZH-DWXwTxvt.js.map} +1 -1
  84. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C3t2AHs5.js → ganttDiagram-A5KZAMGK-icFBfjxa.js} +3 -3
  85. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C3t2AHs5.js.map → ganttDiagram-A5KZAMGK-icFBfjxa.js.map} +1 -1
  86. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D3Fz3qNA.js → gitGraphDiagram-K3NZZRJ6-DvG6Al7K.js} +8 -8
  87. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D3Fz3qNA.js.map → gitGraphDiagram-K3NZZRJ6-DvG6Al7K.js.map} +1 -1
  88. package/webapp/dist/assets/{graph-DEeBvsT_.js → graph-DttgpnyF.js} +3 -3
  89. package/webapp/dist/assets/{graph-DEeBvsT_.js.map → graph-DttgpnyF.js.map} +1 -1
  90. package/webapp/dist/assets/{index-D-SgXZTb.js → index-glyVn6qA.js} +1059 -268
  91. package/webapp/dist/assets/index-glyVn6qA.js.map +1 -0
  92. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CcsQeBG4.js → infoDiagram-LFFYTUFH-Be7NVGsk.js} +6 -6
  93. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CcsQeBG4.js.map → infoDiagram-LFFYTUFH-Be7NVGsk.js.map} +1 -1
  94. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CAV8iv45.js → ishikawaDiagram-PHBUUO56-aBgICO2W.js} +2 -2
  95. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CAV8iv45.js.map → ishikawaDiagram-PHBUUO56-aBgICO2W.js.map} +1 -1
  96. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C_mKL3Wf.js → journeyDiagram-4ABVD52K-6ZhQR2pT.js} +5 -5
  97. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C_mKL3Wf.js.map → journeyDiagram-4ABVD52K-6ZhQR2pT.js.map} +1 -1
  98. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Ptg6jh3y.js → kanban-definition-K7BYSVSG-BD5WcwkZ.js} +3 -3
  99. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Ptg6jh3y.js.map → kanban-definition-K7BYSVSG-BD5WcwkZ.js.map} +1 -1
  100. package/webapp/dist/assets/{layout-vY-lESK1.js → layout-BicT-AKX.js} +5 -5
  101. package/webapp/dist/assets/{layout-vY-lESK1.js.map → layout-BicT-AKX.js.map} +1 -1
  102. package/webapp/dist/assets/{linear-Cw12N-49.js → linear-mfPB9dWF.js} +2 -2
  103. package/webapp/dist/assets/{linear-Cw12N-49.js.map → linear-mfPB9dWF.js.map} +1 -1
  104. package/webapp/dist/assets/{mindmap-definition-YRQLILUH--gGSoZfe.js → mindmap-definition-YRQLILUH-kLbwaG3m.js} +4 -4
  105. package/webapp/dist/assets/{mindmap-definition-YRQLILUH--gGSoZfe.js.map → mindmap-definition-YRQLILUH-kLbwaG3m.js.map} +1 -1
  106. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DBQkeFNk.js → pieDiagram-SKSYHLDU-C2kjOvDJ.js} +8 -8
  107. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DBQkeFNk.js.map → pieDiagram-SKSYHLDU-C2kjOvDJ.js.map} +1 -1
  108. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRqQEQ5R.js → quadrantDiagram-337W2JSQ-EBFouDoS.js} +3 -3
  109. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRqQEQ5R.js.map → quadrantDiagram-337W2JSQ-EBFouDoS.js.map} +1 -1
  110. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bg-ZQVHw.js → requirementDiagram-Z7DCOOCP-q8a4FaYa.js} +4 -4
  111. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bg-ZQVHw.js.map → requirementDiagram-Z7DCOOCP-q8a4FaYa.js.map} +1 -1
  112. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-ADkSZ215.js → sankeyDiagram-WA2Y5GQK-BQB-fWeY.js} +2 -2
  113. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-ADkSZ215.js.map → sankeyDiagram-WA2Y5GQK-BQB-fWeY.js.map} +1 -1
  114. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-D4N6ze3Y.js → sequenceDiagram-2WXFIKYE-VQq6HFC4.js} +4 -4
  115. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-D4N6ze3Y.js.map → sequenceDiagram-2WXFIKYE-VQq6HFC4.js.map} +1 -1
  116. package/webapp/dist/assets/{stateDiagram-RAJIS63D-vNdpo2RN.js → stateDiagram-RAJIS63D-CYdwXt96.js} +9 -9
  117. package/webapp/dist/assets/{stateDiagram-RAJIS63D-vNdpo2RN.js.map → stateDiagram-RAJIS63D-CYdwXt96.js.map} +1 -1
  118. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DklmFziq.js → stateDiagram-v2-FVOUBMTO-BtL9yVRW.js} +5 -5
  119. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DklmFziq.js.map → stateDiagram-v2-FVOUBMTO-BtL9yVRW.js.map} +1 -1
  120. package/webapp/dist/assets/{timeline-definition-YZTLITO2-BrGjv8Mt.js → timeline-definition-YZTLITO2-Mir0gPkJ.js} +3 -3
  121. package/webapp/dist/assets/{timeline-definition-YZTLITO2-BrGjv8Mt.js.map → timeline-definition-YZTLITO2-Mir0gPkJ.js.map} +1 -1
  122. package/webapp/dist/assets/{treemap-KZPCXAKY-CuF9Fl6a.js → treemap-KZPCXAKY-BZkUTsQ5.js} +5 -5
  123. package/webapp/dist/assets/{treemap-KZPCXAKY-CuF9Fl6a.js.map → treemap-KZPCXAKY-BZkUTsQ5.js.map} +1 -1
  124. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BsWMgmkQ.js → vennDiagram-LZ73GAT5-01He2Gl0.js} +2 -2
  125. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BsWMgmkQ.js.map → vennDiagram-LZ73GAT5-01He2Gl0.js.map} +1 -1
  126. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-MwmjJKc5.js → xychartDiagram-JWTSCODW-D1Igvf_e.js} +3 -3
  127. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-MwmjJKc5.js.map → xychartDiagram-JWTSCODW-D1Igvf_e.js.map} +1 -1
  128. package/webapp/dist/index.html +1 -1
  129. 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.callingCourse !== undefined
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.formatTellaskResponseContent)({
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);
@@ -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
- type: 'tellask_call_anchor_evt',
2265
- course,
2266
- genseq: event.genseq,
2267
- anchorRole: event.anchorRole ?? 'response',
2268
- callId: event.callId,
2269
- assignmentCourse: event.assignmentCourse,
2270
- assignmentGenseq: event.assignmentGenseq,
2271
- callerDialogId: event.callerDialogId,
2272
- callerCourse: event.callerCourse,
2273
- dialog: {
2274
- selfId: dialog.id.selfId,
2275
- rootId: dialog.id.rootId,
2276
- },
2277
- timestamp: event.ts,
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 record = {
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
- if (assignmentCourse !== undefined) {
761
- record.assignmentCourse = (0, storage_1.toAssignmentCourseNumber)(assignmentCourse);
762
- }
763
- if (assignmentGenseq !== undefined) {
764
- record.assignmentGenseq = (0, storage_1.toAssignmentGenerationSeqNumber)(assignmentGenseq);
765
- }
766
- if (callerDialogId !== undefined)
767
- record.callerDialogId = callerDialogId;
768
- if (callerCourse !== undefined) {
769
- record.callerCourse = (0, storage_1.toCallerCourseNumber)(callerCourse);
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 from your updated request, so follow the later request from here.',
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, not as an automatic must-do command.
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');