@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.
- package/dist/config/native_tools.json +195 -189
- package/dist/main.js +11 -11
- package/package.json +1 -1
|
@@ -1,200 +1,206 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
"
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
"
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
"
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
"
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
|
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 **
|
|
1723
|
-
- Never include future steps in the **thought** field, only in the **
|
|
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 \`
|
|
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 \`
|
|
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 \`
|
|
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 =
|
|
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
|
|
2321
|
+
Do not include future steps/to-dos in thought; put them strictly in to_do, using the mandated checklist markers.
|
|
2322
2322
|
|
|
2323
|
-
-
|
|
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.
|
|
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.
|
|
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",
|