thatgfsj-code 1.0.2 → 2.2.9

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 (63) hide show
  1. package/.nwt/meta.json +5 -0
  2. package/CHANGELOG.md +244 -0
  3. package/DEVELOPMENT.md +286 -0
  4. package/README.md +23 -1
  5. package/dist/app/index.d.ts +14 -0
  6. package/dist/app/index.d.ts.map +1 -1
  7. package/dist/app/index.js +21 -5
  8. package/dist/app/index.js.map +1 -1
  9. package/dist/cmd/index.d.ts +21 -0
  10. package/dist/cmd/index.d.ts.map +1 -1
  11. package/dist/cmd/index.js +144 -12
  12. package/dist/cmd/index.js.map +1 -1
  13. package/dist/session/index.d.ts +11 -0
  14. package/dist/session/index.d.ts.map +1 -1
  15. package/dist/session/index.js +83 -1
  16. package/dist/session/index.js.map +1 -1
  17. package/dist/tools/nwt.d.ts +14 -4
  18. package/dist/tools/nwt.d.ts.map +1 -1
  19. package/dist/tools/nwt.js +160 -13
  20. package/dist/tools/nwt.js.map +1 -1
  21. package/dist/tui/components/ChatList.d.ts.map +1 -1
  22. package/dist/tui/components/ChatList.js +4 -3
  23. package/dist/tui/components/ChatList.js.map +1 -1
  24. package/dist/tui/components/Header.d.ts.map +1 -1
  25. package/dist/tui/components/Header.js +2 -1
  26. package/dist/tui/components/Header.js.map +1 -1
  27. package/dist/tui/components/ToolCall.d.ts +1 -1
  28. package/dist/tui/components/ToolCall.d.ts.map +1 -1
  29. package/dist/tui/components/ToolCall.js +9 -4
  30. package/dist/tui/components/ToolCall.js.map +1 -1
  31. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  32. package/dist/tui/hooks/useChat.js +47 -6
  33. package/dist/tui/hooks/useChat.js.map +1 -1
  34. package/dist/tui/hooks/useCommands.d.ts.map +1 -1
  35. package/dist/tui/hooks/useCommands.js +21 -0
  36. package/dist/tui/hooks/useCommands.js.map +1 -1
  37. package/dist/tui/welcome.d.ts.map +1 -1
  38. package/dist/tui/welcome.js +3 -2
  39. package/dist/tui/welcome.js.map +1 -1
  40. package/dist/utils/thinking.d.ts +59 -0
  41. package/dist/utils/thinking.d.ts.map +1 -0
  42. package/dist/utils/thinking.js +107 -0
  43. package/dist/utils/thinking.js.map +1 -0
  44. package/dist/version.d.ts +16 -0
  45. package/dist/version.d.ts.map +1 -0
  46. package/dist/version.js +16 -0
  47. package/dist/version.js.map +1 -0
  48. package/install.bat +63 -0
  49. package/install.ps1 +238 -0
  50. package/install.sh +113 -0
  51. package/package.json +5 -2
  52. package/src/app/index.ts +21 -5
  53. package/src/cmd/index.tsx +145 -13
  54. package/src/session/index.ts +82 -1
  55. package/src/tools/nwt.ts +181 -13
  56. package/src/tui/components/ChatList.tsx +15 -6
  57. package/src/tui/components/Header.tsx +2 -1
  58. package/src/tui/components/ToolCall.tsx +46 -10
  59. package/src/tui/hooks/useChat.ts +50 -6
  60. package/src/tui/hooks/useCommands.ts +22 -0
  61. package/src/tui/welcome.ts +3 -2
  62. package/src/utils/thinking.ts +122 -0
  63. package/src/version.ts +16 -0
@@ -10,6 +10,7 @@ const CMD_ALIASES = {
10
10
  '/mcp': '/mcp',
11
11
  '/帮助': '/help',
12
12
  '/服务商': '/provider',
13
+ '/思考': '/thinking',
13
14
  };
14
15
  export const COMMAND_LIST = [
15
16
  { name: '/模型', desc: '切换模型' },
@@ -106,6 +107,25 @@ export function useCommands(app) {
106
107
  ].join('\n'),
107
108
  };
