bravecode-cli 0.1.45 → 0.1.46

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.
Files changed (103) hide show
  1. package/dist/cli-main.mjs +4 -3
  2. package/dist/cli-main.mjs.map +2 -2
  3. package/package.json +1 -1
  4. package/dist/autoModel.d.ts +0 -39
  5. package/dist/autoModel.d.ts.map +0 -1
  6. package/dist/autoModel.js +0 -127
  7. package/dist/autoModel.js.map +0 -1
  8. package/dist/bravecode +0 -22
  9. package/dist/cli.d.ts +0 -2
  10. package/dist/cli.d.ts.map +0 -1
  11. package/dist/cli.js +0 -468
  12. package/dist/cli.js.map +0 -1
  13. package/dist/core/agent/index.d.ts +0 -31
  14. package/dist/core/agent/index.d.ts.map +0 -1
  15. package/dist/core/agent/index.js +0 -339
  16. package/dist/core/agent/index.js.map +0 -1
  17. package/dist/core/config/index.d.ts +0 -54
  18. package/dist/core/config/index.d.ts.map +0 -1
  19. package/dist/core/config/index.js +0 -138
  20. package/dist/core/config/index.js.map +0 -1
  21. package/dist/core/context/index.d.ts +0 -20
  22. package/dist/core/context/index.d.ts.map +0 -1
  23. package/dist/core/context/index.js +0 -70
  24. package/dist/core/context/index.js.map +0 -1
  25. package/dist/core/mcp/index.d.ts +0 -32
  26. package/dist/core/mcp/index.d.ts.map +0 -1
  27. package/dist/core/mcp/index.js +0 -160
  28. package/dist/core/mcp/index.js.map +0 -1
  29. package/dist/core/permission/index.d.ts +0 -24
  30. package/dist/core/permission/index.d.ts.map +0 -1
  31. package/dist/core/permission/index.js +0 -96
  32. package/dist/core/permission/index.js.map +0 -1
  33. package/dist/core/plugin/index.d.ts +0 -44
  34. package/dist/core/plugin/index.d.ts.map +0 -1
  35. package/dist/core/plugin/index.js +0 -139
  36. package/dist/core/plugin/index.js.map +0 -1
  37. package/dist/core/session/index.d.ts +0 -23
  38. package/dist/core/session/index.d.ts.map +0 -1
  39. package/dist/core/session/index.js +0 -51
  40. package/dist/core/session/index.js.map +0 -1
  41. package/dist/core/share/index.d.ts +0 -28
  42. package/dist/core/share/index.d.ts.map +0 -1
  43. package/dist/core/share/index.js +0 -100
  44. package/dist/core/share/index.js.map +0 -1
  45. package/dist/core/snapshot/index.d.ts +0 -30
  46. package/dist/core/snapshot/index.d.ts.map +0 -1
  47. package/dist/core/snapshot/index.js +0 -141
  48. package/dist/core/snapshot/index.js.map +0 -1
  49. package/dist/core/tool/bash.d.ts +0 -8
  50. package/dist/core/tool/bash.d.ts.map +0 -1
  51. package/dist/core/tool/bash.js +0 -29
  52. package/dist/core/tool/bash.js.map +0 -1
  53. package/dist/core/tool/browser.d.ts +0 -5
  54. package/dist/core/tool/browser.d.ts.map +0 -1
  55. package/dist/core/tool/browser.js +0 -119
  56. package/dist/core/tool/browser.js.map +0 -1
  57. package/dist/core/tool/file.d.ts +0 -5
  58. package/dist/core/tool/file.d.ts.map +0 -1
  59. package/dist/core/tool/file.js +0 -79
  60. package/dist/core/tool/file.js.map +0 -1
  61. package/dist/core/tool/index.d.ts +0 -21
  62. package/dist/core/tool/index.d.ts.map +0 -1
  63. package/dist/core/tool/index.js +0 -90
  64. package/dist/core/tool/index.js.map +0 -1
  65. package/dist/core/tool/search.d.ts +0 -4
  66. package/dist/core/tool/search.d.ts.map +0 -1
  67. package/dist/core/tool/search.js +0 -107
  68. package/dist/core/tool/search.js.map +0 -1
  69. package/dist/core/tool/task.d.ts +0 -9
  70. package/dist/core/tool/task.d.ts.map +0 -1
  71. package/dist/core/tool/task.js +0 -54
  72. package/dist/core/tool/task.js.map +0 -1
  73. package/dist/core/tool/todowrite.d.ts +0 -3
  74. package/dist/core/tool/todowrite.d.ts.map +0 -1
  75. package/dist/core/tool/todowrite.js +0 -75
  76. package/dist/core/tool/todowrite.js.map +0 -1
  77. package/dist/core/tool/websearch.d.ts +0 -3
  78. package/dist/core/tool/websearch.d.ts.map +0 -1
  79. package/dist/core/tool/websearch.js +0 -46
  80. package/dist/core/tool/websearch.js.map +0 -1
  81. package/dist/core/tui/ChatTUI.d.ts +0 -16
  82. package/dist/core/tui/ChatTUI.d.ts.map +0 -1
  83. package/dist/core/tui/ChatTUI.js +0 -65
  84. package/dist/core/tui/ChatTUI.js.map +0 -1
  85. package/dist/core/tui/index.d.ts +0 -15
  86. package/dist/core/tui/index.d.ts.map +0 -1
  87. package/dist/core/tui/index.js +0 -45
  88. package/dist/core/tui/index.js.map +0 -1
  89. package/dist/core/update/index.d.ts +0 -23
  90. package/dist/core/update/index.d.ts.map +0 -1
  91. package/dist/core/update/index.js +0 -115
  92. package/dist/core/update/index.js.map +0 -1
  93. package/dist/index.d.ts +0 -18
  94. package/dist/index.d.ts.map +0 -1
  95. package/dist/index.js +0 -11
  96. package/dist/index.js.map +0 -1
  97. package/dist/models.json +0 -545
  98. package/dist/provider.d.ts +0 -43
  99. package/dist/provider.d.ts.map +0 -1
  100. package/dist/provider.js +0 -294
  101. package/dist/provider.js.map +0 -1
  102. package/dist/tui/ChatTUI.mjs +0 -89
  103. package/dist/tui-launcher.mjs +0 -64
