dominds 0.1.0

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 (273) hide show
  1. package/LICENSE +157 -0
  2. package/README.md +250 -0
  3. package/README.zh.md +161 -0
  4. package/dist/access-control.js +253 -0
  5. package/dist/cli/create.js +263 -0
  6. package/dist/cli/read.js +84 -0
  7. package/dist/cli/tui.js +199 -0
  8. package/dist/cli/webui.js +169 -0
  9. package/dist/cli.js +227 -0
  10. package/dist/dialog-factory.js +53 -0
  11. package/dist/dialog-global-registry.js +68 -0
  12. package/dist/dialog-instance-registry.js +78 -0
  13. package/dist/dialog-run-state.js +198 -0
  14. package/dist/dialog.js +1024 -0
  15. package/dist/evt-registry.js +103 -0
  16. package/dist/index.js +8 -0
  17. package/dist/llm/client.js +69 -0
  18. package/dist/llm/defaults.yaml +386 -0
  19. package/dist/llm/driver.js +3214 -0
  20. package/dist/llm/gen/anthropic.js +611 -0
  21. package/dist/llm/gen/codex.js +375 -0
  22. package/dist/llm/gen/mock.js +326 -0
  23. package/dist/llm/gen/openai.js +470 -0
  24. package/dist/llm/gen/registry.js +26 -0
  25. package/dist/llm/gen.js +2 -0
  26. package/dist/llm/tools-projection.js +37 -0
  27. package/dist/log.js +228 -0
  28. package/dist/mcp/config.js +230 -0
  29. package/dist/mcp/sdk-client.js +129 -0
  30. package/dist/mcp/server-runtime.js +57 -0
  31. package/dist/mcp/stdio-client.js +280 -0
  32. package/dist/mcp/supervisor.js +979 -0
  33. package/dist/mcp/tool-names.js +109 -0
  34. package/dist/minds/builtin/cmdr/persona.md +3 -0
  35. package/dist/minds/builtin/dijiang/knowledge.md +287 -0
  36. package/dist/minds/builtin/dijiang/persona.md +7 -0
  37. package/dist/minds/builtin/fuxi/persona.en.md +59 -0
  38. package/dist/minds/builtin/fuxi/persona.zh.md +49 -0
  39. package/dist/minds/builtin/pangu/persona.en.md +78 -0
  40. package/dist/minds/builtin/pangu/persona.zh.md +71 -0
  41. package/dist/minds/load.js +617 -0
  42. package/dist/minds/minds-i18n.js +131 -0
  43. package/dist/minds/system-prompt.js +281 -0
  44. package/dist/persistence.js +3128 -0
  45. package/dist/problems.js +109 -0
  46. package/dist/server/api-routes.js +1031 -0
  47. package/dist/server/auth.js +180 -0
  48. package/dist/server/mime-types.js +32 -0
  49. package/dist/server/prompts-routes.js +543 -0
  50. package/dist/server/server-core.js +235 -0
  51. package/dist/server/setup-routes.js +697 -0
  52. package/dist/server/static-server.js +132 -0
  53. package/dist/server/websocket-handler.js +1011 -0
  54. package/dist/server.js +164 -0
  55. package/dist/shared/async-fifo-mutex.js +36 -0
  56. package/dist/shared/diligence.js +20 -0
  57. package/dist/shared/dotenv.js +144 -0
  58. package/dist/shared/evt.js +195 -0
  59. package/dist/shared/i18n/driver-messages.js +267 -0
  60. package/dist/shared/i18n/text.js +9 -0
  61. package/dist/shared/i18n/tool-result-messages.js +51 -0
  62. package/dist/shared/rtws-cli.js +73 -0
  63. package/dist/shared/runtime-language.js +47 -0
  64. package/dist/shared/team-mgmt-manual.js +116 -0
  65. package/dist/shared/types/context-health.js +2 -0
  66. package/dist/shared/types/dialog.js +11 -0
  67. package/dist/shared/types/i18n.js +2 -0
  68. package/dist/shared/types/index.js +26 -0
  69. package/dist/shared/types/language.js +40 -0
  70. package/dist/shared/types/problems.js +2 -0
  71. package/dist/shared/types/prompts.js +2 -0
  72. package/dist/shared/types/q4h.js +7 -0
  73. package/dist/shared/types/run-state.js +8 -0
  74. package/dist/shared/types/setup.js +2 -0
  75. package/dist/shared/types/storage.js +10 -0
  76. package/dist/shared/types/tellask.js +8 -0
  77. package/dist/shared/types/tools-registry.js +2 -0
  78. package/dist/shared/types/wire.js +12 -0
  79. package/dist/shared/utils/fmt.js +9 -0
  80. package/dist/shared/utils/html.js +20 -0
  81. package/dist/shared/utils/id.js +18 -0
  82. package/dist/shared/utils/inter-dialog-format.js +101 -0
  83. package/dist/shared/utils/time.js +13 -0
  84. package/dist/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  85. package/dist/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  86. package/dist/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  87. package/dist/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  88. package/dist/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  89. package/dist/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  90. package/dist/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  91. package/dist/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  92. package/dist/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  93. package/dist/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  94. package/dist/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  95. package/dist/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  96. package/dist/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  97. package/dist/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  98. package/dist/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  99. package/dist/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  100. package/dist/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  101. package/dist/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  102. package/dist/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  103. package/dist/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  104. package/dist/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  105. package/dist/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  106. package/dist/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  107. package/dist/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  108. package/dist/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  109. package/dist/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  110. package/dist/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  111. package/dist/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  112. package/dist/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  113. package/dist/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  114. package/dist/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  115. package/dist/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  116. package/dist/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  117. package/dist/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  118. package/dist/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  119. package/dist/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  120. package/dist/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  121. package/dist/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  122. package/dist/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  123. package/dist/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  124. package/dist/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  125. package/dist/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  126. package/dist/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  127. package/dist/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  128. package/dist/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  129. package/dist/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  130. package/dist/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  131. package/dist/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  132. package/dist/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  133. package/dist/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  134. package/dist/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  135. package/dist/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  136. package/dist/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  137. package/dist/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  138. package/dist/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  139. package/dist/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  140. package/dist/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  141. package/dist/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  142. package/dist/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  143. package/dist/static/assets/_baseUniq-Crfl3d5Y.js +661 -0
  144. package/dist/static/assets/_baseUniq-Crfl3d5Y.js.map +1 -0
  145. package/dist/static/assets/arc-CbA_x9GD.js +132 -0
  146. package/dist/static/assets/arc-CbA_x9GD.js.map +1 -0
  147. package/dist/static/assets/architectureDiagram-VXUJARFQ-lcFS8ZQJ.js +8685 -0
  148. package/dist/static/assets/architectureDiagram-VXUJARFQ-lcFS8ZQJ.js.map +1 -0
  149. package/dist/static/assets/blockDiagram-VD42YOAC-B3Q36qRc.js +3608 -0
  150. package/dist/static/assets/blockDiagram-VD42YOAC-B3Q36qRc.js.map +1 -0
  151. package/dist/static/assets/c4Diagram-YG6GDRKO-Mt-aq3VH.js +2482 -0
  152. package/dist/static/assets/c4Diagram-YG6GDRKO-Mt-aq3VH.js.map +1 -0
  153. package/dist/static/assets/channel-BVr1Yke-.js +8 -0
  154. package/dist/static/assets/channel-BVr1Yke-.js.map +1 -0
  155. package/dist/static/assets/chunk-4BX2VUAB-qCIn5Iic.js +17 -0
  156. package/dist/static/assets/chunk-4BX2VUAB-qCIn5Iic.js.map +1 -0
  157. package/dist/static/assets/chunk-55IACEB6-q172NeCV.js +14 -0
  158. package/dist/static/assets/chunk-55IACEB6-q172NeCV.js.map +1 -0
  159. package/dist/static/assets/chunk-B4BG7PRW-CMJmtYzq.js +1827 -0
  160. package/dist/static/assets/chunk-B4BG7PRW-CMJmtYzq.js.map +1 -0
  161. package/dist/static/assets/chunk-DI55MBZ5-DiuwwZPL.js +1916 -0
  162. package/dist/static/assets/chunk-DI55MBZ5-DiuwwZPL.js.map +1 -0
  163. package/dist/static/assets/chunk-FMBD7UC4-06sqZTTn.js +20 -0
  164. package/dist/static/assets/chunk-FMBD7UC4-06sqZTTn.js.map +1 -0
  165. package/dist/static/assets/chunk-QN33PNHL-CnpBNkpP.js +25 -0
  166. package/dist/static/assets/chunk-QN33PNHL-CnpBNkpP.js.map +1 -0
  167. package/dist/static/assets/chunk-QZHKN3VN-CNgjMR-e.js +18 -0
  168. package/dist/static/assets/chunk-QZHKN3VN-CNgjMR-e.js.map +1 -0
  169. package/dist/static/assets/chunk-TZMSLE5B-BxtzW6--.js +109 -0
  170. package/dist/static/assets/chunk-TZMSLE5B-BxtzW6--.js.map +1 -0
  171. package/dist/static/assets/classDiagram-2ON5EDUG-29huvmn-.js +23 -0
  172. package/dist/static/assets/classDiagram-2ON5EDUG-29huvmn-.js.map +1 -0
  173. package/dist/static/assets/classDiagram-v2-WZHVMYZB-29huvmn-.js +23 -0
  174. package/dist/static/assets/classDiagram-v2-WZHVMYZB-29huvmn-.js.map +1 -0
  175. package/dist/static/assets/clone-D2OgLSSn.js +9 -0
  176. package/dist/static/assets/clone-D2OgLSSn.js.map +1 -0
  177. package/dist/static/assets/cose-bilkent-S5V4N54A-BNegDCxl.js +4943 -0
  178. package/dist/static/assets/cose-bilkent-S5V4N54A-BNegDCxl.js.map +1 -0
  179. package/dist/static/assets/cytoscape.esm-Bm8DJGmZ.js +30240 -0
  180. package/dist/static/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -0
  181. package/dist/static/assets/dagre-6UL2VRFP-f1XrTRSn.js +695 -0
  182. package/dist/static/assets/dagre-6UL2VRFP-f1XrTRSn.js.map +1 -0
  183. package/dist/static/assets/defaultLocale-DVr69WTU.js +207 -0
  184. package/dist/static/assets/defaultLocale-DVr69WTU.js.map +1 -0
  185. package/dist/static/assets/diagram-PSM6KHXK-8w1WbeDi.js +849 -0
  186. package/dist/static/assets/diagram-PSM6KHXK-8w1WbeDi.js.map +1 -0
  187. package/dist/static/assets/diagram-QEK2KX5R-CF4wtMmR.js +303 -0
  188. package/dist/static/assets/diagram-QEK2KX5R-CF4wtMmR.js.map +1 -0
  189. package/dist/static/assets/diagram-S2PKOQOG-8p3Avgn2.js +213 -0
  190. package/dist/static/assets/diagram-S2PKOQOG-8p3Avgn2.js.map +1 -0
  191. package/dist/static/assets/erDiagram-Q2GNP2WA-BMKLxlM9.js +1159 -0
  192. package/dist/static/assets/erDiagram-Q2GNP2WA-BMKLxlM9.js.map +1 -0
  193. package/dist/static/assets/favicon-Cmg5RbCj.svg +8 -0
  194. package/dist/static/assets/flowDiagram-NV44I4VS-CgEuPNK2.js +2332 -0
  195. package/dist/static/assets/flowDiagram-NV44I4VS-CgEuPNK2.js.map +1 -0
  196. package/dist/static/assets/ganttDiagram-JELNMOA3-bJkDCf-9.js +3681 -0
  197. package/dist/static/assets/ganttDiagram-JELNMOA3-bJkDCf-9.js.map +1 -0
  198. package/dist/static/assets/gitGraphDiagram-NY62KEGX-4QE9kesp.js +1206 -0
  199. package/dist/static/assets/gitGraphDiagram-NY62KEGX-4QE9kesp.js.map +1 -0
  200. package/dist/static/assets/graph-CS0Pmm7c.js +597 -0
  201. package/dist/static/assets/graph-CS0Pmm7c.js.map +1 -0
  202. package/dist/static/assets/index-BS6HnGzC.js +112303 -0
  203. package/dist/static/assets/index-BS6HnGzC.js.map +1 -0
  204. package/dist/static/assets/index-DaIsSzC_.css +483 -0
  205. package/dist/static/assets/infoDiagram-WHAUD3N6-ypBcKfUs.js +34 -0
  206. package/dist/static/assets/infoDiagram-WHAUD3N6-ypBcKfUs.js.map +1 -0
  207. package/dist/static/assets/init-ZxktEp_H.js +17 -0
  208. package/dist/static/assets/init-ZxktEp_H.js.map +1 -0
  209. package/dist/static/assets/journeyDiagram-XKPGCS4Q-QnrxDowJ.js +1255 -0
  210. package/dist/static/assets/journeyDiagram-XKPGCS4Q-QnrxDowJ.js.map +1 -0
  211. package/dist/static/assets/kanban-definition-3W4ZIXB7-CfvEc4z5.js +1048 -0
  212. package/dist/static/assets/kanban-definition-3W4ZIXB7-CfvEc4z5.js.map +1 -0
  213. package/dist/static/assets/layout-8TGxpm23.js +2218 -0
  214. package/dist/static/assets/layout-8TGxpm23.js.map +1 -0
  215. package/dist/static/assets/linear-BATBPQQv.js +341 -0
  216. package/dist/static/assets/linear-BATBPQQv.js.map +1 -0
  217. package/dist/static/assets/min-B3oVH3AC.js +42 -0
  218. package/dist/static/assets/min-B3oVH3AC.js.map +1 -0
  219. package/dist/static/assets/mindmap-definition-VGOIOE7T-L7VLwwF8.js +1127 -0
  220. package/dist/static/assets/mindmap-definition-VGOIOE7T-L7VLwwF8.js.map +1 -0
  221. package/dist/static/assets/ordinal-CxptdPJm.js +77 -0
  222. package/dist/static/assets/ordinal-CxptdPJm.js.map +1 -0
  223. package/dist/static/assets/pieDiagram-ADFJNKIX-CFW3zIhM.js +241 -0
  224. package/dist/static/assets/pieDiagram-ADFJNKIX-CFW3zIhM.js.map +1 -0
  225. package/dist/static/assets/quadrantDiagram-AYHSOK5B-B7ssen3E.js +1338 -0
  226. package/dist/static/assets/quadrantDiagram-AYHSOK5B-B7ssen3E.js.map +1 -0
  227. package/dist/static/assets/requirementDiagram-UZGBJVZJ-D0v5BArv.js +1162 -0
  228. package/dist/static/assets/requirementDiagram-UZGBJVZJ-D0v5BArv.js.map +1 -0
  229. package/dist/static/assets/sankeyDiagram-TZEHDZUN-B7slncJe.js +1195 -0
  230. package/dist/static/assets/sankeyDiagram-TZEHDZUN-B7slncJe.js.map +1 -0
  231. package/dist/static/assets/sequenceDiagram-WL72ISMW-oXU2lRh_.js +3875 -0
  232. package/dist/static/assets/sequenceDiagram-WL72ISMW-oXU2lRh_.js.map +1 -0
  233. package/dist/static/assets/stateDiagram-FKZM4ZOC-CFYsEd0x.js +452 -0
  234. package/dist/static/assets/stateDiagram-FKZM4ZOC-CFYsEd0x.js.map +1 -0
  235. package/dist/static/assets/stateDiagram-v2-4FDKWEC3-C0UWaNA7.js +22 -0
  236. package/dist/static/assets/stateDiagram-v2-4FDKWEC3-C0UWaNA7.js.map +1 -0
  237. package/dist/static/assets/timeline-definition-IT6M3QCI-C3KODUrh.js +1223 -0
  238. package/dist/static/assets/timeline-definition-IT6M3QCI-C3KODUrh.js.map +1 -0
  239. package/dist/static/assets/treemap-KMMF4GRG-DAGDLhj2.js +18753 -0
  240. package/dist/static/assets/treemap-KMMF4GRG-DAGDLhj2.js.map +1 -0
  241. package/dist/static/assets/xychartDiagram-PRI3JC2R-C0J9iwTO.js +1888 -0
  242. package/dist/static/assets/xychartDiagram-PRI3JC2R-C0J9iwTO.js.map +1 -0
  243. package/dist/static/index.html +71 -0
  244. package/dist/static/testing/dom-observation-utils.js +425 -0
  245. package/dist/static/testing/e2e-test-helper.js +3119 -0
  246. package/dist/team.js +1160 -0
  247. package/dist/tellask.js +431 -0
  248. package/dist/tool.js +150 -0
  249. package/dist/tools/apply-patch.js +542 -0
  250. package/dist/tools/builtins.js +196 -0
  251. package/dist/tools/context-health.js +177 -0
  252. package/dist/tools/ctrl.js +478 -0
  253. package/dist/tools/diag.js +583 -0
  254. package/dist/tools/env.js +184 -0
  255. package/dist/tools/fs.js +818 -0
  256. package/dist/tools/mcp.js +138 -0
  257. package/dist/tools/mem.js +349 -0
  258. package/dist/tools/os.js +751 -0
  259. package/dist/tools/prompts/team_mgmt.en.md +70 -0
  260. package/dist/tools/prompts/team_mgmt.zh.md +70 -0
  261. package/dist/tools/prompts/ws_mod.en.md +86 -0
  262. package/dist/tools/prompts/ws_mod.zh.md +87 -0
  263. package/dist/tools/registry-snapshot.js +31 -0
  264. package/dist/tools/registry.js +121 -0
  265. package/dist/tools/ripgrep.js +678 -0
  266. package/dist/tools/team-mgmt.js +3300 -0
  267. package/dist/tools/txt.js +3178 -0
  268. package/dist/utils/id.js +72 -0
  269. package/dist/utils/task-doc.js +236 -0
  270. package/dist/utils/task-package.js +522 -0
  271. package/dist/utils/taskdoc-search.js +280 -0
  272. package/dist/utils/taskdoc.js +400 -0
  273. package/package.json +69 -0
