bravecode-cli 0.1.0

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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +387 -0
  3. package/dist/autoModel.d.ts +39 -0
  4. package/dist/autoModel.d.ts.map +1 -0
  5. package/dist/autoModel.js +127 -0
  6. package/dist/autoModel.js.map +1 -0
  7. package/dist/cli.cjs +41727 -0
  8. package/dist/cli.cjs.map +7 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +459 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/cli.mjs +41000 -0
  14. package/dist/cli.mjs.map +7 -0
  15. package/dist/core/agent/index.d.ts +31 -0
  16. package/dist/core/agent/index.d.ts.map +1 -0
  17. package/dist/core/agent/index.js +339 -0
  18. package/dist/core/agent/index.js.map +1 -0
  19. package/dist/core/config/index.d.ts +54 -0
  20. package/dist/core/config/index.d.ts.map +1 -0
  21. package/dist/core/config/index.js +138 -0
  22. package/dist/core/config/index.js.map +1 -0
  23. package/dist/core/context/index.d.ts +20 -0
  24. package/dist/core/context/index.d.ts.map +1 -0
  25. package/dist/core/context/index.js +70 -0
  26. package/dist/core/context/index.js.map +1 -0
  27. package/dist/core/mcp/index.d.ts +32 -0
  28. package/dist/core/mcp/index.d.ts.map +1 -0
  29. package/dist/core/mcp/index.js +160 -0
  30. package/dist/core/mcp/index.js.map +1 -0
  31. package/dist/core/permission/index.d.ts +24 -0
  32. package/dist/core/permission/index.d.ts.map +1 -0
  33. package/dist/core/permission/index.js +96 -0
  34. package/dist/core/permission/index.js.map +1 -0
  35. package/dist/core/plugin/index.d.ts +44 -0
  36. package/dist/core/plugin/index.d.ts.map +1 -0
  37. package/dist/core/plugin/index.js +139 -0
  38. package/dist/core/plugin/index.js.map +1 -0
  39. package/dist/core/session/index.d.ts +23 -0
  40. package/dist/core/session/index.d.ts.map +1 -0
  41. package/dist/core/session/index.js +51 -0
  42. package/dist/core/session/index.js.map +1 -0
  43. package/dist/core/share/index.d.ts +28 -0
  44. package/dist/core/share/index.d.ts.map +1 -0
  45. package/dist/core/share/index.js +100 -0
  46. package/dist/core/share/index.js.map +1 -0
  47. package/dist/core/snapshot/index.d.ts +30 -0
  48. package/dist/core/snapshot/index.d.ts.map +1 -0
  49. package/dist/core/snapshot/index.js +141 -0
  50. package/dist/core/snapshot/index.js.map +1 -0
  51. package/dist/core/tool/bash.d.ts +8 -0
  52. package/dist/core/tool/bash.d.ts.map +1 -0
  53. package/dist/core/tool/bash.js +29 -0
  54. package/dist/core/tool/bash.js.map +1 -0
  55. package/dist/core/tool/browser.d.ts +5 -0
  56. package/dist/core/tool/browser.d.ts.map +1 -0
  57. package/dist/core/tool/browser.js +119 -0
  58. package/dist/core/tool/browser.js.map +1 -0
  59. package/dist/core/tool/file.d.ts +5 -0
  60. package/dist/core/tool/file.d.ts.map +1 -0
  61. package/dist/core/tool/file.js +79 -0
  62. package/dist/core/tool/file.js.map +1 -0
  63. package/dist/core/tool/index.d.ts +21 -0
  64. package/dist/core/tool/index.d.ts.map +1 -0
  65. package/dist/core/tool/index.js +90 -0
  66. package/dist/core/tool/index.js.map +1 -0
  67. package/dist/core/tool/search.d.ts +4 -0
  68. package/dist/core/tool/search.d.ts.map +1 -0
  69. package/dist/core/tool/search.js +107 -0
  70. package/dist/core/tool/search.js.map +1 -0
  71. package/dist/core/tool/task.d.ts +9 -0
  72. package/dist/core/tool/task.d.ts.map +1 -0
  73. package/dist/core/tool/task.js +54 -0
  74. package/dist/core/tool/task.js.map +1 -0
  75. package/dist/core/tool/todowrite.d.ts +3 -0
  76. package/dist/core/tool/todowrite.d.ts.map +1 -0
  77. package/dist/core/tool/todowrite.js +75 -0
  78. package/dist/core/tool/todowrite.js.map +1 -0
  79. package/dist/core/tool/websearch.d.ts +3 -0
  80. package/dist/core/tool/websearch.d.ts.map +1 -0
  81. package/dist/core/tool/websearch.js +46 -0
  82. package/dist/core/tool/websearch.js.map +1 -0
  83. package/dist/core/tui/ChatTUI.d.ts +17 -0
  84. package/dist/core/tui/ChatTUI.d.ts.map +1 -0
  85. package/dist/core/tui/ChatTUI.js +64 -0
  86. package/dist/core/tui/ChatTUI.js.map +1 -0
  87. package/dist/core/tui/index.d.ts +15 -0
  88. package/dist/core/tui/index.d.ts.map +1 -0
  89. package/dist/core/tui/index.js +41 -0
  90. package/dist/core/tui/index.js.map +1 -0
  91. package/dist/core/update/index.d.ts +23 -0
  92. package/dist/core/update/index.d.ts.map +1 -0
  93. package/dist/core/update/index.js +115 -0
  94. package/dist/core/update/index.js.map +1 -0
  95. package/dist/index.d.ts +18 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +11 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/models.json +545 -0
  100. package/dist/provider.d.ts +43 -0
  101. package/dist/provider.d.ts.map +1 -0
  102. package/dist/provider.js +294 -0
  103. package/dist/provider.js.map +1 -0
  104. package/package.json +88 -0
