thatgfsj-code 0.2.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 (179) hide show
  1. package/.patches/0001-fix-repl-replace-readline-with-inquirer-input-for-ke.patch +279 -0
  2. package/.patches/0002-fix-repl-stream-AI-output-directly-to-stdout-so-term.patch +564 -0
  3. package/.patches/0003-fix-session-break-the-hallucination-loop-in-assistan.patch +194 -0
  4. package/.patches/0004-chore-release-bump-version-to-0.2.1.patch +24 -0
  5. package/LICENSE +21 -0
  6. package/README.md +100 -0
  7. package/ROADMAP.md +107 -0
  8. package/dist/agent/core.d.ts +56 -0
  9. package/dist/agent/core.d.ts.map +1 -0
  10. package/dist/agent/core.js +142 -0
  11. package/dist/agent/core.js.map +1 -0
  12. package/dist/agent/index.d.ts +8 -0
  13. package/dist/agent/index.d.ts.map +1 -0
  14. package/dist/agent/index.js +8 -0
  15. package/dist/agent/index.js.map +1 -0
  16. package/dist/agent/intent.d.ts +36 -0
  17. package/dist/agent/intent.d.ts.map +1 -0
  18. package/dist/agent/intent.js +146 -0
  19. package/dist/agent/intent.js.map +1 -0
  20. package/dist/agent/streaming.d.ts +50 -0
  21. package/dist/agent/streaming.d.ts.map +1 -0
  22. package/dist/agent/streaming.js +110 -0
  23. package/dist/agent/streaming.js.map +1 -0
  24. package/dist/core/ai-engine.d.ts +59 -0
  25. package/dist/core/ai-engine.d.ts.map +1 -0
  26. package/dist/core/ai-engine.js +378 -0
  27. package/dist/core/ai-engine.js.map +1 -0
  28. package/dist/core/cli.d.ts +21 -0
  29. package/dist/core/cli.d.ts.map +1 -0
  30. package/dist/core/cli.js +143 -0
  31. package/dist/core/cli.js.map +1 -0
  32. package/dist/core/config.d.ts +38 -0
  33. package/dist/core/config.d.ts.map +1 -0
  34. package/dist/core/config.js +129 -0
  35. package/dist/core/config.js.map +1 -0
  36. package/dist/core/context-compactor.d.ts +54 -0
  37. package/dist/core/context-compactor.d.ts.map +1 -0
  38. package/dist/core/context-compactor.js +197 -0
  39. package/dist/core/context-compactor.js.map +1 -0
  40. package/dist/core/hooks.d.ts +75 -0
  41. package/dist/core/hooks.d.ts.map +1 -0
  42. package/dist/core/hooks.js +146 -0
  43. package/dist/core/hooks.js.map +1 -0
  44. package/dist/core/permissions.d.ts +52 -0
  45. package/dist/core/permissions.d.ts.map +1 -0
  46. package/dist/core/permissions.js +237 -0
  47. package/dist/core/permissions.js.map +1 -0
  48. package/dist/core/session.d.ts +54 -0
  49. package/dist/core/session.d.ts.map +1 -0
  50. package/dist/core/session.js +147 -0
  51. package/dist/core/session.js.map +1 -0
  52. package/dist/core/skills.d.ts +60 -0
  53. package/dist/core/skills.d.ts.map +1 -0
  54. package/dist/core/skills.js +175 -0
  55. package/dist/core/skills.js.map +1 -0
  56. package/dist/core/state.d.ts +60 -0
  57. package/dist/core/state.d.ts.map +1 -0
  58. package/dist/core/state.js +106 -0
  59. package/dist/core/state.js.map +1 -0
  60. package/dist/core/subagent.d.ts +68 -0
  61. package/dist/core/subagent.d.ts.map +1 -0
  62. package/dist/core/subagent.js +142 -0
  63. package/dist/core/subagent.js.map +1 -0
  64. package/dist/core/system-prompt.d.ts +40 -0
  65. package/dist/core/system-prompt.d.ts.map +1 -0
  66. package/dist/core/system-prompt.js +138 -0
  67. package/dist/core/system-prompt.js.map +1 -0
  68. package/dist/core/tool-registry.d.ts +53 -0
  69. package/dist/core/tool-registry.d.ts.map +1 -0
  70. package/dist/core/tool-registry.js +138 -0
  71. package/dist/core/tool-registry.js.map +1 -0
  72. package/dist/core/types.d.ts +206 -0
  73. package/dist/core/types.d.ts.map +1 -0
  74. package/dist/core/types.js +127 -0
  75. package/dist/core/types.js.map +1 -0
  76. package/dist/index.d.ts +7 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +481 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mcp/client.d.ts +83 -0
  81. package/dist/mcp/client.d.ts.map +1 -0
  82. package/dist/mcp/client.js +267 -0
  83. package/dist/mcp/client.js.map +1 -0
  84. package/dist/repl/index.d.ts +8 -0
  85. package/dist/repl/index.d.ts.map +1 -0
  86. package/dist/repl/index.js +8 -0
  87. package/dist/repl/index.js.map +1 -0
  88. package/dist/repl/input.d.ts +61 -0
  89. package/dist/repl/input.d.ts.map +1 -0
  90. package/dist/repl/input.js +127 -0
  91. package/dist/repl/input.js.map +1 -0
  92. package/dist/repl/loop.d.ts +53 -0
  93. package/dist/repl/loop.d.ts.map +1 -0
  94. package/dist/repl/loop.js +241 -0
  95. package/dist/repl/loop.js.map +1 -0
  96. package/dist/repl/output.d.ts +105 -0
  97. package/dist/repl/output.d.ts.map +1 -0
  98. package/dist/repl/output.js +197 -0
  99. package/dist/repl/output.js.map +1 -0
  100. package/dist/repl/welcome.d.ts +68 -0
  101. package/dist/repl/welcome.d.ts.map +1 -0
  102. package/dist/repl/welcome.js +249 -0
  103. package/dist/repl/welcome.js.map +1 -0
  104. package/dist/tools/file.d.ts +46 -0
  105. package/dist/tools/file.d.ts.map +1 -0
  106. package/dist/tools/file.js +100 -0
  107. package/dist/tools/file.js.map +1 -0
  108. package/dist/tools/git.d.ts +52 -0
  109. package/dist/tools/git.d.ts.map +1 -0
  110. package/dist/tools/git.js +112 -0
  111. package/dist/tools/git.js.map +1 -0
  112. package/dist/tools/index.d.ts +22 -0
  113. package/dist/tools/index.d.ts.map +1 -0
  114. package/dist/tools/index.js +43 -0
  115. package/dist/tools/index.js.map +1 -0
  116. package/dist/tools/search.d.ts +36 -0
  117. package/dist/tools/search.d.ts.map +1 -0
  118. package/dist/tools/search.js +223 -0
  119. package/dist/tools/search.js.map +1 -0
  120. package/dist/tools/shell.d.ts +57 -0
  121. package/dist/tools/shell.d.ts.map +1 -0
  122. package/dist/tools/shell.js +153 -0
  123. package/dist/tools/shell.js.map +1 -0
  124. package/dist/utils/diff-preview.d.ts +42 -0
  125. package/dist/utils/diff-preview.d.ts.map +1 -0
  126. package/dist/utils/diff-preview.js +174 -0
  127. package/dist/utils/diff-preview.js.map +1 -0
  128. package/dist/utils/index.d.ts +8 -0
  129. package/dist/utils/index.d.ts.map +1 -0
  130. package/dist/utils/index.js +8 -0
  131. package/dist/utils/index.js.map +1 -0
  132. package/dist/utils/memory.d.ts +81 -0
  133. package/dist/utils/memory.d.ts.map +1 -0
  134. package/dist/utils/memory.js +186 -0
  135. package/dist/utils/memory.js.map +1 -0
  136. package/dist/utils/project-context.d.ts +62 -0
  137. package/dist/utils/project-context.d.ts.map +1 -0
  138. package/dist/utils/project-context.js +197 -0
  139. package/dist/utils/project-context.js.map +1 -0
  140. package/docs/API_KEY_GUIDE.md +236 -0
  141. package/docs/FAQ.md +182 -0
  142. package/install.bat +63 -0
  143. package/install.ps1 +238 -0
  144. package/install.sh +113 -0
  145. package/package.json +36 -0
  146. package/src/agent/core.ts +179 -0
  147. package/src/agent/index.ts +8 -0
  148. package/src/agent/intent.ts +181 -0
  149. package/src/agent/streaming.ts +132 -0
  150. package/src/core/ai-engine.ts +437 -0
  151. package/src/core/cli.ts +171 -0
  152. package/src/core/config.ts +147 -0
  153. package/src/core/context-compactor.ts +245 -0
  154. package/src/core/hooks.ts +196 -0
  155. package/src/core/permissions.ts +308 -0
  156. package/src/core/session.ts +165 -0
  157. package/src/core/skills.ts +208 -0
  158. package/src/core/state.ts +120 -0
  159. package/src/core/subagent.ts +195 -0
  160. package/src/core/system-prompt.ts +163 -0
  161. package/src/core/tool-registry.ts +157 -0
  162. package/src/core/types.ts +280 -0
  163. package/src/index.ts +544 -0
  164. package/src/mcp/client.ts +330 -0
  165. package/src/repl/index.ts +8 -0
  166. package/src/repl/input.ts +139 -0
  167. package/src/repl/loop.ts +280 -0
  168. package/src/repl/output.ts +222 -0
  169. package/src/repl/welcome.ts +296 -0
  170. package/src/tools/file.ts +117 -0
  171. package/src/tools/git.ts +132 -0
  172. package/src/tools/index.ts +48 -0
  173. package/src/tools/search.ts +263 -0
  174. package/src/tools/shell.ts +181 -0
  175. package/src/utils/diff-preview.ts +202 -0
  176. package/src/utils/index.ts +8 -0
  177. package/src/utils/memory.ts +223 -0
  178. package/src/utils/project-context.ts +207 -0
  179. package/tsconfig.json +19 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Project Context - Auto-detect and read project files
