activo 0.4.3 → 0.5.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 (166) hide show
  1. package/README.md +203 -1
  2. package/data/2026-03-04_20-54.json +181 -0
  3. package/data/2026-03-04_20-56.json +181 -0
  4. package/data/apex-rulesets/egov.yaml +469 -0
  5. package/data/apex-rulesets/modernize.yaml +687 -0
  6. package/data/apex-rulesets/quality.yaml +1677 -0
  7. package/data/apex-rulesets/rule-schema.yaml +587 -0
  8. package/data/apex-rulesets/secure.yaml +1688 -0
  9. package/data/apex-rulesets/spring.yaml +455 -0
  10. package/data/apex-rulesets/sql-format.yaml +99 -0
  11. package/data/apex-rulesets/sql-oracle.yaml +281 -0
  12. package/data/apex-rulesets/sql.yaml +1660 -0
  13. package/dist/cli/headless.d.ts.map +1 -1
  14. package/dist/cli/headless.js +32 -10
  15. package/dist/cli/headless.js.map +1 -1
  16. package/dist/cli/index.js +31 -3
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/agent.d.ts +3 -3
  19. package/dist/core/agent.d.ts.map +1 -1
  20. package/dist/core/agent.js +255 -17
  21. package/dist/core/agent.js.map +1 -1
  22. package/dist/core/commands.d.ts +2 -1
  23. package/dist/core/commands.d.ts.map +1 -1
  24. package/dist/core/commands.js +61 -9
  25. package/dist/core/commands.js.map +1 -1
  26. package/dist/core/config.d.ts +14 -0
  27. package/dist/core/config.d.ts.map +1 -1
  28. package/dist/core/config.js +41 -4
  29. package/dist/core/config.js.map +1 -1
  30. package/dist/core/conversation.d.ts +2 -2
  31. package/dist/core/conversation.d.ts.map +1 -1
  32. package/dist/core/conversation.js.map +1 -1
  33. package/dist/core/intentRouter.d.ts +43 -0
  34. package/dist/core/intentRouter.d.ts.map +1 -0
  35. package/dist/core/intentRouter.js +804 -0
  36. package/dist/core/intentRouter.js.map +1 -0
  37. package/dist/core/llm/anthropic.d.ts +24 -0
  38. package/dist/core/llm/anthropic.d.ts.map +1 -0
  39. package/dist/core/llm/anthropic.js +226 -0
  40. package/dist/core/llm/anthropic.js.map +1 -0
  41. package/dist/core/llm/ollama.d.ts +5 -14
  42. package/dist/core/llm/ollama.d.ts.map +1 -1
  43. package/dist/core/llm/ollama.js +3 -0
  44. package/dist/core/llm/ollama.js.map +1 -1
  45. package/dist/core/llm/types.d.ts +22 -0
  46. package/dist/core/llm/types.d.ts.map +1 -0
  47. package/dist/core/llm/types.js +2 -0
  48. package/dist/core/llm/types.js.map +1 -0
  49. package/dist/core/mcp/client.d.ts +6 -0
  50. package/dist/core/mcp/client.d.ts.map +1 -1
  51. package/dist/core/mcp/client.js +16 -0
  52. package/dist/core/mcp/client.js.map +1 -1
  53. package/dist/core/mcp/init.d.ts +12 -0
  54. package/dist/core/mcp/init.d.ts.map +1 -0
  55. package/dist/core/mcp/init.js +55 -0
  56. package/dist/core/mcp/init.js.map +1 -0
  57. package/dist/core/mcp/logger.d.ts +14 -0
  58. package/dist/core/mcp/logger.d.ts.map +1 -0
  59. package/dist/core/mcp/logger.js +50 -0
  60. package/dist/core/mcp/logger.js.map +1 -0
  61. package/dist/core/tools/analyzeAll.d.ts.map +1 -1
  62. package/dist/core/tools/analyzeAll.js +16 -28
  63. package/dist/core/tools/analyzeAll.js.map +1 -1
  64. package/dist/core/tools/analyzePatterns.d.ts +3 -0
  65. package/dist/core/tools/analyzePatterns.d.ts.map +1 -0
  66. package/dist/core/tools/analyzePatterns.js +293 -0
  67. package/dist/core/tools/analyzePatterns.js.map +1 -0
  68. package/dist/core/tools/apexPaths.d.ts +14 -0
  69. package/dist/core/tools/apexPaths.d.ts.map +1 -0
  70. package/dist/core/tools/apexPaths.js +54 -0
  71. package/dist/core/tools/apexPaths.js.map +1 -0
  72. package/dist/core/tools/apexUtils.d.ts +36 -0
  73. package/dist/core/tools/apexUtils.d.ts.map +1 -0
  74. package/dist/core/tools/apexUtils.js +83 -0
  75. package/dist/core/tools/apexUtils.js.map +1 -0
  76. package/dist/core/tools/explainIssue.d.ts +3 -0
  77. package/dist/core/tools/explainIssue.d.ts.map +1 -0
  78. package/dist/core/tools/explainIssue.js +181 -0
  79. package/dist/core/tools/explainIssue.js.map +1 -0
  80. package/dist/core/tools/fixGen.d.ts +3 -0
  81. package/dist/core/tools/fixGen.d.ts.map +1 -0
  82. package/dist/core/tools/fixGen.js +338 -0
  83. package/dist/core/tools/fixGen.js.map +1 -0
  84. package/dist/core/tools/generateImprovements.d.ts +21 -0
  85. package/dist/core/tools/generateImprovements.d.ts.map +1 -0
  86. package/dist/core/tools/generateImprovements.js +602 -0
  87. package/dist/core/tools/generateImprovements.js.map +1 -0
  88. package/dist/core/tools/generateReport.d.ts +3 -0
  89. package/dist/core/tools/generateReport.d.ts.map +1 -0
  90. package/dist/core/tools/generateReport.js +315 -0
  91. package/dist/core/tools/generateReport.js.map +1 -0
  92. package/dist/core/tools/index.d.ts +7 -0
  93. package/dist/core/tools/index.d.ts.map +1 -1
  94. package/dist/core/tools/index.js +62 -23
  95. package/dist/core/tools/index.js.map +1 -1
  96. package/dist/core/tools/javaAst.d.ts.map +1 -1
  97. package/dist/core/tools/javaAst.js +191 -0
  98. package/dist/core/tools/javaAst.js.map +1 -1
  99. package/dist/core/tools/recommendProfile.d.ts +3 -0
  100. package/dist/core/tools/recommendProfile.d.ts.map +1 -0
  101. package/dist/core/tools/recommendProfile.js +334 -0
  102. package/dist/core/tools/recommendProfile.js.map +1 -0
  103. package/dist/core/tools/ruleGen.d.ts +3 -0
  104. package/dist/core/tools/ruleGen.d.ts.map +1 -0
  105. package/dist/core/tools/ruleGen.js +1103 -0
  106. package/dist/core/tools/ruleGen.js.map +1 -0
  107. package/dist/core/tools/standards.d.ts.map +1 -1
  108. package/dist/core/tools/standards.js +7 -3
  109. package/dist/core/tools/standards.js.map +1 -1
  110. package/dist/ui/App.d.ts.map +1 -1
  111. package/dist/ui/App.js +86 -35
  112. package/dist/ui/App.js.map +1 -1
  113. package/dist/ui/components/InputBox.d.ts +1 -3
  114. package/dist/ui/components/InputBox.d.ts.map +1 -1
  115. package/dist/ui/components/InputBox.js +146 -5
  116. package/dist/ui/components/InputBox.js.map +1 -1
  117. package/dist/ui/components/MessageList.d.ts +3 -1
  118. package/dist/ui/components/MessageList.d.ts.map +1 -1
  119. package/dist/ui/components/MessageList.js +13 -7
  120. package/dist/ui/components/MessageList.js.map +1 -1
  121. package/dist/ui/components/StatusBar.d.ts +1 -1
  122. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  123. package/dist/ui/components/StatusBar.js +3 -2
  124. package/dist/ui/components/StatusBar.js.map +1 -1
  125. package/dist/ui/components/ToolStatus.d.ts +3 -1
  126. package/dist/ui/components/ToolStatus.d.ts.map +1 -1
  127. package/dist/ui/components/ToolStatus.js +19 -4
  128. package/dist/ui/components/ToolStatus.js.map +1 -1
  129. package/package.json +7 -1
  130. package/demo.gif +0 -0
  131. package/demo.tape +0 -53
  132. package/screenshot.png +0 -0
  133. package/src/cli/banner.ts +0 -38
  134. package/src/cli/headless.ts +0 -63
  135. package/src/cli/index.ts +0 -57
  136. package/src/core/agent.ts +0 -237
  137. package/src/core/commands.ts +0 -118
  138. package/src/core/config.ts +0 -98
  139. package/src/core/conversation.ts +0 -235
  140. package/src/core/llm/ollama.ts +0 -351
  141. package/src/core/mcp/client.ts +0 -143
  142. package/src/core/tools/analyzeAll.ts +0 -494
  143. package/src/core/tools/ast.ts +0 -826
  144. package/src/core/tools/builtIn.ts +0 -221
  145. package/src/core/tools/cache.ts +0 -570
  146. package/src/core/tools/cssAnalysis.ts +0 -324
  147. package/src/core/tools/dependencyAnalysis.ts +0 -363
  148. package/src/core/tools/embeddings.ts +0 -746
  149. package/src/core/tools/frontendAst.ts +0 -802
  150. package/src/core/tools/htmlAnalysis.ts +0 -466
  151. package/src/core/tools/index.ts +0 -160
  152. package/src/core/tools/javaAst.ts +0 -812
  153. package/src/core/tools/memory.ts +0 -655
  154. package/src/core/tools/mybatisAnalysis.ts +0 -322
  155. package/src/core/tools/openapiAnalysis.ts +0 -431
  156. package/src/core/tools/pythonAnalysis.ts +0 -477
  157. package/src/core/tools/sqlAnalysis.ts +0 -298
  158. package/src/core/tools/standards.test.ts +0 -186
  159. package/src/core/tools/standards.ts +0 -889
  160. package/src/core/tools/types.ts +0 -38
  161. package/src/ui/App.tsx +0 -334
  162. package/src/ui/components/InputBox.tsx +0 -37
  163. package/src/ui/components/MessageList.tsx +0 -80
  164. package/src/ui/components/StatusBar.tsx +0 -36
  165. package/src/ui/components/ToolStatus.tsx +0 -38
  166. package/tsconfig.json +0 -21
