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
@@ -1,31 +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
- import type { ChatMessage, ChatResponse } from '../types.js';
8
- import type { HookManager } from '../hooks/index.js';
9
- import { LLMService } from '../llm/index.js';
10
- import { ToolRegistry } from '../tools/index.js';
11
- export interface AgentConfig {
12
- maxIterations?: number;
13
- hooks?: HookManager;
14
- }
15
- export declare class Agent {
16
- private llm;
17
- private registry;
18
- private hooks?;
19
- private maxIterations;
20
- constructor(llm: LLMService, registry: ToolRegistry, config?: AgentConfig);
21
- /**
22
- * Run agent loop with streaming output
23
- * Returns the final response
24
- */
25
- run(messages: ChatMessage[]): AsyncGenerator<string, ChatResponse>;
26
- /**
27
- * Non-streaming chat (convenience method)
28
- */
29
- chat(messages: ChatMessage[]): Promise<ChatResponse>;
30
- }
31
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/app/agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAS;gBAElB,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB;IAU7E;;;OAGG;IACI,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IA0FzE;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CAO3D"}
package/dist/app/agent.js DELETED
@@ -1,106 +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
- import chalk from 'chalk';
8
- export class Agent {
9
- llm;
10
- registry;
11
- hooks;
12
- maxIterations;
13
- constructor(llm, registry, config = {}) {
14
- this.llm = llm;
15
- this.registry = registry;
16
- this.hooks = config.hooks;
17
- this.maxIterations = config.maxIterations ?? 10;
18
- // Register tools with LLM service
19
- this.llm.registerTools(registry.list());
20
- }
21
- /**
22
- * Run agent loop with streaming output
23
- * Returns the final response
24
- */
25
- async *run(messages) {
26
- let currentMessages = [...messages];
27
- let iterations = 0;
28
- while (iterations < this.maxIterations) {
29
- iterations++;
30
- // Hook: beforeAgentLoop
31
- if (this.hooks) {
32
- await this.hooks.emit('beforeAgentLoop', { messages: currentMessages, iteration: iterations });
33
- }
34
- // Stream the response
35
- let fullContent = '';
36
- for await (const chunk of this.llm.chatStream(currentMessages, { maxIterations: 1 })) {
37
- fullContent += chunk;
38
- yield chunk;
39
- }
40
- // Get the full response to check for tool calls
41
- const response = {
42
- content: fullContent,
43
- role: 'assistant',
44
- };
45
- // Check if the response contains tool calls
46
- // For now, we rely on the LLM service to handle tool calls internally
47
- // If the LLM service returned tool_calls, we need to process them
48
- if (response.tool_calls && response.tool_calls.length > 0) {
49
- currentMessages.push({
50
- role: 'assistant',
51
- content: response.content,
52
- tool_calls: response.tool_calls,
53
- });
54
- for (const toolCall of response.tool_calls) {
55
- // Hook: beforeToolCall
56
- if (this.hooks) {
57
- await this.hooks.emit('beforeToolCall', {
58
- toolName: toolCall.function.name,
59
- toolParams: JSON.parse(toolCall.function.arguments || '{}'),
60
- toolCallId: toolCall.id,
61
- });
62
- }
63
- const result = await this.registry.execute(toolCall.function.name, JSON.parse(toolCall.function.arguments || '{}'));
64
- // Hook: afterToolCall
65
- if (this.hooks) {
66
- await this.hooks.emit('afterToolCall', {
67
- toolName: toolCall.function.name,
68
- toolParams: JSON.parse(toolCall.function.arguments || '{}'),
69
- toolResult: result,
70
- toolCallId: toolCall.id,
71
- });
72
- }
73
- currentMessages.push({
74
- role: 'tool',
75
- content: result.success ? (result.output || JSON.stringify(result.data)) : (result.error || 'Tool failed'),
76
- tool_call_id: toolCall.id,
77
- name: toolCall.function.name,
78
- });
79
- yield `\n${chalk.gray(`[tool: ${toolCall.function.name}]`)}`;
80
- }
81
- continue; // Next iteration
82
- }
83
- // No tool calls - done
84
- if (response.content) {
85
- currentMessages.push({ role: 'assistant', content: response.content });
86
- }
87
- // Hook: afterAgentLoop
88
- if (this.hooks) {
89
- await this.hooks.emit('afterAgentLoop', { messages: currentMessages, iteration: iterations });
90
- }
91
- return response;
92
- }
93
- return { content: '[Agent loop exceeded maximum iterations]', role: 'assistant' };
94
- }
95
- /**
96
- * Non-streaming chat (convenience method)
97
- */
98
- async chat(messages) {
99
- let fullContent = '';
100
- for await (const chunk of this.run(messages)) {
101
- fullContent += chunk;
102
- }
103
- return { content: fullContent, role: 'assistant' };
104
- }
105
- }
106
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/app/agent.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * App - Core application singleton
3
- * Assembles all services: config, LLM, session, tools, hooks, prompts
4
- * Replaces the scattered initialization in old src/index.ts
5
- */
6
- import { ConfigManager } from '../config/index.js';
7
- import { LLMService } from '../llm/index.js';
8
- import { SessionManager } from '../session/index.js';
9
- import { ToolRegistry } from '../tools/index.js';
10
- import { HookManager } from '../hooks/index.js';
11
- import { SystemPromptBuilder } from '../prompts/index.js';
12
- import { Agent } from './agent.js';
13
- export declare class App {
14
- config: ConfigManager;
15
- llm: LLMService;
16
- session: SessionManager;
17
- tools: ToolRegistry;
18
- hooks: HookManager;
19
- prompts: SystemPromptBuilder;
20
- private agent;
21
- private constructor();
22
- /**
23
- * Create and initialize the App
24
- */
25
- static create(): Promise<App>;
26
- /**
27
- * Run a single prompt (non-interactive mode)
28
- */
29
- runPrompt(prompt: string): Promise<string>;
30
- /**
31
- * Get the agent for streaming control
32
- */
33
- getAgent(): Agent;
34
- /**
35
- * Get current config
36
- */
37
- getConfig(): ConfigManager;
38
- }
39
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,qBAAa,GAAG;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO;IAkBP;;OAEG;WACU,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAyBnC;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAchD;;OAEG;IACH,QAAQ,IAAI,KAAK;IAIjB;;OAEG;IACH,SAAS,IAAI,aAAa;CAG3B"}
package/dist/app/index.js DELETED
@@ -1,80 +0,0 @@
1
- /**
2
- * App - Core application singleton
3
- * Assembles all services: config, LLM, session, tools, hooks, prompts
4
- * Replaces the scattered initialization in old src/index.ts
5
- */
6
- import { ConfigManager } from '../config/index.js';
7
- import { LLMService } from '../llm/index.js';
8
- import { SessionManager } from '../session/index.js';
9
- import { ToolRegistry } from '../tools/index.js';
10
- import { HookManager } from '../hooks/index.js';
11
- import { SystemPromptBuilder } from '../prompts/index.js';
12
- import { Agent } from './agent.js';
13
- export class App {
14
- config;
15
- llm;
16
- session;
17
- tools;
18
- hooks;
19
- prompts;
20
- agent;
21
- constructor(config, llm, session, tools, hooks, prompts, agent) {
22
- this.config = config;
23
- this.llm = llm;
24
- this.session = session;
25
- this.tools = tools;
26
- this.hooks = hooks;
27
- this.prompts = prompts;
28
- this.agent = agent;
29
- }
30
- /**
31
- * Create and initialize the App
32
- */
33
- static async create() {
34
- // Load config
35
- const config = await ConfigManager.load();
36
- const aiConfig = config.getAIConfig();
37
- // Create services
38
- const llm = LLMService.fromConfig(aiConfig);
39
- const session = new SessionManager();
40
- const tools = new ToolRegistry();
41
- const hooks = new HookManager();
42
- const prompts = new SystemPromptBuilder({
43
- cwd: process.cwd(),
44
- tools: tools.list(),
45
- permissionMode: 'ask',
46
- });
47
- // Create agent
48
- const agent = new Agent(llm, tools, { hooks, maxIterations: 10 });
49
- // Set up system prompt
50
- session.addMessage('system', prompts.build());
51
- return new App(config, llm, session, tools, hooks, prompts, agent);
52
- }
53
- /**
54
- * Run a single prompt (non-interactive mode)
55
- */
56
- async runPrompt(prompt) {
57
- this.session.addMessage('user', prompt);
58
- let fullResponse = '';
59
- for await (const chunk of this.agent.run(this.session.getMessages())) {
60
- process.stdout.write(chunk);
61
- fullResponse += chunk;
62
- }
63
- console.log(); // newline
64
- this.session.addMessage('assistant', fullResponse);
65
- return fullResponse;
66
- }
67
- /**
68
- * Get the agent for streaming control
69
- */
70
- getAgent() {
71
- return this.agent;
72
- }
73
- /**
74
- * Get current config
75
- */
76
- getConfig() {
77
- return this.config;
78
- }
79
- }
80
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Thatgfsj Code - CLI Entry Point
4
- * Simplified from old src/index.ts (655 lines → ~60 lines)
5
- *
6
- * Two modes:
7
- * gfcode → Interactive REPL
8
- * gfcode "prompt" → Single prompt mode
9
- * gfcode init → Setup wizard
10
- */
11
- export {};
12
- //# sourceMappingURL=index.d.ts.map
package/dist/cmd/index.js DELETED
@@ -1,85 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Thatgfsj Code - CLI Entry Point
4
- * Simplified from old src/index.ts (655 lines → ~60 lines)
5
- *
6
- * Two modes:
7
- * gfcode → Interactive REPL
8
- * gfcode "prompt" → Single prompt mode
9
- * gfcode init → Setup wizard
10
- */
11
- // Force UTF-8 on Windows
12
- if (process.platform === 'win32') {
13
- try {
14
- require('child_process').execSync('chcp 65001', { stdio: 'ignore', windowsHide: true });
15
- }
16
- catch { }
17
- }
18
- import { program } from 'commander';
19
- import chalk from 'chalk';
20
- import { App } from '../app/index.js';
21
- import { REPL } from '../tui/repl.js';
22
- import { WelcomeScreen } from '../tui/welcome.js';
23
- import { ProjectContext } from '../utils/project.js';
24
- // ==================== Error Handling ====================
25
- process.on('uncaughtException', (error) => {
26
- console.error(chalk.red('\n❌ Error:'), error.message);
27
- process.exit(1);
28
- });
29
- process.on('unhandledRejection', (reason) => {
30
- console.error(chalk.red('\n❌ Error:'), reason);
31
- process.exit(1);
32
- });
33
- // ==================== CLI Commands ====================
34
- program
35
- .name('gfcode')
36
- .description('🤖 Thatgfsj Code - AI Coding Assistant')
37
- .version('0.3.0')
38
- .argument('[prompt]', 'Task to execute (omit to start interactive mode)')
39
- .option('-m, --model <model>', 'Specify model')
40
- .option('-i, --interactive', 'Force interactive mode')
41
- .option('--hooks', 'Enable audit logging hooks')
42
- .action(async (prompt, options) => {
43
- try {
44
- // Initialize app
45
- const app = await App.create();
46
- // Show welcome if no API key
47
- WelcomeScreen.show(app.config.hasApiKey());
48
- // Override model if specified
49
- if (options.model) {
50
- await app.config.save({ model: options.model });
51
- }
52
- // Enable hooks if requested
53
- if (options.hooks) {
54
- const { auditLogHook } = await import('../hooks/index.js');
55
- app.hooks.register('afterToolCall', auditLogHook);
56
- }
57
- if (!prompt || options.interactive) {
58
- // Interactive REPL mode
59
- const repl = new REPL(app);
60
- await repl.start();
61
- }
62
- else {
63
- // Single prompt mode
64
- console.log(chalk.cyan('\n🤖 Thatgfsj Code\n'));
65
- console.log(chalk.gray(ProjectContext.getSummary()));
66
- console.log(chalk.gray('─'.repeat(40)));
67
- console.log(chalk.cyan('\n> ') + prompt + '\n');
68
- await app.runPrompt(prompt);
69
- }
70
- }
71
- catch (error) {
72
- console.error(chalk.red(`\n❌ ${error.message}`));
73
- process.exit(1);
74
- }
75
- });
76
- // Init command - setup wizard
77
- program
78
- .command('init')
79
- .description('配置 API Key 和模型')
80
- .action(async () => {
81
- await WelcomeScreen.interactiveSetup();
82
- });
83
- // Parse and run
84
- program.parse(process.argv);
85
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cmd/index.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Config Manager - Handles configuration loading and saving
3
- * Migrated from old src/core/config.ts
4
- */
5
- import type { Config, AIConfig } from './types.js';
6
- export declare class ConfigManager {
7
- private configPath;
8
- private config;
9
- private constructor();
10
- /**
11
- * Load configuration from file + environment variables
12
- */
13
- static load(): Promise<ConfigManager>;
14
- /**
15
- * Resolve provider settings: API key from env, base URL, model
16
- */
17
- private static resolveProvider;
18
- /**
19
- * Get the current config
20
- */
21
- get(): Config;
22
- /**
23
- * Get AIConfig for LLM providers
24
- */
25
- getAIConfig(): AIConfig;
26
- /**
27
- * Get provider format (openai | anthropic | gemini)
28
- */
29
- getProviderFormat(): 'openai' | 'anthropic' | 'gemini';
30
- /**
31
- * Update config and save to file
32
- */
33
- save(updates: Partial<Config>): Promise<void>;
34
- /**
35
- * Check if an API key is configured
36
- */
37
- hasApiKey(): boolean;
38
- }
39
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAWjE,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAKP;;OAEG;WACU,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAsB3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAyB9B;;OAEG;IACH,GAAG,IAAI,MAAM;IAIb;;OAEG;IACH,WAAW,IAAI,QAAQ;IAWvB;;OAEG;IACH,iBAAiB,IAAI,QAAQ,GAAG,WAAW,GAAG,QAAQ;IAItD;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnD;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
@@ -1,110 +0,0 @@
1
- /**
2
- * Config Manager - Handles configuration loading and saving
3
- * Migrated from old src/core/config.ts
4
- */
5
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
6
- import { join, dirname } from 'path';
7
- import { homedir } from 'os';
8
- import { PROVIDERS, getApiKeyFromEnv } from './providers.js';
9
- const DEFAULT_CONFIG = {
10
- model: 'Qwen/Qwen2.5-7B-Instruct',
11
- apiKey: '',
12
- temperature: 0.7,
13
- maxTokens: 4096,
14
- provider: 'siliconflow',
15
- };
16
- export class ConfigManager {
17
- configPath;
18
- config;
19
- constructor(configPath, config) {
20
- this.configPath = configPath;
21
- this.config = config;
22
- }
23
- /**
24
- * Load configuration from file + environment variables
25
- */
26
- static async load() {
27
- const configDir = join(homedir(), '.thatgfsj');
28
- const configPath = join(configDir, 'config.json');
29
- let config = { ...DEFAULT_CONFIG };
30
- // Load from file
31
- try {
32
- if (existsSync(configPath)) {
33
- const data = readFileSync(configPath, 'utf-8');
34
- config = { ...config, ...JSON.parse(data) };
35
- }
36
- }
37
- catch {
38
- // Use defaults if file is corrupted
39
- }
40
- // Resolve provider
41
- config = ConfigManager.resolveProvider(config);
42
- return new ConfigManager(configPath, config);
43
- }
44
- /**
45
- * Resolve provider settings: API key from env, base URL, model
46
- */
47
- static resolveProvider(config) {
48
- const provider = config.provider || 'siliconflow';
49
- const providerConfig = PROVIDERS[provider];
50
- if (!providerConfig) {
51
- return { ...config, provider: 'siliconflow', baseUrl: PROVIDERS.siliconflow.baseUrl };
52
- }
53
- // Model: env MODEL > config > provider default
54
- const model = process.env.MODEL || config.model || providerConfig.defaultModel;
55
- // API key: env > config
56
- let apiKey = config.apiKey;
57
- if (provider === 'ollama') {
58
- apiKey = '';
59
- }
60
- else if (!apiKey) {
61
- apiKey = getApiKeyFromEnv(provider);
62
- }
63
- // Base URL: config > provider default
64
- const baseUrl = config.baseUrl || providerConfig.baseUrl;
65
- return { ...config, provider, baseUrl, model, apiKey: apiKey || '' };
66
- }
67
- /**
68
- * Get the current config
69
- */
70
- get() {
71
- return { ...this.config };
72
- }
73
- /**
74
- * Get AIConfig for LLM providers
75
- */
76
- getAIConfig() {
77
- return {
78
- model: this.config.model,
79
- apiKey: this.config.apiKey,
80
- temperature: this.config.temperature,
81
- maxTokens: this.config.maxTokens,
82
- baseUrl: this.config.baseUrl,
83
- provider: this.config.provider,
84
- };
85
- }
86
- /**
87
- * Get provider format (openai | anthropic | gemini)
88
- */
89
- getProviderFormat() {
90
- return PROVIDERS[this.config.provider]?.format || 'openai';
91
- }
92
- /**
93
- * Update config and save to file
94
- */
95
- async save(updates) {
96
- this.config = { ...this.config, ...updates };
97
- const dir = dirname(this.configPath);
98
- if (!existsSync(dir)) {
99
- mkdirSync(dir, { recursive: true });
100
- }
101
- writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));
102
- }
103
- /**
104
- * Check if an API key is configured
105
- */
106
- hasApiKey() {
107
- return !!this.config.apiKey;
108
- }
109
- }
110
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Provider definitions and model catalogs
3
- * Consolidated from old types.ts PROVIDERS + welcome.ts model lists
4
- */
5
- import type { ProviderConfig, ProviderName, ModelInfo } from './types.js';
6
- export declare const PROVIDERS: Record<ProviderName, ProviderConfig>;
7
- export declare const MODEL_CATALOGS: Record<ProviderName, ModelInfo[]>;
8
- /**
9
- * Get models for a specific provider
10
- */
11
- export declare function getModelsForProvider(provider: ProviderName): ModelInfo[];
12
- /**
13
- * Get API key for a provider from environment variables
14
- */
15
- export declare function getApiKeyFromEnv(provider: ProviderName): string;
16
- /**
17
- * List all provider names
18
- */
19
- export declare function listProviders(): Array<{
20
- key: ProviderName;
21
- name: string;
22
- }>;
23
- //# sourceMappingURL=providers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/config/providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI1E,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAgE1D,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,CAkD5D,CAAC;AAIF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,CAExE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAQ/D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAK1E"}