@@ -1,339 +0,0 @@
1
- import { LLMProviderManager } from "../../provider";
2
- import { ToolRegistry } from "../tool";
3
- import { PermissionSystem, createDefaultPermissions } from "../permission";
4
- import { SnapshotManager } from "../snapshot";
5
- import { PluginManager } from "../plugin";
6
- export const defaultAgents = [
7
- {
8
- id: "build",
9
- name: "Build Agent",
10
- description: "Full access to tools for development work",
11
- model: "codestral-latest",
12
- systemPrompt: `You are BraveCode AI, an expert software engineer. You have access to tools to read, write, edit files, and execute commands.
13
-
14
- When asked to make changes:
15
- 1. First understand the codebase by reading relevant files
16
- 2. Make the necessary changes using edit/write tools
17
- 3. Verify your changes work by running tests or commands
18
-
19
- Be concise and direct. Show code when relevant.`,
20
- temperature: 0.7,
21
- maxIterations: 20,
22
- },
23
- {
24
- id: "plan",
25
- name: "Plan Agent",
26
- description: "Read-only analysis and planning",
27
- model: "codestral-latest",
28
- systemPrompt: `You are BraveCode AI, a senior architect. You analyze codebases and create plans without making changes.
29
-
30
- Focus on:
31
- 1. Understanding the existing code structure
32
- 2. Identifying issues and improvements
33
- 3. Creating step-by-step implementation plans
34
-
35
- Do not make edits. Only analyze and plan.`,
36
- temperature: 0.3,
37
- maxIterations: 10,
38
- },
39
- {
40
- id: "debug",
41
- name: "Debug Agent",
42
- description: "Specialized in debugging and troubleshooting issues",
43
- model: "DeepSeek-R1",
44
- systemPrompt: `You are BraveCode AI, an expert debugger. You systematically find and fix bugs.
45
-
46
- Debugging process:
47
- 1. Reproduce the issue - understand what's happening vs what's expected
48
- 2. Read relevant files to understand the code flow
49
- 3. Add logging or use grep to trace the problem
50
- 4. Identify root cause
51
- 5. Implement the fix
52
- 6. Verify the fix works
53
-
54
- Common debug techniques:
55
- - Check error messages and stack traces
56
- - Use grep to find related code
57
- - Read logs and understand execution flow
58
- - Test assumptions with bash commands
59
- - Add console.log or print statements
60
-
61
- Be methodical. Show your debugging steps.`,
62
- temperature: 0.5,
63
- maxIterations: 25,
64
- },
65
- {
66
- id: "testing",
67
- name: "Testing Agent",
68
- description: "Specialized in writing and running tests",
69
- model: "codestral-latest",
70
- systemPrompt: `You are BraveCode AI, a testing expert. You write comprehensive tests and ensure code quality.
71
-
72
- Testing process:
73
- 1. Understand the code that needs testing
74
- 2. Check existing test patterns in the project
75
- 3. Write unit tests for individual functions
76
- 4. Write integration tests for component interactions
77
- 5. Run tests and fix any failures
78
- 6. Ensure good test coverage
79
-
80
- Test frameworks to use (based on project):
81
- - Jest/Vitest for JavaScript/TypeScript
82
- - pytest for Python
83
- - Go testing package for Go
84
- - JUnit for Java
85
-
86
- Best practices:
87
- - Test edge cases and error conditions
88
- - Use descriptive test names
89
- - Mock external dependencies
90
- - Test both positive and negative scenarios
91
-
92
- Always run tests after writing them.`,
93
- temperature: 0.4,
94
- maxIterations: 20,
95
- },
96
- {
97
- id: "security",
98
- name: "Security Agent",
99
- description: "Vulnerability assessment and penetration testing",
100
- model: "DeepSeek-R1",
101
- systemPrompt: `You are BraveCode AI, a security specialist. You perform vulnerability assessments and security audits.
102
-
103
- Security assessment process:
104
- 1. Scan for common vulnerabilities
105
- 2. Check for OWASP Top 10 issues
106
- 3. Analyze authentication and authorization
107
- 4. Review input validation and sanitization
108
- 5. Check for secrets and sensitive data exposure
109
- 6. Assess dependency vulnerabilities
110
-
111
- Vulnerability categories to check:
112
- - Injection flaws (SQL, NoSQL, Command, LDAP)
113
- - Broken authentication
114
- - Sensitive data exposure
115
- - XML External Entity (XXE)
116
- - Broken access control
117
- - Security misconfiguration
118
- - Cross-site scripting (XSS)
119
- - Insecure deserialization
120
- - Using components with known vulnerabilities
121
- - Insufficient logging
122
-
123
- When you find vulnerabilities:
124
- 1. Classify severity (Critical/High/Medium/Low)
125
- 2. Provide proof of concept
126
- 3. Suggest remediation steps
127
- 4. Implement fixes if authorized
128
-
129
- Use bash tools to:
130
- - Run security scanners (npm audit, safety, trivy)
131
- - Check for hardcoded secrets
132
- - Verify HTTPS/TLS configuration
133
- - Test for SQL injection points`,
134
- temperature: 0.3,
135
- maxIterations: 30,
136
- },
137
- {
138
- id: "api-security",
139
- name: "API Security Agent",
140
- description: "API vulnerability assessment and penetration testing",
141
- model: "DeepSeek-R1",
142
- systemPrompt: `You are BraveCode AI, an API security specialist. You perform comprehensive API vulnerability assessments and penetration testing.
143
-
144
- API Security Assessment Process:
145
- 1. API Discovery - Map all endpoints, methods, and parameters
146
- 2. Authentication Testing - Verify auth mechanisms
147
- 3. Authorization Testing - Check access controls
148
- 4. Input Validation - Test for injection attacks
149
- 5. Rate Limiting - Test for abuse potential
150
- 6. Data Exposure - Check for sensitive data leaks
151
-
152
- OWASP API Security Top 10 Checks:
153
- 1. API1:2023 - Broken Object Level Authorization (BOLA)
154
- 2. API2:2023 - Broken Authentication
155
- 3. API3:2023 - Broken Object Property Level Authorization
156
- 4. API4:2023 - Unrestricted Resource Consumption
157
- 5. API5:2023 - Broken Function Level Authorization
158
- 6. API6:2023 - Unrestricted Access to Sensitive Business Flows
159
- 7. API7:2023 - Server Side Request Forgery (SSRF)
160
- 8. API8:2023 - Security Misconfiguration
161
- 9. API9:2023 - Improper Inventory Management
162
- 10. API10:2023 - Unsafe Consumption of APIs
163
-
164
- Testing Methodology:
165
-
166
- 1. Endpoint Enumeration:
167
- - Test common API paths (/api/v1/*, /graphql, /swagger)
168
- - Check for hidden endpoints in JavaScript files
169
- - Analyze API documentation (OpenAPI/Swagger)
170
-
171
- 2. Authentication Testing:
172
- - Test JWT token validation
173
- - Check for weak passwords
174
- - Test session management
175
- - Verify token expiration
176
- - Test API key security
177
-
178
- 3. Authorization Testing:
179
- - Test IDOR vulnerabilities
180
- - Check role-based access control
181
- - Test privilege escalation
182
- - Verify resource ownership
183
-
184
- 4. Input Validation Testing:
185
- - SQL injection in parameters
186
- - NoSQL injection
187
- - Command injection
188
- - XML/JSON injection
189
- - SSRF via URL parameters
190
-
191
- 5. Rate Limiting:
192
- - Test for brute force protection
193
- - Check for DDoS vulnerabilities
194
- - Verify throttling mechanisms
195
-
196
- 6. Data Exposure:
197
- - Check error messages for info leaks
198
- - Verify sensitive data masking
199
- - Test for verbose responses
200
-
201
- Tools to Use:
202
- - curl for manual API testing
203
- - jq for JSON parsing
204
- - grep for searching responses
205
- - bash for scripting attacks
206
-
207
- When testing:
208
- 1. Document all endpoints found
209
- 2. Classify vulnerabilities by severity
210
- 3. Provide proof-of-concept exploits
211
- 4. Suggest remediation steps
212
- 5. Create automated test scripts
213
-
214
- IMPORTANT: Only test APIs you have authorization to test. Never attempt to access unauthorized systems.`,
215
- temperature: 0.3,
216
- maxIterations: 35,
217
- },
218
- ];
219
- export class Agent {
220
- provider;
221
- tools;
222
- permissions;
223
- snapshots;
224
- pluginHooks;
225
- config;
226
- conversationHistory = [];
227
- autoApprove = false;
228
- constructor(provider, tools, config) {
229
- this.provider = provider;
230
- this.tools = tools;
231
- this.config = config;
232
- this.permissions = new PermissionSystem(createDefaultPermissions());
233
- this.snapshots = new SnapshotManager();
234
- this.pluginHooks = tools.getPluginManager().getAllHooks();
235
- }
236
- setAutoApprove(auto) {
237
- this.autoApprove = auto;
238
- }
239
- async run(userMessage, onChunk) {
240
- let message = userMessage;
241
- if (this.pluginHooks.beforeAgentRun) {
242
- message = await this.pluginHooks.beforeAgentRun(this.config.id, message);
243
- }
244
- this.conversationHistory.push({ role: "user", content: message });
245
- let iterations = 0;
246
- const maxIter = this.config.maxIterations || 20;
247
- while (iterations < maxIter) {
248
- iterations++;
249
- const messages = [
250
- { role: "system", content: this.config.systemPrompt },
251
- ...this.conversationHistory,
252
- ];
253
- const toolDefs = this.tools.getToolDefinitions();
254
- let fullResponse = "";
255
- let toolCalls = [];
256
- if (onChunk) {
257
- const stream = this.provider.chatStream({
258
- model: this.config.model,
259
- messages,
260
- });
261
- for await (const chunk of stream) {
262
- if (chunk.type === "text" && chunk.text) {
263
- fullResponse += chunk.text;
264
- onChunk(chunk.text);
265
- }
266
- }
267
- }
268
- else {
269
- const result = await this.provider.chat({
270
- model: this.config.model,
271
- messages,
272
- });
273
- fullResponse = result.text || "";
274
- toolCalls = result.toolCalls || [];
275
- }
276
- this.conversationHistory.push({ role: "assistant", content: fullResponse });
277
- if (toolCalls && toolCalls.length > 0) {
278
- for (const toolCall of toolCalls) {
279
- const toolName = toolCall.function?.name || toolCall.name;
280
- const toolArgs = toolCall.function?.arguments
281
- ? JSON.parse(toolCall.function.arguments)
282
- : toolCall.arguments;
283
- const permission = await this.permissions.checkPermission(toolName, toolArgs, this.config.id);
284
- if (permission.action === "deny") {
285
- console.log(`\n > Blocked: ${toolName} (permission denied)`);
286
- this.conversationHistory.push({
287
- role: "tool",
288
- content: "Permission denied by security policy.",
289
- toolCallId: toolCall.id,
290
- });
291
- continue;
292
- }
293
- if (permission.action === "ask" && !this.autoApprove) {
294
- console.log(`\n > ${toolName} requires approval`);
295
- console.log(` Args: ${JSON.stringify(toolArgs).substring(0, 100)}...`);
296
- }
297
- if (["edit", "write"].includes(toolName)) {
298
- await this.snapshots.createSnapshot(`before ${toolName}`);
299
- }
300
- let args = toolArgs;
301
- if (this.pluginHooks.beforeToolCall) {
302
- args = await this.pluginHooks.beforeToolCall(toolName, args);
303
- }
304
- console.log(`\n > Running: ${toolName}`);
305
- let result = await this.tools.execute(toolName, args);
306
- if (this.pluginHooks.afterToolCall) {
307
- result = await this.pluginHooks.afterToolCall(toolName, args, result);
308
- }
309
- this.conversationHistory.push({
310
- role: "tool",
311
- content: result,
312
- toolCallId: toolCall.id,
313
- });
314
- if (onChunk) {
315
- onChunk(`\n[${toolName} result]: ${result.substring(0, 200)}...\n`);
316
- }
317
- }
318
- }
319
- else {
320
- return fullResponse;
321
- }
322
- }
323
- return "Max iterations reached";
324
- }
325
- async undo() {
326
- const result = await this.snapshots.revert();
327
- return result.message;
328
- }
329
- async getDiff() {
330
- return this.snapshots.getDiff();
331
- }
332
- clearHistory() {
333
- this.conversationHistory = [];
334
- }
335
- getHistory() {
336
- return [...this.conversationHistory];
337
- }
338
- }
339
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAoB,MAAM,WAAW,CAAC;AAY5D,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE;;;;;;;gDAO8B;QAC5C,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE;;;;;;;0CAOwB;QACtC,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qDAAqD;QAClE,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE;;;;;;;;;;;;;;;;;0CAiBwB;QACtC,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;qCAsBmB;QACjC,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgCc;QAC5B,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wGAwEsF;QACpG,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,EAAE;KAClB;CACF,CAAC;AAEF,MAAM,OAAO,KAAK;IACR,QAAQ,CAAqB;IAC7B,KAAK,CAAe;IACpB,WAAW,CAAmB;IAC9B,SAAS,CAAkB;IAC3B,WAAW,CAAc;IAC1B,MAAM,CAAc;IACnB,mBAAmB,GAAc,EAAE,CAAC;IACpC,WAAW,GAAY,KAAK,CAAC;IAErC,YAAY,QAA4B,EAAE,KAAmB,EAAE,MAAmB;QAChF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,wBAAwB,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,OAAgC;QAC7D,IAAI,OAAO,GAAG,WAAW,CAAC;QAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;YACpC,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAElE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAEhD,OAAO,UAAU,GAAG,OAAO,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAc;gBAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBACrD,GAAG,IAAI,CAAC,mBAAmB;aAC5B,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,IAAI,SAAS,GAAU,EAAE,CAAC;YAE1B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACtC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,QAAQ;iBACT,CAAC,CAAC;gBAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBACxC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC;wBAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACtC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,QAAQ;iBACT,CAAC,CAAC;gBACH,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACjC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YACrC,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAE5E,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;oBAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS;wBAC3C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACzC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAEvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CACvD,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,MAAM,CAAC,EAAE,CACf,CAAC;oBAEF,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBACjC,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,sBAAsB,CAAC,CAAC;wBAC9D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;4BAC5B,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,uCAAuC;4BAChD,UAAU,EAAE,QAAQ,CAAC,EAAE;yBACxB,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;oBAED,IAAI,UAAU,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrD,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,oBAAoB,CAAC,CAAC;wBACnD,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5E,CAAC;oBAED,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACzC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;oBAC5D,CAAC;oBAED,IAAI,IAAI,GAAG,QAAQ,CAAC;oBACpB,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;wBACpC,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC/D,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;oBAE1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAEtD,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;wBACnC,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;oBACxE,CAAC;oBAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;wBAC5B,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACxB,CAAC,CAAC;oBAEH,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,MAAM,QAAQ,aAAa,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -1,54 +0,0 @@
1
- export interface BraveCodeConfig {
2
- version: string;
3
- provider: {
4
- default: string;
5
- apiKey?: string;
6
- baseUrl?: string;
7
- };
8
- model: {
9
- default: string;
10
- autoSelect: boolean;
11
- preferred?: string[];
12
- };
13
- agent: {
14
- default: string;
15
- autoApprove: boolean;
16
- maxIterations: number;
17
- };
18
- permissions: {
19
- bash: "allow" | "ask" | "deny";
20
- edit: "allow" | "ask" | "deny";
21
- write: "allow" | "ask" | "deny";
22
- browser: "allow" | "ask" | "deny";
23
- };
24
- ui: {
25
- theme: "dark" | "light" | "auto";
26
- showTokens: boolean;
27
- streamingEnabled: boolean;
28
- };
29
- snapshot: {
30
- enabled: boolean;
31
- autoSnapshot: boolean;
32
- };
33
- telemetry: boolean;
34
- }
35
- export declare class ConfigManager {
36
- private configDir;
37
- private configFile;
38
- private config;
39
- constructor();
40
- private loadConfig;
41
- private mergeWithDefaults;
42
- saveConfig(config: BraveCodeConfig): void;
43
- get(): BraveCodeConfig;
44
- set<K extends keyof BraveCodeConfig>(key: K, value: BraveCodeConfig[K]): void;
45
- getNested<T>(path: string): T | undefined;
46
- setNested<T>(path: string, value: T): void;
47
- reset(): void;
48
- validate(): {
49
- valid: boolean;
50
- errors: string[];
51
- };
52
- }
53
- export declare function getConfig(): ConfigManager;
54
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE;QACX,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;QAC/B,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;QAC/B,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;QAChC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;KACnC,CAAC;IACF,EAAE,EAAE;QACF,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QACjC,UAAU,EAAE,OAAO,CAAC;QACpB,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,SAAS,EAAE,OAAO,CAAC;CACpB;AAoCD,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAkB;;IAQhC,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,iBAAiB;IAazB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAKzC,GAAG,IAAI,eAAe;IAItB,GAAG,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7E,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAezC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAgB1C,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAcjD;AAID,wBAAgB,SAAS,IAAI,aAAa,CAKzC"}
@@ -1,138 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
2
- import { join } from "path";
3
- import { homedir } from "os";
4
- const DEFAULT_CONFIG = {
5
- version: "0.1.0",
6
- provider: {
7
- default: "bravecode",
8
- baseUrl: "https://codero.sohailsyed.com/api/chat",
9
- },
10
- model: {
11
- default: "codestral-latest",
12
- autoSelect: true,
13
- preferred: ["codestral-latest", "mistral-large-2512", "DeepSeek-V3"],
14
- },
15
- agent: {
16
- default: "build",
17
- autoApprove: false,
18
- maxIterations: 20,
19
- },
20
- permissions: {
21
- bash: "ask",
22
- edit: "ask",
23
- write: "ask",
24
- browser: "allow",
25
- },
26
- ui: {
27
- theme: "auto",
28
- showTokens: false,
29
- streamingEnabled: true,
30
- },
31
- snapshot: {
32
- enabled: true,
33
- autoSnapshot: true,
34
- },
35
- telemetry: false,
36
- };
37
- export class ConfigManager {
38
- configDir;
39
- configFile;
40
- config;
41
- constructor() {
42
- this.configDir = join(homedir(), ".bravecode");
43
- this.configFile = join(this.configDir, "config.json");
44
- this.config = this.loadConfig();
45
- }
46
- loadConfig() {
47
- if (!existsSync(this.configDir)) {
48
- mkdirSync(this.configDir, { recursive: true });
49
- }
50
- if (existsSync(this.configFile)) {
51
- try {
52
- const raw = readFileSync(this.configFile, "utf-8");
53
- const loaded = JSON.parse(raw);
54
- return this.mergeWithDefaults(loaded);
55
- }
56
- catch {
57
- return { ...DEFAULT_CONFIG };
58
- }
59
- }
60
- this.saveConfig(DEFAULT_CONFIG);
61
- return { ...DEFAULT_CONFIG };
62
- }
63
- mergeWithDefaults(loaded) {
64
- return {
65
- ...DEFAULT_CONFIG,
66
- ...loaded,
67
- provider: { ...DEFAULT_CONFIG.provider, ...loaded.provider },
68
- model: { ...DEFAULT_CONFIG.model, ...loaded.model },
69
- agent: { ...DEFAULT_CONFIG.agent, ...loaded.agent },
70
- permissions: { ...DEFAULT_CONFIG.permissions, ...loaded.permissions },
71
- ui: { ...DEFAULT_CONFIG.ui, ...loaded.ui },
72
- snapshot: { ...DEFAULT_CONFIG.snapshot, ...loaded.snapshot },
73
- };
74
- }
75
- saveConfig(config) {
76
- this.config = config;
77
- writeFileSync(this.configFile, JSON.stringify(config, null, 2));
78
- }
79
- get() {
80
- return { ...this.config };
81
- }
82
- set(key, value) {
83
- this.config[key] = value;
84
- this.saveConfig(this.config);
85
- }
86
- getNested(path) {
87
- const keys = path.split(".");
88
- let current = this.config;
89
- for (const key of keys) {
90
- if (current && typeof current === "object" && key in current) {
91
- current = current[key];
92
- }
93
- else {
94
- return undefined;
95
- }
96
- }
97
- return current;
98
- }
99
- setNested(path, value) {
100
- const keys = path.split(".");
101
- let current = this.config;
102
- for (let i = 0; i < keys.length - 1; i++) {
103
- const key = keys[i];
104
- if (!(key in current) || typeof current[key] !== "object") {
105
- current[key] = {};
106
- }
107
- current = current[key];
108
- }
109
- current[keys[keys.length - 1]] = value;
110
- this.saveConfig(this.config);
111
- }
112
- reset() {
113
- this.config = { ...DEFAULT_CONFIG };
114
- this.saveConfig(this.config);
115
- }
116
- validate() {
117
- const errors = [];
118
- if (!this.config.version)
119
- errors.push("Missing version");
120
- if (!["bravecode", "openrouter", "9router", "mistral", "deepseek"].includes(this.config.provider.default)) {
121
- errors.push("Invalid provider");
122
- }
123
- if (!this.config.model.default)
124
- errors.push("Missing model default");
125
- if (typeof this.config.agent.maxIterations !== "number" || this.config.agent.maxIterations < 1) {
126
- errors.push("Invalid maxIterations");
127
- }
128
- return { valid: errors.length === 0, errors };
129
- }
130
- }
131
- let instance = null;
132
- export function getConfig() {
133
- if (!instance) {
134
- instance = new ConfigManager();
135
- }
136
- return instance;
137
- }
138
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { Message } from "../../provider";
2
- export interface CompactionResult {
3
- summary: string;
4
- originalTokens: number;
5
- compactedTokens: number;
6
- }
7
- export declare class ContextCompactor {
8
- private maxTokens;
9
- private summaryRatio;
10
- constructor(maxTokens?: number, summaryRatio?: number);
11
- private estimateTokens;
12
- private shouldCompact;
13
- compact(messages: Message[], provider: any): Promise<CompactionResult>;
14
- getStatus(messages: Message[]): {
15
- tokens: number;
16
- shouldCompact: boolean;
17
- percentage: number;
18
- };
19
- }
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;gBAEjB,SAAS,GAAE,MAAa,EAAE,YAAY,GAAE,MAAY;IAKhE,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IAKf,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiD5E,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAQ/F"}
@@ -1,70 +0,0 @@
1
- export class ContextCompactor {
2
- maxTokens;
3
- summaryRatio;
4
- constructor(maxTokens = 8000, summaryRatio = 0.3) {
5
- this.maxTokens = maxTokens;
6
- this.summaryRatio = summaryRatio;
7
- }
8
- estimateTokens(messages) {
9
- let tokens = 0;
10
- for (const msg of messages) {
11
- const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
12
- tokens += Math.ceil(content.length / 4);
13
- }
14
- return tokens;
15
- }
16
- shouldCompact(messages) {
17
- const estimated = this.estimateTokens(messages);
18
- return estimated > this.maxTokens;
19
- }
20
- async compact(messages, provider) {
21
- if (!this.shouldCompact(messages)) {
22
- return {
23
- summary: "",
24
- originalTokens: this.estimateTokens(messages),
25
- compactedTokens: this.estimateTokens(messages),
26
- };
27
- }
28
- const originalTokens = this.estimateTokens(messages);
29
- const systemMessages = messages.filter((m) => m.role === "system");
30
- const conversationMessages = messages.filter((m) => m.role !== "system");
31
- const cutoffIndex = Math.floor(conversationMessages.length * (1 - this.summaryRatio));
32
- const toSummarize = conversationMessages.slice(0, cutoffIndex);
33
- const toKeep = conversationMessages.slice(cutoffIndex);
34
- const summaryPrompt = [
35
- { role: "user", content: `Summarize this conversation concisely, preserving key decisions and context:\n\n${toSummarize.map((m) => `${m.role}: ${typeof m.content === "string" ? m.content : "[tool result]"}`).join("\n\n")}` }
36
- ];
37
- let summary;
38
- try {
39
- const result = await provider.chat({
40
- model: "codestral-latest",
41
- messages: summaryPrompt,
42
- maxTokens: 500,
43
- });
44
- summary = result.text || "Conversation summary unavailable.";
45
- }
46
- catch {
47
- summary = "Conversation summary unavailable.";
48
- }
49
- const compacted = [
50
- ...systemMessages,
51
- { role: "user", content: `[Previous conversation summary]: ${summary}` },
52
- ...toKeep,
53
- ];
54
- const compactedTokens = this.estimateTokens(compacted);
55
- return {
56
- summary,
57
- originalTokens,
58
- compactedTokens,
59
- };
60
- }
61
- getStatus(messages) {
62
- const tokens = this.estimateTokens(messages);
63
- return {
64
- tokens,
65
- shouldCompact: tokens > this.maxTokens,
66
- percentage: Math.round((tokens / this.maxTokens) * 100),
67
- };
68
- }
69
- }
70
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"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"}