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.
Files changed (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/ROADMAP.md +61 -0
  4. package/dist/app/agent.d.ts +31 -0
  5. package/dist/app/agent.d.ts.map +1 -0
  6. package/dist/app/agent.js +106 -0
  7. package/dist/app/agent.js.map +1 -0
  8. package/dist/app/index.d.ts +39 -0
  9. package/dist/app/index.d.ts.map +1 -0
  10. package/dist/app/index.js +80 -0
  11. package/dist/app/index.js.map +1 -0
  12. package/dist/cmd/index.d.ts +12 -0
  13. package/dist/cmd/index.d.ts.map +1 -0
  14. package/dist/cmd/index.js +85 -0
  15. package/dist/cmd/index.js.map +1 -0
  16. package/dist/config/index.d.ts +39 -0
  17. package/dist/config/index.d.ts.map +1 -0
  18. package/dist/config/index.js +110 -0
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/config/providers.d.ts +23 -0
  21. package/dist/config/providers.d.ts.map +1 -0
  22. package/dist/config/providers.js +152 -0
  23. package/dist/config/providers.js.map +1 -0
  24. package/dist/config/types.d.ts +33 -0
  25. package/dist/config/types.d.ts.map +1 -0
  26. package/dist/config/types.js +5 -0
  27. package/dist/config/types.js.map +1 -0
  28. package/dist/hooks/index.d.ts +31 -0
  29. package/dist/hooks/index.d.ts.map +1 -0
  30. package/dist/hooks/index.js +71 -0
  31. package/dist/hooks/index.js.map +1 -0
  32. package/dist/llm/anthropic.d.ts +17 -0
  33. package/dist/llm/anthropic.d.ts.map +1 -0
  34. package/dist/llm/anthropic.js +126 -0
  35. package/dist/llm/anthropic.js.map +1 -0
  36. package/dist/llm/gemini.d.ts +16 -0
  37. package/dist/llm/gemini.d.ts.map +1 -0
  38. package/dist/llm/gemini.js +107 -0
  39. package/dist/llm/gemini.js.map +1 -0
  40. package/dist/llm/index.d.ts +48 -0
  41. package/dist/llm/index.d.ts.map +1 -0
  42. package/dist/llm/index.js +174 -0
  43. package/dist/llm/index.js.map +1 -0
  44. package/dist/llm/openai.d.ts +17 -0
  45. package/dist/llm/openai.d.ts.map +1 -0
  46. package/dist/llm/openai.js +113 -0
  47. package/dist/llm/openai.js.map +1 -0
  48. package/dist/llm/provider.d.ts +33 -0
  49. package/dist/llm/provider.d.ts.map +1 -0
  50. package/dist/llm/provider.js +6 -0
  51. package/dist/llm/provider.js.map +1 -0
  52. package/dist/mcp/client.d.ts +83 -0
  53. package/dist/mcp/client.d.ts.map +1 -0
  54. package/dist/mcp/client.js +267 -0
  55. package/dist/mcp/client.js.map +1 -0
  56. package/dist/prompts/index.d.ts +27 -0
  57. package/dist/prompts/index.d.ts.map +1 -0
  58. package/dist/prompts/index.js +102 -0
  59. package/dist/prompts/index.js.map +1 -0
  60. package/dist/session/compactor.d.ts +48 -0
  61. package/dist/session/compactor.d.ts.map +1 -0
  62. package/dist/session/compactor.js +77 -0
  63. package/dist/session/compactor.js.map +1 -0
  64. package/dist/session/index.d.ts +48 -0
  65. package/dist/session/index.d.ts.map +1 -0
  66. package/dist/session/index.js +69 -0
  67. package/dist/session/index.js.map +1 -0
  68. package/dist/session/message.d.ts +26 -0
  69. package/dist/session/message.d.ts.map +1 -0
  70. package/dist/session/message.js +34 -0
  71. package/dist/session/message.js.map +1 -0
  72. package/dist/tools/file.d.ts +46 -0
  73. package/dist/tools/file.d.ts.map +1 -0
  74. package/dist/tools/file.js +100 -0
  75. package/dist/tools/file.js.map +1 -0
  76. package/dist/tools/git.d.ts +52 -0
  77. package/dist/tools/git.d.ts.map +1 -0
  78. package/dist/tools/git.js +112 -0
  79. package/dist/tools/git.js.map +1 -0
  80. package/dist/tools/index.d.ts +42 -0
  81. package/dist/tools/index.d.ts.map +1 -0
  82. package/dist/tools/index.js +92 -0
  83. package/dist/tools/index.js.map +1 -0
  84. package/dist/tools/search.d.ts +36 -0
  85. package/dist/tools/search.d.ts.map +1 -0
  86. package/dist/tools/search.js +223 -0
  87. package/dist/tools/search.js.map +1 -0
  88. package/dist/tools/shell.d.ts +50 -0
  89. package/dist/tools/shell.d.ts.map +1 -0
  90. package/dist/tools/shell.js +117 -0
  91. package/dist/tools/shell.js.map +1 -0
  92. package/dist/tools/types.d.ts +68 -0
  93. package/dist/tools/types.d.ts.map +1 -0
  94. package/dist/tools/types.js +57 -0
  95. package/dist/tools/types.js.map +1 -0
  96. package/dist/tui/index.d.ts +8 -0
  97. package/dist/tui/index.d.ts.map +1 -0
  98. package/dist/tui/index.js +8 -0
  99. package/dist/tui/index.js.map +1 -0
  100. package/dist/tui/input.d.ts +14 -0
  101. package/dist/tui/input.d.ts.map +1 -0
  102. package/dist/tui/input.js +50 -0
  103. package/dist/tui/input.js.map +1 -0
  104. package/dist/tui/output.d.ts +20 -0
  105. package/dist/tui/output.d.ts.map +1 -0
  106. package/dist/tui/output.js +70 -0
  107. package/dist/tui/output.js.map +1 -0
  108. package/dist/tui/repl.d.ts +25 -0
  109. package/dist/tui/repl.d.ts.map +1 -0
  110. package/dist/tui/repl.js +114 -0
  111. package/dist/tui/repl.js.map +1 -0
  112. package/dist/tui/welcome.d.ts +15 -0
  113. package/dist/tui/welcome.d.ts.map +1 -0
  114. package/dist/tui/welcome.js +86 -0
  115. package/dist/tui/welcome.js.map +1 -0
  116. package/dist/types.d.ts +38 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js +6 -0
  119. package/dist/types.js.map +1 -0
  120. package/dist/utils/diff.d.ts +22 -0
  121. package/dist/utils/diff.d.ts.map +1 -0
  122. package/dist/utils/diff.js +60 -0
  123. package/dist/utils/diff.js.map +1 -0
  124. package/dist/utils/project.d.ts +32 -0
  125. package/dist/utils/project.d.ts.map +1 -0
  126. package/dist/utils/project.js +89 -0
  127. package/dist/utils/project.js.map +1 -0
  128. package/docs/API_KEY_GUIDE.md +236 -0
  129. package/docs/FAQ.md +182 -0
  130. package/install.bat +63 -0
  131. package/install.ps1 +238 -0
  132. package/install.sh +113 -0
  133. package/package.json +36 -0
  134. package/src/app/agent.ts +140 -0
  135. package/src/app/index.ts +101 -0
  136. package/src/cmd/index.ts +96 -0
  137. package/src/config/index.ts +130 -0
  138. package/src/config/providers.ts +160 -0
  139. package/src/config/types.ts +46 -0
  140. package/src/hooks/index.ts +111 -0
  141. package/src/llm/anthropic.ts +146 -0
  142. package/src/llm/gemini.ts +127 -0
  143. package/src/llm/index.ts +209 -0
  144. package/src/llm/openai.ts +132 -0
  145. package/src/llm/provider.ts +38 -0
  146. package/src/mcp/client.ts +330 -0
  147. package/src/prompts/index.ts +123 -0
  148. package/src/session/compactor.ts +103 -0
  149. package/src/session/index.ts +81 -0
  150. package/src/session/message.ts +42 -0
  151. package/src/tools/file.ts +117 -0
  152. package/src/tools/git.ts +132 -0
  153. package/src/tools/index.ts +108 -0
  154. package/src/tools/search.ts +263 -0
  155. package/src/tools/shell.ts +136 -0
  156. package/src/tools/types.ts +122 -0
  157. package/src/tui/index.ts +8 -0
  158. package/src/tui/input.ts +56 -0
  159. package/src/tui/output.ts +83 -0
  160. package/src/tui/repl.ts +131 -0
  161. package/src/tui/welcome.ts +101 -0
  162. package/src/types.ts +42 -0
  163. package/src/utils/diff.ts +71 -0
  164. package/src/utils/project.ts +99 -0
  165. 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"}
@@ -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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"}
@@ -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,6 @@
1
+ /**
2
+ * Global shared types for Thatgfsj Code
3
+ * Only the most fundamental types used across modules
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBAC5D,IAAI,QAAQ,GAAG,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,YAAY,QAAQ,WAAW,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,aAAa,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAW,EAAE,QAAQ,GAAG,CAAC;QAC7C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,qDAAqD,CAAC;QAEvE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE;YACxC,IAAI,KAAK,GAAG,QAAQ;gBAAE,OAAO;YAC7B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;4BACvB,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC5B,CAAC;6BAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC/B,KAAK,EAAE,CAAC;wBACV,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,0BAA0B;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACzD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACvD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC1G,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}