thatgfsj-code 0.3.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/LICENSE +21 -0
- package/README.md +136 -0
- package/ROADMAP.md +61 -0
- package/dist/app/agent.d.ts +31 -0
- package/dist/app/agent.d.ts.map +1 -0
- package/dist/app/agent.js +106 -0
- package/dist/app/agent.js.map +1 -0
- package/dist/app/index.d.ts +39 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +80 -0
- package/dist/app/index.js.map +1 -0
- package/dist/cmd/index.d.ts +12 -0
- package/dist/cmd/index.d.ts.map +1 -0
- package/dist/cmd/index.js +85 -0
- package/dist/cmd/index.js.map +1 -0
- package/dist/config/index.d.ts +39 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +110 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/providers.d.ts +23 -0
- package/dist/config/providers.d.ts.map +1 -0
- package/dist/config/providers.js +152 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/types.d.ts +33 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/hooks/index.d.ts +31 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +71 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +17 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +126 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/gemini.d.ts +16 -0
- package/dist/llm/gemini.d.ts.map +1 -0
- package/dist/llm/gemini.js +107 -0
- package/dist/llm/gemini.js.map +1 -0
- package/dist/llm/index.d.ts +48 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +174 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/openai.d.ts +17 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +113 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/llm/provider.d.ts +33 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +6 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/mcp/client.d.ts +83 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +267 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/prompts/index.d.ts +27 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +102 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/session/compactor.d.ts +48 -0
- package/dist/session/compactor.d.ts.map +1 -0
- package/dist/session/compactor.js +77 -0
- package/dist/session/compactor.js.map +1 -0
- package/dist/session/index.d.ts +48 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +69 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/message.d.ts +26 -0
- package/dist/session/message.d.ts.map +1 -0
- package/dist/session/message.js +34 -0
- package/dist/session/message.js.map +1 -0
- package/dist/tools/file.d.ts +46 -0
- package/dist/tools/file.d.ts.map +1 -0
- package/dist/tools/file.js +100 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/git.d.ts +52 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +112 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/index.d.ts +42 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +92 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +36 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +223 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shell.d.ts +50 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +117 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/types.d.ts +68 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +57 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tui/index.d.ts +8 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/input.d.ts +14 -0
- package/dist/tui/input.d.ts.map +1 -0
- package/dist/tui/input.js +50 -0
- package/dist/tui/input.js.map +1 -0
- package/dist/tui/output.d.ts +20 -0
- package/dist/tui/output.d.ts.map +1 -0
- package/dist/tui/output.js +70 -0
- package/dist/tui/output.js.map +1 -0
- package/dist/tui/repl.d.ts +25 -0
- package/dist/tui/repl.d.ts.map +1 -0
- package/dist/tui/repl.js +114 -0
- package/dist/tui/repl.js.map +1 -0
- package/dist/tui/welcome.d.ts +15 -0
- package/dist/tui/welcome.d.ts.map +1 -0
- package/dist/tui/welcome.js +86 -0
- package/dist/tui/welcome.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/diff.d.ts +22 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +60 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/project.d.ts +32 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +89 -0
- package/dist/utils/project.js.map +1 -0
- package/docs/API_KEY_GUIDE.md +236 -0
- package/docs/FAQ.md +182 -0
- package/install.bat +63 -0
- package/install.ps1 +238 -0
- package/install.sh +113 -0
- package/package.json +36 -0
- package/src/app/agent.ts +140 -0
- package/src/app/index.ts +101 -0
- package/src/cmd/index.ts +96 -0
- package/src/config/index.ts +130 -0
- package/src/config/providers.ts +160 -0
- package/src/config/types.ts +46 -0
- package/src/hooks/index.ts +111 -0
- package/src/llm/anthropic.ts +146 -0
- package/src/llm/gemini.ts +127 -0
- package/src/llm/index.ts +209 -0
- package/src/llm/openai.ts +132 -0
- package/src/llm/provider.ts +38 -0
- package/src/mcp/client.ts +330 -0
- package/src/prompts/index.ts +123 -0
- package/src/session/compactor.ts +103 -0
- package/src/session/index.ts +81 -0
- package/src/session/message.ts +42 -0
- package/src/tools/file.ts +117 -0
- package/src/tools/git.ts +132 -0
- package/src/tools/index.ts +108 -0
- package/src/tools/search.ts +263 -0
- package/src/tools/shell.ts +136 -0
- package/src/tools/types.ts +122 -0
- package/src/tui/index.ts +8 -0
- package/src/tui/input.ts +56 -0
- package/src/tui/output.ts +83 -0
- package/src/tui/repl.ts +131 -0
- package/src/tui/welcome.ts +101 -0
- package/src/types.ts +42 -0
- package/src/utils/diff.ts +71 -0
- package/src/utils/project.ts +99 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Output Handler
|
|
3
|
+
* Migrated from old src/repl/output.ts
|
|
4
|
+
*/
|
|
5
|
+
export declare class REPLOutput {
|
|
6
|
+
private spinner;
|
|
7
|
+
printError(error: string): void;
|
|
8
|
+
printWarning(warning: string): void;
|
|
9
|
+
printSuccess(message: string): void;
|
|
10
|
+
printInfo(message: string): void;
|
|
11
|
+
printDivider(char?: string, length?: number): void;
|
|
12
|
+
printHeader(text: string): void;
|
|
13
|
+
startSpinner(text: string): void;
|
|
14
|
+
stopSpinner(): void;
|
|
15
|
+
stopSpinnerFail(text?: string): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
printBanner(): void;
|
|
18
|
+
printHelp(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/tui/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAoB;IAEnC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhC,YAAY,CAAC,IAAI,SAAM,EAAE,MAAM,SAAK,GAAG,IAAI;IAI3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,WAAW,IAAI,IAAI;IAOnB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOpC,KAAK,IAAI,IAAI;IAIb,WAAW,IAAI,IAAI;IASnB,SAAS,IAAI,IAAI;CAclB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Output Handler
|
|
3
|
+
* Migrated from old src/repl/output.ts
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
export class REPLOutput {
|
|
8
|
+
spinner = null;
|
|
9
|
+
printError(error) {
|
|
10
|
+
console.error(chalk.red(`\n❌ Error: ${error}`));
|
|
11
|
+
}
|
|
12
|
+
printWarning(warning) {
|
|
13
|
+
console.warn(chalk.yellow(`\n⚠️ ${warning}`));
|
|
14
|
+
}
|
|
15
|
+
printSuccess(message) {
|
|
16
|
+
console.log(chalk.green(`\n✅ ${message}`));
|
|
17
|
+
}
|
|
18
|
+
printInfo(message) {
|
|
19
|
+
console.log(chalk.gray(message));
|
|
20
|
+
}
|
|
21
|
+
printDivider(char = '─', length = 40) {
|
|
22
|
+
console.log(chalk.gray(char.repeat(length)));
|
|
23
|
+
}
|
|
24
|
+
printHeader(text) {
|
|
25
|
+
this.printDivider();
|
|
26
|
+
console.log(chalk.cyan(text));
|
|
27
|
+
this.printDivider();
|
|
28
|
+
}
|
|
29
|
+
startSpinner(text) {
|
|
30
|
+
this.spinner = ora({ text, color: 'cyan', spinner: 'dots' }).start();
|
|
31
|
+
}
|
|
32
|
+
stopSpinner() {
|
|
33
|
+
if (this.spinner) {
|
|
34
|
+
this.spinner.stop();
|
|
35
|
+
this.spinner = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
stopSpinnerFail(text) {
|
|
39
|
+
if (this.spinner) {
|
|
40
|
+
this.spinner.fail(text || this.spinner.text);
|
|
41
|
+
this.spinner = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
clear() {
|
|
45
|
+
console.clear();
|
|
46
|
+
}
|
|
47
|
+
printBanner() {
|
|
48
|
+
console.log(chalk.cyan(`
|
|
49
|
+
╔═══════════════════════════════════════╗
|
|
50
|
+
║ 🤖 Thatgfsj Code v0.3.0 ║
|
|
51
|
+
║ AI Coding Assistant ║
|
|
52
|
+
╚═══════════════════════════════════════╝
|
|
53
|
+
`));
|
|
54
|
+
}
|
|
55
|
+
printHelp() {
|
|
56
|
+
console.log(`
|
|
57
|
+
${chalk.cyan('Commands:')}
|
|
58
|
+
${chalk.gray('exit, Ctrl+C')} - Exit
|
|
59
|
+
${chalk.gray('clear')} - Clear screen
|
|
60
|
+
${chalk.gray('help')} - Show this help
|
|
61
|
+
${chalk.gray('tools')} - List available tools
|
|
62
|
+
${chalk.gray('model')} - Show current model
|
|
63
|
+
|
|
64
|
+
${chalk.cyan('Tips:')}
|
|
65
|
+
• Use ${chalk.gray('↑/↓')} for command history
|
|
66
|
+
• Use ${chalk.gray('Tab')} for auto-complete
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/tui/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAY,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,UAAU;IACb,OAAO,GAAe,IAAI,CAAC;IAEnC,UAAU,CAAC,KAAa;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,IAAI,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAa;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;;;;KAKtB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,CAAC;EACd,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;EAErB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;UACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;UACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;KACtB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL - Main interactive loop
|
|
3
|
+
* Migrated from old src/repl/loop.ts + src/index.ts interactive mode
|
|
4
|
+
*/
|
|
5
|
+
import { App } from '../app/index.js';
|
|
6
|
+
export declare class REPL {
|
|
7
|
+
private input;
|
|
8
|
+
private output;
|
|
9
|
+
private app;
|
|
10
|
+
private running;
|
|
11
|
+
constructor(app: App);
|
|
12
|
+
/**
|
|
13
|
+
* Start the REPL
|
|
14
|
+
*/
|
|
15
|
+
start(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Handle built-in commands
|
|
18
|
+
*/
|
|
19
|
+
private handleCommand;
|
|
20
|
+
/**
|
|
21
|
+
* Process user input with AI
|
|
22
|
+
*/
|
|
23
|
+
private processInput;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/tui/repl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,qBAAa,IAAI;IACf,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAS;gBAEZ,GAAG,EAAE,GAAG;IAMpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B;;OAEG;YACW,aAAa;IA0C3B;;OAEG;YACW,YAAY;CAsB3B"}
|
package/dist/tui/repl.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL - Main interactive loop
|
|
3
|
+
* Migrated from old src/repl/loop.ts + src/index.ts interactive mode
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { REPLInput } from './input.js';
|
|
7
|
+
import { REPLOutput } from './output.js';
|
|
8
|
+
import { ProjectContext } from '../utils/project.js';
|
|
9
|
+
export class REPL {
|
|
10
|
+
input;
|
|
11
|
+
output;
|
|
12
|
+
app;
|
|
13
|
+
running = false;
|
|
14
|
+
constructor(app) {
|
|
15
|
+
this.input = new REPLInput();
|
|
16
|
+
this.output = new REPLOutput();
|
|
17
|
+
this.app = app;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Start the REPL
|
|
21
|
+
*/
|
|
22
|
+
async start() {
|
|
23
|
+
this.running = true;
|
|
24
|
+
// Show banner
|
|
25
|
+
this.output.clear();
|
|
26
|
+
this.output.printBanner();
|
|
27
|
+
this.output.printInfo('Type "help" for available commands\n');
|
|
28
|
+
this.output.printDivider();
|
|
29
|
+
// Show project context
|
|
30
|
+
console.log(chalk.gray(ProjectContext.getSummary()));
|
|
31
|
+
this.output.printDivider();
|
|
32
|
+
console.log();
|
|
33
|
+
// Main loop
|
|
34
|
+
while (this.running) {
|
|
35
|
+
try {
|
|
36
|
+
const userInput = await this.input.prompt();
|
|
37
|
+
if (!userInput.trim())
|
|
38
|
+
continue;
|
|
39
|
+
// Handle commands
|
|
40
|
+
const handled = await this.handleCommand(userInput.trim());
|
|
41
|
+
if (handled)
|
|
42
|
+
continue;
|
|
43
|
+
// Process with AI
|
|
44
|
+
await this.processInput(userInput.trim());
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error.message === 'SIGINT')
|
|
48
|
+
continue;
|
|
49
|
+
this.output.printError(error.message);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Handle built-in commands
|
|
55
|
+
*/
|
|
56
|
+
async handleCommand(input) {
|
|
57
|
+
const cmd = input.toLowerCase();
|
|
58
|
+
switch (cmd) {
|
|
59
|
+
case 'exit':
|
|
60
|
+
case 'quit':
|
|
61
|
+
this.output.printInfo('\n👋 Goodbye!');
|
|
62
|
+
this.running = false;
|
|
63
|
+
this.input.close();
|
|
64
|
+
return true;
|
|
65
|
+
case 'clear':
|
|
66
|
+
this.output.clear();
|
|
67
|
+
this.output.printBanner();
|
|
68
|
+
return true;
|
|
69
|
+
case 'help':
|
|
70
|
+
this.output.printHelp();
|
|
71
|
+
return true;
|
|
72
|
+
case 'tools':
|
|
73
|
+
this.output.printHeader('🔧 Available Tools');
|
|
74
|
+
for (const tool of this.app.tools.list()) {
|
|
75
|
+
this.output.printInfo(` ${tool.name} - ${tool.description}`);
|
|
76
|
+
}
|
|
77
|
+
console.log();
|
|
78
|
+
return true;
|
|
79
|
+
case 'model':
|
|
80
|
+
this.output.printHeader('🤖 Current Model');
|
|
81
|
+
const cfg = this.app.config.get();
|
|
82
|
+
this.output.printInfo(` Provider: ${cfg.provider}`);
|
|
83
|
+
this.output.printInfo(` Model: ${cfg.model}`);
|
|
84
|
+
this.output.printInfo(` Base URL: ${cfg.baseUrl || 'default'}`);
|
|
85
|
+
console.log();
|
|
86
|
+
return true;
|
|
87
|
+
default:
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Process user input with AI
|
|
93
|
+
*/
|
|
94
|
+
async processInput(input) {
|
|
95
|
+
this.app.session.addMessage('user', input);
|
|
96
|
+
this.output.startSpinner('Thinking...');
|
|
97
|
+
let fullResponse = '';
|
|
98
|
+
try {
|
|
99
|
+
const stream = this.app.getAgent().run(this.app.session.getMessages());
|
|
100
|
+
for await (const chunk of stream) {
|
|
101
|
+
this.output.stopSpinner();
|
|
102
|
+
process.stdout.write(chunk);
|
|
103
|
+
fullResponse += chunk;
|
|
104
|
+
}
|
|
105
|
+
console.log(); // newline
|
|
106
|
+
this.app.session.addMessage('assistant', fullResponse);
|
|
107
|
+
this.app.session.truncate();
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.output.stopSpinnerFail(chalk.red(`Error: ${error.message}`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=repl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/tui/repl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welcome / Setup Wizard
|
|
3
|
+
* Migrated and simplified from old src/repl/welcome.ts
|
|
4
|
+
*/
|
|
5
|
+
export declare class WelcomeScreen {
|
|
6
|
+
/**
|
|
7
|
+
* Show welcome if no API key is configured
|
|
8
|
+
*/
|
|
9
|
+
static show(hasApiKey: boolean): void;
|
|
10
|
+
/**
|
|
11
|
+
* Interactive setup wizard
|
|
12
|
+
*/
|
|
13
|
+
static interactiveSetup(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=welcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAarC;;OAEG;WACU,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAmE/C"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welcome / Setup Wizard
|
|
3
|
+
* Migrated and simplified from old src/repl/welcome.ts
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import readline from 'readline';
|
|
7
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { PROVIDERS, getModelsForProvider, listProviders } from '../config/providers.js';
|
|
11
|
+
export class WelcomeScreen {
|
|
12
|
+
/**
|
|
13
|
+
* Show welcome if no API key is configured
|
|
14
|
+
*/
|
|
15
|
+
static show(hasApiKey) {
|
|
16
|
+
if (hasApiKey)
|
|
17
|
+
return;
|
|
18
|
+
const w = 62;
|
|
19
|
+
console.log(chalk.cyan('+') + chalk.white.bold(' Thatgfsj Code ') + chalk.cyan('-'.repeat(w - 16)) + '+');
|
|
20
|
+
console.log(chalk.cyan('|') + chalk.yellow(' 快速开始指南').padEnd(w) + chalk.cyan('|'));
|
|
21
|
+
console.log(chalk.cyan('|') + ' '.repeat(w) + chalk.cyan('|'));
|
|
22
|
+
console.log(chalk.cyan('|') + chalk.gray(' 运行 gfcode init 配置你的 API Key').padEnd(w) + chalk.cyan('|'));
|
|
23
|
+
console.log(chalk.cyan('|') + chalk.gray(' 或设置环境变量: OPENAI_API_KEY, SILICONFLOW_API_KEY 等').padEnd(w) + chalk.cyan('|'));
|
|
24
|
+
console.log(chalk.cyan('+') + '-'.repeat(w) + '+');
|
|
25
|
+
console.log();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Interactive setup wizard
|
|
29
|
+
*/
|
|
30
|
+
static async interactiveSetup() {
|
|
31
|
+
console.clear();
|
|
32
|
+
console.log(chalk.cyan('\n 🤖 Thatgfsj Code 配置向导\n'));
|
|
33
|
+
const rl = readline.createInterface({
|
|
34
|
+
input: process.stdin,
|
|
35
|
+
output: process.stdout,
|
|
36
|
+
});
|
|
37
|
+
const question = (prompt) => new Promise(resolve => rl.question(prompt, answer => resolve(answer.trim())));
|
|
38
|
+
try {
|
|
39
|
+
// Step 1: Choose provider
|
|
40
|
+
console.log(chalk.white(' 步骤 1/3: 选择 AI 提供商\n'));
|
|
41
|
+
const providers = listProviders();
|
|
42
|
+
providers.forEach((p, i) => {
|
|
43
|
+
console.log(chalk.green(` ${i + 1}. ${p.name}`));
|
|
44
|
+
});
|
|
45
|
+
console.log();
|
|
46
|
+
const choice = await question(chalk.green(' 请选择 (1-' + providers.length + '): '));
|
|
47
|
+
const selected = providers[parseInt(choice) - 1] || providers[0];
|
|
48
|
+
const providerName = selected.key;
|
|
49
|
+
// Step 2: Enter API Key
|
|
50
|
+
console.log(chalk.white('\n 步骤 2/3: 输入 API Key\n'));
|
|
51
|
+
console.log(chalk.gray(` 获取地址: ${PROVIDERS[providerName].baseUrl.replace('/v1', '').replace('/v1beta', '')}`));
|
|
52
|
+
const apiKey = await question(chalk.green(' 请输入 API Key: '));
|
|
53
|
+
// Step 3: Choose model
|
|
54
|
+
console.log(chalk.white('\n 步骤 3/3: 选择模型\n'));
|
|
55
|
+
const models = getModelsForProvider(providerName);
|
|
56
|
+
models.forEach((m, i) => {
|
|
57
|
+
console.log(chalk.green(` ${i + 1}. ${m.name}`) + chalk.gray(` - ${m.desc}`));
|
|
58
|
+
});
|
|
59
|
+
console.log();
|
|
60
|
+
const modelChoice = await question(chalk.green(' 请选择模型 (1-' + models.length + '): '));
|
|
61
|
+
const selectedModel = models[parseInt(modelChoice) - 1] || models[0];
|
|
62
|
+
// Save config
|
|
63
|
+
const configDir = join(homedir(), '.thatgfsj');
|
|
64
|
+
const configPath = join(configDir, 'config.json');
|
|
65
|
+
if (!existsSync(configDir)) {
|
|
66
|
+
mkdirSync(configDir, { recursive: true });
|
|
67
|
+
}
|
|
68
|
+
writeFileSync(configPath, JSON.stringify({
|
|
69
|
+
provider: providerName,
|
|
70
|
+
model: selectedModel.id,
|
|
71
|
+
apiKey,
|
|
72
|
+
temperature: 0.7,
|
|
73
|
+
maxTokens: 4096,
|
|
74
|
+
}, null, 2));
|
|
75
|
+
console.log(chalk.green('\n ✅ 配置已保存!'));
|
|
76
|
+
console.log(chalk.gray(` 提供商: ${providerName}`));
|
|
77
|
+
console.log(chalk.gray(` 模型: ${selectedModel.name}`));
|
|
78
|
+
console.log(chalk.gray(` 配置文件: ${configPath}`));
|
|
79
|
+
console.log(chalk.cyan('\n 运行 gfcode 开始使用\n'));
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
rl.close();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=welcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/tui/welcome.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global shared types for Thatgfsj Code
|
|
3
|
+
* Only the most fundamental types used across modules
|
|
4
|
+
*/
|
|
5
|
+
export type Role = 'system' | 'user' | 'assistant' | 'tool';
|
|
6
|
+
export interface ChatMessage {
|
|
7
|
+
role: Role;
|
|
8
|
+
content: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
tool_calls?: ToolCall[];
|
|
11
|
+
tool_call_id?: string;
|
|
12
|
+
reasoning_content?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ToolCall {
|
|
15
|
+
id: string;
|
|
16
|
+
type: 'function';
|
|
17
|
+
function: {
|
|
18
|
+
name: string;
|
|
19
|
+
arguments: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface ChatResponse {
|
|
23
|
+
content: string;
|
|
24
|
+
role: 'assistant';
|
|
25
|
+
usage?: {
|
|
26
|
+
prompt_tokens: number;
|
|
27
|
+
completion_tokens: number;
|
|
28
|
+
total_tokens: number;
|
|
29
|
+
};
|
|
30
|
+
tool_calls?: ToolCall[];
|
|
31
|
+
reasoning_content?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ChatOptions {
|
|
34
|
+
temperature?: number;
|
|
35
|
+
maxTokens?: number;
|
|
36
|
+
stream?: boolean;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff Preview - Show file changes in a readable format
|
|
3
|
+
* Migrated from old src/utils/diff-preview.ts
|
|
4
|
+
*/
|
|
5
|
+
export interface DiffResult {
|
|
6
|
+
original: string;
|
|
7
|
+
modified: string;
|
|
8
|
+
diff: string;
|
|
9
|
+
added: number;
|
|
10
|
+
removed: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class DiffPreview {
|
|
13
|
+
/**
|
|
14
|
+
* Generate a simple line-by-line diff
|
|
15
|
+
*/
|
|
16
|
+
static diff(original: string, modified: string): DiffResult;
|
|
17
|
+
/**
|
|
18
|
+
* Format diff for display
|
|
19
|
+
*/
|
|
20
|
+
static format(result: DiffResult): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqC3D;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAa1C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff Preview - Show file changes in a readable format
|
|
3
|
+
* Migrated from old src/utils/diff-preview.ts
|
|
4
|
+
*/
|
|
5
|
+
export class DiffPreview {
|
|
6
|
+
/**
|
|
7
|
+
* Generate a simple line-by-line diff
|
|
8
|
+
*/
|
|
9
|
+
static diff(original, modified) {
|
|
10
|
+
const originalLines = original.split('\n');
|
|
11
|
+
const modifiedLines = modified.split('\n');
|
|
12
|
+
const diffLines = [];
|
|
13
|
+
let added = 0;
|
|
14
|
+
let removed = 0;
|
|
15
|
+
// Simple diff: show removed (-) and added (+) lines
|
|
16
|
+
const maxLen = Math.max(originalLines.length, modifiedLines.length);
|
|
17
|
+
for (let i = 0; i < maxLen; i++) {
|
|
18
|
+
const orig = originalLines[i];
|
|
19
|
+
const mod = modifiedLines[i];
|
|
20
|
+
if (orig === mod) {
|
|
21
|
+
diffLines.push(` ${orig}`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (orig !== undefined) {
|
|
25
|
+
diffLines.push(`- ${orig}`);
|
|
26
|
+
removed++;
|
|
27
|
+
}
|
|
28
|
+
if (mod !== undefined) {
|
|
29
|
+
diffLines.push(`+ ${mod}`);
|
|
30
|
+
added++;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
original,
|
|
36
|
+
modified,
|
|
37
|
+
diff: diffLines.join('\n'),
|
|
38
|
+
added,
|
|
39
|
+
removed,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Format diff for display
|
|
44
|
+
*/
|
|
45
|
+
static format(result) {
|
|
46
|
+
const lines = result.diff.split('\n').map(line => {
|
|
47
|
+
if (line.startsWith('+'))
|
|
48
|
+
return `\x1b[32m${line}\x1b[0m`;
|
|
49
|
+
if (line.startsWith('-'))
|
|
50
|
+
return `\x1b[31m${line}\x1b[0m`;
|
|
51
|
+
return line;
|
|
52
|
+
});
|
|
53
|
+
return [
|
|
54
|
+
`\x1b[36m--- Changes: -${result.removed} / +${result.added} ---\x1b[0m`,
|
|
55
|
+
...lines,
|
|
56
|
+
`\x1b[36m--- End ---\x1b[0m`,
|
|
57
|
+
].join('\n');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAgB,EAAE,QAAgB;QAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,KAAK;YACL,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAkB;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,WAAW,IAAI,SAAS,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,WAAW,IAAI,SAAS,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,yBAAyB,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,KAAK,aAAa;YACvE,GAAG,KAAK;YACR,4BAA4B;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Context - Detect project type and gather info
|
|
3
|
+
* Migrated from old src/utils/project-context.ts + getProjectContext() from index.ts
|
|
4
|
+
*/
|
|
5
|
+
export interface ProjectInfo {
|
|
6
|
+
type: string;
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
fileCount: number;
|
|
10
|
+
dependencies: number;
|
|
11
|
+
}
|
|
12
|
+
export interface PackageJson {
|
|
13
|
+
name?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
dependencies?: Record<string, string>;
|
|
16
|
+
devDependencies?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
export declare class ProjectContext {
|
|
19
|
+
/**
|
|
20
|
+
* Get project context string for display
|
|
21
|
+
*/
|
|
22
|
+
static getSummary(cwd?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Count code files in directory (skipping node_modules, .git, etc.)
|
|
25
|
+
*/
|
|
26
|
+
static countCodeFiles(dir: string, maxDepth?: number): number;
|
|
27
|
+
/**
|
|
28
|
+
* Detect project type from files
|
|
29
|
+
*/
|
|
30
|
+
static detectType(cwd?: string): string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM;IA0BtD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM;IA+BxD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM;CAQvD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Context - Detect project type and gather info
|
|
3
|
+
* Migrated from old src/utils/project-context.ts + getProjectContext() from index.ts
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readdirSync, statSync, readFileSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
export class ProjectContext {
|
|
8
|
+
/**
|
|
9
|
+
* Get project context string for display
|
|
10
|
+
*/
|
|
11
|
+
static getSummary(cwd = process.cwd()) {
|
|
12
|
+
const info = [];
|
|
13
|
+
try {
|
|
14
|
+
const pkgPath = join(cwd, 'package.json');
|
|
15
|
+
if (existsSync(pkgPath)) {
|
|
16
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
17
|
+
info.push(`📦 Project: ${cwd}`);
|
|
18
|
+
info.push(` Name: ${pkg.name || 'unknown'}`);
|
|
19
|
+
const depCount = Object.keys(pkg.dependencies || {}).length;
|
|
20
|
+
if (depCount > 0)
|
|
21
|
+
info.push(` Deps: ${depCount} packages`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
info.push(`📁 Working dir: ${cwd}`);
|
|
25
|
+
}
|
|
26
|
+
const fileCount = ProjectContext.countCodeFiles(cwd);
|
|
27
|
+
if (fileCount > 0) {
|
|
28
|
+
info.push(` Files: ${fileCount} code files`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
info.push(`📁 Working dir: ${cwd}`);
|
|
33
|
+
}
|
|
34
|
+
return info.join('\n');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Count code files in directory (skipping node_modules, .git, etc.)
|
|
38
|
+
*/
|
|
39
|
+
static countCodeFiles(dir, maxDepth = 3) {
|
|
40
|
+
let count = 0;
|
|
41
|
+
const codeExts = /\.(ts|js|py|go|rs|java|cpp|c|h|tsx|jsx|vue|svelte)$/;
|
|
42
|
+
const walk = (d, depth) => {
|
|
43
|
+
if (depth > maxDepth)
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
const items = readdirSync(d);
|
|
47
|
+
for (const item of items) {
|
|
48
|
+
if (['node_modules', '.git', 'dist', 'build', '__pycache__'].includes(item))
|
|
49
|
+
continue;
|
|
50
|
+
const fullPath = join(d, item);
|
|
51
|
+
try {
|
|
52
|
+
const stat = statSync(fullPath);
|
|
53
|
+
if (stat.isDirectory()) {
|
|
54
|
+
walk(fullPath, depth + 1);
|
|
55
|
+
}
|
|
56
|
+
else if (codeExts.test(item)) {
|
|
57
|
+
count++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Skip inaccessible files
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Skip inaccessible directories
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
walk(dir, 0);
|
|
70
|
+
return count;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Detect project type from files
|
|
74
|
+
*/
|
|
75
|
+
static detectType(cwd = process.cwd()) {
|
|
76
|
+
if (existsSync(join(cwd, 'package.json')))
|
|
77
|
+
return 'node';
|
|
78
|
+
if (existsSync(join(cwd, 'Cargo.toml')))
|
|
79
|
+
return 'rust';
|
|
80
|
+
if (existsSync(join(cwd, 'go.mod')))
|
|
81
|
+
return 'go';
|
|
82
|
+
if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'requirements.txt')))
|
|
83
|
+
return 'python';
|
|
84
|
+
if (existsSync(join(cwd, 'build.gradle')))
|
|
85
|
+
return 'java';
|
|
86
|
+
return 'unknown';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
|