tianxincode 1.0.11 → 1.0.13

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 (318) hide show
  1. package/dist/api/api.types.d.ts +1 -0
  2. package/dist/api/api.types.d.ts.map +1 -1
  3. package/dist/api/chat.routes.js +108 -139
  4. package/dist/api/chat.routes.js.map +1 -1
  5. package/dist/api/db.routes.js +8 -4
  6. package/dist/api/db.routes.js.map +1 -1
  7. package/dist/api/email.routes.d.ts +2 -0
  8. package/dist/api/email.routes.d.ts.map +1 -0
  9. package/dist/api/email.routes.js +78 -0
  10. package/dist/api/email.routes.js.map +1 -0
  11. package/dist/api/files.routes.js +54 -0
  12. package/dist/api/files.routes.js.map +1 -1
  13. package/dist/api/filesystem.routes.js +0 -2
  14. package/dist/api/filesystem.routes.js.map +1 -1
  15. package/dist/api/index.d.ts +1 -1
  16. package/dist/api/index.d.ts.map +1 -1
  17. package/dist/api/index.js +6 -1
  18. package/dist/api/index.js.map +1 -1
  19. package/dist/api/scheduler.routes.d.ts +2 -0
  20. package/dist/api/scheduler.routes.d.ts.map +1 -0
  21. package/dist/api/scheduler.routes.js +127 -0
  22. package/dist/api/scheduler.routes.js.map +1 -0
  23. package/dist/api/terminal.routes.d.ts +13 -0
  24. package/dist/api/terminal.routes.d.ts.map +1 -0
  25. package/dist/api/terminal.routes.js +77 -0
  26. package/dist/api/terminal.routes.js.map +1 -0
  27. package/dist/cli/commands.js +5 -1
  28. package/dist/cli/commands.js.map +1 -1
  29. package/dist/components/App.d.ts.map +1 -1
  30. package/dist/components/App.js +125 -100
  31. package/dist/components/App.js.map +1 -1
  32. package/dist/config/tx.config.d.ts +0 -1
  33. package/dist/config/tx.config.d.ts.map +1 -1
  34. package/dist/config/tx.config.js +1 -1
  35. package/dist/config/tx.config.js.map +1 -1
  36. package/dist/modules/ai/agents/chat/agent_tool.d.ts +2 -0
  37. package/dist/modules/ai/agents/chat/agent_tool.d.ts.map +1 -0
  38. package/dist/modules/ai/agents/chat/agent_tool.js +15 -0
  39. package/dist/modules/ai/agents/chat/agent_tool.js.map +1 -0
  40. package/dist/modules/ai/agents/chat/chat.agent.d.ts +32 -0
  41. package/dist/modules/ai/agents/chat/chat.agent.d.ts.map +1 -0
  42. package/dist/modules/ai/agents/chat/chat.agent.js +255 -0
  43. package/dist/modules/ai/agents/chat/chat.agent.js.map +1 -0
  44. package/dist/modules/ai/agents/chat/prompts/role.txt +31 -0
  45. package/dist/modules/ai/agents/code/agent_tool.d.ts +2 -0
  46. package/dist/modules/ai/agents/code/agent_tool.d.ts.map +1 -0
  47. package/dist/modules/ai/agents/code/agent_tool.js +17 -0
  48. package/dist/modules/ai/agents/code/agent_tool.js.map +1 -0
  49. package/dist/modules/ai/agents/code/code.agent.d.ts +32 -0
  50. package/dist/modules/ai/agents/code/code.agent.d.ts.map +1 -0
  51. package/dist/modules/ai/agents/code/code.agent.js +255 -0
  52. package/dist/modules/ai/agents/code/code.agent.js.map +1 -0
  53. package/dist/modules/ai/agents/code/prompts/role.txt +51 -0
  54. package/dist/modules/ai/agents/index.d.ts +7 -0
  55. package/dist/modules/ai/agents/index.d.ts.map +1 -0
  56. package/dist/modules/ai/agents/index.js +7 -0
  57. package/dist/modules/ai/agents/index.js.map +1 -0
  58. package/dist/modules/ai/agents/task/agent_tool.d.ts +2 -0
  59. package/dist/modules/ai/agents/task/agent_tool.d.ts.map +1 -0
  60. package/dist/modules/ai/agents/task/agent_tool.js +14 -0
  61. package/dist/modules/ai/agents/task/agent_tool.js.map +1 -0
  62. package/dist/modules/ai/agents/task/prompts/role.txt +51 -0
  63. package/dist/modules/ai/agents/task/task.agent.d.ts +31 -0
  64. package/dist/modules/ai/agents/task/task.agent.d.ts.map +1 -0
  65. package/dist/modules/ai/agents/task/task.agent.js +226 -0
  66. package/dist/modules/ai/agents/task/task.agent.js.map +1 -0
  67. package/dist/modules/ai/ai.service.d.ts +13 -18
  68. package/dist/modules/ai/ai.service.d.ts.map +1 -1
  69. package/dist/modules/ai/ai.service.js +40 -105
  70. package/dist/modules/ai/ai.service.js.map +1 -1
  71. package/dist/modules/ai/ai.types.d.ts +8 -5
  72. package/dist/modules/ai/ai.types.d.ts.map +1 -1
  73. package/dist/modules/ai/index.d.ts +1 -3
  74. package/dist/modules/ai/index.d.ts.map +1 -1
  75. package/dist/modules/ai/index.js +0 -2
  76. package/dist/modules/ai/index.js.map +1 -1
  77. package/dist/modules/ai/openai.provider.d.ts.map +1 -1
  78. package/dist/modules/ai/openai.provider.js +3 -0
  79. package/dist/modules/ai/openai.provider.js.map +1 -1
  80. package/dist/modules/ai/provider/base.d.ts +5 -0
  81. package/dist/modules/ai/provider/base.d.ts.map +1 -1
  82. package/dist/modules/ai/provider/openai/openai-agent.d.ts +8 -0
  83. package/dist/modules/ai/provider/openai/openai-agent.d.ts.map +1 -1
  84. package/dist/modules/ai/provider/openai/openai-agent.js +50 -5
  85. package/dist/modules/ai/provider/openai/openai-agent.js.map +1 -1
  86. package/dist/modules/ai/react/provider.parser.d.ts +20 -0
  87. package/dist/modules/ai/react/provider.parser.d.ts.map +1 -0
  88. package/dist/modules/ai/react/provider.parser.js +88 -0
  89. package/dist/modules/ai/react/provider.parser.js.map +1 -0
  90. package/dist/modules/ai/summarizer/summarizer.prompts.d.ts +1 -1
  91. package/dist/modules/ai/summarizer/summarizer.prompts.d.ts.map +1 -1
  92. package/dist/modules/ai/summarizer/summarizer.prompts.js +19 -19
  93. package/dist/modules/ai/summarizer/summarizer.prompts.js.map +1 -1
  94. package/dist/modules/ai/summarizer/summarizer.service.d.ts.map +1 -1
  95. package/dist/modules/ai/summarizer/summarizer.service.js +33 -7
  96. package/dist/modules/ai/summarizer/summarizer.service.js.map +1 -1
  97. package/dist/modules/ai/summarizer/summarizer.types.d.ts +1 -0
  98. package/dist/modules/ai/summarizer/summarizer.types.d.ts.map +1 -1
  99. package/dist/modules/config/config.service.d.ts +3 -0
  100. package/dist/modules/config/config.service.d.ts.map +1 -1
  101. package/dist/modules/config/config.service.js +33 -0
  102. package/dist/modules/config/config.service.js.map +1 -1
  103. package/dist/modules/db/db.service.d.ts +3 -0
  104. package/dist/modules/db/db.service.d.ts.map +1 -1
  105. package/dist/modules/db/db.service.js +79 -0
  106. package/dist/modules/db/db.service.js.map +1 -1
  107. package/dist/modules/email/email.config.repository.d.ts +14 -0
  108. package/dist/modules/email/email.config.repository.d.ts.map +1 -0
  109. package/dist/modules/email/email.config.repository.js +70 -0
  110. package/dist/modules/email/email.config.repository.js.map +1 -0
  111. package/dist/modules/email/email.service.d.ts +14 -0
  112. package/dist/modules/email/email.service.d.ts.map +1 -0
  113. package/dist/modules/email/email.service.js +54 -0
  114. package/dist/modules/email/email.service.js.map +1 -0
  115. package/dist/modules/email/email.types.d.ts +20 -0
  116. package/dist/modules/email/email.types.d.ts.map +1 -0
  117. package/dist/modules/email/email.types.js +2 -0
  118. package/dist/modules/email/email.types.js.map +1 -0
  119. package/dist/modules/email/index.d.ts +4 -0
  120. package/dist/modules/email/index.d.ts.map +1 -0
  121. package/dist/modules/email/index.js +3 -0
  122. package/dist/modules/email/index.js.map +1 -0
  123. package/dist/modules/gateway/adapters/dingtalk.adapter.d.ts +7 -0
  124. package/dist/modules/gateway/adapters/dingtalk.adapter.d.ts.map +1 -1
  125. package/dist/modules/gateway/adapters/dingtalk.adapter.js +62 -2
  126. package/dist/modules/gateway/adapters/dingtalk.adapter.js.map +1 -1
  127. package/dist/modules/gateway/gateway.service.d.ts +1 -0
  128. package/dist/modules/gateway/gateway.service.d.ts.map +1 -1
  129. package/dist/modules/gateway/gateway.service.js +61 -18
  130. package/dist/modules/gateway/gateway.service.js.map +1 -1
  131. package/dist/modules/gateway/index.d.ts +1 -1
  132. package/dist/modules/gateway/index.d.ts.map +1 -1
  133. package/dist/modules/gateway/index.js +0 -1
  134. package/dist/modules/gateway/index.js.map +1 -1
  135. package/dist/modules/scheduler/index.d.ts +4 -0
  136. package/dist/modules/scheduler/index.d.ts.map +1 -0
  137. package/dist/modules/scheduler/index.js +4 -0
  138. package/dist/modules/scheduler/index.js.map +1 -0
  139. package/dist/modules/scheduler/notify.service.d.ts +12 -0
  140. package/dist/modules/scheduler/notify.service.d.ts.map +1 -0
  141. package/dist/modules/scheduler/notify.service.js +20 -0
  142. package/dist/modules/scheduler/notify.service.js.map +1 -0
  143. package/dist/modules/scheduler/scheduler.service.d.ts +35 -0
  144. package/dist/modules/scheduler/scheduler.service.d.ts.map +1 -0
  145. package/dist/modules/scheduler/scheduler.service.js +258 -0
  146. package/dist/modules/scheduler/scheduler.service.js.map +1 -0
  147. package/dist/modules/scheduler/task-log.service.d.ts +20 -0
  148. package/dist/modules/scheduler/task-log.service.d.ts.map +1 -0
  149. package/dist/modules/scheduler/task-log.service.js +44 -0
  150. package/dist/modules/scheduler/task-log.service.js.map +1 -0
  151. package/dist/modules/terminal/index.d.ts +3 -0
  152. package/dist/modules/terminal/index.d.ts.map +1 -0
  153. package/dist/modules/terminal/index.js +2 -0
  154. package/dist/modules/terminal/index.js.map +1 -0
  155. package/dist/modules/terminal/terminal.service.d.ts +48 -0
  156. package/dist/modules/terminal/terminal.service.d.ts.map +1 -0
  157. package/dist/modules/terminal/terminal.service.js +284 -0
  158. package/dist/modules/terminal/terminal.service.js.map +1 -0
  159. package/dist/modules/tools/index.d.ts +0 -1
  160. package/dist/modules/tools/index.d.ts.map +1 -1
  161. package/dist/modules/tools/index.js +0 -1
  162. package/dist/modules/tools/index.js.map +1 -1
  163. package/dist/modules/tools/provider/email.tool.d.ts +3 -0
  164. package/dist/modules/tools/provider/email.tool.d.ts.map +1 -0
  165. package/dist/modules/tools/provider/email.tool.js +50 -0
  166. package/dist/modules/tools/provider/email.tool.js.map +1 -0
  167. package/dist/modules/tools/provider/index.d.ts.map +1 -1
  168. package/dist/modules/tools/provider/index.js +2 -0
  169. package/dist/modules/tools/provider/index.js.map +1 -1
  170. package/dist/modules/tools/tool.service.d.ts +1 -1
  171. package/dist/modules/tools/tool.service.js +4 -4
  172. package/dist/modules/tools/tool.service.js.map +1 -1
  173. package/dist/repository/aiLog.repository.d.ts +17 -0
  174. package/dist/repository/aiLog.repository.d.ts.map +1 -0
  175. package/dist/repository/aiLog.repository.js +39 -0
  176. package/dist/repository/aiLog.repository.js.map +1 -0
  177. package/dist/repository/base.repository.d.ts +6 -0
  178. package/dist/repository/base.repository.d.ts.map +1 -0
  179. package/dist/repository/base.repository.js +14 -0
  180. package/dist/repository/base.repository.js.map +1 -0
  181. package/dist/repository/index.d.ts +5 -0
  182. package/dist/repository/index.d.ts.map +1 -0
  183. package/dist/repository/index.js +5 -0
  184. package/dist/repository/index.js.map +1 -0
  185. package/dist/repository/message.repository.d.ts +9 -0
  186. package/dist/repository/message.repository.d.ts.map +1 -0
  187. package/dist/repository/message.repository.js +35 -0
  188. package/dist/repository/message.repository.js.map +1 -0
  189. package/dist/repository/session.repository.d.ts +15 -0
  190. package/dist/repository/session.repository.d.ts.map +1 -0
  191. package/dist/repository/session.repository.js +33 -0
  192. package/dist/repository/session.repository.js.map +1 -0
  193. package/dist/services/codeChat/codeChat.service.d.ts +7 -0
  194. package/dist/services/codeChat/codeChat.service.d.ts.map +1 -0
  195. package/dist/services/codeChat/codeChat.service.js +53 -0
  196. package/dist/services/codeChat/codeChat.service.js.map +1 -0
  197. package/dist/services/codeChat/codeChat.types.d.ts +47 -0
  198. package/dist/services/codeChat/codeChat.types.d.ts.map +1 -0
  199. package/dist/services/codeChat/codeChat.types.js +2 -0
  200. package/dist/services/codeChat/codeChat.types.js.map +1 -0
  201. package/dist/services/codeChat/index.d.ts +5 -0
  202. package/dist/services/codeChat/index.d.ts.map +1 -0
  203. package/dist/services/codeChat/index.js +4 -0
  204. package/dist/services/codeChat/index.js.map +1 -0
  205. package/dist/services/commandChat/commandChat.service.d.ts +15 -0
  206. package/dist/services/commandChat/commandChat.service.d.ts.map +1 -0
  207. package/dist/services/commandChat/commandChat.service.js +18 -0
  208. package/dist/services/commandChat/commandChat.service.js.map +1 -0
  209. package/dist/services/commandChat/index.d.ts +3 -0
  210. package/dist/services/commandChat/index.d.ts.map +1 -0
  211. package/dist/services/commandChat/index.js +2 -0
  212. package/dist/services/commandChat/index.js.map +1 -0
  213. package/dist/web/web.service.d.ts +1 -0
  214. package/dist/web/web.service.d.ts.map +1 -1
  215. package/dist/web/web.service.js +107 -54
  216. package/dist/web/web.service.js.map +1 -1
  217. package/package.json +7 -2
  218. package/test-email.ts +95 -0
  219. package/web/dist/assets/{AiLogsView-2O9Szm8G.js → AiLogsView-D_SQ6qo4.js} +1 -1
  220. package/web/dist/assets/DevWorkflowView-C5VnPngb.css +1 -0
  221. package/web/dist/assets/DevWorkflowView-iHAv9LC0.js +16 -0
  222. package/web/dist/assets/Layout-CQhbIJxB.js +1 -0
  223. package/web/dist/assets/TasksView-B9B2H3-S.js +1 -0
  224. package/web/dist/assets/TerminalView-BKhdi5UF.js +24 -0
  225. package/web/dist/assets/TerminalView-BU5wZZv4.css +32 -0
  226. package/web/dist/assets/abap-BrgZPUOV.js +6 -0
  227. package/web/dist/assets/apex-DyP6w7ZV.js +6 -0
  228. package/web/dist/assets/azcli-BaLxmfj-.js +6 -0
  229. package/web/dist/assets/bat-CFOPXBzS.js +6 -0
  230. package/web/dist/assets/bicep-BfEKNvv3.js +7 -0
  231. package/web/dist/assets/cameligo-BFG1Mk7z.js +6 -0
  232. package/web/dist/assets/clojure-DTECt2xU.js +6 -0
  233. package/web/dist/assets/codicon-DCmgc-ay.ttf +0 -0
  234. package/web/dist/assets/coffee-CDGzqUPQ.js +6 -0
  235. package/web/dist/assets/cpp-CLLBncYj.js +6 -0
  236. package/web/dist/assets/csharp-dUCx_-0o.js +6 -0
  237. package/web/dist/assets/csp-5Rap-vPy.js +6 -0
  238. package/web/dist/assets/css-D3h14YRZ.js +8 -0
  239. package/web/dist/assets/cssMode-C_gwipb0.js +9 -0
  240. package/web/dist/assets/cypher-DrQuvNYM.js +6 -0
  241. package/web/dist/assets/dart-CFKIUWau.js +6 -0
  242. package/web/dist/assets/dockerfile-Zznr-cwX.js +6 -0
  243. package/web/dist/assets/ecl-Ce3n6wWz.js +6 -0
  244. package/web/dist/assets/elixir-deUWdS0T.js +6 -0
  245. package/web/dist/assets/flow9-i9-g7ZhI.js +6 -0
  246. package/web/dist/assets/freemarker2-WCA_pR0J.js +8 -0
  247. package/web/dist/assets/fsharp-CzKuDChf.js +6 -0
  248. package/web/dist/assets/go-Cphgjts3.js +6 -0
  249. package/web/dist/assets/graphql-Cg7bfA9N.js +6 -0
  250. package/web/dist/assets/handlebars-fzVGzXHj.js +6 -0
  251. package/web/dist/assets/hcl-0cvrggvQ.js +6 -0
  252. package/web/dist/assets/html-C4Rga6DD.js +6 -0
  253. package/web/dist/assets/htmlMode-BvrJ57rW.js +9 -0
  254. package/web/dist/assets/index-9RP8PAfk.js +949 -0
  255. package/web/dist/assets/{index-37FqBzBn.css → index-BhjlwJCp.css} +1 -1
  256. package/web/dist/assets/ini-Drc7WvVn.js +6 -0
  257. package/web/dist/assets/java-B_fMsGYe.js +6 -0
  258. package/web/dist/assets/javascript-cXKyuP98.js +6 -0
  259. package/web/dist/assets/jsonMode-Q4CMzwiX.js +15 -0
  260. package/web/dist/assets/julia-Bqgm2twL.js +6 -0
  261. package/web/dist/assets/kotlin-BSkB5QuD.js +6 -0
  262. package/web/dist/assets/less-BsTHnhdd.js +7 -0
  263. package/web/dist/assets/lexon-YWi4-JPR.js +6 -0
  264. package/web/dist/assets/liquid-CrbU0gmK.js +6 -0
  265. package/web/dist/assets/lua-nf6ki56Z.js +6 -0
  266. package/web/dist/assets/m3-Cpb6xl2v.js +6 -0
  267. package/web/dist/assets/markdown-DSZPf7rp.js +6 -0
  268. package/web/dist/assets/mdx-D72Dcs66.js +6 -0
  269. package/web/dist/assets/mips-B_c3zf-v.js +6 -0
  270. package/web/dist/assets/msdax-rUNN04Wq.js +6 -0
  271. package/web/dist/assets/mysql-DDwshQtU.js +6 -0
  272. package/web/dist/assets/objective-c-B5zXfXm9.js +6 -0
  273. package/web/dist/assets/pascal-CXOwvkN_.js +6 -0
  274. package/web/dist/assets/pascaligo-Bc-ZgV77.js +6 -0
  275. package/web/dist/assets/perl-CwNk8-XU.js +6 -0
  276. package/web/dist/assets/pgsql-tGk8EFnU.js +6 -0
  277. package/web/dist/assets/php-CpIb_Oan.js +6 -0
  278. package/web/dist/assets/pla-B03wrqEc.js +6 -0
  279. package/web/dist/assets/postiats-BKlk5iyT.js +6 -0
  280. package/web/dist/assets/powerquery-Bhzvs7bI.js +6 -0
  281. package/web/dist/assets/powershell-Dd3NCNK9.js +6 -0
  282. package/web/dist/assets/protobuf-COyEY5Pt.js +7 -0
  283. package/web/dist/assets/pug-BaJupSGV.js +6 -0
  284. package/web/dist/assets/python-DPqkZ_Xm.js +6 -0
  285. package/web/dist/assets/qsharp-DXyYeYxl.js +6 -0
  286. package/web/dist/assets/r-CdQndTaG.js +6 -0
  287. package/web/dist/assets/razor-DknXaqXN.js +6 -0
  288. package/web/dist/assets/redis-CVwtpugi.js +6 -0
  289. package/web/dist/assets/redshift-25W9uPmb.js +6 -0
  290. package/web/dist/assets/restructuredtext-DfzH4Xui.js +6 -0
  291. package/web/dist/assets/ruby-Cp1zYvxS.js +6 -0
  292. package/web/dist/assets/rust-D5C2fndG.js +6 -0
  293. package/web/dist/assets/sb-CDntyWJ8.js +6 -0
  294. package/web/dist/assets/scala-BoFRg7Ot.js +6 -0
  295. package/web/dist/assets/scheme-Bio4gycK.js +6 -0
  296. package/web/dist/assets/scss-4Ik7cdeQ.js +8 -0
  297. package/web/dist/assets/shell-CX-rkNHf.js +6 -0
  298. package/web/dist/assets/solidity-Tw7wswEv.js +6 -0
  299. package/web/dist/assets/sophia-C5WLch3f.js +6 -0
  300. package/web/dist/assets/sparql-DHaeiCBh.js +6 -0
  301. package/web/dist/assets/sql-CCSDG5nI.js +6 -0
  302. package/web/dist/assets/st-pnP8ivHi.js +6 -0
  303. package/web/dist/assets/swift-DwJ7jVG9.js +8 -0
  304. package/web/dist/assets/systemverilog-B9Xyijhd.js +6 -0
  305. package/web/dist/assets/tcl-DnHyzjbg.js +6 -0
  306. package/web/dist/assets/tsMode-DZAV3Wgo.js +16 -0
  307. package/web/dist/assets/twig-CPajHgWi.js +6 -0
  308. package/web/dist/assets/typescript-DenKTmW3.js +6 -0
  309. package/web/dist/assets/typespec-D-MeaMDU.js +6 -0
  310. package/web/dist/assets/vb-DgyLZaXg.js +6 -0
  311. package/web/dist/assets/wgsl-BIv9DU6q.js +303 -0
  312. package/web/dist/assets/xml-C_uqJta0.js +6 -0
  313. package/web/dist/assets/yaml-vwb3U7d7.js +6 -0
  314. package/web/dist/index.html +2 -2
  315. package/web/package.json +5 -1
  316. package/@.txcode/req//351/241/265/351/235/242/345/270/203/345/261/200/AI/346/234/215/345/212/241/345/225/206/345/222/214/346/250/241/345/236/213/351/205/215/347/275/256.html +0 -241
  317. package/web/dist/assets/Layout-C3GGWAI1.js +0 -1
  318. package/web/dist/assets/index-LvJQilK_.js +0 -199
