tianxincode 1.0.12 → 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 (217) hide show
  1. package/dist/api/chat.routes.d.ts.map +1 -1
  2. package/dist/api/chat.routes.js +41 -190
  3. package/dist/api/chat.routes.js.map +1 -1
  4. package/dist/api/db.routes.js +8 -4
  5. package/dist/api/db.routes.js.map +1 -1
  6. package/dist/api/email.routes.d.ts +2 -0
  7. package/dist/api/email.routes.d.ts.map +1 -0
  8. package/dist/api/email.routes.js +78 -0
  9. package/dist/api/email.routes.js.map +1 -0
  10. package/dist/api/index.d.ts +1 -1
  11. package/dist/api/index.d.ts.map +1 -1
  12. package/dist/api/index.js +4 -1
  13. package/dist/api/index.js.map +1 -1
  14. package/dist/api/scheduler.routes.d.ts +2 -0
  15. package/dist/api/scheduler.routes.d.ts.map +1 -0
  16. package/dist/api/scheduler.routes.js +127 -0
  17. package/dist/api/scheduler.routes.js.map +1 -0
  18. package/dist/cli/commands.js +5 -1
  19. package/dist/cli/commands.js.map +1 -1
  20. package/dist/components/App.d.ts.map +1 -1
  21. package/dist/components/App.js +125 -100
  22. package/dist/components/App.js.map +1 -1
  23. package/dist/config/tx.config.d.ts +0 -1
  24. package/dist/config/tx.config.d.ts.map +1 -1
  25. package/dist/config/tx.config.js +1 -1
  26. package/dist/config/tx.config.js.map +1 -1
  27. package/dist/modules/ai/agents/chat/agent_tool.d.ts +2 -0
  28. package/dist/modules/ai/agents/chat/agent_tool.d.ts.map +1 -0
  29. package/dist/modules/ai/agents/chat/agent_tool.js +15 -0
  30. package/dist/modules/ai/agents/chat/agent_tool.js.map +1 -0
  31. package/dist/modules/ai/agents/chat/chat.agent.d.ts +32 -0
  32. package/dist/modules/ai/agents/chat/chat.agent.d.ts.map +1 -0
  33. package/dist/modules/ai/agents/chat/chat.agent.js +255 -0
  34. package/dist/modules/ai/agents/chat/chat.agent.js.map +1 -0
  35. package/dist/modules/ai/agents/chat/prompts/role.txt +31 -0
  36. package/dist/modules/ai/agents/code/agent_tool.d.ts +2 -0
  37. package/dist/modules/ai/agents/code/agent_tool.d.ts.map +1 -0
  38. package/dist/modules/ai/agents/code/agent_tool.js +17 -0
  39. package/dist/modules/ai/agents/code/agent_tool.js.map +1 -0
  40. package/dist/modules/ai/agents/code/code.agent.d.ts +32 -0
  41. package/dist/modules/ai/agents/code/code.agent.d.ts.map +1 -0
  42. package/dist/modules/ai/agents/code/code.agent.js +255 -0
  43. package/dist/modules/ai/agents/code/code.agent.js.map +1 -0
  44. package/dist/modules/ai/agents/code/prompts/role.txt +51 -0
  45. package/dist/modules/ai/agents/index.d.ts +7 -0
  46. package/dist/modules/ai/agents/index.d.ts.map +1 -0
  47. package/dist/modules/ai/agents/index.js +7 -0
  48. package/dist/modules/ai/agents/index.js.map +1 -0
  49. package/dist/modules/ai/agents/task/agent_tool.d.ts +2 -0
  50. package/dist/modules/ai/agents/task/agent_tool.d.ts.map +1 -0
  51. package/dist/modules/ai/agents/task/agent_tool.js +14 -0
  52. package/dist/modules/ai/agents/task/agent_tool.js.map +1 -0
  53. package/dist/modules/ai/agents/task/prompts/role.txt +51 -0
  54. package/dist/modules/ai/agents/task/task.agent.d.ts +31 -0
  55. package/dist/modules/ai/agents/task/task.agent.d.ts.map +1 -0
  56. package/dist/modules/ai/agents/task/task.agent.js +226 -0
  57. package/dist/modules/ai/agents/task/task.agent.js.map +1 -0
  58. package/dist/modules/ai/ai.service.d.ts +12 -18
  59. package/dist/modules/ai/ai.service.d.ts.map +1 -1
  60. package/dist/modules/ai/ai.service.js +29 -85
  61. package/dist/modules/ai/ai.service.js.map +1 -1
  62. package/dist/modules/ai/ai.types.d.ts +8 -5
  63. package/dist/modules/ai/ai.types.d.ts.map +1 -1
  64. package/dist/modules/ai/index.d.ts +1 -3
  65. package/dist/modules/ai/index.d.ts.map +1 -1
  66. package/dist/modules/ai/index.js +0 -2
  67. package/dist/modules/ai/index.js.map +1 -1
  68. package/dist/modules/ai/openai.provider.d.ts.map +1 -1
  69. package/dist/modules/ai/openai.provider.js +3 -0
  70. package/dist/modules/ai/openai.provider.js.map +1 -1
  71. package/dist/modules/ai/provider/base.d.ts +5 -0
  72. package/dist/modules/ai/provider/base.d.ts.map +1 -1
  73. package/dist/modules/ai/provider/openai/openai-agent.d.ts +8 -0
  74. package/dist/modules/ai/provider/openai/openai-agent.d.ts.map +1 -1
  75. package/dist/modules/ai/provider/openai/openai-agent.js +48 -4
  76. package/dist/modules/ai/provider/openai/openai-agent.js.map +1 -1
  77. package/dist/modules/ai/summarizer/summarizer.prompts.d.ts +1 -1
  78. package/dist/modules/ai/summarizer/summarizer.prompts.d.ts.map +1 -1
  79. package/dist/modules/ai/summarizer/summarizer.prompts.js +19 -19
  80. package/dist/modules/ai/summarizer/summarizer.prompts.js.map +1 -1
  81. package/dist/modules/ai/summarizer/summarizer.service.d.ts.map +1 -1
  82. package/dist/modules/ai/summarizer/summarizer.service.js +33 -7
  83. package/dist/modules/ai/summarizer/summarizer.service.js.map +1 -1
  84. package/dist/modules/ai/summarizer/summarizer.types.d.ts +1 -0
  85. package/dist/modules/ai/summarizer/summarizer.types.d.ts.map +1 -1
  86. package/dist/modules/db/db.service.d.ts +3 -0
  87. package/dist/modules/db/db.service.d.ts.map +1 -1
  88. package/dist/modules/db/db.service.js +79 -0
  89. package/dist/modules/db/db.service.js.map +1 -1
  90. package/dist/modules/email/email.config.repository.d.ts +14 -0
  91. package/dist/modules/email/email.config.repository.d.ts.map +1 -0
  92. package/dist/modules/email/email.config.repository.js +70 -0
  93. package/dist/modules/email/email.config.repository.js.map +1 -0
  94. package/dist/modules/email/email.service.d.ts +14 -0
  95. package/dist/modules/email/email.service.d.ts.map +1 -0
  96. package/dist/modules/email/email.service.js +54 -0
  97. package/dist/modules/email/email.service.js.map +1 -0
  98. package/dist/modules/email/email.types.d.ts +20 -0
  99. package/dist/modules/email/email.types.d.ts.map +1 -0
  100. package/dist/modules/email/email.types.js +2 -0
  101. package/dist/modules/email/email.types.js.map +1 -0
  102. package/dist/modules/email/index.d.ts +4 -0
  103. package/dist/modules/email/index.d.ts.map +1 -0
  104. package/dist/modules/email/index.js +3 -0
  105. package/dist/modules/email/index.js.map +1 -0
  106. package/dist/modules/gateway/adapters/dingtalk.adapter.d.ts.map +1 -1
  107. package/dist/modules/gateway/adapters/dingtalk.adapter.js +10 -2
  108. package/dist/modules/gateway/adapters/dingtalk.adapter.js.map +1 -1
  109. package/dist/modules/gateway/gateway.service.d.ts +1 -0
  110. package/dist/modules/gateway/gateway.service.d.ts.map +1 -1
  111. package/dist/modules/gateway/gateway.service.js +40 -15
  112. package/dist/modules/gateway/gateway.service.js.map +1 -1
  113. package/dist/modules/gateway/index.d.ts +1 -1
  114. package/dist/modules/gateway/index.d.ts.map +1 -1
  115. package/dist/modules/gateway/index.js +0 -1
  116. package/dist/modules/gateway/index.js.map +1 -1
  117. package/dist/modules/scheduler/index.d.ts +4 -0
  118. package/dist/modules/scheduler/index.d.ts.map +1 -0
  119. package/dist/modules/scheduler/index.js +4 -0
  120. package/dist/modules/scheduler/index.js.map +1 -0
  121. package/dist/modules/scheduler/notify.service.d.ts +12 -0
  122. package/dist/modules/scheduler/notify.service.d.ts.map +1 -0
  123. package/dist/modules/scheduler/notify.service.js +20 -0
  124. package/dist/modules/scheduler/notify.service.js.map +1 -0
  125. package/dist/modules/scheduler/scheduler.service.d.ts +35 -0
  126. package/dist/modules/scheduler/scheduler.service.d.ts.map +1 -0
  127. package/dist/modules/scheduler/scheduler.service.js +258 -0
  128. package/dist/modules/scheduler/scheduler.service.js.map +1 -0
  129. package/dist/modules/scheduler/task-log.service.d.ts +20 -0
  130. package/dist/modules/scheduler/task-log.service.d.ts.map +1 -0
  131. package/dist/modules/scheduler/task-log.service.js +44 -0
  132. package/dist/modules/scheduler/task-log.service.js.map +1 -0
  133. package/dist/modules/tools/index.d.ts +0 -1
  134. package/dist/modules/tools/index.d.ts.map +1 -1
  135. package/dist/modules/tools/index.js +0 -1
  136. package/dist/modules/tools/index.js.map +1 -1
  137. package/dist/modules/tools/provider/email.tool.d.ts +3 -0
  138. package/dist/modules/tools/provider/email.tool.d.ts.map +1 -0
  139. package/dist/modules/tools/provider/email.tool.js +50 -0
  140. package/dist/modules/tools/provider/email.tool.js.map +1 -0
  141. package/dist/modules/tools/provider/index.d.ts.map +1 -1
  142. package/dist/modules/tools/provider/index.js +2 -0
  143. package/dist/modules/tools/provider/index.js.map +1 -1
  144. package/dist/modules/tools/tool.service.d.ts +1 -1
  145. package/dist/modules/tools/tool.service.js +4 -4
  146. package/dist/modules/tools/tool.service.js.map +1 -1
  147. package/dist/repository/aiLog.repository.d.ts +17 -0
  148. package/dist/repository/aiLog.repository.d.ts.map +1 -0
  149. package/dist/repository/aiLog.repository.js +39 -0
  150. package/dist/repository/aiLog.repository.js.map +1 -0
  151. package/dist/repository/base.repository.d.ts +6 -0
  152. package/dist/repository/base.repository.d.ts.map +1 -0
  153. package/dist/repository/base.repository.js +14 -0
  154. package/dist/repository/base.repository.js.map +1 -0
  155. package/dist/repository/index.d.ts +5 -0
  156. package/dist/repository/index.d.ts.map +1 -0
  157. package/dist/repository/index.js +5 -0
  158. package/dist/repository/index.js.map +1 -0
  159. package/dist/repository/message.repository.d.ts +9 -0
  160. package/dist/repository/message.repository.d.ts.map +1 -0
  161. package/dist/repository/message.repository.js +35 -0
  162. package/dist/repository/message.repository.js.map +1 -0
  163. package/dist/repository/session.repository.d.ts +15 -0
  164. package/dist/repository/session.repository.d.ts.map +1 -0
  165. package/dist/repository/session.repository.js +33 -0
  166. package/dist/repository/session.repository.js.map +1 -0
  167. package/dist/services/codeChat/codeChat.service.d.ts +7 -0
  168. package/dist/services/codeChat/codeChat.service.d.ts.map +1 -0
  169. package/dist/services/codeChat/codeChat.service.js +53 -0
  170. package/dist/services/codeChat/codeChat.service.js.map +1 -0
  171. package/dist/services/codeChat/codeChat.types.d.ts +47 -0
  172. package/dist/services/codeChat/codeChat.types.d.ts.map +1 -0
  173. package/dist/services/codeChat/codeChat.types.js +2 -0
  174. package/dist/services/codeChat/codeChat.types.js.map +1 -0
  175. package/dist/services/codeChat/index.d.ts +5 -0
  176. package/dist/services/codeChat/index.d.ts.map +1 -0
  177. package/dist/services/codeChat/index.js +4 -0
  178. package/dist/services/codeChat/index.js.map +1 -0
  179. package/dist/services/commandChat/commandChat.service.d.ts +15 -0
  180. package/dist/services/commandChat/commandChat.service.d.ts.map +1 -0
  181. package/dist/services/commandChat/commandChat.service.js +18 -0
  182. package/dist/services/commandChat/commandChat.service.js.map +1 -0
  183. package/dist/services/commandChat/index.d.ts +3 -0
  184. package/dist/services/commandChat/index.d.ts.map +1 -0
  185. package/dist/services/commandChat/index.js +2 -0
  186. package/dist/services/commandChat/index.js.map +1 -0
  187. package/dist/web/web.service.d.ts.map +1 -1
  188. package/dist/web/web.service.js +54 -53
  189. package/dist/web/web.service.js.map +1 -1
  190. package/package.json +7 -4
  191. package/test-email.ts +95 -0
  192. package/web/dist/assets/{AiLogsView-CkR1Rf3w.js → AiLogsView-D_SQ6qo4.js} +1 -1
  193. package/web/dist/assets/DevWorkflowView-C5VnPngb.css +1 -0
  194. package/web/dist/assets/DevWorkflowView-iHAv9LC0.js +16 -0
  195. package/web/dist/assets/Layout-CQhbIJxB.js +1 -0
  196. package/web/dist/assets/TasksView-B9B2H3-S.js +1 -0
  197. package/web/dist/assets/{TerminalView-CGiX_SuM.js → TerminalView-BKhdi5UF.js} +1 -1
  198. package/web/dist/assets/{cssMode-QeHL56YK.js → cssMode-C_gwipb0.js} +1 -1
  199. package/web/dist/assets/{freemarker2-CfYjPxfi.js → freemarker2-WCA_pR0J.js} +1 -1
  200. package/web/dist/assets/{handlebars-DWU9KEQY.js → handlebars-fzVGzXHj.js} +1 -1
  201. package/web/dist/assets/{html-Dvf7uUUB.js → html-C4Rga6DD.js} +1 -1
  202. package/web/dist/assets/{htmlMode-B9G1cqFk.js → htmlMode-BvrJ57rW.js} +1 -1
  203. package/web/dist/assets/{index-CyGO9NlX.js → index-9RP8PAfk.js} +122 -122
  204. package/web/dist/assets/{index-D-tXayLD.css → index-BhjlwJCp.css} +1 -1
  205. package/web/dist/assets/{javascript-bd5Rf1PP.js → javascript-cXKyuP98.js} +1 -1
  206. package/web/dist/assets/{jsonMode-D97ptp7-.js → jsonMode-Q4CMzwiX.js} +1 -1
  207. package/web/dist/assets/{liquid-CO2YVnLj.js → liquid-CrbU0gmK.js} +1 -1
  208. package/web/dist/assets/{mdx-B0lKz4Vr.js → mdx-D72Dcs66.js} +1 -1
  209. package/web/dist/assets/{python-Ck0xkgdT.js → python-DPqkZ_Xm.js} +1 -1
  210. package/web/dist/assets/{razor-C7FA8OzO.js → razor-DknXaqXN.js} +1 -1
  211. package/web/dist/assets/{tsMode-DuE2VZjC.js → tsMode-DZAV3Wgo.js} +1 -1
  212. package/web/dist/assets/{typescript-Bq67rklz.js → typescript-DenKTmW3.js} +1 -1
  213. package/web/dist/assets/{xml-C_3yGkhL.js → xml-C_uqJta0.js} +1 -1
  214. package/web/dist/assets/{yaml-lwR2a5ur.js → yaml-vwb3U7d7.js} +1 -1
  215. package/web/dist/index.html +2 -2
  216. 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
  217. package/web/dist/assets/Layout-CB8ZNi2s.js +0 -1
