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.
- package/README.md +191 -0
- package/dist/ai/index.d.ts +20 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +251 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +3 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +106 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/files-cmd.d.ts +3 -0
- package/dist/commands/files-cmd.d.ts.map +1 -0
- package/dist/commands/files-cmd.js +29 -0
- package/dist/commands/files-cmd.js.map +1 -0
- package/dist/commands/git-cmd.d.ts +3 -0
- package/dist/commands/git-cmd.d.ts.map +1 -0
- package/dist/commands/git-cmd.js +114 -0
- package/dist/commands/git-cmd.js.map +1 -0
- package/dist/commands/help.d.ts +12 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +97 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/image-cmd.d.ts +3 -0
- package/dist/commands/image-cmd.d.ts.map +1 -0
- package/dist/commands/image-cmd.js +38 -0
- package/dist/commands/image-cmd.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +263 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/review-cmd.d.ts +4 -0
- package/dist/commands/review-cmd.d.ts.map +1 -0
- package/dist/commands/review-cmd.js +72 -0
- package/dist/commands/review-cmd.js.map +1 -0
- package/dist/commands/terminal-cmd.d.ts +2 -0
- package/dist/commands/terminal-cmd.d.ts.map +1 -0
- package/dist/commands/terminal-cmd.js +34 -0
- package/dist/commands/terminal-cmd.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +56 -0
- package/dist/config/index.js.map +1 -0
- package/dist/filesystem/index.d.ts +5 -0
- package/dist/filesystem/index.d.ts.map +1 -0
- package/dist/filesystem/index.js +174 -0
- package/dist/filesystem/index.js.map +1 -0
- package/dist/git/index.d.ts +9 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +121 -0
- package/dist/git/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +88 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/terminal/index.d.ts +11 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +64 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/index.d.ts +15 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +74 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/stream-renderer.d.ts +15 -0
- package/dist/ui/stream-renderer.d.ts.map +1 -0
- package/dist/ui/stream-renderer.js +78 -0
- package/dist/ui/stream-renderer.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +68 -0
- package/dist/utils/index.js.map +1 -0
- 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"}
|
package/dist/ai/index.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|