erosolar-cli 1.7.55 → 1.7.57

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/dist/shell/unifiedInputProcessor.d.ts +15 -12
  2. package/dist/shell/unifiedInputProcessor.d.ts.map +1 -1
  3. package/dist/shell/unifiedInputProcessor.js +45 -72
  4. package/dist/shell/unifiedInputProcessor.js.map +1 -1
  5. package/package.json +4 -4
  6. package/dist/active-stack-security.d.ts +0 -110
  7. package/dist/active-stack-security.js +0 -313
  8. package/dist/active-stack-security.js.map +0 -1
  9. package/dist/advanced-targeting.d.ts +0 -113
  10. package/dist/advanced-targeting.js +0 -252
  11. package/dist/advanced-targeting.js.map +0 -1
  12. package/dist/bin/adapters/node/index.js +0 -33
  13. package/dist/bin/adapters/types.js +0 -1
  14. package/dist/bin/alpha-zero/agentWrapper.js +0 -165
  15. package/dist/bin/alpha-zero/codeEvaluator.js +0 -272
  16. package/dist/bin/alpha-zero/competitiveRunner.js +0 -219
  17. package/dist/bin/alpha-zero/index.js +0 -98
  18. package/dist/bin/alpha-zero/introspection.js +0 -298
  19. package/dist/bin/alpha-zero/metricsTracker.js +0 -207
  20. package/dist/bin/alpha-zero/security/core.js +0 -269
  21. package/dist/bin/alpha-zero/security/google.js +0 -308
  22. package/dist/bin/alpha-zero/security/googleLoader.js +0 -40
  23. package/dist/bin/alpha-zero/security/index.js +0 -31
  24. package/dist/bin/alpha-zero/security/simulation.js +0 -274
  25. package/dist/bin/alpha-zero/selfModification.js +0 -231
  26. package/dist/bin/alpha-zero/types.js +0 -30
  27. package/dist/bin/bin/erosolar-optimized.js +0 -205
  28. package/dist/bin/capabilities/agentSpawningCapability.js +0 -116
  29. package/dist/bin/capabilities/bashCapability.js +0 -22
  30. package/dist/bin/capabilities/cloudCapability.js +0 -36
  31. package/dist/bin/capabilities/codeAnalysisCapability.js +0 -22
  32. package/dist/bin/capabilities/codeQualityCapability.js +0 -23
  33. package/dist/bin/capabilities/dependencySecurityCapability.js +0 -22
  34. package/dist/bin/capabilities/devCapability.js +0 -22
  35. package/dist/bin/capabilities/editCapability.js +0 -28
  36. package/dist/bin/capabilities/emailCapability.js +0 -20
  37. package/dist/bin/capabilities/enhancedGitCapability.js +0 -221
  38. package/dist/bin/capabilities/filesystemCapability.js +0 -22
  39. package/dist/bin/capabilities/globCapability.js +0 -28
  40. package/dist/bin/capabilities/interactionCapability.js +0 -20
  41. package/dist/bin/capabilities/learnCapability.js +0 -22
  42. package/dist/bin/capabilities/mcpCapability.js +0 -20
  43. package/dist/bin/capabilities/notebookCapability.js +0 -28
  44. package/dist/bin/capabilities/planningCapability.js +0 -27
  45. package/dist/bin/capabilities/refactoringCapability.js +0 -23
  46. package/dist/bin/capabilities/repoChecksCapability.js +0 -22
  47. package/dist/bin/capabilities/searchCapability.js +0 -22
  48. package/dist/bin/capabilities/skillCapability.js +0 -76
  49. package/dist/bin/capabilities/taskManagementCapability.js +0 -20
  50. package/dist/bin/capabilities/testingCapability.js +0 -23
  51. package/dist/bin/capabilities/toolManifest.js +0 -159
  52. package/dist/bin/capabilities/toolRegistry.js +0 -114
  53. package/dist/bin/capabilities/webCapability.js +0 -20
  54. package/dist/bin/config.js +0 -139
  55. package/dist/bin/contracts/v1/agent.js +0 -7
  56. package/dist/bin/contracts/v1/agentProfileManifest.js +0 -8
  57. package/dist/bin/contracts/v1/agentRules.js +0 -9
  58. package/dist/bin/contracts/v1/toolAccess.js +0 -8
  59. package/dist/bin/erosolar-optimized.d.ts +0 -12
  60. package/dist/bin/erosolar-optimized.d.ts.map +0 -1
  61. package/dist/bin/erosolar-optimized.js +0 -239
  62. package/dist/bin/erosolar-optimized.js.map +0 -1
  63. package/dist/bin/headless/headlessApp.js +0 -172
  64. package/dist/bin/mcp/config.js +0 -202
  65. package/dist/bin/mcp/stdioClient.js +0 -172
  66. package/dist/bin/mcp/toolBridge.js +0 -104
  67. package/dist/bin/mcp/types.js +0 -1
  68. package/dist/bin/plugins/index.js +0 -113
  69. package/dist/bin/plugins/providers/anthropic/index.js +0 -25
  70. package/dist/bin/plugins/providers/deepseek/index.js +0 -24
  71. package/dist/bin/plugins/providers/google/index.js +0 -26
  72. package/dist/bin/plugins/providers/index.js +0 -19
  73. package/dist/bin/plugins/providers/ollama/index.js +0 -59
  74. package/dist/bin/plugins/providers/openai/index.js +0 -26
  75. package/dist/bin/plugins/providers/xai/index.js +0 -24
  76. package/dist/bin/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -8
  77. package/dist/bin/plugins/tools/bash/localBashPlugin.js +0 -13
  78. package/dist/bin/plugins/tools/checks/localRepoChecksPlugin.js +0 -13
  79. package/dist/bin/plugins/tools/cloud/cloudPlugin.js +0 -13
  80. package/dist/bin/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -13
  81. package/dist/bin/plugins/tools/codeQuality/codeQualityPlugin.js +0 -13
  82. package/dist/bin/plugins/tools/dependency/dependencyPlugin.js +0 -11
  83. package/dist/bin/plugins/tools/development/devPlugin.js +0 -13
  84. package/dist/bin/plugins/tools/edit/editPlugin.js +0 -14
  85. package/dist/bin/plugins/tools/email/emailPlugin.js +0 -11
  86. package/dist/bin/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -8
  87. package/dist/bin/plugins/tools/filesystem/localFilesystemPlugin.js +0 -13
  88. package/dist/bin/plugins/tools/glob/globPlugin.js +0 -14
  89. package/dist/bin/plugins/tools/index.js +0 -2
  90. package/dist/bin/plugins/tools/interaction/interactionPlugin.js +0 -11
  91. package/dist/bin/plugins/tools/learn/learnPlugin.js +0 -13
  92. package/dist/bin/plugins/tools/mcp/mcpPlugin.js +0 -8
  93. package/dist/bin/plugins/tools/nodeDefaults.js +0 -56
  94. package/dist/bin/plugins/tools/notebook/notebookPlugin.js +0 -14
  95. package/dist/bin/plugins/tools/planning/planningPlugin.js +0 -14
  96. package/dist/bin/plugins/tools/refactoring/refactoringPlugin.js +0 -11
  97. package/dist/bin/plugins/tools/registry.js +0 -57
  98. package/dist/bin/plugins/tools/search/localSearchPlugin.js +0 -13
  99. package/dist/bin/plugins/tools/skills/skillPlugin.js +0 -8
  100. package/dist/bin/plugins/tools/taskManagement/taskManagementPlugin.js +0 -11
  101. package/dist/bin/plugins/tools/testing/testingPlugin.js +0 -11
  102. package/dist/bin/plugins/tools/web/webPlugin.js +0 -11
  103. package/dist/bin/providers/anthropicProvider.js +0 -329
  104. package/dist/bin/providers/googleProvider.js +0 -203
  105. package/dist/bin/providers/openaiChatCompletionsProvider.js +0 -208
  106. package/dist/bin/providers/openaiResponsesProvider.js +0 -249
  107. package/dist/bin/providers/providerFactory.js +0 -24
  108. package/dist/bin/runtime/agentController.js +0 -321
  109. package/dist/bin/runtime/agentHost.js +0 -153
  110. package/dist/bin/runtime/agentSession.js +0 -195
  111. package/dist/bin/runtime/node.js +0 -10
  112. package/dist/bin/runtime/universal.js +0 -28
  113. package/dist/bin/skills/skillRepository.js +0 -236
  114. package/dist/bin/skills/types.js +0 -1
  115. package/dist/bin/subagents/taskRunner.js +0 -269
  116. package/dist/bin/tools/backgroundBashTools.js +0 -211
  117. package/dist/bin/tools/bashTools.js +0 -159
  118. package/dist/bin/tools/cloudTools.js +0 -864
  119. package/dist/bin/tools/codeAnalysisTools.js +0 -641
  120. package/dist/bin/tools/codeQualityTools.js +0 -294
  121. package/dist/bin/tools/dependencyTools.js +0 -282
  122. package/dist/bin/tools/devTools.js +0 -238
  123. package/dist/bin/tools/diffUtils.js +0 -137
  124. package/dist/bin/tools/editTools.js +0 -134
  125. package/dist/bin/tools/emailTools.js +0 -448
  126. package/dist/bin/tools/fileTools.js +0 -282
  127. package/dist/bin/tools/globTools.js +0 -173
  128. package/dist/bin/tools/grepTools.js +0 -332
  129. package/dist/bin/tools/interactionTools.js +0 -170
  130. package/dist/bin/tools/learnTools.js +0 -1818
  131. package/dist/bin/tools/notebookEditTools.js +0 -196
  132. package/dist/bin/tools/planningTools.js +0 -46
  133. package/dist/bin/tools/refactoringTools.js +0 -293
  134. package/dist/bin/tools/repoChecksTools.js +0 -160
  135. package/dist/bin/tools/searchTools.js +0 -206
  136. package/dist/bin/tools/skillTools.js +0 -177
  137. package/dist/bin/tools/taskManagementTools.js +0 -156
  138. package/dist/bin/tools/testingTools.js +0 -232
  139. package/dist/bin/tools/webTools.js +0 -480
  140. package/dist/bin/workspace.js +0 -106
  141. package/dist/bin/workspace.validator.js +0 -213
  142. package/dist/capabilities/offensiveSecurityCapability.d.ts +0 -26
  143. package/dist/capabilities/offensiveSecurityCapability.d.ts.map +0 -1
  144. package/dist/capabilities/offensiveSecurityCapability.js +0 -58
  145. package/dist/capabilities/offensiveSecurityCapability.js.map +0 -1
  146. package/dist/capabilities/realSecurityCapability.d.ts +0 -26
  147. package/dist/capabilities/realSecurityCapability.d.ts.map +0 -1
  148. package/dist/capabilities/realSecurityCapability.js +0 -53
  149. package/dist/capabilities/realSecurityCapability.js.map +0 -1
  150. package/dist/capabilities/securityCapability.d.ts +0 -32
  151. package/dist/capabilities/securityCapability.d.ts.map +0 -1
  152. package/dist/capabilities/securityCapability.js +0 -57
  153. package/dist/capabilities/securityCapability.js.map +0 -1
  154. package/dist/capabilities/ultimateSecurityCapability.d.ts +0 -42
  155. package/dist/capabilities/ultimateSecurityCapability.d.ts.map +0 -1
  156. package/dist/capabilities/ultimateSecurityCapability.js +0 -96
  157. package/dist/capabilities/ultimateSecurityCapability.js.map +0 -1
  158. package/dist/core/designThoughtCheck.d.ts +0 -196
  159. package/dist/core/designThoughtCheck.d.ts.map +0 -1
  160. package/dist/core/designThoughtCheck.js +0 -287
  161. package/dist/core/designThoughtCheck.js.map +0 -1
  162. package/dist/core/designThoughtCheckEngine.d.ts +0 -58
  163. package/dist/core/designThoughtCheckEngine.d.ts.map +0 -1
  164. package/dist/core/designThoughtCheckEngine.js +0 -358
  165. package/dist/core/designThoughtCheckEngine.js.map +0 -1
  166. package/dist/core/designThoughtCheckIntegration.d.ts +0 -103
  167. package/dist/core/designThoughtCheckIntegration.d.ts.map +0 -1
  168. package/dist/core/designThoughtCheckIntegration.js +0 -207
  169. package/dist/core/designThoughtCheckIntegration.js.map +0 -1
  170. package/dist/core/intelligenceTools.d.ts +0 -19
  171. package/dist/core/intelligenceTools.d.ts.map +0 -1
  172. package/dist/core/intelligenceTools.js +0 -453
  173. package/dist/core/intelligenceTools.js.map +0 -1
  174. package/dist/core/operationalTools.d.ts +0 -19
  175. package/dist/core/operationalTools.d.ts.map +0 -1
  176. package/dist/core/operationalTools.js +0 -467
  177. package/dist/core/operationalTools.js.map +0 -1
  178. package/dist/offensive/core/offensive-engine.d.ts +0 -171
  179. package/dist/offensive/core/offensive-engine.d.ts.map +0 -1
  180. package/dist/offensive/core/offensive-engine.js +0 -345
  181. package/dist/offensive/core/offensive-engine.js.map +0 -1
  182. package/dist/offensive/core/offensive-integration.d.ts +0 -129
  183. package/dist/offensive/core/offensive-integration.d.ts.map +0 -1
  184. package/dist/offensive/core/offensive-integration.js +0 -364
  185. package/dist/offensive/core/offensive-integration.js.map +0 -1
  186. package/dist/offensive/core/offensive-tools.d.ts +0 -55
  187. package/dist/offensive/core/offensive-tools.d.ts.map +0 -1
  188. package/dist/offensive/core/offensive-tools.js +0 -438
  189. package/dist/offensive/core/offensive-tools.js.map +0 -1
  190. package/dist/offensive/offensive-cli.d.ts +0 -48
  191. package/dist/offensive/offensive-cli.d.ts.map +0 -1
  192. package/dist/offensive/offensive-cli.js +0 -233
  193. package/dist/offensive/offensive-cli.js.map +0 -1
  194. package/dist/security/apt-simulation-cli.d.ts +0 -57
  195. package/dist/security/apt-simulation-cli.d.ts.map +0 -1
  196. package/dist/security/apt-simulation-cli.js +0 -278
  197. package/dist/security/apt-simulation-cli.js.map +0 -1
  198. package/dist/security/apt-simulation-engine-complete.d.ts +0 -97
  199. package/dist/security/apt-simulation-engine-complete.d.ts.map +0 -1
  200. package/dist/security/apt-simulation-engine-complete.js +0 -441
  201. package/dist/security/apt-simulation-engine-complete.js.map +0 -1
  202. package/dist/security/apt-simulation-engine.d.ts +0 -97
  203. package/dist/security/apt-simulation-engine.d.ts.map +0 -1
  204. package/dist/security/apt-simulation-engine.js +0 -441
  205. package/dist/security/apt-simulation-engine.js.map +0 -1
  206. package/dist/security/authorization.d.ts +0 -45
  207. package/dist/security/authorization.d.ts.map +0 -1
  208. package/dist/security/authorization.js +0 -128
  209. package/dist/security/authorization.js.map +0 -1
  210. package/dist/security/comprehensive-security-research.d.ts +0 -84
  211. package/dist/security/comprehensive-security-research.d.ts.map +0 -1
  212. package/dist/security/comprehensive-security-research.js +0 -211
  213. package/dist/security/comprehensive-security-research.js.map +0 -1
  214. package/dist/security/offensive/exploitationEngine.d.ts +0 -54
  215. package/dist/security/offensive/exploitationEngine.d.ts.map +0 -1
  216. package/dist/security/offensive/exploitationEngine.js +0 -263
  217. package/dist/security/offensive/exploitationEngine.js.map +0 -1
  218. package/dist/security/real/networkExploitation.d.ts +0 -92
  219. package/dist/security/real/networkExploitation.d.ts.map +0 -1
  220. package/dist/security/real/networkExploitation.js +0 -316
  221. package/dist/security/real/networkExploitation.js.map +0 -1
  222. package/dist/security/real/persistenceImplementation.d.ts +0 -62
  223. package/dist/security/real/persistenceImplementation.d.ts.map +0 -1
  224. package/dist/security/real/persistenceImplementation.js +0 -323
  225. package/dist/security/real/persistenceImplementation.js.map +0 -1
  226. package/dist/security/real/vulnerabilityScanner.d.ts +0 -73
  227. package/dist/security/real/vulnerabilityScanner.d.ts.map +0 -1
  228. package/dist/security/real/vulnerabilityScanner.js +0 -341
  229. package/dist/security/real/vulnerabilityScanner.js.map +0 -1
  230. package/dist/shell/capturePastePatch.d.ts +0 -9
  231. package/dist/shell/capturePastePatch.d.ts.map +0 -1
  232. package/dist/shell/capturePastePatch.js +0 -98
  233. package/dist/shell/capturePastePatch.js.map +0 -1
  234. package/dist/shell/enhancedInteractiveShell.d.ts +0 -90
  235. package/dist/shell/enhancedInteractiveShell.d.ts.map +0 -1
  236. package/dist/shell/enhancedInteractiveShell.js +0 -248
  237. package/dist/shell/enhancedInteractiveShell.js.map +0 -1
  238. package/dist/shell/inputProcessor.d.ts +0 -56
  239. package/dist/shell/inputProcessor.d.ts.map +0 -1
  240. package/dist/shell/inputProcessor.js +0 -172
  241. package/dist/shell/inputProcessor.js.map +0 -1
  242. package/dist/shell/interactiveShell-patch.d.ts +0 -27
  243. package/dist/shell/interactiveShell-patch.d.ts.map +0 -1
  244. package/dist/shell/interactiveShell-patch.js +0 -38
  245. package/dist/shell/interactiveShell-patch.js.map +0 -1
  246. package/dist/shell/interactiveShell-robust.d.ts +0 -26
  247. package/dist/shell/interactiveShell-robust.d.ts.map +0 -1
  248. package/dist/shell/interactiveShell-robust.js +0 -34
  249. package/dist/shell/interactiveShell-robust.js.map +0 -1
  250. package/dist/shell/multiLinePasteManager.d.ts +0 -106
  251. package/dist/shell/multiLinePasteManager.d.ts.map +0 -1
  252. package/dist/shell/multiLinePasteManager.js +0 -308
  253. package/dist/shell/multiLinePasteManager.js.map +0 -1
  254. package/dist/shell/processInputBlockPatch.d.ts +0 -8
  255. package/dist/shell/processInputBlockPatch.d.ts.map +0 -1
  256. package/dist/shell/processInputBlockPatch.js +0 -133
  257. package/dist/shell/processInputBlockPatch.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
- }