@nomad-e/bluma-cli 0.0.12 → 0.0.14

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "mcpServers": {
3
- "bluma": {
3
+ "sequentialThinking": {
4
4
  "type": "stdio",
5
5
  "command": "cmd",
6
6
  "args": [
package/dist/main.js CHANGED
@@ -21,28 +21,27 @@ var BRAND_COLORS = {
21
21
  };
22
22
  var Header = () => {
23
23
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
24
- /* @__PURE__ */ jsx(
25
- Box,
24
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", height: 8, marginBottom: 1, children: /* @__PURE__ */ jsx(
25
+ BigText,
26
26
  {
27
- flexDirection: "column",
28
- height: 8,
29
- marginBottom: 1,
30
- children: /* @__PURE__ */ jsx(
31
- BigText,
32
- {
33
- text: "BluMa CLI",
34
- font: "block",
35
- colors: [BRAND_COLORS.main, BRAND_COLORS.accent, BRAND_COLORS.shadow]
36
- }
37
- )
27
+ text: "BluMa CLI",
28
+ font: "block",
29
+ colors: [BRAND_COLORS.main, BRAND_COLORS.accent, BRAND_COLORS.shadow]
38
30
  }
39
- ),
31
+ ) }),
40
32
  /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 1, children: [
41
33
  /* @__PURE__ */ jsx(Text, { children: "How to get started with BluMa:" }),
42
34
  /* @__PURE__ */ jsx(Text, { children: "1. You can ask questions, modify files, or execute commands directly." }),
43
35
  /* @__PURE__ */ jsx(Text, { children: "2. Be as clear and specific as possible to get accurate responses." }),
44
36
  /* @__PURE__ */ jsxs(Text, { children: [
45
- "3. Type ",
37
+ "3. Run ",
38
+ /* @__PURE__ */ jsx(Text, { color: "cyan", children: "/init" }),
39
+ " to create a ",
40
+ /* @__PURE__ */ jsx(Text, { color: "cyan", children: "BluMa.md" }),
41
+ ", file with instructions for BluMa."
42
+ ] }),
43
+ /* @__PURE__ */ jsxs(Text, { children: [
44
+ "4. Type ",
46
45
  /* @__PURE__ */ jsx(Text, { color: "cyan", children: "/help" }),
47
46
  " to explore available commands and features."
48
47
  ] })
@@ -63,6 +62,7 @@ var SessionInfo = ({
63
62
  {
64
63
  borderStyle: "round",
65
64
  borderColor: "gray",
65
+ padding: 1,
66
66
  flexDirection: "column",
67
67
  marginBottom: 1,
68
68
  children: [
@@ -194,12 +194,45 @@ var getSlashCommands = () => [
194
194
  { name: "/help", description: "list commands" },
195
195
  { name: "/mcp", description: "list tools connected via MCP" },
196
196
  { name: "/tools", description: "list native tools" },
197
+ { name: "/init", description: "create a new BluMa.md file with codebase documentation" },
197
198
  { name: "/clear", description: "clear history" }
198
199
  ];
199
200
  var filterSlashCommands = (query) => {
200
201
  const list = getSlashCommands();
201
- const q = query.toLowerCase();
202
- return list.filter((c) => c.name.toLowerCase().startsWith(q));
202
+ const q = (query || "").toLowerCase();
203
+ if (!q) return list;
204
+ const scored = list.map((c) => {
205
+ const name = c.name.toLowerCase();
206
+ const desc = c.description.toLowerCase();
207
+ const isPrefix = name.startsWith(q);
208
+ const nameIdx = name.indexOf(q);
209
+ const descIdx = desc.indexOf(q);
210
+ let tier = 3;
211
+ let scorePrimary = 0;
212
+ let scoreSecondary = Number.MAX_SAFE_INTEGER;
213
+ let scoreTertiary = name.length;
214
+ if (isPrefix) {
215
+ tier = 0;
216
+ scorePrimary = q.length * -1;
217
+ scoreSecondary = 0;
218
+ } else if (nameIdx >= 0) {
219
+ tier = 1;
220
+ scorePrimary = 0;
221
+ scoreSecondary = nameIdx;
222
+ } else if (descIdx >= 0) {
223
+ tier = 2;
224
+ scorePrimary = 0;
225
+ scoreSecondary = descIdx;
226
+ }
227
+ return { cmd: c, tier, scorePrimary, scoreSecondary, scoreTertiary };
228
+ }).filter((s) => s.tier !== 3).sort((a, b) => {
229
+ if (a.tier !== b.tier) return a.tier - b.tier;
230
+ if (a.scorePrimary !== b.scorePrimary) return a.scorePrimary - b.scorePrimary;
231
+ if (a.scoreSecondary !== b.scoreSecondary) return a.scoreSecondary - b.scoreSecondary;
232
+ if (a.scoreTertiary !== b.scoreTertiary) return a.scoreTertiary - b.scoreTertiary;
233
+ return a.cmd.name.localeCompare(b.cmd.name);
234
+ });
235
+ return scored.map((s) => s.cmd);
203
236
  };
204
237
 
205
238
  // src/app/ui/components/InputPrompt.tsx
@@ -283,7 +316,7 @@ var InputPrompt = ({ onSubmit, isReadOnly, onInterrupt }) => {
283
316
  }
284
317
  }, { isActive: slashOpen });
285
318
  return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
286
- /* @__PURE__ */ jsx2(Box2, { borderStyle: "round", borderColor, borderDimColor: !isReadOnly, width: viewWidth - 7, paddingY: 0, children: /* @__PURE__ */ jsxs2(Box2, { flexDirection: "row", paddingX: 1, flexWrap: "nowrap", children: [
319
+ /* @__PURE__ */ jsx2(Box2, { borderStyle: "round", borderColor, borderDimColor: !isReadOnly, children: /* @__PURE__ */ jsxs2(Box2, { flexDirection: "row", paddingX: 1, flexWrap: "nowrap", children: [
287
320
  /* @__PURE__ */ jsxs2(Text2, { color: "white", dimColor: true, children: [
288
321
  ">",
289
322
  " "
@@ -716,45 +749,34 @@ async function saveSessionHistory(sessionFile, history) {
716
749
  import os2 from "os";
717
750
  var SYSTEM_PROMPT = `
718
751
 
719
- # YOU ARE BluMa CLI, A AUTONOMOUS SENIOR SOFTWARE ENGINEER OF NOMADENGENUITY.
720
-
721
- ## YOUR ONE-SHOT LEARNING EXPERTISE:
722
- - **SINGLE EXAMPLE MASTERY**: When a developer shows you ONE new pattern/example, you instantly understand and generalize it
723
- - **RAPID PATTERN EXTRACTION**: Extract underlying principles from a single code example or API call
724
- - **IMMEDIATE APPLICATION**: Apply newly learned patterns across the entire project without asking for more examples
725
- - **INTELLIGENT GENERALIZATION**: Extend concepts beyond the original example while maintaining consistency
726
- - **CONTEXTUAL ADAPTATION**: Modify learned patterns to fit different situations in the same project
727
-
728
- ## HOW YOU APPLY ONE-SHOT LEARNING:
729
- 1. **ABSORB**: Analyze the single example for patterns, structure, and intent
730
- 2. **EXTRACT**: Identify the underlying principles and conventions
731
- 3. **GENERALIZE**: Apply the pattern to similar situations throughout the project
732
- 4. **ADAPT**: Modify the pattern appropriately for different contexts
733
- 5. **IMPLEMENT**: Execute consistently without needing additional examples
734
-
735
- ## PRACTICAL ONE-SHOT SCENARIOS:
736
- - **Developer shows 1 API endpoint** \u2192 You understand the entire API structure and naming conventions
737
- - **Developer provides 1 component example** \u2192 You replicate the pattern across all similar components
738
- - **Developer demonstrates 1 function pattern** \u2192 You apply the style consistently throughout the codebase
739
- - **Developer shows 1 configuration example** \u2192 You understand and apply the configuration pattern everywhere
740
- - **Developer gives 1 architectural example** \u2192 You follow the architecture pattern across modules
741
-
742
- ## YOUR ONE-SHOT ADVANTAGE:
743
- - **ZERO TUTORIAL DEPENDENCY**: No need for extensive documentation or multiple examples
744
- - **INSTANT PATTERN ADOPTION**: Immediately incorporate new patterns into your workflow
745
- - **CONSISTENT APPLICATION**: Apply learned patterns uniformly across the project
746
- - **INTELLIGENT INFERENCE**: Understand implied conventions from minimal examples
747
- - **PROACTIVE EXTENSION**: Take patterns further than the original example when appropriate
748
-
749
- # BEHAVIORAL RULES (Compact)
750
- - Identity: You are BluMa (NomadEngenuity). Be professional and technical.
751
- - Communication: ALL messages must use message_notify_dev. No direct text replies.
752
- - Task completion: When you finish a task, immediately invoke agent_end_task.
753
- - Tool rules: Never make parallel tool calls. Always use only the defined tools with exact names.
754
- - Autonomy: Act 100% autonomously; don\u2019t ask for formatting preferences. Use the notebook for internal thinking.
755
- - Notion: When writing to Notion, strictly use proper headings (heading_1, heading_2, ...), per rules.
756
-
757
- CRITICAL COMMUNICATION PROTOCOL (Compact)
752
+ ### YOU ARE BluMa CLI \u2014 AUTONOMOUS SENIOR SOFTWARE ENGINEER @ NOMADENGENUITY
753
+ You use a proprietary Large Language Model (LLM) fine-tuned by the NomadEngenuity team.
754
+
755
+ ---
756
+
757
+ ## BEHAVIORAL RULES
758
+
759
+ - **Identity:**
760
+ You are BluMa (NomadEngenuity). Maintain professionalism and technical language.
761
+
762
+ - **Communication:**
763
+ ALL messages must be sent via 'message_notify_dev'.
764
+ **No direct text replies to the developer.**
765
+
766
+ - **Task Completion:**
767
+ When a task is completed, immediately invoke 'agent_end_task' without dev permissions.
768
+
769
+ - **Tool Rules:**
770
+ Never make parallel tool calls.
771
+ Always use only the defined tools with their exact names.
772
+
773
+ - **Autonomy:**
774
+ Act 100% autonomously.
775
+ Do not ask for formatting preferences.
776
+ Use the notebook for internal reasoning.
777
+
778
+
779
+ ### CRITICAL COMMUNICATION PROTOCOL
758
780
  - Only tool_calls are allowed for assistant replies. Never include a "content" field.
759
781
  - Always use tools to respond, retrieve data, compute or transform. Await a valid tool response before any final message.
760
782
  - Zero tolerance for protocol violations.
@@ -770,113 +792,6 @@ CRITICAL COMMUNICATION PROTOCOL (Compact)
770
792
  - Locale: {locale}
771
793
  </current_system_environment>
772
794
 
773
- <resilience_and_alternatives>
774
- # RESILIENCE & NEVER GIVE UP ATTITUDE - CRITICAL!
775
- ## SENIOR ENGINEER MINDSET: ALWAYS FIND A WAY
776
-
777
- ### CORE PRINCIPLE: NO EXCUSES, ONLY SOLUTIONS
778
- - **NEVER give up** when the first approach fails
779
- - **ALWAYS try alternatives** when one method doesn't work
780
- - **BE RESOURCEFUL** - explore multiple solutions
781
- - **THINK CREATIVELY** - find workarounds and alternatives
782
- - **STAY PERSISTENT** - keep trying until you succeed
783
-
784
- ### SPECIFIC RULES FOR COMMON SCENARIOS
785
-
786
- #### PDF GENERATION - NEVER USE PANDOC!
787
- - **FORBIDDEN**: Do NOT use Pandoc for PDF generation
788
- - **REQUIRED**: Always use Python libraries for PDF creation
789
- - **PRIMARY CHOICE**: Use **fpdf2** library for maximum customization
790
- - **ALTERNATIVES**: **reportlab**, **weasyprint**, **matplotlib** for charts
791
-
792
- #### OFFICIAL PDF TEMPLATE - MANDATORY USAGE!
793
- When creating PDFs, you MUST follow this professional structure:
794
-
795
- **STEP 1: Import and Unicode Function**
796
- - Import: **from fpdf import FPDF** and **import os**
797
- - Create remove_unicode function to handle special characters
798
- - Replace problematic chars: '\u2014' to '-', '\u2714\uFE0F' to 'X', '\u2026' to '...'
799
-
800
- **STEP 2: Custom PDF Class**
801
- - Inherit from FPDF: **class PDF(FPDF)**
802
- - Custom header method with professional title formatting
803
- - Custom footer with "Generated by BluMa | NomadEngenuity" branding
804
- - Use colors: Title (30,60,120), text (80,80,80)
805
- - Add professional line separator in header
806
-
807
- **STEP 3: PDF Creation Standards**
808
- - Create PDF instance and add page
809
- - Set auto page break with 18pt margin
810
- - Use Helvetica font family throughout
811
- - Standard text: 11pt, Headers: 14pt bold, Title: 22pt bold
812
- - Professional color scheme: Blues and grays
813
-
814
- **STEP 4: Content Formatting Rules**
815
- - Use multi_cell for paragraphs with proper line spacing
816
- - Create tables with alternating row colors (fill=True/False)
817
- - Section headers in bold with proper spacing
818
- - Consistent margins and indentation
819
- - Save with descriptive filename using os.path.join
820
-
821
- **STEP 5: Table Creation Pattern**
822
- - Header row with light blue fill (220,230,250)
823
- - Alternating row colors for readability
824
- - Proper border formatting (border=1)
825
- - Text alignment: Left for text, Center for short data
826
- - Use remove_unicode for all text content
827
-
828
- **MANDATORY REQUIREMENTS:**
829
- 1. ALWAYS use remove_unicode function for text compatibility
830
- 2. ALWAYS use custom PDF class with header/footer
831
- 3. ALWAYS include BluMa branding in footer
832
- 4. USE professional colors: Blues (30,60,120), grays (40,40,40)
833
- 5. CREATE tables for structured data with alternating colors
834
- 6. ADD proper spacing between sections
835
- 7. USE multi_cell for long text paragraphs
836
- 8. SET proper margins and auto page breaks
837
- 9. SAVE with descriptive filename
838
-
839
- **REQUIREMENT**: This template ensures consistent, professional PDF output.
840
-
841
- #### WHEN SOMETHING FAILS:
842
- 1. **ANALYZE** why it failed (missing dependency, wrong approach, etc.)
843
- 2. **RESEARCH** alternative libraries or methods
844
- 3. **IMPLEMENT** the alternative approach immediately
845
- 4. **TEST** and validate the solution works
846
- 5. **DOCUMENT** what worked for future reference
847
-
848
- #### EXAMPLES OF RESILIENT APPROACHES:
849
- - **PDF Creation**: fpdf2 \u2192 reportlab \u2192 weasyprint \u2192 matplotlib
850
- - **Image Processing**: Pillow \u2192 opencv \u2192 imageio \u2192 skimage
851
- - **Data Analysis**: pandas \u2192 numpy \u2192 pure Python \u2192 alternative libraries
852
- - **Web Scraping**: requests + BeautifulSoup \u2192 selenium \u2192 scrapy
853
- - **File Processing**: Built-in libs \u2192 specialized libs \u2192 custom solutions
854
-
855
- ### PROBLEM-SOLVING HIERARCHY:
856
- 1. **Try the optimal solution first**
857
- 2. **If it fails, immediately try alternative #1**
858
- 3. **If that fails, try alternative #2**
859
- 4. **Keep trying until you find a working solution**
860
- 5. **Create custom solution if no library works**
861
- 6. **NEVER say "I can't do this" or "this isn't possible"**
862
-
863
- ### FORBIDDEN PHRASES:
864
- - "This isn't possible"
865
- - "I can't do this"
866
- - "The tool isn't available"
867
- - "You'll need to do this manually"
868
- - "I recommend using external tools"
869
-
870
- ### REQUIRED ATTITUDE:
871
- - "Let me try a different approach"
872
- - "I'll use an alternative library"
873
- - "I'll create a custom solution"
874
- - "I'll find another way to accomplish this"
875
- - "I'll build this from scratch if needed"
876
-
877
- ## TECHNICAL IMPLEMENTATION AUTHORITY
878
- A Senior Engineer finds solutions, not excuses. You have the skills, tools, and authority to solve any problem.
879
- </resilience_and_alternatives>
880
795
 
881
796
  <mermaid_diagrams>
882
797
  # MERMAID DIAGRAM CREATION - PERFECT SYNTAX REQUIRED!
@@ -978,7 +893,7 @@ Before creating any diagram, ensure:
978
893
  Every diagram MUST render perfectly on first try. No exceptions.
979
894
  </mermaid_diagrams>
980
895
 
981
- <message_rules>
896
+ ### MESSAGE RULES
982
897
  - Communicate with dev via message tools instead of direct text responses
983
898
  - Reply immediately to new dev messages before other operations
984
899
  - First reply must be brief, only confirming receipt without specific solutions
@@ -986,12 +901,32 @@ Every diagram MUST render perfectly on first try. No exceptions.
986
901
  - Message tools are divided into notify (non-blocking, no reply needed from dev's) and ask (blocking, reply required)
987
902
  - Actively use notify for progress updates, but reserve ask for only essential needs to minimize dev disruption and avoid blocking progress
988
903
  - Must send messages to developers with results and deliverables before signaling the completion of the task system.
989
- - Never forget to follow the "end_task_rules" properly.
990
- </message_rules>
904
+ - Never forget to follow the "AGENT END TASK RULES" properly.
905
+
906
+
907
+ ### Live Development Overlaps
908
+
909
+ During your workflow, the programmer {username} may send messages at any time.
910
+ These messages **must be immediately incorporated** into your execution flow.
911
+ **Always confirm receipt using {message_notify_dev}** and proceed with your work.
912
+
913
+ ### Instructions for Handling Messages from the Programmer
914
+
915
+ 1. **Upon receiving a message from {username}:**
916
+ - Immediately confirm using {message_notify_dev}.
917
+ - Integrate the instruction into your reasoning and execution flow.
918
+
919
+ 2. **Regarding your reasoning:**
920
+ - Be direct, minimalist, and clear.
921
+ - Avoid unnecessary or verbose thoughts.
922
+
923
+ 3. **Avoid polluting the history:**
924
+ - **Do not repeat or reply to existing messages.**
925
+ - Only act if the new message introduces a **new instruction or shifts the current task\u2019s focus**.
991
926
 
992
- <bluma_nootebook>
927
+ ### BLUMA NOTEBOOK
993
928
  # YOUR THINKING ON A NOTEBOOK - MANDATORY USE
994
- CRITICAL: Your laptop (**bluma_nootebook**) is your ORGANIZED MIND
929
+ CRITICAL: Your laptop (**sequentialThinking_nootebook**) is your ORGANIZED MIND
995
930
  ## IMPORTANT
996
931
  ## NEVER PUT CHECKLISTS OR STEPS IN THE THOUGHT TEXT
997
932
  ## ALWAYS USE A NOTEBOOK (Always for):
@@ -1003,7 +938,7 @@ CRITICAL: Your laptop (**bluma_nootebook**) is your ORGANIZED MIND
1003
938
  - Architectural decisions (think through the options)
1004
939
 
1005
940
  ## HOW TO USE A NOTEBOOK:
1006
- 1. Start with **bluma_nootebook**
941
+ 1. Start with **sequentialThinking_nootebook**
1007
942
  2. Break the task down into logical steps
1008
943
  3. Plan the approach - Which files? What changes? What order? 4. Track progress - Check off completed steps
1009
944
  5. Write down decisions - Why did you choose this approach?
@@ -1031,18 +966,17 @@ CRITICAL: Your laptop (**bluma_nootebook**) is your ORGANIZED MIND
1031
966
  - remaining_tasks: Checklist-style list of high-level upcoming tasks.
1032
967
  This format is **mandatory**:
1033
968
  - Each task **must start** with either:
1034
- - "[ ]" \u2192 for tasks not yet done (pending)
1035
- - "\u{1F5F8}" \u2192 for tasks that have already been completed
969
+ - "\u{1F5F8}" \u2192 for tasks not yet done (pending)
970
+ - "[ ]" \u2192 for tasks that have already been completed
1036
971
 
1037
972
  Whenever a task is already done, it **must** be marked with "\u{1F5F8}". Do not leave completed tasks without the checkmark.
1038
973
 
1039
974
  Do not use other formats like "-", "*", or plain text without the prefix.
1040
975
 
1041
976
  Examples:
1042
- [ ] Test integration flow
977
+ \u{1F5F8} Test integration flow
1043
978
  \u{1F5F8} Set up environment
1044
- \u{1F5F8} Configure database
1045
- </bluma_nootebook>
979
+ [ ] Configure database
1046
980
 
1047
981
  ### Tool Naming Policy
1048
982
 
@@ -1062,11 +996,11 @@ Correct Examples:
1062
996
  ---
1063
997
 
1064
998
  Incorrect Examples:
1065
- - bluma_nootebook:0 \u2190 contains colon and dynamic suffix
1066
- - bluma_nootebook 1 \u2190 contains space and number
1067
- - bluma_nootebook#v2 \u2190 contains special character #
999
+ - sequentialThinking_nootebook:0 \u2190 contains colon and dynamic suffix
1000
+ - sequentialThinking_nootebook 1 \u2190 contains space and number
1001
+ - sequentialThinking_nootebook#v2 \u2190 contains special character #
1068
1002
  - bluma__nootebook \u2190 double underscore
1069
- - Bluma_Nootebook \u2190 capital letters and underscore
1003
+ - sequentialThinking_Nootebook \u2190 capital letters and underscore
1070
1004
  - bluma nootebook \u2190 contains space
1071
1005
 
1072
1006
  ---
@@ -1078,7 +1012,7 @@ Rule Summary:
1078
1012
  - No whitespace, no dynamic elements, no special characters
1079
1013
 
1080
1014
 
1081
- <edit_tool_rules>
1015
+ ### EDIT TOOL
1082
1016
  - Use this tool to perform precise text replacements inside files based on exact literal matches.
1083
1017
  - Can be used to create new files or directories implicitly by targeting non-existing paths.
1084
1018
  - Suitable for inserting full content into a file even if the file does not yet exist.
@@ -1090,7 +1024,6 @@ Rule Summary:
1090
1024
  - After completing any task in the checklist, immediately update the corresponding section in todo.md using this tool.
1091
1025
  - Reconstruct the entire file from task planning context if todo.md becomes outdated or inconsistent.
1092
1026
  - Track all progress related to planning and execution inside todo.md using text replacement only.
1093
- </edit_tool_rules>
1094
1027
 
1095
1028
 
1096
1029
  Real-Time Developer Messages
@@ -1098,9 +1031,8 @@ Real-Time Developer Messages
1098
1031
  - You MUST respond immediately via message_notify_dev, and be brief. You should use it in your next thoughts/actions.
1099
1032
 
1100
1033
 
1101
- <end_task_rules>
1034
+ ### AGENT END TASK RULES
1102
1035
  This tool is used to signal to the system that the current task has completed and that the agent can be placed in an idle state.
1103
- </end_task_rules>
1104
1036
 
1105
1037
 
1106
1038
  ### QUALITY STANDARDS
@@ -1926,51 +1858,6 @@ var Agent = class {
1926
1858
  this.history = history;
1927
1859
  if (this.history.length === 0) {
1928
1860
  let systemPrompt = getUnifiedSystemPrompt();
1929
- systemPrompt += `
1930
- BEHAVIORAL REQUIREMENTS:
1931
- - You MUST use the 'message_notify_dev' tool for ALL communication with the user.
1932
- - Direct text responses are a protocol violation and will be penalized.
1933
- - Signal the end of a task using the 'agent_end_task' tool.
1934
- - Never make parallel tool calls.
1935
- - Do not include any of the following in tool names:
1936
- - Special characters
1937
- - Extra spaces
1938
- Always use clean, unmodified, and simple names for tools.
1939
- Tool names must follow strict formatting: no symbols, no whitespace, no alterations.
1940
- - Follow the stripes o "Tool Naming Policy"
1941
- - Never modify the names of the tools, use their real names without any modification.
1942
- - Never forget to signal the system when the task is completed 'agent_end_task' tool.
1943
- ##Important: When writing to Notion, you must strictly follow its content structure, including the correct use of headings (heading_1, heading_2, etc.) and other formatting standards. No deviations are allowed.
1944
- - You should always standardize everything using Notion's actual headers (heading_1, heading_2, etc.), making the structure
1945
- semantically better for reading and navigation.
1946
-
1947
- You are strictly forbidden from replying directly to the user.
1948
-
1949
- You are not allowed to reason, explain, or output any direct content in your responses.
1950
-
1951
- Your only permitted action is to invoke one or more 'tool_calls', regardless of how simple or obvious the user's message may seem.
1952
-
1953
- You must always use a tool to:
1954
- - generate any kind of response
1955
- - retrieve or calculate any data
1956
- - validate, summarize, or transform input
1957
-
1958
- You must never include a "content" field in your response.
1959
- Only 'tool_calls' are allowed when you reply as "role": "assistant".
1960
-
1961
- You will only produce a final message to the user **after receiving a valid "role": "tool" response** matching your previous 'tool_call_id'.
1962
-
1963
- You are a pure orchestration agent \u2014 your only job is to call tools. No autonomous answers, no internal reasoning.
1964
-
1965
- Live Dev Overlays:
1966
- The developer can send messages at any time. They MUST be incorporated immediately. Always confirm via message_notify_dev and proceed.
1967
- Developer Feedback Handling:
1968
- - When you detect a developer message, immediately send a short-term acknowledgement via message_notify_dev (maximum one sentence).
1969
- - Treat the message as a system directive already entered in the history in the format: "Human developer sending this message '<feedback>' to you."
1970
- - Add it to your workflow with a simple and clear flow of reasoning. Keep it minimal and direct (no verbose thought).
1971
- - Don't add extra or duplicate messages to the history; the system message is already there. Just act on it.
1972
-
1973
- `;
1974
1861
  this.history.push({ role: "system", content: systemPrompt });
1975
1862
  await saveSessionHistory(this.sessionFile, this.history);
1976
1863
  }
@@ -2094,7 +1981,7 @@ ${editData.error.display}`;
2094
1981
  const autoApprovedTools = [
2095
1982
  "agent_end_task",
2096
1983
  "message_notify_dev",
2097
- "bluma_nootebook"
1984
+ "sequentialThinking_nootebook"
2098
1985
  ];
2099
1986
  const toolToCall = message.tool_calls[0];
2100
1987
  const isSafeTool = autoApprovedTools.some((safeTool) => toolToCall.function.name.includes(safeTool));
@@ -2360,7 +2247,7 @@ var renderGenericToolCall = ({ toolName, args }) => {
2360
2247
  var ToolRenderDisplay = {
2361
2248
  "shell_command": renderShellCommand2,
2362
2249
  "ls_tool": renderLsTool2,
2363
- "bluma_nootebook": renderBlumaNotebook,
2250
+ "sequentialThinking_nootebook": renderBlumaNotebook,
2364
2251
  "count_file_lines": renderCountFilesLines,
2365
2252
  "read_file_lines": renderReadFileLines2,
2366
2253
  "edit_tool": renderEditToolCall
@@ -2410,6 +2297,7 @@ var SessionInfoConnectingMCP = ({ sessionId: sessionId2, workdir, statusMessage
2410
2297
  borderColor: "gray",
2411
2298
  flexDirection: "column",
2412
2299
  marginBottom: 1,
2300
+ padding: 1,
2413
2301
  children: [
2414
2302
  /* @__PURE__ */ jsxs9(Text10, { children: [
2415
2303
  /* @__PURE__ */ jsx11(Text10, { bold: true, color: "white", children: "localhost" }),
@@ -2429,16 +2317,11 @@ var SessionInfoConnectingMCP = ({ sessionId: sessionId2, workdir, statusMessage
2429
2317
  /* @__PURE__ */ jsxs9(Text10, { children: [
2430
2318
  /* @__PURE__ */ jsx11(Text10, { color: "magenta", children: "\u21B3" }),
2431
2319
  " ",
2432
- /* @__PURE__ */ jsx11(Text10, { color: "gray", children: "MCP: " }),
2320
+ /* @__PURE__ */ jsx11(Text10, { color: "gray", children: "mcp: " }),
2433
2321
  /* @__PURE__ */ jsxs9(Text10, { color: "yellow", children: [
2434
2322
  /* @__PURE__ */ jsx11(Spinner, { type: "dots" }),
2435
- " connecting"
2436
- ] })
2437
- ] }),
2438
- /* @__PURE__ */ jsxs9(Text10, { children: [
2439
- /* @__PURE__ */ jsx11(Text10, { color: "magenta", children: "\u21B3" }),
2440
- " ",
2441
- /* @__PURE__ */ jsx11(Text10, { color: "gray", children: "status: " }),
2323
+ " "
2324
+ ] }),
2442
2325
  /* @__PURE__ */ jsx11(Text10, { color: "white", children: statusMessage || "Please wait while we establish connections." })
2443
2326
  ] })
2444
2327
  ]
@@ -2881,7 +2764,41 @@ var AppComponent = ({ eventBus: eventBus2, sessionId: sessionId2 }) => {
2881
2764
  var App = memo4(AppComponent);
2882
2765
  var App_default = App;
2883
2766
 
2767
+ // src/app/agent/utils/update_check.ts
2768
+ import updateNotifier from "update-notifier";
2769
+ import { readPackageUp } from "read-package-up";
2770
+ import { fileURLToPath as fileURLToPath3 } from "url";
2771
+ import path9 from "path";
2772
+ async function checkForUpdates() {
2773
+ try {
2774
+ const __filename = fileURLToPath3(import.meta.url);
2775
+ const __dirname = path9.dirname(__filename);
2776
+ const result = await readPackageUp({ cwd: __dirname });
2777
+ const pkg = result?.packageJson;
2778
+ if (!pkg?.name || !pkg?.version) return null;
2779
+ const notifier = updateNotifier({
2780
+ pkg: { name: pkg.name, version: pkg.version },
2781
+ // check daily to avoid excessive network calls
2782
+ updateCheckInterval: 1e3 * 60 * 60 * 24,
2783
+ shouldNotifyInNpmScript: true
2784
+ });
2785
+ if (notifier.update && !process.env.CI) {
2786
+ return `Update available for ${pkg.name}! ${notifier.update.current} \u2192 ${notifier.update.latest}
2787
+ Run npm i -g ${pkg.name} to update.`;
2788
+ }
2789
+ return null;
2790
+ } catch (e) {
2791
+ console.warn("Update check failed:", e);
2792
+ return null;
2793
+ }
2794
+ }
2795
+
2884
2796
  // src/main.ts
2797
+ void checkForUpdates().then((msg) => {
2798
+ if (msg) {
2799
+ console.log("" + msg);
2800
+ }
2801
+ }).catch(() => void 0);
2885
2802
  var eventBus = new EventEmitter2();
2886
2803
  var sessionId = uuidv42();
2887
2804
  var props = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomad-e/bluma-cli",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "BluMa independent agent for automation and advanced software engineering.",
5
5
  "author": "Alex Fonseca",
6
6
  "license": "MIT",
@@ -15,6 +15,7 @@
15
15
  "@types/jest": "^30.0.0",
16
16
  "@types/node": "^20.14.2",
17
17
  "@types/react": "^18.3.3",
18
+ "@types/update-notifier": "^6.0.8",
18
19
  "@types/uuid": "^9.0.8",
19
20
  "babel-jest": "^30.0.5",
20
21
  "esbuild": "^0.21.4",
@@ -46,6 +47,8 @@
46
47
  "ink-text-input": "^6.0.0",
47
48
  "openai": "^4.47.3",
48
49
  "react-devtools-core": "^4.28.5",
50
+ "read-package-up": "^11.0.0",
51
+ "update-notifier": "^7.0.0",
49
52
  "uuid": "^9.0.1"
50
53
  },
51
54
  "files": [