agent-enderun 1.1.6 → 1.1.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 (252) hide show
  1. package/ENDERUN.md +12 -9
  2. package/README.md +12 -29
  3. package/bin/run-multi-test.js +77 -0
  4. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.d.ts +5 -0
  5. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js +30 -0
  6. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js.map +1 -0
  7. package/dist/framework-mcp/src/tools/definitions.js +118 -0
  8. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  9. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +5 -0
  10. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +51 -0
  11. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -0
  12. package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -4
  13. package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
  14. package/dist/framework-mcp/src/tools/file_system/write_file.js +3 -0
  15. package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/framework/audit_deps.d.ts +6 -0
  17. package/dist/framework-mcp/src/tools/framework/audit_deps.js +42 -0
  18. package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -0
  19. package/dist/framework-mcp/src/tools/framework/run_tests.d.ts +5 -0
  20. package/dist/framework-mcp/src/tools/framework/run_tests.js +26 -0
  21. package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -0
  22. package/dist/framework-mcp/src/tools/index.js +24 -0
  23. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  24. package/dist/framework-mcp/src/tools/memory/get_insights.d.ts +6 -0
  25. package/dist/framework-mcp/src/tools/memory/get_insights.js +35 -0
  26. package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -0
  27. package/dist/framework-mcp/src/tools/memory/read_memory.d.ts +6 -0
  28. package/dist/framework-mcp/src/tools/memory/read_memory.js +29 -0
  29. package/dist/framework-mcp/src/tools/memory/read_memory.js.map +1 -0
  30. package/dist/framework-mcp/src/tools/messaging/send_message.js +1 -1
  31. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  32. package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +5 -0
  33. package/dist/framework-mcp/src/tools/observability/check_ports.js +27 -0
  34. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -0
  35. package/dist/framework-mcp/src/tools/observability/get_health.d.ts +5 -0
  36. package/dist/framework-mcp/src/tools/observability/get_health.js +21 -0
  37. package/dist/framework-mcp/src/tools/observability/get_health.js.map +1 -0
  38. package/dist/framework-mcp/src/tools/search/get_gaps.d.ts +6 -0
  39. package/dist/framework-mcp/src/tools/search/get_gaps.js +49 -0
  40. package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -0
  41. package/dist/framework-mcp/src/tools/search/get_map.d.ts +6 -0
  42. package/dist/framework-mcp/src/tools/search/get_map.js +45 -0
  43. package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -0
  44. package/dist/framework-mcp/src/tools/search/grep_search.d.ts +5 -0
  45. package/dist/framework-mcp/src/tools/search/grep_search.js +60 -0
  46. package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -0
  47. package/dist/framework-mcp/src/tools/search/list_dir.d.ts +5 -0
  48. package/dist/framework-mcp/src/tools/search/list_dir.js +29 -0
  49. package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -0
  50. package/dist/framework-mcp/src/tools/types.d.ts +10 -5
  51. package/dist/framework-mcp/src/utils/compliance.d.ts +5 -0
  52. package/dist/framework-mcp/src/utils/compliance.js +30 -0
  53. package/dist/framework-mcp/src/utils/compliance.js.map +1 -0
  54. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
  55. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  56. package/dist/src/cli/adapters/types.d.ts +2 -2
  57. package/dist/src/cli/adapters.d.ts +1 -1
  58. package/dist/src/cli/adapters.js +45 -77
  59. package/dist/src/cli/adapters.js.map +1 -1
  60. package/dist/src/cli/commands/check.js +52 -6
  61. package/dist/src/cli/commands/check.js.map +1 -1
  62. package/dist/src/cli/commands/init.d.ts +5 -1
  63. package/dist/src/cli/commands/init.js +183 -124
  64. package/dist/src/cli/commands/init.js.map +1 -1
  65. package/dist/src/cli/commands/orchestrate.d.ts +3 -3
  66. package/dist/src/cli/commands/orchestrate.js +14 -8
  67. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  68. package/dist/src/cli/commands/status.js +3 -2
  69. package/dist/src/cli/commands/status.js.map +1 -1
  70. package/dist/src/cli/index.js +4 -3
  71. package/dist/src/cli/index.js.map +1 -1
  72. package/dist/src/cli/shims.js +6 -6
  73. package/dist/src/cli/utils/app-backend.d.ts +2 -0
  74. package/dist/src/cli/utils/app-backend.js +236 -0
  75. package/dist/src/cli/utils/app-backend.js.map +1 -0
  76. package/dist/src/cli/utils/app-docs.d.ts +3 -0
  77. package/dist/src/cli/utils/app-docs.js +59 -0
  78. package/dist/src/cli/utils/app-docs.js.map +1 -0
  79. package/dist/src/cli/utils/app-frontend.d.ts +2 -0
  80. package/dist/src/cli/utils/app-frontend.js +248 -0
  81. package/dist/src/cli/utils/app-frontend.js.map +1 -0
  82. package/dist/src/cli/utils/app-inferrer.d.ts +14 -0
  83. package/dist/src/cli/utils/app-inferrer.js +39 -0
  84. package/dist/src/cli/utils/app-inferrer.js.map +1 -0
  85. package/dist/src/cli/utils/app-types.d.ts +3 -0
  86. package/dist/src/cli/utils/app-types.js +233 -0
  87. package/dist/src/cli/utils/app-types.js.map +1 -0
  88. package/dist/src/cli/utils/app.d.ts +5 -32
  89. package/dist/src/cli/utils/app.js +5 -794
  90. package/dist/src/cli/utils/app.js.map +1 -1
  91. package/dist/src/cli/utils/memory.js +8 -4
  92. package/dist/src/cli/utils/memory.js.map +1 -1
  93. package/dist/src/modules/adapters/antigravity-cli.js +3 -3
  94. package/dist/src/modules/adapters/antigravity-cli.js.map +1 -1
  95. package/dist/src/modules/adapters/claude.js +1 -1
  96. package/dist/src/modules/adapters/claude.js.map +1 -1
  97. package/dist/src/modules/adapters/codex.js +2 -2
  98. package/dist/src/modules/adapters/codex.js.map +1 -1
  99. package/dist/src/modules/adapters/cursor.js +1 -1
  100. package/dist/src/modules/adapters/cursor.js.map +1 -1
  101. package/dist/src/modules/adapters/definitions.d.ts +9 -0
  102. package/dist/src/modules/adapters/definitions.js +124 -0
  103. package/dist/src/modules/adapters/definitions.js.map +1 -0
  104. package/dist/src/modules/adapters/gemini.js +2 -2
  105. package/dist/src/modules/adapters/gemini.js.map +1 -1
  106. package/dist/src/modules/adapters/grok.js +1 -1
  107. package/dist/src/modules/adapters/grok.js.map +1 -1
  108. package/dist/src/modules/agents/definitions.js +26 -27
  109. package/dist/src/modules/agents/definitions.js.map +1 -1
  110. package/dist/src/shared/config.d.ts +3 -3
  111. package/dist/src/shared/logger.js +8 -5
  112. package/dist/src/shared/logger.js.map +1 -1
  113. package/dist/tests/adapter.test.d.ts +1 -0
  114. package/dist/tests/adapter.test.js +129 -0
  115. package/dist/tests/adapter.test.js.map +1 -0
  116. package/dist/tests/agents-definitions.test.d.ts +1 -0
  117. package/dist/tests/agents-definitions.test.js +54 -0
  118. package/dist/tests/agents-definitions.test.js.map +1 -0
  119. package/dist/tests/approve.test.d.ts +1 -0
  120. package/dist/tests/approve.test.js +88 -0
  121. package/dist/tests/approve.test.js.map +1 -0
  122. package/dist/tests/config.test.d.ts +1 -0
  123. package/dist/tests/config.test.js +58 -0
  124. package/dist/tests/config.test.js.map +1 -0
  125. package/dist/tests/container.runner.d.ts +1 -0
  126. package/dist/tests/container.runner.js +68 -0
  127. package/dist/tests/container.runner.js.map +1 -0
  128. package/dist/tests/container.test.d.ts +1 -0
  129. package/dist/tests/container.test.js +73 -0
  130. package/dist/tests/container.test.js.map +1 -0
  131. package/dist/tests/errors.test.d.ts +1 -0
  132. package/dist/tests/errors.test.js +64 -0
  133. package/dist/tests/errors.test.js.map +1 -0
  134. package/dist/tests/fs-utils.test.d.ts +1 -0
  135. package/dist/tests/fs-utils.test.js +101 -0
  136. package/dist/tests/fs-utils.test.js.map +1 -0
  137. package/dist/tests/logger.test.d.ts +1 -0
  138. package/dist/tests/logger.test.js +81 -0
  139. package/dist/tests/logger.test.js.map +1 -0
  140. package/dist/tests/memory-utils.test.d.ts +1 -0
  141. package/dist/tests/memory-utils.test.js +173 -0
  142. package/dist/tests/memory-utils.test.js.map +1 -0
  143. package/dist/tests/orchestrate.test.d.ts +1 -0
  144. package/dist/tests/orchestrate.test.js +131 -0
  145. package/dist/tests/orchestrate.test.js.map +1 -0
  146. package/dist/tests/skills-definitions.test.d.ts +1 -0
  147. package/dist/tests/skills-definitions.test.js +34 -0
  148. package/dist/tests/skills-definitions.test.js.map +1 -0
  149. package/dist/tests/status.test.d.ts +1 -0
  150. package/dist/tests/status.test.js +105 -0
  151. package/dist/tests/status.test.js.map +1 -0
  152. package/dist/tests/string.test.d.ts +1 -0
  153. package/dist/tests/string.test.js +89 -0
  154. package/dist/tests/string.test.js.map +1 -0
  155. package/dist/tests/time.test.d.ts +1 -0
  156. package/dist/tests/time.test.js +48 -0
  157. package/dist/tests/time.test.js.map +1 -0
  158. package/dist/tests/trace.test.d.ts +1 -0
  159. package/dist/tests/trace.test.js +61 -0
  160. package/dist/tests/trace.test.js.map +1 -0
  161. package/dist/vitest.config.js +1 -0
  162. package/dist/vitest.config.js.map +1 -1
  163. package/docs/getting-started.md +4 -0
  164. package/docs/user/corporate-governance.md +25 -0
  165. package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
  166. package/framework-mcp/dist/tools/definitions.js +118 -0
  167. package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +50 -0
  168. package/framework-mcp/dist/tools/file_system/replace_text.js +8 -4
  169. package/framework-mcp/dist/tools/file_system/write_file.js +3 -0
  170. package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
  171. package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
  172. package/framework-mcp/dist/tools/index.js +24 -0
  173. package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
  174. package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
  175. package/framework-mcp/dist/tools/messaging/send_message.js +1 -1
  176. package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
  177. package/framework-mcp/dist/tools/observability/get_health.js +20 -0
  178. package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
  179. package/framework-mcp/dist/tools/search/get_map.js +44 -0
  180. package/framework-mcp/dist/tools/search/grep_search.js +59 -0
  181. package/framework-mcp/dist/tools/search/list_dir.js +28 -0
  182. package/framework-mcp/dist/utils/compliance.js +29 -0
  183. package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
  184. package/framework-mcp/src/tools/definitions.ts +118 -0
  185. package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +70 -0
  186. package/framework-mcp/src/tools/file_system/replace_text.ts +10 -4
  187. package/framework-mcp/src/tools/file_system/write_file.ts +5 -0
  188. package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
  189. package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
  190. package/framework-mcp/src/tools/index.ts +24 -0
  191. package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
  192. package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
  193. package/framework-mcp/src/tools/messaging/send_message.ts +1 -1
  194. package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
  195. package/framework-mcp/src/tools/observability/get_health.ts +25 -0
  196. package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
  197. package/framework-mcp/src/tools/search/get_map.ts +50 -0
  198. package/framework-mcp/src/tools/search/grep_search.ts +66 -0
  199. package/framework-mcp/src/tools/search/list_dir.ts +34 -0
  200. package/framework-mcp/src/tools/types.ts +11 -1
  201. package/framework-mcp/src/utils/compliance.ts +37 -0
  202. package/framework-mcp/tests/tools/messaging/send_message.test.ts +5 -5
  203. package/package.json +2 -2
  204. package/src/cli/adapters/types.ts +2 -2
  205. package/src/cli/adapters.ts +45 -80
  206. package/src/cli/commands/check.ts +52 -6
  207. package/src/cli/commands/init.ts +193 -138
  208. package/src/cli/commands/orchestrate.ts +14 -8
  209. package/src/cli/commands/status.ts +3 -2
  210. package/src/cli/index.ts +4 -3
  211. package/src/cli/shims.ts +6 -6
  212. package/src/cli/utils/app-backend.ts +249 -0
  213. package/src/cli/utils/app-docs.ts +65 -0
  214. package/src/cli/utils/app-frontend.ts +257 -0
  215. package/src/cli/utils/app-inferrer.ts +53 -0
  216. package/src/cli/utils/app-types.ts +243 -0
  217. package/src/cli/utils/app.ts +5 -849
  218. package/src/cli/utils/memory.ts +8 -4
  219. package/src/modules/adapters/definitions.ts +125 -0
  220. package/src/modules/agents/definitions.ts +26 -27
  221. package/src/shared/logger.ts +8 -5
  222. package/templates/prompts/bug-fix-recipe.md +20 -0
  223. package/templates/prompts/new-feature-recipe.md +19 -0
  224. package/templates/prompts/refactoring-recipe.md +21 -0
  225. package/templates/standards/architecture-standards.md +23 -0
  226. package/templates/standards/crud-governance.md +21 -0
  227. package/templates/standards/frontend-standards.md +38 -0
  228. package/templates/standards/i18n-standards.md +17 -0
  229. package/templates/standards/logging-and-secrets.md +29 -0
  230. package/templates/standards/mobile-standards.md +24 -0
  231. package/templates/standards/quality-standards.md +31 -0
  232. package/templates/standards/security-standards.md +21 -0
  233. package/templates/standards/tailwind-standards.md +20 -0
  234. package/templates/standards/testing-standards.md +31 -0
  235. package/src/modules/adapters/antigravity-cli.ts +0 -25
  236. package/src/modules/adapters/claude.ts +0 -36
  237. package/src/modules/adapters/codex.ts +0 -22
  238. package/src/modules/adapters/cursor.ts +0 -22
  239. package/src/modules/adapters/gemini.ts +0 -27
  240. package/src/modules/adapters/grok.ts +0 -20
  241. package/templates/architecture/agents-manifest.md +0 -79
  242. package/templates/architecture/approval-flows.md +0 -61
  243. package/templates/architecture/enterprise-architecture.md +0 -69
  244. package/templates/architecture/standards/crud-governance.md +0 -46
  245. package/templates/architecture/standards/data-fetching-patterns.md +0 -13
  246. package/templates/architecture/standards/design-system.md +0 -31
  247. package/templates/architecture/standards/documentation-ownership.md +0 -21
  248. package/templates/architecture/standards/logging.md +0 -7
  249. package/templates/architecture/standards/mobile-standards.md +0 -48
  250. package/templates/architecture/standards/tech-stack.md +0 -9
  251. package/templates/backend/error-handling.md +0 -74
  252. package/templates/frontend/component-patterns.md +0 -91
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_tests.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/framework/run_tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAc;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAiB,IAAI,UAAU,CAAC;IAEzD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5F,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,MAAM,EAAE,EAAE,CAAC;SACjF,CAAC;IACN,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAA6C,CAAC;QAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE5C,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sCAAsC,MAAM,uBAAuB,MAAM,EAAE;iBACpF,CAAC;SACL,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -2,11 +2,23 @@ import { TOOLS } from "./definitions.js";
2
2
  import { handleReadFile } from "./file_system/read_file.js";
