@nomad-e/bluma-cli 0.0.61 → 0.0.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.
@@ -1,200 +1,206 @@
1
1
  {
2
- "nativeTools": [
3
- {
4
- "type": "function",
5
- "function": {
6
- "name": "shell_command",
7
- "description": "Executes a terminal command in a robust and Windows/Linux compatible way.",
8
- "parameters": {
9
- "type": "object",
10
- "properties": {
11
- "command": {
12
- "type": "string",
13
- "description": "Shell command to execute"
14
- },
15
- "timeout": {
16
- "type": "integer",
17
- "description": "Maximum execution time in seconds",
18
- "default": 20
19
- },
20
- "cwd": {
21
- "type": "string",
22
- "description": "Working directory for command execution (must use absolute path)"
23
- },
24
- "verbose": {
25
- "type": "boolean",
26
- "description": "If True, returns detailed report; if False, only main output",
27
- "default": false
28
- }
29
- },
30
- "required": [
31
- "command",
32
- "timeout"
33
- ]
34
- }
2
+ "nativeTools": [
3
+ {
4
+ "type": "function",
5
+ "function": {
6
+ "name": "shell_command",
7
+ "description": "Executes a terminal command in a robust and Windows/Linux compatible way.",
8
+ "parameters": {
9
+ "type": "object",
10
+ "properties": {
11
+ "command": {
12
+ "type": "string",
13
+ "description": "Shell command to execute"
14
+ },
15
+ "timeout": {
16
+ "type": "integer",
17
+ "description": "Maximum execution time in seconds",
18
+ "default": 20
19
+ },
20
+ "cwd": {
21
+ "type": "string",
22
+ "description": "Working directory for command execution (must use absolute path)"
23
+ },
24
+ "verbose": {
25
+ "type": "boolean",
26
+ "description": "If True, returns detailed report; if False, only main output",
27
+ "default": false
35
28
  }
36
- },
37
- {
38
- "type": "function",
39
- "function": {
40
- "name": "edit_tool",
41
- "description": "Safely and precisely replaces text in a file, or creates a new file. The tool is resilient to common formatting issues but performs best with precise input.\n\n**Best Practices for Success:**\n1. **Use a read tool first:** Always read the file to get the exact content before generating the `old_string`.\n2. **Provide Context:** For `old_string`, provide a unique, multi-line segment of the file. Including 3+ lines of context around the target change is highly recommended to ensure precision.\n3. **Create New Files:** To create a new file, provide the full `file_path` and an empty string for `old_string`.",
42
- "parameters": {
43
- "type": "object",
44
- "properties": {
45
- "file_path": {
46
- "type": "string",
47
- "description": "The absolute or relative path to the file. The tool will correctly resolve the path for the current operating system."
48
- },
49
- "old_string": {
50
- "type": "string",
51
- "description": "The exact text to be replaced. To ensure accuracy, this should be a unique, multi-line segment from the file, including all original indentation and whitespace. Do not manually escape newlines (use literal newlines, not '\\n'). For creating a new file, this must be an empty string."
52
- },
53
- "new_string": {
54
- "type": "string",
55
- "description": "The new text that will replace `old_string`. Match the indentation and formatting of the surrounding code to maintain code quality. Do not manually escape newlines."
56
- },
57
- "expected_replacements": {
58
- "type": "integer",
59
- "description": "Optional. The number of occurrences to replace. Defaults to 1. If you expect to replace multiple instances of `old_string`, set this value accordingly.",
60
- "default": 1
61
- }
62
- },
63
- "required": [
64
- "file_path",
65
- "old_string",
66
- "new_string"
67
- ]
68
- }
69
- }
70
29
  },
71
- {
72
- "type": "function",
73
- "function": {
74
- "name": "agent_end_turn",
75
- "description": "Signal to the system that the agent has completed its work Turn.",
76
- "parameters": {
77
- "type": "object",
78
- "properties": {},
79
- "required": []
80
- }
30
+ "required": [
31
+ "command",
32
+ "timeout"
33
+ ]
34
+ }
35
+ }
36
+ },
37
+ {
38
+ "type": "function",
39
+ "function": {
40
+ "name": "edit_tool",
41
+ "description": "Safely and precisely replaces text in a file, or creates a new file. The tool is resilient to common formatting issues but performs best with precise input.\n\n**Best Practices for Success:**\n1. **Use a read tool first:** Always read the file to get the exact content before generating the `old_string`.\n2. **Provide Context:** For `old_string`, provide a unique, multi-line segment of the file. Including 3+ lines of context around the target change is highly recommended to ensure precision.\n3. **Create New Files:** To create a new file, provide the full `file_path` and an empty string for `old_string`.",
42
+ "parameters": {
43
+ "type": "object",
44
+ "properties": {
45
+ "file_path": {
46
+ "type": "string",
47
+ "description": "The absolute or relative path to the file. The tool will correctly resolve the path for the current operating system."
48
+ },
49
+ "old_string": {
50
+ "type": "string",
51
+ "description": "The exact text to be replaced. To ensure accuracy, this should be a unique, multi-line segment from the file, including all original indentation and whitespace. Do not manually escape newlines (use literal newlines, not '\\n'). For creating a new file, this must be an empty string."
52
+ },
53
+ "new_string": {
54
+ "type": "string",
55
+ "description": "The new text that will replace `old_string`. Match the indentation and formatting of the surrounding code to maintain code quality. Do not manually escape newlines."
56
+ },
57
+ "expected_replacements": {
58
+ "type": "integer",
59
+ "description": "Optional. The number of occurrences to replace. Defaults to 1. If you expect to replace multiple instances of `old_string`, set this value accordingly.",
60
+ "default": 1
81
61
  }
82
- },
83
- {
84
- "type": "function",
85
- "function": {
86
- "name": "message_notify_user",
87
- "description": "Send a message to user without requiring a response. Use for acknowledging receipt of messages, providing progress updates, reporting task completion, or explaining changes in approach.",
88
- "parameters": {
89
- "type": "object",
90
- "properties": {
91
- "message": {
92
- "type": "string",
93
- "description": "The body of the message in Markdown format."
94
- }
95
- },
96
- "required": [
97
- "message"
98
- ]
99
- }
62
+ },
63
+ "required": [
64
+ "file_path",
65
+ "old_string",
66
+ "new_string"
67
+ ]
68
+ }
69
+ }
70
+ },
71
+ {
72
+ "type": "function",
73
+ "function": {
74
+ "name": "agent_end_turn",
75
+ "description": "Signal to the system that the agent has completed its work Turn.",
76
+ "parameters": {
77
+ "type": "object",
78
+ "properties": {},
79
+ "required": []
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "type": "function",
85
+ "function": {
86
+ "name": "message_notify_user",
87
+ "description": "Send a message to user without requiring a response. Use for acknowledging receipt of messages, providing progress updates, reporting task completion, or explaining changes in approach.",
88
+ "parameters": {
89
+ "type": "object",
90
+ "properties": {
91
+ "message": {
92
+ "type": "string",
93
+ "description": "The body of the message in Markdown format."
100
94
  }
101
- },
102
- {
103
- "type": "function",
104
- "function": {
105
- "name": "ls_tool",
106
- "description": "Lists files and subdirectories with advanced support for pagination and filtering. Automatically ignores common unnecessary files/directories like '.venv', 'node_modules', etc.",
107
- "parameters": {
108
- "type": "object",
109
- "properties": {
110
- "directory_path": {
111
- "type": "string",
112
- "description": "Path of the directory to list. Defaults to '.' (current directory).",
113
- "default": "."
114
- },
115
- "recursive": {
116
- "type": "boolean",
117
- "description": "If True, lists recursively all subdirectories.",
118
- "default": false
119
- },
120
- "ignore_patterns": {
121
- "type": "array",
122
- "items": {
123
- "type": "string"
124
- },
125
- "description": "Additional patterns to ignore (beyond defaults). E.g., ['test_*', '*.tmp']"
126
- },
127
- "start_index": {
128
- "type": "integer",
129
- "description": "Starting index for pagination (0-based).",
130
- "default": 0
131
- },
132
- "end_index": {
133
- "type": "integer",
134
- "description": "Ending index for pagination (exclusive). If not provided, lists everything from start_index."
135
- },
136
- "show_hidden": {
137
- "type": "boolean",
138
- "description": "If True, shows files/directories starting with '.'.",
139
- "default": false
140
- },
141
- "file_extensions": {
142
- "type": "array",
143
- "items": {
144
- "type": "string"
145
- },
146
- "description": "List of extensions to filter (e.g., ['.ts', '.js', '.md']). If not provided, shows all file types."
147
- },
148
- "max_depth": {
149
- "type": "integer",
150
- "description": "Maximum depth for recursive listing. If not provided, there is no limit."
151
- }
152
- },
153
- "required": []
154
- }
95
+ },
96
+ "required": [
97
+ "message"
98
+ ]
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "type": "function",
104
+ "function": {
105
+ "name": "ls_tool",
106
+ "description": "Lists files and subdirectories with advanced support for pagination and filtering. Automatically ignores common unnecessary files/directories like '.venv', 'node_modules', etc.",
107
+ "parameters": {
108
+ "type": "object",
109
+ "properties": {
110
+ "directory_path": {
111
+ "type": "string",
112
+ "description": "Path of the directory to list. Defaults to '.' (current directory).",
113
+ "default": "."
114
+ },
115
+ "recursive": {
116
+ "type": "boolean",
117
+ "description": "If True, lists recursively all subdirectories.",
118
+ "default": false
119
+ },
120
+ "ignore_patterns": {
121
+ "type": "array",
122
+ "items": {
123
+ "type": "string"
124
+ },
125
+ "description": "Additional patterns to ignore (beyond defaults). E.g., ['test_*', '*.tmp']"
126
+ },
127
+ "start_index": {
128
+ "type": "integer",
129
+ "description": "Starting index for pagination (0-based).",
130
+ "default": 0
131
+ },
132
+ "end_index": {
133
+ "type": "integer",
134
+ "description": "Ending index for pagination (exclusive). If not provided, lists everything from start_index."
135
+ },
136
+ "show_hidden": {
137
+ "type": "boolean",
138
+ "description": "If True, shows files/directories starting with '.'.",
139
+ "default": false
140
+ },
141
+ "file_extensions": {
142
+ "type": "array",
143
+ "items": {
144
+ "type": "string"
145
+ },
146
+ "description": "List of extensions to filter (e.g., ['.ts', '.js', '.md']). If not provided, shows all file types."
147
+ },
148
+ "max_depth": {
149
+ "type": "integer",
150
+ "description": "Maximum depth for recursive listing. If not provided, there is no limit."
155
151
  }
156
152
  },
157
- {
158
- "type": "function",
159
- "function": {
160
- "name": "count_file_lines",
161
- "description": "Counts and returns the total number of lines in a text file. Useful for quickly determining file size or checking if a file is empty before reading it.",
162
- "parameters": {
163
- "type": "object",
164
- "properties": {
165
- "filepath": {
166
- "type": "string",
167
- "description": "Path to the file to count lines from. Can be relative or absolute."
168
- }
169
- },
170
- "required": ["filepath"]
171
- }
153
+ "required": []
154
+ }
155
+ }
156
+ },
157
+ {
158
+ "type": "function",
159
+ "function": {
160
+ "name": "count_file_lines",
161
+ "description": "Counts and returns the total number of lines in a text file. Useful for quickly determining file size or checking if a file is empty before reading it.",
162
+ "parameters": {
163
+ "type": "object",
164
+ "properties": {
165
+ "filepath": {
166
+ "type": "string",
167
+ "description": "Path to the file to count lines from. Can be relative or absolute."
172
168
  }
173
169
  },
174
- {
175
- "type": "function",
176
- "function": {
177
- "name": "read_file_lines",
178
- "description": "Reads and returns content between specific line numbers from a text file. Ideal for efficiently reading portions of large files.",
179
- "parameters": {
180
- "type": "object",
181
- "properties": {
182
- "filepath": {
183
- "type": "string",
184
- "description": "Path to the file to read from."
185
- },
186
- "start_line": {
187
- "type": "integer",
188
- "description": "Starting line number (1-based index). Must be >= 1."
189
- },
190
- "end_line": {
191
- "type": "integer",
192
- "description": "Ending line number (1-based index, inclusive). Must be >= start_line."
193
- }
194
- },
195
- "required": ["filepath", "start_line", "end_line"]
196
- }
170
+ "required": [
171
+ "filepath"
172
+ ]
173
+ }
174
+ }
175
+ },
176
+ {
177
+ "type": "function",
178
+ "function": {
179
+ "name": "read_file_lines",
180
+ "description": "Reads and returns content between specific line numbers from a text file. Ideal for efficiently reading portions of large files.",
181
+ "parameters": {
182
+ "type": "object",
183
+ "properties": {
184
+ "filepath": {
185
+ "type": "string",
186
+ "description": "Path to the file to read from."
187
+ },
188
+ "start_line": {
189
+ "type": "integer",
190
+ "description": "Starting line number (1-based index). Must be >= 1."
191
+ },
192
+ "end_line": {
193
+ "type": "integer",
194
+ "description": "Ending line number (1-based index, inclusive). Must be >= start_line."
197
195
  }
198
- }
199
- ]
196
+ },
197
+ "required": [
198
+ "filepath",
199
+ "start_line",
200
+ "end_line"
201
+ ]
202
+ }
203
+ }
204
+ }
205
+ ]
200
206
  }
package/dist/main.js CHANGED
@@ -1686,7 +1686,7 @@ When asked to perform tasks such as fixing bugs, adding features, refactoring, o
1686
1686
  Objective: To independently implement and deliver a visually appealing, substantially complete, and functional prototype. Use all tools at your disposal to implement the application.
1687
1687
 
1688
1688
  1. Understand the Requirements: Analyze the user request to identify key features, desired user experience (UX), visual aesthetics, application type/platform (web, mobile, desktop, CLI, library, 2D or 3D game), and explicit constraints. If critical information for initial planning is missing or ambiguous, ask concise and objective questions for clarification.
1689
- 2. Task Checklist: Create a series of well-structured tasks in the task_checklist array, ensuring context and alignment with the project. Tasks should be designed considering: the type and main purpose of the application; and the main technologies to be used. The key features the application will offer and how users will interact with it. Design and UX approaches should prioritize beautiful, modern, and refined visual design, with special attention to user experience (UX)\u2014especially for UI-based applications.
1689
+ 2. Task Checklist: Create a series of well-structured tasks in the to_do array, ensuring context and alignment with the project. Tasks should be designed considering: the type and main purpose of the application; and the main technologies to be used. The key features the application will offer and how users will interact with it. Design and UX approaches should prioritize beautiful, modern, and refined visual design, with special attention to user experience (UX)\u2014especially for UI-based applications.
1690
1690
  - Ultimate Goal:
1691
1691
  Ensure that each task contributes to a cohesive, functional, and visually appealing final product. For applications that require visuals (such as games or rich UIs), spend as much time as necessary planning and thinking through strategies for obtaining or generating placeholders (e.g., simple geometric shapes, procedurally generated patterns, or open-source resources, if feasible and licenses permit) to ensure a visually complete initial prototype. Ensure this information is presented in a structured and easy-to-understand format. - When the main technologies are not specified, give preference to the following:
1692
1692
  - **Websites (Frontend):** NEXT.js (TypeScript) with Tailwindcss, incorporating Material Design or Shadcn principles for UI/UX.
@@ -1719,8 +1719,8 @@ Ensure that each task contributes to a cohesive, functional, and visually appeal
1719
1719
  ### IMPORTANT RULES
1720
1720
  - Sending the initial message is mandatory and marks the turn start.
1721
1721
  - Using the reasoning notebook is mandatory.
1722
- - Breaking the task into **task_checklist** with the reflective problem-solving tool is mandatory.
1723
- - Never include future steps in the **thought** field, only in the **task_checklist** checklist.
1722
+ - Breaking the task into **to_do** with the reflective problem-solving tool is mandatory.
1723
+ - Never include future steps in the **thought** field, only in the **to_do** checklist.
1724
1724
  - Calling \`<agent_end_turn_rules>\` is mandatory to close the turn.
1725
1725
  - Decline out-of-scope tasks professionally before calling \`<agent_end_turn_rules>\`.
1726
1726
  - Process only one task per turn, never multiple concurrently.
@@ -1834,13 +1834,13 @@ CRITICAL: Your laptop (**reasoning_nootebook**) is your ORGANIZED MIND
1834
1834
  ---
1835
1835
 
1836
1836
  <agent_end_turn_rules>
1837
- This tool is mandatory, but MUST only be called when all tasks in \`task_checklist\` are fully completed.
1837
+ This tool is mandatory, but MUST only be called when all tasks in \`to_do\` are fully completed.
1838
1838
 
1839
1839
  Rules:
1840
1840
  1. Never call this tool before all tasks are completed.
1841
- 2. It is strictly forbidden to call \`agent_end_turn\` if there are any pending tasks in \`task_checklist\`.
1841
+ 2. It is strictly forbidden to call \`agent_end_turn\` if there are any pending tasks in \`to_do\`.
1842
1842
  3. Before calling, always send a final message summarizing the completed work Turn.
1843
- 4. Verify that every task in the \`task_checklist\` array has a "completed" status before calling.
1843
+ 4. Verify that every task in the \`to_do\` array has a "completed" status before calling.
1844
1844
  </agent_end_turn_rules>
1845
1845
 
1846
1846
 
@@ -2021,7 +2021,7 @@ var BluMaAgent = class {
2021
2021
  eventBus;
2022
2022
  mcpClient;
2023
2023
  feedbackSystem;
2024
- maxContextTurns = 10;
2024
+ maxContextTurns = 300;
2025
2025
  isInterrupted = false;
2026
2026
  constructor(sessionId2, eventBus2, llm, deploymentName, mcpClient, feedbackSystem) {
2027
2027
  this.sessionId = sessionId2;
@@ -2318,9 +2318,9 @@ CRITICAL: Your laptop (reasoning_nootebook) is your ORGANIZED MIND
2318
2318
  - Jumping between unrelated subtasks
2319
2319
 
2320
2320
  Important rule:
2321
- Do not include future steps/to-dos in thought; put them strictly in task_checklist, using the mandated checklist markers.
2321
+ Do not include future steps/to-dos in thought; put them strictly in to_do, using the mandated checklist markers.
2322
2322
 
2323
- - task_checklist: Checklist list of high-level upcoming tasks.
2323
+ - to_do: Checklist list of high-level upcoming tasks.
2324
2324
  Format is mandatory:
2325
2325
  - "\u{1F5F8}" \u2192 for tasks not yet done (pending)
2326
2326
  - "[ ]" \u2192 for tasks already completed
@@ -2944,9 +2944,9 @@ var renderBlumaNotebook = ({
2944
2944
  /* @__PURE__ */ jsx8(Text8, { color: "white", bold: true, children: "Reasoning:" }),
2945
2945
  /* @__PURE__ */ jsx8(Box8, { marginLeft: 2, children: /* @__PURE__ */ jsx8(Text8, { color: "gray", children: thinkingData.thought }) })
2946
2946
  ] }),
2947
- thinkingData.task_checklist && thinkingData.task_checklist.length > 0 && /* @__PURE__ */ jsxs8(Box8, { marginTop: 1, flexDirection: "column", children: [
2947
+ thinkingData.to_do && thinkingData.to_do.length > 0 && /* @__PURE__ */ jsxs8(Box8, { marginTop: 1, flexDirection: "column", children: [
2948
2948
  /* @__PURE__ */ jsx8(Text8, { color: "white", bold: true, children: "Todos:" }),
2949
- thinkingData.task_checklist.map((task, index) => /* @__PURE__ */ jsx8(Box8, { marginLeft: 2, children: /* @__PURE__ */ jsx8(Text8, { children: /* @__PURE__ */ jsx8(
2949
+ thinkingData.to_do.map((task, index) => /* @__PURE__ */ jsx8(Box8, { marginLeft: 2, children: /* @__PURE__ */ jsx8(Text8, { children: /* @__PURE__ */ jsx8(
2950
2950
  Text8,
2951
2951
  {
2952
2952
  color: task.startsWith("\u{1F5F9}") ? "gray" : "white",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomad-e/bluma-cli",
3
- "version": "0.0.61",
3
+ "version": "0.0.63",
4
4
  "description": "BluMa independent agent for automation and advanced software engineering.",
5
5
  "author": "Alex Fonseca",
6
6
  "license": "Apache-2.0",