dominds 1.3.1 → 1.4.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.
Files changed (184) hide show
  1. package/README.md +9 -2
  2. package/README.zh.md +9 -2
  3. package/dist/apps/app-lock-file.js +33 -57
  4. package/dist/apps/configuration-file.js +267 -0
  5. package/dist/apps/enabled-apps.js +217 -252
  6. package/dist/apps/manifest.js +132 -0
  7. package/dist/apps/resolution-file.js +80 -192
  8. package/dist/apps/workspace-app-state.js +8 -0
  9. package/dist/cli/disable.js +18 -22
  10. package/dist/cli/enable.js +20 -58
  11. package/dist/cli/install.js +74 -80
  12. package/dist/cli/uninstall.js +48 -25
  13. package/dist/cli/update.js +36 -80
  14. package/dist/docs/app-constitution.md +12 -7
  15. package/dist/docs/app-constitution.zh.md +13 -8
  16. package/dist/llm/kernel-driver/engine.js +10 -4
  17. package/dist/llm/kernel-driver/flow.js +93 -0
  18. package/dist/llm/kernel-driver/loop.js +4 -1
  19. package/dist/llm/kernel-driver/subdialog.js +5 -1
  20. package/dist/llm/kernel-driver/tellask-special.js +48 -6
  21. package/dist/server/server-core.js +19 -4
  22. package/dist/server/websocket-handler.js +26 -6
  23. package/dist/static/assets/{_basePickBy-CmziIRM9.js → _basePickBy-B2o4z1Hf.js} +3 -3
  24. package/dist/static/assets/{_basePickBy-CmziIRM9.js.map → _basePickBy-B2o4z1Hf.js.map} +1 -1
  25. package/dist/static/assets/{_baseUniq-CgDZxcD0.js → _baseUniq-CLmcxjdl.js} +2 -2
  26. package/dist/static/assets/{_baseUniq-CgDZxcD0.js.map → _baseUniq-CLmcxjdl.js.map} +1 -1
  27. package/dist/static/assets/{arc-Df9rjNNk.js → arc-CymD_KN7.js} +2 -2
  28. package/dist/static/assets/{arc-Df9rjNNk.js.map → arc-CymD_KN7.js.map} +1 -1
  29. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Bif8topC.js → architectureDiagram-VXUJARFQ-DJQfSJUH.js} +7 -7
  30. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Bif8topC.js.map → architectureDiagram-VXUJARFQ-DJQfSJUH.js.map} +1 -1
  31. package/dist/static/assets/{blockDiagram-VD42YOAC-D9Egoflr.js → blockDiagram-VD42YOAC-pHVz60D0.js} +7 -7
  32. package/dist/static/assets/{blockDiagram-VD42YOAC-D9Egoflr.js.map → blockDiagram-VD42YOAC-pHVz60D0.js.map} +1 -1
  33. package/dist/static/assets/{c4Diagram-YG6GDRKO-DBf1NeBf.js → c4Diagram-YG6GDRKO-B0WnCfAT.js} +3 -3
  34. package/dist/static/assets/{c4Diagram-YG6GDRKO-DBf1NeBf.js.map → c4Diagram-YG6GDRKO-B0WnCfAT.js.map} +1 -1
  35. package/dist/static/assets/{channel-Dc34yAJl.js → channel-CX9BlKil.js} +2 -2
  36. package/dist/static/assets/{channel-Dc34yAJl.js.map → channel-CX9BlKil.js.map} +1 -1
  37. package/dist/static/assets/{chunk-4BX2VUAB-B65G1dJI.js → chunk-4BX2VUAB-lXArRj3o.js} +2 -2
  38. package/dist/static/assets/{chunk-4BX2VUAB-B65G1dJI.js.map → chunk-4BX2VUAB-lXArRj3o.js.map} +1 -1
  39. package/dist/static/assets/{chunk-55IACEB6-CSDEOGl2.js → chunk-55IACEB6-CdqwynH9.js} +2 -2
  40. package/dist/static/assets/{chunk-55IACEB6-CSDEOGl2.js.map → chunk-55IACEB6-CdqwynH9.js.map} +1 -1
  41. package/dist/static/assets/{chunk-B4BG7PRW-Cb6W3QWJ.js → chunk-B4BG7PRW-Y-uXcJst.js} +5 -5
  42. package/dist/static/assets/{chunk-B4BG7PRW-Cb6W3QWJ.js.map → chunk-B4BG7PRW-Y-uXcJst.js.map} +1 -1
  43. package/dist/static/assets/{chunk-DI55MBZ5-ZAJWeVWH.js → chunk-DI55MBZ5-C5xSbRST.js} +4 -4
  44. package/dist/static/assets/{chunk-DI55MBZ5-ZAJWeVWH.js.map → chunk-DI55MBZ5-C5xSbRST.js.map} +1 -1
  45. package/dist/static/assets/{chunk-FMBD7UC4-DiwRlImb.js → chunk-FMBD7UC4-5uefwCjI.js} +2 -2
  46. package/dist/static/assets/{chunk-FMBD7UC4-DiwRlImb.js.map → chunk-FMBD7UC4-5uefwCjI.js.map} +1 -1
  47. package/dist/static/assets/{chunk-QN33PNHL-wilj7fb5.js → chunk-QN33PNHL-DzWVcvpI.js} +2 -2
  48. package/dist/static/assets/{chunk-QN33PNHL-wilj7fb5.js.map → chunk-QN33PNHL-DzWVcvpI.js.map} +1 -1
  49. package/dist/static/assets/{chunk-QZHKN3VN-DGmviJfR.js → chunk-QZHKN3VN-BrrvAZdP.js} +2 -2
  50. package/dist/static/assets/{chunk-QZHKN3VN-DGmviJfR.js.map → chunk-QZHKN3VN-BrrvAZdP.js.map} +1 -1
  51. package/dist/static/assets/{chunk-TZMSLE5B-Nm5wTXa_.js → chunk-TZMSLE5B-DyKOlPTY.js} +2 -2
  52. package/dist/static/assets/{chunk-TZMSLE5B-Nm5wTXa_.js.map → chunk-TZMSLE5B-DyKOlPTY.js.map} +1 -1
  53. package/dist/static/assets/{classDiagram-2ON5EDUG-BvUbXD6H.js → classDiagram-2ON5EDUG-FCrnlCWC.js} +6 -6
  54. package/dist/static/assets/{classDiagram-2ON5EDUG-BvUbXD6H.js.map → classDiagram-2ON5EDUG-FCrnlCWC.js.map} +1 -1
  55. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BvUbXD6H.js → classDiagram-v2-WZHVMYZB-FCrnlCWC.js} +6 -6
  56. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BvUbXD6H.js.map → classDiagram-v2-WZHVMYZB-FCrnlCWC.js.map} +1 -1
  57. package/dist/static/assets/{clone-0VLS7GaA.js → clone-BlI81KqZ.js} +2 -2
  58. package/dist/static/assets/{clone-0VLS7GaA.js.map → clone-BlI81KqZ.js.map} +1 -1
  59. package/dist/static/assets/{cose-bilkent-S5V4N54A-anaPs-75.js → cose-bilkent-S5V4N54A-yM7S2atz.js} +2 -2
  60. package/dist/static/assets/{cose-bilkent-S5V4N54A-anaPs-75.js.map → cose-bilkent-S5V4N54A-yM7S2atz.js.map} +1 -1
  61. package/dist/static/assets/{dagre-6UL2VRFP-YwdsZ11r.js → dagre-6UL2VRFP-BcweuZHt.js} +7 -7
  62. package/dist/static/assets/{dagre-6UL2VRFP-YwdsZ11r.js.map → dagre-6UL2VRFP-BcweuZHt.js.map} +1 -1
  63. package/dist/static/assets/{diagram-PSM6KHXK-5KQCf3h2.js → diagram-PSM6KHXK-D4-QwLW1.js} +8 -8
  64. package/dist/static/assets/{diagram-PSM6KHXK-5KQCf3h2.js.map → diagram-PSM6KHXK-D4-QwLW1.js.map} +1 -1
  65. package/dist/static/assets/{diagram-QEK2KX5R-Mf24XxZL.js → diagram-QEK2KX5R-BVbuejJn.js} +7 -7
  66. package/dist/static/assets/{diagram-QEK2KX5R-Mf24XxZL.js.map → diagram-QEK2KX5R-BVbuejJn.js.map} +1 -1
  67. package/dist/static/assets/{diagram-S2PKOQOG-DyQjD4D5.js → diagram-S2PKOQOG-pB6N6Tq_.js} +7 -7
  68. package/dist/static/assets/{diagram-S2PKOQOG-DyQjD4D5.js.map → diagram-S2PKOQOG-pB6N6Tq_.js.map} +1 -1
  69. package/dist/static/assets/{erDiagram-Q2GNP2WA-CEzTKw1u.js → erDiagram-Q2GNP2WA-DLKmthuw.js} +5 -5
  70. package/dist/static/assets/{erDiagram-Q2GNP2WA-CEzTKw1u.js.map → erDiagram-Q2GNP2WA-DLKmthuw.js.map} +1 -1
  71. package/dist/static/assets/{flowDiagram-NV44I4VS-DT821XSz.js → flowDiagram-NV44I4VS-BsBhWukh.js} +6 -6
  72. package/dist/static/assets/{flowDiagram-NV44I4VS-DT821XSz.js.map → flowDiagram-NV44I4VS-BsBhWukh.js.map} +1 -1
  73. package/dist/static/assets/{ganttDiagram-JELNMOA3-DlmeVsGg.js → ganttDiagram-JELNMOA3-Debz-J-C.js} +3 -3
  74. package/dist/static/assets/{ganttDiagram-JELNMOA3-DlmeVsGg.js.map → ganttDiagram-JELNMOA3-Debz-J-C.js.map} +1 -1
  75. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yAfyBG_d.js → gitGraphDiagram-V2S2FVAM-BnAPFBGR.js} +8 -8
  76. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yAfyBG_d.js.map → gitGraphDiagram-V2S2FVAM-BnAPFBGR.js.map} +1 -1
  77. package/dist/static/assets/{graph-BYv8vyWe.js → graph-DbzWiBNK.js} +3 -3
  78. package/dist/static/assets/{graph-BYv8vyWe.js.map → graph-DbzWiBNK.js.map} +1 -1
  79. package/dist/static/assets/{index-DMbwqOm6.js → index-B-8J28g7.js} +987 -1049
  80. package/dist/static/assets/index-B-8J28g7.js.map +1 -0
  81. package/dist/static/assets/{index-BiNcBn_U.css → index-CD5wtC_i.css} +1 -1
  82. package/dist/static/assets/{infoDiagram-HS3SLOUP-DaadramQ.js → infoDiagram-HS3SLOUP-CZ5hWoxV.js} +6 -6
  83. package/dist/static/assets/{infoDiagram-HS3SLOUP-DaadramQ.js.map → infoDiagram-HS3SLOUP-CZ5hWoxV.js.map} +1 -1
  84. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ftN8hxu3.js → journeyDiagram-XKPGCS4Q-CKN3oSxk.js} +5 -5
  85. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ftN8hxu3.js.map → journeyDiagram-XKPGCS4Q-CKN3oSxk.js.map} +1 -1
  86. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BIXETQ-C.js → kanban-definition-3W4ZIXB7-BQCMklfJ.js} +3 -3
  87. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BIXETQ-C.js.map → kanban-definition-3W4ZIXB7-BQCMklfJ.js.map} +1 -1
  88. package/dist/static/assets/{layout-OTbrj0Ye.js → layout-C5B58szc.js} +5 -5
  89. package/dist/static/assets/{layout-OTbrj0Ye.js.map → layout-C5B58szc.js.map} +1 -1
  90. package/dist/static/assets/{linear-CVfOC669.js → linear-_32fut6G.js} +2 -2
  91. package/dist/static/assets/{linear-CVfOC669.js.map → linear-_32fut6G.js.map} +1 -1
  92. package/dist/static/assets/{mindmap-definition-VGOIOE7T-D2zv5uI9.js → mindmap-definition-VGOIOE7T-C_goMzjx.js} +4 -4
  93. package/dist/static/assets/{mindmap-definition-VGOIOE7T-D2zv5uI9.js.map → mindmap-definition-VGOIOE7T-C_goMzjx.js.map} +1 -1
  94. package/dist/static/assets/{pieDiagram-ADFJNKIX-DaUXTsv7.js → pieDiagram-ADFJNKIX-BQ2n0cOB.js} +8 -8
  95. package/dist/static/assets/{pieDiagram-ADFJNKIX-DaUXTsv7.js.map → pieDiagram-ADFJNKIX-BQ2n0cOB.js.map} +1 -1
  96. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-B7O2wPX9.js → quadrantDiagram-AYHSOK5B-BLg7_neg.js} +3 -3
  97. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-B7O2wPX9.js.map → quadrantDiagram-AYHSOK5B-BLg7_neg.js.map} +1 -1
  98. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DpauVPY1.js → requirementDiagram-UZGBJVZJ-DwkJt0zi.js} +4 -4
  99. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DpauVPY1.js.map → requirementDiagram-UZGBJVZJ-DwkJt0zi.js.map} +1 -1
  100. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B3Hbfvad.js → sankeyDiagram-TZEHDZUN-DmxmatUB.js} +2 -2
  101. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B3Hbfvad.js.map → sankeyDiagram-TZEHDZUN-DmxmatUB.js.map} +1 -1
  102. package/dist/static/assets/{sequenceDiagram-WL72ISMW-KdbWByWT.js → sequenceDiagram-WL72ISMW-KHU_eApU.js} +4 -4
  103. package/dist/static/assets/{sequenceDiagram-WL72ISMW-KdbWByWT.js.map → sequenceDiagram-WL72ISMW-KHU_eApU.js.map} +1 -1
  104. package/dist/static/assets/{stateDiagram-FKZM4ZOC-yDOCVezC.js → stateDiagram-FKZM4ZOC-B3DBCxAL.js} +9 -9
  105. package/dist/static/assets/{stateDiagram-FKZM4ZOC-yDOCVezC.js.map → stateDiagram-FKZM4ZOC-B3DBCxAL.js.map} +1 -1
  106. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CpCJhvQO.js → stateDiagram-v2-4FDKWEC3-C-uIk7gh.js} +5 -5
  107. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CpCJhvQO.js.map → stateDiagram-v2-4FDKWEC3-C-uIk7gh.js.map} +1 -1
  108. package/dist/static/assets/{timeline-definition-IT6M3QCI-CHxuEjhV.js → timeline-definition-IT6M3QCI-SysEcQCC.js} +3 -3
  109. package/dist/static/assets/{timeline-definition-IT6M3QCI-CHxuEjhV.js.map → timeline-definition-IT6M3QCI-SysEcQCC.js.map} +1 -1
  110. package/dist/static/assets/{treemap-GDKQZRPO-Bsqu3wIy.js → treemap-GDKQZRPO-d0AbKEc4.js} +5 -5
  111. package/dist/static/assets/{treemap-GDKQZRPO-Bsqu3wIy.js.map → treemap-GDKQZRPO-d0AbKEc4.js.map} +1 -1
  112. package/dist/static/assets/{xychartDiagram-PRI3JC2R-RZy33lFF.js → xychartDiagram-PRI3JC2R-CmSQMxUh.js} +3 -3
  113. package/dist/static/assets/{xychartDiagram-PRI3JC2R-RZy33lFF.js.map → xychartDiagram-PRI3JC2R-CmSQMxUh.js.map} +1 -1
  114. package/dist/static/index.html +2 -2
  115. package/dist/tools/fs.js +1 -1
  116. package/package.json +9 -7
  117. package/dist/agent-priming.js +0 -2051
  118. package/dist/apps/installed-file.js +0 -207
  119. package/dist/apps/runtime-port.js +0 -91
  120. package/dist/docs/dominds-agent-priming.md +0 -218
  121. package/dist/docs/dominds-agent-priming.zh.md +0 -196
  122. package/dist/docs/drive-logic-context-refactor-plan.zh.md +0 -338
  123. package/dist/docs/keep-going.md +0 -176
  124. package/dist/docs/keep-going.zh.md +0 -162
  125. package/dist/docs/kernel-app-architecture.md +0 -286
  126. package/dist/docs/kernel-app-architecture.zh.md +0 -285
  127. package/dist/docs/showing-by-doing.md +0 -208
  128. package/dist/docs/showing-by-doing.zh.md +0 -177
  129. package/dist/docs/team-mgmt-toolset.md +0 -482
  130. package/dist/docs/team-mgmt-toolset.zh.md +0 -426
  131. package/dist/llm/driver-entry.js +0 -28
  132. package/dist/llm/driver-v2/context-health.js +0 -121
  133. package/dist/llm/driver-v2/context.js +0 -56
  134. package/dist/llm/driver-v2/core.js +0 -1545
  135. package/dist/llm/driver-v2/index.js +0 -26
  136. package/dist/llm/driver-v2/orchestrator.js +0 -158
  137. package/dist/llm/driver-v2/policy.js +0 -129
  138. package/dist/llm/driver-v2/restore-dialog-hierarchy.js +0 -73
  139. package/dist/llm/driver-v2/round.js +0 -366
  140. package/dist/llm/driver-v2/runtime-utils.js +0 -365
  141. package/dist/llm/driver-v2/saying-events.js +0 -20
  142. package/dist/llm/driver-v2/subdialog-txn.js +0 -42
  143. package/dist/llm/driver-v2/supdialog-response.js +0 -400
  144. package/dist/llm/driver-v2/tellask-bridge.js +0 -1148
  145. package/dist/llm/driver-v2/types.js +0 -10
  146. package/dist/llm/driver-v2-ref-only/context-health.js +0 -121
  147. package/dist/llm/driver-v2-ref-only/context.js +0 -17
  148. package/dist/llm/driver-v2-ref-only/core.js +0 -1710
  149. package/dist/llm/driver-v2-ref-only/index.js +0 -26
  150. package/dist/llm/driver-v2-ref-only/orchestrator.js +0 -158
  151. package/dist/llm/driver-v2-ref-only/policy.js +0 -129
  152. package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +0 -73
  153. package/dist/llm/driver-v2-ref-only/round.js +0 -366
  154. package/dist/llm/driver-v2-ref-only/runtime-utils.js +0 -473
  155. package/dist/llm/driver-v2-ref-only/saying-events.js +0 -18
  156. package/dist/llm/driver-v2-ref-only/subdialog-txn.js +0 -42
  157. package/dist/llm/driver-v2-ref-only/supdialog-response.js +0 -453
  158. package/dist/llm/driver-v2-ref-only/tellask-bridge.js +0 -1178
  159. package/dist/llm/driver-v2-ref-only/types.js +0 -10
  160. package/dist/llm/driver.js +0 -4093
  161. package/dist/minds/promptdocs.js +0 -263
  162. package/dist/server/prompts-routes.js +0 -545
  163. package/dist/shared/team-mgmt-manual.js +0 -120
  164. package/dist/shared/types/prompts.js +0 -2
  165. package/dist/shared/types/tellask.js +0 -8
  166. package/dist/showing-by-doing.js +0 -1091
  167. package/dist/snippets/README.en.md +0 -3
  168. package/dist/snippets/README.md +0 -4
  169. package/dist/static/assets/index-DMbwqOm6.js.map +0 -1
  170. package/dist/tellask.js +0 -439
  171. package/dist/tools/context-health.js +0 -177
  172. package/dist/tools/diag.js +0 -583
  173. package/dist/tools/prompts/memory/en/errors.md +0 -155
  174. package/dist/tools/prompts/memory/en/index.md +0 -47
  175. package/dist/tools/prompts/memory/en/principles.md +0 -87
  176. package/dist/tools/prompts/memory/en/scenarios.md +0 -174
  177. package/dist/tools/prompts/memory/en/tools.md +0 -129
  178. package/dist/tools/prompts/memory/zh/errors.md +0 -155
  179. package/dist/tools/prompts/memory/zh/index.md +0 -47
  180. package/dist/tools/prompts/memory/zh/principles.md +0 -89
  181. package/dist/tools/prompts/memory/zh/scenarios.md +0 -174
  182. package/dist/tools/prompts/memory/zh/tools.md +0 -129
  183. package/dist/tools/team-mgmt.js +0 -3487
  184. package/dist/utils/task-doc.js +0 -236
