@get-blu/blu-code 1.0.1 → 1.1.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 CHANGED
@@ -21,7 +21,12 @@ Blu is a Go-powered terminal UI that transforms your command line into an intell
21
21
 
22
22
  ### Installation
23
23
 
24
- **Via install script:**
24
+ **Via npm (recommended):**
25
+ ```bash
26
+ npm install -g @get-blu/blu-code
27
+ ```
28
+
29
+ **Via raw script:**
25
30
  ```bash
26
31
  curl -fsSL https://raw.githubusercontent.com/Get-Blu/blu-code/main/install | bash
27
32
  ```
@@ -47,7 +52,7 @@ export ANTHROPIC_API_KEY="your-key-here"
47
52
  {
48
53
  "agents": {
49
54
  "coder": {
50
- "model": "claude-sonnet-4-5-20250929",
55
+ "model": "claude-3.7-sonnet",
51
56
  "maxTokens": 8192
52
57
  }
53
58
  },
@@ -93,6 +98,27 @@ Switch between Claude, GPT, Gemini, or any OpenAI-compatible endpoint. Use diffe
93
98
  3. **Review changes**: See proposed file modifications in the sidebar
94
99
  4. **Apply or reject**: Accept changes you want, skip the rest
95
100
 
101
+ ## Documentation
102
+
103
+ Comprehensive documentation is available in the `docs/` directory:
104
+
105
+ - [Introduction](docs/introduction.md)
106
+ - [Getting Started](docs/getting-started.md)
107
+ - [Configuration](docs/configuration.md)
108
+ - [Key Bindings](docs/key-bindings.md)
109
+ - [Architecture](docs/architecture/overview.md)
110
+
111
+ ### Detailed Features
112
+ - [AI Chat](docs/features/ai-chat.md)
113
+ - [File Operations](docs/features/file-operations.md)
114
+ - [LSP Intelligence](docs/features/lsp-and-intelligence.md)
115
+ - [MCP Servers](docs/features/mcp-servers.md)
116
+ - [Session Management](docs/features/session-management.md)
117
+
118
+ ### Guides
119
+ - [Best Practices](docs/guides/best-practices.md)
120
+ - [Troubleshooting](docs/guides/troubleshooting.md)
121
+
96
122
  ## Keyboard Shortcuts
97
123
 
98
124
  ### Global Shortcuts
@@ -202,26 +228,23 @@ Place `.blu.json` in your home directory (`~/.blu.json`) or project root:
202
228
  ### Supported Models
203
229
 
204
230
  **Anthropic (Claude):**
205
- - `claude-4.6-opus` - Claude 4.6 Opus (flagship capability)
206
- - `claude-3.7-sonnet` - Claude 3.7 Sonnet (recommended for coding)
231
+ - `claude-3.7-sonnet` - Recommended for coding (supports reasoning)
232
+ - `claude-3.5-sonnet` - Fast and highly capable
233
+ - `claude-4.6-opus` - Next-gen flagship capability
207
234
 
208
235
  **OpenAI:**
209
- - `gpt-5.3-codex` - GPT-5.3 Codex (latest agentic flagship)
210
- - `gpt-5.2` - GPT-5.2 (multimodal, fast)
211
- - `o3-ultra` - O3 Ultra (advanced reasoning)
236
+ - `o3-ultra` - Latest reasoning flagship
237
+ - `gpt-5.3-codex` - Specialized for agentic coding
238
+ - `gpt-4o` - Balanced speed and intelligence
212
239
 
213
240
  **Google:**
214
- - `gemini-3-deep-think` - Gemini 3 Deep Think (advanced scientific/engineering)
215
- - `gemini-3.0-pro` - Gemini 3.0 Pro (multimodal reasoning)
216
- - `gemini-2.0-flash` - Gemini 2.0 Flash (high speed intelligence)
241
+ - `gemini-3-deep-think` - Advanced reasoning and engineering
242
+ - `gemini-2.0-flash` - High-speed intelligence
243
+ - `gemini-1.5-pro` - Large context window
217
244
 
218
245
  **DeepSeek:**
219
- - `deepseek-v3.2` - DeepSeek V3.2
220
- - `deepseek-r1` - DeepSeek R1 (reasoning model)
221
-
222
- **xAI:**
223
- - `grok-4.1` - Grok 4.1
224
- - `grok-4.20` - Grok 4.20 (Enterprise)
246
+ - `deepseek-v3` - High performance open-weights model
247
+ - `deepseek-r1` - Reasoning focused model
225
248
 
226
249
  ### Environment Variables
227
250
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@get-blu/blu-code",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Terminal-based AI assistant for software development",
5
5
  "bin": {
6
6
  "blu": "./bin/cli.js"
@@ -23,4 +23,4 @@
23
23
  "README.md",
24
24
  "LICENSE"
25
25
  ]
26
- }
26
+ }
@@ -40,47 +40,55 @@ const url = `https://github.com/Get-Blu/blu-code/releases/download/v${version}/$
40
40
 
41
41
  console.log(`Downloading ${url} ...`);
42
42
 
43
- const destDir = path.join(__dirname, '..', 'bin');
44
- if (!fs.existsSync(destDir)) {
45
- fs.mkdirSync(destDir, { recursive: true });
46
- }
47
-
48
- const destFile = path.join(destDir, `blu${ext}`);
49
-
50
- const file = fs.createWriteStream(destFile);
43
+ const download = (url, dest) => {
44
+ return new Promise((resolve, reject) => {
45
+ const file = fs.createWriteStream(dest);
46
+ https.get(url, (response) => {
47
+ if (response.statusCode === 302 || response.statusCode === 301) {
48
+ file.close();
49
+ fs.unlinkSync(dest); // Clean up partial file before redirect
50
+ return resolve(download(response.headers.location, dest));
51
+ }
51
52
 
52
- https.get(url, (response) => {
53
- if (response.statusCode === 302 || response.statusCode === 301) {
54
- // Handle redirect
55
- https.get(response.headers.location, (response) => {
56
53
  if (response.statusCode !== 200) {
57
- console.error(`Failed to download binary: ${response.statusCode}`);
58
- process.exit(1);
54
+ file.close();
55
+ fs.unlinkSync(dest);
56
+ return reject(new Error(`Failed to download binary: HTTP ${response.statusCode}`));
59
57
  }
58
+
60
59
  response.pipe(file);
61
60
  file.on('finish', () => {
62
61
  file.close();
63
- console.log(`Download complete: ${destFile}`);
64
- if (platform !== 'win32') {
65
- fs.chmodSync(destFile, 0o755);
62
+ const stats = fs.statSync(dest);
63
+ if (stats.size === 0) {
64
+ fs.unlinkSync(dest);
65
+ return reject(new Error('Downloaded binary is empty'));
66
66
  }
67
+ resolve();
67
68
  });
68
- });
69
- } else if (response.statusCode !== 200) {
70
- console.error(`Failed to download binary: ${response.statusCode}`);
71
- process.exit(1);
72
- } else {
73
- response.pipe(file);
74
- file.on('finish', () => {
69
+ }).on('error', (err) => {
75
70
  file.close();
76
- console.log(`Download complete: ${destFile}`);
77
- if (platform !== 'win32') {
78
- fs.chmodSync(destFile, 0o755);
79
- }
71
+ if (fs.existsSync(dest)) fs.unlinkSync(dest);
72
+ reject(err);
80
73
  });
81
- }
82
- }).on('error', (err) => {
83
- fs.unlink(destFile, () => { }); // Delete the file async. (But we don't check result)
84
- console.error(`Error downloading binary: ${err.message}`);
85
- process.exit(1);
86
- });
74
+ });
75
+ };
76
+
77
+ const destDir = path.join(__dirname, '..', 'bin');
78
+ if (!fs.existsSync(destDir)) {
79
+ fs.mkdirSync(destDir, { recursive: true });
80
+ }
81
+
82
+ const destFile = path.join(destDir, `blu${ext}`);
83
+
84
+ download(url, destFile)
85
+ .then(() => {
86
+ console.log(`Download complete: ${destFile}`);
87
+ if (platform !== 'win32') {
88
+ fs.chmodSync(destFile, 0o755);
89
+ }
90
+ })
91
+ .catch((err) => {
92
+ console.error(`Error: ${err.message}`);
93
+ process.exit(1);
94
+ });
package/bin/blu.exe DELETED
Binary file