@@ -1,221 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { execSync } from "child_process";
4
- import { glob } from "glob";
5
- import { Tool, ToolResult } from "./types.js";
6
-
7
- // Read File Tool
8
- export const readFileTool: Tool = {
9
- name: "read_file",
10
- description: "Read the contents of a file. Use this to view source code or any text file.",
11
- parameters: {
12
- type: "object",
13
- required: ["filepath"],
14
- properties: {
15
- filepath: {
16
- type: "string",
17
- description: "Path to the file (relative or absolute)",
18
- },
19
- },
20
- },
21
- handler: async (args): Promise<ToolResult> => {
22
- try {
23
- const filepath = path.resolve(args.filepath as string);
24
- if (!fs.existsSync(filepath)) {
25
- return { success: false, content: "", error: `File not found: ${filepath}` };
26
- }
27
- const stat = fs.statSync(filepath);
28
- if (stat.isDirectory()) {
29
- return { success: false, content: "", error: "Path is a directory" };
30
- }
31
- const content = fs.readFileSync(filepath, "utf-8");
32
- return { success: true, content };
33
- } catch (error) {
34
- return { success: false, content: "", error: String(error) };
35
- }
36
- },
37
- };
38
-
39
- // Write File Tool
40
- export const writeFileTool: Tool = {
41
- name: "write_file",
42
- description: "Write content to a file. Creates directories if needed.",
43
- parameters: {
44
- type: "object",
45
- required: ["filepath", "content"],
46
- properties: {
47
- filepath: {
48
- type: "string",
49
- description: "Path to write the file",
50
- },
51
- content: {
52
- type: "string",
53
- description: "Content to write",
54
- },
55
- },
56
- },
57
- handler: async (args): Promise<ToolResult> => {
58
- try {
59
- const filepath = path.resolve(args.filepath as string);
60
- const dir = path.dirname(filepath);
61
- if (!fs.existsSync(dir)) {
62
- fs.mkdirSync(dir, { recursive: true });
63
- }
64
- fs.writeFileSync(filepath, args.content as string);
65
- return { success: true, content: `Written to ${filepath}` };
66
- } catch (error) {
67
- return { success: false, content: "", error: String(error) };
68
- }
69
- },
70
- };
71
-
72
- // List Directory Tool
73
- export const listDirectoryTool: Tool = {
74
- name: "list_directory",
75
- description: "List files and directories in a path.",
76
- parameters: {
77
- type: "object",
78
- required: ["path"],
79
- properties: {
80
- path: {
81
- type: "string",
82
- description: "Directory path to list",
83
- },
84
- },
85
- },
86
- handler: async (args): Promise<ToolResult> => {
87
- try {
88
- const dirPath = path.resolve((args.path as string) || ".");
89
- if (!fs.existsSync(dirPath)) {
90
- return { success: false, content: "", error: `Directory not found: ${dirPath}` };
91
- }
92
- const entries = fs.readdirSync(dirPath, { withFileTypes: true });
93
- const result = entries.map((e) => `${e.isDirectory() ? "[DIR]" : "[FILE]"} ${e.name}`);
94
- return { success: true, content: result.join("\n") };
95
- } catch (error) {
96
- return { success: false, content: "", error: String(error) };
97
- }
98
- },
99
- };
100
-
101
- // Grep Search Tool
102
- export const grepSearchTool: Tool = {
103
- name: "grep_search",
104
- description: "Search for a pattern in files using regex.",
105
- parameters: {
106
- type: "object",
107
- required: ["pattern"],
108
- properties: {
109
- pattern: {
110
- type: "string",
111
- description: "Search pattern (regex)",
112
- },
113
- path: {
114
- type: "string",
115
- description: "Directory or file to search (default: current)",
116
- },
117
- filePattern: {
118
- type: "string",
119
- description: "File pattern filter (e.g., *.ts)",
120
- },
121
- },
122
- },
123
- handler: async (args): Promise<ToolResult> => {
124
- try {
125
- const searchPath = (args.path as string) || ".";
126
- let cmd = `grep -rn "${args.pattern}" "${searchPath}"`;
127
- if (args.filePattern) {
128
- cmd += ` --include="${args.filePattern}"`;
129
- }
130
- cmd += " 2>/dev/null || true";
131
-
132
- const output = execSync(cmd, { encoding: "utf-8", maxBuffer: 10 * 1024 * 1024 });
133
- if (!output.trim()) {
134
- return { success: true, content: "No matches found" };
135
- }
136
- const lines = output.trim().split("\n").slice(0, 50);
137
- return { success: true, content: lines.join("\n") };
138
- } catch (error) {
139
- return { success: false, content: "", error: String(error) };
140
- }
141
- },
142
- };
143
-
144
- // Glob Search Tool
145
- export const globSearchTool: Tool = {
146
- name: "glob_search",
147
- description: "Find files matching a glob pattern.",
148
- parameters: {
149
- type: "object",
150
- required: ["pattern"],
151
- properties: {
152
- pattern: {
153
- type: "string",
154
- description: "Glob pattern (e.g., **/*.ts)",
155
- },
156
- path: {
157
- type: "string",
158
- description: "Base directory (default: current)",
159
- },
160
- },
161
- },
162
- handler: async (args): Promise<ToolResult> => {
163
- try {
164
- const basePath = (args.path as string) || ".";
165
- const fullPattern = path.join(basePath, args.pattern as string);
166
- const files = await glob(fullPattern, {
167
- ignore: ["**/node_modules/**", "**/.git/**"],
168
- });
169
- if (files.length === 0) {
170
- return { success: true, content: "No files found" };
171
- }
172
- return { success: true, content: files.slice(0, 100).join("\n") };
173
- } catch (error) {
174
- return { success: false, content: "", error: String(error) };
175
- }
176
- },
177
- };
178
-
179
- // Run Command Tool
180
- export const runCommandTool: Tool = {
181
- name: "run_command",
182
- description: "Execute a shell command. Be careful with destructive commands.",
183
- parameters: {
184
- type: "object",
185
- required: ["command"],
186
- properties: {
187
- command: {
188
- type: "string",
189
- description: "Command to execute",
190
- },
191
- },
192
- },
193
- handler: async (args): Promise<ToolResult> => {
194
- try {
195
- const cmd = args.command as string;
196
- // Block dangerous commands
197
- const blocked = ["rm -rf /", "mkfs", "dd if=", "> /dev/"];
198
- if (blocked.some((b) => cmd.includes(b))) {
199
- return { success: false, content: "", error: "Command blocked for safety" };
200
- }
201
- const output = execSync(cmd, {
202
- encoding: "utf-8",
203
- maxBuffer: 10 * 1024 * 1024,
204
- timeout: 30000,
205
- });
206
- return { success: true, content: output };
207
- } catch (error: any) {
208
- return { success: false, content: error.stdout || "", error: error.stderr || error.message };
209
- }
210
- },
211
- };
212
-
213
- // All built-in tools
214
- export const builtInTools: Tool[] = [
215
- readFileTool,
216
- writeFileTool,
217
- listDirectoryTool,
218
- grepSearchTool,
219
- globSearchTool,
220
- runCommandTool,
221
- ];