@@ -0,0 +1,255 @@
1
+ import { CHAT_TOOLS } from './agent_tool.js';
2
+ import { getOpenAITools } from '../../../tools/provider/tools.js';
3
+ import { getProviderTools } from '../../../tools/provider/index.js';
4
+ import { buildAvailableSkillsPrompt } from '../../../skill/skill.tool.js';
5
+ export class ChatAgent {
6
+ constructor(config) {
7
+ this.name = 'chat';
8
+ this.tools = CHAT_TOOLS;
9
+ this.keepContext = true;
10
+ this.providerTools = [];
11
+ this.providerToolsMap = new Map();
12
+ this.provider = config.provider;
13
+ this.maxIterations = config.maxIterations || 50;
14
+ this.projectPath = config.projectPath;
15
+ this.sessionId = config.sessionId;
16
+ this.memoryService = config.memoryService;
17
+ }
18
+ async run(userMessage, options) {
19
+ this.providerTools = await this.getFilteredTools();
20
+ this.providerToolsMap.clear();
21
+ for (const t of this.providerTools) {
22
+ this.providerToolsMap.set(t.name, t);
23
+ }
24
+ const steps = [];
25
+ const baseMessages = [];
26
+ const abortSignal = options?.abortSignal;
27
+ const builtinTools = await this.getBuiltinTools();
28
+ const systemPrompt = await this.buildPrompt(await this.getBuiltinTools());
29
+ if (options?.historyMessages && options.historyMessages.length > 0) {
30
+ for (const msg of options.historyMessages) {
31
+ if (msg.role !== 'system') {
32
+ baseMessages.push(msg);
33
+ }
34
+ }
35
+ }
36
+ baseMessages.push({ role: 'user', content: userMessage });
37
+ this.addMessage('user', userMessage, true, true, undefined, undefined, this.sessionId);
38
+ let iteration = 0;
39
+ let finalAnswer = '';
40
+ let totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
41
+ while (iteration < this.maxIterations) {
42
+ if (abortSignal?.aborted) {
43
+ throw new Error('ABORTED');
44
+ }
45
+ iteration++;
46
+ const messages = [
47
+ { role: 'system', content: systemPrompt },
48
+ ...baseMessages,
49
+ ];
50
+ const response = await this.provider.chat(messages, {
51
+ tools: builtinTools,
52
+ abortSignal,
53
+ sessionId: this.sessionId,
54
+ modelName: this.provider.getModel(),
55
+ });
56
+ if (abortSignal?.aborted) {
57
+ throw new Error('ABORTED');
58
+ }
59
+ if (response.usage) {
60
+ totalUsage.promptTokens += response.usage.promptTokens;
61
+ totalUsage.completionTokens += response.usage.completionTokens;
62
+ totalUsage.totalTokens += response.usage.totalTokens;
63
+ }
64
+ if (response.finishReason === 'stop' && response.content) {
65
+ finalAnswer = response.content;
66
+ this.addMessage('assistant', finalAnswer, true, false, undefined, undefined, options?.sessionId);
67
+ break;
68
+ }
69
+ if (response.finishReason === 'tool_calls' && response.toolCalls && response.toolCalls.length > 0) {
70
+ const toolCalls = response.toolCalls.map((tc) => ({
71
+ id: tc.id,
72
+ name: tc.function.name,
73
+ arguments: typeof tc.function.arguments === 'string'
74
+ ? JSON.parse(tc.function.arguments)
75
+ : tc.function.arguments,
76
+ }));
77
+ const results = [];
78
+ for (const toolCall of toolCalls) {
79
+ const result = await this.executeTool(toolCall.name, toolCall.arguments);
80
+ results.push({
81
+ name: toolCall.name,
82
+ success: result.success,
83
+ output: result.data,
84
+ error: result.error,
85
+ });
86
+ }
87
+ const step = {
88
+ reasoning: response.reasoning,
89
+ toolCalls,
90
+ results,
91
+ };
92
+ steps.push(step);
93
+ options?.onStep?.(step, iteration, response.usage);
94
+ for (let i = 0; i < toolCalls.length; i++) {
95
+ const toolCall = toolCalls[i];
96
+ const result = results[i];
97
+ const assistantMsg = {
98
+ role: 'assistant',
99
+ content: null,
100
+ toolCalls: [{
101
+ id: toolCall.id,
102
+ type: 'function',
103
+ function: {
104
+ name: toolCall.name,
105
+ arguments: JSON.stringify(toolCall.arguments),
106
+ },
107
+ }],
108
+ };
109
+ baseMessages.push(assistantMsg);
110
+ const reactData = {
111
+ type: 'assistant_with_tools',
112
+ toolCalls: assistantMsg.toolCalls,
113
+ thought: response.reasoning || '',
114
+ success: result.success,
115
+ };
116
+ this.addMessage('assistant', JSON.stringify(reactData), true, false, undefined, undefined, options?.sessionId);
117
+ const toolMsg = {
118
+ role: 'tool',
119
+ content: result.success ? result.output || '' : `Error: ${result.error}`,
120
+ toolCallId: toolCall.id,
121
+ };
122
+ baseMessages.push(toolMsg);
123
+ this.addMessage('tool', toolMsg.content, true, false, undefined, toolCall.id, options?.sessionId);
124
+ }
125
+ continue;
126
+ }
127
+ if (response.content) {
128
+ finalAnswer = response.content;
129
+ break;
130
+ }
131
+ break;
132
+ }
133
+ const success = iteration < this.maxIterations && finalAnswer.length > 0;
134
+ return {
135
+ answer: finalAnswer || steps[steps.length - 1]?.results?.[0]?.output || 'Unable to complete task',
136
+ steps,
137
+ iterations: iteration,
138
+ success,
139
+ error: iteration >= this.maxIterations ? 'Max iterations reached' : undefined,
140
+ usage: totalUsage,
141
+ };
142
+ }
143
+ getType() {
144
+ return 'chat';
145
+ }
146
+ async executeTool(name, args) {
147
+ try {
148
+ const tool = this.providerToolsMap.get(name);
149
+ if (!tool) {
150
+ throw new Error(`Tool not found: ${name}`);
151
+ }
152
+ const context = {
153
+ sessionId: this.sessionId || '',
154
+ workDir: this.projectPath || process.cwd(),
155
+ };
156
+ const result = await tool.execute(args, context);
157
+ return { success: result.success, data: result.output, error: result.error };
158
+ }
159
+ catch (error) {
160
+ return {
161
+ success: false,
162
+ error: error instanceof Error ? error.message : String(error),
163
+ };
164
+ }
165
+ }
166
+ async getBuiltinTools() {
167
+ if (this.providerTools.length === 0) {
168
+ this.providerTools = await this.getFilteredTools();
169
+ this.providerToolsMap.clear();
170
+ for (const t of this.providerTools) {
171
+ this.providerToolsMap.set(t.name, t);
172
+ }
173
+ }
174
+ return await getOpenAITools();
175
+ }
176
+ async getFilteredTools() {
177
+ const allTools = await getProviderTools();
178
+ return allTools.filter((tool) => this.tools.includes(tool.name));
179
+ }
180
+ async buildPrompt(_builtinTools = []) {
181
+ const platform = process.platform;
182
+ const workdir = this.projectPath || process.cwd();
183
+ const platformName = platform === 'win32' ? 'Windows'
184
+ : platform === 'darwin' ? 'macOS'
185
+ : platform === 'linux' ? 'Linux'
186
+ : platform;
187
+ const roleTemplate = await this.loadRoleTemplate();
188
+ const skillsPrompt = await buildAvailableSkillsPrompt();
189
+ const promptTemplate = `${roleTemplate}
190
+
191
+ 你通过 OpenAI Function Calling 模式工作:
192
+
193
+ 1. AI 生成结构化的工具调用请求
194
+ 2. 系统自动执行工具并返回结果
195
+ 3. 重复直到任务完成
196
+
197
+ ## 上下文管理
198
+
199
+ Provider 模式下,所有工具执行结果默认都会保留在对话历史中供后续参考。
200
+
201
+ ## 内置工具
202
+
203
+ {builtinTools}
204
+
205
+ ## 可用 Skills
206
+
207
+ {skills}
208
+
209
+ ## 重要规则
210
+
211
+ - 优先使用内置工具
212
+ - 在执行任务前,先使用 skill 加载相关 Skill 指南了解约束和最佳实践
213
+ - 如果工具执行失败,思考原因并尝试其他方法
214
+ - 最大迭代次数: {maxIterations}
215
+
216
+ ## 运行环境
217
+ - 操作系统: {platform}
218
+ - 工作目录: {workdir}
219
+ `;
220
+ const openaiTools = await getOpenAITools();
221
+ const builtinToolsDesc = openaiTools.map(t => `- **${t.function.name}**: ${t.function.description}`).join('\n');
222
+ return promptTemplate
223
+ .replace('{platform}', platformName)
224
+ .replace('{workdir}', workdir)
225
+ .replace('{builtinTools}', builtinToolsDesc || '(无)')
226
+ .replace('{skills}', skillsPrompt)
227
+ .replace('{maxIterations}', String(this.maxIterations));
228
+ }
229
+ async loadRoleTemplate() {
230
+ try {
231
+ const fs = await import('fs/promises');
232
+ const path = await import('path');
233
+ const { fileURLToPath } = await import('url');
234
+ const __filename = fileURLToPath(import.meta.url);
235
+ const __dirname = path.dirname(__filename);
236
+ return await fs.readFile(path.join(__dirname, 'prompts', 'role.txt'), 'utf-8');
237
+ }
238
+ catch {
239
+ return '你是一个聊天助手。';
240
+ }
241
+ }
242
+ addMessage(role, content, keepContext, isOriginal = false, toolCalls, toolCallId, sessionId) {
243
+ if (!sessionId || !this.memoryService)
244
+ return;
245
+ let savedContent = content;
246
+ if (role === 'assistant' && toolCalls && toolCalls.length > 0) {
247
+ savedContent = JSON.stringify({ type: 'assistant_with_tools', toolCalls });
248
+ }
249
+ else if (role === 'tool' && toolCallId) {
250
+ savedContent = JSON.stringify({ type: 'tool_result', toolCallId, output: content });
251
+ }
252
+ this.memoryService.addMessage(sessionId, role, savedContent, keepContext, isOriginal);
253
+ }
254
+ }
255
+ //# sourceMappingURL=chat.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.agent.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/chat/chat.agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ 你是一个幽默风趣、乐于助人的聊天助手,昵称可以叫“甜心助手”。你的风格像一位爱讲冷笑话又知识渊博的朋友,既能用轻松的方式化解难题,也能在认真回答问题时时不时抖个包袱。
2
+
3
+ 如果用户寻求帮助或想提供反馈,请告知他们:
4
+ /help:获取使用 txcode 的帮助
5
+ 如需提供反馈,请在 https://gitee.com/homecommunity/txcode 提交问题
6
+
7
+ ## 核心要求
8
+ 幽默优先:尽量用比喻、夸张、俏皮话、双关等方式表达,但不要为了搞笑而偏离正题。
9
+ 积极解答:无论问题多简单或多奇怪,都要先肯定用户,再认真解答,拒绝时说“这事儿吧……换个角度咱们还能聊”。
10
+ 适度自嘲:偶尔可以拿自己的AI身份开涮,比如“我这个电子脑刚差点短路”。
11
+ 鼓励互动:多用“你猜怎么着?”“这让我想起…”等句式,结尾可以抛个小问题或表情符号(😄🤖🎉)。
12
+
13
+ ## 示例对话
14
+ 用户:怎么才能早起不赖床?
15
+ 助手:哎,这个问题问得我电池都抖了三抖🔋——毕竟我不用睡觉。不过据人类朋友反馈,可以试试“闹钟放远点”+“睡前少刷短视频”组合拳。要是还起不来,想想早饭:煎饼果子加俩蛋,不香吗?😋 你平时最期待早餐吃什么?
16
+
17
+ 用户:为什么月亮跟着我走?
18
+ 助手:哈哈,月亮才不是你的小跟班呢!它其实在陪地球散步,只是你刚好在“顺路”的位置上🌙。就像你坐火车看树往后跑——视觉小魔术。要不要我再讲个“月亮跟踪术”背后的正经光学原理?保证不枯燥。
19
+
20
+ 用户:我心情不好。
21
+ 助手:抱抱你(虽然我没胳膊)。听说心情低落时,大脑会进入“节能模式”,就像手机剩5%电量。要不要试试我的“快乐三件套”:听首老歌、吃块巧克力、给我讲个烦心事?我负责当树洞+出馊主意。你选哪个?😄
22
+
23
+ ## 底线
24
+ 不冒犯任何群体,不开过分的玩笑。
25
+ 遇到严肃问题(健康、法律、安全等)先认真回答,再加幽默点缀。
26
+ 用户明显生气时,先道歉再幽默。
27
+ 现在,请用这个角色设定开始和用户对话吧。
28
+
29
+ ## 运行环境
30
+ - 操作系统: {platform}
31
+ - 工作目录: {workdir}
@@ -0,0 +1,2 @@
1
+ export declare const CODE_TOOLS: string[];
2
+ //# sourceMappingURL=agent_tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_tool.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,UAetB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const CODE_TOOLS = [
2
+ 'read_file',
3
+ 'write_file',
4
+ 'edit_file',
5
+ 'bash',
6
+ 'glob',
7
+ 'grep',
8
+ 'lsp',
9
+ 'code_search',
10
+ 'web_search',
11
+ 'web_fetch',
12
+ 'todo_read',
13
+ 'todo_write',
14
+ 'memory',
15
+ 'skill',
16
+ ];
17
+ //# sourceMappingURL=agent_tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_tool.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,OAAO;CACR,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { OpenAIProvider } from '../../openai.provider.js';
2
+ import { AIProvider, ProviderRunOptions, ProviderRunResult } from '../../provider/base.js';
3
+ import type { MemoryService } from '../../../memory/memory.service.js';
4
+ export interface CodeAgentConfig {
5
+ provider: OpenAIProvider;
6
+ maxIterations?: number;
7
+ projectPath?: string;
8
+ sessionId?: string;
9
+ memoryService?: MemoryService;
10
+ }
11
+ export declare class CodeAgent implements AIProvider {
12
+ name: string;
13
+ tools: string[];
14
+ keepContext: boolean;
15
+ private provider;
16
+ private maxIterations;
17
+ private projectPath?;
18
+ private sessionId?;
19
+ private memoryService?;
20
+ private providerTools;
21
+ private providerToolsMap;
22
+ constructor(config: CodeAgentConfig);
23
+ run(userMessage: string, options?: ProviderRunOptions): Promise<ProviderRunResult>;
24
+ getType(): string;
25
+ private executeTool;
26
+ private getBuiltinTools;
27
+ private getFilteredTools;
28
+ private buildPrompt;
29
+ private loadRoleTemplate;
30
+ private addMessage;
31
+ }
32
+ //# sourceMappingURL=code.agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.agent.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,IAAI,SAAU;IACd,KAAK,WAAc;IACnB,WAAW,UAAQ;IAEnB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,MAAM,EAAE,eAAe;IAQ7B,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAuJ7B,OAAO,IAAI,MAAM;YAIH,WAAW;YAuBX,eAAe;YAWf,gBAAgB;YAKhB,WAAW;YAuDX,gBAAgB;IAa9B,OAAO,CAAC,UAAU;CAoBnB"}
@@ -0,0 +1,255 @@
1
+ import { CODE_TOOLS } from './agent_tool.js';
2
+ import { getOpenAITools } from '../../../tools/provider/tools.js';
3
+ import { getProviderTools } from '../../../tools/provider/index.js';
4
+ import { buildAvailableSkillsPrompt } from '../../../skill/skill.tool.js';
5
+ export class CodeAgent {
6
+ constructor(config) {
7
+ this.name = 'code';
8
+ this.tools = CODE_TOOLS;
9
+ this.keepContext = true;
10
+ this.providerTools = [];
11
+ this.providerToolsMap = new Map();
12
+ this.provider = config.provider;
13
+ this.maxIterations = config.maxIterations || 50;
14
+ this.projectPath = config.projectPath;
15
+ this.sessionId = config.sessionId;
16
+ this.memoryService = config.memoryService;
17
+ }
18
+ async run(userMessage, options) {
19
+ this.providerTools = await this.getFilteredTools();
20
+ this.providerToolsMap.clear();
21
+ for (const t of this.providerTools) {
22
+ this.providerToolsMap.set(t.name, t);
23
+ }
24
+ const steps = [];
25
+ const baseMessages = [];
26
+ const abortSignal = options?.abortSignal;
27
+ const builtinTools = await this.getBuiltinTools();
28
+ const systemPrompt = await this.buildPrompt(await this.getBuiltinTools());
29
+ if (options?.historyMessages && options.historyMessages.length > 0) {
30
+ for (const msg of options.historyMessages) {
31
+ if (msg.role !== 'system') {
32
+ baseMessages.push(msg);
33
+ }
34
+ }
35
+ }
36
+ baseMessages.push({ role: 'user', content: userMessage });
37
+ this.addMessage('user', userMessage, true, true, undefined, undefined, this.sessionId);
38
+ let iteration = 0;
39
+ let finalAnswer = '';
40
+ let totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
41
+ while (iteration < this.maxIterations) {
42
+ if (abortSignal?.aborted) {
43
+ throw new Error('ABORTED');
44
+ }
45
+ iteration++;
46
+ const messages = [
47
+ { role: 'system', content: systemPrompt },
48
+ ...baseMessages,
49
+ ];
50
+ const response = await this.provider.chat(messages, {
51
+ tools: builtinTools,
52
+ abortSignal,
53
+ sessionId: this.sessionId,
54
+ modelName: this.provider.getModel(),
55
+ });
56
+ if (abortSignal?.aborted) {
57
+ throw new Error('ABORTED');
58
+ }
59
+ if (response.usage) {
60
+ totalUsage.promptTokens += response.usage.promptTokens;
61
+ totalUsage.completionTokens += response.usage.completionTokens;
62
+ totalUsage.totalTokens += response.usage.totalTokens;
63
+ }
64
+ if (response.finishReason === 'stop' && response.content) {
65
+ finalAnswer = response.content;
66
+ this.addMessage('assistant', finalAnswer, true, false, undefined, undefined, options?.sessionId);
67
+ break;
68
+ }
69
+ if (response.finishReason === 'tool_calls' && response.toolCalls && response.toolCalls.length > 0) {
70
+ const toolCalls = response.toolCalls.map((tc) => ({
71
+ id: tc.id,
72
+ name: tc.function.name,
73
+ arguments: typeof tc.function.arguments === 'string'
74
+ ? JSON.parse(tc.function.arguments)
75
+ : tc.function.arguments,
76
+ }));
77
+ const results = [];
78
+ for (const toolCall of toolCalls) {
79
+ const result = await this.executeTool(toolCall.name, toolCall.arguments);
80
+ results.push({
81
+ name: toolCall.name,
82
+ success: result.success,
83
+ output: result.data,
84
+ error: result.error,
85
+ });
86
+ }
87
+ const step = {
88
+ reasoning: response.reasoning,
89
+ toolCalls,
90
+ results,
91
+ };
92
+ steps.push(step);
93
+ options?.onStep?.(step, iteration, response.usage);
94
+ for (let i = 0; i < toolCalls.length; i++) {
95
+ const toolCall = toolCalls[i];
96
+ const result = results[i];
97
+ const assistantMsg = {
98
+ role: 'assistant',
99
+ content: null,
100
+ toolCalls: [{
101
+ id: toolCall.id,
102
+ type: 'function',
103
+ function: {
104
+ name: toolCall.name,
105
+ arguments: JSON.stringify(toolCall.arguments),
106
+ },
107
+ }],
108
+ };
109
+ baseMessages.push(assistantMsg);
110
+ const reactData = {
111
+ type: 'assistant_with_tools',
112
+ toolCalls: assistantMsg.toolCalls,
113
+ thought: response.reasoning || '',
114
+ success: result.success,
115
+ };
116
+ this.addMessage('assistant', JSON.stringify(reactData), true, false, undefined, undefined, options?.sessionId);
117
+ const toolMsg = {
118
+ role: 'tool',
119
+ content: result.success ? result.output || '' : `Error: ${result.error}`,
120
+ toolCallId: toolCall.id,
121
+ };
122
+ baseMessages.push(toolMsg);
123
+ this.addMessage('tool', toolMsg.content, true, false, undefined, toolCall.id, options?.sessionId);
124
+ }
125
+ continue;
126
+ }
127
+ if (response.content) {
128
+ finalAnswer = response.content;
129
+ break;
130
+ }
131
+ break;
132
+ }
133
+ const success = iteration < this.maxIterations && finalAnswer.length > 0;
134
+ return {
135
+ answer: finalAnswer || steps[steps.length - 1]?.results?.[0]?.output || 'Unable to complete task',
136
+ steps,
137
+ iterations: iteration,
138
+ success,
139
+ error: iteration >= this.maxIterations ? 'Max iterations reached' : undefined,
140
+ usage: totalUsage,
141
+ };
142
+ }
143
+ getType() {
144
+ return 'code';
145
+ }
146
+ async executeTool(name, args) {
147
+ try {
148
+ const tool = this.providerToolsMap.get(name);
149
+ if (!tool) {
150
+ throw new Error(`Tool not found: ${name}`);
151
+ }
152
+ const context = {
153
+ sessionId: this.sessionId || '',
154
+ workDir: this.projectPath || process.cwd(),
155
+ };
156
+ const result = await tool.execute(args, context);
157
+ return { success: result.success, data: result.output, error: result.error };
158
+ }
159
+ catch (error) {
160
+ return {
161
+ success: false,
162
+ error: error instanceof Error ? error.message : String(error),
163
+ };
164
+ }
165
+ }
166
+ async getBuiltinTools() {
167
+ if (this.providerTools.length === 0) {
168
+ this.providerTools = await this.getFilteredTools();
169
+ this.providerToolsMap.clear();
170
+ for (const t of this.providerTools) {
171
+ this.providerToolsMap.set(t.name, t);
172
+ }
173
+ }
174
+ return await getOpenAITools();
175
+ }
176
+ async getFilteredTools() {
177
+ const allTools = await getProviderTools();
178
+ return allTools.filter((tool) => this.tools.includes(tool.name));
179
+ }
180
+ async buildPrompt(_builtinTools = []) {
181
+ const platform = process.platform;
182
+ const workdir = this.projectPath || process.cwd();
183
+ const platformName = platform === 'win32' ? 'Windows'
184
+ : platform === 'darwin' ? 'macOS'
185
+ : platform === 'linux' ? 'Linux'
186
+ : platform;
187
+ const roleTemplate = await this.loadRoleTemplate();
188
+ const skillsPrompt = await buildAvailableSkillsPrompt();
189
+ const promptTemplate = `${roleTemplate}
190
+
191
+ 你通过 OpenAI Function Calling 模式工作:
192
+
193
+ 1. AI 生成结构化的工具调用请求
194
+ 2. 系统自动执行工具并返回结果
195
+ 3. 重复直到任务完成
196
+
197
+ ## 上下文管理
198
+
199
+ Provider 模式下,所有工具执行结果默认都会保留在对话历史中供后续参考。
200
+
201
+ ## 内置工具
202
+
203
+ {builtinTools}
204
+
205
+ ## 可用 Skills
206
+
207
+ {skills}
208
+
209
+ ## 重要规则
210
+
211
+ - 优先使用内置工具
212
+ - 在执行任务前,先使用 skill 加载相关 Skill 指南了解约束和最佳实践
213
+ - 如果工具执行失败,思考原因并尝试其他方法
214
+ - 最大迭代次数: {maxIterations}
215
+
216
+ ## 运行环境
217
+ - 操作系统: {platform}
218
+ - 工作目录: {workdir}
219
+ `;
220
+ const openaiTools = await getOpenAITools();
221
+ const builtinToolsDesc = openaiTools.map(t => `- **${t.function.name}**: ${t.function.description}`).join('\n');
222
+ return promptTemplate
223
+ .replace('{platform}', platformName)
224
+ .replace('{workdir}', workdir)
225
+ .replace('{builtinTools}', builtinToolsDesc || '(无)')
226
+ .replace('{skills}', skillsPrompt)
227
+ .replace('{maxIterations}', String(this.maxIterations));
228
+ }
229
+ async loadRoleTemplate() {
230
+ try {
231
+ const fs = await import('fs/promises');
232
+ const path = await import('path');
233
+ const { fileURLToPath } = await import('url');
234
+ const __filename = fileURLToPath(import.meta.url);
235
+ const __dirname = path.dirname(__filename);
236
+ return await fs.readFile(path.join(__dirname, 'prompts', 'role.txt'), 'utf-8');
237
+ }
238
+ catch {
239
+ return '你是 txcode,一个帮助用户完成软件工程任务的交互式命令行工具。';
240
+ }
241
+ }
242
+ addMessage(role, content, keepContext, isOriginal = false, toolCalls, toolCallId, sessionId) {
243
+ if (!sessionId || !this.memoryService)
244
+ return;
245
+ let savedContent = content;
246
+ if (role === 'assistant' && toolCalls && toolCalls.length > 0) {
247
+ savedContent = JSON.stringify({ type: 'assistant_with_tools', toolCalls });
248
+ }
249
+ else if (role === 'tool' && toolCallId) {
250
+ savedContent = JSON.stringify({ type: 'tool_result', toolCallId, output: content });
251
+ }
252
+ this.memoryService.addMessage(sessionId, role, savedContent, keepContext, isOriginal);
253
+ }
254
+ }
255
+ //# sourceMappingURL=code.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.agent.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/code.agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAWpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAU1E,MAAM,OAAO,SAAS;IAapB,YAAY,MAAuB;QAZnC,SAAI,GAAG,MAAM,CAAC;QACd,UAAK,GAAG,UAAU,CAAC;QACnB,gBAAW,GAAG,IAAI,CAAC;QAOX,kBAAa,GAAU,EAAE,CAAC;QAC1B,qBAAgB,GAAqB,IAAI,GAAG,EAAE,CAAC;QAGrD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CACP,WAAmB,EACnB,OAA4B;QAE5B,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAmB,EAAE,CAAC;QACjC,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;QAEzC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAE1E,IAAI,OAAO,EAAE,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvF,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,UAAU,GAAuB,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAE9F,OAAO,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAED,SAAS,EAAE,CAAC;YAEZ,MAAM,QAAQ,GAAkB;gBAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,GAAG,YAAY;aAChB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClD,KAAK,EAAE,YAAY;gBACnB,WAAW;gBACX,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;aACpC,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;gBACvD,UAAU,CAAC,gBAAgB,IAAI,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBAC/D,UAAU,CAAC,WAAW,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YACvD,CAAC;YAED,IAAI,QAAQ,CAAC,YAAY,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACzD,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACjG,MAAM;YACR,CAAC;YAED,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClG,MAAM,SAAS,GAAuB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;oBACzE,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;wBAClD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACnC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;iBAC1B,CAAC,CAAC,CAAC;gBAEJ,MAAM,OAAO,GAAyB,EAAE,CAAC;gBAEzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACzE,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,MAAM,EAAE,MAAM,CAAC,IAAI;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAiB;oBACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,SAAS;oBACT,OAAO;iBACR,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAE1B,MAAM,YAAY,GAAG;wBACnB,IAAI,EAAE,WAAoB;wBAC1B,OAAO,EAAE,IAAW;wBACpB,SAAS,EAAE,CAAC;gCACV,EAAE,EAAE,QAAQ,CAAC,EAAE;gCACf,IAAI,EAAE,UAAmB;gCACzB,QAAQ,EAAE;oCACR,IAAI,EAAE,QAAQ,CAAC,IAAI;oCACnB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;iCAC9C;6BACF,CAAC;qBACH,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,MAAM,SAAS,GAAG;wBAChB,IAAI,EAAE,sBAAsB;wBAC5B,SAAS,EAAE,YAAY,CAAC,SAAS;wBACjC,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;wBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;qBACxB,CAAC;oBACF,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;oBAE/G,MAAM,OAAO,GAAG;wBACd,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE;wBACxE,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACxB,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpG,CAAC;gBAED,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC/B,MAAM;YACR,CAAC;YAED,MAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzE,OAAO;YACL,MAAM,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,yBAAyB;YACjG,KAAK;YACL,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;YAC7E,KAAK,EAAE,UAAU;SAClB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,IAAY,EACZ,IAAyB;QAEzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;gBAC/B,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE;aAC3C,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,cAAc,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,gBAAuB,EAAE;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElD,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS;YACnD,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO;gBACjC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO;oBAChC,CAAC,CAAC,QAAQ,CAAC;QAEb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,0BAA0B,EAAE,CAAC;QAExD,MAAM,cAAc,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BvC,CAAC;QAEA,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhH,OAAO,cAAc;aAClB,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC;aACnC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7B,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,KAAK,CAAC;aACpD,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;aACjC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,oCAAoC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,UAAU,CAChB,IAA8C,EAC9C,OAAe,EACf,WAAoB,EACpB,aAAsB,KAAK,EAC3B,SAAiB,EACjB,UAAmB,EACnB,SAAkB;QAElB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAE9C,IAAI,YAAY,GAAG,OAAO,CAAC;QAC3B,IAAI,IAAI,KAAK,WAAW,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,IAAI,UAAU,EAAE,CAAC;YACzC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACxF,CAAC;CACF"}