erosolar-cli 1.7.55 → 1.7.56

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 (273) hide show
  1. package/package.json +1 -1
  2. package/dist/active-stack-security.d.ts +0 -110
  3. package/dist/active-stack-security.js +0 -313
  4. package/dist/active-stack-security.js.map +0 -1
  5. package/dist/advanced-targeting.d.ts +0 -113
  6. package/dist/advanced-targeting.js +0 -252
  7. package/dist/advanced-targeting.js.map +0 -1
  8. package/dist/bin/adapters/node/index.js +0 -33
  9. package/dist/bin/adapters/types.js +0 -1
  10. package/dist/bin/alpha-zero/agentWrapper.js +0 -165
  11. package/dist/bin/alpha-zero/codeEvaluator.js +0 -272
  12. package/dist/bin/alpha-zero/competitiveRunner.js +0 -219
  13. package/dist/bin/alpha-zero/index.js +0 -98
  14. package/dist/bin/alpha-zero/introspection.js +0 -298
  15. package/dist/bin/alpha-zero/metricsTracker.js +0 -207
  16. package/dist/bin/alpha-zero/security/core.js +0 -269
  17. package/dist/bin/alpha-zero/security/google.js +0 -308
  18. package/dist/bin/alpha-zero/security/googleLoader.js +0 -40
  19. package/dist/bin/alpha-zero/security/index.js +0 -31
  20. package/dist/bin/alpha-zero/security/simulation.js +0 -274
  21. package/dist/bin/alpha-zero/selfModification.js +0 -231
  22. package/dist/bin/alpha-zero/types.js +0 -30
  23. package/dist/bin/bin/erosolar-optimized.js +0 -205
  24. package/dist/bin/capabilities/agentSpawningCapability.js +0 -116
  25. package/dist/bin/capabilities/bashCapability.js +0 -22
  26. package/dist/bin/capabilities/cloudCapability.js +0 -36
  27. package/dist/bin/capabilities/codeAnalysisCapability.js +0 -22
  28. package/dist/bin/capabilities/codeQualityCapability.js +0 -23
  29. package/dist/bin/capabilities/dependencySecurityCapability.js +0 -22
  30. package/dist/bin/capabilities/devCapability.js +0 -22
  31. package/dist/bin/capabilities/editCapability.js +0 -28
  32. package/dist/bin/capabilities/emailCapability.js +0 -20
  33. package/dist/bin/capabilities/enhancedGitCapability.js +0 -221
  34. package/dist/bin/capabilities/filesystemCapability.js +0 -22
  35. package/dist/bin/capabilities/globCapability.js +0 -28
  36. package/dist/bin/capabilities/interactionCapability.js +0 -20
  37. package/dist/bin/capabilities/learnCapability.js +0 -22
  38. package/dist/bin/capabilities/mcpCapability.js +0 -20
  39. package/dist/bin/capabilities/notebookCapability.js +0 -28
  40. package/dist/bin/capabilities/planningCapability.js +0 -27
  41. package/dist/bin/capabilities/refactoringCapability.js +0 -23
  42. package/dist/bin/capabilities/repoChecksCapability.js +0 -22
  43. package/dist/bin/capabilities/searchCapability.js +0 -22
  44. package/dist/bin/capabilities/skillCapability.js +0 -76
  45. package/dist/bin/capabilities/taskManagementCapability.js +0 -20
  46. package/dist/bin/capabilities/testingCapability.js +0 -23
  47. package/dist/bin/capabilities/toolManifest.js +0 -159
  48. package/dist/bin/capabilities/toolRegistry.js +0 -114
  49. package/dist/bin/capabilities/webCapability.js +0 -20
  50. package/dist/bin/config.js +0 -139
  51. package/dist/bin/contracts/v1/agent.js +0 -7
  52. package/dist/bin/contracts/v1/agentProfileManifest.js +0 -8
  53. package/dist/bin/contracts/v1/agentRules.js +0 -9
  54. package/dist/bin/contracts/v1/toolAccess.js +0 -8
  55. package/dist/bin/erosolar-optimized.d.ts +0 -12
  56. package/dist/bin/erosolar-optimized.d.ts.map +0 -1
  57. package/dist/bin/erosolar-optimized.js +0 -239
  58. package/dist/bin/erosolar-optimized.js.map +0 -1
  59. package/dist/bin/headless/headlessApp.js +0 -172
  60. package/dist/bin/mcp/config.js +0 -202
  61. package/dist/bin/mcp/stdioClient.js +0 -172
  62. package/dist/bin/mcp/toolBridge.js +0 -104
  63. package/dist/bin/mcp/types.js +0 -1
  64. package/dist/bin/plugins/index.js +0 -113
  65. package/dist/bin/plugins/providers/anthropic/index.js +0 -25
  66. package/dist/bin/plugins/providers/deepseek/index.js +0 -24
  67. package/dist/bin/plugins/providers/google/index.js +0 -26
  68. package/dist/bin/plugins/providers/index.js +0 -19
  69. package/dist/bin/plugins/providers/ollama/index.js +0 -59
  70. package/dist/bin/plugins/providers/openai/index.js +0 -26
  71. package/dist/bin/plugins/providers/xai/index.js +0 -24
  72. package/dist/bin/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -8
  73. package/dist/bin/plugins/tools/bash/localBashPlugin.js +0 -13
  74. package/dist/bin/plugins/tools/checks/localRepoChecksPlugin.js +0 -13
  75. package/dist/bin/plugins/tools/cloud/cloudPlugin.js +0 -13
  76. package/dist/bin/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -13
  77. package/dist/bin/plugins/tools/codeQuality/codeQualityPlugin.js +0 -13
  78. package/dist/bin/plugins/tools/dependency/dependencyPlugin.js +0 -11
  79. package/dist/bin/plugins/tools/development/devPlugin.js +0 -13
  80. package/dist/bin/plugins/tools/edit/editPlugin.js +0 -14
  81. package/dist/bin/plugins/tools/email/emailPlugin.js +0 -11
  82. package/dist/bin/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -8
  83. package/dist/bin/plugins/tools/filesystem/localFilesystemPlugin.js +0 -13
  84. package/dist/bin/plugins/tools/glob/globPlugin.js +0 -14
  85. package/dist/bin/plugins/tools/index.js +0 -2
  86. package/dist/bin/plugins/tools/interaction/interactionPlugin.js +0 -11
  87. package/dist/bin/plugins/tools/learn/learnPlugin.js +0 -13
  88. package/dist/bin/plugins/tools/mcp/mcpPlugin.js +0 -8
  89. package/dist/bin/plugins/tools/nodeDefaults.js +0 -56
  90. package/dist/bin/plugins/tools/notebook/notebookPlugin.js +0 -14
  91. package/dist/bin/plugins/tools/planning/planningPlugin.js +0 -14
  92. package/dist/bin/plugins/tools/refactoring/refactoringPlugin.js +0 -11
  93. package/dist/bin/plugins/tools/registry.js +0 -57
  94. package/dist/bin/plugins/tools/search/localSearchPlugin.js +0 -13
  95. package/dist/bin/plugins/tools/skills/skillPlugin.js +0 -8
  96. package/dist/bin/plugins/tools/taskManagement/taskManagementPlugin.js +0 -11
  97. package/dist/bin/plugins/tools/testing/testingPlugin.js +0 -11
  98. package/dist/bin/plugins/tools/web/webPlugin.js +0 -11
  99. package/dist/bin/providers/anthropicProvider.js +0 -329
  100. package/dist/bin/providers/googleProvider.js +0 -203
  101. package/dist/bin/providers/openaiChatCompletionsProvider.js +0 -208
  102. package/dist/bin/providers/openaiResponsesProvider.js +0 -249
  103. package/dist/bin/providers/providerFactory.js +0 -24
  104. package/dist/bin/runtime/agentController.js +0 -321
  105. package/dist/bin/runtime/agentHost.js +0 -153
  106. package/dist/bin/runtime/agentSession.js +0 -195
  107. package/dist/bin/runtime/node.js +0 -10
  108. package/dist/bin/runtime/universal.js +0 -28
  109. package/dist/bin/skills/skillRepository.js +0 -236
  110. package/dist/bin/skills/types.js +0 -1
  111. package/dist/bin/subagents/taskRunner.js +0 -269
  112. package/dist/bin/tools/backgroundBashTools.js +0 -211
  113. package/dist/bin/tools/bashTools.js +0 -159
  114. package/dist/bin/tools/cloudTools.js +0 -864
  115. package/dist/bin/tools/codeAnalysisTools.js +0 -641
  116. package/dist/bin/tools/codeQualityTools.js +0 -294
  117. package/dist/bin/tools/dependencyTools.js +0 -282
  118. package/dist/bin/tools/devTools.js +0 -238
  119. package/dist/bin/tools/diffUtils.js +0 -137
  120. package/dist/bin/tools/editTools.js +0 -134
  121. package/dist/bin/tools/emailTools.js +0 -448
  122. package/dist/bin/tools/fileTools.js +0 -282
  123. package/dist/bin/tools/globTools.js +0 -173
  124. package/dist/bin/tools/grepTools.js +0 -332
  125. package/dist/bin/tools/interactionTools.js +0 -170
  126. package/dist/bin/tools/learnTools.js +0 -1818
  127. package/dist/bin/tools/notebookEditTools.js +0 -196
  128. package/dist/bin/tools/planningTools.js +0 -46
  129. package/dist/bin/tools/refactoringTools.js +0 -293
  130. package/dist/bin/tools/repoChecksTools.js +0 -160
  131. package/dist/bin/tools/searchTools.js +0 -206
  132. package/dist/bin/tools/skillTools.js +0 -177
  133. package/dist/bin/tools/taskManagementTools.js +0 -156
  134. package/dist/bin/tools/testingTools.js +0 -232
  135. package/dist/bin/tools/webTools.js +0 -480
  136. package/dist/bin/workspace.js +0 -106
  137. package/dist/bin/workspace.validator.js +0 -213
  138. package/dist/capabilities/offensiveSecurityCapability.d.ts +0 -26
  139. package/dist/capabilities/offensiveSecurityCapability.d.ts.map +0 -1
  140. package/dist/capabilities/offensiveSecurityCapability.js +0 -58
  141. package/dist/capabilities/offensiveSecurityCapability.js.map +0 -1
  142. package/dist/capabilities/realSecurityCapability.d.ts +0 -26
  143. package/dist/capabilities/realSecurityCapability.d.ts.map +0 -1
  144. package/dist/capabilities/realSecurityCapability.js +0 -53
  145. package/dist/capabilities/realSecurityCapability.js.map +0 -1
  146. package/dist/capabilities/securityCapability.d.ts +0 -32
  147. package/dist/capabilities/securityCapability.d.ts.map +0 -1
  148. package/dist/capabilities/securityCapability.js +0 -57
  149. package/dist/capabilities/securityCapability.js.map +0 -1
  150. package/dist/capabilities/ultimateSecurityCapability.d.ts +0 -42
  151. package/dist/capabilities/ultimateSecurityCapability.d.ts.map +0 -1
  152. package/dist/capabilities/ultimateSecurityCapability.js +0 -96
  153. package/dist/capabilities/ultimateSecurityCapability.js.map +0 -1
  154. package/dist/core/designThoughtCheck.d.ts +0 -196
  155. package/dist/core/designThoughtCheck.d.ts.map +0 -1
  156. package/dist/core/designThoughtCheck.js +0 -287
  157. package/dist/core/designThoughtCheck.js.map +0 -1
  158. package/dist/core/designThoughtCheckEngine.d.ts +0 -58
  159. package/dist/core/designThoughtCheckEngine.d.ts.map +0 -1
  160. package/dist/core/designThoughtCheckEngine.js +0 -358
  161. package/dist/core/designThoughtCheckEngine.js.map +0 -1
  162. package/dist/core/designThoughtCheckIntegration.d.ts +0 -103
  163. package/dist/core/designThoughtCheckIntegration.d.ts.map +0 -1
  164. package/dist/core/designThoughtCheckIntegration.js +0 -207
  165. package/dist/core/designThoughtCheckIntegration.js.map +0 -1
  166. package/dist/core/intelligenceTools.d.ts +0 -19
  167. package/dist/core/intelligenceTools.d.ts.map +0 -1
  168. package/dist/core/intelligenceTools.js +0 -453
  169. package/dist/core/intelligenceTools.js.map +0 -1
  170. package/dist/core/operationalTools.d.ts +0 -19
  171. package/dist/core/operationalTools.d.ts.map +0 -1
  172. package/dist/core/operationalTools.js +0 -467
  173. package/dist/core/operationalTools.js.map +0 -1
  174. package/dist/offensive/core/offensive-engine.d.ts +0 -171
  175. package/dist/offensive/core/offensive-engine.d.ts.map +0 -1
  176. package/dist/offensive/core/offensive-engine.js +0 -345
  177. package/dist/offensive/core/offensive-engine.js.map +0 -1
  178. package/dist/offensive/core/offensive-integration.d.ts +0 -129
  179. package/dist/offensive/core/offensive-integration.d.ts.map +0 -1
  180. package/dist/offensive/core/offensive-integration.js +0 -364
  181. package/dist/offensive/core/offensive-integration.js.map +0 -1
  182. package/dist/offensive/core/offensive-tools.d.ts +0 -55
  183. package/dist/offensive/core/offensive-tools.d.ts.map +0 -1
  184. package/dist/offensive/core/offensive-tools.js +0 -438
  185. package/dist/offensive/core/offensive-tools.js.map +0 -1
  186. package/dist/offensive/offensive-cli.d.ts +0 -48
  187. package/dist/offensive/offensive-cli.d.ts.map +0 -1
  188. package/dist/offensive/offensive-cli.js +0 -233
  189. package/dist/offensive/offensive-cli.js.map +0 -1
  190. package/dist/security/apt-simulation-cli.d.ts +0 -57
  191. package/dist/security/apt-simulation-cli.d.ts.map +0 -1
  192. package/dist/security/apt-simulation-cli.js +0 -278
  193. package/dist/security/apt-simulation-cli.js.map +0 -1
  194. package/dist/security/apt-simulation-engine-complete.d.ts +0 -97
  195. package/dist/security/apt-simulation-engine-complete.d.ts.map +0 -1
  196. package/dist/security/apt-simulation-engine-complete.js +0 -441
  197. package/dist/security/apt-simulation-engine-complete.js.map +0 -1
  198. package/dist/security/apt-simulation-engine.d.ts +0 -97
  199. package/dist/security/apt-simulation-engine.d.ts.map +0 -1
  200. package/dist/security/apt-simulation-engine.js +0 -441
  201. package/dist/security/apt-simulation-engine.js.map +0 -1
  202. package/dist/security/authorization.d.ts +0 -45
  203. package/dist/security/authorization.d.ts.map +0 -1
  204. package/dist/security/authorization.js +0 -128
  205. package/dist/security/authorization.js.map +0 -1
  206. package/dist/security/comprehensive-security-research.d.ts +0 -84
  207. package/dist/security/comprehensive-security-research.d.ts.map +0 -1
  208. package/dist/security/comprehensive-security-research.js +0 -211
  209. package/dist/security/comprehensive-security-research.js.map +0 -1
  210. package/dist/security/offensive/exploitationEngine.d.ts +0 -54
  211. package/dist/security/offensive/exploitationEngine.d.ts.map +0 -1
  212. package/dist/security/offensive/exploitationEngine.js +0 -263
  213. package/dist/security/offensive/exploitationEngine.js.map +0 -1
  214. package/dist/security/real/networkExploitation.d.ts +0 -92
  215. package/dist/security/real/networkExploitation.d.ts.map +0 -1
  216. package/dist/security/real/networkExploitation.js +0 -316
  217. package/dist/security/real/networkExploitation.js.map +0 -1
  218. package/dist/security/real/persistenceImplementation.d.ts +0 -62
  219. package/dist/security/real/persistenceImplementation.d.ts.map +0 -1
  220. package/dist/security/real/persistenceImplementation.js +0 -323
  221. package/dist/security/real/persistenceImplementation.js.map +0 -1
  222. package/dist/security/real/vulnerabilityScanner.d.ts +0 -73
  223. package/dist/security/real/vulnerabilityScanner.d.ts.map +0 -1
  224. package/dist/security/real/vulnerabilityScanner.js +0 -341
  225. package/dist/security/real/vulnerabilityScanner.js.map +0 -1
  226. package/dist/shell/capturePastePatch.d.ts +0 -9
  227. package/dist/shell/capturePastePatch.d.ts.map +0 -1
  228. package/dist/shell/capturePastePatch.js +0 -98
  229. package/dist/shell/capturePastePatch.js.map +0 -1
  230. package/dist/shell/enhancedInteractiveShell.d.ts +0 -90
  231. package/dist/shell/enhancedInteractiveShell.d.ts.map +0 -1
  232. package/dist/shell/enhancedInteractiveShell.js +0 -248
  233. package/dist/shell/enhancedInteractiveShell.js.map +0 -1
  234. package/dist/shell/inputProcessor.d.ts +0 -56
  235. package/dist/shell/inputProcessor.d.ts.map +0 -1
  236. package/dist/shell/inputProcessor.js +0 -172
  237. package/dist/shell/inputProcessor.js.map +0 -1
  238. package/dist/shell/interactiveShell-patch.d.ts +0 -27
  239. package/dist/shell/interactiveShell-patch.d.ts.map +0 -1
  240. package/dist/shell/interactiveShell-patch.js +0 -38
  241. package/dist/shell/interactiveShell-patch.js.map +0 -1
  242. package/dist/shell/interactiveShell-robust.d.ts +0 -26
  243. package/dist/shell/interactiveShell-robust.d.ts.map +0 -1
  244. package/dist/shell/interactiveShell-robust.js +0 -34
  245. package/dist/shell/interactiveShell-robust.js.map +0 -1
  246. package/dist/shell/multiLinePasteManager.d.ts +0 -106
  247. package/dist/shell/multiLinePasteManager.d.ts.map +0 -1
  248. package/dist/shell/multiLinePasteManager.js +0 -308
  249. package/dist/shell/multiLinePasteManager.js.map +0 -1
  250. package/dist/shell/processInputBlockPatch.d.ts +0 -8
  251. package/dist/shell/processInputBlockPatch.d.ts.map +0 -1
  252. package/dist/shell/processInputBlockPatch.js +0 -133
  253. package/dist/shell/processInputBlockPatch.js.map +0 -1
  254. package/dist/shell/unifiedInputProcessor.d.ts +0 -23
  255. package/dist/shell/unifiedInputProcessor.d.ts.map +0 -1
  256. package/dist/shell/unifiedInputProcessor.js +0 -92
  257. package/dist/shell/unifiedInputProcessor.js.map +0 -1
  258. package/dist/tools/enhancedSecurityTools.d.ts +0 -19
  259. package/dist/tools/enhancedSecurityTools.d.ts.map +0 -1
  260. package/dist/tools/enhancedSecurityTools.js +0 -215
  261. package/dist/tools/enhancedSecurityTools.js.map +0 -1
  262. package/dist/tools/offensiveSecurityTools.d.ts +0 -16
  263. package/dist/tools/offensiveSecurityTools.d.ts.map +0 -1
  264. package/dist/tools/offensiveSecurityTools.js +0 -285
  265. package/dist/tools/offensiveSecurityTools.js.map +0 -1
  266. package/dist/tools/realSecurityTools.d.ts +0 -18
  267. package/dist/tools/realSecurityTools.d.ts.map +0 -1
  268. package/dist/tools/realSecurityTools.js +0 -468
  269. package/dist/tools/realSecurityTools.js.map +0 -1
  270. package/dist/tools/securityTools.d.ts +0 -20
  271. package/dist/tools/securityTools.d.ts.map +0 -1
  272. package/dist/tools/securityTools.js +0 -449
  273. package/dist/tools/securityTools.js.map +0 -1
