devcore-ai 1.0.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 (78) hide show
  1. package/README.md +191 -0
  2. package/dist/ai/index.d.ts +20 -0
  3. package/dist/ai/index.d.ts.map +1 -0
  4. package/dist/ai/index.js +251 -0
  5. package/dist/ai/index.js.map +1 -0
  6. package/dist/commands/config-cmd.d.ts +3 -0
  7. package/dist/commands/config-cmd.d.ts.map +1 -0
  8. package/dist/commands/config-cmd.js +106 -0
  9. package/dist/commands/config-cmd.js.map +1 -0
  10. package/dist/commands/files-cmd.d.ts +3 -0
  11. package/dist/commands/files-cmd.d.ts.map +1 -0
  12. package/dist/commands/files-cmd.js +29 -0
  13. package/dist/commands/files-cmd.js.map +1 -0
  14. package/dist/commands/git-cmd.d.ts +3 -0
  15. package/dist/commands/git-cmd.d.ts.map +1 -0
  16. package/dist/commands/git-cmd.js +114 -0
  17. package/dist/commands/git-cmd.js.map +1 -0
  18. package/dist/commands/help.d.ts +12 -0
  19. package/dist/commands/help.d.ts.map +1 -0
  20. package/dist/commands/help.js +97 -0
  21. package/dist/commands/help.js.map +1 -0
  22. package/dist/commands/image-cmd.d.ts +3 -0
  23. package/dist/commands/image-cmd.d.ts.map +1 -0
  24. package/dist/commands/image-cmd.js +38 -0
  25. package/dist/commands/image-cmd.js.map +1 -0
  26. package/dist/commands/index.d.ts +9 -0
  27. package/dist/commands/index.d.ts.map +1 -0
  28. package/dist/commands/index.js +263 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/review-cmd.d.ts +4 -0
  31. package/dist/commands/review-cmd.d.ts.map +1 -0
  32. package/dist/commands/review-cmd.js +72 -0
  33. package/dist/commands/review-cmd.js.map +1 -0
  34. package/dist/commands/terminal-cmd.d.ts +2 -0
  35. package/dist/commands/terminal-cmd.d.ts.map +1 -0
  36. package/dist/commands/terminal-cmd.js +34 -0
  37. package/dist/commands/terminal-cmd.js.map +1 -0
  38. package/dist/config/index.d.ts +6 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +56 -0
  41. package/dist/config/index.js.map +1 -0
  42. package/dist/filesystem/index.d.ts +5 -0
  43. package/dist/filesystem/index.d.ts.map +1 -0
  44. package/dist/filesystem/index.js +174 -0
  45. package/dist/filesystem/index.js.map +1 -0
  46. package/dist/git/index.d.ts +9 -0
  47. package/dist/git/index.d.ts.map +1 -0
  48. package/dist/git/index.js +121 -0
  49. package/dist/git/index.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +108 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/memory/index.d.ts +10 -0
  55. package/dist/memory/index.d.ts.map +1 -0
  56. package/dist/memory/index.js +88 -0
  57. package/dist/memory/index.js.map +1 -0
  58. package/dist/terminal/index.d.ts +11 -0
  59. package/dist/terminal/index.d.ts.map +1 -0
  60. package/dist/terminal/index.js +64 -0
  61. package/dist/terminal/index.js.map +1 -0
  62. package/dist/types.d.ts +67 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +3 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/ui/index.d.ts +15 -0
  67. package/dist/ui/index.d.ts.map +1 -0
  68. package/dist/ui/index.js +74 -0
  69. package/dist/ui/index.js.map +1 -0
  70. package/dist/ui/stream-renderer.d.ts +15 -0
  71. package/dist/ui/stream-renderer.d.ts.map +1 -0
  72. package/dist/ui/stream-renderer.js +78 -0
  73. package/dist/ui/stream-renderer.js.map +1 -0
  74. package/dist/utils/index.d.ts +13 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/index.js +68 -0
  77. package/dist/utils/index.js.map +1 -0
  78. package/package.json +58 -0
