thatgfsj-code 0.3.0 → 0.3.1

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 (262) hide show
  1. package/CHANGELOG.md +229 -0
  2. package/DEVELOPMENT.md +286 -0
  3. package/README.md +144 -79
  4. package/dist/agent/core.d.ts +56 -0
  5. package/dist/agent/core.d.ts.map +1 -0
  6. package/dist/agent/core.js +142 -0
  7. package/dist/agent/core.js.map +1 -0
  8. package/dist/agent/index.d.ts +8 -0
  9. package/dist/agent/index.d.ts.map +1 -0
  10. package/dist/agent/index.js +8 -0
  11. package/dist/agent/index.js.map +1 -0
  12. package/dist/agent/intent.d.ts +36 -0
  13. package/dist/agent/intent.d.ts.map +1 -0
  14. package/dist/agent/intent.js +146 -0
  15. package/dist/agent/intent.js.map +1 -0
  16. package/dist/agent/streaming.d.ts +50 -0
  17. package/dist/agent/streaming.d.ts.map +1 -0
  18. package/dist/agent/streaming.js +110 -0
  19. package/dist/agent/streaming.js.map +1 -0
  20. package/dist/core/ai-engine.d.ts +76 -0
  21. package/dist/core/ai-engine.d.ts.map +1 -0
  22. package/dist/core/ai-engine.js +394 -0
  23. package/dist/core/ai-engine.js.map +1 -0
  24. package/dist/core/cli.d.ts +21 -0
  25. package/dist/core/cli.d.ts.map +1 -0
  26. package/dist/core/cli.js +143 -0
  27. package/dist/core/cli.js.map +1 -0
  28. package/dist/core/config.d.ts +55 -0
  29. package/dist/core/config.d.ts.map +1 -0
  30. package/dist/core/config.js +162 -0
  31. package/dist/core/config.js.map +1 -0
  32. package/dist/core/context-compactor.d.ts +54 -0
  33. package/dist/core/context-compactor.d.ts.map +1 -0
  34. package/dist/core/context-compactor.js +197 -0
  35. package/dist/core/context-compactor.js.map +1 -0
  36. package/dist/core/hooks.d.ts +75 -0
  37. package/dist/core/hooks.d.ts.map +1 -0
  38. package/dist/core/hooks.js +146 -0
  39. package/dist/core/hooks.js.map +1 -0
  40. package/dist/core/permissions.d.ts +52 -0
  41. package/dist/core/permissions.d.ts.map +1 -0
  42. package/dist/core/permissions.js +237 -0
  43. package/dist/core/permissions.js.map +1 -0
  44. package/dist/core/session.d.ts +54 -0
  45. package/dist/core/session.d.ts.map +1 -0
  46. package/dist/core/session.js +147 -0
  47. package/dist/core/session.js.map +1 -0
  48. package/dist/core/skills.d.ts +60 -0
  49. package/dist/core/skills.d.ts.map +1 -0
  50. package/dist/core/skills.js +175 -0
  51. package/dist/core/skills.js.map +1 -0
  52. package/dist/core/state.d.ts +60 -0
  53. package/dist/core/state.d.ts.map +1 -0
  54. package/dist/core/state.js +106 -0
  55. package/dist/core/state.js.map +1 -0
  56. package/dist/core/subagent.d.ts +68 -0
  57. package/dist/core/subagent.d.ts.map +1 -0
  58. package/dist/core/subagent.js +142 -0
  59. package/dist/core/subagent.js.map +1 -0
  60. package/dist/core/system-prompt.d.ts +40 -0
  61. package/dist/core/system-prompt.d.ts.map +1 -0
  62. package/dist/core/system-prompt.js +138 -0
  63. package/dist/core/system-prompt.js.map +1 -0
  64. package/dist/core/tool-registry.d.ts +53 -0
  65. package/dist/core/tool-registry.d.ts.map +1 -0
  66. package/dist/core/tool-registry.js +138 -0
  67. package/dist/core/tool-registry.js.map +1 -0
  68. package/dist/core/types.d.ts +206 -0
  69. package/dist/core/types.d.ts.map +1 -0
  70. package/dist/core/types.js +127 -0
  71. package/dist/core/types.js.map +1 -0
  72. package/dist/index.d.ts +7 -0
  73. package/dist/{cmd/index.d.ts.map → index.d.ts.map} +1 -1
  74. package/dist/index.js +472 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/mcp/client.d.ts +1 -1
  77. package/dist/mcp/client.d.ts.map +1 -1
  78. package/dist/repl/index.d.ts +8 -0
  79. package/dist/repl/index.d.ts.map +1 -0
  80. package/dist/repl/index.js +8 -0
  81. package/dist/repl/index.js.map +1 -0
  82. package/dist/repl/input.d.ts +69 -0
  83. package/dist/repl/input.d.ts.map +1 -0
  84. package/dist/repl/input.js +139 -0
  85. package/dist/repl/input.js.map +1 -0
  86. package/dist/repl/loop.d.ts +184 -0
  87. package/dist/repl/loop.d.ts.map +1 -0
  88. package/dist/repl/loop.js +932 -0
  89. package/dist/repl/loop.js.map +1 -0
  90. package/dist/repl/output.d.ts +105 -0
  91. package/dist/repl/output.d.ts.map +1 -0
  92. package/dist/repl/output.js +199 -0
  93. package/dist/repl/output.js.map +1 -0
  94. package/dist/repl/welcome.d.ts +68 -0
  95. package/dist/repl/welcome.d.ts.map +1 -0
  96. package/dist/repl/welcome.js +254 -0
  97. package/dist/repl/welcome.js.map +1 -0
  98. package/dist/tools/file.d.ts +1 -1
  99. package/dist/tools/file.d.ts.map +1 -1
  100. package/dist/tools/git.d.ts +1 -1
  101. package/dist/tools/git.d.ts.map +1 -1
  102. package/dist/tools/index.d.ts +15 -35
  103. package/dist/tools/index.d.ts.map +1 -1
  104. package/dist/tools/index.js +31 -80
  105. package/dist/tools/index.js.map +1 -1
  106. package/dist/tools/search.d.ts +1 -1
  107. package/dist/tools/search.d.ts.map +1 -1
  108. package/dist/tools/shell.d.ts +11 -4
  109. package/dist/tools/shell.d.ts.map +1 -1
  110. package/dist/tools/shell.js +78 -42
  111. package/dist/tools/shell.js.map +1 -1
  112. package/dist/utils/diff-preview.d.ts +42 -0
  113. package/dist/utils/diff-preview.d.ts.map +1 -0
  114. package/dist/utils/diff-preview.js +174 -0
  115. package/dist/utils/diff-preview.js.map +1 -0
  116. package/dist/utils/index.d.ts +8 -0
  117. package/dist/utils/index.d.ts.map +1 -0
  118. package/dist/utils/index.js +8 -0
  119. package/dist/utils/index.js.map +1 -0
  120. package/dist/utils/memory.d.ts +81 -0
  121. package/dist/utils/memory.d.ts.map +1 -0
  122. package/dist/utils/memory.js +186 -0
  123. package/dist/utils/memory.js.map +1 -0
  124. package/dist/utils/project-context.d.ts +62 -0
  125. package/dist/utils/project-context.d.ts.map +1 -0
  126. package/dist/utils/project-context.js +197 -0
  127. package/dist/utils/project-context.js.map +1 -0
  128. package/docs/API_KEY_GUIDE.md +6 -0
  129. package/docs/FAQ.md +25 -3
  130. package/package.json +41 -9
  131. package/ROADMAP.md +0 -61
  132. package/dist/app/agent.d.ts +0 -31
  133. package/dist/app/agent.d.ts.map +0 -1
  134. package/dist/app/agent.js +0 -106
  135. package/dist/app/agent.js.map +0 -1
  136. package/dist/app/index.d.ts +0 -39
  137. package/dist/app/index.d.ts.map +0 -1
  138. package/dist/app/index.js +0 -80
  139. package/dist/app/index.js.map +0 -1
  140. package/dist/cmd/index.d.ts +0 -12
  141. package/dist/cmd/index.js +0 -85
  142. package/dist/cmd/index.js.map +0 -1
  143. package/dist/config/index.d.ts +0 -39
  144. package/dist/config/index.d.ts.map +0 -1
  145. package/dist/config/index.js +0 -110
  146. package/dist/config/index.js.map +0 -1
  147. package/dist/config/providers.d.ts +0 -23
  148. package/dist/config/providers.d.ts.map +0 -1
  149. package/dist/config/providers.js +0 -152
  150. package/dist/config/providers.js.map +0 -1
  151. package/dist/config/types.d.ts +0 -33
  152. package/dist/config/types.d.ts.map +0 -1
  153. package/dist/config/types.js +0 -5
  154. package/dist/config/types.js.map +0 -1
  155. package/dist/hooks/index.d.ts +0 -31
  156. package/dist/hooks/index.d.ts.map +0 -1
  157. package/dist/hooks/index.js +0 -71
  158. package/dist/hooks/index.js.map +0 -1
  159. package/dist/llm/anthropic.d.ts +0 -17
  160. package/dist/llm/anthropic.d.ts.map +0 -1
  161. package/dist/llm/anthropic.js +0 -126
  162. package/dist/llm/anthropic.js.map +0 -1
  163. package/dist/llm/gemini.d.ts +0 -16
  164. package/dist/llm/gemini.d.ts.map +0 -1
  165. package/dist/llm/gemini.js +0 -107
  166. package/dist/llm/gemini.js.map +0 -1
  167. package/dist/llm/index.d.ts +0 -48
  168. package/dist/llm/index.d.ts.map +0 -1
  169. package/dist/llm/index.js +0 -174
  170. package/dist/llm/index.js.map +0 -1
  171. package/dist/llm/openai.d.ts +0 -17
  172. package/dist/llm/openai.d.ts.map +0 -1
  173. package/dist/llm/openai.js +0 -113
  174. package/dist/llm/openai.js.map +0 -1
  175. package/dist/llm/provider.d.ts +0 -33
  176. package/dist/llm/provider.d.ts.map +0 -1
  177. package/dist/llm/provider.js +0 -6
  178. package/dist/llm/provider.js.map +0 -1
  179. package/dist/prompts/index.d.ts +0 -27
  180. package/dist/prompts/index.d.ts.map +0 -1
  181. package/dist/prompts/index.js +0 -102
  182. package/dist/prompts/index.js.map +0 -1
  183. package/dist/session/compactor.d.ts +0 -48
  184. package/dist/session/compactor.d.ts.map +0 -1
  185. package/dist/session/compactor.js +0 -77
  186. package/dist/session/compactor.js.map +0 -1
  187. package/dist/session/index.d.ts +0 -48
  188. package/dist/session/index.d.ts.map +0 -1
  189. package/dist/session/index.js +0 -69
  190. package/dist/session/index.js.map +0 -1
  191. package/dist/session/message.d.ts +0 -26
  192. package/dist/session/message.d.ts.map +0 -1
  193. package/dist/session/message.js +0 -34
  194. package/dist/session/message.js.map +0 -1
  195. package/dist/tools/types.d.ts +0 -68
  196. package/dist/tools/types.d.ts.map +0 -1
  197. package/dist/tools/types.js +0 -57
  198. package/dist/tools/types.js.map +0 -1
  199. package/dist/tui/index.d.ts +0 -8
  200. package/dist/tui/index.d.ts.map +0 -1
  201. package/dist/tui/index.js +0 -8
  202. package/dist/tui/index.js.map +0 -1
  203. package/dist/tui/input.d.ts +0 -14
  204. package/dist/tui/input.d.ts.map +0 -1
  205. package/dist/tui/input.js +0 -50
  206. package/dist/tui/input.js.map +0 -1
  207. package/dist/tui/output.d.ts +0 -20
  208. package/dist/tui/output.d.ts.map +0 -1
  209. package/dist/tui/output.js +0 -70
  210. package/dist/tui/output.js.map +0 -1
  211. package/dist/tui/repl.d.ts +0 -25
  212. package/dist/tui/repl.d.ts.map +0 -1
  213. package/dist/tui/repl.js +0 -114
  214. package/dist/tui/repl.js.map +0 -1
  215. package/dist/tui/welcome.d.ts +0 -15
  216. package/dist/tui/welcome.d.ts.map +0 -1
  217. package/dist/tui/welcome.js +0 -86
  218. package/dist/tui/welcome.js.map +0 -1
  219. package/dist/types.d.ts +0 -38
  220. package/dist/types.d.ts.map +0 -1
  221. package/dist/types.js +0 -6
  222. package/dist/types.js.map +0 -1
  223. package/dist/utils/diff.d.ts +0 -22
  224. package/dist/utils/diff.d.ts.map +0 -1
  225. package/dist/utils/diff.js +0 -60
  226. package/dist/utils/diff.js.map +0 -1
  227. package/dist/utils/project.d.ts +0 -32
  228. package/dist/utils/project.d.ts.map +0 -1
  229. package/dist/utils/project.js +0 -89
  230. package/dist/utils/project.js.map +0 -1
  231. package/src/app/agent.ts +0 -140
  232. package/src/app/index.ts +0 -101
  233. package/src/cmd/index.ts +0 -96
  234. package/src/config/index.ts +0 -130
  235. package/src/config/providers.ts +0 -160
  236. package/src/config/types.ts +0 -46
  237. package/src/hooks/index.ts +0 -111
  238. package/src/llm/anthropic.ts +0 -146
  239. package/src/llm/gemini.ts +0 -127
  240. package/src/llm/index.ts +0 -209
  241. package/src/llm/openai.ts +0 -132
  242. package/src/llm/provider.ts +0 -38
  243. package/src/mcp/client.ts +0 -330
  244. package/src/prompts/index.ts +0 -123
  245. package/src/session/compactor.ts +0 -103
  246. package/src/session/index.ts +0 -81
  247. package/src/session/message.ts +0 -42
  248. package/src/tools/file.ts +0 -117
  249. package/src/tools/git.ts +0 -132
  250. package/src/tools/index.ts +0 -108
  251. package/src/tools/search.ts +0 -263
  252. package/src/tools/shell.ts +0 -136
  253. package/src/tools/types.ts +0 -122
  254. package/src/tui/index.ts +0 -8
  255. package/src/tui/input.ts +0 -56
  256. package/src/tui/output.ts +0 -83
  257. package/src/tui/repl.ts +0 -131
  258. package/src/tui/welcome.ts +0 -101
  259. package/src/types.ts +0 -42
  260. package/src/utils/diff.ts +0 -71
  261. package/src/utils/project.ts +0 -99
  262. package/tsconfig.json +0 -19