@@ -1,156 +0,0 @@
1
- // In-memory storage for the current session's todo list
2
- let currentTodoList = [];
3
- export function createTaskManagementTools() {
4
- return [
5
- {
6
- name: 'TodoWrite',
7
- description: `Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user.
8
-
9
- ## When to Use This Tool
10
- Use this tool proactively in these scenarios:
11
-
12
- 1. Complex multi-step tasks - When a task requires 3 or more distinct steps or actions
13
- 2. Non-trivial and complex tasks - Tasks that require careful planning or multiple operations
14
- 3. User explicitly requests todo list - When the user directly asks you to use the todo list
15
- 4. User provides multiple tasks - When users provide a list of things to be done (numbered or comma-separated)
16
- 5. After receiving new instructions - Immediately capture user requirements as todos
17
- 6. When you start working on a task - Mark it as in_progress BEFORE beginning work
18
- 7. After completing a task - Mark it as completed and add any new follow-up tasks discovered during implementation
19
-
20
- ## When NOT to Use This Tool
21
- Skip using this tool when:
22
- 1. There is only a single, straightforward task
23
- 2. The task is trivial and tracking it provides no organizational benefit
24
- 3. The task can be completed in less than 3 trivial steps
25
- 4. The task is purely conversational or informational
26
-
27
- ## Task States and Management
28
- 1. **Task States**: Use these states to track progress:
29
- - pending: Task not yet started
30
- - in_progress: Currently working on (limit to ONE task at a time)
31
- - completed: Task finished successfully
32
-
33
- **IMPORTANT**: Task descriptions must have two forms:
34
- - content: The imperative form describing what needs to be done (e.g., "Run tests", "Build the project")
35
- - activeForm: The present continuous form shown during execution (e.g., "Running tests", "Building the project")
36
-
37
- 2. **Task Management**:
38
- - Update task status in real-time as you work
39
- - Mark tasks complete IMMEDIATELY after finishing (don't batch completions)
40
- - Exactly ONE task must be in_progress at any time (not less, not more)
41
- - Complete current tasks before starting new ones
42
- - Remove tasks that are no longer relevant from the list entirely
43
-
44
- 3. **Task Completion Requirements**:
45
- - ONLY mark a task as completed when you have FULLY accomplished it
46
- - If you encounter errors, blockers, or cannot finish, keep the task as in_progress
47
- - When blocked, create a new task describing what needs to be resolved
48
- - Never mark a task as completed if:
49
- - Tests are failing
50
- - Implementation is partial
51
- - You encountered unresolved errors
52
- - You couldn't find necessary files or dependencies
53
-
54
- 4. **Task Breakdown**:
55
- - Create specific, actionable items
56
- - Break complex tasks into smaller, manageable steps
57
- - Use clear, descriptive task names
58
- - Always provide both forms:
59
- - content: "Fix authentication bug"
60
- - activeForm: "Fixing authentication bug"`,
61
- parameters: {
62
- type: 'object',
63
- properties: {
64
- todos: {
65
- type: 'array',
66
- description: 'The updated todo list',
67
- items: {
68
- type: 'object',
69
- properties: {
70
- content: {
71
- type: 'string',
72
- minLength: 1,
73
- description: 'The imperative form of the task (e.g., "Run tests")',
74
- },
75
- status: {
76
- type: 'string',
77
- enum: ['pending', 'in_progress', 'completed'],
78
- description: 'Current status of the task',
79
- },
80
- activeForm: {
81
- type: 'string',
82
- minLength: 1,
83
- description: 'The present continuous form (e.g., "Running tests")',
84
- },
85
- },
86
- required: ['content', 'status', 'activeForm'],
87
- additionalProperties: false,
88
- },
89
- },
90
- },
91
- required: ['todos'],
92
- },
93
- handler: async (args) => {
94
- const todos = args['todos'];
95
- if (!todos || !Array.isArray(todos)) {
96
- return 'Error: todos parameter is required and must be an array.';
97
- }
98
- // Validate that exactly one task is in_progress (if there are any non-completed tasks)
99
- const inProgressTasks = todos.filter(t => t.status === 'in_progress');
100
- const nonCompletedTasks = todos.filter(t => t.status !== 'completed');
101
- if (nonCompletedTasks.length > 0 && inProgressTasks.length !== 1) {
102
- return `Error: Exactly ONE task must be in_progress at any time. Currently ${inProgressTasks.length} tasks are in_progress.`;
103
- }
104
- // Validate required fields
105
- for (const todo of todos) {
106
- if (!todo.content || !todo.activeForm) {
107
- return 'Error: Each todo must have both "content" and "activeForm" fields.';
108
- }
109
- }
110
- // Update the todo list
111
- currentTodoList = todos;
112
- // Format output
113
- let output = '📋 Task List Updated:\n\n';
114
- for (let i = 0; i < todos.length; i++) {
115
- const todo = todos[i];
116
- if (!todo)
117
- continue;
118
- let statusIcon;
119
- let statusLabel;
120
- switch (todo.status) {
121
- case 'completed':
122
- statusIcon = '✓';
123
- statusLabel = 'Completed';
124
- break;
125
- case 'in_progress':
126
- statusIcon = '▶';
127
- statusLabel = 'In Progress';
128
- break;
129
- case 'pending':
130
- default:
131
- statusIcon = '○';
132
- statusLabel = 'Pending';
133
- break;
134
- }
135
- output += `${i + 1}. [${statusIcon}] ${todo.content}\n`;
136
- output += ` Status: ${statusLabel}\n`;
137
- if (todo.status === 'in_progress') {
138
- output += ` Active: ${todo.activeForm}\n`;
139
- }
140
- output += '\n';
141
- }
142
- const pendingCount = todos.filter(t => t.status === 'pending').length;
143
- const completedCount = todos.filter(t => t.status === 'completed').length;
144
- const totalCount = todos.length;
145
- output += `\nProgress: ${completedCount}/${totalCount} tasks completed, ${pendingCount} pending\n`;
146
- return output;
147
- },
148
- },
149
- ];
150
- }
151
- export function getCurrentTodoList() {
152
- return currentTodoList;
153
- }
154
- export function clearTodoList() {
155
- currentTodoList = [];
156
- }
@@ -1,232 +0,0 @@
1
- import { exec } from 'node:child_process';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { basename, join } from 'node:path';
4
- import { promisify } from 'node:util';
5
- import { performAdvancedAstAnalysis } from './codeAnalysisTools.js';
6
- const execAsync = promisify(exec);
7
- export function createTestingTools(workingDir) {
8
- return [
9
- {
10
- name: 'generate_test_templates',
11
- description: 'Create sample Jest/Vitest/Mocha test blocks for functions and classes.',
12
- parameters: {
13
- type: 'object',
14
- properties: {
15
- path: {
16
- type: 'string',
17
- description: 'File to analyze when generating templates.',
18
- },
19
- framework: {
20
- type: 'string',
21
- enum: ['jest', 'vitest', 'mocha'],
22
- description: 'Test framework style to use (default: jest).',
23
- },
24
- },
25
- required: ['path'],
26
- additionalProperties: false,
27
- },
28
- handler: async (args) => {
29
- try {
30
- const filePath = resolveFilePath(workingDir, args['path']);
31
- if (!existsSync(filePath)) {
32
- return `Error: File not found: ${filePath}`;
33
- }
34
- const framework = normalizeFramework(args['framework']);
35
- const content = readFileSync(filePath, 'utf-8');
36
- const ast = performAdvancedAstAnalysis(content, filePath);
37
- if (ast.symbols.length === 0) {
38
- return `No functions or classes detected in ${filePath}.`;
39
- }
40
- return buildTestTemplate(ast, filePath, framework);
41
- }
42
- catch (error) {
43
- return `Error generating test templates: ${error instanceof Error ? error.message : String(error)}`;
44
- }
45
- },
46
- },
47
- {
48
- name: 'run_coverage_analysis',
49
- description: 'Execute a coverage-focused test run (npm test -- --coverage / jest / vitest).',
50
- parameters: {
51
- type: 'object',
52
- properties: {
53
- framework: {
54
- type: 'string',
55
- enum: ['jest', 'vitest', 'mocha', 'npm'],
56
- description: 'Preferred test driver (default: npm).',
57
- },
58
- additionalArgs: {
59
- type: 'string',
60
- description: 'Extra CLI args to append to the coverage command.',
61
- },
62
- timeout: {
63
- type: 'number',
64
- description: 'Timeout in milliseconds (default: 240000).',
65
- },
66
- },
67
- additionalProperties: false,
68
- },
69
- handler: async (args) => {
70
- const framework = typeof args['framework'] === 'string' ? args['framework'] : 'npm';
71
- const timeoutArg = args['timeout'];
72
- const timeout = typeof timeoutArg === 'number' && Number.isFinite(timeoutArg) && timeoutArg > 0
73
- ? timeoutArg
74
- : 240000;
75
- const extraArgsArg = args['additionalArgs'];
76
- const extraArgs = typeof extraArgsArg === 'string' && extraArgsArg.trim()
77
- ? extraArgsArg.trim()
78
- : '';
79
- try {
80
- const command = await determineCoverageCommand(workingDir, framework, extraArgs);
81
- const { stdout, stderr } = await execAsync(command, {
82
- cwd: workingDir,
83
- timeout,
84
- maxBuffer: 1024 * 1024 * 10,
85
- });
86
- let result = `Coverage command: ${command}\n\n`;
87
- if (stdout)
88
- result += `stdout:\n${stdout}\n`;
89
- if (stderr)
90
- result += `stderr:\n${stderr}\n`;
91
- return result || 'Coverage run completed.';
92
- }
93
- catch (error) {
94
- if (error.killed) {
95
- return `Error: coverage command timed out after ${timeout}ms`;
96
- }
97
- return `Error running coverage command: ${error.message}\nstderr: ${error.stderr ?? 'none'}`;
98
- }
99
- },
100
- },
101
- {
102
- name: 'summarize_coverage_report',
103
- description: 'Summarize coverage/coverage-summary.json (NYC/Jest/Vitest) in markdown.',
104
- parameters: {
105
- type: 'object',
106
- properties: {
107
- path: {
108
- type: 'string',
109
- description: 'Custom path to the coverage summary JSON (defaults to coverage/coverage-summary.json).',
110
- },
111
- },
112
- additionalProperties: false,
113
- },
114
- handler: async (args) => {
115
- try {
116
- const summaryPath = typeof args['path'] === 'string' && args['path'].trim()
117
- ? resolveFilePath(workingDir, args['path'])
118
- : join(workingDir, 'coverage', 'coverage-summary.json');
119
- if (!existsSync(summaryPath)) {
120
- return `Coverage summary not found at ${summaryPath}. Run coverage and ensure the report is generated.`;
121
- }
122
- const summary = JSON.parse(readFileSync(summaryPath, 'utf-8'));
123
- return formatCoverageSummary(summary, summaryPath, workingDir);
124
- }
125
- catch (error) {
126
- return `Error summarizing coverage: ${error instanceof Error ? error.message : String(error)}`;
127
- }
128
- },
129
- },
130
- ];
131
- }
132
- function resolveFilePath(workingDir, path) {
133
- if (typeof path !== 'string' || !path.trim()) {
134
- throw new Error('Path must be a non-empty string.');
135
- }
136
- const value = path.trim();
137
- return value.startsWith('/') ? value : join(workingDir, value);
138
- }
139
- function normalizeFramework(input) {
140
- if (input === 'vitest' || input === 'mocha') {
141
- return input;
142
- }
143
- return 'jest';
144
- }
145
- function buildTestTemplate(ast, filePath, framework) {
146
- const describeName = basename(filePath);
147
- const testFn = framework === 'mocha' ? 'it' : 'test';
148
- const output = [];
149
- output.push('```ts');
150
- output.push(`describe('${describeName}', () => {`);
151
- ast.symbols.forEach((symbol) => {
152
- if (symbol.kind === 'class') {
153
- output.push(` describe('${symbol.name}', () => {`);
154
- output.push(` ${testFn}('should construct and expose expected behavior', () => {`);
155
- output.push(' // Arrange');
156
- output.push(' // const instance = new ClassUnderTest();');
157
- output.push('');
158
- output.push(' // Act');
159
- output.push('');
160
- output.push(' // Assert');
161
- output.push(' });');
162
- output.push(' });');
163
- return;
164
- }
165
- output.push(` ${testFn}('should handle ${symbol.name}', () => {`);
166
- output.push(' // Arrange');
167
- output.push(' // const input = ...;');
168
- output.push('');
169
- output.push(' // Act');
170
- output.push(` // const result = ${symbol.name}();`);
171
- output.push('');
172
- output.push(' // Assert');
173
- output.push(' // expect(result).toBeDefined();');
174
- output.push(' });');
175
- });
176
- output.push('});');
177
- output.push('```');
178
- return output.join('\n');
179
- }
180
- async function determineCoverageCommand(workingDir, framework, extraArgs) {
181
- const pkg = readPackageJson(workingDir);
182
- const suffix = extraArgs ? ` ${extraArgs}` : '';
183
- if (pkg?.scripts?.['test:coverage']) {
184
- return `npm run test:coverage${suffix ? ` --${suffix}` : ''}`;
185
- }
186
- if (pkg?.scripts?.['coverage']) {
187
- return `npm run coverage${suffix ? ` --${suffix}` : ''}`;
188
- }
189
- switch (framework) {
190
- case 'vitest':
191
- return `npx vitest run --coverage${suffix}`;
192
- case 'jest':
193
- return `npx jest --coverage${suffix}`;
194
- case 'mocha':
195
- return `npx nyc mocha${suffix || ' --reporter spec'}`;
196
- default:
197
- return `npm test -- --coverage${suffix}`;
198
- }
199
- }
200
- function readPackageJson(workingDir) {
201
- const packageJsonPath = join(workingDir, 'package.json');
202
- if (!existsSync(packageJsonPath)) {
203
- return null;
204
- }
205
- return JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
206
- }
207
- function formatCoverageSummary(summary, path, workingDir) {
208
- const relPath = path.startsWith(workingDir) ? path.slice(workingDir.length + 1) : path;
209
- const total = summary.total;
210
- const output = [];
211
- output.push(`# Coverage summary (${relPath})`);
212
- output.push('');
213
- output.push('| Metric | Covered | Total | % |');
214
- output.push('| --- | --- | --- | --- |');
215
- ['lines', 'statements', 'functions', 'branches'].forEach((metric) => {
216
- const entry = total[metric];
217
- output.push(`| ${metric} | ${entry.covered} | ${entry.total} | ${entry.pct}% |`);
218
- });
219
- const detailedFiles = Object.entries(summary)
220
- .filter(([key]) => key !== 'total')
221
- .slice(0, 15);
222
- if (detailedFiles.length > 0) {
223
- output.push('');
224
- output.push('## Sample files');
225
- for (const [file, metrics] of detailedFiles) {
226
- const lines = metrics.lines;
227
- const pct = lines ? `${lines.pct}%` : 'n/a';
228
- output.push(`- ${file}: lines ${pct}`);
229
- }
230
- }
231
- return output.join('\n');
232
- }