atabey 0.0.6 → 0.0.7

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 (387) hide show
  1. package/ATABEY.md +4 -4
  2. package/README.md +35 -33
  3. package/bin/cli.js +2 -2
  4. package/bin/validate-agent-army.js +6 -6
  5. package/dist/framework-mcp/src/constants.js +1 -1
  6. package/dist/framework-mcp/src/constants.js.map +1 -1
  7. package/dist/framework-mcp/src/index.js +29 -5
  8. package/dist/framework-mcp/src/index.js.map +1 -1
  9. package/dist/framework-mcp/src/resources/index.d.ts +10 -0
  10. package/dist/framework-mcp/src/resources/index.js +59 -0
  11. package/dist/framework-mcp/src/resources/index.js.map +1 -0
  12. package/dist/framework-mcp/src/tools/control_plane/locking.js +3 -3
  13. package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -1
  14. package/dist/framework-mcp/src/tools/control_plane/registry.js +3 -2
  15. package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/definitions.js +33 -1
  17. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  18. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +1 -1
  19. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +8 -3
  20. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -1
  21. package/dist/framework-mcp/src/tools/file_system/patch_file.d.ts +1 -1
  22. package/dist/framework-mcp/src/tools/file_system/patch_file.js +8 -3
  23. package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -1
  24. package/dist/framework-mcp/src/tools/file_system/read_file.js +3 -3
  25. package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
  26. package/dist/framework-mcp/src/tools/file_system/replace_text.d.ts +1 -1
  27. package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -3
  28. package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
  29. package/dist/framework-mcp/src/tools/file_system/write_file.d.ts +1 -1
  30. package/dist/framework-mcp/src/tools/file_system/write_file.js +10 -5
  31. package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
  32. package/dist/framework-mcp/src/tools/framework/audit_deps.js +2 -2
  33. package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -1
  34. package/dist/framework-mcp/src/tools/framework/run_tests.js +2 -2
  35. package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
  36. package/dist/framework-mcp/src/tools/framework/submit_plan.d.ts +10 -0
  37. package/dist/framework-mcp/src/tools/framework/submit_plan.js +14 -0
  38. package/dist/framework-mcp/src/tools/framework/submit_plan.js.map +1 -0
  39. package/dist/framework-mcp/src/tools/framework/update_memory.js +1 -1
  40. package/dist/framework-mcp/src/tools/framework/update_memory.js.map +1 -1
  41. package/dist/framework-mcp/src/tools/index.js +2 -0
  42. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  43. package/dist/framework-mcp/src/tools/memory/get_insights.js +1 -1
  44. package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -1
  45. package/dist/framework-mcp/src/tools/messaging/log_action.js +1 -1
  46. package/dist/framework-mcp/src/tools/messaging/log_action.js.map +1 -1
  47. package/dist/framework-mcp/src/tools/messaging/send_message.js +5 -5
  48. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  49. package/dist/framework-mcp/src/tools/observability/check_ports.js +1 -1
  50. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
  51. package/dist/framework-mcp/src/tools/quality/check_lint.js +2 -2
  52. package/dist/framework-mcp/src/tools/quality/check_lint.js.map +1 -1
  53. package/dist/framework-mcp/src/tools/search/get_gaps.js +1 -1
  54. package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -1
  55. package/dist/framework-mcp/src/tools/search/grep_search.js +3 -3
  56. package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
  57. package/dist/framework-mcp/src/tools/types.d.ts +1 -0
  58. package/dist/framework-mcp/src/utils/compliance.d.ts +6 -0
  59. package/dist/framework-mcp/src/utils/compliance.js +158 -5
  60. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  61. package/dist/framework-mcp/src/utils/permissions.d.ts +12 -0
  62. package/dist/framework-mcp/src/utils/permissions.js +72 -0
  63. package/dist/framework-mcp/src/utils/permissions.js.map +1 -0
  64. package/dist/framework-mcp/tests/tools/file_system/compliance-risk.test.js +84 -0
  65. package/dist/framework-mcp/tests/tools/file_system/compliance-risk.test.js.map +1 -0
  66. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +31 -31
  67. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
  68. package/dist/framework-mcp/tests/tools/file_system/permissions.test.d.ts +1 -0
  69. package/dist/framework-mcp/tests/tools/file_system/permissions.test.js +92 -0
  70. package/dist/framework-mcp/tests/tools/file_system/permissions.test.js.map +1 -0
  71. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
  72. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  73. package/dist/src/cli/adapters/core.js +1 -1
  74. package/dist/src/cli/adapters/core.js.map +1 -1
  75. package/dist/src/cli/adapters/scaffold.js +2 -2
  76. package/dist/src/cli/adapters/scaffold.js.map +1 -1
  77. package/dist/src/cli/commands/check.js +5 -3
  78. package/dist/src/cli/commands/check.js.map +1 -1
  79. package/dist/src/cli/commands/compliance.js +2 -2
  80. package/dist/src/cli/commands/compliance.js.map +1 -1
  81. package/dist/src/cli/commands/contract.js +2 -2
  82. package/dist/src/cli/commands/contract.js.map +1 -1
  83. package/dist/src/cli/commands/dashboard.d.ts +5 -0
  84. package/dist/src/cli/commands/dashboard.js +124 -0
  85. package/dist/src/cli/commands/dashboard.js.map +1 -0
  86. package/dist/src/cli/commands/explorer.js +3 -3
  87. package/dist/src/cli/commands/explorer.js.map +1 -1
  88. package/dist/src/cli/commands/git.js +3 -3
  89. package/dist/src/cli/commands/git.js.map +1 -1
  90. package/dist/src/cli/commands/init/create-agent.d.ts +4 -0
  91. package/dist/src/cli/commands/init/create-agent.js +59 -0
  92. package/dist/src/cli/commands/init/create-agent.js.map +1 -0
  93. package/dist/src/cli/commands/init/scaffold-core.d.ts +1 -0
  94. package/dist/src/cli/commands/init/scaffold-core.js +11 -7
  95. package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
  96. package/dist/src/cli/commands/init/scaffold-docs.d.ts +1 -0
  97. package/dist/src/cli/commands/init/scaffold-docs.js +4 -6
  98. package/dist/src/cli/commands/init/scaffold-docs.js.map +1 -1
  99. package/dist/src/cli/commands/init/scaffold-ops.js +4 -4
  100. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  101. package/dist/src/cli/commands/init/scaffold-standards.js +10 -8
  102. package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
  103. package/dist/src/cli/commands/init.js +26 -10
  104. package/dist/src/cli/commands/init.js.map +1 -1
  105. package/dist/src/cli/commands/knowledge.js +3 -3
  106. package/dist/src/cli/commands/knowledge.js.map +1 -1
  107. package/dist/src/cli/commands/lint.js +2 -2
  108. package/dist/src/cli/commands/lint.js.map +1 -1
  109. package/dist/src/cli/commands/log.js +6 -28
  110. package/dist/src/cli/commands/log.js.map +1 -1
  111. package/dist/src/cli/commands/orchestrate.d.ts +10 -17
  112. package/dist/src/cli/commands/orchestrate.js +92 -341
  113. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  114. package/dist/src/cli/commands/plan.d.ts +5 -0
  115. package/dist/src/cli/commands/plan.js +80 -59
  116. package/dist/src/cli/commands/plan.js.map +1 -1
  117. package/dist/src/cli/commands/script.js +3 -3
  118. package/dist/src/cli/commands/script.js.map +1 -1
  119. package/dist/src/cli/commands/security.js +2 -2
  120. package/dist/src/cli/commands/security.js.map +1 -1
  121. package/dist/src/cli/commands/status.js +65 -8
  122. package/dist/src/cli/commands/status.js.map +1 -1
  123. package/dist/src/cli/commands/trace.d.ts +4 -0
  124. package/dist/src/cli/commands/trace.js +83 -2
  125. package/dist/src/cli/commands/trace.js.map +1 -1
  126. package/dist/src/cli/index.js +68 -18
  127. package/dist/src/cli/index.js.map +1 -1
  128. package/dist/src/cli/shims.js +14 -14
  129. package/dist/src/cli/utils/claude.js +1 -1
  130. package/dist/src/cli/utils/claude.js.map +1 -1
  131. package/dist/src/cli/utils/compliance.js +7 -1
  132. package/dist/src/cli/utils/compliance.js.map +1 -1
  133. package/dist/src/cli/utils/fs.js +1 -1
  134. package/dist/src/cli/utils/fs.js.map +1 -1
  135. package/dist/src/cli/utils/i18n.d.ts +1 -0
  136. package/dist/src/cli/utils/i18n.js +2 -0
  137. package/dist/src/cli/utils/i18n.js.map +1 -1
  138. package/dist/src/cli/utils/memory.d.ts +12 -3
  139. package/dist/src/cli/utils/memory.js +39 -31
  140. package/dist/src/cli/utils/memory.js.map +1 -1
  141. package/dist/src/cli/utils/pkg.js +2 -2
  142. package/dist/src/cli/utils/pkg.js.map +1 -1
  143. package/dist/src/cli/utils/schemas.d.ts +8 -8
  144. package/dist/src/cli/utils/ui.js +4 -4
  145. package/dist/src/cli/utils/ui.js.map +1 -1
  146. package/dist/src/contracts/tasks.d.ts +2 -2
  147. package/dist/src/dashboard/vite.config.d.ts +2 -0
  148. package/dist/src/dashboard/vite.config.js +16 -0
  149. package/dist/src/dashboard/vite.config.js.map +1 -0
  150. package/dist/src/modules/adapters/definitions.js +10 -10
  151. package/dist/src/modules/adapters/definitions.js.map +1 -1
  152. package/dist/src/modules/adapters/shared.js +4 -4
  153. package/dist/src/modules/adapters/shared.js.map +1 -1
  154. package/dist/src/modules/agents/definitions.d.ts +19 -0
  155. package/dist/src/modules/agents/definitions.js +74 -21
  156. package/dist/src/modules/agents/definitions.js.map +1 -1
  157. package/dist/src/modules/agents/registry/backend.js +8 -0
  158. package/dist/src/modules/agents/registry/backend.js.map +1 -1
  159. package/dist/src/modules/agents/registry/database.js +7 -0
  160. package/dist/src/modules/agents/registry/database.js.map +1 -1
  161. package/dist/src/modules/agents/registry/devops.js +6 -0
  162. package/dist/src/modules/agents/registry/devops.js.map +1 -1
  163. package/dist/src/modules/agents/registry/frontend.js +8 -0
  164. package/dist/src/modules/agents/registry/frontend.js.map +1 -1
  165. package/dist/src/modules/agents/registry/security.js +6 -0
  166. package/dist/src/modules/agents/registry/security.js.map +1 -1
  167. package/dist/src/modules/agents/types.d.ts +2 -0
  168. package/dist/src/modules/engines/evaluation-engine.d.ts +11 -0
  169. package/dist/src/modules/engines/evaluation-engine.js +103 -0
  170. package/dist/src/modules/engines/evaluation-engine.js.map +1 -0
  171. package/dist/src/modules/engines/health-engine.d.ts +16 -0
  172. package/dist/src/modules/engines/health-engine.js +50 -0
  173. package/dist/src/modules/engines/health-engine.js.map +1 -0
  174. package/dist/src/modules/engines/planning-engine.d.ts +25 -0
  175. package/dist/src/modules/engines/planning-engine.js +79 -0
  176. package/dist/src/modules/engines/planning-engine.js.map +1 -0
  177. package/dist/src/modules/engines/risk-engine.d.ts +18 -0
  178. package/dist/src/modules/engines/risk-engine.js +106 -0
  179. package/dist/src/modules/engines/risk-engine.js.map +1 -0
  180. package/dist/src/modules/engines/routing-engine.d.ts +11 -0
  181. package/dist/src/modules/engines/routing-engine.js +74 -0
  182. package/dist/src/modules/engines/routing-engine.js.map +1 -0
  183. package/dist/src/modules/engines/types.d.ts +47 -0
  184. package/dist/src/modules/engines/types.js +2 -0
  185. package/dist/src/modules/engines/types.js.map +1 -0
  186. package/dist/src/shared/constants.d.ts +5 -2
  187. package/dist/src/shared/constants.js +4 -1
  188. package/dist/src/shared/constants.js.map +1 -1
  189. package/dist/src/shared/fs.d.ts +1 -0
  190. package/dist/src/shared/fs.js +4 -0
  191. package/dist/src/shared/fs.js.map +1 -1
  192. package/dist/src/shared/storage.d.ts +60 -0
  193. package/dist/src/shared/storage.js +208 -0
  194. package/dist/src/shared/storage.js.map +1 -0
  195. package/dist/tests/agent-memory-v2.test.d.ts +1 -0
  196. package/dist/tests/agent-memory-v2.test.js +68 -0
  197. package/dist/tests/agent-memory-v2.test.js.map +1 -0
  198. package/dist/tests/agents-definitions.test.js +42 -0
  199. package/dist/tests/agents-definitions.test.js.map +1 -1
  200. package/dist/tests/integration/hermes_locking.test.js +7 -10
  201. package/dist/tests/integration/hermes_locking.test.js.map +1 -1
  202. package/dist/tests/orchestrate.test.js +5 -1
  203. package/dist/tests/orchestrate.test.js.map +1 -1
  204. package/dist/tests/orchestrator-dependencies.test.d.ts +1 -0
  205. package/dist/tests/orchestrator-dependencies.test.js +52 -0
  206. package/dist/tests/orchestrator-dependencies.test.js.map +1 -0
  207. package/dist/tests/plan.test.d.ts +1 -0
  208. package/dist/tests/plan.test.js +63 -0
  209. package/dist/tests/plan.test.js.map +1 -0
  210. package/dist/tests/planning-engine.test.d.ts +1 -0
  211. package/dist/tests/planning-engine.test.js +50 -0
  212. package/dist/tests/planning-engine.test.js.map +1 -0
  213. package/dist/tests/status-cost.test.d.ts +1 -0
  214. package/dist/tests/status-cost.test.js +54 -0
  215. package/dist/tests/status-cost.test.js.map +1 -0
  216. package/dist/tests/status.test.js +8 -7
  217. package/dist/tests/status.test.js.map +1 -1
  218. package/dist/tests/trace-replay.test.d.ts +1 -0
  219. package/dist/tests/trace-replay.test.js +65 -0
  220. package/dist/tests/trace-replay.test.js.map +1 -0
  221. package/dist/tests/trace.test.js +14 -7
  222. package/dist/tests/trace.test.js.map +1 -1
  223. package/dist/ui/assets/index-Bkt7APzu.css +1 -0
  224. package/dist/ui/assets/index-CeX-06mI.js +49 -0
  225. package/dist/ui/index.html +14 -0
  226. package/package.json +5 -4
  227. package/templates/prompts/contract-design-recipe.md +1 -1
  228. package/templates/prompts/db-management-recipe.md +3 -3
  229. package/templates/prompts/deployment-recipe.md +3 -3
  230. package/templates/prompts/performance-optimization-recipe.md +3 -3
  231. package/templates/prompts/pull-request-template.md +2 -2
  232. package/templates/prompts/security-audit-recipe.md +3 -3
  233. package/templates/standards/crud-governance.md +1 -1
  234. package/templates/standards/deployment-standards.md +1 -1
  235. package/templates/standards/governance-standards.md +1 -1
  236. package/templates/standards/llm-governance.md +1 -1
  237. package/templates/standards/nextjs-standards.md +13 -0
  238. package/templates/standards/observability-standards.md +1 -1
  239. package/templates/standards/security-audit-standards.md +1 -1
  240. package/templates/standards/security-standards.md +1 -1
  241. package/templates/standards/testing-standards.md +1 -1
  242. package/templates/standards/vite-standards.md +13 -0
  243. package/framework-mcp/dist/constants.js +0 -64
  244. package/framework-mcp/dist/index.js +0 -120
  245. package/framework-mcp/dist/tools/control_plane/locking.js +0 -82
  246. package/framework-mcp/dist/tools/control_plane/registry.js +0 -34
  247. package/framework-mcp/dist/tools/definitions.js +0 -290
  248. package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +0 -59
  249. package/framework-mcp/dist/tools/file_system/patch_file.js +0 -29
  250. package/framework-mcp/dist/tools/file_system/read_file.js +0 -51
  251. package/framework-mcp/dist/tools/file_system/replace_text.js +0 -45
  252. package/framework-mcp/dist/tools/file_system/write_file.js +0 -38
  253. package/framework-mcp/dist/tools/framework/audit_deps.js +0 -41
  254. package/framework-mcp/dist/tools/framework/get_status.js +0 -5
  255. package/framework-mcp/dist/tools/framework/orchestrate.js +0 -5
  256. package/framework-mcp/dist/tools/framework/run_tests.js +0 -27
  257. package/framework-mcp/dist/tools/framework/update_contract_hash.js +0 -5
  258. package/framework-mcp/dist/tools/framework/update_memory.js +0 -8
  259. package/framework-mcp/dist/tools/index.js +0 -60
  260. package/framework-mcp/dist/tools/memory/get_insights.js +0 -34
  261. package/framework-mcp/dist/tools/memory/read_memory.js +0 -28
  262. package/framework-mcp/dist/tools/messaging/log_action.js +0 -22
  263. package/framework-mcp/dist/tools/messaging/send_message.js +0 -94
  264. package/framework-mcp/dist/tools/observability/check_ports.js +0 -26
  265. package/framework-mcp/dist/tools/observability/get_health.js +0 -19
  266. package/framework-mcp/dist/tools/quality/check_lint.js +0 -30
  267. package/framework-mcp/dist/tools/search/get_gaps.js +0 -48
  268. package/framework-mcp/dist/tools/search/get_map.js +0 -43
  269. package/framework-mcp/dist/tools/search/grep_search.js +0 -75
  270. package/framework-mcp/dist/tools/search/list_dir.js +0 -28
  271. package/framework-mcp/dist/tools/shell/run_command.js +0 -56
  272. package/framework-mcp/dist/utils/cli.js +0 -59
  273. package/framework-mcp/dist/utils/compliance.js +0 -78
  274. package/framework-mcp/dist/utils/fs.js +0 -44
  275. package/framework-mcp/dist/utils/metrics.js +0 -56
  276. package/framework-mcp/dist/utils/security.js +0 -60
  277. package/framework-mcp/package-lock.json +0 -1191
  278. package/framework-mcp/package.json +0 -29
  279. package/framework-mcp/src/constants.ts +0 -78
  280. package/framework-mcp/src/declarations.d.ts +0 -17
  281. package/framework-mcp/src/index.ts +0 -145
  282. package/framework-mcp/src/tools/control_plane/locking.ts +0 -89
  283. package/framework-mcp/src/tools/control_plane/registry.ts +0 -38
  284. package/framework-mcp/src/tools/definitions.ts +0 -292
  285. package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +0 -79
  286. package/framework-mcp/src/tools/file_system/patch_file.ts +0 -39
  287. package/framework-mcp/src/tools/file_system/read_file.ts +0 -58
  288. package/framework-mcp/src/tools/file_system/replace_text.ts +0 -54
  289. package/framework-mcp/src/tools/file_system/write_file.ts +0 -45
  290. package/framework-mcp/src/tools/framework/audit_deps.ts +0 -49
  291. package/framework-mcp/src/tools/framework/get_status.ts +0 -7
  292. package/framework-mcp/src/tools/framework/orchestrate.ts +0 -7
  293. package/framework-mcp/src/tools/framework/run_tests.ts +0 -30
  294. package/framework-mcp/src/tools/framework/update_contract_hash.ts +0 -7
  295. package/framework-mcp/src/tools/framework/update_memory.ts +0 -10
  296. package/framework-mcp/src/tools/index.ts +0 -64
  297. package/framework-mcp/src/tools/memory/get_insights.ts +0 -41
  298. package/framework-mcp/src/tools/memory/read_memory.ts +0 -31
  299. package/framework-mcp/src/tools/messaging/log_action.ts +0 -28
  300. package/framework-mcp/src/tools/messaging/send_message.ts +0 -97
  301. package/framework-mcp/src/tools/observability/check_ports.ts +0 -30
  302. package/framework-mcp/src/tools/observability/get_health.ts +0 -24
  303. package/framework-mcp/src/tools/quality/check_lint.ts +0 -36
  304. package/framework-mcp/src/tools/search/get_gaps.ts +0 -54
  305. package/framework-mcp/src/tools/search/get_map.ts +0 -48
  306. package/framework-mcp/src/tools/search/grep_search.ts +0 -75
  307. package/framework-mcp/src/tools/search/list_dir.ts +0 -34
  308. package/framework-mcp/src/tools/shell/run_command.ts +0 -66
  309. package/framework-mcp/src/tools/types.ts +0 -89
  310. package/framework-mcp/src/utils/cli.ts +0 -53
  311. package/framework-mcp/src/utils/compliance.ts +0 -95
  312. package/framework-mcp/src/utils/fs.ts +0 -45
  313. package/framework-mcp/src/utils/metrics.ts +0 -73
  314. package/framework-mcp/src/utils/security.ts +0 -66
  315. package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +0 -212
  316. package/framework-mcp/tests/tools/messaging/send_message.test.ts +0 -136
  317. package/framework-mcp/tests/tools/quality/check_lint.test.ts +0 -46
  318. package/framework-mcp/tests/tools/shell/run_command.test.ts +0 -55
  319. package/framework-mcp/tsconfig.json +0 -14
  320. package/src/cli/adapters/core.ts +0 -91
  321. package/src/cli/adapters/index.ts +0 -5
  322. package/src/cli/adapters/paths.ts +0 -135
  323. package/src/cli/adapters/scaffold.ts +0 -95
  324. package/src/cli/adapters/utils.ts +0 -87
  325. package/src/cli/commands/approve.ts +0 -73
  326. package/src/cli/commands/check.ts +0 -188
  327. package/src/cli/commands/compliance.ts +0 -55
  328. package/src/cli/commands/contract.ts +0 -68
  329. package/src/cli/commands/explorer.ts +0 -45
  330. package/src/cli/commands/git.ts +0 -39
  331. package/src/cli/commands/init/scaffold-core.ts +0 -136
  332. package/src/cli/commands/init/scaffold-docs.ts +0 -44
  333. package/src/cli/commands/init/scaffold-ops.ts +0 -83
  334. package/src/cli/commands/init/scaffold-standards.ts +0 -67
  335. package/src/cli/commands/init.ts +0 -193
  336. package/src/cli/commands/knowledge.ts +0 -44
  337. package/src/cli/commands/lint.ts +0 -23
  338. package/src/cli/commands/log.ts +0 -37
  339. package/src/cli/commands/memory.ts +0 -6
  340. package/src/cli/commands/orchestrate.ts +0 -450
  341. package/src/cli/commands/plan.ts +0 -113
  342. package/src/cli/commands/script.ts +0 -20
  343. package/src/cli/commands/security.ts +0 -38
  344. package/src/cli/commands/status.ts +0 -44
  345. package/src/cli/commands/trace.ts +0 -31
  346. package/src/cli/index.ts +0 -322
  347. package/src/cli/shims.ts +0 -66
  348. package/src/cli/utils/claude.ts +0 -63
  349. package/src/cli/utils/compliance.ts +0 -191
  350. package/src/cli/utils/config-schema.ts +0 -48
  351. package/src/cli/utils/fs.ts +0 -170
  352. package/src/cli/utils/i18n.ts +0 -44
  353. package/src/cli/utils/memory.ts +0 -303
  354. package/src/cli/utils/pkg.ts +0 -317
  355. package/src/cli/utils/schemas.ts +0 -22
  356. package/src/cli/utils/string.ts +0 -55
  357. package/src/cli/utils/time.ts +0 -27
  358. package/src/cli/utils/ui.ts +0 -66
  359. package/src/contracts/index.ts +0 -1
  360. package/src/contracts/tasks.ts +0 -26
  361. package/src/modules/adapters/definitions.ts +0 -171
  362. package/src/modules/adapters/registry.ts +0 -27
  363. package/src/modules/adapters/shared.ts +0 -120
  364. package/src/modules/adapters/types.ts +0 -16
  365. package/src/modules/agents/definitions.ts +0 -460
  366. package/src/modules/agents/registry/analyst.ts +0 -44
  367. package/src/modules/agents/registry/architect.ts +0 -47
  368. package/src/modules/agents/registry/backend.ts +0 -46
  369. package/src/modules/agents/registry/database.ts +0 -43
  370. package/src/modules/agents/registry/devops.ts +0 -44
  371. package/src/modules/agents/registry/explorer.ts +0 -41
  372. package/src/modules/agents/registry/frontend.ts +0 -48
  373. package/src/modules/agents/registry/git.ts +0 -41
  374. package/src/modules/agents/registry/manager.ts +0 -58
  375. package/src/modules/agents/registry/mobile.ts +0 -44
  376. package/src/modules/agents/registry/native.ts +0 -44
  377. package/src/modules/agents/registry/quality.ts +0 -46
  378. package/src/modules/agents/registry/security.ts +0 -42
  379. package/src/modules/agents/types.ts +0 -37
  380. package/src/modules/skills/definitions.ts +0 -71
  381. package/src/schema/agent-lifecycle-schema.json +0 -59
  382. package/src/shared/constants.ts +0 -218
  383. package/src/shared/errors.ts +0 -75
  384. package/src/shared/fs.ts +0 -50
  385. package/src/shared/logger.ts +0 -139
  386. package/src/shared/types.ts +0 -20
  387. /package/{framework-mcp/dist/tools/types.js → dist/framework-mcp/tests/tools/file_system/compliance-risk.test.d.ts} +0 -0