package/dist/tui/repl.js DELETED
@@ -1,114 +0,0 @@
1
- /**
2
- * REPL - Main interactive loop
3
- * Migrated from old src/repl/loop.ts + src/index.ts interactive mode
4
- */
5
- import chalk from 'chalk';
6
- import { REPLInput } from './input.js';
7
- import { REPLOutput } from './output.js';
8
- import { ProjectContext } from '../utils/project.js';
9
- export class REPL {
10
- input;
11
- output;
12
- app;
13
- running = false;
14
- constructor(app) {
15
- this.input = new REPLInput();
16
- this.output = new REPLOutput();
17
- this.app = app;
18
- }
19
- /**
20
- * Start the REPL
21
- */
22
- async start() {
23
- this.running = true;
24
- // Show banner
25
- this.output.clear();
26
- this.output.printBanner();
27
- this.output.printInfo('Type "help" for available commands\n');
28
- this.output.printDivider();
29
- // Show project context
30
- console.log(chalk.gray(ProjectContext.getSummary()));
31
- this.output.printDivider();
32
- console.log();
33
- // Main loop
34
- while (this.running) {
35
- try {
36
- const userInput = await this.input.prompt();
37
- if (!userInput.trim())
38
- continue;
39
- // Handle commands
40
- const handled = await this.handleCommand(userInput.trim());
41
- if (handled)
42
- continue;
43
- // Process with AI
44
- await this.processInput(userInput.trim());
45
- }
46
- catch (error) {
47
- if (error.message === 'SIGINT')
48
- continue;
49
- this.output.printError(error.message);
50
- }
51
- }
52
- }
53
- /**
54
- * Handle built-in commands
55
- */
56
- async handleCommand(input) {
57
- const cmd = input.toLowerCase();
58
- switch (cmd) {
59
- case 'exit':
60
- case 'quit':
61
- this.output.printInfo('\n👋 Goodbye!');
62
- this.running = false;
63
- this.input.close();
64
- return true;
65
- case 'clear':
66
- this.output.clear();
67
- this.output.printBanner();
68
- return true;
69
- case 'help':
70
- this.output.printHelp();
71
- return true;
72
- case 'tools':
73
- this.output.printHeader('🔧 Available Tools');
74
- for (const tool of this.app.tools.list()) {
75
- this.output.printInfo(` ${tool.name} - ${tool.description}`);
76
- }
77
- console.log();
78
- return true;
79
- case 'model':
80
- this.output.printHeader('🤖 Current Model');
81
- const cfg = this.app.config.get();
82
- this.output.printInfo(` Provider: ${cfg.provider}`);
83
- this.output.printInfo(` Model: ${cfg.model}`);
84
- this.output.printInfo(` Base URL: ${cfg.baseUrl || 'default'}`);
85
- console.log();
86
- return true;
87
- default:
88
- return false;
89
- }
90
- }
91
- /**
92
- * Process user input with AI
93
- */
94
- async processInput(input) {
95
- this.app.session.addMessage('user', input);
96
- this.output.startSpinner('Thinking...');
97
- let fullResponse = '';
98
- try {
99
- const stream = this.app.getAgent().run(this.app.session.getMessages());
100
- for await (const chunk of stream) {
101
- this.output.stopSpinner();
102
- process.stdout.write(chunk);
103
- fullResponse += chunk;
104
- }
105
- console.log(); // newline
106
- this.app.session.addMessage('assistant', fullResponse);
107
- this.app.session.truncate();
108
- }
109
- catch (error) {
110
- this.output.stopSpinnerFail(chalk.red(`Error: ${error.message}`));
111
- }
112
- }
113
- }
114
- //# sourceMappingURL=repl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/tui/repl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,IAAI;IACP,KAAK,CAAY;IACjB,MAAM,CAAa;IACnB,GAAG,CAAM;IACT,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,GAAQ;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAE3B,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,YAAY;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAE5C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAEhC,kBAAkB;gBAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,OAAO;oBAAE,SAAS;gBAEtB,kBAAkB;gBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;oBAAE,SAAS;gBACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,KAAa;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEhC,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YAEd,KAAK,OAAO;gBACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YAEd,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YAEd,KAAK,OAAO;gBACV,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YAEd,KAAK,OAAO;gBACV,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YAEd;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,KAAa;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,YAAY,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACvE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,YAAY,IAAI,KAAK,CAAC;YACxB,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU;YAEzB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Welcome / Setup Wizard
3
- * Migrated and simplified from old src/repl/welcome.ts
4
- */
5
- export declare class WelcomeScreen {
6
- /**
7
- * Show welcome if no API key is configured
8
- */
9
- static show(hasApiKey: boolean): void;
10
- /**
11
- * Interactive setup wizard
12
- */
13
- static interactiveSetup(): Promise<void>;
14
- }
15
- //# sourceMappingURL=welcome.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAarC;;OAEG;WACU,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAmE/C"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Welcome / Setup Wizard
3
- * Migrated and simplified from old src/repl/welcome.ts
4
- */
5
- import chalk from 'chalk';
6
- import readline from 'readline';
7
- import { existsSync, mkdirSync, writeFileSync } from 'fs';
8
- import { join } from 'path';
9
- import { homedir } from 'os';
10
- import { PROVIDERS, getModelsForProvider, listProviders } from '../config/providers.js';
11
- export class WelcomeScreen {
12
- /**
13
- * Show welcome if no API key is configured
14
- */
15
- static show(hasApiKey) {
16
- if (hasApiKey)
17
- return;
18
- const w = 62;
19
- console.log(chalk.cyan('+') + chalk.white.bold(' Thatgfsj Code ') + chalk.cyan('-'.repeat(w - 16)) + '+');
20
- console.log(chalk.cyan('|') + chalk.yellow(' 快速开始指南').padEnd(w) + chalk.cyan('|'));
21
- console.log(chalk.cyan('|') + ' '.repeat(w) + chalk.cyan('|'));
22
- console.log(chalk.cyan('|') + chalk.gray(' 运行 gfcode init 配置你的 API Key').padEnd(w) + chalk.cyan('|'));
23
- console.log(chalk.cyan('|') + chalk.gray(' 或设置环境变量: OPENAI_API_KEY, SILICONFLOW_API_KEY 等').padEnd(w) + chalk.cyan('|'));
24
- console.log(chalk.cyan('+') + '-'.repeat(w) + '+');
25
- console.log();
26
- }
27
- /**
28
- * Interactive setup wizard
29
- */
30
- static async interactiveSetup() {
31
- console.clear();
32
- console.log(chalk.cyan('\n 🤖 Thatgfsj Code 配置向导\n'));
33
- const rl = readline.createInterface({
34
- input: process.stdin,
35
- output: process.stdout,
36
- });
37
- const question = (prompt) => new Promise(resolve => rl.question(prompt, answer => resolve(answer.trim())));
38
- try {
39
- // Step 1: Choose provider
40
- console.log(chalk.white(' 步骤 1/3: 选择 AI 提供商\n'));
41
- const providers = listProviders();
42
- providers.forEach((p, i) => {
43
- console.log(chalk.green(` ${i + 1}. ${p.name}`));
44
- });
45
- console.log();
46
- const choice = await question(chalk.green(' 请选择 (1-' + providers.length + '): '));
47
- const selected = providers[parseInt(choice) - 1] || providers[0];
48
- const providerName = selected.key;
49
- // Step 2: Enter API Key
50
- console.log(chalk.white('\n 步骤 2/3: 输入 API Key\n'));
51
- console.log(chalk.gray(` 获取地址: ${PROVIDERS[providerName].baseUrl.replace('/v1', '').replace('/v1beta', '')}`));
52
- const apiKey = await question(chalk.green(' 请输入 API Key: '));
53
- // Step 3: Choose model
54
- console.log(chalk.white('\n 步骤 3/3: 选择模型\n'));
55
- const models = getModelsForProvider(providerName);
56
- models.forEach((m, i) => {
57
- console.log(chalk.green(` ${i + 1}. ${m.name}`) + chalk.gray(` - ${m.desc}`));
58
- });
59
- console.log();
60
- const modelChoice = await question(chalk.green(' 请选择模型 (1-' + models.length + '): '));
61
- const selectedModel = models[parseInt(modelChoice) - 1] || models[0];
62
- // Save config
63
- const configDir = join(homedir(), '.thatgfsj');
64
- const configPath = join(configDir, 'config.json');
65
- if (!existsSync(configDir)) {
66
- mkdirSync(configDir, { recursive: true });
67
- }
68
- writeFileSync(configPath, JSON.stringify({
69
- provider: providerName,
70
- model: selectedModel.id,
71
- apiKey,
72
- temperature: 0.7,
73
- maxTokens: 4096,
74
- }, null, 2));
75
- console.log(chalk.green('\n ✅ 配置已保存!'));
76
- console.log(chalk.gray(` 提供商: ${providerName}`));
77
- console.log(chalk.gray(` 模型: ${selectedModel.name}`));
78
- console.log(chalk.gray(` 配置文件: ${configPath}`));
79
- console.log(chalk.cyan('\n 运行 gfcode 开始使用\n'));
80
- }
81
- finally {
82
- rl.close();
83
- }
84
- }
85
- }
86
- //# sourceMappingURL=welcome.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,38 +0,0 @@
1
- /**
2
- * Global shared types for Thatgfsj Code
3
- * Only the most fundamental types used across modules
4
- */
5
- export type Role = 'system' | 'user' | 'assistant' | 'tool';
6
- export interface ChatMessage {
7
- role: Role;
8
- content: string;
9
- name?: string;
10
- tool_calls?: ToolCall[];
11
- tool_call_id?: string;
12
- reasoning_content?: string;
13
- }
14
- export interface ToolCall {
15
- id: string;
16
- type: 'function';
17
- function: {
18
- name: string;
19
- arguments: string;
20
- };
21
- }
22
- export interface ChatResponse {
23
- content: string;
24
- role: 'assistant';
25
- usage?: {
26
- prompt_tokens: number;
27
- completion_tokens: number;
28
- total_tokens: number;
29
- };
30
- tool_calls?: ToolCall[];
31
- reasoning_content?: string;
32
- }
33
- export interface ChatOptions {
34
- temperature?: number;
35
- maxTokens?: number;
36
- stream?: boolean;
37
- }
38
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
package/dist/types.js DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Global shared types for Thatgfsj Code
3
- * Only the most fundamental types used across modules
4
- */
5
- export {};
6
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Diff Preview - Show file changes in a readable format
3
- * Migrated from old src/utils/diff-preview.ts
4
- */
5
- export interface DiffResult {
6
- original: string;
7
- modified: string;
8
- diff: string;
9
- added: number;
10
- removed: number;
11
- }
12
- export declare class DiffPreview {
13
- /**
14
- * Generate a simple line-by-line diff
15
- */
16
- static diff(original: string, modified: string): DiffResult;
17
- /**
18
- * Format diff for display
19
- */
20
- static format(result: DiffResult): string;
21
- }
22
- //# sourceMappingURL=diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqC3D;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAa1C"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Diff Preview - Show file changes in a readable format
3
- * Migrated from old src/utils/diff-preview.ts
4
- */
5
- export class DiffPreview {
6
- /**
7
- * Generate a simple line-by-line diff
8
- */
9
- static diff(original, modified) {
10
- const originalLines = original.split('\n');
11
- const modifiedLines = modified.split('\n');
12
- const diffLines = [];
13
- let added = 0;
14
- let removed = 0;
15
- // Simple diff: show removed (-) and added (+) lines
16
- const maxLen = Math.max(originalLines.length, modifiedLines.length);
17
- for (let i = 0; i < maxLen; i++) {
18
- const orig = originalLines[i];
19
- const mod = modifiedLines[i];
20
- if (orig === mod) {
21
- diffLines.push(` ${orig}`);
22
- }
23
- else {
24
- if (orig !== undefined) {
25
- diffLines.push(`- ${orig}`);
26
- removed++;
27
- }
28
- if (mod !== undefined) {
29
- diffLines.push(`+ ${mod}`);
30
- added++;
31
- }
32
- }
33
- }
34
- return {
35
- original,
36
- modified,
37
- diff: diffLines.join('\n'),
38
- added,
39
- removed,
40
- };
41
- }
42
- /**
43
- * Format diff for display
44
- */
45
- static format(result) {
46
- const lines = result.diff.split('\n').map(line => {
47
- if (line.startsWith('+'))
48
- return `\x1b[32m${line}\x1b[0m`;
49
- if (line.startsWith('-'))
50
- return `\x1b[31m${line}\x1b[0m`;
51
- return line;
52
- });
53
- return [
54
- `\x1b[36m--- Changes: -${result.removed} / +${result.added} ---\x1b[0m`,
55
- ...lines,
56
- `\x1b[36m--- End ---\x1b[0m`,
57
- ].join('\n');
58
- }
59
- }
60
- //# sourceMappingURL=diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAgB,EAAE,QAAgB;QAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,KAAK;YACL,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAkB;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,WAAW,IAAI,SAAS,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,WAAW,IAAI,SAAS,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,yBAAyB,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,KAAK,aAAa;YACvE,GAAG,KAAK;YACR,4BAA4B;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Project Context - Detect project type and gather info
3
- * Migrated from old src/utils/project-context.ts + getProjectContext() from index.ts
4
- */
5
- export interface ProjectInfo {
6
- type: string;
7
- name: string;
8
- path: string;
9
- fileCount: number;
10
- dependencies: number;
11
- }
12
- export interface PackageJson {
13
- name?: string;
14
- version?: string;
15
- dependencies?: Record<string, string>;
16
- devDependencies?: Record<string, string>;
17
- }
18
- export declare class ProjectContext {
19
- /**
20
- * Get project context string for display
21
- */
22
- static getSummary(cwd?: string): string;
23
- /**
24
- * Count code files in directory (skipping node_modules, .git, etc.)
25
- */
26
- static countCodeFiles(dir: string, maxDepth?: number): number;
27
- /**
28
- * Detect project type from files
29
- */
30
- static detectType(cwd?: string): string;
31
- }
32
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM;IA0BtD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM;IA+BxD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM;CAQvD"}
@@ -1,89 +0,0 @@
1
- /**
2
- * Project Context - Detect project type and gather info
3
- * Migrated from old src/utils/project-context.ts + getProjectContext() from index.ts
4
- */
5
- import { existsSync, readdirSync, statSync, readFileSync } from 'fs';
6
- import { join } from 'path';
7
- export class ProjectContext {
8
- /**
9
- * Get project context string for display
10
- */
11
- static getSummary(cwd = process.cwd()) {
12
- const info = [];
13
- try {
14
- const pkgPath = join(cwd, 'package.json');
15
- if (existsSync(pkgPath)) {
16
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
17
- info.push(`📦 Project: ${cwd}`);
18
- info.push(` Name: ${pkg.name || 'unknown'}`);
19
- const depCount = Object.keys(pkg.dependencies || {}).length;
20
- if (depCount > 0)
21
- info.push(` Deps: ${depCount} packages`);
22
- }
23
- else {
24
- info.push(`📁 Working dir: ${cwd}`);
25
- }
26
- const fileCount = ProjectContext.countCodeFiles(cwd);
27
- if (fileCount > 0) {
28
- info.push(` Files: ${fileCount} code files`);
29
- }
30
- }
31
- catch {
32
- info.push(`📁 Working dir: ${cwd}`);
33
- }
34
- return info.join('\n');
35
- }
36
- /**
37
- * Count code files in directory (skipping node_modules, .git, etc.)
38
- */
39
- static countCodeFiles(dir, maxDepth = 3) {
40
- let count = 0;
41
- const codeExts = /\.(ts|js|py|go|rs|java|cpp|c|h|tsx|jsx|vue|svelte)$/;
42
- const walk = (d, depth) => {
43
- if (depth > maxDepth)
44
- return;
45
- try {
46
- const items = readdirSync(d);
47
- for (const item of items) {
48
- if (['node_modules', '.git', 'dist', 'build', '__pycache__'].includes(item))
49
- continue;
50
- const fullPath = join(d, item);
51
- try {
52
- const stat = statSync(fullPath);
53
- if (stat.isDirectory()) {
54
- walk(fullPath, depth + 1);
55
- }
56
- else if (codeExts.test(item)) {
57
- count++;
58
- }
59
- }
60
- catch {
61
- // Skip inaccessible files
62
- }
63
- }
64
- }
65
- catch {
66
- // Skip inaccessible directories
67
- }
68
- };
69
- walk(dir, 0);
70
- return count;
71
- }
72
- /**
73
- * Detect project type from files
74
- */
75
- static detectType(cwd = process.cwd()) {
76
- if (existsSync(join(cwd, 'package.json')))
77
- return 'node';
78
- if (existsSync(join(cwd, 'Cargo.toml')))
79
- return 'rust';
80
- if (existsSync(join(cwd, 'go.mod')))
81
- return 'go';
82
- if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'requirements.txt')))
83
- return 'python';
84
- if (existsSync(join(cwd, 'build.gradle')))
85
- return 'java';
86
- return 'unknown';
87
- }
88
- }
89
- //# sourceMappingURL=project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
package/src/app/agent.ts DELETED
@@ -1,140 +0,0 @@
1
- /**
2
- * Agent Loop - Core agent logic with streaming and tool execution
3
- * Extracted from old src/core/ai-engine.ts
4
- *
5
- * The agent loop: while(true) { stream response → check tool calls → execute → repeat }
6
- */
7
-
8
- import chalk from 'chalk';
9
- import type { ChatMessage, ChatResponse } from '../types.js';
10
- import type { Tool } from '../tools/types.js';
11
- import type { HookManager } from '../hooks/index.js';
12
- import { LLMService } from '../llm/index.js';
13
- import { ToolRegistry } from '../tools/index.js';
14
-
15
- export interface AgentConfig {
16
- maxIterations?: number;
17
- hooks?: HookManager;
18
- }
19
-
20
- export class Agent {
21
- private llm: LLMService;
22
- private registry: ToolRegistry;
23
- private hooks?: HookManager;
24
- private maxIterations: number;
25
-
26
- constructor(llm: LLMService, registry: ToolRegistry, config: AgentConfig = {}) {
27
- this.llm = llm;
28
- this.registry = registry;
29
- this.hooks = config.hooks;
30
- this.maxIterations = config.maxIterations ?? 10;
31
-
32
- // Register tools with LLM service
33
- this.llm.registerTools(registry.list());
34
- }
35
-
36
- /**
37
- * Run agent loop with streaming output
38
- * Returns the final response
39
- */
40
- async *run(messages: ChatMessage[]): AsyncGenerator<string, ChatResponse> {
41
- let currentMessages = [...messages];
42
- let iterations = 0;
43
-
44
- while (iterations < this.maxIterations) {
45
- iterations++;
46
-
47
- // Hook: beforeAgentLoop
48
- if (this.hooks) {
49
- await this.hooks.emit('beforeAgentLoop', { messages: currentMessages, iteration: iterations });
50
- }
51
-
52
- // Stream the response
53
- let fullContent = '';
54
-
55
- for await (const chunk of this.llm.chatStream(currentMessages, { maxIterations: 1 })) {
56
- fullContent += chunk;
57
- yield chunk;
58
- }
59
-
60
- // Get the full response to check for tool calls
61
- const response: ChatResponse = {
62
- content: fullContent,
63
- role: 'assistant',
64
- };
65
-
66
- // Check if the response contains tool calls
67
- // For now, we rely on the LLM service to handle tool calls internally
68
- // If the LLM service returned tool_calls, we need to process them
69
- if (response.tool_calls && response.tool_calls.length > 0) {
70
- currentMessages.push({
71
- role: 'assistant',
72
- content: response.content,
73
- tool_calls: response.tool_calls,
74
- });
75
-
76
- for (const toolCall of response.tool_calls) {
77
- // Hook: beforeToolCall
78
- if (this.hooks) {
79
- await this.hooks.emit('beforeToolCall', {
80
- toolName: toolCall.function.name,
81
- toolParams: JSON.parse(toolCall.function.arguments || '{}'),
82
- toolCallId: toolCall.id,
83
- });
84
- }
85
-
86
- const result = await this.registry.execute(
87
- toolCall.function.name,
88
- JSON.parse(toolCall.function.arguments || '{}')
89
- );
90
-
91
- // Hook: afterToolCall
92
- if (this.hooks) {
93
- await this.hooks.emit('afterToolCall', {
94
- toolName: toolCall.function.name,
95
- toolParams: JSON.parse(toolCall.function.arguments || '{}'),
96
- toolResult: result,
97
- toolCallId: toolCall.id,
98
- });
99
- }
100
-
101
- currentMessages.push({
102
- role: 'tool',
103
- content: result.success ? (result.output || JSON.stringify(result.data)) : (result.error || 'Tool failed'),
104
- tool_call_id: toolCall.id,
105
- name: toolCall.function.name,
106
- });
107
-
108
- yield `\n${chalk.gray(`[tool: ${toolCall.function.name}]`)}`;
109
- }
110
-
111
- continue; // Next iteration
112
- }
113
-
114
- // No tool calls - done
115
- if (response.content) {
116
- currentMessages.push({ role: 'assistant', content: response.content });
117
- }
118
-
119
- // Hook: afterAgentLoop
120
- if (this.hooks) {
121
- await this.hooks.emit('afterAgentLoop', { messages: currentMessages, iteration: iterations });
122
- }
123
-
124
- return response;
125
- }
126
-
127
- return { content: '[Agent loop exceeded maximum iterations]', role: 'assistant' };
128
- }
129
-
130
- /**
131
- * Non-streaming chat (convenience method)
132
- */
133
- async chat(messages: ChatMessage[]): Promise<ChatResponse> {
134
- let fullContent = '';
135
- for await (const chunk of this.run(messages)) {
136
- fullContent += chunk;
137
- }
138
- return { content: fullContent, role: 'assistant' };
139
- }
140
- }