3
+ */
4
+ import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
5
+ import { join, relative } from 'path';
6
+ export class ProjectContext {
7
+ root;
8
+ constructor(root = process.cwd()) {
9
+ this.root = root;
10
+ }
11
+ /**
12
+ * Detect project type and gather context
13
+ */
14
+ async detect() {
15
+ const info = {
16
+ root: this.root,
17
+ name: this.getProjectName(),
18
+ language: this.detectLanguage(),
19
+ buildTool: this.detectBuildTool(),
20
+ gitIgnore: this.readGitIgnore(),
21
+ files: this.listFiles(),
22
+ hasGit: existsSync(join(this.root, '.git'))
23
+ };
24
+ const pkg = this.readPackageJson();
25
+ if (pkg) {
26
+ info.packageJson = pkg;
27
+ }
28
+ return info;
29
+ }
30
+ /**
31
+ * Get project name
32
+ */
33
+ getProjectName() {
34
+ const pkg = this.readPackageJson();
35
+ if (pkg?.name) {
36
+ return pkg.name;
37
+ }
38
+ return this.root.split(/[\\/]/).pop() || 'unknown';
39
+ }
40
+ /**
41
+ * Detect primary language
42
+ */
43
+ detectLanguage() {
44
+ const langCounts = {};
45
+ const scan = (dir, depth = 0) => {
46
+ if (depth > 3)
47
+ return;
48
+ try {
49
+ const items = readdirSync(dir);
50
+ for (const item of items) {
51
+ if (['node_modules', '.git', 'dist'].includes(item))
52
+ continue;
53
+ const fullPath = join(dir, item);
54
+ try {
55
+ const stat = statSync(fullPath);
56
+ if (stat.isDirectory()) {
57
+ scan(fullPath, depth + 1);
58
+ }
59
+ else if (stat.isFile()) {
60
+ const ext = item.split('.').pop()?.toLowerCase();
61
+ if (ext)
62
+ langCounts[ext] = (langCounts[ext] || 0) + 1;
63
+ }
64
+ }
65
+ catch { /* skip */ }
66
+ }
67
+ }
68
+ catch { /* skip */ }
69
+ };
70
+ scan(this.root);
71
+ const extToLang = {
72
+ 'ts': 'TypeScript', 'tsx': 'TypeScript',
73
+ 'js': 'JavaScript', 'jsx': 'JavaScript', 'mjs': 'JavaScript',
74
+ 'py': 'Python', 'java': 'Java', 'go': 'Go', 'rs': 'Rust',
75
+ 'c': 'C/C++', 'cpp': 'C/C++', 'h': 'C/C++', 'hpp': 'C/C++',
76
+ 'cs': 'C#', 'rb': 'Ruby', 'php': 'PHP',
77
+ };
78
+ for (const [ext, count] of Object.entries(langCounts)) {
79
+ const lang = extToLang[ext];
80
+ if (lang && count > 0)
81
+ return lang;
82
+ }
83
+ return 'Unknown';
84
+ }
85
+ /**
86
+ * Detect build tool
87
+ */
88
+ detectBuildTool() {
89
+ if (existsSync(join(this.root, 'package.json')))
90
+ return 'npm/yarn/pnpm';
91
+ if (existsSync(join(this.root, 'Cargo.toml')))
92
+ return 'Cargo';
93
+ if (existsSync(join(this.root, 'go.mod')))
94
+ return 'Go';
95
+ if (existsSync(join(this.root, 'pom.xml')))
96
+ return 'Maven';
97
+ if (existsSync(join(this.root, 'build.gradle')))
98
+ return 'Gradle';
99
+ if (existsSync(join(this.root, 'Makefile')))
100
+ return 'Make';
101
+ return undefined;
102
+ }
103
+ /**
104
+ * Read .gitignore
105
+ */
106
+ readGitIgnore() {
107
+ const path = join(this.root, '.gitignore');
108
+ if (!existsSync(path))
109
+ return [];
110
+ try {
111
+ return readFileSync(path, 'utf-8').split('\n')
112
+ .map(l => l.trim()).filter(l => l && !l.startsWith('#'));
113
+ }
114
+ catch {
115
+ return [];
116
+ }
117
+ }
118
+ /**
119
+ * Read package.json
120
+ */
121
+ readPackageJson() {
122
+ const path = join(this.root, 'package.json');
123
+ if (!existsSync(path))
124
+ return null;
125
+ try {
126
+ return JSON.parse(readFileSync(path, 'utf-8'));
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ }
132
+ /**
133
+ * List project files
134
+ */
135
+ listFiles(maxFiles = 100) {
136
+ const files = [];
137
+ const gitIgnore = this.readGitIgnore();
138
+ const scan = (dir, depth = 0) => {
139
+ if (depth > 4 || files.length >= maxFiles)
140
+ return;
141
+ try {
142
+ const items = readdirSync(dir);
143
+ for (const item of items) {
144
+ if (files.length >= maxFiles)
145
+ break;
146
+ if (this.isIgnored(item, gitIgnore))
147
+ continue;
148
+ const fullPath = join(dir, item);
149
+ const relPath = relative(this.root, fullPath);
150
+ try {
151
+ const stat = statSync(fullPath);
152
+ if (stat.isDirectory()) {
153
+ files.push(relPath + '/');
154
+ scan(fullPath, depth + 1);
155
+ }
156
+ else if (stat.isFile()) {
157
+ files.push(relPath);
158
+ }
159
+ }
160
+ catch { /* skip */ }
161
+ }
162
+ }
163
+ catch { /* skip */ }
164
+ };
165
+ scan(this.root);
166
+ return files;
167
+ }
168
+ /**
169
+ * Check if ignored
170
+ */
171
+ isIgnored(name, gitIgnore) {
172
+ const common = ['node_modules', '.git', 'dist', 'build', '__pycache__', '.env'];
173
+ if (common.includes(name))
174
+ return true;
175
+ return gitIgnore.includes(name);
176
+ }
177
+ /**
178
+ * Get context summary
179
+ */
180
+ async getContextSummary() {
181
+ const info = await this.detect();
182
+ const lines = [`📁 Project: ${info.name}`, `💻 Language: ${info.language}`];
183
+ if (info.buildTool)
184
+ lines.push(`🔧 Build: ${info.buildTool}`);
185
+ if (info.hasGit)
186
+ lines.push(`📊 Git: Yes`);
187
+ if (info.packageJson) {
188
+ lines.push(`📦 Package: ${info.packageJson.name}@${info.packageJson.version}`);
189
+ if (info.packageJson.scripts) {
190
+ lines.push(` Scripts: ${Object.keys(info.packageJson.scripts).slice(0, 5).join(', ')}`);
191
+ }
192
+ }
193
+ lines.push(`📁 Files: ${info.files.length} files scanned`);
194
+ return lines.join('\n');
195
+ }
196
+ }
197
+ //# sourceMappingURL=project-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/utils/project-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ # API Key 获取教程
2
+
3
+ Thatgfsj Code 支持多种 AI 提供商,以下是各提供商 API Key 的获取教程。
4
+
5
+ ## 目录
6
+
7
+ 1. [SiliconFlow (推荐)](#1-siliconflow-推荐)
8
+ 2. [MiniMax](#2-minimax)
9
+ 3. [OpenAI](#3-openai)
10
+ 4. [Anthropic (Claude)](#4-anthropic-claude)
11
+ 5. [Google Gemini](#5-google-gemini)
12
+ 6. [Kimi (Moonshot AI)](#6-kimi-moonshot-ai)
13
+ 7. [DeepSeek](#7-deepseek)
14
+ 8. [文心一言 (ERNIE)](#8-文心一言-ernie)
15
+ 9. [Ollama (本地模型)](#9-ollama-本地模型)
16
+
17
+ ---
18
+
19
+ ## 1. SiliconFlow (推荐)
20
+
21
+ **官网**: https://siliconflow.cn
22
+
23
+ ### 步骤
24
+
25
+ 1. 访问 [SiliconFlow](https://siliconflow.cn) 并注册账号
26
+ 2. 完成实名认证(可选,部分模型需要)
27
+ 3. 进入「API 密钥」页面
28
+ 4. 点击「创建新密钥」
29
+ 5. 复制生成的 API Key
30
+
31
+ ### 特点
32
+
33
+ - ✅ 国产模型,性价比高
34
+ - ✅ 支持 Qwen、Kimi、DeepSeek、GLM 等
35
+ - ✅ 免费额度:¥8.8(新用户)
36
+
37
+ ---
38
+
39
+ ## 2. MiniMax
40
+
41
+ **官网**: https://platform.minimax.io
42
+
43
+ ### 步骤
44
+
45
+ 1. 访问 [MiniMax](https://platform.minimax.io) 并注册账号
46
+ 2. 进入「API 密钥」页面
47
+ 3. 点击「创建 API Key」
48
+ 4. 复制生成的密钥
49
+
50
+ ### 特点
51
+
52
+ - ✅ Moonshot Kimi 系列模型
53
+ - ✅ Agent 能力强
54
+
55
+ ---
56
+
57
+ ## 3. OpenAI
58
+
59
+ **官网**: https://platform.openai.com
60
+
61
+ ### 步骤
62
+
63
+ 1. 访问 [OpenAI](https://platform.openai.com) 并注册账号
64
+ 2. 进入「API Keys」页面
65
+ 3. 点击「Create new secret key」
66
+ 4. 复制生成的密钥
67
+
68
+ ### 特点
69
+
70
+ - ⚠️ 需要海外支付方式
71
+ - ✅ GPT-4o 系列最强模型
72
+
73
+ ---
74
+
75
+ ## 4. Anthropic (Claude)
76
+
77
+ **官网**: https://www.anthropic.com
78
+
79
+ ### 步骤
80
+
81
+ 1. 访问 [Anthropic](https://www.anthropic.com) 并注册账号
82
+ 2. 进入「API Keys」页面
83
+ 3. 点击「Create Key」
84
+ 4. 复制生成的密钥
85
+
86
+ ### 特点
87
+
88
+ - ⚠️ 需要海外支付方式
89
+ - ✅ Claude 系列模型能力强
90
+
91
+ ---
92
+
93
+ ## 5. Google Gemini
94
+
95
+ **官网**: https://aistudio.google.com/app/apikey
96
+
97
+ ### 步骤
98
+
99
+ 1. 访问 [Google AI Studio](https://aistudio.google.com/app/apikey)
100
+ 2. 点击「Create API Key」
101
+ 3. 选择已有项目或创建新项目
102
+ 4. 复制生成的密钥
103
+
104
+ ### 特点
105
+
106
+ - ✅ 免费额度充足
107
+ - ✅ Gemini 模型能力强
108
+
109
+ ---
110
+
111
+ ## 6. Kimi (Moonshot AI)
112
+
113
+ **官网**: https://platform.moonshot.cn
114
+
115
+ ### 步骤
116
+
117
+ 1. 访问 [Moonshot AI](https://platform.moonshot.cn) 并注册账号
118
+ 2. 进入「API 密钥管理」页面
119
+ 3. 点击「创建」
120
+ 4. 复制生成的密钥
121
+
122
+ ### 特点
123
+
124
+ - ✅ 国产模型
125
+ - ✅ 长上下文能力强
126
+
127
+ ---
128
+
129
+ ## 7. DeepSeek
130
+
131
+ **官网**: https://platform.deepseek.com
132
+
133
+ ### 步骤
134
+
135
+ 1. 访问 [DeepSeek](https://platform.deepseek.com) 并注册账号
136
+ 2. 进入「API Keys」页面
137
+ 3. 点击「创建 API Key」
138
+ 4. 复制生成的密钥
139
+
140
+ ### 特点
141
+
142
+ - ✅ 性价比高
143
+ - ✅ 编程能力强
144
+
145
+ ---
146
+
147
+ ## 8. 文心一言 (ERNIE)
148
+
149
+ **官网**: https://login.bce.baidu.com
150
+
151
+ ### 步骤
152
+
153
+ 1. 访问 [百度智能云](https://login.bce.baidu.com) 并注册账号
154
+ 2. 进入「文心一言 API」产品页
155
+ 3. 创建应用并获取 API Key 和 Secret Key
156
+ 4. 使用 Secret Key 获取 Access Token
157
+
158
+ ### 特点
159
+
160
+ - ✅ 百度 ERNIE 系列
161
+ - ⚠️ 配置稍复杂
162
+
163
+ ---
164
+
165
+ ## 9. Ollama (本地模型)
166
+
167
+ **官网**: https://ollama.com
168
+
169
+ ### 步骤
170
+
171
+ 1. 下载并安装 [Ollama](https://ollama.com)
172
+ 2. 终端运行 `ollama run llama2`
173
+ 3. 设置环境变量 `OLLAMA_BASE_URL=http://localhost:11434`
174
+
175
+ ### 特点
176
+
177
+ - ✅ 完全免费
178
+ - ✅ 本地运行,保护隐私
179
+ - ⚠️ 需要本地有足够配置
180
+
181
+ ---
182
+
183
+ ## 环境变量设置
184
+
185
+ 获取 API Key 后,设置方式:
186
+
187
+ ```bash
188
+ # SiliconFlow
189
+ export SILICONFLOW_API_KEY=你的密钥
190
+
191
+ # MiniMax
192
+ export MINIMAX_API_KEY=你的密钥
193
+
194
+ # OpenAI
195
+ export OPENAI_API_KEY=你的密钥
196
+
197
+ # Anthropic
198
+ export ANTHROPIC_API_KEY=你的密钥
199
+
200
+ # Google Gemini
201
+ export GEMINI_API_KEY=你的密钥
202
+
203
+ # Kimi
204
+ export KIMI_API_KEY=你的密钥
205
+
206
+ # DeepSeek
207
+ export DEEPSEEK_API_KEY=你的密钥
208
+
209
+ # Ollama
210
+ export OLLAMA_BASE_URL=http://localhost:11434
211
+ ```
212
+
213
+ 或者运行 `gfcode init` 交互式配置。
214
+
215
+ ---
216
+
217
+ ## 常见问题
218
+
219
+ ### Q: 哪个 Provider 最推荐?
220
+
221
+ **A**: SiliconFlow 性价比最高,适合新手入门。
222
+
223
+ ### Q: 为什么我的 API Key 不工作?
224
+
225
+ **A**:
226
+ 1. 检查环境变量是否正确设置
227
+ 2. 确认 API Key 没有过期
228
+ 3. 查看账户是否有足够余额
229
+
230
+ ### Q: 可以同时使用多个 Provider 吗?
231
+
232
+ **A**: 可以,通过配置文件或环境变量切换。
233
+
234
+ ---
235
+
236
+ 如有问题,请提交 Issue: https://github.com/Thatgfsj/thatgfsj-code/issues
package/docs/FAQ.md ADDED
@@ -0,0 +1,182 @@
1
+ # 常见问题 FAQ
2
+
3
+ ## 目录
4
+
5
+ 1. [安装问题](#1-安装问题)
6
+ 2. [配置问题](#2-配置问题)
7
+ 3. [使用问题](#3-使用问题)
8
+ 4. [ Provider 问题](#4-provider-问题)
9
+ 5. [其他问题](#5-其他问题)
10
+
11
+ ---
12
+
13
+ ## 1. 安装问题
14
+
15
+ ### Q: npm install 失败怎么办?
16
+
17
+ **A**:
18
+ - 确保 Node.js 版本 >= 18
19
+ - 尝试清除缓存: `npm cache clean --force`
20
+ - 如果是 Windows 问题,尝试使用 PowerShell 或管理员权限
21
+
22
+ ### Q: npm link 后命令找不到?
23
+
24
+ **A**:
25
+ - 检查 PATH 环境变量是否包含 npm 全局路径
26
+ - Windows 上通常是: `C:\Users\你的用户名\AppData\Roaming\npm`
27
+ - 或者直接使用 `npx gfcode` 运行
28
+
29
+ ---
30
+
31
+ ## 2. 配置问题
32
+
33
+ ### Q: 如何配置 API Key?
34
+
35
+ **A**: 两种方式:
36
+ 1. 交互式配置(推荐):运行 `gfcode init`
37
+ 2. 环境变量:设置对应的环境变量
38
+
39
+ ### Q: 配置文件在哪里?
40
+
41
+ **A**: `~/.thatgfsj/config.json`(用户主目录下的 .thatgfsj 文件夹)
42
+
43
+ ### Q: 配置文件格式?
44
+
45
+ ```json
46
+ {
47
+ "model": "Qwen/Qwen2.5-7B-Instruct",
48
+ "apiKey": "your_api_key",
49
+ "provider": "siliconflow",
50
+ "temperature": 0.7,
51
+ "maxTokens": 4096
52
+ }
53
+ ```
54
+
55
+ ---
56
+
57
+ ## 3. 使用问题
58
+
59
+ ### Q: 交互模式怎么用?
60
+
61
+ **A**:
62
+ ```bash
63
+ # 启动交互模式
64
+ gfcode
65
+
66
+ # 在交互模式中
67
+ > 帮我写一个函数
68
+ > 解释这段代码
69
+ > /help 查看命令
70
+ > /exit 退出
71
+ ```
72
+
73
+ ### Q: 如何解释代码?
74
+
75
+ **A**:
76
+ ```bash
77
+ # 直接解释代码
78
+ gfcode explain "const add = (a, b) => a + b;"
79
+
80
+ # 从文件解释
81
+ gfcode explain -f src/utils.ts
82
+ ```
83
+
84
+ ### Q: 如何调试代码?
85
+
86
+ **A**:
87
+ ```bash
88
+ # 直接调试代码
89
+ gfcode debug "你的代码"
90
+
91
+ # 带错误信息调试
92
+ gfcode debug -f app.js -e "TypeError: undefined"
93
+ ```
94
+
95
+ ### Q: 如何生成代码模板?
96
+
97
+ **A**:
98
+ ```bash
99
+ # React 组件
100
+ gfcode template react -n MyButton
101
+
102
+ # Express API
103
+ gfcode template express -n my-api
104
+
105
+ # Python 脚本
106
+ gfcode template python -n scraper
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 4. Provider 问题
112
+
113
+ ### Q: 哪个 Provider 最推荐?
114
+
115
+ **A**:
116
+ - 新手推荐 **SiliconFlow**,性价比高,支持国产模型
117
+ - 想用 GPT 推荐 **OpenAI**
118
+ - 想用 Claude 推荐 **Anthropic**
119
+ - 想免费用推荐 **Google Gemini**
120
+
121
+ ### Q: API Key 在哪里获取?
122
+
123
+ **A**: 见 [API Key 获取教程](./API_KEY_GUIDE.md)
124
+
125
+ ### Q: Provider 切换需要重新配置吗?
126
+
127
+ **A**:
128
+ - 如果用环境变量,直接改环境变量即可
129
+ - 如果用配置文件,修改配置文件的 `provider` 和 `model` 字段
130
+
131
+ ### Q: 遇到 "API Key 无效" 错误?
132
+
133
+ **A**:
134
+ 1. 检查 API Key 是否正确
135
+ 2. 检查环境变量是否设置正确
136
+ 3. 检查账户是否有足够余额
137
+ 4. 确认 API Key 没有过期
138
+
139
+ ---
140
+
141
+ ## 5. 其他问题
142
+
143
+ ### Q: 如何查看当前版本?
144
+
145
+ ```bash
146
+ gfcode --version
147
+ ```
148
+
149
+ ### Q: 如何更新到最新版本?
150
+
151
+ ```bash
152
+ git pull
153
+ npm install
154
+ npm run build
155
+ ```
156
+
157
+ ### Q: 遇到其他错误怎么办?
158
+
159
+ **A**:
160
+ 1. 查看错误信息
161
+ 2. 尝试 Google 搜索错误
162
+ 3. 提交 Issue: https://github.com/Thatgfsj/thatgfsj-code/issues
163
+
164
+ ### Q: 如何贡献代码?
165
+
166
+ **A**:
167
+ 1. Fork 仓库
168
+ 2. 创建分支: `git checkout -b feature/your-feature`
169
+ 3. 提交修改: `git commit -m 'Add something'`
170
+ 4. 推送分支: `git push origin feature/your-feature`
171
+ 5. 创建 Pull Request
172
+
173
+ ---
174
+
175
+ ## 联系方式
176
+
177
+ - GitHub Issues: https://github.com/Thatgfsj/thatgfsj-code/issues
178
+ - 欢迎提交 Bug 和功能请求!
179
+
180
+ ---
181
+
182
+ 如有更多问题,请提交 Issue。
package/install.bat ADDED
@@ -0,0 +1,63 @@
1
+ @echo off
2
+ chcp 65001 >nul
3
+ title Thatgfsj Code 安装向导
4
+ echo.
5
+ echo Thatgfsj Code 一键安装
6
+ echo =====================
7
+ echo.
8
+
9
+ echo [*] 检查环境...
10
+ echo.
11
+
12
+ :: Check PowerShell
13
+ powershell -Version >nul 2>&1
14
+ if %errorlevel% neq 0 (
15
+ echo [错误] 需要 PowerShell,请升级: https://aka.ms/powershell
16
+ pause
17
+ exit /b 1
18
+ )
19
+ echo [OK] PowerShell 已就绪
20
+
21
+ :: Check Node.js
22
+ for /f "delims=" %%i in ('powershell -Command "node --version 2^>nul"') do set NODE_VERSION=%%i
23
+ if defined NODE_VERSION (
24
+ echo [OK] Node.js %NODE_VERSION% 已安装
25
+ ) else (
26
+ echo.
27
+ echo [!] 未检测到 Node.js,开始自动安装...
28
+ echo.
29
+
30
+ :: Try winget
31
+ where winget >nul 2>&1
32
+ if %errorlevel% equ 0 (
33
+ echo [*] 正在通过 winget 安装 Node.js...
34
+ winget install OpenJS.NodeJS.LTS --source winget --accept-package-agreements --accept-source-agreements
35
+ echo.
36
+ echo [OK] Node.js 安装完成
37
+ echo [!] 请重新打开一个 CMD 然后再次运行此脚本
38
+ pause
39
+ exit /b 0
40
+ )
41
+
42
+ :: Fallback: manual download
43
+ echo [*] 正在下载 Node.js 安装包...
44
+ powershell -Command "Start-Process 'https://nodejs.org/' -Verb Open"
45
+ echo.
46
+ echo [!] 请手动安装 Node.js LTS 版本
47
+ echo [!] 安装完成后,重新运行此脚本
48
+ pause
49
+ exit /b 0
50
+ )
51
+
52
+ :: Download install.ps1
53
+ echo.
54
+ echo [*] 正在下载安装程序...
55
+ powershell -Command "Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Thatgfsj/thatgfsj-code/main/install.ps1' -OutFile '%TEMP%\thatgfsj_install.ps1'"
56
+
57
+ echo.
58
+ echo [*] 启动安装向导...
59
+ echo.
60
+ powershell -ExecutionPolicy Bypass -File "%TEMP%\thatgfsj_install.ps1"
61
+
62
+ echo.
63
+ pause