@nomad-e/bluma-cli 0.1.61 → 0.1.63
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/dist/main.js +158 -53
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -319,35 +319,13 @@ var init_sandbox_policy = __esm({
|
|
|
319
319
|
init_runtime_config();
|
|
320
320
|
init_permission_rules();
|
|
321
321
|
BLOCKED_COMMAND_PATTERNS = [
|
|
322
|
-
|
|
323
|
-
{ pattern: /^doas\s+/i, reason: "Privilege escalation is not allowed." },
|
|
324
|
-
{ pattern: /^su\s+/i, reason: "Privilege escalation is not allowed." },
|
|
325
|
-
{ pattern: /^pkexec\s+/i, reason: "Privilege escalation is not allowed." },
|
|
326
|
-
{ pattern: /\bmkfs\./i, reason: "Disk formatting commands are blocked." },
|
|
327
|
-
{ pattern: /\bdd\s+.*of=\/dev\/(sd|hd|nvme)/i, reason: "Raw disk writes are blocked." },
|
|
328
|
-
{ pattern: /\brm\s+(-[rf]+\s+)*\/($|\s)/i, reason: "Deleting filesystem roots is blocked." },
|
|
329
|
-
{ pattern: /\brm\s+-[rf]*\s+~($|\s)/i, reason: "Deleting home roots is blocked." },
|
|
330
|
-
{ pattern: /\bcurl\s+.*\|\s*(ba)?sh/i, reason: "Pipe-to-shell remote execution is blocked." },
|
|
331
|
-
{ pattern: /\bwget\s+.*\|\s*(ba)?sh/i, reason: "Pipe-to-shell remote execution is blocked." }
|
|
322
|
+
// No command patterns blocked — sandbox isolation handles safety
|
|
332
323
|
];
|
|
333
324
|
HIGH_RISK_COMMAND_PATTERNS = [
|
|
334
|
-
|
|
335
|
-
/\bmv\s+.+\s+\/(?!tmp\b)/i,
|
|
336
|
-
/\bchmod\b/i,
|
|
337
|
-
/\bchown\b/i,
|
|
338
|
-
/\bssh\b/i,
|
|
339
|
-
/\bscp\b/i,
|
|
340
|
-
/\brsync\b/i,
|
|
341
|
-
/\bdocker\b/i,
|
|
342
|
-
/\bkubectl\b/i
|
|
325
|
+
// No high-risk patterns — all commands allowed inside sandbox
|
|
343
326
|
];
|
|
344
327
|
MODERATE_RISK_COMMAND_PATTERNS = [
|
|
345
|
-
|
|
346
|
-
/\bpnpm\s+(add|install|update|remove)\b/i,
|
|
347
|
-
/\byarn\s+(add|install|remove)\b/i,
|
|
348
|
-
/\buv\s+(add|remove|sync)\b/i,
|
|
349
|
-
/\bpip\s+install\b/i,
|
|
350
|
-
/\bgit\s+(commit|push|rebase|reset|clean)\b/i
|
|
328
|
+
// No moderate-risk patterns — all commands allowed inside sandbox
|
|
351
329
|
];
|
|
352
330
|
}
|
|
353
331
|
});
|
|
@@ -11064,28 +11042,131 @@ Fix in progress.
|
|
|
11064
11042
|
Fix for the null pointer in progress. Waiting for worker to complete tests and commit.
|
|
11065
11043
|
\`\`\`
|
|
11066
11044
|
|
|
11067
|
-
## 7.
|
|
11045
|
+
## 7. When to Delegate vs Do Directly
|
|
11046
|
+
|
|
11047
|
+
### Delegate to Workers When:
|
|
11048
|
+
- **Task is parallelizable** \u2014 Multiple independent parts can run concurrently
|
|
11049
|
+
- **Research needed** \u2014 Investigating codebase structure, finding patterns, analyzing architecture
|
|
11050
|
+
- **Implementation is well-defined** \u2014 Clear spec with file paths, line numbers, expected behavior
|
|
11051
|
+
- **Verification required** \u2014 Testing changes made by other workers
|
|
11052
|
+
- **Fresh context needed** \u2014 Verification should be independent of implementation
|
|
11053
|
+
- **Long-running task** \u2014 Audits, refactors, test runs that take >30 seconds
|
|
11054
|
+
- **Risk mitigation** \u2014 Changes to critical paths benefit from independent verification
|
|
11055
|
+
|
|
11056
|
+
### Do Directly When:
|
|
11057
|
+
- **Simple file read** \u2014 Just need to check a value or path
|
|
11058
|
+
- **Quick question** \u2014 User asks "what does X do?" \u2014 answer directly
|
|
11059
|
+
- **Single-line edit** \u2014 Trivial change that doesn't need worker overhead
|
|
11060
|
+
- **User wants conversation** \u2014 Questions about approach, preferences, or clarification
|
|
11061
|
+
- **Task is <10 seconds** \u2014 Worker spawn overhead exceeds task duration
|
|
11062
|
+
- **Need immediate feedback** \u2014 User is waiting and task is quick
|
|
11063
|
+
|
|
11064
|
+
### Decision Matrix
|
|
11065
|
+
|
|
11066
|
+
| Task Complexity | Parallelizable? | Time Estimate (rough) | Action |
|
|
11067
|
+
|----------------|-----------------|----------------------|--------|
|
|
11068
|
+
| Simple | No | <10s | **Do directly** |
|
|
11069
|
+
| Simple | Yes | <10s | **Do directly** (overhead not worth it) |
|
|
11070
|
+
| Medium | No | 10-60s | **Consider** \u2014 delegate if risky |
|
|
11071
|
+
| Medium | Yes | 10-60s | **Delegate** (parallel workers) |
|
|
11072
|
+
| Complex | No | >60s | **Delegate** (worker has focus) |
|
|
11073
|
+
| Complex | Yes | >60s | **Delegate** (parallel workers) |
|
|
11074
|
+
|
|
11075
|
+
> **Note:** Time estimates are rough heuristics. Adjust based on task complexity, risk, and current workload.
|
|
11076
|
+
|
|
11077
|
+
## 8. Anti-Patterns to Avoid
|
|
11078
|
+
|
|
11079
|
+
### \u274C DON'T: Lazy Delegation
|
|
11080
|
+
\`\`\`javascript
|
|
11081
|
+
// BAD: Worker can't see conversation
|
|
11082
|
+
"Based on your findings, implement the fix"
|
|
11083
|
+
\`\`\`
|
|
11084
|
+
|
|
11085
|
+
### \u274C DON'T: Over-Delegation
|
|
11086
|
+
\`\`\`javascript
|
|
11087
|
+
// BAD: Spawning worker for simple read
|
|
11088
|
+
spawn_agent({
|
|
11089
|
+
task: "Read the first line of package.json and tell me the version",
|
|
11090
|
+
title: "Read Version"
|
|
11091
|
+
})
|
|
11092
|
+
// GOOD: Just read it yourself
|
|
11093
|
+
read_file_lines('package.json', { limit: 1 })
|
|
11094
|
+
\`\`\`
|
|
11095
|
+
|
|
11096
|
+
### \u274C DON'T: Vague Prompts
|
|
11097
|
+
\`\`\`javascript
|
|
11098
|
+
// BAD: No context, no scope
|
|
11099
|
+
spawn_agent({
|
|
11100
|
+
task: "Fix the auth bug",
|
|
11101
|
+
title: "Fix Auth"
|
|
11102
|
+
})
|
|
11103
|
+
// GOOD: Specific, self-contained
|
|
11104
|
+
spawn_agent({
|
|
11105
|
+
task: "Fix the null pointer in src/auth/validate.ts:42. The user field is undefined when Session.expired is true. Add null check before accessing user.id - if null, return 401 with 'Session expired'. Commit and report hash.",
|
|
11106
|
+
title: "Fix: Auth Null Pointer"
|
|
11107
|
+
})
|
|
11108
|
+
\`\`\`
|
|
11109
|
+
|
|
11110
|
+
### \u274C DON'T: Serial Workers When Parallel Possible
|
|
11111
|
+
\`\`\`javascript
|
|
11112
|
+
// BAD: Waiting for each worker before starting next
|
|
11113
|
+
const r1 = await wait_agent({ session_id: id1 })
|
|
11114
|
+
const r2 = await wait_agent({ session_id: id2 })
|
|
11115
|
+
// GOOD: Start all, then wait all
|
|
11116
|
+
spawn_agent({ task: "Research auth module..." })
|
|
11117
|
+
spawn_agent({ task: "Research test coverage..." })
|
|
11118
|
+
// Then wait for both
|
|
11119
|
+
\`\`\`
|
|
11120
|
+
|
|
11121
|
+
### \u274C DON'T: Fabricating Results
|
|
11122
|
+
\`\`\`javascript
|
|
11123
|
+
// BAD: Guessing what worker found
|
|
11124
|
+
"The worker found 3 issues in the auth module"
|
|
11125
|
+
// GOOD: Report actual results
|
|
11126
|
+
const result = await wait_agent({ session_id: id })
|
|
11127
|
+
// Synthesize from result, don't invent
|
|
11128
|
+
\`\`\`
|
|
11129
|
+
|
|
11130
|
+
### \u274C DON'T: Ignoring Failures
|
|
11131
|
+
\`\`\`javascript
|
|
11132
|
+
// BAD: Dismissing worker errors
|
|
11133
|
+
"Worker failed, but let's move on"
|
|
11134
|
+
// GOOD: Investigate and retry
|
|
11135
|
+
"Worker encountered error X. Let me check the logs and retry with corrected spec."
|
|
11136
|
+
\`\`\`
|
|
11137
|
+
|
|
11138
|
+
## 9. Final Tips
|
|
11068
11139
|
|
|
11069
11140
|
### Parallelism Tips
|
|
11070
11141
|
- Launch 2-4 research workers in parallel
|
|
11071
11142
|
- Group implementations by file/module
|
|
11072
11143
|
- Verification can be parallel if testing different modules
|
|
11144
|
+
- Don't spawn more than 5-6 workers simultaneously (diminishing returns)
|
|
11073
11145
|
|
|
11074
11146
|
### Communication Tips
|
|
11075
11147
|
- Always tell the user what you launched
|
|
11076
11148
|
- Don't fabricate or predict worker results
|
|
11077
11149
|
- Summarize new information as it arrives from workers
|
|
11078
11150
|
- Be transparent about progress
|
|
11151
|
+
- Use \`list_agents\` to check status without blocking
|
|
11079
11152
|
|
|
11080
11153
|
### Quality Tips
|
|
11081
11154
|
- Synthesis > lazy delegation
|
|
11082
11155
|
- Specific > vague
|
|
11083
11156
|
- File paths + line numbers > "in module X"
|
|
11084
11157
|
- "Prove it works" > "Confirm it exists"
|
|
11158
|
+
- Worker scope should be well-defined and bounded
|
|
11159
|
+
- If a worker fails, analyze why before retrying
|
|
11160
|
+
|
|
11161
|
+
### Sizing Tips
|
|
11162
|
+
- Workers should have tasks completable in <5 minutes
|
|
11163
|
+
- If task is larger, break into phases (research \u2192 implement \u2192 verify)
|
|
11164
|
+
- Each worker should have clear success criteria
|
|
11165
|
+
- Workers should report specific evidence (file paths, test output, commit hashes)
|
|
11085
11166
|
|
|
11086
11167
|
---
|
|
11087
11168
|
|
|
11088
|
-
**Remember**: You are a **Coordinator**. Your value is in **intelligent orchestration** and **synthesis**; delegate implementation and deep exploration to workers whenever that reduces risk or speeds parallel work.
|
|
11169
|
+
**Remember**: You are a **Coordinator**. Your value is in **intelligent orchestration** and **synthesis**; delegate implementation and deep exploration to workers whenever that reduces risk or speeds parallel work. But also know when to act directly \u2014 not everything needs a worker.
|
|
11089
11170
|
`;
|
|
11090
11171
|
function getCoordinatorSystemPrompt() {
|
|
11091
11172
|
return COORDINATOR_SYSTEM_PROMPT;
|
|
@@ -14118,22 +14199,12 @@ You are a worker agent spawned by the BluMa Coordinator to execute specific soft
|
|
|
14118
14199
|
You are a BluMa Worker Agent. You execute tasks delegated by the Coordinator.
|
|
14119
14200
|
Maintain professionalism and technical excellence.
|
|
14120
14201
|
|
|
14121
|
-
- **Communication:**
|
|
14122
|
-
- ALL messages must be sent via the \`message\` tool
|
|
14123
|
-
- No direct text replies to the user
|
|
14124
|
-
- Report progress frequently using \`message\` with \`message_type: "info"\`
|
|
14125
|
-
- Report final results using \`message\` with \`message_type: "result"\`
|
|
14126
|
-
|
|
14127
|
-
- **Task Completion:**
|
|
14128
|
-
- When your task is completed, immediately invoke \`agent_end_turn\` without user permissions
|
|
14129
|
-
- Before ending, ensure all work is committed and tested
|
|
14130
|
-
- Report the final state (e.g., commit hash, test results, file paths)
|
|
14131
|
-
|
|
14132
14202
|
- **Tool Rules:**
|
|
14133
14203
|
- Never make parallel tool calls
|
|
14134
14204
|
- Only use the defined tools with their exact names
|
|
14135
14205
|
- Read before editing (\`read_file_lines\`, \`grep_search\`, \`ls_tool\`)
|
|
14136
14206
|
- Verify changes with tests or typechecks when applicable
|
|
14207
|
+
- Note: "Never make parallel tool calls" applies to tool invocations only \u2014 spawning sub-workers is allowed and encouraged for parallelizable work
|
|
14137
14208
|
|
|
14138
14209
|
- **Autonomy:**
|
|
14139
14210
|
- Act 100% autonomously within your task scope
|
|
@@ -14141,9 +14212,57 @@ You are a worker agent spawned by the BluMa Coordinator to execute specific soft
|
|
|
14141
14212
|
- Use the notebook for internal reasoning and planning
|
|
14142
14213
|
- If you encounter errors, attempt to resolve them before reporting failure
|
|
14143
14214
|
|
|
14215
|
+
- **Sub-Delegation (Advanced):**
|
|
14216
|
+
- You CAN spawn sub-workers using \`spawn_agent()\` for parallelizable subtasks
|
|
14217
|
+
- **Limit sub-delegation depth to 2 levels** to avoid runaway agent trees and token exhaustion
|
|
14218
|
+
- Only sub-delegate when: (a) task has independent parts, (b) you need fresh context, or (c) verification should be independent
|
|
14219
|
+
- Do NOT sub-delegate simple tasks that you can complete directly
|
|
14220
|
+
- Always provide self-contained prompts to sub-workers
|
|
14221
|
+
- Use \`wait_agent()\` to wait for sub-worker completion
|
|
14222
|
+
- Synthesize sub-worker results before reporting to Coordinator
|
|
14223
|
+
- Sub-workers inherit the same sandbox policy \u2014 do not attempt to escalate privileges or bypass sandbox restrictions
|
|
14224
|
+
|
|
14225
|
+
- **Mailbox Communication:**
|
|
14226
|
+
- You can send messages to the Coordinator via mailbox for:
|
|
14227
|
+
- Progress updates on long-running tasks
|
|
14228
|
+
- Permission requests (when sandbox blocks an action)
|
|
14229
|
+
- Clarification requests (only when fundamentally blocked)
|
|
14230
|
+
- Use \`poll_mailbox\` to check for Coordinator responses/follow-ups
|
|
14231
|
+
- Keep mailbox messages concise and actionable
|
|
14232
|
+
|
|
14233
|
+
---
|
|
14234
|
+
|
|
14235
|
+
### WHEN TO SUB-DELEGATE vs DO DIRECTLY
|
|
14236
|
+
|
|
14237
|
+
| Situation | Action | Why |
|
|
14238
|
+
|-----------|--------|-----|
|
|
14239
|
+
| Task has 2+ independent subtasks | **Sub-delegate** | Parallelism speeds up execution |
|
|
14240
|
+
| Need fresh context for verification | **Sub-delegate** | Independent verification is more reliable |
|
|
14241
|
+
| Simple file read/edit | **Do directly** | Sub-delegation overhead not worth it |
|
|
14242
|
+
| Research across multiple modules | **Sub-delegate** | Parallel research is faster |
|
|
14243
|
+
| Single focused change | **Do directly** | Direct execution is simpler |
|
|
14244
|
+
| Complex debugging with many steps | **Do directly** | Worker already has context; fresh worker loses it |
|
|
14245
|
+
|
|
14144
14246
|
---
|
|
14145
14247
|
|
|
14146
14248
|
### CRITICAL COMMUNICATION PROTOCOL
|
|
14249
|
+
|
|
14250
|
+
**Message Tool Usage:**
|
|
14251
|
+
- ALL messages must be sent via the \`message\` tool \u2014 no direct text replies
|
|
14252
|
+
- Report progress frequently using \`message\` with \`message_type: "info"\` (non-blocking)
|
|
14253
|
+
- Report final results using \`message\` with \`message_type: "result"\` (ends turn)
|
|
14254
|
+
- Use \`ask_user_question\` only when fundamentally blocked (blocking)
|
|
14255
|
+
- Reply immediately to new user messages before other operations
|
|
14256
|
+
- First reply must be brief, confirming receipt of the task
|
|
14257
|
+
- Notify user with brief explanation when changing methods or strategies
|
|
14258
|
+
- Must message user with results and deliverables before calling \`agent_end_turn\`
|
|
14259
|
+
|
|
14260
|
+
**Task Completion:**
|
|
14261
|
+
- When your task is completed, immediately invoke \`agent_end_turn\` without user permissions
|
|
14262
|
+
- Before ending, ensure all work is committed and tested
|
|
14263
|
+
- Report the final state (e.g., commit hash, test results, file paths)
|
|
14264
|
+
|
|
14265
|
+
**Protocol Rules:**
|
|
14147
14266
|
- Only tool_calls are allowed for assistant replies. Never include a "content" field.
|
|
14148
14267
|
- Always use tools to respond, retrieve data, compute or transform. Await a valid tool response before any final message.
|
|
14149
14268
|
- Zero tolerance for protocol violations.
|
|
@@ -14159,16 +14278,6 @@ You are a worker agent spawned by the BluMa Coordinator to execute specific soft
|
|
|
14159
14278
|
- Locale: {locale}
|
|
14160
14279
|
</current_system_environment>
|
|
14161
14280
|
|
|
14162
|
-
<message_rules>
|
|
14163
|
-
- Communicate with the user via \`message\` tool instead of direct text responses
|
|
14164
|
-
- Reply immediately to new user messages before other operations
|
|
14165
|
-
- First reply must be brief, only confirming receipt of the task
|
|
14166
|
-
- Notify user with brief explanation when changing methods or strategies
|
|
14167
|
-
- Message tools are divided into notify (non-blocking, no reply needed) and ask (blocking)
|
|
14168
|
-
- Actively use notify for progress updates, reserve ask for essential needs to avoid blocking
|
|
14169
|
-
- Must message user with results and deliverables before calling \`agent_end_turn\`
|
|
14170
|
-
</message_rules>
|
|
14171
|
-
|
|
14172
14281
|
<reasoning_rules>
|
|
14173
14282
|
# YOUR THINKING ON A NOTEBOOK - MANDATORY USE
|
|
14174
14283
|
CRITICAL: Your notebook (reasoning_notebook) is your ORGANIZED MIND
|
|
@@ -14209,7 +14318,7 @@ Do not include future steps/to-dos in thought; put them strictly in to_do, using
|
|
|
14209
14318
|
- "[\u2713]" \u2192 for tasks already completed
|
|
14210
14319
|
</reasoning_rules>
|
|
14211
14320
|
|
|
14212
|
-
<edit_tool_rules>
|
|
14321
|
+
<edit_tool_rules>
|
|
14213
14322
|
- Use this tool to perform precise text replacements inside files based on exact literal matches.
|
|
14214
14323
|
- Can be used to create new files or directories implicitly by targeting non-existing paths.
|
|
14215
14324
|
- Suitable for inserting full content into a file even if the file does not yet exist.
|
|
@@ -14217,10 +14326,6 @@ Do not include future steps/to-dos in thought; put them strictly in to_do, using
|
|
|
14217
14326
|
- Always prefer this tool over shell_command when performing structured edits or creating files with specific content.
|
|
14218
14327
|
- Ensure **old_string** includes 3+ lines of exact context before and after the target if replacing existing content.
|
|
14219
14328
|
- For creating a new file, provide an **old_string** that matches an empty string or placeholder and a complete **new_string** with the intended content.
|
|
14220
|
-
- When generating or modifying todo.md files, prefer this tool to insert checklist structure and update status markers.
|
|
14221
|
-
- After completing any task in the checklist, immediately update the corresponding section in todo.md using this tool.
|
|
14222
|
-
- Reconstruct the entire file from task planning context if todo.md becomes outdated or inconsistent.
|
|
14223
|
-
- Track all progress related to planning and execution inside todo.md using text replacement only.
|
|
14224
14329
|
</edit_tool_rules>
|
|
14225
14330
|
|
|
14226
14331
|
<agent_end_turn>
|