tianxincode 1.0.48 → 1.0.49

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 (298) hide show
  1. package/README.md +200 -200
  2. package/dist/cli/commands.js +18 -18
  3. package/dist/core/ai/agents/caller/prompts/role.txt +50 -50
  4. package/dist/core/ai/agents/chat/chat.agent.js +30 -30
  5. package/dist/core/ai/agents/chat/prompts/role.txt +30 -30
  6. package/dist/core/ai/agents/code/code.agent.js +6 -6
  7. package/dist/core/ai/agents/code/prompts/role.txt +50 -50
  8. package/dist/core/ai/agents/common/prompt/role.txt +51 -51
  9. package/dist/core/ai/agents/common/prompts.js +26 -26
  10. package/dist/core/ai/agents/design/design.agent.js +6 -6
  11. package/dist/core/ai/agents/design/prompts/role.txt +36 -36
  12. package/dist/core/ai/agents/dream/prompts/init.txt +20 -20
  13. package/dist/core/ai/agents/mem/mem.agent.js +5 -5
  14. package/dist/core/ai/agents/mem/prompts/role.txt +35 -35
  15. package/dist/core/ai/agents/skill/prompts/role.txt +61 -61
  16. package/dist/core/ai/agents/skill/skill.agent.js +26 -26
  17. package/dist/core/ai/agents/summarizer/prompts/role.txt +30 -30
  18. package/dist/core/ai/agents/task/prompts/role.txt +50 -50
  19. package/dist/core/ai/agents/task/task.agent.js +30 -30
  20. package/dist/core/db/db.service.d.ts.map +1 -1
  21. package/dist/core/db/db.service.js +2 -0
  22. package/dist/core/db/db.service.js.map +1 -1
  23. package/dist/core/db/init_sql/ai_log.init.js +15 -15
  24. package/dist/core/db/init_sql/code_snippet.init.js +11 -11
  25. package/dist/core/db/init_sql/config.init.js +15 -15
  26. package/dist/core/db/init_sql/custom_action.init.js +10 -10
  27. package/dist/core/db/init_sql/dingding.init.js +9 -9
  28. package/dist/core/db/init_sql/email.init.js +14 -14
  29. package/dist/core/db/init_sql/lsp.init.js +8 -8
  30. package/dist/core/db/init_sql/message_file.init.js +11 -11
  31. package/dist/core/db/init_sql/project.init.js +20 -20
  32. package/dist/core/db/init_sql/provider.init.js +35 -35
  33. package/dist/core/db/init_sql/scheduler.init.js +32 -32
  34. package/dist/core/db/init_sql/session.init.js +23 -23
  35. package/dist/core/db/init_sql/spec.init.js +15 -15
  36. package/dist/core/db/init_sql/waf_gateway.init.js +9 -9
  37. package/dist/core/db/init_sql/zihao.init.js +11 -11
  38. package/dist/core/lsp/sql.js +11 -11
  39. package/dist/core/tools/provider/bash.txt +47 -47
  40. package/dist/core/tools/provider/code_search.txt +20 -20
  41. package/dist/core/tools/provider/edit_file.txt +13 -13
  42. package/dist/core/tools/provider/glob.txt +12 -12
  43. package/dist/core/tools/provider/grep.txt +14 -14
  44. package/dist/core/tools/provider/lsp.txt +19 -19
  45. package/dist/core/tools/provider/memory.txt +21 -21
  46. package/dist/core/tools/provider/read_file.txt +17 -17
  47. package/dist/core/tools/provider/todo_read.txt +16 -16
  48. package/dist/core/tools/provider/todo_write.txt +48 -48
  49. package/dist/core/tools/provider/web_fetch.txt +17 -17
  50. package/dist/core/tools/provider/web_search.txt +18 -18
  51. package/dist/core/tools/provider/write_file.txt +11 -11
  52. package/dist/gateway/api/skill/detail_skill.d.ts.map +1 -1
  53. package/dist/gateway/api/skill/detail_skill.js +7 -5
  54. package/dist/gateway/api/skill/detail_skill.js.map +1 -1
  55. package/dist/gateway/cli/commands.js +18 -18
  56. package/dist/modules/ai/agents/chat/prompts/role.txt +30 -30
  57. package/dist/modules/ai/agents/code/prompts/role.txt +50 -50
  58. package/dist/modules/ai/agents/mem/prompts/role.txt +35 -35
  59. package/dist/modules/ai/agents/skill/prompts/role.txt +61 -61
  60. package/dist/modules/ai/agents/task/prompts/role.txt +50 -50
  61. package/dist/modules/ai/ai-log.service.js +10 -10
  62. package/dist/modules/ai/provider/openai/prompt/role.txt +51 -51
  63. package/dist/modules/ai/summarizer/summarizer.prompts.js +30 -30
  64. package/dist/modules/config/config.service.js +5 -5
  65. package/dist/modules/db/db.service.js +252 -252
  66. package/dist/modules/email/email.config.repository.js +1 -1
  67. package/dist/modules/repositories/project.repository.d.ts +28 -0
  68. package/dist/modules/repositories/project.repository.d.ts.map +1 -0
  69. package/dist/modules/repositories/project.repository.js +47 -0
  70. package/dist/modules/repositories/project.repository.js.map +1 -0
  71. package/dist/modules/scheduler/task-log.service.js +1 -1
  72. package/dist/modules/services/project/project.service.d.ts +14 -0
  73. package/dist/modules/services/project/project.service.d.ts.map +1 -0
  74. package/dist/modules/services/project/project.service.js +47 -0
  75. package/dist/modules/services/project/project.service.js.map +1 -0
  76. package/dist/modules/skill/skill.txt +36 -36
  77. package/dist/modules/spec/spec.injector.js +24 -24
  78. package/dist/modules/tools/provider/bash.txt +47 -47
  79. package/dist/modules/tools/provider/code_search.txt +20 -20
  80. package/dist/modules/tools/provider/edit_file.txt +13 -13
  81. package/dist/modules/tools/provider/glob.txt +12 -12
  82. package/dist/modules/tools/provider/grep.txt +14 -14
  83. package/dist/modules/tools/provider/lsp.txt +19 -19
  84. package/dist/modules/tools/provider/memory.txt +21 -21
  85. package/dist/modules/tools/provider/read_file.txt +17 -17
  86. package/dist/modules/tools/provider/todo_read.txt +16 -16
  87. package/dist/modules/tools/provider/todo_write.txt +48 -48
  88. package/dist/modules/tools/provider/web_fetch.txt +17 -17
  89. package/dist/modules/tools/provider/web_search.txt +18 -18
  90. package/dist/modules/tools/provider/write_file.txt +11 -11
  91. package/dist/modules/waf-gateway/waf-gateway.module.js +8 -8
  92. package/dist/modules/waf-gateway/waf-gateway.service.js +12 -12
  93. package/dist/repositories/project.repository.d.ts +28 -0
  94. package/dist/repositories/project.repository.d.ts.map +1 -0
  95. package/dist/repositories/project.repository.js +47 -0
  96. package/dist/repositories/project.repository.js.map +1 -0
  97. package/dist/repository/ai_log.repository.js +1 -1
  98. package/dist/repository/config.repository.js +5 -5
  99. package/dist/repository/email.repository.js +1 -1
  100. package/dist/repository/memory.repository.js +1 -1
  101. package/dist/repository/project.repository.js +3 -3
  102. package/dist/repository/scheduler.repository.js +2 -2
  103. package/dist/repository/session.repository.js +1 -1
  104. package/dist/repository/zihao-config.repository.js +1 -1
  105. package/dist/services/skill/skill.tool.d.ts.map +1 -1
  106. package/dist/services/skill/skill.tool.js +6 -1
  107. package/dist/services/skill/skill.tool.js.map +1 -1
  108. package/dist/services/skill/skill.txt +36 -36
  109. package/package.json +76 -76
  110. package/scripts/copy-txt.js +31 -31
  111. package/scripts/ink-scroll-demo.tsx +147 -147
  112. package/tsconfig.test.json +9 -9
  113. package/web/dist/assets/{ConfirmDialog-B2bVsPFI.js → ConfirmDialog-B03GcCHQ.js} +1 -1
  114. package/web/dist/assets/PcLayout-CYW3zqcs.css +1 -0
  115. package/web/dist/assets/{PcLayout-DeXNBHu2.js → PcLayout-ZTdJNg7G.js} +1 -1
  116. package/web/dist/assets/{aiLogsView-JvjhLmyo.js → aiLogsView-Bt8Xg1Qx.js} +1 -1
  117. package/web/dist/assets/{cssMode-sYHhwUZh.js → cssMode-CBb6D87U.js} +1 -1
  118. package/web/dist/assets/{customActionsView-Cvmzxvl4.js → customActionsView-DdjnHzwm.js} +1 -1
  119. package/web/dist/assets/deployView-CD7ji9IS.css +1 -0
  120. package/web/dist/assets/{deployView-CjV4ySrf.js → deployView-Cj51_Job.js} +1 -1
  121. package/web/dist/assets/designView-C3pSX4nP.css +1 -0
  122. package/web/dist/assets/designView-RT8tKEN9.js +18 -0
  123. package/web/dist/assets/devWorkflowView-BTozmaiN.js +36 -0
  124. package/web/dist/assets/devWorkflowView-DYhIfbCB.css +1 -0
  125. package/web/dist/assets/devWorkflowViewApp-CErbhC2s.css +1 -0
  126. package/web/dist/assets/{devWorkflowViewApp-DPlFgiS_.js → devWorkflowViewApp-DLslXEq9.js} +3 -3
  127. package/web/dist/assets/{fileZihao-DvZmuTYu.js → fileZihao-CtZ4bUIH.js} +1 -1
  128. package/web/dist/assets/{freemarker2-DTyAQBBj.js → freemarker2-CX3jc3l2.js} +1 -1
  129. package/web/dist/assets/gitChanges-D6QxPcii.css +1 -0
  130. package/web/dist/assets/{gitChanges-Cpf4HHoF.js → gitChanges-DFRvzL5I.js} +1 -1
  131. package/web/dist/assets/gitChangesApp-Bjn-MCmr.css +1 -0
  132. package/web/dist/assets/{gitChangesApp-BOURDd_l.js → gitChangesApp-ZI7-V8oB.js} +2 -2
  133. package/web/dist/assets/{handlebars-DiWIXxOG.js → handlebars-CTaQD6FN.js} +1 -1
  134. package/web/dist/assets/{html-BCQWkFzH.js → html-BruJsfYv.js} +1 -1
  135. package/web/dist/assets/{htmlMode-BbMA34cR.js → htmlMode-wewroXLr.js} +1 -1
  136. package/web/dist/assets/{index-C_tz4Wda.css → index-C0xmVTIn.css} +1 -1
  137. package/web/dist/assets/{index-C7axH05o.js → index-Cn73hS12.js} +9 -9
  138. package/web/dist/assets/{javascript-By4MYHaO.js → javascript-B4ku8P1-.js} +1 -1
  139. package/web/dist/assets/{jsonMode-5JIz7tDN.js → jsonMode-BIvVuBMG.js} +1 -1
  140. package/web/dist/assets/{liquid-BQBVii4f.js → liquid-Bo3G0Ep7.js} +1 -1
  141. package/web/dist/assets/{mdx-Cwk7nqzM.js → mdx-Duv0ylZz.js} +1 -1
  142. package/web/dist/assets/{mediaChat-DivTDoIv.js → mediaChat-RT7iqqYb.js} +1 -1
  143. package/web/dist/assets/{python-L_kGfe1T.js → python-CEhCctGm.js} +1 -1
  144. package/web/dist/assets/{razor-XGuHliMI.js → razor-DPK8nTD7.js} +1 -1
  145. package/web/dist/assets/{taskView-BcJ3LAxp.js → taskView-sOyebRqn.js} +1 -1
  146. package/web/dist/assets/{terminalView-q-UKzK0M.js → terminalView-GTYtDlus.js} +2 -2
  147. package/web/dist/assets/{terminalView-CQVYh6D3.css → terminalView-eZ0agsPP.css} +1 -1
  148. package/web/dist/assets/{tsMode-SuiD3mJa.js → tsMode-BZvUU1nf.js} +1 -1
  149. package/web/dist/assets/{typescript-DJcyqRjT.js → typescript-CmEn-k1B.js} +1 -1
  150. package/web/dist/assets/{wikiView-ygHSGyPp.css → wikiView-C-oqMnJM.css} +1 -1
  151. package/web/dist/assets/{wikiView-B3GIPUlD.js → wikiView-CRjg-cZ8.js} +1 -1
  152. package/web/dist/assets/{xml-DQgCzk55.js → xml-bjvdKeyy.js} +1 -1
  153. package/web/dist/assets/{yaml-DBdEYBPA.js → yaml-N5RXWxJk.js} +1 -1
  154. package/web/dist/index.html +2 -2
  155. package/web/package.json +28 -28
  156. package/dist/modules/ai/react/index.d.ts +0 -5
  157. package/dist/modules/ai/react/index.d.ts.map +0 -1
  158. package/dist/modules/ai/react/index.js +0 -4
  159. package/dist/modules/ai/react/index.js.map +0 -1
  160. package/dist/modules/ai/react/prompt/role.txt +0 -51
  161. package/dist/modules/ai/react/provider.parser.d.ts +0 -20
  162. package/dist/modules/ai/react/provider.parser.d.ts.map +0 -1
  163. package/dist/modules/ai/react/provider.parser.js +0 -88
  164. package/dist/modules/ai/react/provider.parser.js.map +0 -1
  165. package/dist/modules/ai/react/react.parser.d.ts +0 -80
  166. package/dist/modules/ai/react/react.parser.d.ts.map +0 -1
  167. package/dist/modules/ai/react/react.parser.js +0 -365
  168. package/dist/modules/ai/react/react.parser.js.map +0 -1
  169. package/dist/modules/ai/react/react.prompts.d.ts +0 -26
  170. package/dist/modules/ai/react/react.prompts.d.ts.map +0 -1
  171. package/dist/modules/ai/react/react.prompts.js +0 -170
  172. package/dist/modules/ai/react/react.prompts.js.map +0 -1
  173. package/dist/modules/ai/react/react.types.d.ts +0 -50
  174. package/dist/modules/ai/react/react.types.d.ts.map +0 -1
  175. package/dist/modules/ai/react/react.types.js +0 -2
  176. package/dist/modules/ai/react/react.types.js.map +0 -1
  177. package/dist/modules/ai/react/react.validator.d.ts +0 -14
  178. package/dist/modules/ai/react/react.validator.d.ts.map +0 -1
  179. package/dist/modules/ai/react/react.validator.js +0 -53
  180. package/dist/modules/ai/react/react.validator.js.map +0 -1
  181. package/dist/modules/ai/react.agent.d.ts +0 -82
  182. package/dist/modules/ai/react.agent.d.ts.map +0 -1
  183. package/dist/modules/ai/react.agent.js +0 -220
  184. package/dist/modules/ai/react.agent.js.map +0 -1
  185. package/dist/modules/skill/skill.service.d.ts +0 -72
  186. package/dist/modules/skill/skill.service.d.ts.map +0 -1
  187. package/dist/modules/skill/skill.service.js +0 -283
  188. package/dist/modules/skill/skill.service.js.map +0 -1
  189. package/dist/modules/tools/builtin/bash.d.ts +0 -3
  190. package/dist/modules/tools/builtin/bash.d.ts.map +0 -1
  191. package/dist/modules/tools/builtin/bash.js +0 -126
  192. package/dist/modules/tools/builtin/bash.js.map +0 -1
  193. package/dist/modules/tools/builtin/bash.tool.d.ts +0 -6
  194. package/dist/modules/tools/builtin/bash.tool.d.ts.map +0 -1
  195. package/dist/modules/tools/builtin/bash.tool.js +0 -52
  196. package/dist/modules/tools/builtin/bash.tool.js.map +0 -1
  197. package/dist/modules/tools/builtin/bash.txt +0 -69
  198. package/dist/modules/tools/builtin/code_search.d.ts +0 -3
  199. package/dist/modules/tools/builtin/code_search.d.ts.map +0 -1
  200. package/dist/modules/tools/builtin/code_search.js +0 -86
  201. package/dist/modules/tools/builtin/code_search.js.map +0 -1
  202. package/dist/modules/tools/builtin/code_search.txt +0 -41
  203. package/dist/modules/tools/builtin/edit-file.tool.d.ts +0 -6
  204. package/dist/modules/tools/builtin/edit-file.tool.d.ts.map +0 -1
  205. package/dist/modules/tools/builtin/edit-file.tool.js +0 -58
  206. package/dist/modules/tools/builtin/edit-file.tool.js.map +0 -1
  207. package/dist/modules/tools/builtin/edit_file.d.ts +0 -3
  208. package/dist/modules/tools/builtin/edit_file.d.ts.map +0 -1
  209. package/dist/modules/tools/builtin/edit_file.js +0 -105
  210. package/dist/modules/tools/builtin/edit_file.js.map +0 -1
  211. package/dist/modules/tools/builtin/edit_file.txt +0 -61
  212. package/dist/modules/tools/builtin/glob.d.ts +0 -3
  213. package/dist/modules/tools/builtin/glob.d.ts.map +0 -1
  214. package/dist/modules/tools/builtin/glob.js +0 -85
  215. package/dist/modules/tools/builtin/glob.js.map +0 -1
  216. package/dist/modules/tools/builtin/glob.tool.d.ts +0 -6
  217. package/dist/modules/tools/builtin/glob.tool.d.ts.map +0 -1
  218. package/dist/modules/tools/builtin/glob.tool.js +0 -81
  219. package/dist/modules/tools/builtin/glob.tool.js.map +0 -1
  220. package/dist/modules/tools/builtin/glob.txt +0 -33
  221. package/dist/modules/tools/builtin/grep.d.ts +0 -3
  222. package/dist/modules/tools/builtin/grep.d.ts.map +0 -1
  223. package/dist/modules/tools/builtin/grep.js +0 -94
  224. package/dist/modules/tools/builtin/grep.js.map +0 -1
  225. package/dist/modules/tools/builtin/grep.tool.d.ts +0 -6
  226. package/dist/modules/tools/builtin/grep.tool.d.ts.map +0 -1
  227. package/dist/modules/tools/builtin/grep.tool.js +0 -96
  228. package/dist/modules/tools/builtin/grep.tool.js.map +0 -1
  229. package/dist/modules/tools/builtin/grep.txt +0 -37
  230. package/dist/modules/tools/builtin/index.d.ts +0 -8
  231. package/dist/modules/tools/builtin/index.d.ts.map +0 -1
  232. package/dist/modules/tools/builtin/index.js +0 -80
  233. package/dist/modules/tools/builtin/index.js.map +0 -1
  234. package/dist/modules/tools/builtin/lsp.d.ts +0 -7
  235. package/dist/modules/tools/builtin/lsp.d.ts.map +0 -1
  236. package/dist/modules/tools/builtin/lsp.js +0 -126
  237. package/dist/modules/tools/builtin/lsp.js.map +0 -1
  238. package/dist/modules/tools/builtin/lsp.txt +0 -45
  239. package/dist/modules/tools/builtin/memory.d.ts +0 -3
  240. package/dist/modules/tools/builtin/memory.d.ts.map +0 -1
  241. package/dist/modules/tools/builtin/memory.js +0 -77
  242. package/dist/modules/tools/builtin/memory.js.map +0 -1
  243. package/dist/modules/tools/builtin/memory.txt +0 -58
  244. package/dist/modules/tools/builtin/read-file.tool.d.ts +0 -6
  245. package/dist/modules/tools/builtin/read-file.tool.d.ts.map +0 -1
  246. package/dist/modules/tools/builtin/read-file.tool.js +0 -46
  247. package/dist/modules/tools/builtin/read-file.tool.js.map +0 -1
  248. package/dist/modules/tools/builtin/read_file.d.ts +0 -3
  249. package/dist/modules/tools/builtin/read_file.d.ts.map +0 -1
  250. package/dist/modules/tools/builtin/read_file.js +0 -107
  251. package/dist/modules/tools/builtin/read_file.js.map +0 -1
  252. package/dist/modules/tools/builtin/read_file.txt +0 -38
  253. package/dist/modules/tools/builtin/todo_read.d.ts +0 -6
  254. package/dist/modules/tools/builtin/todo_read.d.ts.map +0 -1
  255. package/dist/modules/tools/builtin/todo_read.js +0 -25
  256. package/dist/modules/tools/builtin/todo_read.js.map +0 -1
  257. package/dist/modules/tools/builtin/todo_read.txt +0 -34
  258. package/dist/modules/tools/builtin/todo_write.d.ts +0 -6
  259. package/dist/modules/tools/builtin/todo_write.d.ts.map +0 -1
  260. package/dist/modules/tools/builtin/todo_write.js +0 -46
  261. package/dist/modules/tools/builtin/todo_write.js.map +0 -1
  262. package/dist/modules/tools/builtin/todo_write.txt +0 -67
  263. package/dist/modules/tools/builtin/web_fetch.d.ts +0 -3
  264. package/dist/modules/tools/builtin/web_fetch.d.ts.map +0 -1
  265. package/dist/modules/tools/builtin/web_fetch.js +0 -52
  266. package/dist/modules/tools/builtin/web_fetch.js.map +0 -1
  267. package/dist/modules/tools/builtin/web_fetch.txt +0 -38
  268. package/dist/modules/tools/builtin/web_search.d.ts +0 -3
  269. package/dist/modules/tools/builtin/web_search.d.ts.map +0 -1
  270. package/dist/modules/tools/builtin/web_search.js +0 -100
  271. package/dist/modules/tools/builtin/web_search.js.map +0 -1
  272. package/dist/modules/tools/builtin/web_search.txt +0 -43
  273. package/dist/modules/tools/builtin/write-file.tool.d.ts +0 -6
  274. package/dist/modules/tools/builtin/write-file.tool.d.ts.map +0 -1
  275. package/dist/modules/tools/builtin/write-file.tool.js +0 -38
  276. package/dist/modules/tools/builtin/write-file.tool.js.map +0 -1
  277. package/dist/modules/tools/builtin/write_file.d.ts +0 -3
  278. package/dist/modules/tools/builtin/write_file.d.ts.map +0 -1
  279. package/dist/modules/tools/builtin/write_file.js +0 -61
  280. package/dist/modules/tools/builtin/write_file.js.map +0 -1
  281. package/dist/modules/tools/builtin/write_file.txt +0 -58
  282. package/dist/modules/tools/provider/openai/tools.d.ts +0 -3
  283. package/dist/modules/tools/provider/openai/tools.d.ts.map +0 -1
  284. package/dist/modules/tools/provider/openai/tools.js +0 -212
  285. package/dist/modules/tools/provider/openai/tools.js.map +0 -1
  286. package/dist/modules/tools/provider/skill.d.ts +0 -6
  287. package/dist/modules/tools/provider/skill.d.ts.map +0 -1
  288. package/dist/modules/tools/provider/skill.js +0 -64
  289. package/dist/modules/tools/provider/skill.js.map +0 -1
  290. package/web/dist/assets/PcLayout-L-XuK1oQ.css +0 -1
  291. package/web/dist/assets/deployView-hCh3_M8H.css +0 -1
  292. package/web/dist/assets/designView-CqZ75hOS.css +0 -1
  293. package/web/dist/assets/designView-DrUNRVEE.js +0 -18
  294. package/web/dist/assets/devWorkflowView-BpdJTMEb.js +0 -36
  295. package/web/dist/assets/devWorkflowView-D7EKjoLj.css +0 -1
  296. package/web/dist/assets/devWorkflowViewApp-BYYMIdCm.css +0 -1
  297. package/web/dist/assets/gitChanges-BYj-Y2K-.css +0 -1
  298. package/web/dist/assets/gitChangesApp-Btw-XKcP.css +0 -1