@@ -1,7 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- import { UpdateContractHashArgs, ToolResult } from "../types.js";
3
-
4
- export function handleUpdateContractHash(projectRoot: string, args: UpdateContractHashArgs): ToolResult {
5
- const output = safeExec("npx", ["atabey", "update-contract"], projectRoot, args.timeout);
6
- return { content: [{ type: "text", text: output }] };
7
- }
@@ -1,10 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- import { UpdateProjectMemoryArgs, ToolResult } from "../types.js";
3
-
4
- export function handleUpdateProjectMemory(projectRoot: string, args: UpdateProjectMemoryArgs): ToolResult {
5
- const section = args.section;
6
- const content = args.content;
7
- // Using execFileSync with array args prevents command injection
8
- safeExec("npx", ["atabey", "update_project_memory", section, content], projectRoot);
9
- return { content: [{ type: "text", text: `✅ Section ${section} updated.` }] };
10
- }
@@ -1,64 +0,0 @@
1
- import { TOOLS } from "./definitions.js";
2
- import { handleReadFile } from "./file_system/read_file.js";
3
- import { handleWriteFile } from "./file_system/write_file.js";
4
- import { handleReplaceText } from "./file_system/replace_text.js";
5
- import { handleBatchSurgicalEdit } from "./file_system/batch_surgical_edit.js";
6
- import { handlePatchFile } from "./file_system/patch_file.js";
7
- import { handleGrepSearch } from "./search/grep_search.js";
8
- import { handleListDir } from "./search/list_dir.js";
9
- import { handleGetProjectGaps } from "./search/get_gaps.js";
10
- import { handleGetProjectMap } from "./search/get_map.js";
11
- import { handleGetFrameworkStatus } from "./framework/get_status.js";
12
- import { handleUpdateProjectMemory } from "./framework/update_memory.js";
13
- import { handleAuditDependencies } from "./framework/audit_deps.js";
14
- import { handleRunTests } from "./framework/run_tests.js";
15
- import { handleGetSystemHealth } from "./observability/get_health.js";
16
- import { handleCheckPorts } from "./observability/check_ports.js";
17
- import { handleOrchestrateLoop } from "./framework/orchestrate.js";
18
- import { handleUpdateContractHash } from "./framework/update_contract_hash.js";
19
- import { handleReadProjectMemory } from "./memory/read_memory.js";
20
- import { handleGetMemoryInsights } from "./memory/get_insights.js";
21
- import { handleSendAgentMessage } from "./messaging/send_message.js";
22
- import { handleLogAgentAction } from "./messaging/log_action.js";
23
- import { handleAcquireLock, handleReleaseLock } from "./control_plane/locking.js";
24
- import { handleRegisterAgent } from "./control_plane/registry.js";
25
- import { handleRunCommand } from "./shell/run_command.js";
26
- import { handleCheckLint } from "./quality/check_lint.js";
27
- import { ToolHandler, ToolResult } from "./types.js";
28
-
29
- // Map of tool names to their handler functions
30
- const bind = <T>(fn: (root: string, args: T) => ToolResult | Promise<ToolResult>): ToolHandler => {
31
- return (root: string, args: unknown) => fn(root, args as T);
32
- };
33
-
34
- export const toolHandlers: Record<string, ToolHandler> = {
35
- read_file: bind(handleReadFile),
36
- view_file: bind(handleReadFile), // Alias
37
- list_dir: bind(handleListDir),
38
- grep_search: bind(handleGrepSearch),
39
- get_project_map: bind(handleGetProjectMap),
40
- get_project_gaps: bind(handleGetProjectGaps),
41
- write_file: bind(handleWriteFile),
42
- replace_text: bind(handleReplaceText),
43
- batch_surgical_edit: bind(handleBatchSurgicalEdit),
44
- patch_file: bind(handlePatchFile),
45
- get_framework_status: bind(handleGetFrameworkStatus),
46
- read_project_memory: bind(handleReadProjectMemory),
47
- get_memory_insights: bind(handleGetMemoryInsights),
48
- update_project_memory: bind(handleUpdateProjectMemory),
49
- audit_dependencies: bind(handleAuditDependencies),
50
- run_tests: bind(handleRunTests),
51
- get_system_health: bind(handleGetSystemHealth),
52
- check_active_ports: bind(handleCheckPorts),
53
- orchestrate_loop: bind(handleOrchestrateLoop),
54
- send_agent_message: bind(handleSendAgentMessage),
55
- log_agent_action: bind(handleLogAgentAction),
56
- update_contract_hash: bind(handleUpdateContractHash),
57
- acquire_lock: bind(handleAcquireLock),
58
- release_lock: bind(handleReleaseLock),
59
- register_agent: bind(handleRegisterAgent),
60
- run_shell_command: bind(handleRunCommand),
61
- check_lint: bind(handleCheckLint),
62
- };
63
-
64
- export { TOOLS };
@@ -1,41 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- import { ToolArgs, ToolResult } from "../types.js";
5
-
6
- /**
7
- * Extracts key insights from the project memory to minimize token usage.
8
- * Returns only the active phase, trace, and the last 5 decisions/tasks.
9
- */
10
- export function handleGetMemoryInsights(projectRoot: string, _args: ToolArgs): ToolResult {
11
- try {
12
- const frameworkDir = resolveFrameworkDir(projectRoot);
13
- const memoryPath = path.join(projectRoot, frameworkDir, "memory/PROJECT_MEMORY.md");
14
-
15
- if (!fs.existsSync(memoryPath)) {
16
- return { content: [{ type: "text", text: "New project: No history available." }] };
17
- }
18
-
19
- const content = fs.readFileSync(memoryPath, "utf8");
20
- const lines = content.split("\n");
21
-
22
- const activePhase = lines.find(l => l.includes("**Phase:**"))?.split("**Phase:**")[1]?.trim() || "Unknown";
23
- const activeTrace = lines.find(l => l.includes("**Trace ID:**"))?.split("**Trace ID:**")[1]?.trim() || "None";
24
-
25
- // Find the last 5 history items (heuristic)
26
- const historyStartIndex = lines.findIndex(l => l.toUpperCase().includes("HISTORY"));
27
- let recentHistory = "No history found.";
28
- if (historyStartIndex !== -1) {
29
- recentHistory = lines.slice(historyStartIndex + 1)
30
- .filter(l => l.trim().startsWith("-"))
31
- .slice(-5)
32
- .join("\n");
33
- }
34
-
35
- const insights = `🧠 **Memory Insights**\n- **Phase:** ${activePhase}\n- **Trace:** ${activeTrace}\n\n**Recent Actions:**\n${recentHistory}`;
36
-
37
- return { content: [{ type: "text", text: insights }] };
38
- } catch (e) {
39
- return { isError: true, content: [{ type: "text", text: `Failed to extract insights: ${String(e)}` }] };
40
- }
41
- }
@@ -1,31 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- import { ToolArgs, ToolResult } from "../types.js";
5
-
6
- /**
7
- * Reads the project's central memory (PROJECT_MEMORY.md).
8
- * This is the "brain" of the project.
9
- */
10
- export function handleReadProjectMemory(projectRoot: string, _args: ToolArgs): ToolResult {
11
- try {
12
- const frameworkDir = resolveFrameworkDir(projectRoot);
13
- const memoryPath = path.join(projectRoot, frameworkDir, "memory/PROJECT_MEMORY.md");
14
-
15
- if (!fs.existsSync(memoryPath)) {
16
- return {
17
- content: [{ type: "text", text: "ℹ️ Project memory file not found. It might be a new project." }]
18
- };
19
- }
20
-
21
- const content = fs.readFileSync(memoryPath, "utf8");
22
- return {
23
- content: [{ type: "text", text: content }]
24
- };
25
- } catch (e) {
26
- return {
27
- isError: true,
28
- content: [{ type: "text", text: `Failed to read project memory: ${String(e)}` }]
29
- };
30
- }
31
- }
@@ -1,28 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- import { LogAgentActionArgs, ToolResult } from "../types.js";
5
-
6
- export function handleLogAgentAction(projectRoot: string, args: LogAgentActionArgs): ToolResult {
7
- const { agent, action, traceId, status, summary } = args;
8
- const findings = args.findings ? args.findings.split(",").map(f => f.trim()) : [];
9
-
10
- const frameworkDir = resolveFrameworkDir(projectRoot);
11
- const agentName = agent.replace("@", "");
12
- const logPath = path.join(projectRoot, frameworkDir, "logs", `${agentName}.json`);
13
-
14
- const logEntry = {
15
- timestamp: new Date().toISOString(),
16
- agent,
17
- action,
18
- requestId: traceId,
19
- status,
20
- summary,
21
- findings
22
- };
23
-
24
- fs.mkdirSync(path.dirname(logPath), { recursive: true });
25
- fs.appendFileSync(logPath, JSON.stringify(logEntry) + "\n");
26
-
27
- return { content: [{ type: "text", text: `✅ Action logged for ${agent} to ${path.join(frameworkDir, "logs", `${agentName}.json`)}` }] };
28
- }
@@ -1,97 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- import { SendAgentMessageArgs, ToolResult } from "../types.js";
5
- import { Metrics } from "../../utils/metrics.js";
6
-
7
- export async function handleSendAgentMessage(projectRoot: string, args: SendAgentMessageArgs): Promise<ToolResult> {
8
- const { to, category, content, traceId, parentId, requiresApproval } = args;
9
- const from = args.from || "@mcp";
10
-
11
- if (!to || !category || !content || !traceId) {
12
- const err = "Missing required messaging arguments (to, category, content, or traceId).";
13
- Metrics.logError(projectRoot, from, "send_agent_message", err);
14
- return { isError: true, content: [{ type: "text", text: `❌ ${err}` }] };
15
- }
16
-
17
- const frameworkDir = resolveFrameworkDir(projectRoot);
18
- const messagesDir = path.join(projectRoot, frameworkDir, "messages");
19
- const agentName = to.replace("@", "");
20
- const messagePath = path.join(messagesDir, `${agentName}.json`);
21
- const lockPath = path.join(messagesDir, `${agentName}.lock`);
22
-
23
- // Hermes Lock Protocol: Retry 20 times with 500ms delay
24
- let retries = 20;
25
- let acquired = false;
26
- while (retries > 0) {
27
- try {
28
- if (fs.existsSync(lockPath)) {
29
- try {
30
- const stats = fs.statSync(lockPath);
31
- if (Date.now() - stats.mtimeMs > 10000) {
32
- const tempLockPath = `${lockPath}.${Math.random().toString(36).substring(2)}.old`;
33
- fs.renameSync(lockPath, tempLockPath);
34
- fs.unlinkSync(tempLockPath);
35
- }
36
- } catch {
37
- // ignore if concurrently unlinked or renamed
38
- }
39
- }
40
- fs.mkdirSync(messagesDir, { recursive: true });
41
- fs.writeFileSync(lockPath, `Locked by ${from} at ${new Date().toISOString()}`, { flag: "wx" });
42
- acquired = true;
43
- break;
44
- } catch (err: unknown) {
45
- const error = err as { code?: string; message?: string };
46
- if (error.code === "EEXIST") {
47
- retries--;
48
- if (retries > 0) {
49
- await new Promise((resolve) => setTimeout(resolve, 500));
50
- }
51
- } else {
52
- return { content: [{ type: "text", text: `❌ Unexpected lock acquisition error: ${error.message || String(err)}` }], isError: true };
53
- }
54
- }
55
- }
56
-
57
- if (!acquired) {
58
- const err = `Could not send message to ${to}: Hermes lock is busy.`;
59
- Metrics.logError(projectRoot, from, "send_agent_message", err);
60
- return { content: [{ type: "text", text: `❌ ${err}` }], isError: true };
61
- }
62
-
63
- try {
64
- const defaultPriority = (category === "ALERT" || category === "ACTION") ? "HIGH" : "NORMAL";
65
- const finalRequiresApproval = requiresApproval !== undefined
66
- ? requiresApproval
67
- : category === "ALERT";
68
-
69
- const message = {
70
- timestamp: new Date().toISOString(),
71
- from,
72
- to,
73
- category,
74
- traceId,
75
- parentId,
76
- content,
77
- priority: args.priority || defaultPriority,
78
- status: "PENDING",
79
- requiresApproval: finalRequiresApproval
80
- };
81
-
82
- fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
83
- return { content: [{ type: "text", text: `✅ Message sent to ${to} (from: ${from})` }] };
84
- } catch (e) {
85
- const err = `Failed to write message: ${String(e)}`;
86
- Metrics.logError(projectRoot, from, "send_agent_message", err);
87
- return { isError: true, content: [{ type: "text", text: `❌ ${err}` }] };
88
- } finally {
89
- if (acquired && fs.existsSync(lockPath)) {
90
- try {
91
- fs.unlinkSync(lockPath);
92
- } catch {
93
- // ignore
94
- }
95
- }
96
- }
97
- }
@@ -1,30 +0,0 @@
1
- import { execSync } from "child_process";
2
- import { CheckActivePortsArgs, ToolResult } from "../types.js";
3
-
4
- /**
5
- * Checks for active network ports and their status.
6
- */
7
- export function handleCheckPorts(projectRoot: string, args: CheckActivePortsArgs): ToolResult {
8
- const filter = args.filter || ""; // Optional filter (e.g., ":3000")
9
-
10
- try {
11
- // Using 'lsof -i -P -n' to list open files and network connections
12
- // Note: may require permissions or behave differently on non-Unix systems
13
- const command = process.platform === "win32"
14
- ? `netstat -ano | findstr LISTENING ${filter ? `| findstr ${filter}` : ""}`
15
- : `lsof -i -P -n | grep LISTEN ${filter ? `| grep ${filter}` : ""}`;
16
-
17
- const output = execSync(command, { encoding: "utf8" });
18
-
19
- return {
20
- content: [{
21
- type: "text",
22
- text: `📡 **Active Listening Ports:**\n\n${output || "No active listening ports found matching filter."}`
23
- }]
24
- };
25
- } catch (_e) {
26
- return {
27
- content: [{ type: "text", text: "ℹ️ No active ports found or command failed (this is normal if nothing is listening)." }]
28
- };
29
- }
30
- }
@@ -1,24 +0,0 @@
1
- import os from "os";
2
- import { ToolArgs, ToolResult } from "../types.js";
3
-
4
- /**
5
- * Retrieves system health metrics including CPU load and memory usage.
6
- */
7
- export function handleGetSystemHealth(_projectRoot: string, _args: ToolArgs): ToolResult {
8
- const totalMem = os.totalmem();
9
- const freeMem = os.freemem();
10
- const usedMem = totalMem - freeMem;
11
- const memUsagePercent = ((usedMem / totalMem) * 100).toFixed(2);
12
-
13
- const loadAvg = os.loadavg(); // [1, 5, 15] minute averages
14
-
15
- const healthReport = `🖥️ **System Health Report**
16
- - **Memory:** ${memUsagePercent}% used (${(usedMem / 1024 / 1024 / 1024).toFixed(2)} GB / ${(totalMem / 1024 / 1024 / 1024).toFixed(2)} GB)
17
- - **CPU Load (1m, 5m, 15m):** ${loadAvg.map(l => l.toFixed(2)).join(", ")}
18
- - **Platform:** ${os.platform()} (${os.release()})
19
- - **Uptime:** ${(os.uptime() / 3600).toFixed(2)} hours`;
20
-
21
- return {
22
- content: [{ type: "text", text: healthReport }]
23
- };
24
- }
@@ -1,36 +0,0 @@
1
- import { exec } from "child_process";
2
- import { ToolArgs, ToolResult } from "../types.js";
3
- import { Metrics } from "../../utils/metrics.js";
4
- import { getBackendLanguage, getDefaultLintCommand } from "../../utils/cli.js";
5
-
6
- const TIMEOUT = 60000; // 60 seconds
7
-
8
- /**
9
- * Handles running the project's linter.
10
- */
11
- export function handleCheckLint(projectRoot: string, _args: ToolArgs): Promise<ToolResult> {
12
- const language = getBackendLanguage(projectRoot);
13
- const lintCommand = getDefaultLintCommand(language);
14
-
15
- return new Promise((resolve) => {
16
- exec(lintCommand, { cwd: projectRoot, timeout: TIMEOUT }, (error, stdout, stderr) => {
17
- const output = stdout + stderr;
18
- const tokens = Metrics.estimateTokens(output);
19
-
20
- if (error) {
21
- const err = `Linting failed for ${language} with command: ${lintCommand}. ${error.message}`;
22
- Metrics.logError(projectRoot, "@mcp", "check_lint", err);
23
- resolve({
24
- isError: true,
25
- content: [{ type: "text", text: `❌ Lint Errors Found (${language}):\n\n${output}` }]
26
- });
27
- return;
28
- }
29
-
30
- Metrics.logUsage(projectRoot, "@mcp", "check_lint", tokens);
31
- resolve({
32
- content: [{ type: "text", text: `✅ Lint check passed successfully for ${language}:\n\n${output}` }]
33
- });
34
- });
35
- });
36
- }
@@ -1,54 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { safePath } from "../../utils/security.js";
4
- import { GetProjectGapsArgs, ToolResult } from "../types.js";
5
-
6
- /**
7
- * Scans the codebase for TODOs, FIXMEs, and empty function bodies.
8
- * Helps identify what's left and where the agent might have skipped logic.
9
- */
10
- export function handleGetProjectGaps(projectRoot: string, args: GetProjectGapsArgs): ToolResult {
11
- const srcDir = safePath(projectRoot, args.path || "src");
12
- const results: string[] = [];
13
-
14
- const walk = (dir: string) => {
15
- if (!fs.existsSync(dir)) return;
16
- const files = fs.readdirSync(dir);
17
- for (const file of files) {
18
- const fullPath = path.join(dir, file);
19
- const relativePath = path.relative(projectRoot, fullPath);
20
-
21
- if (fs.statSync(fullPath).isDirectory()) {
22
- if (file !== "node_modules" && file !== "dist" && !file.startsWith(".")) {
23
- walk(fullPath);
24
- }
25
- } else if (file.endsWith(".ts") || file.endsWith(".tsx")) {
26
- const content = fs.readFileSync(fullPath, "utf8");
27
- const lines = content.split("\n");
28
-
29
- lines.forEach((line, index) => {
30
- // 1. Scan for markers
31
- if (line.includes("TODO") || line.includes("FIXME") || line.includes("!!!")) {
32
- results.push(`[${relativePath}:${index + 1}] Marker found: ${line.trim()}`);
33
- }
34
-
35
- // 2. Scan for empty function placeholders (heuristic)
36
- if (line.includes("throw new Error(\"Not implemented") || line.includes("// ... rest of code")) {
37
- results.push(`[${relativePath}:${index + 1}] Gap found: ${line.trim()}`);
38
- }
39
- });
40
- }
41
- }
42
- };
43
-
44
- walk(srcDir);
45
-
46
- return {
47
- content: [{
48
- type: "text",
49
- text: results.length > 0
50
- ? `Found ${results.length} gaps/todos:\n\n${results.join("\n")}`
51
- : "✅ No major gaps or TODOs found in the scanned directory."
52
- }]
53
- };
54
- }
@@ -1,48 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { GetProjectMapArgs, ToolResult } from "../types.js";
4
-
5
- /**
6
- * Generates a tree-view map of the project structure.
7
- * Helps agents visualize the entire project layout quickly.
8
- */
9
- export function handleGetProjectMap(projectRoot: string, args: GetProjectMapArgs): ToolResult {
10
- const maxDepth = args.maxDepth || 3;
11
- const includeFiles = args.includeFiles !== false;
12
-
13
- const buildTree = (dir: string, depth: number): string[] => {
14
- if (depth > maxDepth) return [];
15
-
16
- const results: string[] = [];
17
- const files = fs.readdirSync(dir);
18
-
19
- files.forEach(file => {
20
- if (file === "node_modules" || file === ".git" || file === "dist" || file.startsWith(".")) return;
21
-
22
- const fullPath = path.join(dir, file);
23
- const stat = fs.statSync(fullPath);
24
- const indent = " ".repeat(depth);
25
-
26
- if (stat.isDirectory()) {
27
- results.push(`${indent}📁 ${file}/`);
28
- results.push(...buildTree(fullPath, depth + 1));
29
- } else if (includeFiles) {
30
- results.push(`${indent}📄 ${file}`);
31
- }
32
- });
33
-
34
- return results;
35
- };
36
-
37
- try {
38
- const tree = buildTree(projectRoot, 0);
39
- return {
40
- content: [{
41
- type: "text",
42
- text: `🗺️ **Project Map (Depth: ${maxDepth})**\n\n${tree.join("\n")}`
43
- }]
44
- };
45
- } catch (e) {
46
- return { isError: true, content: [{ type: "text", text: `Failed to map project: ${String(e)}` }] };
47
- }
48
- }
@@ -1,75 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { GrepSearchArgs, ToolResult } from "../types.js";
4
- import { Metrics } from "../../utils/metrics.js";
5
-
6
- /**
7
- * Searches for a regex pattern within files in the project.
8
- */
9
- export function handleGrepSearch(projectRoot: string, args: GrepSearchArgs): ToolResult {
10
- const pattern = args.pattern as string;
11
- const includePattern = args.includePattern as string || ""; // e.g., ".ts"
12
- const excludePattern = args.excludePattern as string || "node_modules";
13
-
14
- if (!pattern) {
15
- const err = "Search pattern is required.";
16
- Metrics.logError(projectRoot, "@mcp", "grep_search", err);
17
- return { isError: true, content: [{ type: "text", text: `❌ ${err}` }] };
18
- }
19
-
20
- const results: string[] = [];
21
- try {
22
- new RegExp(pattern);
23
- } catch (e) {
24
- const err = `Invalid regex pattern: ${String(e)}`;
25
- Metrics.logError(projectRoot, "@mcp", "grep_search", err);
26
- return { isError: true, content: [{ type: "text", text: `❌ ${err}` }] };
27
- }
28
-
29
- const walk = (dir: string) => {
30
- if (results.length > 100) return;
31
- try {
32
- const files = fs.readdirSync(dir);
33
- for (const file of files) {
34
- if (results.length > 100) return;
35
- const filePath = path.join(dir, file);
36
- if (excludePattern && filePath.includes(excludePattern)) {
37
- continue;
38
- }
39
- const stat = fs.statSync(filePath);
40
- if (stat.isDirectory()) {
41
- walk(filePath);
42
- } else if (stat.isFile()) {
43
- if (includePattern && !filePath.endsWith(includePattern)) {
44
- continue;
45
- }
46
- const content = fs.readFileSync(filePath, "utf8");
47
- // Create a new regex object for each line to avoid state issues with /g
48
- if (new RegExp(pattern).test(content)) {
49
- if (results.length < 100) {
50
- results.push(filePath);
51
- }
52
- }
53
- }
54
- }
55
- } catch {
56
- // Ignore directories that cannot be read
57
- }
58
- };
59
- try {
60
- walk(projectRoot);
61
- } catch (e) {
62
- const err = `Search failed: ${String(e)}`;
63
- Metrics.logError(projectRoot, "@mcp", "grep_search", err);
64
- return { isError: true, content: [{ type: "text", text: `❌ ${err}` }] };
65
- }
66
-
67
- return {
68
- content: [{
69
- type: "text",
70
- text: results.length > 0
71
- ? `Found ${results.length} matches:\n\n${results.join("\n")}`
72
- : "No matches found."
73
- }]
74
- };
75
- }
@@ -1,34 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { safePath } from "../../utils/security.js";
4
- import { ListDirArgs, ToolResult } from "../types.js";
5
-
6
- /**
7
- * Lists the contents of a directory.
8
- */
9
- export function handleListDir(projectRoot: string, args: ListDirArgs): ToolResult {
10
- const dirPath = safePath(projectRoot, args.path || ".");
11
-
12
- if (!fs.existsSync(dirPath)) {
13
- throw new Error(`Directory not found: ${args.path}`);
14
- }
15
-
16
- const stats = fs.statSync(dirPath);
17
- if (!stats.isDirectory()) {
18
- throw new Error(`Path is not a directory: ${args.path}`);
19
- }
20
-
21
- const files = fs.readdirSync(dirPath);
22
- const results = files.map(file => {
23
- const fullPath = path.join(dirPath, file);
24
- const isDir = fs.statSync(fullPath).isDirectory();
25
- return `${isDir ? "[DIR] " : " "}${file}`;
26
- });
27
-
28
- return {
29
- content: [{
30
- type: "text",
31
- text: `Directory listing for ${args.path || "."}:\n\n${results.join("\n")}`
32
- }]
33
- };
34
- }
@@ -1,66 +0,0 @@
1
- import { exec } from "child_process";
2
- import { RunCommandArgs, ToolResult } from "../types.js";
3
- import { Metrics } from "../../utils/metrics.js";
4
-
5
- const COMMAND_ALLOW_LIST = [
6
- "npm test",
7
- "npm run lint",
8
- "npm run build",
9
- "git status",
10
- "git diff",
11
- "npx vitest run",
12
- "go test",
13
- "go fmt",
14
- "go build",
15
- "pytest",
16
- "ruff check",
17
- "dotnet test",
18
- "dotnet format",
19
- "dotnet build",
20
- "./gradlew",
21
- "mvn",
22
- ];
23
-
24
- const TIMEOUT = 30000; // 30 seconds
25
-
26
- export function handleRunCommand(projectRoot: string, args: RunCommandArgs): Promise<ToolResult> {
27
- const command = args.command;
28
-
29
- const isAllowed = COMMAND_ALLOW_LIST.some(allowedCmd => command.startsWith(allowedCmd));
30
-
31
- if (!isAllowed) {
32
- const errorMsg = `Command not allowed: "${command}". Only commands starting with the following are allowed: ${COMMAND_ALLOW_LIST.join(", ")}`;
33
- Metrics.logError(projectRoot, "@mcp", `run_shell_command: ${command} (denied)`, errorMsg);
34
- return Promise.resolve({
35
- content: [{ type: "text", text: `ERROR: ${errorMsg}` }],
36
- isError: true,
37
- });
38
- }
39
-
40
- return new Promise((resolve) => {
41
- exec(command, { cwd: projectRoot, timeout: TIMEOUT }, (error, stdout, stderr) => {
42
- const output = stdout + stderr;
43
- const tokens = Metrics.estimateTokens(output);
44
- Metrics.logUsage(projectRoot, "@mcp", `run_shell_command: ${command}`, tokens);
45
-
46
- if (error) {
47
- const errorMsg = `Command failed with exit code ${error.code}: ${error.message}.`;
48
- Metrics.logError(projectRoot, "@mcp", `run_shell_command: ${command}`, errorMsg);
49
- resolve({
50
- content: [{ type: "text", text: `ERROR: ${errorMsg}. Output: ${output}` }],
51
- isError: true,
52
- });
53
- return;
54
- }
55
-
56
- // Truncate long outputs
57
- const MAX_OUTPUT_LENGTH = 5000;
58
- let truncatedOutput = output;
59
- if (output.length > MAX_OUTPUT_LENGTH) {
60
- truncatedOutput = output.substring(0, MAX_OUTPUT_LENGTH) + "... [TRUNCATED] ..."; // Simplified
61
- }
62
-
63
- resolve({ content: [{ type: "text", text: truncatedOutput }] });
64
- });
65
- });
66
- }