package/README.md ADDED
@@ -0,0 +1,191 @@
1
+ # DevCore AI
2
+
3
+ AI-Powered Coding Assistant for the Terminal.
4
+
5
+ A production-quality CLI that works inside your terminal — like Claude Code, Gemini CLI, or Codex CLI, but original.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g devcore-ai
11
+ ```
12
+
13
+ Or from source:
14
+
15
+ ```bash
16
+ git clone <repo>
17
+ cd devcore-ai
18
+ npm install
19
+ npm run build
20
+ npm link
21
+ ```
22
+
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ # Set your API key
27
+ devcore config
28
+
29
+ # Start chatting
30
+ devcore
31
+
32
+ # Or directly:
33
+ devcore chat
34
+ ```
35
+
36
+ ## Environment Variables
37
+
38
+ ```bash
39
+ # .env file or export directly
40
+ DEVCORE_API_KEY=sk-your-key-here
41
+ ```
42
+
43
+ ## Commands
44
+
45
+ ### Interactive Chat
46
+
47
+ ```bash
48
+ devcore # Start interactive chat (default command)
49
+ devcore chat # Same as above
50
+ ```
51
+
52
+ Type anything:
53
+
54
+ ```
55
+ Create a login page
56
+ Fix this React bug
57
+ Explain this algorithm
58
+ Generate a REST API
59
+ Optimize this function
60
+ ```
61
+
62
+ ### Slash Commands
63
+
64
+ | Command | Description |
65
+ |---------|-------------|
66
+ | `/help` | Show help message |
67
+ | `/fix` | Ask AI to fix issues |
68
+ | `/explain` | Explain code or concept |
69
+ | `/refactor` | Refactor code |
70
+ | `/review` | Code review |
71
+ | `/image <prompt>` | Generate an image |
72
+ | `/terminal <cmd>` | Execute a command |
73
+ | `/files` | List project files |
74
+ | `/git` | Git assistant |
75
+ | `/models` | List available models |
76
+ | `/settings` | View settings |
77
+ | `/clear` | Clear chat history |
78
+ | `/history` | Show chat history |
79
+ | `/save` | Save session |
80
+ | `/load` | Load session |
81
+ | `/sessions` | List sessions |
82
+ | `/config` | Open config menu |
83
+
84
+ ### Git Assistant
85
+
86
+ ```
87
+ /git status
88
+ /git diff
89
+ /git log
90
+ /git branch
91
+ /git commit # Auto-generates commit message
92
+ ```
93
+
94
+ ### Other Commands
95
+
96
+ ```bash
97
+ devcore config # Configure settings
98
+ devcore review # Review project code
99
+ devcore review src/app.ts # Review specific file
100
+ devcore exec npm install # Execute with confirmation
101
+ ```
102
+
103
+ ## Configuration
104
+
105
+ Run `devcore config` to set:
106
+
107
+ - **API Key** — Your OpenAI, Anthropic, or Gemini key
108
+ - **Provider** — `openai` | `anthropic` | `gemini`
109
+ - **Model** — e.g. `gpt-4o`, `claude-sonnet-4-20250514`, `gemini-2.0-flash`
110
+ - **Temperature** — 0.0 to 2.0
111
+ - **Max Tokens** — Response length limit
112
+
113
+ Config is stored at `~/.devcore/config.json`.
114
+
115
+ ## Providers
116
+
117
+ ### OpenAI
118
+
119
+ ```bash
120
+ # Set key
121
+ export DEVCORE_API_KEY=sk-...
122
+
123
+ # Or use devcore config
124
+ devcore config
125
+ ```
126
+
127
+ Models: `gpt-4o`, `gpt-4o-mini`, `gpt-4-turbo`, `o1-preview`, `o1-mini`
128
+
129
+ ### Anthropic
130
+
131
+ ```bash
132
+ export DEVCORE_API_KEY=sk-ant-...
133
+ ```
134
+
135
+ Models: `claude-sonnet-4-20250514`, `claude-3-5-haiku-20241022`, `claude-3-opus-20240229`
136
+
137
+ ### Google Gemini
138
+
139
+ ```bash
140
+ export DEVCORE_API_KEY=AIza...
141
+ ```
142
+
143
+ Models: `gemini-2.0-flash`, `gemini-1.5-pro`, `gemini-1.5-flash`
144
+
145
+ ## Project Understanding
146
+
147
+ DevCore automatically scans your project on startup:
148
+
149
+ - Detects framework (React, Next.js, Vue, Svelte, Express, etc.)
150
+ - Reads `package.json` for dependencies
151
+ - Maps directory structure
152
+ - Identifies config files
153
+ - Lists source files
154
+
155
+ This context is sent to the AI for better responses.
156
+
157
+ ## File Operations
158
+
159
+ The AI can suggest file operations. Before creating or modifying files, it will show you the code. Use `/terminal` to write files or the AI will provide `cat`/`echo` commands you can confirm.
160
+
161
+ ## Terminal Execution
162
+
163
+ Commands like `npm install`, `git add`, `docker compose up` are always confirmed before running. Dangerous commands (like `rm -rf /`) are blocked.
164
+
165
+ ## Security
166
+
167
+ - Shell commands require confirmation
168
+ - File overwrites require confirmation
169
+ - Dangerous commands are blocked
170
+ - API keys are stored locally, never transmitted except to the provider
171
+
172
+ ## Project Structure
173
+
174
+ ```
175
+ src/
176
+ commands/ Command handlers and chat loop
177
+ ai/ AI service with multi-provider streaming
178
+ git/ Git operations (status, diff, log, commit)
179
+ terminal/ Shell command execution
180
+ filesystem/ Project scanning and file ops
181
+ config/ Configuration management
182
+ memory/ Session persistence
183
+ ui/ Terminal UI, colors, stream rendering
184
+ utils/ Shared utilities
185
+ types.ts TypeScript interfaces
186
+ index.ts CLI entry point
187
+ ```
188
+
189
+ ## License
190
+
191
+ MIT
@@ -0,0 +1,20 @@
1
+ import { AppConfig, AIStreamChunk } from "../types";
2
+ import { ProjectContext } from "../types";
3
+ export declare class AIService {
4
+ private client;
5
+ private config;
6
+ constructor(config: AppConfig);
7
+ updateConfig(config: AppConfig): void;
8
+ private getHeaders;
9
+ private getApiUrl;
10
+ buildSystemPrompt(ctx: ProjectContext | null): string;
11
+ streamChat(messages: {
12
+ role: string;
13
+ content: string;
14
+ }[], ctx: ProjectContext | null): AsyncGenerator<AIStreamChunk>;
15
+ private streamOpenAI;
16
+ private streamAnthropic;
17
+ private streamGemini;
18
+ generateImage(prompt: string, size: string): Promise<Buffer>;
19
+ }
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAe,aAAa,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAQ7B,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAQrC,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,SAAS;IAejB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM;IAuB9C,UAAU,CACf,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,EAC7C,GAAG,EAAE,cAAc,GAAG,IAAI,GACzB,cAAc,CAAC,aAAa,CAAC;YAqBjB,YAAY;YA4CZ,eAAe;YAgDf,YAAY;IAwDrB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmBnE"}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AIService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ class AIService {
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.client = axios_1.default.create({
12
+ timeout: 120000,
13
+ headers: this.getHeaders(),
14
+ });
15
+ }
16
+ updateConfig(config) {
17
+ this.config = config;
18
+ this.client = axios_1.default.create({
19
+ timeout: 120000,
20
+ headers: this.getHeaders(),
21
+ });
22
+ }
23
+ getHeaders() {
24
+ switch (this.config.provider) {
25
+ case "openai":
26
+ return {
27
+ Authorization: `Bearer ${this.config.apiKey}`,
28
+ "Content-Type": "application/json",
29
+ };
30
+ case "anthropic":
31
+ return {
32
+ "x-api-key": this.config.apiKey,
33
+ "anthropic-version": "2023-06-01",
34
+ "Content-Type": "application/json",
35
+ };
36
+ case "gemini":
37
+ return {
38
+ "Content-Type": "application/json",
39
+ };
40
+ case "groq":
41
+ return {
42
+ Authorization: `Bearer ${this.config.apiKey}`,
43
+ "Content-Type": "application/json",
44
+ };
45
+ default:
46
+ return { "Content-Type": "application/json" };
47
+ }
48
+ }
49
+ getApiUrl() {
50
+ switch (this.config.provider) {
51
+ case "openai":
52
+ return "https://api.openai.com/v1/chat/completions";
53
+ case "anthropic":
54
+ return "https://api.anthropic.com/v1/messages";
55
+ case "gemini":
56
+ return `https://generativelanguage.googleapis.com/v1beta/models/${this.config.model}:streamGenerateContent?key=${this.config.apiKey}`;
57
+ case "groq":
58
+ return "https://api.groq.com/openai/v1/chat/completions";
59
+ default:
60
+ return "https://api.openai.com/v1/chat/completions";
61
+ }
62
+ }
63
+ buildSystemPrompt(ctx) {
64
+ let prompt = `You are DevCore AI, an expert coding assistant. You help developers write, debug, review, and understand code.
65
+
66
+ Rules:
67
+ - Provide clear, concise, production-quality code
68
+ - Always explain your reasoning briefly
69
+ - When generating code, use markdown fenced code blocks with language tags
70
+ - When modifying files, output the COMPLETE file content
71
+ - Suggest best practices and patterns
72
+ - Never include secrets or credentials in code`;
73
+ if (ctx) {
74
+ prompt += `\n\nProject Context:
75
+ - Root: ${ctx.rootPath}
76
+ - Framework: ${ctx.framework}
77
+ - Dependencies: ${ctx.dependencies.join(", ")}
78
+ - Config files: ${ctx.configFiles.join(", ")}
79
+ - Source files: ${ctx.sourceFiles.slice(0, 30).join(", ")}`;
80
+ }
81
+ return prompt;
82
+ }
83
+ async *streamChat(messages, ctx) {
84
+ const systemPrompt = this.buildSystemPrompt(ctx);
85
+ const apiMessages = [
86
+ { role: "system", content: systemPrompt },
87
+ ...messages.map((m) => ({ role: m.role, content: m.content })),
88
+ ];
89
+ try {
90
+ if (this.config.provider === "anthropic") {
91
+ yield* this.streamAnthropic(apiMessages);
92
+ }
93
+ else if (this.config.provider === "gemini") {
94
+ yield* this.streamGemini(apiMessages);
95
+ }
96
+ else {
97
+ yield* this.streamOpenAI(apiMessages);
98
+ }
99
+ }
100
+ catch (err) {
101
+ const msg = err?.response?.data?.error?.message || err.message || "Unknown error";
102
+ throw new Error(`AI request failed: ${msg}`);
103
+ }
104
+ }
105
+ async *streamOpenAI(messages) {
106
+ const body = {
107
+ model: this.config.model,
108
+ messages,
109
+ temperature: this.config.temperature,
110
+ max_tokens: this.config.maxTokens,
111
+ stream: true,
112
+ };
113
+ const response = await this.client.post(this.getApiUrl(), body, {
114
+ responseType: "stream",
115
+ });
116
+ const stream = response.data;
117
+ let buffer = "";
118
+ for await (const chunk of stream) {
119
+ buffer += chunk.toString();
120
+ const lines = buffer.split("\n");
121
+ buffer = lines.pop() || "";
122
+ for (const line of lines) {
123
+ if (!line.startsWith("data: "))
124
+ continue;
125
+ const data = line.slice(6).trim();
126
+ if (data === "[DONE]") {
127
+ yield { content: "", done: true };
128
+ return;
129
+ }
130
+ try {
131
+ const parsed = JSON.parse(data);
132
+ const content = parsed.choices?.[0]?.delta?.content;
133
+ if (content) {
134
+ yield { content, done: false };
135
+ }
136
+ }
137
+ catch {
138
+ // skip malformed JSON
139
+ }
140
+ }
141
+ }
142
+ yield { content: "", done: true };
143
+ }
144
+ async *streamAnthropic(messages) {
145
+ const systemMsg = messages.find((m) => m.role === "system");
146
+ const chatMsgs = messages.filter((m) => m.role !== "system");
147
+ const body = {
148
+ model: this.config.model,
149
+ max_tokens: this.config.maxTokens,
150
+ system: systemMsg?.content || "",
151
+ messages: chatMsgs,
152
+ stream: true,
153
+ };
154
+ const response = await this.client.post(this.getApiUrl(), body, {
155
+ responseType: "stream",
156
+ });
157
+ const stream = response.data;
158
+ let buffer = "";
159
+ for await (const chunk of stream) {
160
+ buffer += chunk.toString();
161
+ const lines = buffer.split("\n");
162
+ buffer = lines.pop() || "";
163
+ for (const line of lines) {
164
+ if (!line.startsWith("data: "))
165
+ continue;
166
+ const data = line.slice(6).trim();
167
+ try {
168
+ const parsed = JSON.parse(data);
169
+ if (parsed.type === "content_block_delta") {
170
+ const text = parsed.delta?.text;
171
+ if (text) {
172
+ yield { content: text, done: false };
173
+ }
174
+ }
175
+ else if (parsed.type === "message_stop") {
176
+ yield { content: "", done: true };
177
+ return;
178
+ }
179
+ }
180
+ catch {
181
+ // skip
182
+ }
183
+ }
184
+ }
185
+ yield { content: "", done: true };
186
+ }
187
+ async *streamGemini(messages) {
188
+ const contents = messages
189
+ .filter((m) => m.role !== "system")
190
+ .map((m) => ({
191
+ role: m.role === "assistant" ? "model" : "user",
192
+ parts: [{ text: m.content }],
193
+ }));
194
+ const systemMsg = messages.find((m) => m.role === "system");
195
+ const body = {
196
+ contents,
197
+ generationConfig: {
198
+ temperature: this.config.temperature,
199
+ maxOutputTokens: this.config.maxTokens,
200
+ },
201
+ };
202
+ if (systemMsg) {
203
+ body.systemInstruction = { parts: [{ text: systemMsg.content }] };
204
+ }
205
+ const response = await this.client.post(this.getApiUrl(), body, {
206
+ responseType: "stream",
207
+ });
208
+ const stream = response.data;
209
+ let buffer = "";
210
+ for await (const chunk of stream) {
211
+ buffer += chunk.toString();
212
+ const lines = buffer.split("\n");
213
+ buffer = lines.pop() || "";
214
+ for (const line of lines) {
215
+ if (!line.trim())
216
+ continue;
217
+ try {
218
+ const parsed = JSON.parse(line);
219
+ const candidates = parsed.candidates;
220
+ if (candidates?.[0]?.content?.parts) {
221
+ for (const part of candidates[0].content.parts) {
222
+ if (part.text) {
223
+ yield { content: part.text, done: false };
224
+ }
225
+ }
226
+ }
227
+ }
228
+ catch {
229
+ // skip
230
+ }
231
+ }
232
+ }
233
+ yield { content: "", done: true };
234
+ }
235
+ async generateImage(prompt, size) {
236
+ if (this.config.provider !== "openai") {
237
+ throw new Error("Image generation is currently only supported with OpenAI provider");
238
+ }
239
+ const response = await this.client.post("https://api.openai.com/v1/images/generations", {
240
+ model: "dall-e-3",
241
+ prompt,
242
+ n: 1,
243
+ size: size || "1024x1024",
244
+ response_format: "b64_json",
245
+ });
246
+ const b64 = response.data.data[0].b64_json;
247
+ return Buffer.from(b64, "base64");
248
+ }
249
+ }
250
+ exports.AIService = AIService;
251
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AppConfig } from "../types";
2
+ export declare function configCommand(config: AppConfig): Promise<AppConfig>;
3
+ //# sourceMappingURL=config-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAqGzE"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configCommand = configCommand;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const config_1 = require("../config");
9
+ const ui_1 = require("../ui");
10
+ const help_1 = require("./help");
11
+ async function configCommand(config) {
12
+ const { action } = await inquirer_1.default.prompt([
13
+ {
14
+ type: "list",
15
+ name: "action",
16
+ message: "What would you like to configure?",
17
+ choices: [
18
+ { name: "View current settings", value: "view" },
19
+ { name: "Change API key", value: "apikey" },
20
+ { name: "Change provider", value: "provider" },
21
+ { name: "Change model", value: "model" },
22
+ { name: "Change temperature", value: "temperature" },
23
+ { name: "Change max tokens", value: "maxTokens" },
24
+ { name: "Back", value: "back" },
25
+ ],
26
+ },
27
+ ]);
28
+ if (action === "view") {
29
+ console.log((0, help_1.printSettings)(config));
30
+ return config;
31
+ }
32
+ if (action === "back")
33
+ return config;
34
+ if (action === "apikey") {
35
+ const { apiKey } = await inquirer_1.default.prompt([
36
+ {
37
+ type: "password",
38
+ name: "apiKey",
39
+ message: "Enter API key:",
40
+ mask: "*",
41
+ },
42
+ ]);
43
+ if (apiKey) {
44
+ config.apiKey = apiKey;
45
+ await (0, config_1.saveConfig)({ apiKey });
46
+ console.log((0, ui_1.success)("API key updated"));
47
+ }
48
+ }
49
+ if (action === "provider") {
50
+ const { provider } = await inquirer_1.default.prompt([
51
+ {
52
+ type: "list",
53
+ name: "provider",
54
+ message: "Select provider:",
55
+ choices: ["openai", "anthropic", "gemini", "groq"],
56
+ },
57
+ ]);
58
+ config.provider = provider;
59
+ await (0, config_1.saveConfig)({ provider });
60
+ console.log((0, ui_1.success)(`Provider set to ${provider}`));
61
+ }
62
+ if (action === "model") {
63
+ const models = help_1.MODELS[config.provider] || help_1.MODELS.openai;
64
+ const { model } = await inquirer_1.default.prompt([
65
+ {
66
+ type: "list",
67
+ name: "model",
68
+ message: "Select model:",
69
+ choices: models,
70
+ },
71
+ ]);
72
+ config.model = model;
73
+ await (0, config_1.saveConfig)({ model });
74
+ console.log((0, ui_1.success)(`Model set to ${model}`));
75
+ }
76
+ if (action === "temperature") {
77
+ const { temperature } = await inquirer_1.default.prompt([
78
+ {
79
+ type: "number",
80
+ name: "temperature",
81
+ message: "Temperature (0.0 - 2.0):",
82
+ default: config.temperature,
83
+ validate: (v) => (v >= 0 && v <= 2 ? true : "Must be 0-2"),
84
+ },
85
+ ]);
86
+ config.temperature = temperature;
87
+ await (0, config_1.saveConfig)({ temperature });
88
+ console.log((0, ui_1.success)(`Temperature set to ${temperature}`));
89
+ }
90
+ if (action === "maxTokens") {
91
+ const { maxTokens } = await inquirer_1.default.prompt([
92
+ {
93
+ type: "number",
94
+ name: "maxTokens",
95
+ message: "Max tokens:",
96
+ default: config.maxTokens,
97
+ validate: (v) => (v > 0 ? true : "Must be > 0"),
98
+ },
99
+ ]);
100
+ config.maxTokens = maxTokens;
101
+ await (0, config_1.saveConfig)({ maxTokens });
102
+ console.log((0, ui_1.success)(`Max tokens set to ${maxTokens}`));
103
+ }
104
+ return config;
105
+ }
106
+ //# sourceMappingURL=config-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ProjectContext } from "../types";
2
+ export declare function filesCommand(ctx: ProjectContext): string;
3
+ //# sourceMappingURL=files-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/files-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAuBxD"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.filesCommand = filesCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ui_1 = require("../ui");
9
+ function filesCommand(ctx) {
10
+ let output = (0, ui_1.header)("Project Structure");
11
+ output += ` ${(0, ui_1.dim)("Framework:")} ${chalk_1.default.cyan(ctx.framework)}\n`;
12
+ output += ` ${(0, ui_1.dim)("Root:")} ${ctx.rootPath}\n\n`;
13
+ output += chalk_1.default.bold(" Config Files:\n");
14
+ ctx.configFiles.forEach((f) => {
15
+ output += ` ${chalk_1.default.yellow(f)}\n`;
16
+ });
17
+ output += chalk_1.default.bold("\n Source Files:\n");
18
+ ctx.sourceFiles.forEach((f) => {
19
+ output += ` ${chalk_1.default.green(f)}\n`;
20
+ });
21
+ if (ctx.structure.length > 0) {
22
+ output += chalk_1.default.bold("\n Directory Structure:\n");
23
+ ctx.structure.forEach((d) => {
24
+ output += ` ${chalk_1.default.blue(d)}\n`;
25
+ });
26
+ }
27
+ return output;
28
+ }
29
+ //# sourceMappingURL=files-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-cmd.js","sourceRoot":"","sources":["../../src/commands/files-cmd.ts"],"names":[],"mappings":";;;;;AAIA,oCAuBC;AA3BD,kDAA0B;AAE1B,8BAA0C;AAE1C,SAAgB,YAAY,CAAC,GAAmB;IAC9C,IAAI,MAAM,GAAG,IAAA,WAAM,EAAC,mBAAmB,CAAC,CAAC;IACzC,MAAM,IAAI,KAAK,IAAA,QAAG,EAAC,YAAY,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;IAClE,MAAM,IAAI,KAAK,IAAA,QAAG,EAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,QAAQ,MAAM,CAAC;IAEtD,MAAM,IAAI,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1C,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,OAAO,eAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC5C,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,OAAO,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,OAAO,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { AIService } from "../ai";
2
+ export declare function gitCommand(args: string, ai: AIService): Promise<string>;
3
+ //# sourceMappingURL=git-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/git-cmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAmF7E"}