3
3
  import { handleWriteFile } from "./file_system/write_file.js";
4
4
  import { handleReplaceText } from "./file_system/replace_text.js";
5
+ import { handleBatchSurgicalEdit } from "./file_system/batch_surgical_edit.js";
5
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";
6
11
  import { handleGetFrameworkStatus } from "./framework/get_status.js";
7
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 { handleStartDashboard } from "./dashboard/start_dashboard.js";
8
18
  import { handleOrchestrateLoop } from "./framework/orchestrate.js";
9
19
  import { handleUpdateContractHash } from "./framework/update_contract_hash.js";
20
+ import { handleReadProjectMemory } from "./memory/read_memory.js";
21
+ import { handleGetMemoryInsights } from "./memory/get_insights.js";
10
22
  import { handleSendAgentMessage } from "./messaging/send_message.js";
11
23
  import { handleLogAgentAction } from "./messaging/log_action.js";
12
24
  import { handleAcquireLock, handleReleaseLock } from "./control_plane/locking.js";
@@ -14,11 +26,23 @@ import { handleRegisterAgent } from "./control_plane/registry.js";
14
26
  // Map of tool names to their handler functions
15
27
  export const toolHandlers = {
16
28
  read_file: handleReadFile,
29
+ list_dir: handleListDir,
30
+ grep_search: handleGrepSearch,
31
+ get_project_map: handleGetProjectMap,
32
+ get_project_gaps: handleGetProjectGaps,
17
33
  write_file: handleWriteFile,
18
34
  replace_text: handleReplaceText,
35
+ batch_surgical_edit: handleBatchSurgicalEdit,
19
36
  patch_file: handlePatchFile,
20
37
  get_framework_status: handleGetFrameworkStatus,
38
+ read_project_memory: handleReadProjectMemory,
39
+ get_memory_insights: handleGetMemoryInsights,
21
40
  update_project_memory: handleUpdateProjectMemory,
41
+ audit_dependencies: handleAuditDependencies,
42
+ run_tests: handleRunTests,
43
+ get_system_health: handleGetSystemHealth,
44
+ check_active_ports: handleCheckPorts,
45
+ start_dashboard: handleStartDashboard,
22
46
  orchestrate_loop: handleOrchestrateLoop,
23
47
  send_agent_message: handleSendAgentMessage,
24
48
  log_agent_action: handleLogAgentAction,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMlE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAgC;IACrD,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,eAAe;IAC3B,oBAAoB,EAAE,wBAAwB;IAC9C,qBAAqB,EAAE,yBAAyB;IAChD,gBAAgB,EAAE,qBAAqB;IACvC,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,oBAAoB;IACtC,oBAAoB,EAAE,wBAAwB;IAC9C,YAAY,EAAE,iBAAgC;IAC9C,YAAY,EAAE,iBAAgC;IAC9C,cAAc,EAAE,mBAAkC;CACrD,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMlE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAgC;IACrD,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,gBAAgB;IAC7B,eAAe,EAAE,mBAAmB;IACpC,gBAAgB,EAAE,oBAAoB;IACtC,UAAU,EAAE,eAAe;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,mBAAmB,EAAE,uBAAuB;IAC5C,UAAU,EAAE,eAAe;IAC3B,oBAAoB,EAAE,wBAAwB;IAC9C,mBAAmB,EAAE,uBAAuB;IAC5C,mBAAmB,EAAE,uBAAuB;IAC5C,qBAAqB,EAAE,yBAAyB;IAChD,kBAAkB,EAAE,uBAAuB;IAC3C,SAAS,EAAE,cAAc;IACzB,iBAAiB,EAAE,qBAAqB;IACxC,kBAAkB,EAAE,gBAAgB;IACpC,eAAe,EAAE,oBAAoB;IACrC,gBAAgB,EAAE,qBAAqB;IACvC,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,oBAAoB;IACtC,oBAAoB,EAAE,wBAAwB;IAC9C,YAAY,EAAE,iBAAgC;IAC9C,YAAY,EAAE,iBAAgC;IAC9C,cAAc,EAAE,mBAAkC;CACrD,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Extracts key insights from the project memory to minimize token usage.
4
+ * Returns only the active phase, trace, and the last 5 decisions/tasks.
5
+ */
6
+ export declare function handleGetMemoryInsights(projectRoot: string, _args: ToolArgs): ToolResult;
@@ -0,0 +1,35 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { resolveFrameworkDir } from "../../utils/security.js";
4
+ /**
5
+ * Extracts key insights from the project memory to minimize token usage.
6
+ * Returns only the active phase, trace, and the last 5 decisions/tasks.
7
+ */
8
+ export function handleGetMemoryInsights(projectRoot, _args) {
9
+ try {
10
+ const frameworkDir = resolveFrameworkDir(projectRoot);
11
+ const memoryPath = path.join(projectRoot, frameworkDir, "memory/PROJECT_MEMORY.md");
12
+ if (!fs.existsSync(memoryPath)) {
13
+ return { content: [{ type: "text", text: "New project: No history available." }] };
14
+ }
15
+ const content = fs.readFileSync(memoryPath, "utf8");
16
+ const lines = content.split("\n");
17
+ const activePhase = lines.find(l => l.includes("Active Phase:"))?.split(":")[1]?.trim() || "Unknown";
18
+ const activeTrace = lines.find(l => l.includes("Active Trace:"))?.split(":")[1]?.trim() || "None";
19
+ // Find the last 5 history items (heuristic)
20
+ const historyStartIndex = lines.findIndex(l => l.includes("## History"));
21
+ let recentHistory = "No history found.";
22
+ if (historyStartIndex !== -1) {
23
+ recentHistory = lines.slice(historyStartIndex + 1, historyStartIndex + 15)
24
+ .filter(l => l.trim().startsWith("-"))
25
+ .slice(-5)
26
+ .join("\n");
27
+ }
28
+ const insights = `🧠 **Memory Insights**\n- **Phase:** ${activePhase}\n- **Trace:** ${activeTrace}\n\n**Recent Actions:**\n${recentHistory}`;
29
+ return { content: [{ type: "text", text: insights }] };
30
+ }
31
+ catch (e) {
32
+ return { isError: true, content: [{ type: "text", text: `Failed to extract insights: ${String(e)}` }] };
33
+ }
34
+ }
35
+ //# sourceMappingURL=get_insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_insights.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/memory/get_insights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB,EAAE,KAAe;IACxE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;QAEpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACrG,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC;QAElG,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QACzE,IAAI,aAAa,GAAG,mBAAmB,CAAC;QACxC,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE,iBAAiB,GAAG,EAAE,CAAC;iBACrE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACrC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACT,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,wCAAwC,WAAW,kBAAkB,WAAW,4BAA4B,aAAa,EAAE,CAAC;QAE7I,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5G,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Reads the project's central memory (PROJECT_MEMORY.md).
4
+ * This is the "brain" of the project.
5
+ */
6
+ export declare function handleReadProjectMemory(projectRoot: string, _args: ToolArgs): ToolResult;
@@ -0,0 +1,29 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { resolveFrameworkDir } from "../../utils/security.js";
4
+ /**
5
+ * Reads the project's central memory (PROJECT_MEMORY.md).
6
+ * This is the "brain" of the project.
7
+ */
8
+ export function handleReadProjectMemory(projectRoot, _args) {
9
+ try {
10
+ const frameworkDir = resolveFrameworkDir(projectRoot);
11
+ const memoryPath = path.join(projectRoot, frameworkDir, "memory/PROJECT_MEMORY.md");
12
+ if (!fs.existsSync(memoryPath)) {
13
+ return {
14
+ content: [{ type: "text", text: "ℹ️ Project memory file not found. It might be a new project." }]
15
+ };
16
+ }
17
+ const content = fs.readFileSync(memoryPath, "utf8");
18
+ return {
19
+ content: [{ type: "text", text: content }]
20
+ };
21
+ }
22
+ catch (e) {
23
+ return {
24
+ isError: true,
25
+ content: [{ type: "text", text: `Failed to read project memory: ${String(e)}` }]
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=read_memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_memory.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/memory/read_memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB,EAAE,KAAe;IACxE,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;QAEpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC;aACpG,CAAC;QACN,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC7C,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACnF,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -8,7 +8,7 @@ export async function handleSendAgentMessage(projectRoot, args) {
8
8
  const messagesDir = path.join(projectRoot, frameworkDir, "messages");
9
9
  const agentName = to.replace("@", "");
10
10
  const messagePath = path.join(messagesDir, `${agentName}.json`);
11
- const lockPath = path.join(messagesDir, ".lock");
11
+ const lockPath = path.join(messagesDir, `${agentName}.lock`);
12
12
  // Hermes Lock Protocol: Retry 3 times with 500ms delay
13
13
  let retries = 3;
14
14
  let acquired = false;
@@ -1 +1 @@
1
- {"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAc;IAC5E,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAA2E,CAAC;IACvH,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,MAAM,CAAC;IAE7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEjD,uDAAuD;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;wBACpC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC5B,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACL,kCAAkC;gBACtC,CAAC;YACL,CAAC;YACD,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/F,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACV,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,GAA0C,CAAC;YACzD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wCAAwC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxI,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3H,CAAC;IAED,IAAI,CAAC;QACD,MAAM,eAAe,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5F,MAAM,OAAO,GAAG;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;YACJ,EAAE;YACF,QAAQ;YACR,OAAO;YACP,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,eAAe;YAC1C,MAAM,EAAE,SAAS;SACpB,CAAC;QAEF,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;YAAS,CAAC;QACP,IAAI,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Checks for active network ports and their status.
4
+ */
5
+ export declare function handleCheckPorts(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,27 @@
1
+ import { execSync } from "child_process";
2
+ /**
3
+ * Checks for active network ports and their status.
4
+ */
5
+ export function handleCheckPorts(projectRoot, args) {
6
+ const filter = args.filter || ""; // Optional filter (e.g., ":3000")
7
+ try {
8
+ // Using 'lsof -i -P -n' to list open files and network connections
9
+ // Note: may require permissions or behave differently on non-Unix systems
10
+ const command = process.platform === "win32"
11
+ ? `netstat -ano | findstr LISTENING ${filter ? `| findstr ${filter}` : ""}`
12
+ : `lsof -i -P -n | grep LISTEN ${filter ? `| grep ${filter}` : ""}`;
13
+ const output = execSync(command, { encoding: "utf8" });
14
+ return {
15
+ content: [{
16
+ type: "text",
17
+ text: `📡 **Active Listening Ports:**\n\n${output || "No active listening ports found matching filter."}`
18
+ }]
19
+ };
20
+ }
21
+ catch (e) {
22
+ return {
23
+ content: [{ type: "text", text: "ℹ️ No active ports found or command failed (this is normal if nothing is listening)." }]
24
+ };
25
+ }
26
+ }
27
+ //# sourceMappingURL=check_ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_ports.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/check_ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAc;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,IAAI,EAAE,CAAC,CAAC,kCAAkC;IAE9E,IAAI,CAAC;QACD,mEAAmE;QACnE,0EAA0E;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;YACxC,CAAC,CAAC,oCAAoC,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3E,CAAC,CAAC,+BAA+B,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAExE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvD,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qCAAqC,MAAM,IAAI,kDAAkD,EAAE;iBAC5G,CAAC;SACL,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sFAAsF,EAAE,CAAC;SAC5H,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Retrieves system health metrics including CPU load and memory usage.
4
+ */
5
+ export declare function handleGetSystemHealth(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,21 @@
1
+ import os from "os";
2
+ /**
3
+ * Retrieves system health metrics including CPU load and memory usage.
4
+ */
5
+ export function handleGetSystemHealth(projectRoot, args) {
6
+ const totalMem = os.totalmem();
7
+ const freeMem = os.freemem();
8
+ const usedMem = totalMem - freeMem;
9
+ const memUsagePercent = ((usedMem / totalMem) * 100).toFixed(2);
10
+ const cpus = os.cpus();
11
+ const loadAvg = os.loadavg(); // [1, 5, 15] minute averages
12
+ const healthReport = `🖥️ **System Health Report**
13
+ - **Memory:** ${memUsagePercent}% used (${(usedMem / 1024 / 1024 / 1024).toFixed(2)} GB / ${(totalMem / 1024 / 1024 / 1024).toFixed(2)} GB)
14
+ - **CPU Load (1m, 5m, 15m):** ${loadAvg.map(l => l.toFixed(2)).join(", ")}
15
+ - **Platform:** ${os.platform()} (${os.release()})
16
+ - **Uptime:** ${(os.uptime() / 3600).toFixed(2)} hours`;
17
+ return {
18
+ content: [{ type: "text", text: healthReport }]
19
+ };
20
+ }
21
+ //# sourceMappingURL=get_health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_health.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/get_health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB,EAAE,IAAc;IACrE,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,6BAA6B;IAE3D,MAAM,YAAY,GAAG;gBACT,eAAe,WAAW,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gCACtG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;kBACvD,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE;gBAChC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEpD,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;KAClD,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Scans the codebase for TODOs, FIXMEs, and empty function bodies.
4
+ * Helps identify what's left and where the agent might have skipped logic.
5
+ */
6
+ export declare function handleGetProjectGaps(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,49 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { safePath } from "../../utils/security.js";
4
+ /**
5
+ * Scans the codebase for TODOs, FIXMEs, and empty function bodies.
6
+ * Helps identify what's left and where the agent might have skipped logic.
7
+ */
8
+ export function handleGetProjectGaps(projectRoot, args) {
9
+ const srcDir = safePath(projectRoot, args.path || "src");
10
+ const results = [];
11
+ const walk = (dir) => {
12
+ if (!fs.existsSync(dir))
13
+ return;
14
+ const files = fs.readdirSync(dir);
15
+ for (const file of files) {
16
+ const fullPath = path.join(dir, file);
17
+ const relativePath = path.relative(projectRoot, fullPath);
18
+ if (fs.statSync(fullPath).isDirectory()) {
19
+ if (file !== "node_modules" && file !== "dist" && !file.startsWith(".")) {
20
+ walk(fullPath);
21
+ }
22
+ }
23
+ else if (file.endsWith(".ts") || file.endsWith(".tsx")) {
24
+ const content = fs.readFileSync(fullPath, "utf8");
25
+ const lines = content.split("\n");
26
+ lines.forEach((line, index) => {
27
+ // 1. Scan for markers
28
+ if (line.includes("TODO") || line.includes("FIXME") || line.includes("!!!")) {
29
+ results.push(`[${relativePath}:${index + 1}] Marker found: ${line.trim()}`);
30
+ }
31
+ // 2. Scan for empty function placeholders (heuristic)
32
+ if (line.includes("throw new Error(\"Not implemented") || line.includes("// ... rest of code")) {
33
+ results.push(`[${relativePath}:${index + 1}] Gap found: ${line.trim()}`);
34
+ }
35
+ });
36
+ }
37
+ }
38
+ };
39
+ walk(srcDir);
40
+ return {
41
+ content: [{
42
+ type: "text",
43
+ text: results.length > 0
44
+ ? `Found ${results.length} gaps/todos:\n\n${results.join("\n")}`
45
+ : "✅ No major gaps or TODOs found in the scanned directory."
46
+ }]
47
+ };
48
+ }
49
+ //# sourceMappingURL=get_gaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_gaps.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/get_gaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,IAAc;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,IAAI,KAAK,CAAC,CAAC;IACnE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAChC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAE1D,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC1B,sBAAsB;oBACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,IAAI,KAAK,GAAG,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAChF,CAAC;oBAED,sDAAsD;oBACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;wBAC7F,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,IAAI,KAAK,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC7E,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,CAAC;IAEb,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAChE,CAAC,CAAC,0DAA0D;aACnE,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Generates a tree-view map of the project structure.
4
+ * Helps agents visualize the entire project layout quickly.
5
+ */
6
+ export declare function handleGetProjectMap(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,45 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ /**
4
+ * Generates a tree-view map of the project structure.
5
+ * Helps agents visualize the entire project layout quickly.
6
+ */
7
+ export function handleGetProjectMap(projectRoot, args) {
8
+ const maxDepth = Number(args.maxDepth) || 3;
9
+ const includeFiles = args.includeFiles !== false;
10
+ const buildTree = (dir, depth) => {
11
+ if (depth > maxDepth)
12
+ return [];
13
+ const results = [];
14
+ const files = fs.readdirSync(dir);
15
+ files.forEach(file => {
16
+ if (file === "node_modules" || file === ".git" || file === "dist" || file.startsWith("."))
17
+ return;
18
+ const fullPath = path.join(dir, file);
19
+ const relativePath = path.relative(projectRoot, fullPath);
20
+ const stat = fs.statSync(fullPath);
21
+ const indent = " ".repeat(depth);
22
+ if (stat.isDirectory()) {
23
+ results.push(`${indent}📁 ${file}/`);
24
+ results.push(...buildTree(fullPath, depth + 1));
25
+ }
26
+ else if (includeFiles) {
27
+ results.push(`${indent}📄 ${file}`);
28
+ }
29
+ });
30
+ return results;
31
+ };
32
+ try {
33
+ const tree = buildTree(projectRoot, 0);
34
+ return {
35
+ content: [{
36
+ type: "text",
37
+ text: `🗺️ **Project Map (Depth: ${maxDepth})**\n\n${tree.join("\n")}`
38
+ }]
39
+ };
40
+ }
41
+ catch (e) {
42
+ return { isError: true, content: [{ type: "text", text: `Failed to map project: ${String(e)}` }] };
43
+ }
44
+ }
45
+ //# sourceMappingURL=get_map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_map.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/get_map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,IAAc;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC;IAEjD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa,EAAY,EAAE;QACvD,IAAI,KAAK,GAAG,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAElC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YAElG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;IAEF,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6BAA6B,QAAQ,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACzE,CAAC;SACL,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACvG,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Searches for a regex pattern within files in the project.
4
+ */
5
+ export declare function handleGrepSearch(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,60 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ /**
4
+ * Searches for a regex pattern within files in the project.
5
+ */
6
+ export function handleGrepSearch(projectRoot, args) {
7
+ const pattern = args.pattern;
8
+ const includePattern = args.includePattern || ""; // e.g., ".ts"
9
+ const excludePattern = args.excludePattern || "node_modules";
10
+ if (!pattern) {
11
+ throw new Error("Search pattern is required.");
12
+ }
13
+ const results = [];
14
+ const regex = new RegExp(pattern, "g");
15
+ const walk = (dir) => {
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
+ // Skip excluded directories/files
21
+ if (relativePath.includes(excludePattern))
22
+ continue;
23
+ try {
24
+ const stat = fs.statSync(fullPath);
25
+ if (stat.isDirectory()) {
26
+ walk(fullPath);
27
+ }
28
+ else if (stat.isFile()) {
29
+ // Check include pattern
30
+ if (includePattern && !file.endsWith(includePattern))
31
+ continue;
32
+ const content = fs.readFileSync(fullPath, "utf8");
33
+ const lines = content.split("\n");
34
+ lines.forEach((line, index) => {
35
+ if (regex.test(line)) {
36
+ results.push(`${relativePath}:${index + 1}: ${line.trim()}`);
37
+ // Reset regex lastIndex because of 'g' flag
38
+ regex.lastIndex = 0;
39
+ }
40
+ });
41
+ }
42
+ }
43
+ catch {
44
+ // Ignore read errors
45
+ }
46
+ if (results.length > 100)
47
+ break; // Limit results
48
+ }
49
+ };
50
+ walk(projectRoot);
51
+ return {
52
+ content: [{
53
+ type: "text",
54
+ text: results.length > 0
55
+ ? `Found ${results.length} matches:\n\n${results.join("\n")}`
56
+ : "No matches found."
57
+ }]
58
+ };
59
+ }
60
+ //# sourceMappingURL=grep_search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep_search.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/grep_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAc;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAwB,IAAI,EAAE,CAAC,CAAC,cAAc;IAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,cAAwB,IAAI,cAAc,CAAC;IAEvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEvC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAE1D,kCAAkC;YAClC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAAE,SAAS;YAEpD,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACrB,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnB,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvB,wBAAwB;oBACxB,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;wBAAE,SAAS;oBAE/D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;wBAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BACnB,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BAC7D,4CAA4C;4BAC5C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;wBACxB,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,qBAAqB;YACzB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,CAAC,gBAAgB;QACrD,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,CAAC;IAElB,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC7D,CAAC,CAAC,mBAAmB;aAC5B,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Lists the contents of a directory.
4
+ */
5
+ export declare function handleListDir(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,29 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { safePath } from "../../utils/security.js";
4
+ /**
5
+ * Lists the contents of a directory.
6
+ */
7
+ export function handleListDir(projectRoot, args) {
8
+ const dirPath = safePath(projectRoot, args.path || ".");
9
+ if (!fs.existsSync(dirPath)) {
10
+ throw new Error(`Directory not found: ${args.path}`);
11
+ }
12
+ const stats = fs.statSync(dirPath);
13
+ if (!stats.isDirectory()) {
14
+ throw new Error(`Path is not a directory: ${args.path}`);
15
+ }
16
+ const files = fs.readdirSync(dirPath);
17
+ const results = files.map(file => {
18
+ const fullPath = path.join(dirPath, file);
19
+ const isDir = fs.statSync(fullPath).isDirectory();
20
+ return `${isDir ? "[DIR] " : " "}${file}`;
21
+ });
22
+ return {
23
+ content: [{
24
+ type: "text",
25
+ text: `Directory listing for ${args.path || "."}:\n\n${results.join("\n")}`
26
+ }]
27
+ };
28
+ }
29
+ //# sourceMappingURL=list_dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_dir.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/list_dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,IAAc;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,IAAI,GAAG,CAAC,CAAC;IAElE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC9E,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -3,11 +3,7 @@ export interface ToolDefinition {
3
3
  description: string;
4
4
  inputSchema: {
5
5
  type: "object";
6
- properties: Record<string, {
7
- type: string;
8
- description?: string;
9
- enum?: string[];
10
- }>;
6
+ properties: Record<string, any>;
11
7
  required?: string[];
12
8
  };
13
9
  }
@@ -38,6 +34,15 @@ export interface ToolArgs {
38
34
  timeout?: number;
39
35
  from?: string;
40
36
  priority?: "HIGH" | "NORMAL" | "LOW";
37
+ port?: number;
38
+ pattern?: string;
39
+ includePattern?: string;
40
+ excludePattern?: string;
41
+ maxDepth?: number;
42
+ includeFiles?: boolean;
43
+ edits?: any[];
44
+ command?: string;
45
+ filter?: string;
41
46
  }
42
47
  export interface ToolResult {
43
48
  isError?: boolean;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Enterprise Compliance Guardrail
3
+ * Checks content against corporate standards before allowing file mutations.
4
+ */
5
+ export declare function verifyCorporateCompliance(content: string, filePath: string): void;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Enterprise Compliance Guardrail
3
+ * Checks content against corporate standards before allowing file mutations.
4
+ */
5
+ export function verifyCorporateCompliance(content, filePath) {
6
+ // 1. Zero Console Policy
7
+ if (content.includes("console.log(") || content.includes("console.warn(") || content.includes("console.error(")) {
8
+ if (!filePath.includes("logger.ts") && !filePath.includes("check.ts") && !filePath.includes("cli.ts")) {
9
+ throw new Error("❌ Corporate Compliance Breach: 'console.log/warn/error' usage is forbidden. " +
10
+ "Use the 'logger' system from '@/shared/logger' instead.");
11
+ }
12
+ }
13
+ // 2. No Explicit Any Policy
14
+ const anyRegex = /[:<]\s*any\b|\bas\s+any\b/g;
15
+ if (anyRegex.test(content)) {
16
+ if (!filePath.includes("definitions.ts") && !filePath.includes("types.ts")) {
17
+ throw new Error("❌ Corporate Compliance Breach: 'any' type is forbidden. " +
18
+ "Use 'unknown', 'generics', or proper interfaces for type safety.");
19
+ }
20
+ }
21
+ // 3. Hardcoded Secrets Guard (Simple heuristic)
22
+ const secretKeywords = [/API_KEY\s*=\s*['"][^'"]+['"]/i, /SECRET\s*=\s*['"][^'"]+['"]/i, /PASSWORD\s*=\s*['"][^'"]+['"]/i];
23
+ for (const regex of secretKeywords) {
24
+ if (regex.test(content) && !filePath.endsWith(".env.example")) {
25
+ throw new Error("❌ Corporate Compliance Breach: Hardcoded secrets detected. " +
26
+ "All sensitive data must be managed via '.env' files.");
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=compliance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../../framework-mcp/src/utils/compliance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,QAAgB;IACvE,yBAAyB;IACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9G,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpG,MAAM,IAAI,KAAK,CACX,8EAA8E;gBAC9E,yDAAyD,CAC5D,CAAC;QACN,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,4BAA4B,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CACX,0DAA0D;gBAC1D,kEAAkE,CACrE,CAAC;QACN,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,MAAM,cAAc,GAAG,CAAC,+BAA+B,EAAE,8BAA8B,EAAE,gCAAgC,CAAC,CAAC;IAC3H,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACX,6DAA6D;gBAC7D,sDAAsD,CACzD,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -4,7 +4,7 @@ import path from "path";
4
4
  import { handleSendAgentMessage } from "../../../src/tools/messaging/send_message.js";
5
5
  const TEST_DIR = path.resolve(__dirname, "../../_temp_messaging_tests");
6
6
  const MESSAGES_DIR = path.join(TEST_DIR, ".gemini/messages");
7
- const LOCK_FILE = path.join(MESSAGES_DIR, ".lock");
7
+ const BACKEND_LOCK_FILE = path.join(MESSAGES_DIR, "backend.lock");
8
8
  beforeEach(() => {
9
9
  fs.mkdirSync(TEST_DIR, { recursive: true });
10
10
  // Write a dummy package.json to test directory to lock frameworkDir as .gemini
@@ -47,7 +47,7 @@ describe("Hermes Lock Protocol & Message sending", () => {
47
47
  it("should retry and fail to send message if lock is kept busy", async () => {
48
48
  // Prepare a busy lock file
49
49
  fs.mkdirSync(MESSAGES_DIR, { recursive: true });
50
- fs.writeFileSync(LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
50
+ fs.writeFileSync(BACKEND_LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
51
51
  const args = {
52
52
  to: "@backend",
53
53
  from: "@manager",
@@ -66,9 +66,9 @@ describe("Hermes Lock Protocol & Message sending", () => {
66
66
  it("should bypass and acquire lock if existing lock is stale (older than 5s)", async () => {
67
67
  fs.mkdirSync(MESSAGES_DIR, { recursive: true });
68
68
  // Set lock file mtime to 10 seconds ago
69
- fs.writeFileSync(LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
69
+ fs.writeFileSync(BACKEND_LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
70
70
  const tenSecondsAgo = new Date(Date.now() - 10000);
71
- fs.utimesSync(LOCK_FILE, tenSecondsAgo, tenSecondsAgo);
71
+ fs.utimesSync(BACKEND_LOCK_FILE, tenSecondsAgo, tenSecondsAgo);
72
72
  const args = {
73
73
  to: "@backend",
74
74
  from: "@manager",
@@ -78,7 +78,7 @@ describe("Hermes Lock Protocol & Message sending", () => {
78
78
  };
79
79
  const result = await handleSendAgentMessage(TEST_DIR, args);
80
80
  expect(result.content[0].text).toContain("✅ Message sent to @backend");
81
- expect(fs.existsSync(LOCK_FILE)).toBe(false); // Lock should have been unlinked in finally
81
+ expect(fs.existsSync(BACKEND_LOCK_FILE)).toBe(false); // Lock should have been unlinked in finally
82
82
  });
83
83
  it("should safely resolve concurrent messages and execute them in sequence", async () => {
84
84
  const send1Promise = handleSendAgentMessage(TEST_DIR, {