@nomad-e/bluma-cli 0.0.103 → 0.0.105
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 +66 -44
- package/dist/config/bluma-mcp.json +2 -1
- package/dist/config/native_tools.json +342 -0
- package/dist/main.js +2939 -789
- package/package.json +3 -18
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# BluMa
|
|
1
|
+
# BluMa — Base Language Unit · Model Agent
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/bluma)
|
|
4
4
|
[](LICENSE)
|
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
<img src="https://pharmaseedevsa.blob.core.windows.net/pharmassee-dev-storage/bluma.png" alt="Screenshot BluMa CLI" width="1000"/>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
-
BluMa
|
|
11
|
+
BluMa is a CLI-based model agent responsible for language-level code generation, refactoring and semantic transformations in the Factor AI stack. The project is a conversational assistant that interacts via terminal (CLI), built with React/Ink, supporting smart agents (LLM via OpenRouter), tool execution, persistent history, session management, and extensibility through external plugins/tools.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
## Table of Contents
|
|
16
16
|
- [Overview](#overview)
|
|
17
|
+
- [Why BluMa?](#why-bluma)
|
|
17
18
|
- [Key Features](#key-features)
|
|
18
19
|
- [Requirements](#requirements)
|
|
19
|
-
- [
|
|
20
|
+
- [Quick Start](#quick-start)
|
|
20
21
|
- [Installation](#installation)
|
|
22
|
+
- [Screenshots](#screenshots)
|
|
21
23
|
- [Usage](#usage)
|
|
22
24
|
- [Examples](#-usage-examples)
|
|
23
25
|
- [Configuration and Environment Variables](#configuration-and-environment-variables)
|
|
@@ -33,14 +35,27 @@ BluMa CLI is an independent agent for automation and advanced software engineeri
|
|
|
33
35
|
---
|
|
34
36
|
|
|
35
37
|
## <a name="overview"></a>Overview
|
|
36
|
-
BluMa CLI is a modular conversational agent and task automation framework focused on advanced software engineering workflows. It runs entirely in the terminal using React (via Ink) for a rich interactive UI, and is architected around a **UI layer** (`main.ts` + `App.tsx`) and an **agent layer** (`Agent` orchestrator + `BluMaAgent` core). It enables LLM-powered automation, documentation, refactoring, running complex development tasks, and integrating with both native and external tools. The system features persistent sessions, contextual reasoning, smart feedback, and an interactive confirmation system for controlled execution.
|
|
38
|
+
BluMa is a CLI-based model agent responsible for language-level code generation, refactoring and semantic transformations in the Factor AI stack. It is a modular conversational agent and task automation framework focused on advanced software engineering workflows. It runs entirely in the terminal using React (via Ink) for a rich interactive UI, and is architected around a **UI layer** (`main.ts` + `App.tsx`) and an **agent layer** (`Agent` orchestrator + `BluMaAgent` core). It enables LLM-powered automation, documentation, refactoring, running complex development tasks, and integrating with both native and external tools. The system features persistent sessions, contextual reasoning, smart feedback, and an interactive confirmation system for controlled execution.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Why BluMa?
|
|
43
|
+
BluMa stands out as the premier CLI-based model agent for software engineering:
|
|
44
|
+
|
|
45
|
+
- **Language-Level Expertise:** Specializes in code generation, refactoring, and semantic transformations, making it ideal for Factor AI stack development.
|
|
46
|
+
- **Conversational Automation:** Interact naturally with an AI that understands context, history, and your project's needs.
|
|
47
|
+
- **Secure & Controlled:** Built-in confirmations and whitelists ensure safe execution of powerful tools.
|
|
48
|
+
- **Extensible & Modular:** Easily add tools and plugins to adapt to your workflow.
|
|
49
|
+
- **Real-Time Collaboration:** Live overlays allow pair-programming style guidance during processing.
|
|
50
|
+
|
|
51
|
+
Choose BluMa for intelligent, efficient, and collaborative software engineering automation.
|
|
37
52
|
|
|
38
53
|
---
|
|
39
54
|
|
|
40
55
|
## <a name="key-features"></a>Key Features
|
|
41
56
|
- **Rich CLI interface** using React/Ink 5, with interactive prompts and custom components.
|
|
42
57
|
- **Session management:** automatic persistence of conversation and tool history via files.
|
|
43
|
-
- **Central agent (LLM):** orchestrated by
|
|
58
|
+
- **Central agent (LLM):** orchestrated by OpenRouter, enabling natural language-driven automation.
|
|
44
59
|
- **Tool invocation:** native and via MCP SDK for running commands, code manipulation, file management, and more.
|
|
45
60
|
- **Dynamic prompts:** builds live conversational context, behavioral rules, and technical history.
|
|
46
61
|
- **Smart feedback component** with technical suggestions and checks.
|
|
@@ -52,7 +67,7 @@ BluMa CLI is a modular conversational agent and task automation framework focuse
|
|
|
52
67
|
## <a name="requirements"></a>Requirements
|
|
53
68
|
- Node.js >= 18
|
|
54
69
|
- npm >= 9
|
|
55
|
-
-
|
|
70
|
+
- OpenRouter API key (get one at [openrouter.ai](https://openrouter.ai))
|
|
56
71
|
|
|
57
72
|
---
|
|
58
73
|
|
|
@@ -82,27 +97,17 @@ If you get permission errors, EXAMPLES:
|
|
|
82
97
|
> Only use sudo to install, never to run the CLI.
|
|
83
98
|
|
|
84
99
|
### Setting Up Environment Variables
|
|
85
|
-
For BluMa CLI to operate
|
|
100
|
+
For BluMa CLI to operate, set the following environment variable globally in your system.
|
|
86
101
|
|
|
87
102
|
**Required:**
|
|
88
|
-
- `
|
|
89
|
-
- `AZURE_OPENAI_API_KEY`
|
|
90
|
-
- `AZURE_OPENAI_API_VERSION`
|
|
91
|
-
- `AZURE_OPENAI_DEPLOYMENT`
|
|
92
|
-
- `GITHUB_PERSONAL_ACCESS_TOKEN` (if you'll use GitHub)
|
|
93
|
-
- `NOTION_API_TOKEN` (if you'll use Notion)
|
|
103
|
+
- `OPENROUTER_API_KEY` (get your key at [openrouter.ai](https://openrouter.ai))
|
|
94
104
|
|
|
95
105
|
#### How to set environment variables globally:
|
|
96
106
|
|
|
97
107
|
**Linux/macOS:**
|
|
98
108
|
Add to your `~/.bashrc`, `~/.zshrc`, or equivalent:
|
|
99
109
|
```sh
|
|
100
|
-
export
|
|
101
|
-
export AZURE_OPENAI_API_KEY="your_key"
|
|
102
|
-
export AZURE_OPENAI_API_VERSION="2025-01-01-preview"
|
|
103
|
-
export AZURE_OPENAI_DEPLOYMENT="bluma-gpt"
|
|
104
|
-
export GITHUB_PERSONAL_ACCESS_TOKEN="..."
|
|
105
|
-
export NOTION_API_TOKEN="..."
|
|
110
|
+
export OPENROUTER_API_KEY="your_openrouter_key"
|
|
106
111
|
```
|
|
107
112
|
Then run:
|
|
108
113
|
```sh
|
|
@@ -111,23 +116,13 @@ source ~/.bashrc # or whichever file you edited
|
|
|
111
116
|
|
|
112
117
|
**Windows (CMD):**
|
|
113
118
|
```cmd
|
|
114
|
-
setx
|
|
115
|
-
setx AZURE_OPENAI_API_KEY "your_key"
|
|
116
|
-
setx AZURE_OPENAI_API_VERSION "2025-01-01-preview"
|
|
117
|
-
setx AZURE_OPENAI_DEPLOYMENT "bluma-gpt"
|
|
118
|
-
setx GITHUB_PERSONAL_ACCESS_TOKEN "..."
|
|
119
|
-
setx NOTION_API_TOKEN "..."
|
|
119
|
+
setx OPENROUTER_API_KEY "your_openrouter_key"
|
|
120
120
|
```
|
|
121
121
|
(Only needs to be run once per variable. Restart the terminal after.)
|
|
122
122
|
|
|
123
123
|
**Windows (PowerShell):**
|
|
124
124
|
```powershell
|
|
125
|
-
[Environment]::SetEnvironmentVariable("
|
|
126
|
-
[Environment]::SetEnvironmentVariable("AZURE_OPENAI_API_KEY", "your_key", "Machine")
|
|
127
|
-
[Environment]::SetEnvironmentVariable("AZURE_OPENAI_API_VERSION", "2025-01-01-preview", "Machine")
|
|
128
|
-
[Environment]::SetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT", "bluma-gpt", "Machine")
|
|
129
|
-
[Environment]::SetEnvironmentVariable("GITHUB_PERSONAL_ACCESS_TOKEN", "...", "Machine")
|
|
130
|
-
[Environment]::SetEnvironmentVariable("NOTION_API_TOKEN", "...", "Machine")
|
|
125
|
+
[Environment]::SetEnvironmentVariable("OPENROUTER_API_KEY", "your_openrouter_key", "Machine")
|
|
131
126
|
```
|
|
132
127
|
|
|
133
128
|
### ℹ️ Global Installation of npm Packages in PowerShell (Windows)
|
|
@@ -160,6 +155,40 @@ npx bluma
|
|
|
160
155
|
|
|
161
156
|
---
|
|
162
157
|
|
|
158
|
+
## Quick Start
|
|
159
|
+
|
|
160
|
+
Get up and running with BluMa in minutes:
|
|
161
|
+
|
|
162
|
+
1. **Install BluMa:**
|
|
163
|
+
```bash
|
|
164
|
+
npm install -g @nomad-e/bluma-cli
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
2. **Configure Environment:**
|
|
168
|
+
Set your OpenRouter API key (see [Configuration](#configuration-and-environment-variables)).
|
|
169
|
+
|
|
170
|
+
3. **Launch BluMa:**
|
|
171
|
+
```bash
|
|
172
|
+
bluma
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
4. **Interact:**
|
|
176
|
+
Start a conversation! Try commands like "Help me refactor this code" or "Run tests for my project."
|
|
177
|
+
|
|
178
|
+
For full installation details, see [Installation](#installation).
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Screenshots
|
|
183
|
+
|
|
184
|
+
Here's BluMa in action:
|
|
185
|
+
|
|
186
|
+

|
|
187
|
+
|
|
188
|
+
*BluMa's interactive CLI interface for conversational software engineering.*
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
163
192
|
## <a name="project-structure"></a>Project Structure
|
|
164
193
|
```
|
|
165
194
|
bluma-engineer/
|
|
@@ -240,15 +269,10 @@ Notes
|
|
|
240
269
|
---
|
|
241
270
|
|
|
242
271
|
## <a name="configuration-and-environment-variables"></a>Configuration and Environment Variables
|
|
243
|
-
You must create a `.env` file (copy if needed from `.env.example`) with the following
|
|
244
|
-
- `
|
|
245
|
-
- `AZURE_OPENAI_API_KEY`
|
|
246
|
-
- `AZURE_OPENAI_API_VERSION`
|
|
247
|
-
- `AZURE_OPENAI_DEPLOYMENT`
|
|
248
|
-
- `GITHUB_PERSONAL_ACCESS_TOKEN` (optional; required for GitHub integrations)
|
|
249
|
-
- `NOTION_API_TOKEN` (optional; required for Notion integrations)
|
|
272
|
+
You must create a `.env` file (copy if needed from `.env.example`) with the following variable:
|
|
273
|
+
- `OPENROUTER_API_KEY` (required; get from [openrouter.ai](https://openrouter.ai))
|
|
250
274
|
|
|
251
|
-
And others required by your agent/context
|
|
275
|
+
And others required by your agent/context.
|
|
252
276
|
|
|
253
277
|
Advanced config files are located in `src/app/agent/config/`.
|
|
254
278
|
|
|
@@ -261,7 +285,7 @@ Advanced config files are located in `src/app/agent/config/`.
|
|
|
261
285
|
- Bundler: esbuild, with `esbuild-plugin-node-externals`
|
|
262
286
|
- Test Runner: Jest 30 + babel-jest
|
|
263
287
|
- Transpilers: Babel presets (env, react, typescript)
|
|
264
|
-
- LLM/Agent:
|
|
288
|
+
- LLM/Agent: OpenRouter via API; MCP via `@modelcontextprotocol/sdk`
|
|
265
289
|
- Config loading: dotenv
|
|
266
290
|
- Utilities: uuid, diff, react-devtools-core
|
|
267
291
|
|
|
@@ -385,9 +409,7 @@ stateDiagram-v2
|
|
|
385
409
|
```mermaid
|
|
386
410
|
graph TD
|
|
387
411
|
CLI["CLI (BluMa)"] --> LocalFS[("Local File System")]
|
|
388
|
-
CLI -->
|
|
389
|
-
CLI --> GitHubAPI[("GitHub API")]
|
|
390
|
-
CLI --> NotionAPI[("Notion API")]
|
|
412
|
+
CLI --> OpenRouter[("OpenRouter API")]
|
|
391
413
|
CLI --> OtherAPIs[("Other External APIs")]
|
|
392
414
|
CLI --> MCPServer[("MCP Server / Plugins")]
|
|
393
415
|
```
|
|
@@ -472,7 +494,7 @@ We welcome contributions! For full details, read [CONTRIBUTING.md](CONTRIBUTING.
|
|
|
472
494
|
---
|
|
473
495
|
|
|
474
496
|
## ⚠️ Limitations / Next Steps
|
|
475
|
-
- Current LLM integration
|
|
497
|
+
- Current LLM integration uses OpenRouter; add more providers.
|
|
476
498
|
- Logging verbosity could be made configurable.
|
|
477
499
|
- Potential for richer plugin lifecycle (install/remove at runtime).
|
|
478
500
|
- Improve error reporting in subagents.
|
|
@@ -227,6 +227,348 @@
|
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
229
|
},
|
|
230
|
+
{
|
|
231
|
+
"type": "function",
|
|
232
|
+
"function": {
|
|
233
|
+
"name": "find_by_name",
|
|
234
|
+
"description": "Search for files and directories by name using glob patterns. Automatically ignores common directories like node_modules, .git, etc. Use this to quickly locate files in a project.",
|
|
235
|
+
"parameters": {
|
|
236
|
+
"type": "object",
|
|
237
|
+
"properties": {
|
|
238
|
+
"pattern": {
|
|
239
|
+
"type": "string",
|
|
240
|
+
"description": "Glob pattern to search for. Supports: * (wildcard), ? (single char), ** (recursive). Examples: '*.ts', 'test_*.py', 'README*'"
|
|
241
|
+
},
|
|
242
|
+
"directory": {
|
|
243
|
+
"type": "string",
|
|
244
|
+
"description": "Directory to search in. Defaults to current working directory.",
|
|
245
|
+
"default": "."
|
|
246
|
+
},
|
|
247
|
+
"extensions": {
|
|
248
|
+
"type": "array",
|
|
249
|
+
"items": {
|
|
250
|
+
"type": "string"
|
|
251
|
+
},
|
|
252
|
+
"description": "File extensions to filter (e.g., ['.ts', '.js']). If not provided, matches all."
|
|
253
|
+
},
|
|
254
|
+
"max_depth": {
|
|
255
|
+
"type": "integer",
|
|
256
|
+
"description": "Maximum directory depth to search. Default is 10.",
|
|
257
|
+
"default": 10
|
|
258
|
+
},
|
|
259
|
+
"include_hidden": {
|
|
260
|
+
"type": "boolean",
|
|
261
|
+
"description": "Include hidden files/directories (starting with .).",
|
|
262
|
+
"default": false
|
|
263
|
+
},
|
|
264
|
+
"exclude_patterns": {
|
|
265
|
+
"type": "array",
|
|
266
|
+
"items": {
|
|
267
|
+
"type": "string"
|
|
268
|
+
},
|
|
269
|
+
"description": "Additional patterns to exclude beyond defaults."
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"required": [
|
|
273
|
+
"pattern"
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"type": "function",
|
|
280
|
+
"function": {
|
|
281
|
+
"name": "grep_search",
|
|
282
|
+
"description": "Search for text patterns within files. Supports regex, case sensitivity, and context lines. Automatically skips binary files and common non-source directories. Use this to find code, strings, or patterns across a project.",
|
|
283
|
+
"parameters": {
|
|
284
|
+
"type": "object",
|
|
285
|
+
"properties": {
|
|
286
|
+
"query": {
|
|
287
|
+
"type": "string",
|
|
288
|
+
"description": "Text or regex pattern to search for."
|
|
289
|
+
},
|
|
290
|
+
"path": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"description": "File or directory path to search. Can be a specific file or a directory for recursive search."
|
|
293
|
+
},
|
|
294
|
+
"case_insensitive": {
|
|
295
|
+
"type": "boolean",
|
|
296
|
+
"description": "Ignore case when matching. Default is true.",
|
|
297
|
+
"default": true
|
|
298
|
+
},
|
|
299
|
+
"is_regex": {
|
|
300
|
+
"type": "boolean",
|
|
301
|
+
"description": "Treat query as a regular expression. Default is false (literal match).",
|
|
302
|
+
"default": false
|
|
303
|
+
},
|
|
304
|
+
"include_patterns": {
|
|
305
|
+
"type": "array",
|
|
306
|
+
"items": {
|
|
307
|
+
"type": "string"
|
|
308
|
+
},
|
|
309
|
+
"description": "Glob patterns for files to include (e.g., ['*.ts', '*.js']). If not provided, searches all text files."
|
|
310
|
+
},
|
|
311
|
+
"max_results": {
|
|
312
|
+
"type": "integer",
|
|
313
|
+
"description": "Maximum number of matches to return. Default is 100.",
|
|
314
|
+
"default": 100
|
|
315
|
+
},
|
|
316
|
+
"context_lines": {
|
|
317
|
+
"type": "integer",
|
|
318
|
+
"description": "Number of lines to show before/after each match. Default is 0.",
|
|
319
|
+
"default": 0
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"required": [
|
|
323
|
+
"query",
|
|
324
|
+
"path"
|
|
325
|
+
]
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"type": "function",
|
|
331
|
+
"function": {
|
|
332
|
+
"name": "view_file_outline",
|
|
333
|
+
"description": "Shows the structure of a code file: classes, functions, methods, interfaces, with line numbers. Useful for understanding file organization before editing. Supports TypeScript, JavaScript, Python, Java, Go, Rust, Ruby, PHP, C#, Swift, Kotlin, Scala, C/C++.",
|
|
334
|
+
"parameters": {
|
|
335
|
+
"type": "object",
|
|
336
|
+
"properties": {
|
|
337
|
+
"file_path": {
|
|
338
|
+
"type": "string",
|
|
339
|
+
"description": "Path to the file to analyze."
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"required": [
|
|
343
|
+
"file_path"
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"type": "function",
|
|
350
|
+
"function": {
|
|
351
|
+
"name": "run_command_async",
|
|
352
|
+
"description": "Start a command in background and get a command_id to track it. Use this for long-running commands like npm install, builds, or tests. The command runs asynchronously and you can check its status with command_status.",
|
|
353
|
+
"parameters": {
|
|
354
|
+
"type": "object",
|
|
355
|
+
"properties": {
|
|
356
|
+
"command": {
|
|
357
|
+
"type": "string",
|
|
358
|
+
"description": "The shell command to execute in background."
|
|
359
|
+
},
|
|
360
|
+
"cwd": {
|
|
361
|
+
"type": "string",
|
|
362
|
+
"description": "Working directory for command execution. Defaults to current directory."
|
|
363
|
+
},
|
|
364
|
+
"timeout": {
|
|
365
|
+
"type": "integer",
|
|
366
|
+
"description": "Timeout in seconds. 0 means no timeout. Default is 0.",
|
|
367
|
+
"default": 0
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
"required": [
|
|
371
|
+
"command"
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"type": "function",
|
|
378
|
+
"function": {
|
|
379
|
+
"name": "command_status",
|
|
380
|
+
"description": "Check the status of a background command started with run_command_async. Returns current status, output, and exit code if completed.",
|
|
381
|
+
"parameters": {
|
|
382
|
+
"type": "object",
|
|
383
|
+
"properties": {
|
|
384
|
+
"command_id": {
|
|
385
|
+
"type": "string",
|
|
386
|
+
"description": "The command ID returned by run_command_async."
|
|
387
|
+
},
|
|
388
|
+
"wait_seconds": {
|
|
389
|
+
"type": "integer",
|
|
390
|
+
"description": "Optionally wait up to N seconds for the command to complete before returning status. Default is 0 (no wait).",
|
|
391
|
+
"default": 0
|
|
392
|
+
},
|
|
393
|
+
"output_limit": {
|
|
394
|
+
"type": "integer",
|
|
395
|
+
"description": "Maximum characters of output to return. Default is 10000.",
|
|
396
|
+
"default": 10000
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"required": [
|
|
400
|
+
"command_id"
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"type": "function",
|
|
407
|
+
"function": {
|
|
408
|
+
"name": "send_command_input",
|
|
409
|
+
"description": "Send input to a running background command's stdin. Useful for commands that expect user input like confirmations (y/n).",
|
|
410
|
+
"parameters": {
|
|
411
|
+
"type": "object",
|
|
412
|
+
"properties": {
|
|
413
|
+
"command_id": {
|
|
414
|
+
"type": "string",
|
|
415
|
+
"description": "The command ID of the running command."
|
|
416
|
+
},
|
|
417
|
+
"input": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"description": "The input to send to the command. Include newline if needed to submit."
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
"required": [
|
|
423
|
+
"command_id",
|
|
424
|
+
"input"
|
|
425
|
+
]
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"type": "function",
|
|
431
|
+
"function": {
|
|
432
|
+
"name": "kill_command",
|
|
433
|
+
"description": "Terminate a running background command.",
|
|
434
|
+
"parameters": {
|
|
435
|
+
"type": "object",
|
|
436
|
+
"properties": {
|
|
437
|
+
"command_id": {
|
|
438
|
+
"type": "string",
|
|
439
|
+
"description": "The command ID of the command to kill."
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
"required": [
|
|
443
|
+
"command_id"
|
|
444
|
+
]
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"type": "function",
|
|
450
|
+
"function": {
|
|
451
|
+
"name": "task_boundary",
|
|
452
|
+
"description": "Indicate the start of a task or make an update to the current task. Use this to organize complex work into phases (PLANNING, EXECUTION, VERIFICATION). The UI will show this as a structured task view with progress tracking.",
|
|
453
|
+
"parameters": {
|
|
454
|
+
"type": "object",
|
|
455
|
+
"properties": {
|
|
456
|
+
"task_name": {
|
|
457
|
+
"type": "string",
|
|
458
|
+
"description": "Name of the task, e.g. 'Implementing Authentication'. Use the same name to update an existing task."
|
|
459
|
+
},
|
|
460
|
+
"mode": {
|
|
461
|
+
"type": "string",
|
|
462
|
+
"enum": [
|
|
463
|
+
"PLANNING",
|
|
464
|
+
"EXECUTION",
|
|
465
|
+
"VERIFICATION"
|
|
466
|
+
],
|
|
467
|
+
"description": "Current mode: PLANNING (research/design), EXECUTION (implementing), VERIFICATION (testing)."
|
|
468
|
+
},
|
|
469
|
+
"task_status": {
|
|
470
|
+
"type": "string",
|
|
471
|
+
"description": "Current activity, e.g. 'Creating authentication middleware'. Describes what you are about to do."
|
|
472
|
+
},
|
|
473
|
+
"task_summary": {
|
|
474
|
+
"type": "string",
|
|
475
|
+
"description": "Summary of what has been accomplished so far. Should be concise but comprehensive."
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"required": [
|
|
479
|
+
"task_name",
|
|
480
|
+
"mode",
|
|
481
|
+
"task_status",
|
|
482
|
+
"task_summary"
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"type": "function",
|
|
489
|
+
"function": {
|
|
490
|
+
"name": "search_web",
|
|
491
|
+
"description": "Search for programming solutions across developer-focused sources: Reddit (programming subreddits), GitHub (issues/discussions), StackOverflow, and X (link only). Use this to find solutions, best practices, and community discussions about errors or implementation approaches.",
|
|
492
|
+
"parameters": {
|
|
493
|
+
"type": "object",
|
|
494
|
+
"properties": {
|
|
495
|
+
"query": {
|
|
496
|
+
"type": "string",
|
|
497
|
+
"description": "Search query, e.g. 'typescript cannot find module', 'react useEffect infinite loop fix'"
|
|
498
|
+
},
|
|
499
|
+
"sources": {
|
|
500
|
+
"type": "array",
|
|
501
|
+
"items": {
|
|
502
|
+
"type": "string",
|
|
503
|
+
"enum": [
|
|
504
|
+
"reddit",
|
|
505
|
+
"github",
|
|
506
|
+
"stackoverflow",
|
|
507
|
+
"x"
|
|
508
|
+
]
|
|
509
|
+
},
|
|
510
|
+
"description": "Which sources to search. Default: ['reddit', 'github', 'stackoverflow']",
|
|
511
|
+
"default": [
|
|
512
|
+
"reddit",
|
|
513
|
+
"github",
|
|
514
|
+
"stackoverflow"
|
|
515
|
+
]
|
|
516
|
+
},
|
|
517
|
+
"max_results": {
|
|
518
|
+
"type": "integer",
|
|
519
|
+
"description": "Maximum total results to return. Default is 10.",
|
|
520
|
+
"default": 10
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
"required": [
|
|
524
|
+
"query"
|
|
525
|
+
]
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"type": "function",
|
|
531
|
+
"function": {
|
|
532
|
+
"name": "create_artifact",
|
|
533
|
+
"description": "Create or update an artifact file in the artifacts directory (~/.bluma/artifacts/). Use this to save implementation plans, walkthroughs, notes, or any document the user should review. Supports markdown files.",
|
|
534
|
+
"parameters": {
|
|
535
|
+
"type": "object",
|
|
536
|
+
"properties": {
|
|
537
|
+
"filename": {
|
|
538
|
+
"type": "string",
|
|
539
|
+
"description": "Name of the artifact file to create. Examples: 'implementation_plan.md', 'walkthrough.md', 'notes.md'."
|
|
540
|
+
},
|
|
541
|
+
"content": {
|
|
542
|
+
"type": "string",
|
|
543
|
+
"description": "Content to write to the artifact file. Supports markdown formatting."
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
"required": [
|
|
547
|
+
"filename",
|
|
548
|
+
"content"
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"type": "function",
|
|
555
|
+
"function": {
|
|
556
|
+
"name": "read_artifact",
|
|
557
|
+
"description": "Read an existing artifact file from the artifacts directory. Use this to retrieve previously saved plans, walkthroughs, or notes.",
|
|
558
|
+
"parameters": {
|
|
559
|
+
"type": "object",
|
|
560
|
+
"properties": {
|
|
561
|
+
"filename": {
|
|
562
|
+
"type": "string",
|
|
563
|
+
"description": "Name of the artifact file to read. Examples: 'implementation_plan.md', 'task.md'."
|
|
564
|
+
}
|
|
565
|
+
},
|
|
566
|
+
"required": [
|
|
567
|
+
"filename"
|
|
568
|
+
]
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
},
|
|
230
572
|
{
|
|
231
573
|
"type": "function",
|
|
232
574
|
"function": {
|