dominds 1.15.3 → 1.15.5

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 (180) hide show
  1. package/dist/apps/assigned-port.d.ts +3 -3
  2. package/dist/apps/resolution-file.d.ts +2 -2
  3. package/dist/apps/run-app-json.d.ts +3 -3
  4. package/dist/apps-host/client.d.ts +2 -2
  5. package/dist/apps-host/host.js +6 -7
  6. package/dist/apps-host/ipc-types.d.ts +2 -2
  7. package/dist/docs/app-constitution.md +1 -1
  8. package/dist/docs/app-constitution.zh.md +1 -1
  9. package/dist/docs/team_mgmt-toolset.md +7 -9
  10. package/dist/docs/team_mgmt-toolset.zh.md +3 -9
  11. package/dist/docs/tellask-result-unification.md +280 -0
  12. package/dist/llm/kernel-driver/drive.js +52 -29
  13. package/dist/llm/kernel-driver/fbr.d.ts +1 -1
  14. package/dist/llm/kernel-driver/fbr.js +2 -1
  15. package/dist/mcp/supervisor.js +4 -6
  16. package/dist/runtime/tool-result-messages.d.ts +2 -1
  17. package/dist/runtime/tool-result-messages.js +13 -12
  18. package/dist/shared/utils/fbr.js +8 -12
  19. package/dist/shared/utils/inter-dialog-format.js +4 -6
  20. package/dist/tool.d.ts +9 -1
  21. package/dist/tool.js +20 -0
  22. package/dist/tools/apply-patch.js +2 -1
  23. package/dist/tools/ctrl.js +53 -50
  24. package/dist/tools/env.js +7 -6
  25. package/dist/tools/fs.js +64 -59
  26. package/dist/tools/mcp.js +6 -5
  27. package/dist/tools/mem.js +35 -34
  28. package/dist/tools/os.js +30 -29
  29. package/dist/tools/plan.js +12 -10
  30. package/dist/tools/ripgrep.js +17 -10
  31. package/dist/tools/team_mgmt.js +27 -30
  32. package/dist/tools/toolset-manual.js +12 -11
  33. package/dist/tools/txt.d.ts +2 -2
  34. package/dist/tools/txt.js +61 -77
  35. package/package.json +4 -4
  36. package/webapp/dist/assets/{_basePickBy-DsirmCgI.js → _basePickBy-QPiPxkcd.js} +3 -3
  37. package/webapp/dist/assets/_basePickBy-QPiPxkcd.js.map +1 -0
  38. package/webapp/dist/assets/{_baseUniq-tR6G8loB.js → _baseUniq-Dxi782ML.js} +2 -2
  39. package/webapp/dist/assets/_baseUniq-Dxi782ML.js.map +1 -0
  40. package/webapp/dist/assets/{arc-CzxpASkZ.js → arc-CmoWlJCk.js} +2 -2
  41. package/webapp/dist/assets/arc-CmoWlJCk.js.map +1 -0
  42. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BSH7H5oI.js → architectureDiagram-VXUJARFQ-Cj8eAVGw.js} +8 -26
  43. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-Cj8eAVGw.js.map +1 -0
  44. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DpLIr7yO.js → blockDiagram-VD42YOAC-DCSpBIH9.js} +170 -187
  45. package/webapp/dist/assets/blockDiagram-VD42YOAC-DCSpBIH9.js.map +1 -0
  46. package/webapp/dist/assets/{c4Diagram-IC4MRINW-WuYKgWfY.js → c4Diagram-YG6GDRKO-BLnTx0I5.js} +4 -4
  47. package/webapp/dist/assets/c4Diagram-YG6GDRKO-BLnTx0I5.js.map +1 -0
  48. package/webapp/dist/assets/{channel-B-v9dqLN.js → channel-CHTZ0PXJ.js} +2 -2
  49. package/webapp/dist/assets/channel-CHTZ0PXJ.js.map +1 -0
  50. package/webapp/dist/assets/{chunk-4BX2VUAB-MtFUfKZy.js → chunk-4BX2VUAB-D9vwOR-u.js} +2 -2
  51. package/webapp/dist/assets/chunk-4BX2VUAB-D9vwOR-u.js.map +1 -0
  52. package/webapp/dist/assets/{chunk-55IACEB6-rY9AJdzj.js → chunk-55IACEB6-Bls-7sze.js} +2 -2
  53. package/webapp/dist/assets/chunk-55IACEB6-Bls-7sze.js.map +1 -0
  54. package/webapp/dist/assets/{chunk-WL4C6EOR-DDCnEwft.js → chunk-B4BG7PRW-BXRfjHmI.js} +121 -171
  55. package/webapp/dist/assets/chunk-B4BG7PRW-BXRfjHmI.js.map +1 -0
  56. package/webapp/dist/assets/{chunk-NQ4KR5QH-CK365lrr.js → chunk-DI55MBZ5-BPJLdjOS.js} +7 -9
  57. package/webapp/dist/assets/chunk-DI55MBZ5-BPJLdjOS.js.map +1 -0
  58. package/webapp/dist/assets/{chunk-FMBD7UC4-B-RtOs7e.js → chunk-FMBD7UC4-ETqcFoxP.js} +2 -2
  59. package/webapp/dist/assets/chunk-FMBD7UC4-ETqcFoxP.js.map +1 -0
  60. package/webapp/dist/assets/{chunk-KX2RTZJC-DH9UrpuG.js → chunk-QN33PNHL-B-dPkZ9T.js} +2 -2
  61. package/webapp/dist/assets/chunk-QN33PNHL-B-dPkZ9T.js.map +1 -0
  62. package/webapp/dist/assets/{chunk-QZHKN3VN-BCaWPGDm.js → chunk-QZHKN3VN-BqX4sv4Q.js} +2 -2
  63. package/webapp/dist/assets/chunk-QZHKN3VN-BqX4sv4Q.js.map +1 -0
  64. package/webapp/dist/assets/{chunk-JSJVCQXG-Da1d3uS4.js → chunk-TZMSLE5B-BnfBq8PA.js} +6 -14
  65. package/webapp/dist/assets/chunk-TZMSLE5B-BnfBq8PA.js.map +1 -0
  66. package/webapp/dist/assets/{classDiagram-VBA2DB6C-CvMBU4WA.js → classDiagram-2ON5EDUG-w89KWhQq.js} +6 -7
  67. package/webapp/dist/assets/classDiagram-2ON5EDUG-w89KWhQq.js.map +1 -0
  68. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CvMBU4WA.js → classDiagram-v2-WZHVMYZB-w89KWhQq.js} +6 -7
  69. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-w89KWhQq.js.map +1 -0
  70. package/webapp/dist/assets/{clone-r98jR0MC.js → clone-D7jwWk83.js} +2 -2
  71. package/webapp/dist/assets/clone-D7jwWk83.js.map +1 -0
  72. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-t6J60Ogk.js → cose-bilkent-S5V4N54A-CHdRDUYT.js} +2 -2
  73. package/webapp/dist/assets/cose-bilkent-S5V4N54A-CHdRDUYT.js.map +1 -0
  74. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  75. package/webapp/dist/assets/{dagre-KLK3FWXG-BlqmY2DV.js → dagre-6UL2VRFP-CfltZHNg.js} +7 -7
  76. package/webapp/dist/assets/dagre-6UL2VRFP-CfltZHNg.js.map +1 -0
  77. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  78. package/webapp/dist/assets/{diagram-E7M64L7V-FwCHeIUD.js → diagram-PSM6KHXK-Bp_jHEhR.js} +10 -10
  79. package/webapp/dist/assets/diagram-PSM6KHXK-Bp_jHEhR.js.map +1 -0
  80. package/webapp/dist/assets/{diagram-IFDJBPK2-NhtmkuZG.js → diagram-QEK2KX5R-Cdvy6Ep9.js} +8 -9
  81. package/webapp/dist/assets/diagram-QEK2KX5R-Cdvy6Ep9.js.map +1 -0
  82. package/webapp/dist/assets/{diagram-P4PSJMXO-B9FcmokX.js → diagram-S2PKOQOG-BwUE6huD.js} +8 -8
  83. package/webapp/dist/assets/diagram-S2PKOQOG-BwUE6huD.js.map +1 -0
  84. package/webapp/dist/assets/{erDiagram-INFDFZHY-DHKmWvtB.js → erDiagram-Q2GNP2WA-_GQN3dnV.js} +75 -96
  85. package/webapp/dist/assets/erDiagram-Q2GNP2WA-_GQN3dnV.js.map +1 -0
  86. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-C7Zi8I7T.js → flowDiagram-NV44I4VS-Dhbd5FE4.js} +81 -98
  87. package/webapp/dist/assets/flowDiagram-NV44I4VS-Dhbd5FE4.js.map +1 -0
  88. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-Cv2T8tz_.js → ganttDiagram-JELNMOA3-BKQtJ_t7.js} +3 -28
  89. package/webapp/dist/assets/ganttDiagram-JELNMOA3-BKQtJ_t7.js.map +1 -0
  90. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-DztaipJU.js → gitGraphDiagram-V2S2FVAM-BcW7gX3_.js} +46 -38
  91. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-BcW7gX3_.js.map +1 -0
  92. package/webapp/dist/assets/graph-CE4HL0aU.js +425 -0
  93. package/webapp/dist/assets/graph-CE4HL0aU.js.map +1 -0
  94. package/webapp/dist/assets/{index-hve5MWPs.js → index-JCkFg05X.js} +1111 -1027
  95. package/webapp/dist/assets/{index-hve5MWPs.js.map → index-JCkFg05X.js.map} +1 -1
  96. package/webapp/dist/assets/{index-YaxF76or.css → index-xvYYeHuy.css} +1 -1
  97. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-VgsbBPZP.js → infoDiagram-HS3SLOUP-B9IsDiBf.js} +7 -7
  98. package/webapp/dist/assets/infoDiagram-HS3SLOUP-B9IsDiBf.js.map +1 -0
  99. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  100. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-OO8sev-Y.js → journeyDiagram-XKPGCS4Q-BpJK6b4f.js} +5 -5
  101. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BpJK6b4f.js.map +1 -0
  102. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DiYCC1Ig.js → kanban-definition-3W4ZIXB7-D0vLghpg.js} +3 -5
  103. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-D0vLghpg.js.map +1 -0
  104. package/webapp/dist/assets/{layout-DdZSgGdu.js → layout-C9CTTdmU.js} +5 -5
  105. package/webapp/dist/assets/layout-C9CTTdmU.js.map +1 -0
  106. package/webapp/dist/assets/{linear-7-aHtaFi.js → linear-DoEKTEMq.js} +2 -2
  107. package/webapp/dist/assets/linear-DoEKTEMq.js.map +1 -0
  108. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-IG3I-RdD.js → mindmap-definition-VGOIOE7T-D09DtFPK.js} +5 -7
  109. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-D09DtFPK.js.map +1 -0
  110. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  111. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-z68KJT5r.js → pieDiagram-ADFJNKIX-BcM3GR1l.js} +8 -8
  112. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BcM3GR1l.js.map +1 -0
  113. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DaENWdO6.js → quadrantDiagram-AYHSOK5B-D8DjF5Pg.js} +3 -3
  114. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-D8DjF5Pg.js.map +1 -0
  115. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-ROTFv4sa.js → requirementDiagram-UZGBJVZJ-D2J7OgDl.js} +6 -16
  116. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D2J7OgDl.js.map +1 -0
  117. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CK7qtpzw.js → sankeyDiagram-TZEHDZUN-BHweOFUp.js} +2 -2
  118. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-BHweOFUp.js.map +1 -0
  119. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-R5lDySeI.js → sequenceDiagram-WL72ISMW-BDCBaUSI.js} +201 -601
  120. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BDCBaUSI.js.map +1 -0
  121. package/webapp/dist/assets/{stateDiagram-RAJIS63D-sr7msF5U.js → stateDiagram-FKZM4ZOC-jwEbpF4Z.js} +9 -9
  122. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-jwEbpF4Z.js.map +1 -0
  123. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-X663liwS.js → stateDiagram-v2-4FDKWEC3-Blk529CR.js} +5 -5
  124. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-Blk529CR.js.map +1 -0
  125. package/webapp/dist/assets/{timeline-definition-YZTLITO2-Bw0TdG26.js → timeline-definition-IT6M3QCI-BQO-9msf.js} +3 -3
  126. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BQO-9msf.js.map +1 -0
  127. package/webapp/dist/assets/{treemap-KZPCXAKY-D_sjKwI7.js → treemap-GDKQZRPO-Bc2g2vuB.js} +24 -37
  128. package/webapp/dist/assets/treemap-GDKQZRPO-Bc2g2vuB.js.map +1 -0
  129. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-C65ESjTc.js → xychartDiagram-PRI3JC2R-DKzNu-Hu.js} +4 -4
  130. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-DKzNu-Hu.js.map +1 -0
  131. package/webapp/dist/index.html +2 -2
  132. package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +0 -1
  133. package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +0 -1
  134. package/webapp/dist/assets/arc-CzxpASkZ.js.map +0 -1
  135. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +0 -1
  136. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +0 -1
  137. package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +0 -1
  138. package/webapp/dist/assets/channel-B-v9dqLN.js.map +0 -1
  139. package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +0 -1
  140. package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +0 -1
  141. package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +0 -1
  142. package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +0 -1
  143. package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +0 -1
  144. package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +0 -1
  145. package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +0 -1
  146. package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +0 -1
  147. package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +0 -1
  148. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +0 -1
  149. package/webapp/dist/assets/clone-r98jR0MC.js.map +0 -1
  150. package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +0 -1
  151. package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +0 -1
  152. package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +0 -1
  153. package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +0 -1
  154. package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +0 -1
  155. package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +0 -1
  156. package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +0 -1
  157. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +0 -1
  158. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +0 -1
  159. package/webapp/dist/assets/graph-C5yf62Vs.js +0 -782
  160. package/webapp/dist/assets/graph-C5yf62Vs.js.map +0 -1
  161. package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +0 -1
  162. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +0 -966
  163. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +0 -1
  164. package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +0 -1
  165. package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +0 -1
  166. package/webapp/dist/assets/layout-DdZSgGdu.js.map +0 -1
  167. package/webapp/dist/assets/linear-7-aHtaFi.js.map +0 -1
  168. package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +0 -1
  169. package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +0 -1
  170. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +0 -1
  171. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +0 -1
  172. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +0 -1
  173. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +0 -1
  174. package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +0 -1
  175. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +0 -1
  176. package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +0 -1
  177. package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +0 -1
  178. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +0 -2487
  179. package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +0 -1
  180. package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { DomindsAppInstallJsonV1 } from '@longrun-ai/kernel/app-json';