108
109
  }
110
+ // ── /thinking on|off ─────────────────────────────────
111
+ if (name === '/thinking' || name === '/思考') {
112
+ if (!arg) {
113
+ return {
114
+ handled: true,
115
+ output: `思考块显示: ${app.showThinking ? '开启 (显示完整 <think>...</think>)' : '关闭 (压缩为单行提示)'}`,
116
+ };
117
+ }
118
+ const want = arg.toLowerCase();
119
+ if (want === 'on' || want === '开启' || want === 'true' || want === '1') {
120
+ app.showThinking = true;
121
+ return { handled: true, output: '✓ 已开启完整思考块显示' };
122
+ }
123
+ if (want === 'off' || want === '关闭' || want === 'false' || want === '0') {
124
+ app.showThinking = false;
125
+ return { handled: true, output: '✓ 已关闭思考块显示 (压缩为单行提示)' };
126
+ }
127
+ return { handled: true, output: `用法: /thinking on|off (当前: ${app.showThinking ? 'on' : 'off'})` };
128
+ }
109
129
  // ── /help ───────────────────────────────────────────
110
130
  if (name === '/help') {
111
131
  return {
@@ -116,6 +136,7 @@ export function useCommands(app) {
116
136
  ' /服务商 更换服务商',
117
137
  ' /新建 新建会话',
118
138
  ' /压缩 压缩上下文',
139
+ ' /思考 [on|off] 切换思考块显示',
119
140
  ' /技能 [id] 管理技能',
120
141
  ' /mcp MCP 设置',
121
142
  ' /帮助 查看帮助',
@@ -1 +1 @@
1
- {"version":3,"file":"useCommands.js","sourceRoot":"","sources":["../../../src/tui/hooks/useCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCommands.js","sourceRoot":"","sources":["../../../src/tui/hooks/useCommands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,qBAAa,aAAa;IAExB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;WAkBxB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkH9C,OAAO,CAAC,MAAM,CAAC,UAAU;CA4B1B"}
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,qBAAa,aAAa;IAExB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;WAkBxB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkH9C,OAAO,CAAC,MAAM,CAAC,UAAU;CA4B1B"}
@@ -7,13 +7,14 @@ import { existsSync, mkdirSync, writeFileSync } from 'fs';
7
7
  import { join } from 'path';
8
8
  import { homedir } from 'os';
9
9
  import { getModelsForProvider, listProviders, isCustomProvider } from '../config/providers.js';
10
+ import { PRODUCT_VERSION_DISPLAY } from '../version.js';
10
11
  const line = chalk.gray('─'.repeat(52));
11
12
  export class WelcomeScreen {
12
13
  static show(hasApiKey) {
13
14
  if (hasApiKey)
14
15
  return;
15
16
  console.log();
16
- console.log(chalk.cyan.bold(' ⚡ Thatgfsj Code') + chalk.gray(' v0.5.0'));
17
+ console.log(chalk.cyan.bold(' ⚡ Thatgfsj Code') + chalk.gray(' ' + PRODUCT_VERSION_DISPLAY));
17
18
  console.log(chalk.gray(' AI Coding Assistant'));
18
19
  console.log(line);
19
20
  console.log();
@@ -29,7 +30,7 @@ export class WelcomeScreen {
29
30
  static async interactiveSetup() {
30
31
  console.clear();
31
32
  console.log();
32
- console.log(chalk.cyan.bold(' ⚡ Thatgfsj Code') + chalk.gray(' - Setup'));
33
+ console.log(chalk.cyan.bold(' ⚡ Thatgfsj Code') + chalk.gray(' ' + PRODUCT_VERSION_DISPLAY + ' - Setup'));
33
34
  console.log(line);
34
35
  console.log();
35
36
  const rl = readline.createInterface({
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Thinking block extraction + compression
3
+ *
4
+ * Models that aren't truly reasoning-capable (Qwen, DeepSeek-V3 chat,
5
+ * Kimi, etc.) still emit `<think>...</think>` blocks as plain text
6
+ * inside their response. These blocks can be hundreds of lines of
7
+ * internal monologue that the user doesn't want to see scroll by.
8
+ *
9
+ * opencode handles this by separating reasoning into its own stream
10
+ * part at the protocol level. We don't have that luxury — the model
11
+ * is emitting everything as a single `content` field. So we use the
12
+ * same regex-strip approach opencode uses internally (see
13
+ * packages/opencode/src/session/prompt.ts line 244).
14
+ *
15
+ * Three block delimiters are supported:
16
+ * 1. <think>...</think> — DeepSeek / Qwen / Kimi
17
+ * 2. <reasoning>...</reasoning> — OpenRouter-style
18
+ * 3. [THINK]...[/THINK] — some custom fine-tunes
19
+ *
20
+ * Usage:
21
+ * const { thinking, conclusion } = splitThinking(fullContent);
22
+ * if (thinking && compress) {
23
+ * render(`💭 ${summarize(thinking)}\n${conclusion}`);
24
+ * } else {
25
+ * render(fullContent);
26
+ * }
27
+ */
28
+ export interface ThinkingSplit {
29
+ /** Raw `<think>...` content, or empty if none. */
30
+ thinking: string;
31
+ /** Content with thinking blocks stripped + trimmed. */
32
+ conclusion: string;
33
+ /** How many lines the thinking block spanned. */
34
+ thinkingLines: number;
35
+ /** First non-empty line of the thinking block (heuristic summary). */
36
+ thinkingHint: string;
37
+ }
38
+ /**
39
+ * All known thinking-block delimiters, in priority order. The regex
40
+ * flags `gi` (global, case-insensitive) so `[THINK]` and `<think>`
41
+ * are both caught, and so multiple blocks collapse cleanly.
42
+ */
43
+ declare const THINKING_PATTERNS: RegExp[];
44
+ export declare function splitThinking(content: string): ThinkingSplit;
45
+ /**
46
+ * Build a short, single-line summary of a thinking block, suitable
47
+ * for collapsed display. Returns something like:
48
+ * "💭 thought for 24 lines: The user is asking about Win+E..."
49
+ * Falls back to "(no hint)" if the block is empty.
50
+ */
51
+ export declare function summarizeThinking(split: ThinkingSplit): string;
52
+ /**
53
+ * Render full content with thinking blocks compressed (collapsed to
54
+ * a single-line indicator). If `showThinking` is true, returns the
55
+ * content unchanged (debug mode).
56
+ */
57
+ export declare function compressThinking(content: string, showThinking?: boolean): string;
58
+ export { THINKING_PATTERNS };
59
+ //# sourceMappingURL=thinking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.d.ts","sourceRoot":"","sources":["../../src/utils/thinking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,QAAA,MAAM,iBAAiB,EAAE,MAAM,EAO9B,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAqB5D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,MAAM,CAMvF;AAoBD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Thinking block extraction + compression
3
+ *
4
+ * Models that aren't truly reasoning-capable (Qwen, DeepSeek-V3 chat,
5
+ * Kimi, etc.) still emit `<think>...</think>` blocks as plain text
6
+ * inside their response. These blocks can be hundreds of lines of
7
+ * internal monologue that the user doesn't want to see scroll by.
8
+ *
9
+ * opencode handles this by separating reasoning into its own stream
10
+ * part at the protocol level. We don't have that luxury — the model
11
+ * is emitting everything as a single `content` field. So we use the
12
+ * same regex-strip approach opencode uses internally (see
13
+ * packages/opencode/src/session/prompt.ts line 244).
14
+ *
15
+ * Three block delimiters are supported:
16
+ * 1. <think>...</think> — DeepSeek / Qwen / Kimi
17
+ * 2. <reasoning>...</reasoning> — OpenRouter-style
18
+ * 3. [THINK]...[/THINK] — some custom fine-tunes
19
+ *
20
+ * Usage:
21
+ * const { thinking, conclusion } = splitThinking(fullContent);
22
+ * if (thinking && compress) {
23
+ * render(`💭 ${summarize(thinking)}\n${conclusion}`);
24
+ * } else {
25
+ * render(fullContent);
26
+ * }
27
+ */
28
+ /**
29
+ * All known thinking-block delimiters, in priority order. The regex
30
+ * flags `gi` (global, case-insensitive) so `[THINK]` and `<think>`
31
+ * are both caught, and so multiple blocks collapse cleanly.
32
+ */
33
+ const THINKING_PATTERNS = [
34
+ /<think>[\s\S]*?<\/think>/gi,
35
+ /<thinking>[\s\S]*?<\/thinking>/gi,
36
+ /<reasoning>[\s\S]*?<\/reasoning>/gi,
37
+ /<THINK>[\s\S]*?<\/THINK>/gi, // v2.2.7 edge: case variant
38
+ /\[THINK\][\s\S]*?\[\/THINK\]/gi,
39
+ /\[\/?think\]/gi, // bare [think] / [/think] (rare)
40
+ ];
41
+ export function splitThinking(content) {
42
+ if (!content) {
43
+ return { thinking: '', conclusion: '', thinkingLines: 0, thinkingHint: '' };
44
+ }
45
+ let thinking = '';
46
+ let remaining = content;
47
+ for (const pat of THINKING_PATTERNS) {
48
+ const matches = remaining.match(pat);
49
+ if (matches) {
50
+ thinking += matches.join('\n');
51
+ remaining = remaining.replace(pat, '');
52
+ }
53
+ }
54
+ const conclusion = remaining.trim();
55
+ const thinkingLines = thinking ? thinking.split('\n').length : 0;
56
+ const thinkingHint = firstNonEmptyLine(thinking);
57
+ return { thinking, conclusion, thinkingLines, thinkingHint };
58
+ }
59
+ /**
60
+ * Build a short, single-line summary of a thinking block, suitable
61
+ * for collapsed display. Returns something like:
62
+ * "💭 thought for 24 lines: The user is asking about Win+E..."
63
+ * Falls back to "(no hint)" if the block is empty.
64
+ */
65
+ export function summarizeThinking(split) {
66
+ if (!split.thinking)
67
+ return '';
68
+ const hint = split.thinkingHint.length > 60
69
+ ? split.thinkingHint.slice(0, 57) + '...'
70
+ : split.thinkingHint;
71
+ return `💭 thought for ${split.thinkingLines} line${split.thinkingLines === 1 ? '' : 's'}${hint ? `: ${hint}` : ''}`;
72
+ }
73
+ /**
74
+ * Render full content with thinking blocks compressed (collapsed to
75
+ * a single-line indicator). If `showThinking` is true, returns the
76
+ * content unchanged (debug mode).
77
+ */
78
+ export function compressThinking(content, showThinking = false) {
79
+ if (showThinking || !content)
80
+ return content;
81
+ const split = splitThinking(content);
82
+ if (!split.thinking)
83
+ return content;
84
+ const summary = summarizeThinking(split);
85
+ return summary ? `${summary}\n${split.conclusion}` : split.conclusion;
86
+ }
87
+ function firstNonEmptyLine(s) {
88
+ if (!s)
89
+ return '';
90
+ for (const line of s.split('\n')) {
91
+ // Strip any leading/trailing thinking-tag fragments that may have
92
+ // been captured by the regex (e.g. "<think>The user said..."
93
+ // or "...</think>"). We strip ALL occurrences to handle the
94
+ // case where the first line wraps across a tag.
95
+ const t = line
96
+ .trim()
97
+ .replace(/<\/?think>/gi, '')
98
+ .replace(/<\/?reasoning>/gi, '')
99
+ .replace(/\[\/?THINK\]/gi, '')
100
+ .trim();
101
+ if (t)
102
+ return t;
103
+ }
104
+ return '';
105
+ }
106
+ export { THINKING_PATTERNS };
107
+ //# sourceMappingURL=thinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/utils/thinking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Product version (what users see in --version, the TUI header, and
3
+ * the welcome screen). This is SEPARATE from the npm package version
4
+ * (`package.json` `version` field) — see the dual-version scheme docs
5
+ * in CHANGELOG.md (v2.2.2 entry).
6
+ *
7
+ * Bump this when shipping a user-visible change. Bump package.json
8
+ * version (npm version) at the same time. They are both +0.0.1 per
9
+ * release.
10
+ */
11
+ export declare const PRODUCT_VERSION = "0.4.6";
12
+ /**
13
+ * Convenience: format with leading "v" for display contexts.
14
+ */
15
+ export declare const PRODUCT_VERSION_DISPLAY = "v0.4.6";
16
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,uBAAuB,WAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Product version (what users see in --version, the TUI header, and
3
+ * the welcome screen). This is SEPARATE from the npm package version
4
+ * (`package.json` `version` field) — see the dual-version scheme docs
5
+ * in CHANGELOG.md (v2.2.2 entry).
6
+ *
7
+ * Bump this when shipping a user-visible change. Bump package.json
8
+ * version (npm version) at the same time. They are both +0.0.1 per
9
+ * release.
10
+ */
11
+ export const PRODUCT_VERSION = '0.4.6';
12
+ /**
13
+ * Convenience: format with leading "v" for display contexts.
14
+ */
15
+ export const PRODUCT_VERSION_DISPLAY = `v${PRODUCT_VERSION}`;
16
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,eAAe,EAAE,CAAC"}
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
package/install.ps1 ADDED
@@ -0,0 +1,238 @@
1
+ # Thatgfsj Code Installer for Windows
2
+ # Usage:
3
+ # powershell -c "irm https://raw.githubusercontent.com/Thatgfsj/thatgfsj-code/main/install.ps1 | iex"
4
+ # powershell -c "& ([scriptblock]::Create((irm https://raw.githubusercontent.com/Thatgfsj/thatgfsj-code/main/install.ps1)))"
5
+
6
+ param(
7
+ [switch]$NoOpen,
8
+ [switch]$DryRun
9
+ )
10
+
11
+ $ErrorActionPreference = "Stop"
12
+
13
+ # Colors
14
+ function Write-Step { param($msg) Write-Host "[*] $msg" -ForegroundColor Yellow }
15
+ function Write-Success { param($msg) Write-Host "[✓] $msg" -ForegroundColor Green }
16
+ function Write-Error { param($msg) Write-Host "[✗] $msg" -ForegroundColor Red }
17
+ function Write-Info { param($msg) Write-Host " $msg" -ForegroundColor Gray }
18
+
19
+ Write-Host ""
20
+ Write-Host " Thatgfsj Code 安装向导" -ForegroundColor Cyan
21
+ Write-Host " =======================" -ForegroundColor Cyan
22
+ Write-Host ""
23
+
24
+ if ($DryRun) {
25
+ Write-Host "[DRY RUN] 仅显示将要执行的操作" -ForegroundColor Yellow
26
+ Write-Host ""
27
+ }
28
+
29
+ # ============== Step 1: Check PowerShell ==============
30
+ Write-Step "检查 PowerShell 版本..."
31
+
32
+ if ($PSVersionTable.PSVersion.Major -lt 5) {
33
+ Write-Error "需要 PowerShell 5.0 或更高版本"
34
+ Write-Host "请升级您的 PowerShell: https://aka.ms/powershell" -ForegroundColor Gray
35
+ exit 1
36
+ }
37
+ Write-Success "PowerShell $($PSVersionTable.PSVersion) 检测正常"
38
+
39
+ # ============== Step 2: Check/Fetch Node.js ==============
40
+ Write-Step "检查 Node.js..."
41
+
42
+ function Test-NodeInstalled {
43
+ try {
44
+ $nodeVersion = node --version 2>$null
45
+ if ($nodeVersion) {
46
+ $version = [int]($nodeVersion -replace 'v(\d+)\..*', '$1')
47
+ return @{ installed = $true; version = $nodeVersion; major = $version }
48
+ }
49
+ } catch {}
50
+ return @{ installed = $false; version = $null; major = 0 }
51
+ }
52
+
53
+ $nodeStatus = Test-NodeInstalled
54
+ if ($nodeStatus.installed -and $nodeStatus.major -ge 18) {
55
+ Write-Success "Node.js $($nodeStatus.version) 已安装"
56
+ } else {
57
+ Write-Host " 未检测到 Node.js 18+,开始安装..." -ForegroundColor Gray
58
+
59
+ # Try winget first
60
+ if (Get-Command winget -ErrorAction SilentlyContinue) {
61
+ Write-Info "使用 winget 安装..."
62
+ winget install OpenJS.NodeJS.LTS --source winget --accept-package-agreements --accept-source-agreements
63
+
64
+ # Refresh PATH
65
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
66
+
67
+ $nodeStatus = Test-NodeInstalled
68
+ if ($nodeStatus.installed) {
69
+ Write-Success "Node.js 安装完成"
70
+ } else {
71
+ Write-Host " 需要重启 PowerShell 后重新运行安装" -ForegroundColor Yellow
72
+ exit 0
73
+ }
74
+ }
75
+ # Try choco
76
+ elseif (Get-Command choco -ErrorAction SilentlyContinue) {
77
+ Write-Info "使用 Chocolatey 安装..."
78
+ choco install nodejs-lts -y
79
+ Write-Success "Node.js 安装完成 (可能需要重启)"
80
+ }
81
+ # Manual fallback
82
+ else {
83
+ Write-Host ""
84
+ Write-Error "未检测到包管理器 (winget/choco/scoop)"
85
+ Write-Host ""
86
+ Write-Host "请手动安装 Node.js:" -ForegroundColor Yellow
87
+ Write-Host " 1. 访问 https://nodejs.org" -ForegroundColor Gray
88
+ Write-Host " 2. 下载 LTS 版本 (推荐 v20 或 v22)" -ForegroundColor Gray
89
+ Write-Host " 3. 运行安装程序" -ForegroundColor Gray
90
+ Write-Host " 4. 重新运行此安装脚本" -ForegroundColor Gray
91
+ Write-Host ""
92
+ exit 1
93
+ }
94
+ }
95
+
96
+ # ============== Step 3: Clone/Update Repository ==============
97
+ Write-Step "准备安装 Thatgfsj Code..."
98
+
99
+ $installDir = Join-Path $env:USERPROFILE "thatgfsj-code"
100
+
101
+ if (Test-Path $installDir) {
102
+ Write-Info "检测到已有安装,正在更新..."
103
+ if (-not $DryRun) {
104
+ Set-Location $installDir
105
+ git pull origin main 2>$null
106
+ if ($LASTEXITCODE -ne 0) {
107
+ # If pull fails, re-clone
108
+ Remove-Item $installDir -Recurse -Force
109
+ }
110
+ }
111
+ } else {
112
+ if (-not $DryRun) {
113
+ Write-Info "正在克隆仓库..."
114
+ git clone https://github.com/Thatgfsj/thatgfsj-code.git $installDir
115
+ Set-Location $installDir
116
+ }
117
+ }
118
+
119
+ if (-not (Test-Path (Join-Path $installDir "package.json"))) {
120
+ Write-Error "安装目录无效: $installDir"
121
+ exit 1
122
+ }
123
+
124
+ Write-Success "代码准备完成: $installDir"
125
+
126
+ # ============== Step 4: Install Dependencies ==============
127
+ Write-Step "安装依赖..."
128
+
129
+ if (-not $DryRun) {
130
+ Set-Location $installDir
131
+ npm install
132
+ if ($LASTEXITCODE -ne 0) {
133
+ Write-Error "npm install 失败"
134
+ exit 1
135
+ }
136
+
137
+ Write-Info "编译 TypeScript..."
138
+ npm run build
139
+ if ($LASTEXITCODE -ne 0) {
140
+ Write-Error "编译失败"
141
+ exit 1
142
+ }
143
+ }
144
+ Write-Success "依赖安装完成"
145
+
146
+ # ============== Step 5: Link Command ==============
147
+ Write-Step "设置命令..."
148
+
149
+ if (-not $DryRun) {
150
+ npm link
151
+ }
152
+ Write-Success "命令 'gfcode' 已可用"
153
+
154
+ # ============== Step 6: Setup API Key ==============
155
+ Write-Host ""
156
+ Write-Step "配置 API Key (可选)..."
157
+
158
+ $apiKeySet = $false
159
+ $providers = @{
160
+ "1" = @{name="SiliconFlow (推荐)"; var="SILICONFLOW_API_KEY"; url="https://siliconflow.cn"}
161
+ "2" = @{name="MiniMax"; var="MINIMAX_API_KEY"; url="https://platform.minimax.io"}
162
+ "3" = @{name="OpenAI"; var="OPENAI_API_KEY"; url="https://platform.openai.com"}
163
+ "4" = @{name="Anthropic"; var="ANTHROPIC_API_KEY"; url="https://www.anthropic.com"}
164
+ "5" = @{name="Google Gemini"; var="GEMINI_API_KEY"; url="https://aistudio.google.com/app/apikey"}
165
+ "6" = @{name="跳过 (稍后配置)"; var=""; url=""}
166
+ }
167
+
168
+ Write-Host ""
169
+ Write-Host " 选择 AI Provider:" -ForegroundColor White
170
+ Write-Host ""
171
+ foreach ($key in $providers.Keys | Sort-Object) {
172
+ $p = $providers[$key]
173
+ Write-Host " $key. $($p.name)" -ForegroundColor Gray
174
+ }
175
+ Write-Host ""
176
+
177
+ if ($NoOpen) {
178
+ Write-Host " 使用 --NoOpen 跳过配置" -ForegroundColor Gray
179
+ } else {
180
+ $choice = Read-Host " 请选择 (1-6, 直接回车跳过)"
181
+
182
+ if ($choice -and $providers.ContainsKey($choice)) {
183
+ $selected = $providers[$choice]
184
+ if ($selected.var) {
185
+ Write-Host ""
186
+ Write-Host " 访问 $($selected.url) 获取 API Key" -ForegroundColor Cyan
187
+ Write-Host " 获取后粘贴到下方" -ForegroundColor Gray
188
+ Write-Host ""
189
+
190
+ $key = Read-Host " 请输入 API Key (输入后回车)"
191
+
192
+ if ($key) {
193
+ # Save to config file
194
+ $configDir = Join-Path $env:USERPROFILE ".thatgfsj"
195
+ if (-not (Test-Path $configDir)) {
196
+ New-Item -ItemType Directory -Path $configDir -Force | Out-Null
197
+ }
198
+
199
+ $configFile = Join-Path $configDir "config.json"
200
+ $config = @{
201
+ model = "Qwen/Qwen2.5-7B-Instruct"
202
+ apiKey = $key
203
+ provider = "siliconflow"
204
+ temperature = 0.7
205
+ maxTokens = 4096
206
+ }
207
+
208
+ # Set provider-specific defaults
209
+ switch ($choice) {
210
+ "1" { $config.provider = "siliconflow"; $config.model = "Qwen/Qwen2.5-7B-Instruct" }
211
+ "2" { $config.provider = "minimax"; $config.model = "MiniMax-M2.5" }
212
+ "3" { $config.provider = "openai"; $config.model = "gpt-4o-mini" }
213
+ "4" { $config.provider = "anthropic"; $config.model = "claude-3-haiku-20240307" }
214
+ "5" { $config.provider = "gemini"; $config.model = "gemini-1.5-flash-8b" }
215
+ }
216
+
217
+ $config | ConvertTo-Json | Set-Content $configFile -Encoding UTF8
218
+ Write-Success "配置已保存到: $configFile"
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ # ============== Done ==============
225
+ Write-Host ""
226
+ Write-Host " ======================================" -ForegroundColor Cyan
227
+ Write-Success " 安装完成!"
228
+ Write-Host " ======================================" -ForegroundColor Cyan
229
+ Write-Host ""
230
+ Write-Host " 使用方法:" -ForegroundColor White
231
+ Write-Host " gfcode init - 重新配置" -ForegroundColor Gray
232
+ Write-Host " gfcode - 启动交互模式" -ForegroundColor Gray
233
+ Write-Host " gfcode '你的问题' - 直接提问" -ForegroundColor Gray
234
+ Write-Host " gfcode explain '代码' - 解释代码" -ForegroundColor Gray
235
+ Write-Host " gfcode debug '代码' - 调试代码" -ForegroundColor Gray
236
+ Write-Host ""
237
+ Write-Host " 文档: https://github.com/Thatgfsj/thatgfsj-code" -ForegroundColor Gray
238
+ Write-Host ""