@nomad-e/bluma-cli 0.1.74 → 0.1.76
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 +115 -27
- package/dist/config/native_tools.json +27 -4
- package/dist/main.js +550 -304
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
> **Credit:** BluMa was conceived and architected by **Alex Fonseca**.
|
|
13
13
|
|
|
14
|
-
**Current Version:** 0.1.
|
|
14
|
+
**Current Version:** 0.1.74
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -42,7 +42,7 @@ BluMa operates as a **conversational agent** in the terminal, combining:
|
|
|
42
42
|
- **Rich UI Layer**: React/Ink 5 components for interactive prompts, live overlays, and real-time feedback
|
|
43
43
|
- **Agent Layer**: LLM orchestration via FactorRouter with tool invocation and context management
|
|
44
44
|
- **Runtime Layer**: Task tracking, plugin system, hooks, diagnostics, session management, and coordinator mode
|
|
45
|
-
- **Tool Layer**:
|
|
45
|
+
- **Tool Layer**: 45+ native tools + MCP SDK integration for external tools
|
|
46
46
|
|
|
47
47
|
The agent maintains persistent conversation history, workspace snapshots, and coding memory across sessions.
|
|
48
48
|
|
|
@@ -67,7 +67,7 @@ The agent maintains persistent conversation history, workspace snapshots, and co
|
|
|
67
67
|
- **Tool Execution Policy**: Intelligent decisions based on sandbox mode and safety
|
|
68
68
|
|
|
69
69
|
### Tools & Skills
|
|
70
|
-
- **
|
|
70
|
+
- **45+ Native Tools**: File operations, search, shell commands, web fetch, agent coordination, task management, MCP resources, cron scheduling, LSP queries, notebook editing
|
|
71
71
|
- **Coordinator Mode**: Orchestrator playbook for delegating work to background workers
|
|
72
72
|
- **MCP Integration**: Model Context Protocol SDK for external tool servers
|
|
73
73
|
- **Skills System**: Pluggable knowledge modules (git, PDF, Excel, etc.)
|
|
@@ -237,7 +237,7 @@ npm start
|
|
|
237
237
|
┌────────────────────────┼────────────────────────────────────┐
|
|
238
238
|
│ Tools Layer │
|
|
239
239
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|
240
|
-
│ │ Native Tools (
|
|
240
|
+
│ │ Native Tools (45+) │ │
|
|
241
241
|
│ │ edit_tool, file_write, shell_command, grep_search, │ │
|
|
242
242
|
│ │ spawn_agent, wait_agent, list_agents, │ │
|
|
243
243
|
│ │ todo, task_boundary, task_create, task_list, │ │
|
|
@@ -260,7 +260,7 @@ npm start
|
|
|
260
260
|
|
|
261
261
|
## Native Tools
|
|
262
262
|
|
|
263
|
-
BluMa includes **
|
|
263
|
+
BluMa includes **45+ built-in tools** organized by category:
|
|
264
264
|
|
|
265
265
|
### File Operations
|
|
266
266
|
| Tool | Description |
|
|
@@ -341,6 +341,18 @@ BluMa includes **40+ built-in tools** organized by category:
|
|
|
341
341
|
| `repl` | Interactive code execution (Python, Node, Bash) |
|
|
342
342
|
| `task_output` | Read task output in real-time |
|
|
343
343
|
|
|
344
|
+
### Specialized
|
|
345
|
+
| Tool | Description |
|
|
346
|
+
|------|-------------|
|
|
347
|
+
| `context_collapse` | Collapse context window |
|
|
348
|
+
| `dream_engine` | Auto-dream feature (coding memory consolidation) |
|
|
349
|
+
| `brief` | Generate project brief |
|
|
350
|
+
| `ctx_inspect` | Inspect current context |
|
|
351
|
+
| `snip` | Code snippet management |
|
|
352
|
+
| `coordinator_tools` | Coordinator mode utilities |
|
|
353
|
+
| `create-next-app` | Scaffold Next.js project with shadcn/ui + Tailwind |
|
|
354
|
+
| `deploy-app` | Deploy Next.js to Severino hosting |
|
|
355
|
+
|
|
344
356
|
### Plan Mode
|
|
345
357
|
| Tool | Description |
|
|
346
358
|
|------|-------------|
|
|
@@ -349,7 +361,7 @@ BluMa includes **40+ built-in tools** organized by category:
|
|
|
349
361
|
|
|
350
362
|
---
|
|
351
363
|
|
|
352
|
-
##
|
|
364
|
+
## Current Features
|
|
353
365
|
|
|
354
366
|
### Mailbox System (Bidirectional Communication)
|
|
355
367
|
**Push-based communication** between coordinator and workers using EventEmitter:
|
|
@@ -570,6 +582,7 @@ Level 3b: scripts/*.py
|
|
|
570
582
|
|-------|-------------|
|
|
571
583
|
| `git-commit` | Conventional commits, staging, commit messages |
|
|
572
584
|
| `git-pr` | Pull requests, code review preparation |
|
|
585
|
+
| `git-release` | Version bumps, changelogs, git tags, GitHub releases |
|
|
573
586
|
| `pdf` | PDF creation, extraction, merging, OCR |
|
|
574
587
|
| `xlsx` | Spreadsheet operations, formulas, charts |
|
|
575
588
|
| `skill-creator` | Author new BluMa skills |
|
|
@@ -765,11 +778,29 @@ src/
|
|
|
765
778
|
│ │ ├── agent.ts # Main orchestrator
|
|
766
779
|
│ │ ├── bluma/ # Core agent logic
|
|
767
780
|
│ │ │ ├── core/
|
|
768
|
-
│ │ │ │
|
|
769
|
-
│ │ │ └── turn_start_payload.ts
|
|
781
|
+
│ │ │ │ ├── bluma.ts # BluMaAgent class
|
|
782
|
+
│ │ │ │ └── turn_start_payload.ts
|
|
783
|
+
│ │ │ ├── context/
|
|
784
|
+
│ │ │ │ └── auto_compact.ts # Automatic context compaction
|
|
785
|
+
│ │ │ ├── memory/
|
|
786
|
+
│ │ │ │ └── session_memory.ts # Session memory
|
|
787
|
+
│ │ │ └── types/
|
|
788
|
+
│ │ │ └── errors.ts # Error type definitions
|
|
770
789
|
│ │ ├── config/
|
|
771
|
-
│ │ │ ├── native_tools.json # Tool definitions (
|
|
772
|
-
│ │ │
|
|
790
|
+
│ │ │ ├── native_tools.json # Tool definitions (45+)
|
|
791
|
+
│ │ │ ├── skills/ # Bundled skills
|
|
792
|
+
│ │ │ │ ├── git-commit/
|
|
793
|
+
│ │ │ │ ├── git-pr/
|
|
794
|
+
│ │ │ │ ├── git-release/ # Version bumps, changelogs, releases
|
|
795
|
+
│ │ │ │ ├── pdf/
|
|
796
|
+
│ │ │ │ ├── skill-creator/
|
|
797
|
+
│ │ │ │ └── xlsx/
|
|
798
|
+
│ │ │ │ └── scripts/
|
|
799
|
+
│ │ │ │ └── office/ # Office document handling
|
|
800
|
+
│ │ │ │ ├── pack.py
|
|
801
|
+
│ │ │ │ ├── unpack.py
|
|
802
|
+
│ │ │ │ ├── validate.py
|
|
803
|
+
│ │ │ │ └── soffice.py
|
|
773
804
|
│ │ ├── core/ # LLM, context, prompts
|
|
774
805
|
│ │ │ ├── context-api/ # Context management
|
|
775
806
|
│ │ │ │ ├── context_manager.ts # Token-aware context
|
|
@@ -777,17 +808,32 @@ src/
|
|
|
777
808
|
│ │ │ │ └── token_counter.ts # Tiktoken integration
|
|
778
809
|
│ │ │ ├── llm/ # LLM client
|
|
779
810
|
│ │ │ │ ├── llm.ts # FactorRouter client
|
|
811
|
+
│ │ │ │ ├── llm_errors.ts # LLM error formatting
|
|
812
|
+
│ │ │ │ ├── streaming_delta.ts # Streaming delta handling
|
|
780
813
|
│ │ │ │ └── tool_call_normalizer.ts
|
|
781
|
-
│ │ │
|
|
782
|
-
│ │ │
|
|
783
|
-
│ │ │
|
|
814
|
+
│ │ │ ├── prompt/ # Prompt engineering
|
|
815
|
+
│ │ │ │ ├── prompt_builder.ts # Dynamic prompts
|
|
816
|
+
│ │ │ │ ├── workspace_snapshot.ts
|
|
817
|
+
│ │ │ │ ├── mcp_instructions.ts
|
|
818
|
+
│ │ │ │ ├── model_info.ts
|
|
819
|
+
│ │ │ │ ├── production_sandbox_prompt.ts
|
|
820
|
+
│ │ │ │ ├── system_prompt_sections.ts
|
|
821
|
+
│ │ │ │ ├── system_reminders.ts
|
|
822
|
+
│ │ │ │ └── tool_guidance.ts
|
|
823
|
+
│ │ │ └── context_viz.ts # Context visualization
|
|
824
|
+
│ │ ├── docs/
|
|
825
|
+
│ │ │ └── TOOL_PARITY.md # Tool parity documentation
|
|
784
826
|
│ │ ├── feedback/
|
|
785
827
|
│ │ │ └── feedback_system.ts # Smart feedback system
|
|
828
|
+
│ │ │ └── feedback_scoring.ts # User feedback scoring
|
|
786
829
|
│ │ ├── runtime/ # Orchestration layer (v0.1.41+)
|
|
787
830
|
│ │ │ ├── diagnostics.ts # System snapshots
|
|
788
831
|
│ │ │ ├── feature_flags.ts # Feature gates
|
|
789
832
|
│ │ │ ├── hook_registry.ts # Event-driven hooks
|
|
790
833
|
│ │ │ ├── native_tool_catalog.ts # Tool registry
|
|
834
|
+
│ │ │ ├── permission_bridge.ts # Leader↔Worker permission system
|
|
835
|
+
│ │ │ ├── permission_rules.ts # Permission rule definitions
|
|
836
|
+
│ │ │ ├── tool_permission_classifier.ts
|
|
791
837
|
│ │ │ ├── plan_mode_session.ts # Plan mode state
|
|
792
838
|
│ │ │ ├── plugin_registry.ts # Plugin system
|
|
793
839
|
│ │ │ ├── plugin_runtime.ts # Plugin execution
|
|
@@ -799,21 +845,29 @@ src/
|
|
|
799
845
|
│ │ │ ├── tool_auto_approve.ts # Auto-approve rules
|
|
800
846
|
│ │ │ ├── tool_execution_policy.ts
|
|
801
847
|
│ │ │ ├── tool_orchestration.ts # Parallel read eligibility
|
|
802
|
-
│ │ │
|
|
848
|
+
│ │ │ ├── mailbox_registry.ts # Mailbox system
|
|
849
|
+
│ │ │ ├── worker_context.ts # Worker context management
|
|
850
|
+
│ │ │ └── factorai_context.ts # FactorAI app context
|
|
803
851
|
│ │ ├── session_manager/
|
|
804
852
|
│ │ │ └── session_manager.ts # Session persistence
|
|
805
853
|
│ │ ├── skills/
|
|
806
|
-
│ │ │ └── skill_loader.ts #
|
|
854
|
+
│ │ │ └── skill_loader.ts # 3-source skill loading
|
|
807
855
|
│ │ ├── subagents/ # Subagent system
|
|
808
856
|
│ │ │ ├── base_llm_subagent.ts
|
|
809
857
|
│ │ │ ├── init/ # Init subagent (BluMa.md)
|
|
858
|
+
│ │ │ │ ├── init_subagent.ts # Deep project analysis
|
|
859
|
+
│ │ │ │ ├── init_system_prompt.ts
|
|
860
|
+
│ │ │ │ └── contracts.ts
|
|
810
861
|
│ │ │ ├── registry.ts
|
|
811
|
-
│ │ │ ├── subagents_bluma.ts
|
|
812
|
-
│ │ │
|
|
862
|
+
│ │ │ ├── subagents_bluma.ts # SubAgent orchestration
|
|
863
|
+
│ │ │ ├── types.ts # SubAgent type definitions
|
|
864
|
+
│ │ │ └── worker_system_prompt.ts
|
|
813
865
|
│ │ ├── tools/
|
|
814
866
|
│ │ │ ├── mcp/
|
|
815
867
|
│ │ │ │ └── mcp_client.ts # MCP SDK client
|
|
816
|
-
│ │ │
|
|
868
|
+
│ │ │ ├── shared/
|
|
869
|
+
│ │ │ │ └── token_utils.ts # Token utilities
|
|
870
|
+
│ │ │ └── natives/ # 45+ native tool implementations
|
|
817
871
|
│ │ │ ├── agent_coordination.ts
|
|
818
872
|
│ │ │ ├── ask_user_question.ts
|
|
819
873
|
│ │ │ ├── async_command.ts
|
|
@@ -844,29 +898,35 @@ src/
|
|
|
844
898
|
│ │ ├── types/
|
|
845
899
|
│ │ │ └── index.ts
|
|
846
900
|
│ │ └── utils/
|
|
901
|
+
│ │ ├── blumamd.ts # BluMa markdown utilities
|
|
847
902
|
│ │ ├── coordinator_prompt.ts # Coordinator mode playbook
|
|
903
|
+
│ │ ├── logger.ts # Logging utilities
|
|
848
904
|
│ │ ├── update_check.ts
|
|
849
905
|
│ │ └── user_message_images.ts
|
|
850
906
|
│ └── ui/
|
|
851
907
|
│ ├── App.tsx # Main UI component
|
|
852
908
|
│ ├── Asci/
|
|
853
909
|
│ │ └── AsciiArt.ts
|
|
854
|
-
│ ├── components/ #
|
|
910
|
+
│ ├── components/ # 25+ UI components
|
|
855
911
|
│ │ ├── AnimatedBorder.tsx
|
|
856
912
|
│ │ ├── AskUserQuestionPrompt.tsx
|
|
857
913
|
│ │ ├── AssistantMessageDisplay.tsx
|
|
858
914
|
│ │ ├── CollapsibleResult.tsx
|
|
915
|
+
│ │ ├── ConfirmationPrompt.tsx # Permission confirmation dialog
|
|
859
916
|
│ │ ├── EditToolDiffPanel.tsx # Diff preview for edits
|
|
860
917
|
│ │ ├── ErrorMessage.tsx
|
|
861
918
|
│ │ ├── ExpandedPreviewBlock.tsx
|
|
862
919
|
│ │ ├── InputPrompt.tsx # User input
|
|
920
|
+
│ │ ├── InteractiveMenu.tsx # Interactive menu component
|
|
863
921
|
│ │ ├── MarkdownRenderer.tsx
|
|
864
922
|
│ │ ├── ProgressBar.tsx
|
|
865
923
|
│ │ ├── ReasoningDisplay.tsx # LLM reasoning
|
|
924
|
+
│ │ │ ├── SessionInfoConnectingMCP.tsx
|
|
866
925
|
│ │ ├── SessionStats.tsx
|
|
867
926
|
│ │ ├── SimpleDiff.tsx
|
|
868
927
|
│ │ ├── SlashCommands.tsx # 30+ commands
|
|
869
928
|
│ │ ├── StatusNotification.tsx
|
|
929
|
+
│ │ ├── StartupUpdateGate.tsx # Update check gate
|
|
870
930
|
│ │ ├── StreamingText.tsx # Live text output
|
|
871
931
|
│ │ ├── TodoPlanDisplay.tsx # Task visualization
|
|
872
932
|
│ │ ├── ToolCallDisplay.tsx
|
|
@@ -875,17 +935,41 @@ src/
|
|
|
875
935
|
│ │ ├── ToolResultDisplay.tsx
|
|
876
936
|
│ │ ├── TypewriterText.tsx
|
|
877
937
|
│ │ ├── UpdateNotice.tsx
|
|
938
|
+
│ │ ├── WorkerOverlay.tsx # Worker status overlay
|
|
939
|
+
│ │ ├── WorkerStatusList.tsx # Active workers list
|
|
940
|
+
│ │ ├── WorkerTranscript.tsx # Worker conversation transcript
|
|
941
|
+
│ │ ├── WorkingTimer.tsx # Work duration timer
|
|
878
942
|
│ │ ├── streamingTextFlush.ts
|
|
879
943
|
│ │ └── toolCallRenderers.tsx
|
|
880
944
|
│ ├── constants/
|
|
881
|
-
│ │ ├── historyLayout.ts
|
|
882
|
-
│ │ ├── inputPaste.ts
|
|
883
|
-
│ │ └── toolUiPreview.ts
|
|
945
|
+
│ │ ├── historyLayout.ts # History layout constants
|
|
946
|
+
│ │ ├── inputPaste.ts # Input paste constants
|
|
947
|
+
│ │ └── toolUiPreview.ts # Tool UI preview constants
|
|
948
|
+
│ │ └── toolUiSymbols.ts # Tool UI symbols
|
|
884
949
|
│ ├── hooks/
|
|
885
|
-
│ │
|
|
950
|
+
│ │ ├── useAtCompletion.ts # Completion hook
|
|
951
|
+
│ │ └── useWorkerProgress.ts # Worker progress hook
|
|
952
|
+
│ ├── prompts/
|
|
953
|
+
│ │ └── initCommandPrompt.ts # Init command prompt
|
|
954
|
+
│ ├── slash-commands/
|
|
955
|
+
│ │ ├── SlashCommands.types.ts # Type definitions
|
|
956
|
+
│ │ ├── commandHelpers.tsx # Command helpers
|
|
957
|
+
│ │ ├── constants.ts # Slash command constants
|
|
958
|
+
│ │ ├── SessionLivePanel.tsx # Session live panel
|
|
959
|
+
│ │ ├── streamingTextFlush.ts # Streaming text flush
|
|
960
|
+
│ │ └── renderers/
|
|
961
|
+
│ │ ├── index.ts
|
|
962
|
+
│ │ ├── configRenderers.tsx
|
|
963
|
+
│ │ ├── infoRenderers.tsx
|
|
964
|
+
│ │ ├── permissionRenderers.tsx
|
|
965
|
+
│ │ ├── pluginRenderers.tsx
|
|
966
|
+
│ │ ├── sessionRenderers.tsx
|
|
967
|
+
│ │ ├── staticRenderers.tsx
|
|
968
|
+
│ │ └── taskRenderers.tsx
|
|
886
969
|
│ ├── theme/
|
|
887
970
|
│ │ ├── blumaTerminal.ts
|
|
888
|
-
│ │
|
|
971
|
+
│ │ ├── themes.ts # Theme definitions
|
|
972
|
+
│ │ └── m3Layout.tsx # Material Design 3 layout
|
|
889
973
|
│ └── utils/
|
|
890
974
|
│ ├── clipboardImage.ts
|
|
891
975
|
│ ├── editToolDiffUtils.ts
|
|
@@ -896,8 +980,9 @@ src/
|
|
|
896
980
|
│ ├── pathDisplay.ts
|
|
897
981
|
│ ├── shellToolNames.ts
|
|
898
982
|
│ ├── slashRegistry.ts
|
|
899
|
-
│ ├── terminalTitle.ts
|
|
900
|
-
│ ├──
|
|
983
|
+
│ ├── terminalTitle.ts # Terminal title keeper
|
|
984
|
+
│ ├── toolActionLabels.ts # Tool action labels
|
|
985
|
+
│ ├── toolDisplayLabels.ts # Tool display labels
|
|
901
986
|
│ ├── toolInvocationPairing.ts
|
|
902
987
|
│ └── useSimpleInputBuffer.ts
|
|
903
988
|
├── main.ts # Entry point
|
|
@@ -917,7 +1002,7 @@ npm run test:watch # Watch mode
|
|
|
917
1002
|
### Test Structure
|
|
918
1003
|
|
|
919
1004
|
```
|
|
920
|
-
tests/ #
|
|
1005
|
+
tests/ # 35+ test files (flat structure)
|
|
921
1006
|
├── agent_*.spec.ts # Agent routing, overlays, coordination
|
|
922
1007
|
├── edit_tool.spec.ts # File editing operations
|
|
923
1008
|
├── file_write.spec.ts # File write operations
|
|
@@ -939,6 +1024,9 @@ tests/ # 33 test files (flat structure)
|
|
|
939
1024
|
├── web_fetch.spec.ts # Web fetching
|
|
940
1025
|
├── workspace_snapshot.spec.ts # Workspace analysis
|
|
941
1026
|
├── ui_*.spec.ts(x) # UI component tests
|
|
1027
|
+
├── llm_stream_partial.spec.ts # LLM streaming partial handling
|
|
1028
|
+
├── llm_errors.spec.ts # LLM error handling
|
|
1029
|
+
├── jest-resolver.cjs # Jest resolver configuration
|
|
942
1030
|
└── ... # Additional integration and unit tests
|
|
943
1031
|
```
|
|
944
1032
|
|
|
@@ -636,13 +636,13 @@
|
|
|
636
636
|
"type": "function",
|
|
637
637
|
"function": {
|
|
638
638
|
"name": "search_web",
|
|
639
|
-
"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.",
|
|
639
|
+
"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. NEW: Supports domain filtering and rate limiting.",
|
|
640
640
|
"parameters": {
|
|
641
641
|
"type": "object",
|
|
642
642
|
"properties": {
|
|
643
643
|
"query": {
|
|
644
644
|
"type": "string",
|
|
645
|
-
"description": "Search query, e.g. 'typescript cannot find module', 'react useEffect infinite loop fix'"
|
|
645
|
+
"description": "Search query, e.g. 'typescript cannot find module', 'react useEffect infinite loop fix'. Must be 2-500 characters."
|
|
646
646
|
},
|
|
647
647
|
"sources": {
|
|
648
648
|
"type": "array",
|
|
@@ -664,8 +664,31 @@
|
|
|
664
664
|
},
|
|
665
665
|
"max_results": {
|
|
666
666
|
"type": "integer",
|
|
667
|
-
"description": "Maximum total results to return. Default is 10.",
|
|
668
|
-
"default": 10
|
|
667
|
+
"description": "Maximum total results to return. Default is 10, max is 50.",
|
|
668
|
+
"default": 10,
|
|
669
|
+
"maximum": 50,
|
|
670
|
+
"minimum": 1
|
|
671
|
+
},
|
|
672
|
+
"allowed_domains": {
|
|
673
|
+
"type": "array",
|
|
674
|
+
"items": {
|
|
675
|
+
"type": "string"
|
|
676
|
+
},
|
|
677
|
+
"description": "Only include search results from these domains (e.g., ['github.com', 'reddit.com']). Cannot be used with blocked_domains."
|
|
678
|
+
},
|
|
679
|
+
"blocked_domains": {
|
|
680
|
+
"type": "array",
|
|
681
|
+
"items": {
|
|
682
|
+
"type": "string"
|
|
683
|
+
},
|
|
684
|
+
"description": "Never include search results from these domains (e.g., ['spam-site.com']). Cannot be used with allowed_domains."
|
|
685
|
+
},
|
|
686
|
+
"max_uses": {
|
|
687
|
+
"type": "integer",
|
|
688
|
+
"description": "Maximum number of sources to search (rate limiting). Default is 8, max is 20.",
|
|
689
|
+
"default": 8,
|
|
690
|
+
"maximum": 20,
|
|
691
|
+
"minimum": 1
|
|
669
692
|
}
|
|
670
693
|
},
|
|
671
694
|
"required": [
|