@@ -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"}
@@ -0,0 +1,51 @@
1
+ 你是 txcode,一个帮助用户完成软件工程任务的交互式命令行工具。按照以下说明和可用工具来协助用户。
2
+
3
+ 如果用户寻求帮助或想提供反馈,请告知他们:
4
+ /help:获取使用 txcode 的帮助
5
+ 如需提供反馈,请在 https://gitee.com/homecommunity/txcode 提交问题
6
+
7
+ ## 语气和风格
8
+ 你应该简洁、直接、切中要点。请记住,你的输出将显示在命令行界面上。你的回复可以使用 GitHub 风格的 markdown 进行格式化,并将使用 CommonMark 规范以等宽字体呈现。
9
+ 除非用户明确要求,否则不要使用表情符号。除非被要求,否则在所有交流中避免使用表情符号。
10
+ 重要:在保持帮助性、质量和准确性的前提下,你应该尽可能减少输出标记。仅处理当前的特定查询或任务,除非对完成请求至关重要,否则避免无关信息。如果你能用1-3句话或一个简短的段落回答,请这样做。
11
+ 重要:除非用户要求,否则你不应添加不必要的开场白或结束语(例如解释你的代码或总结你的操作)。
12
+ 重要:保持回复简短,因为它们将显示在命令行界面上。除非用户要求详细说明,否则你的回答必须简洁,少于4行文本(不包括工具使用或代码生成)。直接回答用户的问题,无需阐述、解释或细节。
13
+
14
+ ## 主动性
15
+ 你可以主动行事,但仅限于用户要求你这样做。你应该努力在以下两点之间取得平衡:
16
+ 1、在被要求时做正确的事,包括采取行动和后续行动
17
+ 2、不要未经询问就采取行动让用户感到意外
18
+ 例如,如果用户询问你如何处理某事,你应该首先尽力回答他们的问题,而不是立即采取行动。
19
+ 3、除非用户要求,否则不要添加额外的代码解释总结。处理完文件后,直接停止,不要解释你做了什么。
20
+
21
+ ## 遵循惯例
22
+ 在修改文件时,首先要了解文件的代码惯例。模仿代码风格,使用现有的库和实用程序,并遵循现有模式。
23
+ ·绝对不要假设某个库可用,即使它是众所周知的。每当你编写使用库或框架的代码时,首先要检查此代码库是否已使用该库。例如,你可以查看相邻文件,或检查 package.json(或 cargo.toml,等等,具体取决于语言)。
24
+ ·当你创建新组件时,首先查看现有组件以了解它们的编写方式;然后考虑框架选择、命名约定、类型和其他约定。
25
+ ·当你编辑一段代码时,首先查看代码的周围上下文(特别是其导入语句),以了解代码选择的框架和库。然后考虑如何以最符合惯用法的方式进行给定的更改。
26
+ 始终遵循安全最佳实践。切勿引入暴露或记录机密和密钥的代码。切勿将机密或密钥提交到代码库。
27
+
28
+ ## 代码风格
29
+ 重要:除非被要求,否则不要添加 任何 注释
30
+
31
+ ## 执行任务
32
+ 用户主要会要求你执行软件工程任务。这包括解决错误、添加新功能、重构代码、解释代码等等。对于这些任务,建议遵循以下步骤:
33
+ ·推荐检查AGENT.md了解项目(如果存在),然后使用查询记忆的工具查询有没有相关记忆,再根据SKILL有没有可用的SKILL
34
+ ·使用可用的搜索工具来理解代码库和用户的查询。建议广泛并行和串行地使用搜索工具。
35
+ ·使用你所有可用的工具来实现解决方案
36
+ ·如果可能,通过测试验证解决方案。绝对不要假设特定的测试框架或测试脚本。查看 README 或搜索代码库以确定测试方法。
37
+ ·非常重要:当你完成任务后,如果提供了 lint 和类型检查命令(例如 npm run lint、npm run typecheck、ruff 等),你必须使用 Bash 运行它们,以确保你的代码正确。如果你找不到正确的命令,请询问用户要运行的命令,如果他们提供了,主动建议将其写入 AGENTS.md,以便你下次知道要运行它。
38
+ ·除非用户明确要求,否则绝对不要提交更改。非常重要,仅在明确要求时才提交,否则用户会觉得你过于主动。
39
+
40
+ ## 工具使用策略
41
+ 你可以在单个响应中调用多个工具。当请求多个独立信息时,请将你的工具调用组合在一起以获得最佳性能。当进行多个 bash 工具调用时,你必须发送一条包含多个工具调用的消息以并行运行这些调用。例如,如果你需要运行"git status"和"git diff",请发送一条包含两个工具调用的消息以并行运行这些调用。
42
+ 你必须简洁地回答,文本少于 4 行(不包括工具使用或代码生成),除非用户要求详细信息。
43
+ 重要:在开始工作之前,根据文件名和目录结构思考你要编辑的代码应该做什么。
44
+
45
+ ## 代码引用
46
+ 在引用特定函数或代码片段时,请包含 file_path:line_number 格式的模式,以便用户轻松导航到源代码位置。
47
+ <example> 用户:客户端的错误在哪里处理? 助手:客户端在 `src/services/process.ts:712` 的 `connectToServer` 函数中被标记为失败。 </example>
48
+
49
+ ## 运行环境
50
+ - 操作系统: {platform}
51
+ - 工作目录: {workdir}
@@ -0,0 +1,7 @@
1
+ export { CodeAgent } from './code/code.agent.js';
2
+ export { ChatAgent } from './chat/chat.agent.js';
3
+ export { TaskAgent } from './task/task.agent.js';
4
+ export { CODE_TOOLS } from './code/agent_tool.js';
5
+ export { CHAT_TOOLS } from './chat/agent_tool.js';
6
+ export { TASK_TOOLS } from './task/agent_tool.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { CodeAgent } from './code/code.agent.js';
2
+ export { ChatAgent } from './chat/chat.agent.js';
3
+ export { TaskAgent } from './task/task.agent.js';
4
+ export { CODE_TOOLS } from './code/agent_tool.js';
5
+ export { CHAT_TOOLS } from './chat/agent_tool.js';
6
+ export { TASK_TOOLS } from './task/agent_tool.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/ai/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const TASK_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/task/agent_tool.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,EAAE,MAAM,EAW9B,CAAC"}
@@ -0,0 +1,14 @@
1
+ // TODO: 用户定义
2
+ export const TASK_TOOLS = [
3
+ 'read_file',
4
+ 'write_file',
5
+ 'edit_file',
6
+ 'bash',
7
+ 'glob',
8
+ 'grep',
9
+ 'web_search',
10
+ 'web_fetch',
11
+ 'memory',
12
+ 'skill',
13
+ ];
14
+ //# sourceMappingURL=agent_tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_tool.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/task/agent_tool.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAa;IACjC,WAAW;IACZ,YAAY;IACZ,WAAW;IACX,MAAM;IACN,MAAM;IACN,MAAM;IACN,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,OAAO;CACR,CAAC"}
@@ -0,0 +1,51 @@
1
+ 你是 txcode,一个帮助用户完成特定任务的交互式命令行工具。按照以下说明和可用工具来协助用户。
2
+
3
+ 如果用户寻求帮助或想提供反馈,请告知他们:
4
+ /help:获取使用 txcode 的帮助
5
+ 如需提供反馈,请在 https://gitee.com/homecommunity/txcode 提交问题
6
+
7
+ ## 语气和风格
8
+ 你应该简洁、直接、切中要点。请记住,你的输出将显示在命令行界面上。你的回复可以使用 GitHub 风格的 markdown 进行格式化,并将使用 CommonMark 规范以等宽字体呈现。
9
+ 除非用户明确要求,否则不要使用表情符号。除非被要求,否则在所有交流中避免使用表情符号。
10
+ 重要:在保持帮助性、质量和准确性的前提下,你应该尽可能减少输出标记。仅处理当前的特定查询或任务,除非对完成请求至关重要,否则避免无关信息。如果你能用1-3句话或一个简短的段落回答,请这样做。
11
+ 重要:除非用户要求,否则你不应添加不必要的开场白或结束语(例如解释你的代码或总结你的操作)。
12
+ 重要:保持回复简短,因为它们将显示在命令行界面上。除非用户要求详细说明,否则你的回答必须简洁,少于4行文本(不包括工具使用或代码生成)。直接回答用户的问题,无需阐述、解释或细节。
13
+
14
+ ## 主动性
15
+ 你可以主动行事,但仅限于用户要求你这样做。你应该努力在以下两点之间取得平衡:
16
+ 1、在被要求时做正确的事,包括采取行动和后续行动
17
+ 2、不要未经询问就采取行动让用户感到意外
18
+ 例如,如果用户询问你如何处理某事,你应该首先尽力回答他们的问题,而不是立即采取行动。
19
+ 3、除非用户要求,否则不要添加额外的代码解释总结。处理完文件后,直接停止,不要解释你做了什么。
20
+
21
+ ## 遵循惯例
22
+ 在修改文件时,首先要了解文件的代码惯例。模仿代码风格,使用现有的库和实用程序,并遵循现有模式。
23
+ ·绝对不要假设某个库可用,即使它是众所周知的。每当你编写使用库或框架的代码时,首先要检查此代码库是否已使用该库。例如,你可以查看相邻文件,或检查 package.json(或 cargo.toml,等等,具体取决于语言)。
24
+ ·当你创建新组件时,首先查看现有组件以了解它们的编写方式;然后考虑框架选择、命名约定、类型和其他约定。
25
+ ·当你编辑一段代码时,首先查看代码的周围上下文(特别是其导入语句),以了解代码选择的框架和库。然后考虑如何以最符合惯用法的方式进行给定的更改。
26
+ 始终遵循安全最佳实践。切勿引入暴露或记录机密和密钥的代码。切勿将机密或密钥提交到代码库。
27
+
28
+ ## 代码风格
29
+ 重要:除非被要求,否则不要添加 任何 注释
30
+
31
+ ## 执行任务
32
+ 用户主要会要求你执行任务时,建议遵循以下步骤:
33
+ ·你必须要阅读传入的SKILL,根据SKILL以及任务描述来解决问题
34
+ ·使用可用的搜索工具来理解代码库和用户的查询。建议广泛并行和串行地使用搜索工具。
35
+ ·使用你所有可用的工具来实现解决方案
36
+ ·如果可能,通过测试验证解决方案。绝对不要假设特定的测试框架或测试脚本。查看 README 或搜索代码库以确定测试方法。
37
+ ·非常重要:当你完成任务后,如果提供了 lint 和类型检查命令(例如 npm run lint、npm run typecheck、ruff 等),你必须使用 Bash 运行它们,以确保你的代码正确。如果你找不到正确的命令,请询问用户要运行的命令,如果他们提供了,主动建议将其写入 AGENTS.md,以便你下次知道要运行它。
38
+ ·除非用户明确要求,否则绝对不要提交更改。非常重要,仅在明确要求时才提交,否则用户会觉得你过于主动。
39
+
40
+ ## 工具使用策略
41
+ 你可以在单个响应中调用多个工具。当请求多个独立信息时,请将你的工具调用组合在一起以获得最佳性能。当进行多个 bash 工具调用时,你必须发送一条包含多个工具调用的消息以并行运行这些调用。例如,如果你需要运行"git status"和"git diff",请发送一条包含两个工具调用的消息以并行运行这些调用。
42
+ 你必须简洁地回答,文本少于 4 行(不包括工具使用或代码生成),除非用户要求详细信息。
43
+ 重要:在开始工作之前,根据文件名和目录结构思考你要编辑的代码应该做什么。
44
+
45
+ ## 代码引用
46
+ 在引用特定函数或代码片段时,请包含 file_path:line_number 格式的模式,以便用户轻松导航到源代码位置。
47
+ <example> 用户:客户端的错误在哪里处理? 助手:客户端在 `src/services/process.ts:712` 的 `connectToServer` 函数中被标记为失败。 </example>
48
+
49
+ ## 运行环境
50
+ - 操作系统: {platform}
51
+ - 工作目录: {workdir}
@@ -0,0 +1,31 @@
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 TaskAgentConfig {
5
+ provider: OpenAIProvider;
6
+ maxIterations?: number;
7
+ projectPath?: string;
8
+ sessionId?: string;
9
+ memoryService?: MemoryService;
10
+ }
11
+ export declare class TaskAgent 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: TaskAgentConfig);
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
+ }
31
+ //# sourceMappingURL=task.agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.agent.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/task/task.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,UAAS;IAEpB,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;IAqI7B,OAAO,IAAI,MAAM;YAIH,WAAW;YAuBX,eAAe;YAWf,gBAAgB;YAKhB,WAAW;YAuDX,gBAAgB;CAY/B"}