@nomad-e/bluma-cli 0.6.3 → 0.6.5
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 +23 -2
- package/dist/main.js +2 -33
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
**BluMa** is an independent AI agent CLI for automation and advanced software engineering. It combines powerful tool orchestration, multi-agent coordination, and intelligent context management to help you build software faster and with higher quality.
|
|
15
15
|
|
|
16
|
-
**Latest Version:** v0.6.
|
|
16
|
+
**Latest Version:** v0.6.4 (2026-05-10) — Circular dependency resolution, enhanced native tool metadata, improved multi-agent coordination, and professional release engineering.
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -528,6 +528,27 @@ Apache 2.0 — see [LICENSE](LICENSE) for details.
|
|
|
528
528
|
|
|
529
529
|
See [CHANGELOG.md](CHANGELOG.md) for detailed release notes.
|
|
530
530
|
|
|
531
|
+
### What's New in v0.6.4 (2026-05-10)
|
|
532
|
+
|
|
533
|
+
**Major Changes:**
|
|
534
|
+
- **Circular Dependency Resolution**: Fixed 'getNativeToolMetadata is not defined' error in tool metadata
|
|
535
|
+
- **Enhanced Native Tool Metadata**: Improved tool descriptions and metadata clarity across all 45+ tools
|
|
536
|
+
- **Improved Multi-Agent Coordination**: Better coordinator-worker communication and task tracking
|
|
537
|
+
- **Permission Mode Enhancement**: Full mode enabled for auto-approve of all tools
|
|
538
|
+
|
|
539
|
+
**Improvements:**
|
|
540
|
+
- Streamlined tool guidance in prompts
|
|
541
|
+
- Better error handling and user-friendly error messages
|
|
542
|
+
- Enhanced session persistence on LLM errors
|
|
543
|
+
- Improved worker registration for UI visibility
|
|
544
|
+
|
|
545
|
+
**Fixes:**
|
|
546
|
+
- Resolved circular dependency in tool metadata (prompt → tools → prompt cycle)
|
|
547
|
+
- Fixed worker registration for UI visibility in task_boundary tracking
|
|
548
|
+
- Improved session persistence on LLM errors
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
531
552
|
### What's New in v0.6.2 (2026-05-09)
|
|
532
553
|
|
|
533
554
|
**Major Features:**
|
|
@@ -550,4 +571,4 @@ See [CHANGELOG.md](CHANGELOG.md) for detailed release notes.
|
|
|
550
571
|
|
|
551
572
|
---
|
|
552
573
|
|
|
553
|
-
*BluMa CLI v0.6.
|
|
574
|
+
*BluMa CLI v0.6.4 — Built with TypeScript, React 19, Ink, and ES modules.*
|
package/dist/main.js
CHANGED
|
@@ -14933,8 +14933,6 @@ import path7 from "path";
|
|
|
14933
14933
|
import os6 from "os";
|
|
14934
14934
|
import { promises as fs8 } from "fs";
|
|
14935
14935
|
import { diffLines } from "diff";
|
|
14936
|
-
var MAX_DIFF_SIZE = 5e4;
|
|
14937
|
-
var MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
14938
14936
|
function normalizePath(filePath) {
|
|
14939
14937
|
try {
|
|
14940
14938
|
filePath = filePath.trim();
|
|
@@ -15138,18 +15136,6 @@ async function calculateEdit(filePath, oldString, newString, expectedReplacement
|
|
|
15138
15136
|
let currentContent = null;
|
|
15139
15137
|
try {
|
|
15140
15138
|
const stats = await fs8.stat(normalizedFilePath);
|
|
15141
|
-
if (stats.size > MAX_FILE_SIZE) {
|
|
15142
|
-
return {
|
|
15143
|
-
currentContent,
|
|
15144
|
-
newContent: "",
|
|
15145
|
-
occurrences: 0,
|
|
15146
|
-
error: {
|
|
15147
|
-
display: `File too large (${(stats.size / 1024 / 1024).toFixed(2)}MB). Maximum allowed: ${MAX_FILE_SIZE / 1024 / 1024}MB`,
|
|
15148
|
-
raw: `File size exceeds limit: ${normalizedFilePath}`
|
|
15149
|
-
},
|
|
15150
|
-
isNewFile: false
|
|
15151
|
-
};
|
|
15152
|
-
}
|
|
15153
15139
|
const buf = await fs8.readFile(normalizedFilePath, "utf-8");
|
|
15154
15140
|
currentContent = buf.replace(/\r\n/g, "\n");
|
|
15155
15141
|
} catch (e) {
|
|
@@ -15170,12 +15156,6 @@ async function calculateEdit(filePath, oldString, newString, expectedReplacement
|
|
|
15170
15156
|
}
|
|
15171
15157
|
function createDiff(filename, oldContent, newContent) {
|
|
15172
15158
|
try {
|
|
15173
|
-
if (oldContent.length > MAX_DIFF_SIZE || newContent.length > MAX_DIFF_SIZE) {
|
|
15174
|
-
return `--- a/${filename}
|
|
15175
|
-
+++ b/${filename}
|
|
15176
|
-
[Diff too large to display. File size: ${oldContent.length} -> ${newContent.length} bytes]
|
|
15177
|
-
`;
|
|
15178
|
-
}
|
|
15179
15159
|
const diff2 = diffLines(oldContent, newContent, {});
|
|
15180
15160
|
let diffString = `--- a/${filename}
|
|
15181
15161
|
+++ b/${filename}
|
|
@@ -15280,17 +15260,6 @@ async function applyBatchEditsInMemory(edits, readFileState) {
|
|
|
15280
15260
|
if (!slots.has(norm)) {
|
|
15281
15261
|
let content = null;
|
|
15282
15262
|
try {
|
|
15283
|
-
const stats = await fs8.stat(norm);
|
|
15284
|
-
if (stats.size > MAX_FILE_SIZE) {
|
|
15285
|
-
return {
|
|
15286
|
-
ok: false,
|
|
15287
|
-
failed: {
|
|
15288
|
-
success: false,
|
|
15289
|
-
error: `File too large (${(stats.size / 1024 / 1024).toFixed(2)}MB). Maximum allowed: ${MAX_FILE_SIZE / 1024 / 1024}MB`,
|
|
15290
|
-
file_path: norm
|
|
15291
|
-
}
|
|
15292
|
-
};
|
|
15293
|
-
}
|
|
15294
15263
|
const buf = await fs8.readFile(norm, "utf-8");
|
|
15295
15264
|
content = buf.replace(/\r\n/g, "\n");
|
|
15296
15265
|
} catch (err) {
|
|
@@ -16089,7 +16058,7 @@ import { promises as fsPromises2 } from "fs";
|
|
|
16089
16058
|
import os10 from "os";
|
|
16090
16059
|
var MAX_RESULTS3 = 200;
|
|
16091
16060
|
var MAX_MATCHES_PER_FILE = 10;
|
|
16092
|
-
var
|
|
16061
|
+
var MAX_FILE_SIZE = 1024 * 1024;
|
|
16093
16062
|
var MAX_LINE_LENGTH = 300;
|
|
16094
16063
|
var DEFAULT_IGNORE3 = /* @__PURE__ */ new Set([
|
|
16095
16064
|
"node_modules",
|
|
@@ -16213,7 +16182,7 @@ function createSearchPattern(query, isRegex, caseInsensitive) {
|
|
|
16213
16182
|
async function searchFile(filepath, baseDir, pattern, contextLines, maxMatchesPerFile) {
|
|
16214
16183
|
try {
|
|
16215
16184
|
const stat = await fsPromises2.stat(filepath);
|
|
16216
|
-
if (stat.size >
|
|
16185
|
+
if (stat.size > MAX_FILE_SIZE) return null;
|
|
16217
16186
|
const content = await fsPromises2.readFile(filepath, "utf-8");
|
|
16218
16187
|
const lines = content.split("\n");
|
|
16219
16188
|
const relativePath = path12.relative(baseDir, filepath).split(path12.sep).join("/");
|