thatgfsj-code 0.5.0 → 0.7.0
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.
- package/README.md +7 -12
- package/dist/app/index.d.ts +2 -0
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +11 -6
- package/dist/app/index.js.map +1 -1
- package/dist/cmd/index.d.ts +1 -2
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +26 -23
- package/dist/cmd/index.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/skills/brainstorming.d.ts +3 -0
- package/dist/skills/brainstorming.d.ts.map +1 -0
- package/dist/skills/brainstorming.js +42 -0
- package/dist/skills/brainstorming.js.map +1 -0
- package/dist/skills/code-review.d.ts +3 -0
- package/dist/skills/code-review.d.ts.map +1 -0
- package/dist/skills/code-review.js +44 -0
- package/dist/skills/code-review.js.map +1 -0
- package/dist/skills/executing-plans.d.ts +3 -0
- package/dist/skills/executing-plans.d.ts.map +1 -0
- package/dist/skills/executing-plans.js +26 -0
- package/dist/skills/executing-plans.js.map +1 -0
- package/dist/skills/frontend-design.d.ts +3 -0
- package/dist/skills/frontend-design.d.ts.map +1 -0
- package/dist/skills/frontend-design.js +34 -0
- package/dist/skills/frontend-design.js.map +1 -0
- package/dist/skills/git-workflow.d.ts +3 -0
- package/dist/skills/git-workflow.d.ts.map +1 -0
- package/dist/skills/git-workflow.js +35 -0
- package/dist/skills/git-workflow.js.map +1 -0
- package/dist/skills/improve-architecture.d.ts +3 -0
- package/dist/skills/improve-architecture.d.ts.map +1 -0
- package/dist/skills/improve-architecture.js +37 -0
- package/dist/skills/improve-architecture.js.map +1 -0
- package/dist/skills/index.d.ts +50 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +98 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/neuroweave.d.ts +3 -0
- package/dist/skills/neuroweave.d.ts.map +1 -0
- package/dist/skills/neuroweave.js +46 -0
- package/dist/skills/neuroweave.js.map +1 -0
- package/dist/skills/playwright.d.ts +3 -0
- package/dist/skills/playwright.d.ts.map +1 -0
- package/dist/skills/playwright.js +71 -0
- package/dist/skills/playwright.js.map +1 -0
- package/dist/skills/prototype.d.ts +3 -0
- package/dist/skills/prototype.d.ts.map +1 -0
- package/dist/skills/prototype.js +29 -0
- package/dist/skills/prototype.js.map +1 -0
- package/dist/skills/subagent.d.ts +3 -0
- package/dist/skills/subagent.d.ts.map +1 -0
- package/dist/skills/subagent.js +27 -0
- package/dist/skills/subagent.js.map +1 -0
- package/dist/skills/supabase.d.ts +3 -0
- package/dist/skills/supabase.d.ts.map +1 -0
- package/dist/skills/supabase.js +43 -0
- package/dist/skills/supabase.js.map +1 -0
- package/dist/skills/systematic-debugging.d.ts +3 -0
- package/dist/skills/systematic-debugging.d.ts.map +1 -0
- package/dist/skills/systematic-debugging.js +43 -0
- package/dist/skills/systematic-debugging.js.map +1 -0
- package/dist/skills/tdd.d.ts +3 -0
- package/dist/skills/tdd.d.ts.map +1 -0
- package/dist/skills/tdd.js +38 -0
- package/dist/skills/tdd.js.map +1 -0
- package/dist/skills/triage.d.ts +3 -0
- package/dist/skills/triage.d.ts.map +1 -0
- package/dist/skills/triage.js +34 -0
- package/dist/skills/triage.js.map +1 -0
- package/dist/skills/verification.d.ts +3 -0
- package/dist/skills/verification.d.ts.map +1 -0
- package/dist/skills/verification.js +30 -0
- package/dist/skills/verification.js.map +1 -0
- package/dist/skills/writing-plans.d.ts +3 -0
- package/dist/skills/writing-plans.d.ts.map +1 -0
- package/dist/skills/writing-plans.js +41 -0
- package/dist/skills/writing-plans.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nwt.d.ts +70 -0
- package/dist/tools/nwt.d.ts.map +1 -0
- package/dist/tools/nwt.js +289 -0
- package/dist/tools/nwt.js.map +1 -0
- package/dist/tui/app.d.ts +9 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +40 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components/ChatList.d.ts +13 -0
- package/dist/tui/components/ChatList.d.ts.map +1 -0
- package/dist/tui/components/ChatList.js +11 -0
- package/dist/tui/components/ChatList.js.map +1 -0
- package/dist/tui/components/ChatMessage.d.ts +15 -0
- package/dist/tui/components/ChatMessage.d.ts.map +1 -0
- package/dist/tui/components/ChatMessage.js +17 -0
- package/dist/tui/components/ChatMessage.js.map +1 -0
- package/dist/tui/components/Header.d.ts +9 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +6 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Markdown.d.ts +8 -0
- package/dist/tui/components/Markdown.d.ts.map +1 -0
- package/dist/tui/components/Markdown.js +31 -0
- package/dist/tui/components/Markdown.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +9 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +8 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/Thinking.d.ts +8 -0
- package/dist/tui/components/Thinking.d.ts.map +1 -0
- package/dist/tui/components/Thinking.js +7 -0
- package/dist/tui/components/Thinking.js.map +1 -0
- package/dist/tui/components/ToolCall.d.ts +15 -0
- package/dist/tui/components/ToolCall.d.ts.map +1 -0
- package/dist/tui/components/ToolCall.js +42 -0
- package/dist/tui/components/ToolCall.js.map +1 -0
- package/dist/tui/components/UserInput.d.ts +9 -0
- package/dist/tui/components/UserInput.d.ts.map +1 -0
- package/dist/tui/components/UserInput.js +76 -0
- package/dist/tui/components/UserInput.js.map +1 -0
- package/dist/tui/hooks/useChat.d.ts +11 -0
- package/dist/tui/hooks/useChat.d.ts.map +1 -0
- package/dist/tui/hooks/useChat.js +138 -0
- package/dist/tui/hooks/useChat.js.map +1 -0
- package/dist/tui/hooks/useCommands.d.ts +10 -0
- package/dist/tui/hooks/useCommands.d.ts.map +1 -0
- package/dist/tui/hooks/useCommands.js +78 -0
- package/dist/tui/hooks/useCommands.js.map +1 -0
- package/dist/tui/index.d.ts +2 -4
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +2 -4
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/welcome.d.ts.map +1 -1
- package/dist/tui/welcome.js +22 -4
- package/dist/tui/welcome.js.map +1 -1
- package/install.ps1 +171 -192
- package/package.json +9 -1
- package/src/app/index.ts +13 -7
- package/src/cmd/{index.ts → index.tsx} +28 -27
- package/src/config/index.ts +1 -0
- package/src/config/types.ts +1 -0
- package/src/prompts/index.ts +8 -0
- package/src/skills/brainstorming.ts +43 -0
- package/src/skills/code-review.ts +45 -0
- package/src/skills/executing-plans.ts +27 -0
- package/src/skills/frontend-design.ts +35 -0
- package/src/skills/git-workflow.ts +36 -0
- package/src/skills/improve-architecture.ts +38 -0
- package/src/skills/index.ts +136 -0
- package/src/skills/neuroweave.ts +47 -0
- package/src/skills/playwright.ts +72 -0
- package/src/skills/prototype.ts +30 -0
- package/src/skills/subagent.ts +28 -0
- package/src/skills/supabase.ts +44 -0
- package/src/skills/systematic-debugging.ts +44 -0
- package/src/skills/tdd.ts +39 -0
- package/src/skills/triage.ts +35 -0
- package/src/skills/verification.ts +31 -0
- package/src/skills/writing-plans.ts +42 -0
- package/src/tools/index.ts +3 -0
- package/src/tools/nwt.ts +362 -0
- package/src/tui/app.tsx +61 -0
- package/src/tui/components/ChatList.tsx +32 -0
- package/src/tui/components/ChatMessage.tsx +54 -0
- package/src/tui/components/Header.tsx +28 -0
- package/src/tui/components/Markdown.tsx +35 -0
- package/src/tui/components/StatusBar.tsx +30 -0
- package/src/tui/components/Thinking.tsx +19 -0
- package/src/tui/components/ToolCall.tsx +74 -0
- package/src/tui/components/UserInput.tsx +83 -0
- package/src/tui/hooks/useChat.ts +154 -0
- package/src/tui/hooks/useCommands.ts +91 -0
- package/src/tui/index.ts +2 -4
- package/src/tui/welcome.ts +24 -5
- package/tsconfig.json +5 -3
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
export function useCommands(app) {
|
|
3
|
+
const handleCommand = useCallback((input) => {
|
|
4
|
+
const cmd = input.toLowerCase().trim();
|
|
5
|
+
switch (cmd) {
|
|
6
|
+
case 'help':
|
|
7
|
+
return {
|
|
8
|
+
handled: true,
|
|
9
|
+
output: [
|
|
10
|
+
'Commands:',
|
|
11
|
+
' help Show this help',
|
|
12
|
+
' tools List available tools',
|
|
13
|
+
' model Show current model',
|
|
14
|
+
' clear Clear screen',
|
|
15
|
+
' exit Exit',
|
|
16
|
+
'',
|
|
17
|
+
'Keyboard:',
|
|
18
|
+
' ↑/↓ Browse history',
|
|
19
|
+
' Ctrl+C Exit',
|
|
20
|
+
].join('\n'),
|
|
21
|
+
};
|
|
22
|
+
case 'tools':
|
|
23
|
+
return {
|
|
24
|
+
handled: true,
|
|
25
|
+
output: app.tools.list()
|
|
26
|
+
.map(t => ` ${t.name.padEnd(16)} ${t.description}`)
|
|
27
|
+
.join('\n'),
|
|
28
|
+
};
|
|
29
|
+
case 'model': {
|
|
30
|
+
const c = app.config.get();
|
|
31
|
+
return {
|
|
32
|
+
handled: true,
|
|
33
|
+
output: [
|
|
34
|
+
` Provider: ${c.provider}`,
|
|
35
|
+
` Model: ${c.model}`,
|
|
36
|
+
` Base URL: ${c.baseUrl || 'default'}`,
|
|
37
|
+
` API Key: ${c.apiKey ? '••••' + c.apiKey.slice(-4) : 'not set'}`,
|
|
38
|
+
` Context Length: ${c.contextLength || 50} messages`,
|
|
39
|
+
].join('\n'),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
case 'clear':
|
|
43
|
+
return { handled: true };
|
|
44
|
+
default:
|
|
45
|
+
// Handle /skill commands
|
|
46
|
+
if (cmd.startsWith('skill') || cmd.startsWith('/skill')) {
|
|
47
|
+
const parts = input.trim().split(/\s+/);
|
|
48
|
+
const sub = parts[1] || 'list';
|
|
49
|
+
if (sub === 'list') {
|
|
50
|
+
const all = app.skills.list();
|
|
51
|
+
const lines = all.map(s => {
|
|
52
|
+
const active = app.skills.isActive(s.id) ? '✓' : ' ';
|
|
53
|
+
return ` [${active}] ${s.name.padEnd(28)} ${s.description}`;
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
handled: true,
|
|
57
|
+
output: ['Skills ([✓] = active):', ...lines, '', 'Usage: skill <id> to toggle'].join('\n'),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Toggle skill
|
|
61
|
+
const skillId = sub;
|
|
62
|
+
if (app.skills.isActive(skillId)) {
|
|
63
|
+
app.skills.deactivate(skillId);
|
|
64
|
+
return { handled: true, output: ` Deactivated: ${skillId}` };
|
|
65
|
+
}
|
|
66
|
+
else if (app.skills.activate(skillId)) {
|
|
67
|
+
return { handled: true, output: ` Activated: ${skillId}` };
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return { handled: true, output: ` Unknown skill: ${skillId}` };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { handled: false };
|
|
74
|
+
}
|
|
75
|
+
}, [app]);
|
|
76
|
+
return { handleCommand };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=useCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCommands.js","sourceRoot":"","sources":["../../../src/tui/hooks/useCommands.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TUI Module - Terminal
|
|
2
|
+
* TUI Module - Ink-based Terminal UI
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
5
|
-
export { REPLInput } from './input.js';
|
|
6
|
-
export { REPLOutput } from './output.js';
|
|
4
|
+
export { TuiApp } from './app.js';
|
|
7
5
|
export { WelcomeScreen } from './welcome.js';
|
|
8
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/tui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/tui/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TUI Module - Terminal
|
|
2
|
+
* TUI Module - Ink-based Terminal UI
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
5
|
-
export { REPLInput } from './input.js';
|
|
6
|
-
export { REPLOutput } from './output.js';
|
|
4
|
+
export { TuiApp } from './app.js';
|
|
7
5
|
export { WelcomeScreen } from './welcome.js';
|
|
8
6
|
//# sourceMappingURL=index.js.map
|
package/dist/tui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/tui/welcome.js
CHANGED
|
@@ -72,17 +72,17 @@ export class WelcomeScreen {
|
|
|
72
72
|
console.log();
|
|
73
73
|
console.log(chalk.bold(' 3. Choose Model'));
|
|
74
74
|
console.log();
|
|
75
|
+
let model;
|
|
75
76
|
if (isCustomProvider(providerName)) {
|
|
76
77
|
console.log(chalk.gray(' Enter model name for your relay station'));
|
|
77
78
|
console.log(chalk.gray(' e.g. gpt-4o-mini, claude-sonnet-4-20250514'));
|
|
78
79
|
console.log();
|
|
79
|
-
|
|
80
|
+
model = await ask(chalk.cyan(' Model ❯ '));
|
|
80
81
|
if (!model) {
|
|
81
82
|
console.log(chalk.red(' ❌ Model name required'));
|
|
82
83
|
rl.close();
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
|
-
this.saveConfig(providerName, model, apiKey, baseUrl);
|
|
86
86
|
}
|
|
87
87
|
else {
|
|
88
88
|
const models = getModelsForProvider(providerName);
|
|
@@ -93,8 +93,25 @@ export class WelcomeScreen {
|
|
|
93
93
|
console.log();
|
|
94
94
|
const modelChoice = await ask(chalk.cyan(' ❯ '));
|
|
95
95
|
const selectedModel = models[parseInt(modelChoice) - 1] || models[0];
|
|
96
|
-
|
|
96
|
+
model = selectedModel.id;
|
|
97
97
|
}
|
|
98
|
+
// ── Step 4: Context Length ───────────────────────────
|
|
99
|
+
console.log();
|
|
100
|
+
console.log(chalk.bold(' 4. Context Length'));
|
|
101
|
+
console.log();
|
|
102
|
+
console.log(chalk.gray(' Max messages kept in conversation history'));
|
|
103
|
+
console.log(chalk.gray(' Higher = more context, more tokens used'));
|
|
104
|
+
console.log();
|
|
105
|
+
console.log(chalk.cyan(' 1') + ' 20 ' + chalk.gray('(short,节省 token)'));
|
|
106
|
+
console.log(chalk.cyan(' 2') + ' 50 ' + chalk.gray('(default,推荐)'));
|
|
107
|
+
console.log(chalk.cyan(' 3') + ' 100 ' + chalk.gray('(long,长对话)'));
|
|
108
|
+
console.log(chalk.cyan(' 4') + ' 200 ' + chalk.gray('(very long,超长对话)'));
|
|
109
|
+
console.log();
|
|
110
|
+
const ctxChoice = await ask(chalk.cyan(' ❯ '));
|
|
111
|
+
const ctxMap = { '1': 20, '2': 50, '3': 100, '4': 200 };
|
|
112
|
+
const contextLength = ctxMap[ctxChoice] || 50;
|
|
113
|
+
// ── Save ────────────────────────────────────────────
|
|
114
|
+
this.saveConfig(providerName, model, apiKey, baseUrl, contextLength);
|
|
98
115
|
// ── Done ────────────────────────────────────────────
|
|
99
116
|
console.log();
|
|
100
117
|
console.log(line);
|
|
@@ -109,7 +126,7 @@ export class WelcomeScreen {
|
|
|
109
126
|
rl.close();
|
|
110
127
|
}
|
|
111
128
|
}
|
|
112
|
-
static saveConfig(provider, model, apiKey, baseUrl) {
|
|
129
|
+
static saveConfig(provider, model, apiKey, baseUrl, contextLength = 50) {
|
|
113
130
|
const configDir = join(homedir(), '.thatgfsj');
|
|
114
131
|
const configPath = join(configDir, 'config.json');
|
|
115
132
|
if (!existsSync(configDir)) {
|
|
@@ -121,6 +138,7 @@ export class WelcomeScreen {
|
|
|
121
138
|
apiKey,
|
|
122
139
|
temperature: 0.7,
|
|
123
140
|
maxTokens: 4096,
|
|
141
|
+
contextLength,
|
|
124
142
|
};
|
|
125
143
|
if (baseUrl)
|
|
126
144
|
config.baseUrl = baseUrl;
|
package/dist/tui/welcome.js.map
CHANGED
|
@@ -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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"}
|
package/install.ps1
CHANGED
|
@@ -1,238 +1,217 @@
|
|
|
1
1
|
# Thatgfsj Code Installer for Windows
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
param(
|
|
7
|
-
[switch]$NoOpen,
|
|
8
|
-
[switch]$DryRun
|
|
9
|
-
)
|
|
2
|
+
# Works on any Windows machine - auto-downloads Node.js if needed
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# irm https://raw.githubusercontent.com/Thatgfsj/thatgfsj-code/master/install.ps1 | iex
|
|
10
6
|
|
|
11
7
|
$ErrorActionPreference = "Stop"
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
function
|
|
15
|
-
function
|
|
16
|
-
function
|
|
17
|
-
function Write-Info { param($msg) Write-Host " $msg" -ForegroundColor Gray }
|
|
9
|
+
function Log($msg) { Write-Host " $msg" -ForegroundColor Gray }
|
|
10
|
+
function Step($msg) { Write-Host " > $msg" -ForegroundColor Cyan }
|
|
11
|
+
function Ok($msg) { Write-Host " OK $msg" -ForegroundColor Green }
|
|
12
|
+
function Fail($msg) { Write-Host " !! $msg" -ForegroundColor Red }
|
|
18
13
|
|
|
19
14
|
Write-Host ""
|
|
20
|
-
Write-Host " Thatgfsj Code
|
|
21
|
-
Write-Host "
|
|
15
|
+
Write-Host " Thatgfsj Code Installer" -ForegroundColor Cyan
|
|
16
|
+
Write-Host " ────────────────────────" -ForegroundColor DarkGray
|
|
22
17
|
Write-Host ""
|
|
23
18
|
|
|
24
|
-
|
|
25
|
-
Write-Host "[DRY RUN] 仅显示将要执行的操作" -ForegroundColor Yellow
|
|
26
|
-
Write-Host ""
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
# ============== Step 1: Check PowerShell ==============
|
|
30
|
-
Write-Step "检查 PowerShell 版本..."
|
|
19
|
+
# ── Helper: Refresh PATH from registry ────────────────────
|
|
31
20
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
21
|
+
function Refresh-Path {
|
|
22
|
+
$machinePath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
|
|
23
|
+
$userPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
|
|
24
|
+
$env:Path = "$machinePath;$userPath"
|
|
36
25
|
}
|
|
37
|
-
Write-Success "PowerShell $($PSVersionTable.PSVersion) 检测正常"
|
|
38
26
|
|
|
39
|
-
#
|
|
40
|
-
Write-Step "检查 Node.js..."
|
|
27
|
+
# ── Helper: Download file with progress ───────────────────
|
|
41
28
|
|
|
42
|
-
function
|
|
29
|
+
function Download-File {
|
|
30
|
+
param($url, $dest)
|
|
31
|
+
Log "Downloading $url ..."
|
|
43
32
|
try {
|
|
44
|
-
$
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
return @{ installed = $false; version = $null; major = 0 }
|
|
33
|
+
$wc = New-Object System.Net.WebClient
|
|
34
|
+
$wc.DownloadFile($url, $dest)
|
|
35
|
+
} catch {
|
|
36
|
+
# Fallback to Invoke-WebRequest
|
|
37
|
+
Invoke-WebRequest -Uri $url -OutFile $dest -UseBasicParsing
|
|
38
|
+
}
|
|
51
39
|
}
|
|
52
40
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
41
|
+
# ── Helper: Install Node.js by downloading binary ─────────
|
|
42
|
+
|
|
43
|
+
function Install-NodeJs-Binary {
|
|
44
|
+
Log "Downloading Node.js LTS binary..."
|
|
45
|
+
|
|
46
|
+
$nodeVersion = "v22.16.0"
|
|
47
|
+
$arch = if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" }
|
|
48
|
+
$filename = "node-$nodeVersion-win-$arch"
|
|
49
|
+
$zipUrl = "https://nodejs.org/dist/$nodeVersion/$filename.zip"
|
|
50
|
+
|
|
51
|
+
$tempDir = Join-Path $env:TEMP "gfcode-node-install"
|
|
52
|
+
$zipFile = Join-Path $tempDir "$filename.zip"
|
|
53
|
+
$extractDir = Join-Path $tempDir $filename
|
|
54
|
+
|
|
55
|
+
# Clean up previous attempts
|
|
56
|
+
if (Test-Path $tempDir) { Remove-Item $tempDir -Recurse -Force }
|
|
57
|
+
New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
|
|
58
|
+
|
|
59
|
+
# Download
|
|
60
|
+
Download-File $zipUrl $zipFile
|
|
61
|
+
|
|
62
|
+
# Extract
|
|
63
|
+
Log "Extracting..."
|
|
64
|
+
Expand-Archive -Path $zipFile -DestinationPath $tempDir -Force
|
|
65
|
+
|
|
66
|
+
# Move to install location
|
|
67
|
+
$installBase = Join-Path $env:USERPROFILE ".gfcode-node"
|
|
68
|
+
if (Test-Path $installBase) { Remove-Item $installBase -Recurse -Force }
|
|
69
|
+
Move-Item $extractDir $installBase
|
|
70
|
+
|
|
71
|
+
# Add to PATH (current session + user env)
|
|
72
|
+
$nodeBin = $installBase
|
|
73
|
+
$env:Path = "$nodeBin;$env:Path"
|
|
74
|
+
|
|
75
|
+
# Persist to user PATH
|
|
76
|
+
$userPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
|
|
77
|
+
if ($userPath -notlike "*$nodeBin*") {
|
|
78
|
+
[System.Environment]::SetEnvironmentVariable("Path", "$nodeBin;$userPath", "User")
|
|
80
79
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
exit 1
|
|
80
|
+
|
|
81
|
+
# Cleanup
|
|
82
|
+
Remove-Item $tempDir -Recurse -Force -ErrorAction SilentlyContinue
|
|
83
|
+
|
|
84
|
+
# Verify
|
|
85
|
+
try {
|
|
86
|
+
$ver = & "$nodeBin\node.exe" --version
|
|
87
|
+
Ok "Node.js $ver (portable)"
|
|
88
|
+
return $true
|
|
89
|
+
} catch {
|
|
90
|
+
return $false
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
|
|
96
|
-
#
|
|
97
|
-
|
|
94
|
+
# ── Step 1: Check / Install Node.js ───────────────────────
|
|
95
|
+
|
|
96
|
+
Step "Checking Node.js..."
|
|
98
97
|
|
|
99
|
-
$
|
|
98
|
+
$nodeOk = $false
|
|
100
99
|
|
|
101
|
-
if
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if ($
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
# Check if node is available
|
|
101
|
+
try {
|
|
102
|
+
$ver = node --version 2>$null
|
|
103
|
+
if ($ver) {
|
|
104
|
+
$major = [int]($ver -replace 'v(\d+)\..*', '$1')
|
|
105
|
+
if ($major -ge 18) {
|
|
106
|
+
Ok "Node.js $ver"
|
|
107
|
+
$nodeOk = $true
|
|
108
|
+
} else {
|
|
109
|
+
Log "Node.js $ver found but too old (need 18+)"
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
} catch {}
|
|
113
|
+
|
|
114
|
+
if (-not $nodeOk) {
|
|
115
|
+
Log "Node.js 18+ not found."
|
|
116
|
+
|
|
117
|
+
# Try 1: winget
|
|
118
|
+
if (-not $nodeOk -and (Get-Command winget -ErrorAction SilentlyContinue)) {
|
|
119
|
+
Log "Trying winget..."
|
|
120
|
+
try {
|
|
121
|
+
winget install OpenJS.NodeJS.LTS --accept-package-agreements --accept-source-agreements 2>&1 | Out-Null
|
|
122
|
+
Refresh-Path
|
|
123
|
+
$ver = node --version 2>$null
|
|
124
|
+
if ($ver -and [int]($ver -replace 'v(\d+)\..*', '$1') -ge 18) {
|
|
125
|
+
Ok "Node.js $ver via winget"
|
|
126
|
+
$nodeOk = $true
|
|
127
|
+
}
|
|
128
|
+
} catch {}
|
|
116
129
|
}
|
|
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
130
|
|
|
126
|
-
#
|
|
127
|
-
|
|
131
|
+
# Try 2: choco
|
|
132
|
+
if (-not $nodeOk -and (Get-Command choco -ErrorAction SilentlyContinue)) {
|
|
133
|
+
Log "Trying Chocolatey..."
|
|
134
|
+
try {
|
|
135
|
+
choco install nodejs-lts -y 2>&1 | Out-Null
|
|
136
|
+
Refresh-Path
|
|
137
|
+
$ver = node --version 2>$null
|
|
138
|
+
if ($ver -and [int]($ver -replace 'v(\d+)\..*', '$1') -ge 18) {
|
|
139
|
+
Ok "Node.js $ver via Chocolatey"
|
|
140
|
+
$nodeOk = $true
|
|
141
|
+
}
|
|
142
|
+
} catch {}
|
|
143
|
+
}
|
|
128
144
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if ($LASTEXITCODE -ne 0) {
|
|
133
|
-
Write-Error "npm install 失败"
|
|
134
|
-
exit 1
|
|
145
|
+
# Try 3: Direct download (works on any machine)
|
|
146
|
+
if (-not $nodeOk) {
|
|
147
|
+
$nodeOk = Install-NodeJs-Binary
|
|
135
148
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Write-Error "编译失败"
|
|
149
|
+
|
|
150
|
+
if (-not $nodeOk) {
|
|
151
|
+
Fail "Failed to install Node.js"
|
|
152
|
+
Log "Please install manually: https://nodejs.org"
|
|
141
153
|
exit 1
|
|
142
154
|
}
|
|
143
155
|
}
|
|
144
|
-
Write-Success "依赖安装完成"
|
|
145
156
|
|
|
146
|
-
#
|
|
147
|
-
|
|
157
|
+
# ── Step 2: Install gfcode via npm ────────────────────────
|
|
158
|
+
|
|
159
|
+
Step "Installing thatgfsj-code..."
|
|
160
|
+
|
|
161
|
+
$npmPath = Join-Path (Split-Path (Get-Command node).Source) "npm.cmd"
|
|
162
|
+
$npmGlobalPrefix = & node -e "console.log(require('path').resolve(process.execPath, '..','..'))" 2>$null
|
|
163
|
+
$npmBinDir = Join-Path $npmGlobalPrefix "bin"
|
|
148
164
|
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
# Install globally
|
|
166
|
+
$env:npm_config_prefix = $npmGlobalPrefix
|
|
167
|
+
& node (Join-Path (Split-Path (Get-Command node).Source) "node_modules\npm\bin\npm-cli.js") install -g thatgfsj-code 2>&1 | Out-Null
|
|
168
|
+
|
|
169
|
+
if ($LASTEXITCODE -ne 0) {
|
|
170
|
+
# Fallback: try npm directly
|
|
171
|
+
npm install -g thatgfsj-code 2>&1 | Out-Null
|
|
151
172
|
}
|
|
152
|
-
Write-Success "命令 'gfcode' 已可用"
|
|
153
173
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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=""}
|
|
174
|
+
if ($LASTEXITCODE -ne 0) {
|
|
175
|
+
Fail "npm install failed"
|
|
176
|
+
exit 1
|
|
166
177
|
}
|
|
167
178
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
179
|
+
Ok "thatgfsj-code installed"
|
|
180
|
+
|
|
181
|
+
# Make sure gfcode is in PATH for this session
|
|
182
|
+
$npmBin = Join-Path $npmGlobalPrefix "bin"
|
|
183
|
+
if (Test-Path $npmBin) {
|
|
184
|
+
$env:Path = "$npmBin;$env:Path"
|
|
174
185
|
}
|
|
175
|
-
Write-Host ""
|
|
176
186
|
|
|
177
|
-
|
|
178
|
-
|
|
187
|
+
# ── Step 3: Verify ────────────────────────────────────────
|
|
188
|
+
|
|
189
|
+
Step "Verifying..."
|
|
190
|
+
|
|
191
|
+
$gfcodePath = Get-Command gfcode -ErrorAction SilentlyContinue
|
|
192
|
+
if ($gfcodePath) {
|
|
193
|
+
$cliVer = gfcode --version 2>$null
|
|
194
|
+
Ok "gfcode v$cliVer"
|
|
179
195
|
} else {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
if (
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
}
|
|
196
|
+
# Try direct path
|
|
197
|
+
$directPath = Join-Path $npmGlobalPrefix "bin\gfcode.cmd"
|
|
198
|
+
if (Test-Path $directPath) {
|
|
199
|
+
Ok "gfcode installed at $directPath"
|
|
200
|
+
Log "You may need to restart your terminal."
|
|
201
|
+
} else {
|
|
202
|
+
Ok "gfcode installed (restart terminal if command not found)"
|
|
221
203
|
}
|
|
222
204
|
}
|
|
223
205
|
|
|
224
|
-
#
|
|
206
|
+
# ── Done ──────────────────────────────────────────────────
|
|
207
|
+
|
|
225
208
|
Write-Host ""
|
|
226
|
-
Write-Host "
|
|
227
|
-
Write-
|
|
228
|
-
Write-Host " ======================================" -ForegroundColor Cyan
|
|
209
|
+
Write-Host " ────────────────────────────────" -ForegroundColor DarkGray
|
|
210
|
+
Write-Host " Done!" -ForegroundColor Green
|
|
229
211
|
Write-Host ""
|
|
230
|
-
Write-Host "
|
|
231
|
-
Write-Host " gfcode init
|
|
232
|
-
Write-Host " gfcode
|
|
233
|
-
Write-Host " gfcode '你的问题' - 直接提问" -ForegroundColor Gray
|
|
234
|
-
Write-Host " gfcode explain '代码' - 解释代码" -ForegroundColor Gray
|
|
235
|
-
Write-Host " gfcode debug '代码' - 调试代码" -ForegroundColor Gray
|
|
212
|
+
Write-Host " Next steps:" -ForegroundColor White
|
|
213
|
+
Write-Host " gfcode init " -ForegroundColor Cyan -NoNewline; Write-Host "# Configure API key" -ForegroundColor DarkGray
|
|
214
|
+
Write-Host " gfcode " -ForegroundColor Cyan -NoNewline; Write-Host "# Start coding" -ForegroundColor DarkGray
|
|
236
215
|
Write-Host ""
|
|
237
|
-
Write-Host "
|
|
216
|
+
Write-Host " Docs: https://github.com/Thatgfsj/thatgfsj-code" -ForegroundColor DarkGray
|
|
238
217
|
Write-Host ""
|