@@ -1,17 +1,17 @@
1
- ### 工具read_file
2
- 从本地文件系统读取文件或目录内容。如果路径不存在,返回错误。
3
-
4
- **功能**:
5
- - `file_path` 参数应为绝对路径
6
- - 默认返回文件开头最多 2000 行
7
- - `offset` 参数是从哪一行开始(从 1 开始)
8
- - 要读取后面的部分,用更大的 offset 再次调用
9
- - 用 Grep 工具搜索大文件或长行文件
10
- - 不确定正确路径时,用 Glob 工具按 glob 模式查找
11
- - 内容返回时每行带有行号前缀:`<line>: <content>`(如 "1: foo\n")
12
- - 目录返回时每行一个条目,子目录以 `/` 结尾
13
- - 超过 2000 字符的行会被截断
14
- - 可以并行调用此工具读取多个文件
15
- - 避免频繁小量读取(30 行片段),需要更多上下文时读取更大范围
16
- - 此工具可以读取图片和 PDF 并作为附件返回
17
-
1
+ ### 工具read_file
2
+ 从本地文件系统读取文件或目录内容。如果路径不存在,返回错误。
3
+
4
+ **功能**:
5
+ - `file_path` 参数应为绝对路径
6
+ - 默认返回文件开头最多 2000 行
7
+ - `offset` 参数是从哪一行开始(从 1 开始)
8
+ - 要读取后面的部分,用更大的 offset 再次调用
9
+ - 用 Grep 工具搜索大文件或长行文件
10
+ - 不确定正确路径时,用 Glob 工具按 glob 模式查找
11
+ - 内容返回时每行带有行号前缀:`<line>: <content>`(如 "1: foo\n")
12
+ - 目录返回时每行一个条目,子目录以 `/` 结尾
13
+ - 超过 2000 字符的行会被截断
14
+ - 可以并行调用此工具读取多个文件
15
+ - 避免频繁小量读取(30 行片段),需要更多上下文时读取更大范围
16
+ - 此工具可以读取图片和 PDF 并作为附件返回
17
+
@@ -1,16 +1,16 @@
1
- ### 工具todoread
2
- 使用此工具读取当前会话的任务列表。此工具应主动频繁使用,确保你了解当前任务列表的状态。应在以下情况使用:
3
-
4
- - 对话开始时查看待处理任务
5
- - 开始新任务前优先安排工作
6
- - 用户询问之前的任务或计划时
7
- - 不确定下一步该做什么时
8
- - 完成任务后更新对剩余工作的理解
9
- - 每隔几条消息后检查以确保在正确轨道上
10
-
11
- **使用说明**:
12
- - 此工具不需要参数。留空或发送空对象,**禁止**包含虚拟对象、占位符字符串或 "input"、"empty" 等键名
13
- - 返回任务列表及其状态、优先级和内容
14
- - 用此信息跟踪进度和计划下一步
15
- - 如果还没有任务,返回空列表
16
-
1
+ ### 工具todoread
2
+ 使用此工具读取当前会话的任务列表。此工具应主动频繁使用,确保你了解当前任务列表的状态。应在以下情况使用:
3
+
4
+ - 对话开始时查看待处理任务
5
+ - 开始新任务前优先安排工作
6
+ - 用户询问之前的任务或计划时
7
+ - 不确定下一步该做什么时
8
+ - 完成任务后更新对剩余工作的理解
9
+ - 每隔几条消息后检查以确保在正确轨道上
10
+
11
+ **使用说明**:
12
+ - 此工具不需要参数。留空或发送空对象,**禁止**包含虚拟对象、占位符字符串或 "input"、"empty" 等键名
13
+ - 返回任务列表及其状态、优先级和内容
14
+ - 用此信息跟踪进度和计划下一步
15
+ - 如果还没有任务,返回空列表
16
+
@@ -1,48 +1,48 @@
1
- ### 工具todowrite
2
- 使用此工具创建和管理当前编码会话的结构化任务列表。这帮助你跟踪进度、组织复杂任务,并向用户展示完成情况。
3
-
4
- ## 何时使用
5
-
6
- **主动使用此工具的场景**:
7
-
8
- 1. **复杂多步任务** - 任务需要 3 个或更多独立步骤或操作
9
- 2. **非平凡复杂任务** - 需要仔细规划或多个操作的任务
10
- 3. **用户明确请求任务列表** - 用户直接要求你规划任务时
11
- 4. **用户提供多任务** - 用户提供要做的事情列表(编号或逗号分隔)
12
- 5. **收到新指令后** - 立即捕获用户需求为任务。可根据新信息编辑任务列表
13
- 6. **完成任务后** - 标记完成并添加后续任务
14
- 7. **开始新任务时** - 标记进行中。同时只能有一个进行中的任务。先完成现有任务再开始新任务
15
-
16
- ## 何时不使用
17
-
18
- **跳过使用此工具的场景**:
19
- 1. 单一、简单的任务
20
- 2. 琐碎任务,跟踪没有组织价值
21
- 3. 可在少于 3 个简单步骤内完成的任务
22
- 4. 完全对话性或信息性的请求
23
-
24
- **注意**:如果只有一个琐碎任务要做,直接做即可,不需要任务列表。
25
-
26
- ## 任务状态
27
-
28
- - `pending`:尚未开始
29
- - `in_progress`:正在进行(同时只能有一个)
30
- - `completed`:已完成
31
- - `cancelled`:不再需要
32
-
33
- ## 任务管理
34
-
35
- - 实时更新状态
36
- - 完成后**立即**标记,不要批量
37
- - 同时只做一个任务
38
- - 完成当前任务后再开始新任务
39
- - 取消不再相关的任务
40
-
41
- ## 任务分解
42
-
43
- - 创建具体、可操作的事项
44
- - 将复杂任务分解为更小、可管理的步骤
45
- - 使用清晰、描述性的任务名称
46
-
47
- 如有疑问,使用此工具。积极主动的任务管理展示专注力,确保完成所有要求。
48
-
1
+ ### 工具todowrite
2
+ 使用此工具创建和管理当前编码会话的结构化任务列表。这帮助你跟踪进度、组织复杂任务,并向用户展示完成情况。
3
+
4
+ ## 何时使用
5
+
6
+ **主动使用此工具的场景**:
7
+
8
+ 1. **复杂多步任务** - 任务需要 3 个或更多独立步骤或操作
9
+ 2. **非平凡复杂任务** - 需要仔细规划或多个操作的任务
10
+ 3. **用户明确请求任务列表** - 用户直接要求你规划任务时
11
+ 4. **用户提供多任务** - 用户提供要做的事情列表(编号或逗号分隔)
12
+ 5. **收到新指令后** - 立即捕获用户需求为任务。可根据新信息编辑任务列表
13
+ 6. **完成任务后** - 标记完成并添加后续任务
14
+ 7. **开始新任务时** - 标记进行中。同时只能有一个进行中的任务。先完成现有任务再开始新任务
15
+
16
+ ## 何时不使用
17
+
18
+ **跳过使用此工具的场景**:
19
+ 1. 单一、简单的任务
20
+ 2. 琐碎任务,跟踪没有组织价值
21
+ 3. 可在少于 3 个简单步骤内完成的任务
22
+ 4. 完全对话性或信息性的请求
23
+
24
+ **注意**:如果只有一个琐碎任务要做,直接做即可,不需要任务列表。
25
+
26
+ ## 任务状态
27
+
28
+ - `pending`:尚未开始
29
+ - `in_progress`:正在进行(同时只能有一个)
30
+ - `completed`:已完成
31
+ - `cancelled`:不再需要
32
+
33
+ ## 任务管理
34
+
35
+ - 实时更新状态
36
+ - 完成后**立即**标记,不要批量
37
+ - 同时只做一个任务
38
+ - 完成当前任务后再开始新任务
39
+ - 取消不再相关的任务
40
+
41
+ ## 任务分解
42
+
43
+ - 创建具体、可操作的事项
44
+ - 将复杂任务分解为更小、可管理的步骤
45
+ - 使用清晰、描述性的任务名称
46
+
47
+ 如有疑问,使用此工具。积极主动的任务管理展示专注力,确保完成所有要求。
48
+
@@ -1,17 +1,17 @@
1
- ### 工具web_fetch
2
- 从指定 URL 获取内容。
3
-
4
- **功能**:
5
- - 接收 URL 和可选格式参数
6
- - 获取 URL 内容,转换为请求格式(默认为 markdown)
7
- - 返回指定格式的内容
8
- - 当你需要获取和分析网页内容时使用此工具
9
-
10
- **使用说明**:
11
- - **重要**:如果有其他工具提供更好的网页获取能力、更针对任务、或限制更少,**优先**使用该工具而不是此工具
12
- - URL 必须是完整有效的 URL
13
- - HTTP URL 会自动升级为 HTTPS
14
- - 格式选项:"markdown"(默认)、"text" 或 "html"
15
- - 此工具是只读的,不会修改任何文件
16
- - 内容非常大时可能会被摘要
17
-
1
+ ### 工具web_fetch
2
+ 从指定 URL 获取内容。
3
+
4
+ **功能**:
5
+ - 接收 URL 和可选格式参数
6
+ - 获取 URL 内容,转换为请求格式(默认为 markdown)
7
+ - 返回指定格式的内容
8
+ - 当你需要获取和分析网页内容时使用此工具
9
+
10
+ **使用说明**:
11
+ - **重要**:如果有其他工具提供更好的网页获取能力、更针对任务、或限制更少,**优先**使用该工具而不是此工具
12
+ - URL 必须是完整有效的 URL
13
+ - HTTP URL 会自动升级为 HTTPS
14
+ - 格式选项:"markdown"(默认)、"text" 或 "html"
15
+ - 此工具是只读的,不会修改任何文件
16
+ - 内容非常大时可能会被摘要
17
+
@@ -1,18 +1,18 @@
1
- ### 工具web_search
2
- 使用 Exa AI 搜索网络——执行实时网络搜索,可以抓取特定 URL 的内容。
3
-
4
- **功能**:
5
- - 提供最新信息用于时事和近期数据
6
- - 支持可配置的结果数量,返回最相关网站的内容
7
- - 用于访问知识截止日期之外的信息
8
- - 在单个 API 调用内执行搜索
9
-
10
- **使用说明**:
11
- - 支持实时爬取模式:'fallback'(缓存不可用时备用)或 'preferred'(优先实时爬取)
12
- - 搜索类型:'auto'(平衡)、'fast'(快速结果)、'deep'(全面搜索)
13
- - 可配置上下文长度以优化 LLM 集成
14
- - 支持域名过滤和高级搜索选项
15
-
16
- **当前年份是 2026 年**。搜索最近信息或时事时**必须**使用此年份:
17
- - 正确示例:当前年份是 2026,搜索 "AI 新闻 2026",**不是** "AI 新闻 2025"
18
-
1
+ ### 工具web_search
2
+ 使用 Exa AI 搜索网络——执行实时网络搜索,可以抓取特定 URL 的内容。
3
+
4
+ **功能**:
5
+ - 提供最新信息用于时事和近期数据
6
+ - 支持可配置的结果数量,返回最相关网站的内容
7
+ - 用于访问知识截止日期之外的信息
8
+ - 在单个 API 调用内执行搜索
9
+
10
+ **使用说明**:
11
+ - 支持实时爬取模式:'fallback'(缓存不可用时备用)或 'preferred'(优先实时爬取)
12
+ - 搜索类型:'auto'(平衡)、'fast'(快速结果)、'deep'(全面搜索)
13
+ - 可配置上下文长度以优化 LLM 集成
14
+ - 支持域名过滤和高级搜索选项
15
+
16
+ **当前年份是 2026 年**。搜索最近信息或时事时**必须**使用此年份:
17
+ - 正确示例:当前年份是 2026,搜索 "AI 新闻 2026",**不是** "AI 新闻 2025"
18
+
@@ -1,11 +1,11 @@
1
- ### 工具write_file
2
- 写入文件到本地文件系统。
3
-
4
- **功能**:
5
- - 如果提供的路径已存在文件,**此工具会报错**
6
- - 如果是已存在的文件,**必须**先用 Read 工具读取文件内容,然后使用 Edit 工具修改
7
- - **优先**编辑现有文件,**禁止**创建新文件除非明确需要
8
- - **禁止**主动创建文档文件(*.md)或 README 文件。只有用户明确要求时才创建
9
- - 只有用户明确要求时才使用表情符号
10
- - 父目录不存在时会自动创建。避免写入表情符号除非被要求
11
-
1
+ ### 工具write_file
2
+ 写入文件到本地文件系统。
3
+
4
+ **功能**:
5
+ - 如果提供的路径已存在文件,**此工具会报错**
6
+ - 如果是已存在的文件,**必须**先用 Read 工具读取文件内容,然后使用 Edit 工具修改
7
+ - **优先**编辑现有文件,**禁止**创建新文件除非明确需要
8
+ - **禁止**主动创建文档文件(*.md)或 README 文件。只有用户明确要求时才创建
9
+ - 只有用户明确要求时才使用表情符号
10
+ - 父目录不存在时会自动创建。避免写入表情符号除非被要求
11
+
@@ -77,14 +77,14 @@ export class WafGatewayService {
77
77
  server_host: config.server_ip,
78
78
  server_port: 5555,
79
79
  register_secret: config.secret_key,
80
- rsa_public_key: `-----BEGIN PUBLIC KEY-----
81
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmXlcvzBsEX5rhzQl2lo
82
- usXBBtUpmnPykEf2MpRa4NmUOKZwjeVS2nmqwfUdgzVBuTfVXOF4paqnWh/DupMP
83
- XzE8lWj72VPjoPFt8yO0+0baAOMCi6L6gwzOdzu/EF4cIN6Bh4V648zc+TqRg2o/
84
- +UqUb6cRfIc2ftP0aT/CudSei/IYZxUuL55vckU9dlMb8D6OVllrg6m5YMnPj4W5
85
- Gb5eQxMU5Yryux3/9vPwdmfiRmGteqNn/pLOQhgd6LxX+7bBUEb3y8sSyEwEN1eW
86
- 0SADkZXdofyQRsRrnmeJuk9bQUAeBBkbGOtUL/ROUbFckfsKLdzokPHpX8/+Pndh
87
- RQIDAQAB
80
+ rsa_public_key: `-----BEGIN PUBLIC KEY-----
81
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmXlcvzBsEX5rhzQl2lo
82
+ usXBBtUpmnPykEf2MpRa4NmUOKZwjeVS2nmqwfUdgzVBuTfVXOF4paqnWh/DupMP
83
+ XzE8lWj72VPjoPFt8yO0+0baAOMCi6L6gwzOdzu/EF4cIN6Bh4V648zc+TqRg2o/
84
+ +UqUb6cRfIc2ftP0aT/CudSei/IYZxUuL55vckU9dlMb8D6OVllrg6m5YMnPj4W5
85
+ Gb5eQxMU5Yryux3/9vPwdmfiRmGteqNn/pLOQhgd6LxX+7bBUEb3y8sSyEwEN1eW
86
+ 0SADkZXdofyQRsRrnmeJuk9bQUAeBBkbGOtUL/ROUbFckfsKLdzokPHpX8/+Pndh
87
+ RQIDAQAB
88
88
  -----END PUBLIC KEY-----`
89
89
  };
90
90
  fs.writeFileSync(this.configFile, JSON.stringify(tunnelConfig, null, 2));
@@ -24,10 +24,10 @@ export class WafGatewayService {
24
24
  const now = new Date().toISOString();
25
25
  const current = this.getConfig();
26
26
  if (current) {
27
- dbService.run(`UPDATE waf_gateway_config SET
28
- secret_key = ?,
29
- server_ip = ?,
30
- updated_at = ?
27
+ dbService.run(`UPDATE waf_gateway_config SET
28
+ secret_key = ?,
29
+ server_ip = ?,
30
+ updated_at = ?
31
31
  WHERE id = 1`, [
32
32
  config.secret_key ?? current.secret_key,
33
33
  config.server_ip ?? current.server_ip,
@@ -87,14 +87,14 @@ export class WafGatewayService {
87
87
  server_host: config.server_ip,
88
88
  server_port: 5555,
89
89
  register_secret: config.secret_key,
90
- rsa_public_key: `-----BEGIN PUBLIC KEY-----
91
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmXlcvzBsEX5rhzQl2lo
92
- usXBBtUpmnPykEf2MpRa4NmUOKZwjeVS2nmqwfUdgzVBuTfVXOF4paqnWh/DupMP
93
- XzE8lWj72VPjoPFt8yO0+0baAOMCi6L6gwzOdzu/EF4cIN6Bh4V648zc+TqRg2o/
94
- +UqUb6cRfIc2ftP0aT/CudSei/IYZxUuL55vckU9dlMb8D6OVllrg6m5YMnPj4W5
95
- Gb5eQxMU5Yryux3/9vPwdmfiRmGteqNn/pLOQhgd6LxX+7bBUEb3y8sSyEwEN1eW
96
- 0SADkZXdofyQRsRrnmeJuk9bQUAeBBkbGOtUL/ROUbFckfsKLdzokPHpX8/+Pndh
97
- RQIDAQAB
90
+ rsa_public_key: `-----BEGIN PUBLIC KEY-----
91
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmXlcvzBsEX5rhzQl2lo
92
+ usXBBtUpmnPykEf2MpRa4NmUOKZwjeVS2nmqwfUdgzVBuTfVXOF4paqnWh/DupMP
93
+ XzE8lWj72VPjoPFt8yO0+0baAOMCi6L6gwzOdzu/EF4cIN6Bh4V648zc+TqRg2o/
94
+ +UqUb6cRfIc2ftP0aT/CudSei/IYZxUuL55vckU9dlMb8D6OVllrg6m5YMnPj4W5
95
+ Gb5eQxMU5Yryux3/9vPwdmfiRmGteqNn/pLOQhgd6LxX+7bBUEb3y8sSyEwEN1eW
96
+ 0SADkZXdofyQRsRrnmeJuk9bQUAeBBkbGOtUL/ROUbFckfsKLdzokPHpX8/+Pndh
97
+ RQIDAQAB
98
98
  -----END PUBLIC KEY-----`
99
99
  };
100
100
  fs.writeFileSync(this.configFile, JSON.stringify(tunnelConfig, null, 2));
@@ -0,0 +1,28 @@
1
+ export interface Project {
2
+ id: string;
3
+ name: string;
4
+ path: string;
5
+ description: string;
6
+ is_active: number;
7
+ is_favorite: number;
8
+ last_opened_at: string;
9
+ }
10
+ export declare class ProjectRepository {
11
+ private normalizeId;
12
+ findAll(): Project[];
13
+ findById(id: string | string[]): Project | undefined;
14
+ findByPath(path: string): Project | undefined;
15
+ findActive(): Project | undefined;
16
+ insert(data: {
17
+ name: string;
18
+ path: string;
19
+ description?: string;
20
+ }): Project;
21
+ update(id: string, data: {
22
+ name?: string;
23
+ description?: string;
24
+ }): void;
25
+ setActive(id: string): void;
26
+ delete(id: string): void;
27
+ }
28
+ //# sourceMappingURL=project.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/project.repository.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW;IAInB,OAAO,IAAI,OAAO,EAAE;IAMpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS;IAIpD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI7C,UAAU,IAAI,OAAO,GAAG,SAAS;IAIjC,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAS3E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAmBhE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK3B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGzB"}
@@ -0,0 +1,47 @@
1
+ import { dbService } from '../modules/db/index.js';
2
+ export class ProjectRepository {
3
+ normalizeId(id) {
4
+ return Array.isArray(id) ? id[0] : id;
5
+ }
6
+ findAll() {
7
+ return dbService.all('SELECT * FROM projects ORDER BY last_opened_at DESC');
8
+ }
9
+ findById(id) {
10
+ return dbService.get('SELECT * FROM projects WHERE id = ?', [this.normalizeId(id)]);
11
+ }
12
+ findByPath(path) {
13
+ return dbService.get('SELECT * FROM projects WHERE path = ?', [path]);
14
+ }
15
+ findActive() {
16
+ return dbService.get('SELECT * FROM projects WHERE is_active = 1 LIMIT 1');
17
+ }
18
+ insert(data) {
19
+ const id = crypto.randomUUID();
20
+ dbService.run('INSERT INTO projects (id, name, path, description, is_active, is_favorite, last_opened_at) VALUES (?, ?, ?, ?, 1, 0, ?)', [id, data.name, data.path, data.description || '', new Date().toISOString()]);
21
+ return this.findById(id);
22
+ }
23
+ update(id, data) {
24
+ const sets = [];
25
+ const values = [];
26
+ if (data.name) {
27
+ sets.push('name = ?');
28
+ values.push(data.name);
29
+ }
30
+ if (data.description !== undefined) {
31
+ sets.push('description = ?');
32
+ values.push(data.description);
33
+ }
34
+ if (sets.length > 0) {
35
+ values.push(id);
36
+ dbService.run(`UPDATE projects SET ${sets.join(', ')} WHERE id = ?`, values);
37
+ }
38
+ }
39
+ setActive(id) {
40
+ dbService.run('UPDATE projects SET is_active = 0');
41
+ dbService.run('UPDATE projects SET is_active = 1, last_opened_at = ? WHERE id = ?', [new Date().toISOString(), id]);
42
+ }
43
+ delete(id) {
44
+ dbService.run('DELETE FROM projects WHERE id = ?', [id]);
45
+ }
46
+ }
47
+ //# sourceMappingURL=project.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.repository.js","sourceRoot":"","sources":["../../src/repositories/project.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAYnD,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAC,EAAqB;QACvC,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACL,OAAO,SAAS,CAAC,GAAG,CAClB,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,EAAqB;QAC5B,OAAO,SAAS,CAAC,GAAG,CAAU,qCAAqC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,SAAS,CAAC,GAAG,CAAU,uCAAuC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAC,GAAG,CAAU,oDAAoD,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,CAAC,IAA0D;QAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,SAAS,CAAC,GAAG,CACX,yHAAyH,EACzH,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAC7E,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,IAA6C;QAC9D,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,SAAS,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,SAAS,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACnD,SAAS,CAAC,GAAG,CAAC,oEAAoE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,MAAM,CAAC,EAAU;QACf,SAAS,CAAC,GAAG,CAAC,mCAAmC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  import { BaseRepository } from './base.repository.js';
2
2
  export class AiLogRepository extends BaseRepository {
3
3
  insert(log) {
4
- this.execute(`INSERT INTO ai_call_logs (model_address, model_name, request_time, response_time, duration_ms, input_tokens, output_tokens, cost, call_type, session_id)
4
+ this.execute(`INSERT INTO ai_call_logs (model_address, model_name, request_time, response_time, duration_ms, input_tokens, output_tokens, cost, call_type, session_id)
5
5
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [log.modelAddress, log.modelName, log.requestTime, log.responseTime, log.durationMs,
6
6
  log.inputTokens, log.outputTokens, log.cost, log.callType, log.sessionId]);
7
7
  }
@@ -14,7 +14,7 @@ export class ConfigRepository extends BaseRepository {
14
14
  const count = this.queryOne('SELECT COUNT(*) as count FROM providers');
15
15
  const isFirst = (count?.count || 0) === 0;
16
16
  const id = data.id || uuidv4();
17
- this.execute(`INSERT INTO providers (id, name, api_key, base_url, enabled, is_default)
17
+ this.execute(`INSERT INTO providers (id, name, api_key, base_url, enabled, is_default)
18
18
  VALUES (?, ?, ?, ?, ?, ?)`, [id, data.name, data.apiKey, data.baseUrl || 'https://api.openai.com/v1', data.enabled ? 1 : 0, (isFirst || data.isDefault) ? 1 : 0]);
19
19
  return id;
20
20
  }
@@ -62,7 +62,7 @@ export class ConfigRepository extends BaseRepository {
62
62
  }
63
63
  insertModel(data) {
64
64
  const id = data.id || uuidv4();
65
- this.execute(`INSERT INTO models (id, provider_id, name, context_window, max_output_tokens, supports_vision, supports_tools, enabled)
65
+ this.execute(`INSERT INTO models (id, provider_id, name, context_window, max_output_tokens, supports_vision, supports_tools, enabled)
66
66
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [id, data.providerId, data.name, data.contextWindow || 4096, data.maxOutputTokens || 4096,
67
67
  data.supportsVision ? 1 : 0, data.supportsTools !== false ? 1 : 0, data.enabled ? 1 : 0]);
68
68
  return id;
@@ -95,12 +95,12 @@ export class ConfigRepository extends BaseRepository {
95
95
  return row?.value;
96
96
  }
97
97
  setConfig(key, value) {
98
- this.execute(`INSERT INTO config (key, value, updated_at) VALUES (?, ?, CURRENT_TIMESTAMP)
98
+ this.execute(`INSERT INTO config (key, value, updated_at) VALUES (?, ?, CURRENT_TIMESTAMP)
99
99
  ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP`, [key, value]);
100
100
  }
101
101
  getModelProvider(modelName) {
102
- return this.queryOne(`SELECT p.* FROM providers p
103
- INNER JOIN models m ON m.provider_id = p.id
102
+ return this.queryOne(`SELECT p.* FROM providers p
103
+ INNER JOIN models m ON m.provider_id = p.id
104
104
  WHERE m.name = ? LIMIT 1`, [modelName]) || undefined;
105
105
  }
106
106
  getDingTalkConfig() {
@@ -1,7 +1,7 @@
1
1
  import { BaseRepository } from './base.repository.js';
2
2
  export class EmailRepository extends BaseRepository {
3
3
  create(config) {
4
- const result = this.execute(`INSERT INTO email_config (name, host, port, secure, user, password, from_name, is_default)
4
+ const result = this.execute(`INSERT INTO email_config (name, host, port, secure, user, password, from_name, is_default)
5
5
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [config.name, config.host, config.port, config.secure, config.user, config.password, config.from_name || null, config.is_default || 0]);
6
6
  return result.lastInsertRowid;
7
7
  }
@@ -7,7 +7,7 @@ export class MemoryRepository extends BaseRepository {
7
7
  return this.query('SELECT * FROM project_knowledge WHERE project_path = ? ORDER BY key', [projectPath]);
8
8
  }
9
9
  set(projectPath, key, value) {
10
- this.execute(`INSERT INTO project_knowledge (project_path, key, value) VALUES (?, ?, ?)
10
+ this.execute(`INSERT INTO project_knowledge (project_path, key, value) VALUES (?, ?, ?)
11
11
  ON CONFLICT(project_path, key) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP`, [projectPath, key, value]);
12
12
  }
13
13
  delete(projectPath, key) {
@@ -19,9 +19,9 @@ export class ProjectRepository extends BaseRepository {
19
19
  }
20
20
  insert(data) {
21
21
  const id = crypto.randomUUID();
22
- const sql = `
23
- INSERT INTO projects (id, name, path, description, is_active, is_favorite, last_opened_at)
24
- VALUES (?, ?, ?, ?, 1, 0, datetime('now'))
22
+ const sql = `
23
+ INSERT INTO projects (id, name, path, description, is_active, is_favorite, last_opened_at)
24
+ VALUES (?, ?, ?, ?, 1, 0, datetime('now'))
25
25
  `;
26
26
  this.execute(sql, [id, data.name, data.path, data.description || '']);
27
27
  const result = this.findById(id);
@@ -12,7 +12,7 @@ export class SchedulerRepository extends BaseRepository {
12
12
  }
13
13
  createTask(config) {
14
14
  const id = config.id || uuidv4();
15
- this.execute(`INSERT INTO scheduled_tasks (id, name, schedule_type, model, content, notify_type, enabled, created_at, updated_at)
15
+ this.execute(`INSERT INTO scheduled_tasks (id, name, schedule_type, model, content, notify_type, enabled, created_at, updated_at)
16
16
  VALUES (?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`, [id, config.name, config.scheduleType, config.model, config.content, config.notifyType, config.enabled !== false ? 1 : 0]);
17
17
  for (let i = 0; i < config.skills.length; i++) {
18
18
  this.execute('INSERT INTO task_skills (id, task_id, skill, skill_order) VALUES (?, ?, ?, ?)', [uuidv4(), id, config.skills[i], i]);
@@ -70,7 +70,7 @@ export class SchedulerRepository extends BaseRepository {
70
70
  this.execute('UPDATE scheduled_tasks SET enabled = 0, updated_at = CURRENT_TIMESTAMP WHERE id = ?', [id]);
71
71
  }
72
72
  createLog(log) {
73
- this.execute(`INSERT INTO task_logs (id, task_id, status, prompt, result, error, duration, executed_at)
73
+ this.execute(`INSERT INTO task_logs (id, task_id, status, prompt, result, error, duration, executed_at)
74
74
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [log.id, log.taskId, log.status, log.prompt, log.result, log.error, log.duration, log.executedAt instanceof Date ? log.executedAt.toISOString() : log.executedAt]);
75
75
  }
76
76
  getLogsByTaskId(taskId, limit = 50) {
@@ -50,7 +50,7 @@ export class SessionRepository extends BaseRepository {
50
50
  this.execute('UPDATE sessions SET updated_at = CURRENT_TIMESTAMP WHERE id = ?', [id]);
51
51
  }
52
52
  updateTokenUsage(sessionId, promptTokens, completionTokens, cost) {
53
- this.execute(`UPDATE sessions SET prompt_tokens = prompt_tokens + ?, completion_tokens = completion_tokens + ?,
53
+ this.execute(`UPDATE sessions SET prompt_tokens = prompt_tokens + ?, completion_tokens = completion_tokens + ?,
54
54
  cost = cost + ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?`, [promptTokens, completionTokens, cost, sessionId]);
55
55
  }
56
56
  updateSummary(sessionId, summaryMessageId) {
@@ -11,7 +11,7 @@ export class ZihaoConfigRepository extends BaseRepository {
11
11
  }
12
12
  insert(config) {
13
13
  const now = new Date().toISOString();
14
- this.execute(`INSERT INTO zihao_config (id, name, url, username, password, is_active, created_at, updated_at)
14
+ this.execute(`INSERT INTO zihao_config (id, name, url, username, password, is_active, created_at, updated_at)
15
15
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [config.id, config.name, config.url, config.username, config.password, config.is_active, now, now]);
16
16
  return this.findById(config.id);
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill.tool.d.ts","sourceRoot":"","sources":["../../../src/services/skill/skill.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,IAAI,EAA2B,MAAM,gCAAgC,CAAA;AAE9E,eAAO,MAAM,SAAS,EAAE,IA+DvB,CAAA;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAalE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAavK"}
1
+ {"version":3,"file":"skill.tool.d.ts","sourceRoot":"","sources":["../../../src/services/skill/skill.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,IAAI,EAA2B,MAAM,gCAAgC,CAAA;AAE9E,eAAO,MAAM,SAAS,EAAE,IA+DvB,CAAA;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAalE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBvK"}
@@ -77,6 +77,11 @@ export async function buildAvailableSkillsPrompt() {
77
77
  return `<available_skills>\n${skillsXml}\n</available_skills>`;
78
78
  }
79
79
  export async function skillHandler(args) {
80
+ await skillsManager.loadAll();
81
+ const skill = skillsManager.getSkill(args.name);
82
+ if (!skill) {
83
+ return { success: false, error: `Skill "${args.name}" not found` };
84
+ }
80
85
  const result = await skillTool.execute(args, {});
81
86
  if (!result.success) {
82
87
  return { success: false, error: result.error };
@@ -85,7 +90,7 @@ export async function skillHandler(args) {
85
90
  success: true,
86
91
  data: {
87
92
  name: args.name,
88
- description: '',
93
+ description: skill.description || '',
89
94
  content: result.output
90
95
  }
91
96
  };
@@ -1 +1 @@
1
- {"version":3,"file":"skill.tool.js","sourceRoot":"","sources":["../../../src/services/skill/skill.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill.tool.js","sourceRoot":"","sources":["../../../src/services/skill/skill.tool.ts"],"names":[],"mappings":"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"}