1
+ import type { DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
2
2
  import type { AppsResolutionEntry } from './resolution-file';
3
3
  export type AssignedPortResolutionReason = 'no_frontend' | 'kept_existing' | 'selected_default' | 'allocated_stable_range' | 'reassigned_from_existing_conflict' | 'reassigned_from_existing_unbindable';
4
4
  export type AssignedPortResolution = Readonly<{
@@ -16,13 +16,13 @@ export type AssignedPortResolution = Readonly<{
16
16
  */
17
17
  export declare function resolveStableAssignedPort(params: {
18
18
  appId: string;
19
- installJson: DomindsAppInstallJsonV1;
19
+ installJson: DomindsAppInstallJson;
20
20
  existingApps: ReadonlyArray<AppsResolutionEntry>;
21
21
  existingAssignedPort: number | null;
22
22
  }): Promise<number | null>;
23
23
  export declare function resolveStableAssignedPortWithReason(params: {
24
24
  appId: string;
25
- installJson: DomindsAppInstallJsonV1;
25
+ installJson: DomindsAppInstallJson;
26
26
  existingApps: ReadonlyArray<AppsResolutionEntry>;
27
27
  existingAssignedPort: number | null;
28
28
  }): Promise<AssignedPortResolution>;
@@ -1,4 +1,4 @@
1
- import { type DomindsAppInstallJsonV1 } from '@longrun-ai/kernel/app-json';
1
+ import { type DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
2
2
  export type AppsResolutionSchemaVersion = 1;
3
3
  export type AppsResolutionSource = Readonly<{
4
4
  kind: 'npx';
@@ -12,7 +12,7 @@ export type AppsResolutionEntry = Readonly<{
12
12
  enabled: boolean;
13
13
  source: AppsResolutionSource;
14
14
  assignedPort: number | null;
15
- installJson: DomindsAppInstallJsonV1;
15
+ installJson: DomindsAppInstallJson;
16
16
  }>;
17
17
  export type AppsResolutionFile = Readonly<{
18
18
  schemaVersion: AppsResolutionSchemaVersion;
@@ -1,8 +1,8 @@
1
- import { type DomindsAppInstallJsonV1 } from '@longrun-ai/kernel/app-json';
1
+ import { type DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
2
2
  export declare function runDomindsAppJsonViaNpx(params: {
3
3
  spec: string;
4
4
  cwdAbs: string;
5
- }): Promise<DomindsAppInstallJsonV1>;
5
+ }): Promise<DomindsAppInstallJson>;
6
6
  export declare function runDomindsAppJsonViaLocalPackage(params: {
7
7
  packageRootAbs: string;
8
- }): Promise<DomindsAppInstallJsonV1>;
8
+ }): Promise<DomindsAppInstallJson>;
@@ -1,12 +1,12 @@
1
1
  import type { DomindsAppDynamicToolsetsContext, DomindsAppReminderOwnerApplyContext, DomindsAppReminderOwnerRenderContext, DomindsAppReminderOwnerUpdateContext, DomindsAppRunControlContext, DomindsAppRunControlResult } from '@longrun-ai/kernel/app-host-contract';
2
- import type { DomindsAppHostReminderUpdateResult, DomindsAppHostToolResult, DomindsAppInstallJsonV1, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult } from '@longrun-ai/kernel/app-json';
2
+ import type { DomindsAppHostReminderUpdateResult, DomindsAppHostToolResult, DomindsAppInstallJson, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult } from '@longrun-ai/kernel/app-json';
3
3
  import type { ChatMessage } from '../llm/client';
4
4
  import type { ToolArguments } from '../tool';
5
5
  import type { AppsHostMessageToKernel } from './ipc-types';
6
6
  export type EnabledAppForHost = Readonly<{
7
7
  appId: string;
8
8
  runtimePort: number | null;
9
- installJson: DomindsAppInstallJsonV1;
9
+ installJson: DomindsAppInstallJson;
10
10
  hostSourceVersion: string | null;
11
11
  }>;
12
12
  export type AppsHostClient = Readonly<{
@@ -33,12 +33,14 @@ function isStringArray(value) {
33
33
  return Array.isArray(value) && value.every((item) => typeof item === 'string');
34
34
  }
35
35
  function isToolCallOutput(value) {
36
- if (typeof value === 'string')
37
- return true;
38
36
  if (!isRecord(value))
39
37
  return false;
40
38
  if (typeof value['content'] !== 'string')
41
39
  return false;
40
+ const outcome = value['outcome'];
41
+ if (outcome !== 'success' && outcome !== 'failure' && outcome !== 'partial_failure') {
42
+ return false;
43
+ }
42
44
  const contentItems = value['contentItems'];
43
45
  return contentItems === undefined || Array.isArray(contentItems);
44
46
  }
@@ -183,15 +185,12 @@ function isChatMessage(value) {
183
185
  return true;
184
186
  }
185
187
  function normalizeToolResult(value) {
186
- if (isToolCallOutput(value)) {
187
- return { output: value };
188
- }
189
188
  if (!isRecord(value)) {
190
- throw new Error('Invalid app tool result: expected ToolCallOutput or structured object');
189
+ throw new Error('Invalid app tool result: expected { output: { content, outcome, contentItems? }, ... }');
191
190
  }
192
191
  const output = value['output'];
193
192
  if (!isToolCallOutput(output)) {
194
- throw new Error('Invalid app tool result: output must be ToolCallOutput');
193
+ throw new Error('Invalid app tool result: output must be { content, outcome, contentItems? }');
195
194
  }
196
195
  const reminderRequestsRaw = value['reminderRequests'];
197
196
  if (reminderRequestsRaw !== undefined && !Array.isArray(reminderRequestsRaw)) {
@@ -1,5 +1,5 @@
1
1
  import type { DomindsAppRunControlResult } from '@longrun-ai/kernel/app-host-contract';
2
- import type { DomindsAppDialogReminderRequestBatch, DomindsAppHostReminderUpdateResult, DomindsAppInstallJsonV1, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult, DomindsAppReminderState } from '@longrun-ai/kernel/app-json';
2
+ import type { DomindsAppDialogReminderRequestBatch, DomindsAppHostReminderUpdateResult, DomindsAppInstallJson, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult, DomindsAppReminderState } from '@longrun-ai/kernel/app-json';
3
3
  import type { LanguageCode } from '@longrun-ai/kernel/types/language';
4
4
  import type { ChatMessage } from '../llm/client';
5
5
  import type { ToolArguments, ToolCallOutput } from '../tool';
@@ -13,7 +13,7 @@ export type AppsHostKernelInitMessage = Readonly<{
13
13
  apps: ReadonlyArray<Readonly<{
14
14
  appId: string;
15
15
  runtimePort: number | null;
16
- installJson: DomindsAppInstallJsonV1;
16
+ installJson: DomindsAppInstallJson;
17
17
  }>>;
18
18
  }>;
19
19
  export type AppsHostKernelToolCallMessage = Readonly<{
@@ -222,7 +222,7 @@ Recommended user mental model:
222
222
 
223
223
  (Current: implemented) existing anchors:
224
224
 
225
- - JSON schema: `dominds/main/apps/app-json.ts` (`DomindsAppInstallJsonV1`).
225
+ - JSON schema: `dominds/main/apps/app-json.ts` (`DomindsAppInstallJson`).
226
226
  - Apps configuration file: `dominds/main/apps/configuration-file.ts`.
227
227
  - Apps resolution file: `dominds/main/apps/resolution-file.ts`.
228
228
 
@@ -221,7 +221,7 @@ Install JSON 是 app 与 Kernel/CLI 之间的**安装/运行握手载荷**。它
221
221
 
222
222
  (现状:已实现)install json schema 与 apps 配置/解析锚点仍可参考:
223
223
 
224
- - JSON schema:`dominds/main/apps/app-json.ts`(`DomindsAppInstallJsonV1`)。
224
+ - JSON schema:`dominds/main/apps/app-json.ts`(`DomindsAppInstallJson`)。
225
225
  - `.apps/configuration.yaml`:`dominds/main/apps/configuration-file.ts`。
226
226
  - `.apps/resolution.yaml`:`dominds/main/apps/resolution-file.ts`。
227
227
 
@@ -133,6 +133,9 @@ Notes:
133
133
  - For `team_mgmt`, that explicit allowlist is `.minds/**` (including `.minds/memory/**`) so the
134
134
  team manager can repair accidental corruptions made by other tools (even though `.minds/memory/**`
135
135
  already has dedicated `personal_memory` / `team_memory` tools for normal use).
136
+ - Conversely, the denial of `.minds/**` / `*.tsk/**` for general file tools is a **built-in hard runtime
137
+ rule**, not a standard deny stanza you should keep repeating in `team.yaml`. Only additional
138
+ business-specific constraints belong in explicit `no_read_dirs` / `no_write_dirs`.
136
139
  - Require explicit `.minds/...` paths and validate them; do not support “implicitly scoped” paths
137
140
  like `team.yaml`.
138
141
 
@@ -444,19 +447,14 @@ member_defaults:
444
447
  toolsets:
445
448
  - ws_read
446
449
  - personal_memory
447
- # Default posture: deny `.minds/` edits for normal members.
448
- # (Team management should be done via `team_mgmt` tools, not general file tools.)
449
- no_read_dirs:
450
- - .minds/team.yaml
451
- - .minds/llm.yaml
452
- - .minds/mcp.yaml
453
- - .minds/team/**
454
- no_write_dirs:
455
- - .minds/**
456
450
 
457
451
  default_responder: fuxi
458
452
 
459
453
  members:
454
+
455
+ Note: in the normal-member example above, do **not** add `no_read_dirs` / `no_write_dirs` merely to
456
+ restate that `.minds/**` is blocked. That boundary is already enforced by the runtime for general
457
+ file tools; explicit deny entries should be reserved for extra constraints beyond the built-ins.
460
458
  # Example visible teammate (recommended): define at least one non-hidden responder for daily work.
461
459
  dev:
462
460
  name: Dev
@@ -110,6 +110,7 @@
110
110
  - 拒绝规范化后解析到 `.minds/` 之外的任何路径
111
111
  - 优先使用显式白名单而非" rtws 中的任何内容"
112
112
  - 对于 `team_mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `personal_memory` / `team_memory` 工具供正常使用)
113
+ - 反过来,普通通用文件工具对 `.minds/**` / `*.tsk/**` 的拒绝是**系统内置硬约束**,不是需要在 `team.yaml` 里重复书写的常规 deny 项。只有额外业务约束才需要显式写入 `no_read_dirs` / `no_write_dirs`
113
114
  - 需要显式的 `.minds/...` 路径并验证它们;不支持像 `team.yaml` 这样的"隐式作用域"路径
114
115
 
115
116
  ### 为什么需要专用工具集(而不是仅 `read_dirs` / `write_dirs`)?
@@ -383,19 +384,12 @@ member_defaults:
383
384
  toolsets:
384
385
  - ws_read
385
386
  - personal_memory
386
- # 默认姿态:拒绝普通成员的 `.minds/` 编辑
387
- #(团队管理应通过 `team_mgmt` 工具完成,而非通用文件工具)
388
- no_read_dirs:
389
- - .minds/team.yaml
390
- - .minds/llm.yaml
391
- - .minds/mcp.yaml
392
- - .minds/team/**
393
- no_write_dirs:
394
- - .minds/**
395
387
 
396
388
  default_responder: fuxi
397
389
 
398
390
  members:
391
+
392
+ 说明:上面的普通成员默认示例**不要**再额外写 `no_read_dirs` / `no_write_dirs` 去重复声明 `.minds/**` 拒绝。那是运行时内置边界,不是常规样板;只有要表达超出内置边界的额外 deny 规则时,才应显式写这些字段。
399
393
  # 示例显在成员(推荐):至少定义一个非隐藏的响应者用于日常工作
400
394
  dev:
401
395
  name: Dev
@@ -0,0 +1,280 @@
1
+ # Tellask Result Unification
2
+
3
+ ## Purpose
4
+
5
+ This document captures the agreed direction for the current tellask refactor so the
6
+ implementation can stay aligned while multiple storage, runtime, provider, and frontend
7
+ paths are being simplified at the same time.
8
+
9
+ The goal is not to preserve old technical symmetry for its own sake. The goal is to make
10
+ tellask behave as one coherent business feature with fewer special cases.
11
+
12
+ ## Agreed Direction
13
+
14
+ - Keep `tellask_call_record` as the tellask-family call record.
15
+ - Keep one unified tellask business result type:
16
+ - `tellask_result_record`
17
+ - `tellask_result_msg`
18
+ - `tellask_result_evt`
19
+ - Keep carryover special and separate:
20
+ - rename `tellask_carryover_result_record` to `tellask_carryover_record`
21
+ - rename `tellask_carryover_result_msg` to `tellask_carryover_msg`
22
+ - rename `tellask_call_carryover_evt` / `tellask_carryover_result_evt` style names into a single
23
+ `tellask_carryover_evt`
24
+ - Inline tellask result rendering is no longer the target model.
25
+ - Tellask results should render as separate bubbles.
26
+ - Call-site UI may still exist for pending / settled state, but result body should not depend on
27
+ inline rendering.
28
+ - `replyTellask*` is not a separate business result family to unify on its own.
29
+ `replyTellask*` is a mechanism that produces a tellask result.
30
+ - `askHuman` should move into the tellask result flow instead of being represented as a normal
31
+ user bubble.
32
+ - Q4H answers should not be persisted as `human_text_record` for askHuman result rendering.
33
+
34
+ ## Current Problem
35
+
36
+ Tellask business semantics are currently split across too many layers:
37
+
38
+ - `tellask_call_record`
39
+ - call start
40
+ - `tellask_call_result_record`
41
+ - local inline tellask business result
42
+ - `tellask_response_record`
43
+ - sideline / subdialog response bubble
44
+ - `tellask_result_record`
45
+ - thin technical pair record added later for call/result parity
46
+ - `tellask_carryover_result_record`
47
+ - special cross-course carryover
48
+
49
+ This produces several kinds of debt:
50
+
51
+ - one business feature has multiple result record types
52
+ - one business result message name has mixed semantics
53
+ - frontend uses different event families for inline vs separate-bubble tellask results
54
+ - `askHuman` answer flow still re-enters the generic user-message path
55
+ - provider/runtime logic has had to invent technical projection types that are not the real
56
+ business model
57
+
58
+ ## Business Model After Refactor
59
+
60
+ ### Tellask Call
61
+
62
+ `tellask_call_record` remains the start record for tellask-family tool invocation.
63
+
64
+ It still covers:
65
+
66
+ - `tellask`
67
+ - `tellaskSessionless`
68
+ - `tellaskBack`
69
+ - `askHuman`
70
+ - `freshBootsReasoning`
71
+ - `replyTellask`
72
+ - `replyTellaskSessionless`
73
+ - `replyTellaskBack`
74
+
75
+ ### Tellask Result
76
+
77
+ `tellask_result_record` becomes the single business result record for tellask outcomes.
78
+
79
+ It should absorb the business payload currently split across:
80
+
81
+ - `tellask_call_result_record`
82
+ - `tellask_response_record`
83
+
84
+ It should be rich enough to carry the actual tellask business context, not just a thin tool pair.
85
+
86
+ ### Tellask Carryover
87
+
88
+ Carryover stays separate because it is not a normal call/result pair outcome.
89
+
90
+ Its essence is:
91
+
92
+ - cross-course continuation
93
+ - special context anchor semantics
94
+ - intentionally not part of standard call/result unification
95
+
96
+ So it should remain independent under shorter names:
97
+
98
+ - `tellask_carryover_record`
99
+ - `tellask_carryover_msg`
100
+ - `tellask_carryover_evt`
101
+
102
+ ## Message And Event Model
103
+
104
+ ### Result Bubble Direction
105
+
106
+ Tellask business results should render as separate bubbles.
107
+
108
+ That means the frontend event model should converge toward:
109
+
110
+ - `tellask_call_start_evt`
111
+ - call-site lifecycle start
112
+ - `tellask_result_evt`
113
+ - business result bubble creation / replay
114
+ - status updates for the related call site
115
+ - `tellask_carryover_evt`
116
+ - special carryover bubble
117
+
118
+ The old split:
119
+
120
+ - `tellask_call_result_evt`
121
+ - `tellask_response_evt`
122
+
123
+ should be collapsed into `tellask_result_evt`.
124
+
125
+ ### Frontend Behavior
126
+
127
+ Frontend call-site handling should become simpler:
128
+
129
+ - call site shows pending / settled / carried-over state
130
+ - tellask result body is shown in a separate bubble
131
+ - no dependency on inline result body rendering
132
+
133
+ This applies to:
134
+
135
+ - local tellask failures
136
+ - sideline/subdialog responses
137
+ - askHuman pending/final result display
138
+
139
+ ## AskHuman Direction
140
+
141
+ `askHuman` should behave as part of the tellask family, not as a detour into the generic user
142
+ message path.
143
+
144
+ ### Desired Flow
145
+
146
+ 1. `askHuman` call starts as a tellask-family call.
147
+ 2. A temporary tellask-style result is shown while waiting.
148
+ 3. When the human answers, the final askHuman result is represented as a tellask result.
149
+ 4. The answer should not be kept as a normal user bubble for this purpose.
150
+
151
+ ### Important Clarification
152
+
153
+ The runtime may still need the answer content to continue the next generation round.
154
+
155
+ But that technical need must not force the product model to keep askHuman answers as
156
+ `human_text_record` or ordinary user-style UI bubbles.
157
+
158
+ The tellask business model is the source of truth.
159
+
160
+ ## ReplyTellask Direction
161
+
162
+ `replyTellask*` should not be treated as a separate business result family.
163
+
164
+ The correct business interpretation is:
165
+
166
+ - `replyTellask*` is an action that produces a tellask result
167
+ - the tellask result is the business object
168
+ - `replyTellask*` itself does not need another parallel business-unification effort
169
+
170
+ In practice this means the refactor should avoid introducing extra local-only reply result models
171
+ just to satisfy old technical pairing assumptions.
172
+
173
+ ## Tellask Result Record Shape
174
+
175
+ The unified `tellask_result_record` should be rich and business-oriented.
176
+
177
+ It should not flatten every field at top level.
178
+
179
+ Preferred shape:
180
+
181
+ - keep truly global result fields at top level
182
+ - move stable field groups into optional nested structures
183
+ - inside a nested structure, fields should be required whenever that structure is present
184
+
185
+ Suggested top-level concerns:
186
+
187
+ - record identity / timestamp / course refs
188
+ - `callId`
189
+ - `callName`
190
+ - `status`
191
+ - `content`
192
+
193
+ Suggested nested groups:
194
+
195
+ - `call`
196
+ - original tellask call context
197
+ - example fields:
198
+ - `tellaskContent`
199
+ - `mentionList`
200
+ - `sessionSlug`
201
+ - `responder`
202
+ - who produced the business result
203
+ - example fields:
204
+ - `responderId`
205
+ - `agentId`
206
+ - `originMemberId`
207
+ - `route`
208
+ - navigation / callee metadata when applicable
209
+ - example fields:
210
+ - `calleeDialogId`
211
+ - `calleeCourse`
212
+ - `calleeGenseq`
213
+
214
+ The exact final union can be refined during implementation, but the important rule is:
215
+
216
+ - business grouping first
217
+ - technical pairing concerns do not get to dictate the field model
218
+
219
+ ## Provider / Runtime Interpretation
220
+
221
+ The unified tellask result model is the business truth.
222
+
223
+ Provider/runtime projection must adapt to it, not the other way around.
224
+
225
+ This means:
226
+
227
+ - do not invent thin technical result types as the canonical tellask model
228
+ - if the provider layer needs a particular call/result projection, derive it from the business
229
+ message
230
+ - do not let tool-pair convenience decide what fields are allowed to exist
231
+
232
+ ## Files Expected To Change
233
+
234
+ The refactor will likely touch at least these areas:
235
+
236
+ - `packages/kernel/src/types/storage.ts`
237
+ - `packages/kernel/src/types/chat-message.ts`
238
+ - `packages/kernel/src/types/dialog.ts`
239
+ - `main/persistence.ts`
240
+ - `main/dialog.ts`
241
+ - `main/priming.ts`
242
+ - `main/dialog-fork.ts`
243
+ - `main/llm/kernel-driver/tellask-special.ts`
244
+ - `main/llm/kernel-driver/drive.ts`
245
+ - `main/server/websocket-handler.ts`
246
+ - `main/llm/gen/openai.ts`
247
+ - `main/llm/gen/openai-compatible.ts`
248
+ - `main/llm/gen/codex.ts`
249
+ - `main/llm/gen/anthropic.ts`
250
+ - `main/llm/gen/mock.ts`
251
+ - `webapp/src/components/dominds-dialog-container.ts`
252
+ - `webapp/src/components/dominds-app.tsx`
253
+
254
+ Tests will also need a broad update wherever old tellask inline/result/carryover names are asserted.
255
+
256
+ ## Implementation Checklist
257
+
258
+ - Redefine `tellask_result_record` as the single business result record.
259
+ - Remove `tellask_call_result_record`.
260
+ - Remove `tellask_response_record`.
261
+ - Rename carryover record/msg/evt to shorter names.
262
+ - Replace old tellask result event split with unified `tellask_result_evt`.
263
+ - Update replay and restore to rebuild unified tellask result messages.
264
+ - Update frontend to render tellask results as separate bubbles.
265
+ - Keep call-site lifecycle status, but stop depending on inline result body.
266
+ - Route askHuman answer flow through tellask result rendering instead of normal user-bubble
267
+ persistence.
268
+ - Revisit provider projection after the business model is in place, not before.
269
+
270
+ ## Review Standard For This Refactor
271
+
272
+ Behavior review should focus on current product semantics, not historical storage compatibility.
273
+
274
+ Primary questions:
275
+
276
+ - Does the user now see one coherent tellask result model?
277
+ - Are local tellask failures and sideline tellask responses rendered the same way?
278
+ - Does askHuman now behave like tellask instead of like an unrelated user-message path?
279
+ - Does carryover remain special without polluting the unified tellask result model?
280
+ - Did we remove result-path branching instead of just moving it around?