@@ -0,0 +1,543 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.handleGetBuiltinPrompts = handleGetBuiltinPrompts;
40
+ exports.handleGetWorkspacePrompts = handleGetWorkspacePrompts;
41
+ exports.handleGetPromptCatalog = handleGetPromptCatalog;
42
+ exports.handleSaveWorkspacePrompt = handleSaveWorkspacePrompt;
43
+ exports.handleTeamMgmtManual = handleTeamMgmtManual;
44
+ const promises_1 = __importDefault(require("fs/promises"));
45
+ const path_1 = __importDefault(require("path"));
46
+ const yaml_1 = __importDefault(require("yaml"));
47
+ const log_1 = require("../log");
48
+ const log = (0, log_1.createLogger)('prompts-routes');
49
+ function isRecord(value) {
50
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
51
+ }
52
+ function requireNonEmptyString(value) {
53
+ return typeof value === 'string' && value.trim() !== '' ? value : null;
54
+ }
55
+ function parseSaveWorkspacePromptTemplateRequest(raw) {
56
+ if (!isRecord(raw))
57
+ return null;
58
+ const groupKey = requireNonEmptyString(raw['groupKey']);
59
+ const uiLanguageRaw = raw['uiLanguage'];
60
+ const uiLanguage = uiLanguageRaw === 'zh' || uiLanguageRaw === 'en' ? uiLanguageRaw : null;
61
+ const name = requireNonEmptyString(raw['name']);
62
+ const content = requireNonEmptyString(raw['content']);
63
+ if (!groupKey || !uiLanguage || !name || !content)
64
+ return null;
65
+ const fileNameRaw = raw['fileName'];
66
+ const fileName = typeof fileNameRaw === 'string' && fileNameRaw.trim() !== '' ? fileNameRaw : undefined;
67
+ const descriptionRaw = raw['description'];
68
+ const description = typeof descriptionRaw === 'string' && descriptionRaw.trim() !== '' ? descriptionRaw : undefined;
69
+ return { name, uiLanguage, fileName, description, content, groupKey };
70
+ }
71
+ function buildWorkspaceTemplateTokenFromName(name) {
72
+ return sanitizeWorkspaceTemplateFileName(name);
73
+ }
74
+ function buildWorkspaceTemplateTokenFromFileName(fileName) {
75
+ return sanitizeWorkspaceTemplateFileName(fileName);
76
+ }
77
+ function parseCatalogYaml(rawText) {
78
+ try {
79
+ const parsed = yaml_1.default.parse(rawText);
80
+ if (!isRecord(parsed))
81
+ return null;
82
+ const out = {};
83
+ for (const [k, v] of Object.entries(parsed)) {
84
+ if (!isRecord(v))
85
+ continue;
86
+ out[k] = {
87
+ name: typeof v['name'] === 'string' ? v['name'] : undefined,
88
+ 'name-zh': typeof v['name-zh'] === 'string' ? v['name-zh'] : undefined,
89
+ snippets: v['snippets'],
90
+ };
91
+ }
92
+ return out;
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ }
98
+ async function loadCatalogFromPath(abs) {
99
+ try {
100
+ const raw = await promises_1.default.readFile(abs, 'utf-8');
101
+ return parseCatalogYaml(raw);
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ }
107
+ function stripLangSuffixFromSnippetId(id) {
108
+ if (id.endsWith('.zh.md'))
109
+ return id.slice(0, -'.zh.md'.length);
110
+ if (id.endsWith('.en.md'))
111
+ return id.slice(0, -'.en.md'.length);
112
+ if (id.endsWith('.md'))
113
+ return id.slice(0, -'.md'.length);
114
+ return id;
115
+ }
116
+ async function buildPromptCatalog() {
117
+ const builtin = await readBuiltinPromptTemplates();
118
+ const workspace = await readWorkspacePromptTemplates();
119
+ const serverRoot = path_1.default.resolve(__dirname, '..', '..');
120
+ const builtinCatalogAbs = path_1.default.resolve(serverRoot, 'main', 'snippets', 'catalog.yaml');
121
+ const rtwsRoot = path_1.default.resolve(process.cwd());
122
+ const workspaceCatalogAbs = path_1.default.resolve(rtwsRoot, '.minds', 'prompts', 'catalog.yaml');
123
+ const builtinCatalog = await loadCatalogFromPath(builtinCatalogAbs);
124
+ const workspaceCatalog = await loadCatalogFromPath(workspaceCatalogAbs);
125
+ if (!builtinCatalog && !workspaceCatalog) {
126
+ return [
127
+ {
128
+ key: 'all',
129
+ titleI18n: { en: 'All', zh: '全部' },
130
+ templates: [...builtin, ...workspace],
131
+ },
132
+ ];
133
+ }
134
+ const builtinByToken = new Map();
135
+ for (const tpl of builtin) {
136
+ const p = typeof tpl.path === 'string' ? tpl.path : '';
137
+ if (!p.startsWith('snippets/') && !p.startsWith('main/snippets/'))
138
+ continue;
139
+ const noExt = stripLangSuffixFromSnippetId(p);
140
+ const token = noExt.replace(/^snippets\//, '').replace(/^main\/snippets\//, '');
141
+ if (!builtinByToken.has(token))
142
+ builtinByToken.set(token, tpl);
143
+ }
144
+ const workspaceByGroupAndToken = new Map();
145
+ for (const tpl of workspace) {
146
+ const p = typeof tpl.path === 'string' ? tpl.path : '';
147
+ if (!p.startsWith('.minds/prompts/'))
148
+ continue;
149
+ const rel = p.slice('.minds/prompts/'.length);
150
+ const parts = rel.split('/').filter((x) => x !== '');
151
+ const groupKey = parts[0];
152
+ const rest = parts.slice(1).join('/');
153
+ if (!groupKey || !rest)
154
+ continue;
155
+ const token = stripLangSuffixFromSnippetId(rest);
156
+ const k = `${groupKey}/${token}`;
157
+ if (!workspaceByGroupAndToken.has(k))
158
+ workspaceByGroupAndToken.set(k, tpl);
159
+ }
160
+ const keys = [];
161
+ if (builtinCatalog) {
162
+ keys.push(...Object.keys(builtinCatalog));
163
+ }
164
+ if (workspaceCatalog) {
165
+ for (const k of Object.keys(workspaceCatalog)) {
166
+ if (!keys.includes(k))
167
+ keys.push(k);
168
+ }
169
+ }
170
+ const groups = [];
171
+ for (const groupKey of keys) {
172
+ const metaBuiltin = builtinCatalog ? builtinCatalog[groupKey] : undefined;
173
+ const metaWorkspace = workspaceCatalog ? workspaceCatalog[groupKey] : undefined;
174
+ const titleEn = metaWorkspace?.name ?? metaBuiltin?.name ?? groupKey;
175
+ const titleZh = metaWorkspace?.['name-zh'] ??
176
+ metaBuiltin?.['name-zh'] ??
177
+ metaWorkspace?.name ??
178
+ metaBuiltin?.name ??
179
+ groupKey;
180
+ const templates = [];
181
+ if (metaBuiltin && Array.isArray(metaBuiltin.snippets)) {
182
+ for (const raw of metaBuiltin.snippets) {
183
+ if (typeof raw !== 'string')
184
+ continue;
185
+ const token = raw.trim();
186
+ if (!token)
187
+ continue;
188
+ const tpl = builtinByToken.get(token);
189
+ if (tpl)
190
+ templates.push(tpl);
191
+ }
192
+ }
193
+ if (metaWorkspace && Array.isArray(metaWorkspace.snippets)) {
194
+ for (const raw of metaWorkspace.snippets) {
195
+ if (typeof raw !== 'string')
196
+ continue;
197
+ const token = raw.trim();
198
+ if (!token)
199
+ continue;
200
+ const tpl = workspaceByGroupAndToken.get(`${groupKey}/${token}`);
201
+ if (tpl)
202
+ templates.push(tpl);
203
+ }
204
+ }
205
+ if (templates.length === 0)
206
+ continue;
207
+ // If a workspace template uses the same display name as a builtin template,
208
+ // prefer the workspace version to support "override" via same-name saves.
209
+ const workspaceNames = new Set();
210
+ for (const tpl of templates) {
211
+ if (tpl.source === 'workspace')
212
+ workspaceNames.add(tpl.name);
213
+ }
214
+ const filtered = [];
215
+ const seenNames = new Set();
216
+ for (const tpl of templates) {
217
+ if (tpl.source === 'builtin' && workspaceNames.has(tpl.name)) {
218
+ continue;
219
+ }
220
+ if (seenNames.has(tpl.name)) {
221
+ continue;
222
+ }
223
+ seenNames.add(tpl.name);
224
+ filtered.push(tpl);
225
+ }
226
+ groups.push({ key: groupKey, titleI18n: { en: titleEn, zh: titleZh }, templates: filtered });
227
+ }
228
+ if (groups.length === 0) {
229
+ return [
230
+ {
231
+ key: 'all',
232
+ titleI18n: { en: 'All', zh: '全部' },
233
+ templates: [...builtin, ...workspace],
234
+ },
235
+ ];
236
+ }
237
+ return groups;
238
+ }
239
+ function parseTeamMgmtManualRequest(raw) {
240
+ if (!isRecord(raw))
241
+ return null;
242
+ const uiLanguageRaw = raw['uiLanguage'];
243
+ const uiLanguage = uiLanguageRaw === 'zh' || uiLanguageRaw === 'en' ? uiLanguageRaw : null;
244
+ if (!uiLanguage)
245
+ return null;
246
+ const topicsValue = raw['topics'];
247
+ if (topicsValue === undefined) {
248
+ return { uiLanguage, topics: undefined };
249
+ }
250
+ if (!Array.isArray(topicsValue))
251
+ return null;
252
+ const topics = [];
253
+ for (const v of topicsValue) {
254
+ if (typeof v !== 'string')
255
+ return null;
256
+ topics.push(v);
257
+ }
258
+ return { uiLanguage, topics };
259
+ }
260
+ function safeTemplateIdFromPath(relPath) {
261
+ return relPath.replace(/\\/g, '/');
262
+ }
263
+ function stripOptionalBom(text) {
264
+ return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text;
265
+ }
266
+ function parseFrontmatter(rawText) {
267
+ const normalized = stripOptionalBom(rawText).replace(/\r\n/g, '\n');
268
+ const m = normalized.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
269
+ if (!m)
270
+ return { kind: 'none', body: rawText };
271
+ const fmText = m[1] ?? '';
272
+ const body = m[2] ?? '';
273
+ try {
274
+ const parsed = yaml_1.default.parse(fmText);
275
+ if (!isRecord(parsed))
276
+ return { kind: 'none', body };
277
+ const name = typeof parsed['name'] === 'string' ? parsed['name'] : undefined;
278
+ const description = typeof parsed['description'] === 'string' ? parsed['description'] : undefined;
279
+ return { kind: 'parsed', body, name, description };
280
+ }
281
+ catch {
282
+ return { kind: 'none', body };
283
+ }
284
+ }
285
+ function safeBasenameToName(filename) {
286
+ const base = filename.replace(/\.md$/i, '').trim();
287
+ return base === '' ? filename : base;
288
+ }
289
+ function ensureInsideDir(dirAbs, candidateAbs) {
290
+ return candidateAbs === dirAbs || candidateAbs.startsWith(dirAbs + path_1.default.sep);
291
+ }
292
+ async function listMarkdownFilesRecursively(dirAbs) {
293
+ const out = [];
294
+ const walk = async (abs) => {
295
+ let entries;
296
+ try {
297
+ entries = await promises_1.default.readdir(abs, { withFileTypes: true });
298
+ }
299
+ catch {
300
+ return;
301
+ }
302
+ for (const ent of entries) {
303
+ const childAbs = path_1.default.join(abs, ent.name);
304
+ if (ent.isDirectory()) {
305
+ await walk(childAbs);
306
+ continue;
307
+ }
308
+ if (ent.isFile() && ent.name.toLowerCase().endsWith('.md')) {
309
+ out.push(childAbs);
310
+ }
311
+ }
312
+ };
313
+ await walk(dirAbs);
314
+ return out;
315
+ }
316
+ async function readBuiltinPromptTemplates() {
317
+ const serverRoot = path_1.default.resolve(__dirname, '..', '..');
318
+ const candidates = [
319
+ path_1.default.resolve(serverRoot, 'main', 'snippets'),
320
+ path_1.default.resolve(serverRoot, 'dist', 'snippets'),
321
+ ];
322
+ let snippetsDir = null;
323
+ for (const dir of candidates) {
324
+ try {
325
+ const st = await promises_1.default.stat(dir);
326
+ if (st.isDirectory()) {
327
+ snippetsDir = dir;
328
+ break;
329
+ }
330
+ }
331
+ catch {
332
+ // ignore
333
+ }
334
+ }
335
+ if (!snippetsDir)
336
+ return [];
337
+ const files = await listMarkdownFilesRecursively(snippetsDir);
338
+ const templates = [];
339
+ for (const abs of files) {
340
+ if (path_1.default.basename(abs).toLowerCase() === 'readme.md')
341
+ continue;
342
+ try {
343
+ const raw = await promises_1.default.readFile(abs, 'utf-8');
344
+ const parsed = parseFrontmatter(raw);
345
+ const rel = path_1.default.relative(snippetsDir, abs).replace(/\\/g, '/');
346
+ templates.push({
347
+ id: `builtin:${safeTemplateIdFromPath(rel)}`,
348
+ name: parsed.kind === 'parsed' && parsed.name
349
+ ? parsed.name
350
+ : safeBasenameToName(path_1.default.basename(abs)),
351
+ description: parsed.kind === 'parsed' ? parsed.description : undefined,
352
+ content: parsed.kind === 'parsed' ? parsed.body : raw,
353
+ source: 'builtin',
354
+ path: path_1.default.basename(snippetsDir) === 'snippets' ? `snippets/${rel}` : `main/snippets/${rel}`,
355
+ });
356
+ }
357
+ catch {
358
+ // ignore unreadable file
359
+ }
360
+ }
361
+ return templates;
362
+ }
363
+ async function readWorkspacePromptTemplates() {
364
+ const rtwsRoot = path_1.default.resolve(process.cwd());
365
+ const promptsDir = path_1.default.resolve(rtwsRoot, '.minds', 'prompts');
366
+ const files = await listMarkdownFilesRecursively(promptsDir);
367
+ const templates = [];
368
+ for (const abs of files) {
369
+ try {
370
+ const raw = await promises_1.default.readFile(abs, 'utf-8');
371
+ const parsed = parseFrontmatter(raw);
372
+ const rel = path_1.default.relative(promptsDir, abs).replace(/\\/g, '/');
373
+ templates.push({
374
+ id: `workspace:${safeTemplateIdFromPath(rel)}`,
375
+ name: parsed.kind === 'parsed' && parsed.name
376
+ ? parsed.name
377
+ : safeBasenameToName(path_1.default.basename(abs)),
378
+ description: parsed.kind === 'parsed' ? parsed.description : undefined,
379
+ content: parsed.kind === 'parsed' ? parsed.body : raw,
380
+ source: 'workspace',
381
+ path: `.minds/prompts/${rel}`,
382
+ });
383
+ }
384
+ catch {
385
+ // ignore
386
+ }
387
+ }
388
+ return templates;
389
+ }
390
+ function sanitizeWorkspaceTemplateFileName(name) {
391
+ const trimmed = name.trim();
392
+ const base = trimmed.replace(/[^a-zA-Z0-9\-_\u4e00-\u9fff]+/g, '-').replace(/-+/g, '-');
393
+ const safe = base.replace(/^[-_]+/, '').replace(/[-_]+$/, '');
394
+ return safe === '' ? 'prompt' : safe;
395
+ }
396
+ async function upsertWorkspaceCatalogEntry(promptsDirAbs, groupKey, token) {
397
+ const catalogAbs = path_1.default.resolve(promptsDirAbs, 'catalog.yaml');
398
+ let catalog = {};
399
+ try {
400
+ const raw = await promises_1.default.readFile(catalogAbs, 'utf-8');
401
+ const parsed = parseCatalogYaml(raw);
402
+ if (parsed)
403
+ catalog = parsed;
404
+ }
405
+ catch {
406
+ // ignore
407
+ }
408
+ const existing = catalog[groupKey];
409
+ const meta = isRecord(existing) ? { ...existing } : {};
410
+ const prevSnippets = meta['snippets'];
411
+ const snippets = [];
412
+ if (Array.isArray(prevSnippets)) {
413
+ for (const item of prevSnippets) {
414
+ if (typeof item === 'string' && item.trim() !== '')
415
+ snippets.push(item.trim());
416
+ }
417
+ }
418
+ if (!snippets.includes(token))
419
+ snippets.push(token);
420
+ meta['snippets'] = snippets;
421
+ catalog[groupKey] = meta;
422
+ await promises_1.default.mkdir(promptsDirAbs, { recursive: true });
423
+ await promises_1.default.writeFile(catalogAbs, yaml_1.default.stringify(catalog), 'utf-8');
424
+ }
425
+ async function handleGetBuiltinPrompts() {
426
+ try {
427
+ const templates = await readBuiltinPromptTemplates();
428
+ return { success: true, templates };
429
+ }
430
+ catch (error) {
431
+ log.error('Failed to read builtin prompts', error);
432
+ return { success: false, error: 'Failed to load builtin prompts' };
433
+ }
434
+ }
435
+ async function handleGetWorkspacePrompts() {
436
+ try {
437
+ const templates = await readWorkspacePromptTemplates();
438
+ return { success: true, templates };
439
+ }
440
+ catch (error) {
441
+ log.error('Failed to read workspace prompts', error);
442
+ return { success: false, error: 'Failed to load workspace prompts' };
443
+ }
444
+ }
445
+ async function handleGetPromptCatalog() {
446
+ try {
447
+ const groups = await buildPromptCatalog();
448
+ return { success: true, groups };
449
+ }
450
+ catch (error) {
451
+ log.error('Failed to build prompt catalog', error);
452
+ return { success: false, error: 'Failed to load prompt catalog' };
453
+ }
454
+ }
455
+ async function handleSaveWorkspacePrompt(rawBody) {
456
+ let parsed;
457
+ try {
458
+ parsed = rawBody ? JSON.parse(rawBody) : {};
459
+ }
460
+ catch {
461
+ return { success: false, error: 'Invalid JSON body' };
462
+ }
463
+ const req = parseSaveWorkspacePromptTemplateRequest(parsed);
464
+ if (!req)
465
+ return { success: false, error: 'Invalid request body' };
466
+ const rtwsRoot = path_1.default.resolve(process.cwd());
467
+ const promptsDir = path_1.default.resolve(rtwsRoot, '.minds', 'prompts');
468
+ const safeName = typeof req.fileName === 'string' && req.fileName.trim() !== ''
469
+ ? sanitizeWorkspaceTemplateFileName(req.fileName)
470
+ : sanitizeWorkspaceTemplateFileName(req.name);
471
+ const langSuffix = req.uiLanguage;
472
+ const fileBasename = safeName.endsWith(`.${langSuffix}`) ? safeName : `${safeName}.${langSuffix}`;
473
+ const groupKey = sanitizeWorkspaceTemplateFileName(req.groupKey);
474
+ const fileAbs = path_1.default.resolve(promptsDir, groupKey, `${fileBasename}.md`);
475
+ if (!ensureInsideDir(promptsDir, fileAbs)) {
476
+ return { success: false, error: 'Invalid template name' };
477
+ }
478
+ try {
479
+ await promises_1.default.mkdir(path_1.default.dirname(fileAbs), { recursive: true });
480
+ const headerData = { name: req.name.trim() };
481
+ if (typeof req.description === 'string' && req.description.trim() !== '') {
482
+ headerData['description'] = req.description.trim();
483
+ }
484
+ const header = yaml_1.default.stringify(headerData).trimEnd();
485
+ const serialized = `---\n${header}\n---\n\n${req.content.trimEnd()}\n`;
486
+ await promises_1.default.writeFile(fileAbs, serialized, 'utf-8');
487
+ await upsertWorkspaceCatalogEntry(promptsDir, groupKey, typeof req.fileName === 'string' && req.fileName.trim() !== ''
488
+ ? buildWorkspaceTemplateTokenFromFileName(req.fileName)
489
+ : buildWorkspaceTemplateTokenFromName(req.name));
490
+ const rel = path_1.default.relative(promptsDir, fileAbs).replace(/\\/g, '/');
491
+ return {
492
+ success: true,
493
+ template: {
494
+ id: `workspace:${safeTemplateIdFromPath(rel)}`,
495
+ name: req.name.trim(),
496
+ description: typeof req.description === 'string' ? req.description : undefined,
497
+ content: req.content,
498
+ source: 'workspace',
499
+ path: `.minds/prompts/${rel}`,
500
+ },
501
+ };
502
+ }
503
+ catch (error) {
504
+ log.error('Failed to save workspace prompt', error);
505
+ return { success: false, error: 'Failed to save prompt template' };
506
+ }
507
+ }
508
+ async function handleTeamMgmtManual(rawBody) {
509
+ let parsed;
510
+ try {
511
+ parsed = rawBody ? JSON.parse(rawBody) : {};
512
+ }
513
+ catch {
514
+ return { success: false, error: 'Invalid JSON body' };
515
+ }
516
+ const req = parseTeamMgmtManualRequest(parsed);
517
+ if (!req)
518
+ return { success: false, error: 'Invalid request body' };
519
+ try {
520
+ const { getTool } = await Promise.resolve().then(() => __importStar(require('../tools/registry')));
521
+ const tool = getTool('team_mgmt_manual');
522
+ if (!tool || tool.type !== 'func') {
523
+ return { success: false, error: 'team_mgmt_manual tool not available' };
524
+ }
525
+ const fakeDlg = {
526
+ getLastUserLanguageCode: () => req.uiLanguage,
527
+ };
528
+ const { Team } = await Promise.resolve().then(() => __importStar(require('../team')));
529
+ const caller = new Team.Member({
530
+ id: 'webui',
531
+ name: 'WebUI',
532
+ read_dirs: ['.minds/**'],
533
+ write_dirs: ['.minds/**'],
534
+ });
535
+ const markdown = await tool.call(fakeDlg, caller, { topics: req.topics ?? [] });
536
+ return { success: true, markdown: String(markdown) };
537
+ }
538
+ catch (error) {
539
+ const msg = error instanceof Error ? error.message : 'Failed to load team manual';
540
+ log.error('Failed to call team_mgmt_manual', error);
541
+ return { success: false, error: msg };
542
+ }
543
+ }