@@ -1,583 +0,0 @@
1
- "use strict";
2
- /**
3
- * Module: tools/diag
4
- *
5
- * Diagnostic tools for developers to inspect internal parsing/streaming behavior.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.verifyTellaskParsingTool = void 0;
9
- const tellask_1 = require("../tellask");
10
- function parseVerifyTellaskParsingArgs(args) {
11
- const text = args.text;
12
- if (typeof text !== 'string') {
13
- throw new Error(`verify_tellask_parsing.text must be a string`);
14
- }
15
- const includeEventsValue = args.include_events;
16
- const includeEvents = includeEventsValue === undefined ? true : includeEventsValue === true ? true : false;
17
- const maxEventsValue = args.max_events;
18
- const maxEvents = typeof maxEventsValue === 'number' && Number.isInteger(maxEventsValue) && maxEventsValue > 0
19
- ? maxEventsValue
20
- : 600;
21
- const upstreamChunkSizeValue = args.upstream_chunk_size;
22
- const upstreamChunkSize = typeof upstreamChunkSizeValue === 'number' &&
23
- Number.isInteger(upstreamChunkSizeValue) &&
24
- upstreamChunkSizeValue > 0
25
- ? upstreamChunkSizeValue
26
- : 10;
27
- const chunkSizesPlanValue = args.chunk_sizes;
28
- const chunkSizesPlan = parseOptionalIntArray(chunkSizesPlanValue, 'verify_tellask_parsing.chunk_sizes');
29
- const invarianceChunkSizesValue = args.invariance_chunk_sizes;
30
- const invarianceChunkSizesParsed = parseOptionalIntArray(invarianceChunkSizesValue, 'verify_tellask_parsing.invariance_chunk_sizes');
31
- const invarianceChunkSizes = invarianceChunkSizesParsed !== null
32
- ? invarianceChunkSizesParsed.filter((n) => n > 0)
33
- : [1, 2, 3, 4, 5, 7, 10, 16, 32];
34
- const randomSeedsValue = args.random_invariance_seeds;
35
- const randomInvarianceSeedsParsed = parseOptionalIntArray(randomSeedsValue, 'verify_tellask_parsing.random_invariance_seeds');
36
- const randomInvarianceSeeds = randomInvarianceSeedsParsed !== null ? randomInvarianceSeedsParsed : [1, 2, 3, 4, 5, 123, 999];
37
- const randomMaxValue = args.random_invariance_max_chunk_size;
38
- const randomInvarianceMaxChunkSize = typeof randomMaxValue === 'number' && Number.isInteger(randomMaxValue) && randomMaxValue > 0
39
- ? randomMaxValue
40
- : 32;
41
- return {
42
- text,
43
- upstreamChunkSize,
44
- chunkSizesPlan,
45
- invarianceChunkSizes,
46
- randomInvarianceSeeds,
47
- randomInvarianceMaxChunkSize,
48
- includeEvents,
49
- maxEvents,
50
- };
51
- }
52
- function parseOptionalIntArray(value, name) {
53
- if (value === undefined)
54
- return null;
55
- if (!Array.isArray(value)) {
56
- throw new Error(`${name} must be an array of integers if provided`);
57
- }
58
- const out = [];
59
- for (const v of value) {
60
- if (typeof v !== 'number' || !Number.isInteger(v)) {
61
- throw new Error(`${name} must be an array of integers if provided`);
62
- }
63
- out.push(v);
64
- }
65
- return out;
66
- }
67
- function previewText(value, maxLen) {
68
- if (value.length <= maxLen)
69
- return value;
70
- return `${value.slice(0, maxLen)}…`;
71
- }
72
- class DiagTellaskReceiver {
73
- constructor() {
74
- this.events = [];
75
- this.currentUpstreamChunkIndex = -1;
76
- this.currentUpstreamChunkSize = 0;
77
- }
78
- setUpstreamChunkContext(index, size) {
79
- this.currentUpstreamChunkIndex = index;
80
- this.currentUpstreamChunkSize = size;
81
- }
82
- upstreamCtx() {
83
- return {
84
- upstreamChunkIndex: this.currentUpstreamChunkIndex,
85
- upstreamChunkSize: this.currentUpstreamChunkSize,
86
- };
87
- }
88
- async markdownStart() {
89
- this.events.push({ kind: 'markdownStart' });
90
- }
91
- async markdownChunk(chunk) {
92
- this.events.push({ kind: 'markdownChunk', chunk, ...this.upstreamCtx() });
93
- }
94
- async markdownFinish() {
95
- this.events.push({ kind: 'markdownFinish' });
96
- }
97
- async callStart(validation) {
98
- this.events.push({ kind: 'callStart', validation });
99
- }
100
- async callHeadLineChunk(chunk) {
101
- this.events.push({ kind: 'callHeadLineChunk', chunk, ...this.upstreamCtx() });
102
- }
103
- async callHeadLineFinish() {
104
- this.events.push({ kind: 'callHeadLineFinish' });
105
- }
106
- async tellaskBodyStart() {
107
- this.events.push({ kind: 'tellaskBodyStart' });
108
- }
109
- async tellaskBodyChunk(chunk) {
110
- this.events.push({ kind: 'tellaskBodyChunk', chunk, ...this.upstreamCtx() });
111
- }
112
- async tellaskBodyFinish() {
113
- this.events.push({ kind: 'tellaskBodyFinish' });
114
- }
115
- async callFinish(call, _upstreamEndOffset) {
116
- this.events.push({ kind: 'callFinish', callId: call.callId });
117
- }
118
- }
119
- function segmentsDiff(baseline, got) {
120
- const maxLen = Math.max(baseline.length, got.length);
121
- for (let i = 0; i < maxLen; i++) {
122
- const aSeg = i < baseline.length ? baseline[i] : null;
123
- const bSeg = i < got.length ? got[i] : null;
124
- if (aSeg === null || bSeg === null) {
125
- return { kind: 'different', atIndex: i, baseline: aSeg, got: bSeg };
126
- }
127
- if (!segmentEqual(aSeg, bSeg)) {
128
- return { kind: 'different', atIndex: i, baseline: aSeg, got: bSeg };
129
- }
130
- }
131
- return { kind: 'equal' };
132
- }
133
- function segmentEqual(a, b) {
134
- if (a.kind !== b.kind)
135
- return false;
136
- switch (a.kind) {
137
- case 'markdown':
138
- return a.text === b.text;
139
- case 'call': {
140
- const bb = b;
141
- return (JSON.stringify(a.validation) === JSON.stringify(bb.validation) &&
142
- a.tellaskHead === bb.tellaskHead &&
143
- a.body === bb.body &&
144
- a.callId === bb.callId);
145
- }
146
- default: {
147
- const _exhaustive = a;
148
- return _exhaustive;
149
- }
150
- }
151
- }
152
- function eventsToSegments(events) {
153
- const segments = [];
154
- let currentMarkdown = null;
155
- let currentCall = null;
156
- for (const ev of events) {
157
- switch (ev.kind) {
158
- case 'markdownStart':
159
- currentMarkdown = { kind: 'markdown', text: '' };
160
- break;
161
- case 'markdownChunk': {
162
- const text = ev.chunk;
163
- if (!currentMarkdown)
164
- currentMarkdown = { kind: 'markdown', text: '' };
165
- currentMarkdown.text += text;
166
- break;
167
- }
168
- case 'markdownFinish':
169
- if (currentMarkdown)
170
- segments.push(currentMarkdown);
171
- currentMarkdown = null;
172
- break;
173
- case 'callStart':
174
- currentCall = {
175
- kind: 'call',
176
- validation: ev.validation,
177
- tellaskHead: '',
178
- body: '',
179
- callId: '',
180
- };
181
- break;
182
- case 'callHeadLineChunk': {
183
- if (!currentCall)
184
- currentCall = {
185
- kind: 'call',
186
- validation: { kind: 'malformed', reason: 'missing_mention_prefix' },
187
- tellaskHead: '',
188
- body: '',
189
- callId: '',
190
- };
191
- currentCall.tellaskHead += ev.chunk;
192
- break;
193
- }
194
- case 'tellaskBodyChunk': {
195
- if (!currentCall)
196
- currentCall = {
197
- kind: 'call',
198
- validation: { kind: 'malformed', reason: 'missing_mention_prefix' },
199
- tellaskHead: '',
200
- body: '',
201
- callId: '',
202
- };
203
- currentCall.body += ev.chunk;
204
- break;
205
- }
206
- case 'callFinish':
207
- if (currentCall) {
208
- currentCall.callId = ev.callId;
209
- segments.push(currentCall);
210
- }
211
- currentCall = null;
212
- break;
213
- case 'callHeadLineFinish':
214
- case 'tellaskBodyStart':
215
- case 'tellaskBodyFinish':
216
- break;
217
- default: {
218
- const _exhaustive = ev;
219
- void _exhaustive;
220
- break;
221
- }
222
- }
223
- }
224
- if (currentMarkdown)
225
- segments.push(currentMarkdown);
226
- if (currentCall)
227
- segments.push(currentCall);
228
- return segments;
229
- }
230
- function verifyEventSequence(events) {
231
- const issues = [];
232
- let markdownActive = false;
233
- let callActive = false;
234
- let callHeadlineFinished = false;
235
- let tellaskBodyActive = false;
236
- for (let i = 0; i < events.length; i++) {
237
- const ev = events[i];
238
- switch (ev.kind) {
239
- case 'markdownStart':
240
- if (markdownActive)
241
- issues.push(`event[${i}]: markdownStart while markdownActive`);
242
- markdownActive = true;
243
- break;
244
- case 'markdownChunk':
245
- if (!markdownActive)
246
- issues.push(`event[${i}]: markdownChunk without markdownStart`);
247
- break;
248
- case 'markdownFinish':
249
- if (!markdownActive)
250
- issues.push(`event[${i}]: markdownFinish without markdownStart`);
251
- markdownActive = false;
252
- break;
253
- case 'callStart':
254
- if (callActive)
255
- issues.push(`event[${i}]: callStart while callActive`);
256
- callActive = true;
257
- callHeadlineFinished = false;
258
- tellaskBodyActive = false;
259
- break;
260
- case 'callHeadLineChunk':
261
- if (!callActive)
262
- issues.push(`event[${i}]: callHeadLineChunk without callStart`);
263
- if (callHeadlineFinished)
264
- issues.push(`event[${i}]: callHeadLineChunk after callHeadLineFinish`);
265
- break;
266
- case 'callHeadLineFinish':
267
- if (!callActive)
268
- issues.push(`event[${i}]: callHeadLineFinish without callStart`);
269
- callHeadlineFinished = true;
270
- break;
271
- case 'tellaskBodyStart':
272
- if (!callActive)
273
- issues.push(`event[${i}]: tellaskBodyStart without callStart`);
274
- if (!callHeadlineFinished)
275
- issues.push(`event[${i}]: tellaskBodyStart before callHeadLineFinish`);
276
- if (tellaskBodyActive)
277
- issues.push(`event[${i}]: tellaskBodyStart while tellaskBodyActive`);
278
- tellaskBodyActive = true;
279
- break;
280
- case 'tellaskBodyChunk':
281
- if (!tellaskBodyActive)
282
- issues.push(`event[${i}]: tellaskBodyChunk without tellaskBodyStart`);
283
- break;
284
- case 'tellaskBodyFinish':
285
- if (!tellaskBodyActive)
286
- issues.push(`event[${i}]: tellaskBodyFinish without tellaskBodyStart`);
287
- tellaskBodyActive = false;
288
- break;
289
- case 'callFinish':
290
- if (!callActive)
291
- issues.push(`event[${i}]: callFinish without callStart`);
292
- if (tellaskBodyActive)
293
- issues.push(`event[${i}]: callFinish while tellaskBodyActive`);
294
- callActive = false;
295
- callHeadlineFinished = false;
296
- tellaskBodyActive = false;
297
- break;
298
- default: {
299
- const _exhaustive = ev;
300
- void _exhaustive;
301
- issues.push(`event[${i}]: unknown event`);
302
- break;
303
- }
304
- }
305
- }
306
- if (markdownActive)
307
- issues.push(`end: markdownActive not finished`);
308
- if (callActive)
309
- issues.push(`end: callActive not finished`);
310
- if (tellaskBodyActive)
311
- issues.push(`end: tellaskBodyActive not finished`);
312
- return { ok: issues.length === 0, issues };
313
- }
314
- function makeXorShift32(seed) {
315
- let x = seed | 0;
316
- return () => {
317
- x ^= x << 13;
318
- x ^= x >>> 17;
319
- x ^= x << 5;
320
- return x >>> 0;
321
- };
322
- }
323
- function splitIntoRandomChunks(inputLength, seed, maxChunkSize) {
324
- const sizes = [];
325
- const next = makeXorShift32(seed);
326
- let remaining = inputLength;
327
- while (remaining > 0) {
328
- const r = next();
329
- const size = 1 + (r % Math.max(1, maxChunkSize));
330
- const actual = Math.min(size, remaining);
331
- sizes.push(actual);
332
- remaining -= actual;
333
- }
334
- return sizes;
335
- }
336
- async function parseTellaskWithChunkPlan(input, chunkSizesPlan, upstreamChunkSize) {
337
- const receiver = new DiagTellaskReceiver();
338
- const parser = new tellask_1.TellaskStreamParser(receiver);
339
- const upstreamChunks = [];
340
- const chunkPlanUsed = [];
341
- let chunkPlanExtendedToCoverRemainder = false;
342
- const plan = chunkSizesPlan !== null
343
- ? [...chunkSizesPlan]
344
- : buildFixedChunkPlan(input.length, upstreamChunkSize);
345
- let pos = 0;
346
- for (let idx = 0; idx < plan.length; idx++) {
347
- const sz = plan[idx] ?? 0;
348
- const remaining = input.length - pos;
349
- const actual = sz <= 0 ? 0 : Math.min(sz, remaining);
350
- const chunk = actual <= 0 ? '' : input.substring(pos, pos + actual);
351
- receiver.setUpstreamChunkContext(upstreamChunks.length, actual);
352
- upstreamChunks.push({
353
- index: upstreamChunks.length,
354
- startPos: pos,
355
- endPos: pos + actual,
356
- size: actual,
357
- contentPreview: previewText(chunk, 80),
358
- });
359
- chunkPlanUsed.push(actual);
360
- await parser.takeUpstreamChunk(chunk);
361
- pos += actual;
362
- if (pos >= input.length)
363
- break;
364
- }
365
- if (pos < input.length) {
366
- const remaining = input.substring(pos);
367
- receiver.setUpstreamChunkContext(upstreamChunks.length, remaining.length);
368
- upstreamChunks.push({
369
- index: upstreamChunks.length,
370
- startPos: pos,
371
- endPos: input.length,
372
- size: remaining.length,
373
- contentPreview: previewText(remaining, 80),
374
- });
375
- chunkPlanUsed.push(remaining.length);
376
- chunkPlanExtendedToCoverRemainder = true;
377
- await parser.takeUpstreamChunk(remaining);
378
- }
379
- await parser.finalize();
380
- const collectedCalls = parser.getCollectedCalls();
381
- const events = receiver.events;
382
- const segments = eventsToSegments(events);
383
- return {
384
- upstreamChunks,
385
- events,
386
- segments,
387
- collectedCalls,
388
- chunkPlanUsed,
389
- chunkPlanExtendedToCoverRemainder,
390
- };
391
- }
392
- function buildFixedChunkPlan(inputLen, chunkSize) {
393
- if (inputLen <= 0)
394
- return [];
395
- const size = Math.max(1, chunkSize);
396
- const out = [];
397
- let remaining = inputLen;
398
- while (remaining > 0) {
399
- const actual = Math.min(size, remaining);
400
- out.push(actual);
401
- remaining -= actual;
402
- }
403
- return out;
404
- }
405
- function computeChunkingMetrics(events, upstreamChunks) {
406
- const counts = new Map();
407
- let downstreamChunkEvents = 0;
408
- let smallerThanUpstream = 0;
409
- const examples = [];
410
- for (const ev of events) {
411
- if (ev.kind !== 'markdownChunk' &&
412
- ev.kind !== 'callHeadLineChunk' &&
413
- ev.kind !== 'tellaskBodyChunk') {
414
- continue;
415
- }
416
- downstreamChunkEvents++;
417
- const prev = counts.get(ev.upstreamChunkIndex) ?? 0;
418
- counts.set(ev.upstreamChunkIndex, prev + 1);
419
- const downstreamSize = ev.chunk.length;
420
- if (ev.upstreamChunkSize > 0 && downstreamSize < ev.upstreamChunkSize) {
421
- smallerThanUpstream++;
422
- if (examples.length < 12) {
423
- examples.push({
424
- eventKind: ev.kind,
425
- upstreamChunkIndex: ev.upstreamChunkIndex,
426
- upstreamChunkSize: ev.upstreamChunkSize,
427
- downstreamChunkSize: downstreamSize,
428
- downstreamPreview: previewText(ev.chunk, 60),
429
- });
430
- }
431
- }
432
- }
433
- let withDownstream = 0;
434
- let withMultiple = 0;
435
- for (const chunk of upstreamChunks) {
436
- const cnt = counts.get(chunk.index) ?? 0;
437
- if (cnt > 0)
438
- withDownstream++;
439
- if (cnt > 1)
440
- withMultiple++;
441
- }
442
- return {
443
- upstreamChunks: upstreamChunks.length,
444
- downstreamChunkEvents,
445
- upstreamChunksWithDownstreamChunkEvents: withDownstream,
446
- upstreamChunksWithMultipleDownstreamChunkEvents: withMultiple,
447
- downstreamChunkEventsWithSmallerSizeThanUpstream: smallerThanUpstream,
448
- examples,
449
- };
450
- }
451
- const verifyTellaskParsingSchema = {
452
- type: 'object',
453
- properties: {
454
- text: { type: 'string', description: 'Raw tellask/markdown text to parse.' },
455
- upstream_chunk_size: {
456
- type: 'integer',
457
- description: 'Fixed upstream chunk size used when chunk_sizes is not provided (simulates streaming). Default: 10.',
458
- },
459
- chunk_sizes: {
460
- type: 'array',
461
- items: { type: 'integer' },
462
- description: 'Explicit upstream chunk-size plan (like tests/tellask/realtime.ts). May include 0 for empty chunks.',
463
- },
464
- invariance_chunk_sizes: {
465
- type: 'array',
466
- items: { type: 'integer' },
467
- description: 'Upstream chunk sizes to verify invariance against baseline single-chunk parse.',
468
- },
469
- random_invariance_seeds: {
470
- type: 'array',
471
- items: { type: 'integer' },
472
- description: 'Seeds used to generate random chunk plans to verify invariance.',
473
- },
474
- random_invariance_max_chunk_size: {
475
- type: 'integer',
476
- description: 'Max upstream chunk size used when generating random chunk plans. Default: 32.',
477
- },
478
- include_events: {
479
- type: 'boolean',
480
- description: 'When true, include raw downstream events (truncated by max_events). Default: true.',
481
- },
482
- max_events: {
483
- type: 'integer',
484
- description: 'Max number of events to include in output when include_events=true. Default: 600.',
485
- },
486
- },
487
- required: ['text'],
488
- additionalProperties: false,
489
- };
490
- exports.verifyTellaskParsingTool = {
491
- type: 'func',
492
- name: 'verify_tellask_parsing',
493
- description: 'Parse a raw tellask/markdown text block via TellaskStreamParser and return structured segments + streaming diagnostics.',
494
- descriptionI18n: {
495
- en: 'Parse a raw tellask/markdown text block via TellaskStreamParser and return structured segments + streaming diagnostics.',
496
- zh: '将一段原始 tellask/markdown 文本交给 TellaskStreamParser 解析,并返回结构化片段与流式诊断结果。',
497
- },
498
- parameters: verifyTellaskParsingSchema,
499
- argsValidation: 'dominds',
500
- call: async (_dlg, caller, args) => {
501
- try {
502
- const parsed = parseVerifyTellaskParsingArgs(args);
503
- const primary = await parseTellaskWithChunkPlan(parsed.text, parsed.chunkSizesPlan, parsed.upstreamChunkSize);
504
- const seq = verifyEventSequence(primary.events);
505
- const chunking = computeChunkingMetrics(primary.events, primary.upstreamChunks);
506
- const baselineChunkSize = Math.max(1, parsed.text.length);
507
- const baseline = await parseTellaskWithChunkPlan(parsed.text, null, baselineChunkSize);
508
- const invarianceFailures = [];
509
- for (const sz of parsed.invarianceChunkSizes) {
510
- const actualSize = Math.max(1, sz);
511
- const got = await parseTellaskWithChunkPlan(parsed.text, null, actualSize);
512
- const diff = segmentsDiff(baseline.segments, got.segments);
513
- if (diff.kind !== 'equal') {
514
- invarianceFailures.push({ upstreamChunkSize: actualSize, diff });
515
- }
516
- }
517
- const randomFailures = [];
518
- for (const seed of parsed.randomInvarianceSeeds) {
519
- const plan = splitIntoRandomChunks(parsed.text.length, seed, parsed.randomInvarianceMaxChunkSize);
520
- const got = await parseTellaskWithChunkPlan(parsed.text, plan, parsed.upstreamChunkSize);
521
- const diff = segmentsDiff(baseline.segments, got.segments);
522
- if (diff.kind !== 'equal') {
523
- randomFailures.push({
524
- seed,
525
- maxChunkSize: parsed.randomInvarianceMaxChunkSize,
526
- chunkPlanPreview: previewText(plan.join(','), 120),
527
- diff,
528
- });
529
- }
530
- }
531
- const ok = seq.ok && invarianceFailures.length === 0 && randomFailures.length === 0;
532
- const output = {
533
- ok,
534
- caller: { id: caller.id, name: caller.name },
535
- input: {
536
- length: parsed.text.length,
537
- upstream_chunk_size: parsed.upstreamChunkSize,
538
- chunk_sizes_plan_provided: parsed.chunkSizesPlan !== null,
539
- },
540
- primary: {
541
- chunk_plan_used: primary.chunkPlanUsed,
542
- chunk_plan_extended_to_cover_remainder: primary.chunkPlanExtendedToCoverRemainder,
543
- upstream_chunks: primary.upstreamChunks,
544
- segments: primary.segments,
545
- collected_calls: primary.collectedCalls,
546
- events: parsed.includeEvents
547
- ? {
548
- total: primary.events.length,
549
- truncated_to: Math.min(primary.events.length, parsed.maxEvents),
550
- items: primary.events.slice(0, parsed.maxEvents),
551
- }
552
- : undefined,
553
- },
554
- baseline: {
555
- upstream_chunk_size: baselineChunkSize,
556
- segments: baseline.segments,
557
- },
558
- analysis: {
559
- event_sequence: seq,
560
- chunking_metrics: chunking,
561
- invariance: {
562
- checked_sizes: parsed.invarianceChunkSizes.map((n) => Math.max(1, n)),
563
- failures: invarianceFailures,
564
- },
565
- random_invariance: {
566
- seeds: parsed.randomInvarianceSeeds,
567
- max_chunk_size: parsed.randomInvarianceMaxChunkSize,
568
- failures: randomFailures,
569
- },
570
- },
571
- };
572
- return JSON.stringify(output, null, 2);
573
- }
574
- catch (err) {
575
- const message = err instanceof Error ? err.message : String(err);
576
- const stack = err instanceof Error ? err.stack : undefined;
577
- return JSON.stringify({
578
- ok: false,
579
- error: { message, stack },
580
- }, null, 2);
581
- }
582
- },
583
- };