@@ -0,0 +1,79 @@
1
+ import { readFileSync, writeFileSync, existsSync } from "fs";
2
+ export const readTool = {
3
+ name: "read",
4
+ description: "Read a file from the local filesystem.",
5
+ parameters: {
6
+ type: "object",
7
+ properties: {
8
+ filePath: { type: "string", description: "The absolute path to the file" },
9
+ },
10
+ required: ["filePath"],
11
+ },
12
+ async execute(input) {
13
+ const { filePath } = input;
14
+ if (!existsSync(filePath)) {
15
+ return `Error: File not found: ${filePath}`;
16
+ }
17
+ try {
18
+ const content = readFileSync(filePath, "utf-8");
19
+ return content;
20
+ }
21
+ catch (error) {
22
+ return `Error reading file: ${error.message}`;
23
+ }
24
+ },
25
+ };
26
+ export const writeTool = {
27
+ name: "write",
28
+ description: "Write a file to the local filesystem.",
29
+ parameters: {
30
+ type: "object",
31
+ properties: {
32
+ filePath: { type: "string", description: "The absolute path to the file" },
33
+ content: { type: "string", description: "The content to write" },
34
+ },
35
+ required: ["filePath", "content"],
36
+ },
37
+ async execute(input) {
38
+ const { filePath, content } = input;
39
+ try {
40
+ writeFileSync(filePath, content, "utf-8");
41
+ return `File written successfully: ${filePath}`;
42
+ }
43
+ catch (error) {
44
+ return `Error writing file: ${error.message}`;
45
+ }
46
+ },
47
+ };
48
+ export const editTool = {
49
+ name: "edit",
50
+ description: "Perform exact string replacements in files.",
51
+ parameters: {
52
+ type: "object",
53
+ properties: {
54
+ filePath: { type: "string", description: "The absolute path to the file" },
55
+ oldString: { type: "string", description: "Text to find" },
56
+ newString: { type: "string", description: "Replacement text" },
57
+ },
58
+ required: ["filePath", "oldString", "newString"],
59
+ },
60
+ async execute(input) {
61
+ const { filePath, oldString, newString } = input;
62
+ if (!existsSync(filePath)) {
63
+ return `Error: File not found: ${filePath}`;
64
+ }
65
+ try {
66
+ const content = readFileSync(filePath, "utf-8");
67
+ if (!content.includes(oldString)) {
68
+ return "Error: oldString not found in file.";
69
+ }
70
+ const updated = content.replace(oldString, newString);
71
+ writeFileSync(filePath, updated, "utf-8");
72
+ return "Edit applied successfully.";
73
+ }
74
+ catch (error) {
75
+ return `Error editing file: ${error.message}`;
76
+ }
77
+ },
78
+ };
79
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/core/tool/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type Tool } from "./bash";
2
+ export type { Tool } from "./bash";
3
+ import { MCPServer, type MCPServerConfig } from "../mcp";
4
+ import { PluginManager } from "../plugin";
5
+ export declare class ToolRegistry {
6
+ private tools;
7
+ private mcpServers;
8
+ private pluginManager;
9
+ constructor();
10
+ loadPlugins(): Promise<void>;
11
+ addMCPServer(config: MCPServerConfig): Promise<void>;
12
+ removeMCPServer(id: string): Promise<void>;
13
+ getMCPServer(id: string): MCPServer | undefined;
14
+ getPluginManager(): PluginManager;
15
+ register(tool: Tool): void;
16
+ get(name: string): Tool | undefined;
17
+ list(): Tool[];
18
+ getToolDefinitions(): any[];
19
+ execute(name: string, input: any): Promise<string>;
20
+ }
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE7C,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAOnC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAgB;;IAmB/B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI/C,gBAAgB,IAAI,aAAa;IAIjC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,IAAI,IAAI,IAAI,EAAE;IAId,kBAAkB,IAAI,GAAG,EAAE;IAWrB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;CAWzD"}
@@ -0,0 +1,90 @@
1
+ import { bashTool } from "./bash";
2
+ import { readTool, writeTool, editTool } from "./file";
3
+ import { grepTool, globTool } from "./search";
4
+ import { browserTool, webfetchTool, curlTool } from "./browser";
5
+ import { todowriteTool } from "./todowrite";
6
+ import { websearchTool } from "./websearch";
7
+ import { taskTool } from "./task";
8
+ import { MCPServer } from "../mcp";
9
+ import { PluginManager } from "../plugin";
10
+ export class ToolRegistry {
11
+ tools = new Map();
12
+ mcpServers = new Map();
13
+ pluginManager;
14
+ constructor() {
15
+ this.register(bashTool);
16
+ this.register(readTool);
17
+ this.register(writeTool);
18
+ this.register(editTool);
19
+ this.register(grepTool);
20
+ this.register(globTool);
21
+ this.register(browserTool);
22
+ this.register(webfetchTool);
23
+ this.register(curlTool);
24
+ this.register(todowriteTool);
25
+ this.register(websearchTool);
26
+ this.register(taskTool);
27
+ this.pluginManager = new PluginManager();
28
+ }
29
+ async loadPlugins() {
30
+ await this.pluginManager.loadPlugins();
31
+ const pluginTools = this.pluginManager.getAllTools();
32
+ for (const tool of pluginTools) {
33
+ this.register(tool);
34
+ }
35
+ }
36
+ async addMCPServer(config) {
37
+ const server = new MCPServer(config);
38
+ await server.start();
39
+ this.mcpServers.set(config.id, server);
40
+ const mcpTools = server.getTools();
41
+ for (const tool of mcpTools) {
42
+ this.register(tool);
43
+ }
44
+ }
45
+ async removeMCPServer(id) {
46
+ const server = this.mcpServers.get(id);
47
+ if (server) {
48
+ await server.stop();
49
+ this.mcpServers.delete(id);
50
+ }
51
+ }
52
+ getMCPServer(id) {
53
+ return this.mcpServers.get(id);
54
+ }
55
+ getPluginManager() {
56
+ return this.pluginManager;
57
+ }
58
+ register(tool) {
59
+ this.tools.set(tool.name, tool);
60
+ }
61
+ get(name) {
62
+ return this.tools.get(name);
63
+ }
64
+ list() {
65
+ return Array.from(this.tools.values());
66
+ }
67
+ getToolDefinitions() {
68
+ return this.list().map((tool) => ({
69
+ type: "function",
70
+ function: {
71
+ name: tool.name,
72
+ description: tool.description,
73
+ parameters: tool.parameters,
74
+ },
75
+ }));
76
+ }
77
+ async execute(name, input) {
78
+ const tool = this.tools.get(name);
79
+ if (!tool) {
80
+ return `Error: Unknown tool: ${name}`;
81
+ }
82
+ try {
83
+ return await tool.execute(input);
84
+ }
85
+ catch (error) {
86
+ return `Error executing ${name}: ${error.message}`;
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tool/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "./bash";
2
+ export declare const grepTool: Tool;
3
+ export declare const globTool: Tool;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/core/tool/search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAmCnC,eAAO,MAAM,QAAQ,EAAE,IAwBtB,CAAC;AA4BF,eAAO,MAAM,QAAQ,EAAE,IAuBtB,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { readdirSync, readFileSync, statSync } from "fs";
2
+ import { join, relative } from "path";
3
+ function grepDir(dir, pattern, include, results = []) {
4
+ try {
5
+ const entries = readdirSync(dir, { withFileTypes: true });
6
+ const regex = new RegExp(pattern, "i");
7
+ for (const entry of entries) {
8
+ const fullPath = join(dir, entry.name);
9
+ if (entry.isDirectory()) {
10
+ if (!entry.name.startsWith(".") && entry.name !== "node_modules") {
11
+ grepDir(fullPath, pattern, include, results);
12
+ }
13
+ }
14
+ else if (entry.isFile()) {
15
+ if (include && !entry.name.match(include.replace("*", ".*"))) {
16
+ continue;
17
+ }
18
+ try {
19
+ const content = readFileSync(fullPath, "utf-8");
20
+ const lines = content.split("\n");
21
+ for (let i = 0; i < lines.length; i++) {
22
+ if (regex.test(lines[i])) {
23
+ results.push(`${fullPath}:${i + 1}: ${lines[i].trim()}`);
24
+ }
25
+ }
26
+ }
27
+ catch { }
28
+ }
29
+ }
30
+ }
31
+ catch { }
32
+ return results;
33
+ }
34
+ export const grepTool = {
35
+ name: "grep",
36
+ description: "Search file contents using regex patterns.",
37
+ parameters: {
38
+ type: "object",
39
+ properties: {
40
+ pattern: { type: "string", description: "Regex pattern to search for" },
41
+ path: { type: "string", description: "Directory to search in (default: current)" },
42
+ include: { type: "string", description: "File pattern to include (e.g. *.ts)" },
43
+ },
44
+ required: ["pattern"],
45
+ },
46
+ async execute(input) {
47
+ const { pattern, path = ".", include } = input;
48
+ try {
49
+ const results = grepDir(path, pattern, include);
50
+ if (results.length === 0) {
51
+ return "No matches found";
52
+ }
53
+ return results.slice(0, 100).join("\n");
54
+ }
55
+ catch (error) {
56
+ return `Error: ${error.message}`;
57
+ }
58
+ },
59
+ };
60
+ function globDir(dir, pattern, results = []) {
61
+ try {
62
+ const entries = readdirSync(dir, { withFileTypes: true });
63
+ const regex = new RegExp("^" + pattern.replace(/\*\*/g, ".*").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]") + "$");
64
+ for (const entry of entries) {
65
+ const fullPath = join(dir, entry.name);
66
+ const relPath = relative(".", fullPath);
67
+ if (entry.isDirectory()) {
68
+ if (!entry.name.startsWith(".") && entry.name !== "node_modules") {
69
+ globDir(fullPath, pattern, results);
70
+ }
71
+ }
72
+ else if (entry.isFile()) {
73
+ if (regex.test(relPath) || regex.test(entry.name)) {
74
+ results.push(relPath);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ catch { }
80
+ return results;
81
+ }
82
+ export const globTool = {
83
+ name: "glob",
84
+ description: "Find files by pattern matching.",
85
+ parameters: {
86
+ type: "object",
87
+ properties: {
88
+ pattern: { type: "string", description: "Glob pattern (e.g. src/**/*.ts)" },
89
+ path: { type: "string", description: "Directory to search in (default: current)" },
90
+ },
91
+ required: ["pattern"],
92
+ },
93
+ async execute(input) {
94
+ const { pattern, path = "." } = input;
95
+ try {
96
+ const results = globDir(path, pattern);
97
+ if (results.length === 0) {
98
+ return "No files found";
99
+ }
100
+ return results.slice(0, 100).join("\n");
101
+ }
102
+ catch (error) {
103
+ return `Error: ${error.message}`;
104
+ }
105
+ },
106
+ };
107
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/core/tool/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Tool } from "./bash";
2
+ export interface SubagentConfig {
3
+ id: string;
4
+ description: string;
5
+ }
6
+ export declare const availableSubagents: SubagentConfig[];
7
+ export declare function setAgentCallback(callback: (agentId: string, prompt: string) => Promise<string>): void;
8
+ export declare const taskTool: Tool;
9
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tool/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAO9C,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAErG;AAED,eAAO,MAAM,QAAQ,EAAE,IA0CtB,CAAC"}
@@ -0,0 +1,54 @@
1
+ export const availableSubagents = [
2
+ { id: "build", description: "Full access to tools for development work" },
3
+ { id: "plan", description: "Read-only analysis and planning" },
4
+ { id: "debug", description: "Specialized in debugging and troubleshooting issues" },
5
+ { id: "testing", description: "Specialized in writing and running tests" },
6
+ { id: "security", description: "Vulnerability assessment and penetration testing" },
7
+ { id: "api-security", description: "API vulnerability assessment and penetration testing" },
8
+ ];
9
+ let agentCallback = null;
10
+ export function setAgentCallback(callback) {
11
+ agentCallback = callback;
12
+ }
13
+ export const taskTool = {
14
+ name: "task",
15
+ description: "Delegate a task to a specialized subagent. Each agent has different strengths.",
16
+ parameters: {
17
+ type: "object",
18
+ properties: {
19
+ agentId: {
20
+ type: "string",
21
+ enum: availableSubagents.map((a) => a.id),
22
+ description: "The agent to delegate to",
23
+ },
24
+ prompt: {
25
+ type: "string",
26
+ description: "The task description for the subagent",
27
+ },
28
+ description: {
29
+ type: "string",
30
+ description: "Short description of what this task does",
31
+ },
32
+ },
33
+ required: ["agentId", "prompt", "description"],
34
+ },
35
+ async execute(input) {
36
+ const { agentId, prompt, description } = input;
37
+ if (!agentCallback) {
38
+ return "Error: Subagent system not initialized. Agent callback not set.";
39
+ }
40
+ const agent = availableSubagents.find((a) => a.id === agentId);
41
+ if (!agent) {
42
+ return `Error: Unknown agent '${agentId}'. Available: ${availableSubagents.map((a) => a.id).join(", ")}`;
43
+ }
44
+ try {
45
+ console.log(`\n > Delegating to ${agentId} agent: ${description}`);
46
+ const result = await agentCallback(agentId, prompt);
47
+ return result;
48
+ }
49
+ catch (error) {
50
+ return `Error delegating to ${agentId}: ${error.message}`;
51
+ }
52
+ },
53
+ };
54
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/core/tool/task.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,2CAA2C,EAAE;IACzE,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,iCAAiC,EAAE;IAC9D,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,qDAAqD,EAAE;IACnF,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAC1E,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,kDAAkD,EAAE;IACnF,EAAE,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,sDAAsD,EAAE;CAC5F,CAAC;AAEF,IAAI,aAAa,GAAkE,IAAI,CAAC;AAExF,MAAM,UAAU,gBAAgB,CAAC,QAA8D;IAC7F,aAAa,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,gFAAgF;IAC7F,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,WAAW,EAAE,0BAA0B;aACxC;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;KAC/C;IACD,KAAK,CAAC,OAAO,CAAC,KAAK;QACjB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAE/C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,iEAAiE,CAAC;QAC3E,CAAC;QAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,yBAAyB,OAAO,iBAAiB,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3G,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,WAAW,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,uBAAuB,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from "./bash";
2
+ export declare const todowriteTool: Tool;
3
+ //# sourceMappingURL=todowrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todowrite.d.ts","sourceRoot":"","sources":["../../../src/core/tool/todowrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAWnC,eAAO,MAAM,aAAa,EAAE,IAoE3B,CAAC"}
@@ -0,0 +1,75 @@
1
+ let todoList = [];
2
+ export const todowriteTool = {
3
+ name: "todowrite",
4
+ description: "Create and manage a task list for tracking work progress.",
5
+ parameters: {
6
+ type: "object",
7
+ properties: {
8
+ action: {
9
+ type: "string",
10
+ enum: ["create", "update", "list", "clear"],
11
+ description: "Action to perform",
12
+ },
13
+ todos: {
14
+ type: "array",
15
+ items: {
16
+ type: "object",
17
+ properties: {
18
+ content: { type: "string", description: "Task description" },
19
+ status: { type: "string", enum: ["pending", "in_progress", "completed"] },
20
+ priority: { type: "string", enum: ["high", "medium", "low"] },
21
+ },
22
+ },
23
+ description: "Array of todo items",
24
+ },
25
+ id: { type: "string", description: "Todo item ID to update" },
26
+ status: { type: "string", enum: ["pending", "in_progress", "completed"], description: "New status" },
27
+ },
28
+ required: ["action"],
29
+ },
30
+ async execute(input) {
31
+ const { action, todos, id, status } = input;
32
+ switch (action) {
33
+ case "create":
34
+ if (todos && Array.isArray(todos)) {
35
+ todoList = todos.map((t, i) => ({
36
+ id: `todo-${Date.now()}-${i}`,
37
+ content: t.content,
38
+ status: t.status || "pending",
39
+ priority: t.priority || "medium",
40
+ }));
41
+ return `Created ${todoList.length} tasks:\n${formatTodoList(todoList)}`;
42
+ }
43
+ return "Error: todos array required for create action";
44
+ case "update":
45
+ if (id && status) {
46
+ const item = todoList.find((t) => t.id === id);
47
+ if (item) {
48
+ item.status = status;
49
+ return `Updated task ${id} to ${status}:\n${formatTodoList(todoList)}`;
50
+ }
51
+ return `Error: Task ${id} not found`;
52
+ }
53
+ return "Error: id and status required for update action";
54
+ case "list":
55
+ return todoList.length > 0
56
+ ? `Current tasks:\n${formatTodoList(todoList)}`
57
+ : "No tasks in list";
58
+ case "clear":
59
+ todoList = [];
60
+ return "Task list cleared";
61
+ default:
62
+ return `Unknown action: ${action}`;
63
+ }
64
+ },
65
+ };
66
+ function formatTodoList(todos) {
67
+ return todos
68
+ .map((t) => {
69
+ const icon = t.status === "completed" ? "✅" : t.status === "in_progress" ? "🔄" : "⏳";
70
+ const priority = t.priority === "high" ? "🔴" : t.priority === "medium" ? "🟡" : "🟢";
71
+ return ` ${icon} ${priority} [${t.id}] ${t.content}`;
72
+ })
73
+ .join("\n");
74
+ }
75
+ //# sourceMappingURL=todowrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todowrite.js","sourceRoot":"","sources":["../../../src/core/tool/todowrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from "./bash";
2
+ export declare const websearchTool: Tool;
3
+ //# sourceMappingURL=websearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../../src/core/tool/websearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,IAoD3B,CAAC"}
@@ -0,0 +1,46 @@
1
+ export const websearchTool = {
2
+ name: "websearch",
3
+ description: "Search the web using a search engine.",
4
+ parameters: {
5
+ type: "object",
6
+ properties: {
7
+ query: { type: "string", description: "Search query" },
8
+ numResults: { type: "number", description: "Number of results to return (default: 5)" },
9
+ },
10
+ required: ["query"],
11
+ },
12
+ async execute(input) {
13
+ const { query, numResults = 5 } = input;
14
+ try {
15
+ const searchUrl = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
16
+ const response = await fetch(searchUrl, {
17
+ headers: {
18
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
19
+ },
20
+ });
21
+ const html = await response.text();
22
+ const linkRegex = /<a[^>]*class="result__a"[^>]*>(.*?)<\/a>/g;
23
+ const results = [];
24
+ let match;
25
+ while ((match = linkRegex.exec(html)) !== null && results.length < numResults) {
26
+ const text = match[1].replace(/<[^>]*>/g, "").trim();
27
+ if (text) {
28
+ results.push(text);
29
+ }
30
+ }
31
+ if (results.length > 0) {
32
+ return `Search results for "${query}":\n\n${results.map((r, i) => `${i + 1}. ${r}`).join("\n")}`;
33
+ }
34
+ const abstractRegex = /"Abstract":"(.*?)"/;
35
+ const abstractMatch = html.match(abstractRegex);
36
+ if (abstractMatch && abstractMatch[1]) {
37
+ return `Search results for "${query}":\n\n${abstractMatch[1]}`;
38
+ }
39
+ return `No results found for "${query}". Try a different search query.`;
40
+ }
41
+ catch (error) {
42
+ return `Search error: ${error.message}. Try using webfetch to access a specific URL.`;
43
+ }
44
+ },
45
+ };
46
+ //# sourceMappingURL=websearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.js","sourceRoot":"","sources":["../../../src/core/tool/websearch.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,uCAAuC;IACpD,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;YACtD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;SACxF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,KAAK,CAAC,OAAO,CAAC,KAAK;QACjB,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;QAExC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,uCAAuC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAErF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACtC,OAAO,EAAE;oBACP,YAAY,EAAE,8DAA8D;iBAC7E;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,SAAS,GAAG,2CAA2C,CAAC;YAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC;YAEV,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,uBAAuB,KAAK,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnG,CAAC;YAED,MAAM,aAAa,GAAG,oBAAoB,CAAC;YAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEhD,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,uBAAuB,KAAK,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,CAAC;YAED,OAAO,yBAAyB,KAAK,kCAAkC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,iBAAiB,KAAK,CAAC,OAAO,gDAAgD,CAAC;QACxF,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ export interface ChatMessage {
3
+ id: string;
4
+ role: "user" | "assistant" | "tool";
5
+ content: string;
6
+ agent?: string;
7
+ timestamp: Date;
8
+ }
9
+ interface ChatTUIProps {
10
+ agentName: string;
11
+ modelName: string;
12
+ onMessage: (message: string) => Promise<string>;
13
+ onExit: () => void;
14
+ }
15
+ export declare function ChatTUI({ agentName, modelName, onMessage, onExit }: ChatTUIProps): React.JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=ChatTUI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatTUI.d.ts","sourceRoot":"","sources":["../../../src/core/tui/ChatTUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAIhE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,YAAY,qBAwHhF"}