agent-enderun 1.1.6 → 1.1.8

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 (254) 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 +20 -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 +44 -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 +3 -3
  58. package/dist/src/cli/adapters.js +53 -79
  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 +186 -172
  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 +128 -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/eslint.config.js +25 -3
  166. package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
  167. package/framework-mcp/dist/tools/definitions.js +118 -0
  168. package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +50 -0
  169. package/framework-mcp/dist/tools/file_system/replace_text.js +8 -4
  170. package/framework-mcp/dist/tools/file_system/write_file.js +3 -0
  171. package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
  172. package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
  173. package/framework-mcp/dist/tools/index.js +24 -0
  174. package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
  175. package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
  176. package/framework-mcp/dist/tools/messaging/send_message.js +1 -1
  177. package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
  178. package/framework-mcp/dist/tools/observability/get_health.js +19 -0
  179. package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
  180. package/framework-mcp/dist/tools/search/get_map.js +43 -0
  181. package/framework-mcp/dist/tools/search/grep_search.js +59 -0
  182. package/framework-mcp/dist/tools/search/list_dir.js +28 -0
  183. package/framework-mcp/dist/utils/compliance.js +29 -0
  184. package/framework-mcp/package.json +2 -2
  185. package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
  186. package/framework-mcp/src/tools/definitions.ts +118 -0
  187. package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +70 -0
  188. package/framework-mcp/src/tools/file_system/replace_text.ts +10 -4
  189. package/framework-mcp/src/tools/file_system/write_file.ts +5 -0
  190. package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
  191. package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
  192. package/framework-mcp/src/tools/index.ts +24 -0
  193. package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
  194. package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
  195. package/framework-mcp/src/tools/messaging/send_message.ts +1 -1
  196. package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
  197. package/framework-mcp/src/tools/observability/get_health.ts +24 -0
  198. package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
  199. package/framework-mcp/src/tools/search/get_map.ts +48 -0
  200. package/framework-mcp/src/tools/search/grep_search.ts +65 -0
  201. package/framework-mcp/src/tools/search/list_dir.ts +34 -0
  202. package/framework-mcp/src/tools/types.ts +11 -1
  203. package/framework-mcp/src/utils/compliance.ts +37 -0
  204. package/framework-mcp/tests/tools/messaging/send_message.test.ts +5 -5
  205. package/package.json +3 -3
  206. package/src/cli/adapters/types.ts +2 -2
  207. package/src/cli/adapters.ts +57 -86
  208. package/src/cli/commands/check.ts +52 -6
  209. package/src/cli/commands/init.ts +202 -193
  210. package/src/cli/commands/orchestrate.ts +14 -8
  211. package/src/cli/commands/status.ts +3 -2
  212. package/src/cli/index.ts +4 -3
  213. package/src/cli/shims.ts +6 -6
  214. package/src/cli/utils/app-backend.ts +249 -0
  215. package/src/cli/utils/app-docs.ts +65 -0
  216. package/src/cli/utils/app-frontend.ts +257 -0
  217. package/src/cli/utils/app-inferrer.ts +53 -0
  218. package/src/cli/utils/app-types.ts +243 -0
  219. package/src/cli/utils/app.ts +5 -849
  220. package/src/cli/utils/memory.ts +8 -4
  221. package/src/modules/adapters/definitions.ts +125 -0
  222. package/src/modules/agents/definitions.ts +26 -27
  223. package/src/shared/logger.ts +8 -5
  224. package/templates/prompts/bug-fix-recipe.md +20 -0
  225. package/templates/prompts/new-feature-recipe.md +19 -0
  226. package/templates/prompts/refactoring-recipe.md +21 -0
  227. package/templates/standards/architecture-standards.md +23 -0
  228. package/templates/standards/crud-governance.md +21 -0
  229. package/templates/standards/frontend-standards.md +38 -0
  230. package/templates/standards/i18n-standards.md +17 -0
  231. package/templates/standards/logging-and-secrets.md +29 -0
  232. package/templates/standards/mobile-standards.md +24 -0
  233. package/templates/standards/quality-standards.md +31 -0
  234. package/templates/standards/security-standards.md +21 -0
  235. package/templates/standards/tailwind-standards.md +20 -0
  236. package/templates/standards/testing-standards.md +31 -0
  237. package/src/modules/adapters/antigravity-cli.ts +0 -25
  238. package/src/modules/adapters/claude.ts +0 -36
  239. package/src/modules/adapters/codex.ts +0 -22
  240. package/src/modules/adapters/cursor.ts +0 -22
  241. package/src/modules/adapters/gemini.ts +0 -27
  242. package/src/modules/adapters/grok.ts +0 -20
  243. package/templates/architecture/agents-manifest.md +0 -79
  244. package/templates/architecture/approval-flows.md +0 -61
  245. package/templates/architecture/enterprise-architecture.md +0 -69
  246. package/templates/architecture/standards/crud-governance.md +0 -46
  247. package/templates/architecture/standards/data-fetching-patterns.md +0 -13
  248. package/templates/architecture/standards/design-system.md +0 -31
  249. package/templates/architecture/standards/documentation-ownership.md +0 -21
  250. package/templates/architecture/standards/logging.md +0 -7
  251. package/templates/architecture/standards/mobile-standards.md +0 -48
  252. package/templates/architecture/standards/tech-stack.md +0 -9
  253. package/templates/backend/error-handling.md +0 -74
  254. package/templates/frontend/component-patterns.md +0 -91
package/ENDERUN.md CHANGED
@@ -1,15 +1,18 @@
1
1
  # Agent Enderun Enterprise v1 (v1.1.6)
2
2
  # Place in project root. This file is the single source of truth for Base Project AI Extensions.
3
3
 
4
- ## 🎖️ AGENT CHECKLIST (MANDATORY BEFORE RESPONSE)
5
- > Check this list at the end of every response:
6
- - [ ] **Surgical Quality:** Did you use the `replace_text` tool for targeted changes? For files >100 lines, focus on changed blocks. (Quality over Volume)
7
- - [ ] **Autonomous Growth:** Use `create_app` for generating new modules from specs.
8
- - [ ] **Contract First:** Are the app's types and apps/backend/contract.version.json up to date?
9
- - [ ] **Audit Log:** Did you log this action in `.gemini/logs/[agent].json`?
10
- - [ ] **CLI Orchestration:** Does the action comply with `gemini cli` rules?
11
- - [ ] **Complete Context:** Ensure all changed logic is fully written. Placeholder `...` is only for *unchanged* surrounding code.
12
- - [ ] **ESLint Compliance:** Did you run `npm run lint` (or `agent-enderun check:lint`)? Zero errors required; follow `.gemini/knowledge/eslint-standards.md`.
4
+ ## 🎖️ MUTLAK NİZAM VE SIFIR SAPMA POLİTİKASI (MANDATORY)
5
+ > Bu kurallardan en ufak bir sapma, "Nizam-ı Enderun"un ihlali sayılır ve geliştirme süreci anında DURDURULUR.
6
+ - [ ] **Surgical Precision:** `replace_text` veya `patch_file` dışında dosya düzenleme yapılamaz. Dosyanın tamamını yeniden yazmak yasaktır.
7
+ - [ ] **Zero Type Hole:** `any` tipi kullanımı 'hıyanet' seviyesinde bir disiplin suçudur.
8
+ - [ ] **Zero Console:** `console.log` kullanımı yasaktır; sadece `EnterpriseLogger` kullanılır.
9
+ - [ ] **Phase Discipline:** Faz atlanamaz. Başarı kriterleri sağlanmadan bir sonraki adıma geçilemez.
10
+ - [ ] **Contract First:** Kontrat imzası (`contract_hash`) bozulmuşsa kod yazılamaz.
11
+
12
+ ## 🏛️ DISCIPLINE HIERARCHY
13
+ 1. **ENDERUN.md:** Yüce Kanun (The Supreme Law).
14
+ 2. **Standard Operating Procedures (SOPs):** `.gemini/knowledge/*.md` altındaki tüm kurallar.
15
+ 3. **Manager Directives:** @manager'ın verdiği görevler ve onaylar.
13
16
 
14
17
  ---
15
18
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🏛️ Agent Enderun — Enterprise AI Governance & Autonomous Orchestration Framework
2
2
 
3
- > **Stable Release:** v1.1.6 (Enterprise Orchestration Ready) — Build Compile: Clean | Type-Safety: 100% Verified | AL Compliance: 12/12 Agents
3
+ > **Stable Release:** v1.1.8 (Enterprise Orchestration Ready) — Build Compile: Clean | Type-Safety: 100% Verified | AL Compliance: 13/13 Agents
4
4
 
5
5
  > **Author:** Yusuf BEKAR
6
6
  > **Trace ID:** `01HGT8J5E2N0W0W0W0W0W0W0W5`
@@ -31,6 +31,10 @@ Yapay zeka kodlama yardımcıları (Claude Code, Gemini CLI, Grok Build vb.) gel
31
31
 
32
32
  ### 📦 Güncel Sürüm / Current Release
33
33
 
34
+ **v1.1.7** — Modülerleşme & Test Kararlı Sürümü.
35
+ * **TR:** 850+ satırlık devasa `app.ts` dosyası 5 ayrı alt modüle bölünerek modülerleştirildi. `ServiceContainer` ve `Hermes` protokolü için kapsamlı birim testleri yazıldı. Ek olarak, ajanlar için **Mobil-First akıcı responsive (Grid/Flex, dvh/dvw, 44px dokunmatik hedef, yazı tipi ölçekleme koruması)** standartları tanımlandı ve `antigravity-cli` adaptörü dizin çelişkisi çözüldü.
36
+ * **EN:** Refactored `app.ts` into 5 sub-modules. Added unit tests for `ServiceContainer` and `Hermes` message loop. Implemented strict **Mobile-First fluid responsive design standards (Grid/Flex, dvh/dvw, 44dp touch targets, font scaling safeguards)** for agents and consolidated the `antigravity-cli` adapter directory structure.
37
+
34
38
  **v1.1.6** — Enterprise 1.0 kararlı sürüm (@-mentions, NL Routing, Hermes Lock Protocol, CWD/Scaffold fix, Token Tracker).
35
39
  * **TR:** Kilitlerin 10s sonrasında otomatik çözülmesi (Stale Lock breaking), opsiyonel Panda CSS yapılandırması ile esnek sağlık denetimi, `config.json` içinde dinamik sürüm yönetimi ve Hermes mesaj durumunun güncellenerek sonsuz döngünün önlenmesi sağlandı.
36
40
  * **EN:** Implemented stale lock breaking after 10s, optional Panda CSS configuration for flexible health checks, dynamic config versioning from package metadata, and message status updates to prevent infinite loops in the Hermes messaging broker.
@@ -47,13 +51,14 @@ Agent Enderun, sektörün öncüsü olan yapay zeka ekosistemlerini bir araya ge
47
51
 
48
52
  ---
49
53
 
50
- ### 🪖 Konsolide Edilmiş 12 Ajanlık Ordu Yapısı
54
+ ### 🪖 Konsolide Edilmiş 13 Ajanlık Ordu Yapısı
51
55
 
52
- Tüm operasyonlar, uzmanlık alanlarına göre ayrılmış ve Hermes protokolüyle birbirine bağlanmış 12 aktif ajan tarafından yönetilir:
56
+ Tüm operasyonlar, uzmanlık alanlarına göre ayrılmış ve Hermes protokolüyle birbirine bağlanmış 13 aktif ajan tarafından yönetilir:
53
57
 
54
58
  | Ajan | Uzmanlık Rolü | Temel Sorumluluğu |
55
59
  | :--- | :--- | :--- |
56
60
  | **`@manager`** | Orchestration & Governance | Görev dağılımı (DAG), hafıza yönetimi (`PROJECT_MEMORY.md`), anayasa koruyuculuğu. |
61
+ | **`@architect`** | System Design & Architect | Çekirdek mimari, tip kontratları ve kilit yönetimi tasarımı. |
57
62
  | **`@quality`** | Automated Testing & Quality | AST zafiyet taramaları, anayasal uyum denetimi, kod inceleme checklistleri, test standartları kapısı. |
58
63
  | **`@database`** | Database Migrations & Tuning | Veritabanı şemaları, migration kuralları, index optimizasyonları ve veri tohumlama (seeding). |
59
64
  | **`@backend`** | Domain Logic & Databases | API tasarımı, branded types, katmanlı mimari (Route -> Controller -> Service -> Repository). |
@@ -205,13 +210,14 @@ Agent Enderun coordinates industry-leading AI environments by assigning each a s
205
210
 
206
211
  ---
207
212
 
208
- ### 🪖 The Consolidated 12-Agent Army
213
+ ### 🪖 The Consolidated 13-Agent Army
209
214
 
210
- All workspace operations are divided among 12 specialized expert agents connected via the Hermes protocol:
215
+ All workspace operations are divided among 13 specialized expert agents connected via the Hermes protocol:
211
216
 
212
217
  | Agent | Specialization Role | Core Responsibility |
213
218
  | :--- | :--- | :--- |
214
219
  | **`@manager`** | Orchestration & Governance | Task dependency graphs (DAG), memory pruning (`PROJECT_MEMORY.md`), constitution compliance. |
220
+ | **`@architect`** | System Design & Architect | Core architecture, type contracts, and governance lock design. |
215
221
  | **`@quality`** | Automated Testing & Quality | AST vulnerability scanning, constitutional audits, code review checklists, test standard gates. |
216
222
  | **`@database`** | Database Migrations & Tuning | Database schemas, migration workflows, query optimization, and contract-aware seeding. |
217
223
  | **`@backend`** | Domain Logic & Databases | API route design, branded types, layered architecture (Route -> Controller -> Service -> Repository). |
@@ -298,30 +304,7 @@ Execute commands via `agent-enderun` (or `npx agent-enderun`):
298
304
  * **`create-app [idea]`**: Autonomously generate a full-stack monorepo project starter based on natural language inputs.
299
305
  * **`approve [traceId]`**: Human-in-the-Loop command to sign off and approve high-risk/administrative tasks requested by agents.
300
306
 
301
- ---
302
-
303
- ### 📦 Local Package Testing & Development
304
-
305
- To compile and link the package locally for development:
306
- ```bash
307
- # Install package dependencies
308
- npm install
309
-
310
- # Compile the Model Context Protocol (MCP) server and build assets
311
- npm run enderun:build
312
-
313
- # Globally link package on your system
314
- npm link
315
-
316
- # Create a test folder and mount package
317
- mkdir enderun-test && cd enderun-test
318
- npm init -y
319
- npm link agent-enderun
320
-
321
- # Bootstrap scaffolding
322
- npx agent-enderun init gemini --unified
323
- ```
324
307
 
325
308
  ---
326
309
 
327
- Developed with absolute discipline | Developer **Yusuf BEKAR** | Framework Version **v1.1.6 (Final Clean)** — Low-usage items arranged as reference-only. Bloat removed. Corporate-ready.
310
+ Developed with absolute discipline | Developer **Yusuf BEKAR** | Framework Version **v1.1.7 (Final Clean)** — Low-usage items arranged as reference-only. Bloat removed. Corporate-ready.
@@ -0,0 +1,77 @@
1
+ import { execSync } from "child_process";
2
+ import fs from "fs";
3
+ import path from "path";
4
+
5
+ const adapters = ["gemini", "claude", "grok", "cursor", "codex", "antigravity-cli"];
6
+ const projectRoot = process.cwd();
7
+ const testBase = path.join(projectRoot, "tests/multi-adapter-test");
8
+ const cliBin = path.join(projectRoot, "bin/cli.js");
9
+
10
+ console.log("🚀 Starting Bulk Adapter Installation Test...");
11
+
12
+ if (!fs.existsSync(testBase)) fs.mkdirSync(testBase, { recursive: true });
13
+
14
+ for (const adapter of adapters) {
15
+ console.log(`\n🧪 Testing Adapter: ${adapter}`);
16
+ const targetDir = path.join(testBase, adapter);
17
+ if (fs.existsSync(targetDir)) fs.rmSync(targetDir, { recursive: true, force: true });
18
+ fs.mkdirSync(targetDir, { recursive: true });
19
+
20
+ // Mock package.json
21
+ fs.writeFileSync(path.join(targetDir, "package.json"), JSON.stringify({ name: `test-${adapter}`, version: "1.0.0", type: "module" }));
22
+
23
+ // Mock .git to skip git init
24
+ fs.mkdirSync(path.join(targetDir, ".git"), { recursive: true });
25
+
26
+ try {
27
+ // Run init with --yes and NO --unified to test hybrid structure
28
+ execSync(`node "${cliBin}" init ${adapter} --yes`, {
29
+ cwd: targetDir,
30
+ stdio: "inherit",
31
+ env: { ...process.env, ENDERUN_SKIP_INSTALL: "1" }
32
+ });
33
+
34
+ console.log(`✅ ${adapter} initialized.`);
35
+
36
+ // 1. Verify Central Brain (.enderun)
37
+ const corePath = path.join(targetDir, ".enderun");
38
+ const knowledgePath = path.join(corePath, "knowledge");
39
+ const constitutionPath = path.join(corePath, "ENDERUN.md");
40
+
41
+ if (fs.existsSync(knowledgePath) && fs.existsSync(constitutionPath)) {
42
+ console.log(" - Central Brain (.enderun): OK");
43
+ } else {
44
+ console.log(` ❌ ERROR: Central Brain missing in ${adapter}`);
45
+ }
46
+
47
+ // 2. Verify AI Tool Specific (Body)
48
+ const adapterMap = {
49
+ gemini: ".gemini/agents",
50
+ claude: ".claude/agents",
51
+ grok: ".grok",
52
+ cursor: ".cursor/rules",
53
+ codex: ".agents",
54
+ "antigravity-cli": ".antigravity/agents"
55
+ };
56
+ const aiPath = path.join(targetDir, adapterMap[adapter]);
57
+ if (fs.existsSync(aiPath)) {
58
+ console.log(` - AI Tool Integration (${adapterMap[adapter]}): OK`);
59
+ } else {
60
+ console.log(` ❌ ERROR: AI Integration missing for ${adapter} (Path: ${aiPath})`);
61
+ }
62
+
63
+ // 3. Verify Shim in Root
64
+ const shimFiles = ["GEMINI.md", "CLAUDE.md", "GROK.md", "CURSOR.md", "copilot-instructions.md", "AGENTS.md"];
65
+ const foundShim = shimFiles.find(f => fs.existsSync(path.join(targetDir, f)));
66
+ if (foundShim) {
67
+ console.log(` - Platform Shim: OK (${foundShim})`);
68
+ } else {
69
+ console.log(" ❌ ERROR: Platform shim missing in root.");
70
+ }
71
+
72
+ } catch (e) {
73
+ console.error(` ❌ ERROR: Init failed for ${adapter}:`, e.message);
74
+ }
75
+ }
76
+
77
+ console.log("\n✨ Bulk Test Completed!");
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Starts the Enderun Web Dashboard server.
4
+ */
5
+ export declare function handleStartDashboard(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,30 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { exec } from "child_process";
4
+ /**
5
+ * Starts the Enderun Web Dashboard server.
6
+ */
7
+ export function handleStartDashboard(projectRoot, args) {
8
+ const port = args.port || 5858;
9
+ const dashboardScript = path.join(projectRoot, "bin/enderun-dashboard.js");
10
+ if (!fs.existsSync(dashboardScript)) {
11
+ throw new Error("Dashboard server script not found in bin/enderun-dashboard.js");
12
+ }
13
+ try {
14
+ // Start the dashboard as a background process
15
+ exec(`node "${dashboardScript}"`, {
16
+ cwd: projectRoot,
17
+ env: { ...process.env, PORT: String(port) }
18
+ });
19
+ return {
20
+ content: [{
21
+ type: "text",
22
+ text: `🖥️ **Enderun Web Dashboard started!**\n\nAccess it at: http://localhost:${port}\n\nThis interface will show real-time agent status, system health, and orchestration logs.`
23
+ }]
24
+ };
25
+ }
26
+ catch (e) {
27
+ return { isError: true, content: [{ type: "text", text: `Failed to start dashboard: ${String(e)}` }] };
28
+ }
29
+ }
30
+ //# sourceMappingURL=start_dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start_dashboard.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/dashboard/start_dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,IAAc;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;IAE3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACD,8CAA8C;QAC9C,IAAI,CAAC,SAAS,eAAe,GAAG,EAAE;YAC9B,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;SAC9C,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4EAA4E,IAAI,6FAA6F;iBACtL,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,8BAA8B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3G,CAAC;AACL,CAAC"}
@@ -12,6 +12,29 @@ export const TOOLS = [
12
12
  required: ["path"],
13
13
  },
14
14
  },
15
+ {
16
+ name: "list_dir",
17
+ description: "List the contents of a directory. Essential for codebase exploration.",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ path: { type: "string", description: "Path to the directory relative to project root (default: '.')" },
22
+ },
23
+ },
24
+ },
25
+ {
26
+ name: "grep_search",
27
+ description: "Perform a recursive regex search across the codebase to find functions, variables, or patterns.",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ pattern: { type: "string", description: "The regex pattern to search for" },
32
+ includePattern: { type: "string", description: "Optional: Filter files by extension (e.g., '.ts')" },
33
+ excludePattern: { type: "string", description: "Optional: Directory pattern to exclude (default: 'node_modules')" },
34
+ },
35
+ required: ["pattern"],
36
+ },
37
+ },
15
38
  {
16
39
  name: "write_file",
17
40
  description: "Write content to a file. Creates directories if missing.",
@@ -33,10 +56,34 @@ export const TOOLS = [
33
56
  path: { type: "string", description: "Path to the file" },
34
57
  oldText: { type: "string", description: "The exact text to find" },
35
58
  newText: { type: "string", description: "The text to replace it with" },
59
+ allowMultiple: { type: "boolean", description: "Allow multiple replacements if oldText is not unique." }
36
60
  },
37
61
  required: ["path", "oldText", "newText"],
38
62
  },
39
63
  },
64
+ {
65
+ name: "batch_surgical_edit",
66
+ description: "Perform multiple surgical text replacements across multiple files in a single batch request. More efficient for cross-cutting changes.",
67
+ inputSchema: {
68
+ type: "object",
69
+ properties: {
70
+ edits: {
71
+ type: "array",
72
+ items: {
73
+ type: "object",
74
+ properties: {
75
+ path: { type: "string", description: "Path to the file" },
76
+ oldText: { type: "string", description: "The exact text to find" },
77
+ newText: { type: "string", description: "The text to replace it with" },
78
+ allowMultiple: { type: "boolean", description: "Allow multiple replacements in this file." }
79
+ },
80
+ required: ["path", "oldText", "newText"]
81
+ }
82
+ }
83
+ },
84
+ required: ["edits"],
85
+ },
86
+ },
40
87
  {
41
88
  name: "patch_file",
42
89
  description: "Safely update a file by replacing a specific line range with new content.",
@@ -51,11 +98,82 @@ export const TOOLS = [
51
98
  required: ["path", "startLine", "endLine", "newContent"],
52
99
  },
53
100
  },
101
+ {
102
+ name: "get_project_map",
103
+ description: "Generate a tree-view map of the project structure to visualize the layout. Useful for onboarding and architectural analysis.",
104
+ inputSchema: {
105
+ type: "object",
106
+ properties: {
107
+ maxDepth: { type: "number", description: "Maximum directory depth to scan (default: 3)" },
108
+ includeFiles: { type: "boolean", description: "Whether to include files in the map (default: true)" }
109
+ }
110
+ }
111
+ },
112
+ {
113
+ name: "get_project_gaps",
114
+ description: "Scans the codebase for TODOs, FIXMEs, and empty function bodies. Helps identify what is left and where the agent might have skipped logic.",
115
+ inputSchema: {
116
+ type: "object",
117
+ properties: {
118
+ path: { type: "string", description: "Path to the source directory (default: 'src')" },
119
+ },
120
+ },
121
+ },
122
+ {
123
+ name: "audit_dependencies",
124
+ description: "Audits package.json for unused, redundant, or duplicate-like packages to ensure a clean dependency tree.",
125
+ inputSchema: { type: "object", properties: {} },
126
+ },
127
+ {
128
+ name: "run_tests",
129
+ description: "Execute project test suites (Vitest, Playwright, etc.) and capture detailed pass/fail reports for analysis.",
130
+ inputSchema: {
131
+ type: "object",
132
+ properties: {
133
+ command: { type: "string", description: "The test command to run (default: 'npm test')" }
134
+ }
135
+ }
136
+ },
137
+ {
138
+ name: "get_system_health",
139
+ description: "Retrieve real-time system metrics like CPU load, RAM usage, and uptime.",
140
+ inputSchema: { type: "object", properties: {} }
141
+ },
142
+ {
143
+ name: "check_active_ports",
144
+ description: "Identify which network ports are currently active and listening. Helps verify if the dev server or API is running.",
145
+ inputSchema: {
146
+ type: "object",
147
+ properties: {
148
+ filter: { type: "string", description: "Optional: Filter results by port number or service name (e.g., ':3000')" }
149
+ }
150
+ }
151
+ },
152
+ {
153
+ name: "start_dashboard",
154
+ description: "Start the Enderun Web Dashboard (Command Center) to visualize real-time agent status, logs, and system metrics in the browser.",
155
+ inputSchema: {
156
+ type: "object",
157
+ properties: {
158
+ port: { type: "number", description: "Optional: Port to run the dashboard on (default: 5858)" }
159
+ }
160
+ }
161
+ },
54
162
  {
55
163
  name: "get_framework_status",
56
164
  description: "Get the current project phase, active traces, and agent states.",
57
165
  inputSchema: { type: "object", properties: {} },
58
166
  },
167
+ {
168
+ name: "read_project_memory",
169
+ description: "Read the full project central memory (PROJECT_MEMORY.md). Use this at the start of a session to gain context.",
170
+ inputSchema: { type: "object", properties: {} },
171
+ },
172
+ {
173
+ name: "get_memory_insights",
174
+ description: "Retrieve a summarized version of the project memory (active phase, trace, and last 5 actions) to save tokens.",
175
+ inputSchema: { type: "object", properties: {} },
176
+ },
59
177
  {
60
178
  name: "update_project_memory",
61
179
  description: "Update a specific section in PROJECT_MEMORY.md.",
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Performs multiple surgical text replacements across multiple files in a single batch.
4
+ */
5
+ export declare function handleBatchSurgicalEdit(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,51 @@
1
+ import fs from "fs";
2
+ import { safePath } from "../../utils/security.js";
3
+ import { Metrics } from "../../utils/metrics.js";
4
+ import { verifyCorporateCompliance } from "../../utils/compliance.js";
5
+ /**
6
+ * Performs multiple surgical text replacements across multiple files in a single batch.
7
+ */
8
+ export function handleBatchSurgicalEdit(projectRoot, args) {
9
+ const edits = args.edits;
10
+ if (!Array.isArray(edits) || edits.length === 0) {
11
+ throw new Error("No edits provided in the batch request.");
12
+ }
13
+ const results = [];
14
+ let totalTokens = 0;
15
+ for (const edit of edits) {
16
+ const filePath = safePath(projectRoot, edit.path);
17
+ if (!fs.existsSync(filePath)) {
18
+ throw new Error(`File not found: ${edit.path}`);
19
+ }
20
+ const content = fs.readFileSync(filePath, "utf8");
21
+ const { oldText, newText, allowMultiple = false } = edit;
22
+ if (!content.includes(oldText)) {
23
+ throw new Error(`Text not found in file ${edit.path}: "${oldText.slice(0, 50)}..."`);
24
+ }
25
+ // Surgical precision guard
26
+ if (!allowMultiple) {
27
+ const firstIndex = content.indexOf(oldText);
28
+ const lastIndex = content.lastIndexOf(oldText);
29
+ if (firstIndex !== lastIndex) {
30
+ throw new Error(`Ambiguous replacement in ${edit.path}: "${oldText.slice(0, 50)}..." found multiple times.`);
31
+ }
32
+ }
33
+ const newContent = allowMultiple
34
+ ? content.replace(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), newText)
35
+ : content.replace(oldText, newText);
36
+ // ENFORCE CORPORATE COMPLIANCE
37
+ verifyCorporateCompliance(newContent, edit.path);
38
+ fs.writeFileSync(filePath, newContent);
39
+ const tokens = Metrics.estimateTokens(newText);
40
+ totalTokens += tokens;
41
+ results.push(`✅ Edited ${edit.path}`);
42
+ }
43
+ Metrics.logUsage(projectRoot, "@mcp", `batch_surgical_edit: ${edits.length} files`, totalTokens);
44
+ return {
45
+ content: [{
46
+ type: "text",
47
+ text: `Successfully performed ${edits.length} edits:\n${results.join("\n")}`
48
+ }]
49
+ };
50
+ }
51
+ //# sourceMappingURL=batch_surgical_edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch_surgical_edit.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/file_system/batch_surgical_edit.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import fs from "fs";
2
2
  import { safePath } from "../../utils/security.js";
3
3
  import { Metrics } from "../../utils/metrics.js";
4
+ import { verifyCorporateCompliance } from "../../utils/compliance.js";
4
5
  export function handleReplaceText(projectRoot, args) {
5
6
  const filePath = safePath(projectRoot, args.path);
6
- let content = fs.readFileSync(filePath, "utf8");
7
+ const content = fs.readFileSync(filePath, "utf8");
7
8
  const oldText = args.oldText;
8
9
  const newText = args.newText;
9
10
  const allowMultiple = args.allowMultiple || false; // Default to false
@@ -21,13 +22,16 @@ export function handleReplaceText(projectRoot, args) {
21
22
  }
22
23
  }
23
24
  // Perform replacement(s)
25
+ let newContent;
24
26
  if (allowMultiple) {
25
- content = content.replace(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), newText);
27
+ newContent = content.replace(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), newText);
26
28
  }
27
29
  else {
28
- content = content.replace(oldText, newText);
30
+ newContent = content.replace(oldText, newText);
29
31
  }
30
- fs.writeFileSync(filePath, content);
32
+ // ENFORCE CORPORATE COMPLIANCE
33
+ verifyCorporateCompliance(newContent, args.path);
34
+ fs.writeFileSync(filePath, newContent);
31
35
  const tokens = Metrics.estimateTokens(newText);
32
36
  Metrics.logUsage(projectRoot, "@mcp", `replace_text: ${args.path}`, tokens);
33
37
  return { content: [{ type: "text", text: `✅ Surgical edit successful in ${args.path}` }] };
@@ -1 +1 @@
1
- {"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/file_system/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAc;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,mBAAmB;IAEtE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,wFAAwF;IACxF,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC5G,MAAM,IAAI,KAAK,CACX,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,KAAK,aAAa,IAAI,CAAC,IAAI,IAAI;gBAC5F,0EAA0E,CAC7E,CAAC;QACN,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC/F,CAAC"}
1
+ {"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/file_system/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAc;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,mBAAmB;IAEtE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,wFAAwF;IACxF,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC5G,MAAM,IAAI,KAAK,CACX,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,KAAK,aAAa,IAAI,CAAC,IAAI,IAAI;gBAC5F,0EAA0E,CAC7E,CAAC;QACN,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,IAAI,UAAkB,CAAC;IACvB,IAAI,aAAa,EAAE,CAAC;QAChB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3G,CAAC;SAAM,CAAC;QACJ,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,+BAA+B;IAC/B,yBAAyB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAE3D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC/F,CAAC"}
@@ -2,9 +2,12 @@ import fs from "fs";
2
2
  import path from "path";
3
3
  import { safePath, resolveFrameworkDir } from "../../utils/security.js";
4
4
  import { Metrics } from "../../utils/metrics.js";
5
+ import { verifyCorporateCompliance } from "../../utils/compliance.js";
5
6
  export function handleWriteFile(projectRoot, args) {
6
7
  const filePath = safePath(projectRoot, args.path);
7
8
  const content = args.content;
9
+ // ENFORCE CORPORATE COMPLIANCE
10
+ verifyCorporateCompliance(content, args.path);
8
11
  fs.mkdirSync(path.dirname(filePath), { recursive: true });
9
12
  fs.writeFileSync(filePath, content);
10
13
  // AUTO-LOGGING & METRICS
@@ -1 +1 @@
1
- {"version":3,"file":"write_file.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/file_system/write_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IAEvC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpC,yBAAyB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1E,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;QACpF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,8CAA8C,IAAI,CAAC,IAAI,OAAO,MAAM,uBAAuB,CAAC;YACzJ,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAE9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"write_file.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/file_system/write_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IAEvC,+BAA+B;IAC/B,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAExD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpC,yBAAyB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1E,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;QACpF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,8CAA8C,IAAI,CAAC,IAAI,OAAO,MAAM,uBAAuB,CAAC;YACzJ,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAE9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Audits package.json for unused or duplicate-like packages.
4
+ * Focuses on project health and cleanup.
5
+ */
6
+ export declare function handleAuditDependencies(projectRoot: string, _args: ToolArgs): ToolResult;
@@ -0,0 +1,42 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ /**
4
+ * Audits package.json for unused or duplicate-like packages.
5
+ * Focuses on project health and cleanup.
6
+ */
7
+ export function handleAuditDependencies(projectRoot, _args) {
8
+ const pkgPath = path.join(projectRoot, "package.json");
9
+ if (!fs.existsSync(pkgPath)) {
10
+ throw new Error("package.json not found.");
11
+ }
12
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
13
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
14
+ const depNames = Object.keys(deps);
15
+ const results = [];
16
+ // 1. Look for similar packages (potential duplicates)
17
+ const similarityGroups = {
18
+ "CSS/Styling": ["tailwind", "panda", "styled-components", "emotion", "sass"],
19
+ "Testing": ["vitest", "jest", "mocha", "jasmine"],
20
+ "Fetching": ["axios", "ky", "fetch"]
21
+ };
22
+ for (const [group, patterns] of Object.entries(similarityGroups)) {
23
+ const found = depNames.filter(d => patterns.some(p => d.includes(p)));
24
+ if (found.length > 1) {
25
+ results.push(`⚠️ Potential redundancy in [${group}]: Found ${found.join(", ")}`);
26
+ }
27
+ }
28
+ // 2. Scan for "any" usage in package names (bad practice markers)
29
+ const legacyDeps = depNames.filter(d => d.includes("legacy") || d.includes("compat"));
30
+ if (legacyDeps.length > 0) {
31
+ results.push(`ℹ️ Legacy compatibility packages detected: ${legacyDeps.join(", ")}`);
32
+ }
33
+ return {
34
+ content: [{
35
+ type: "text",
36
+ text: results.length > 0
37
+ ? `Dependency Audit Results:\n\n${results.join("\n")}`
38
+ : "✅ Dependencies look clean and consolidated."
39
+ }]
40
+ };
41
+ }
42
+ //# sourceMappingURL=audit_deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit_deps.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/framework/audit_deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB,EAAE,KAAe;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,sDAAsD;IACtD,MAAM,gBAAgB,GAA6B;QAC/C,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,CAAC;QAC5E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;KACvC,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,+CAA+C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,gCAAgC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtD,CAAC,CAAC,6CAA6C;aACtD,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolArgs, ToolResult } from "../types.js";
2
+ /**
3
+ * Executes project tests and returns results for agent analysis.
4
+ */
5
+ export declare function handleRunTests(projectRoot: string, args: ToolArgs): ToolResult;
@@ -0,0 +1,26 @@
1
+ import { execSync } from "child_process";
2
+ /**
3
+ * Executes project tests and returns results for agent analysis.
4
+ */
5
+ export function handleRunTests(projectRoot, args) {
6
+ const testCommand = args.command || "npm test";
7
+ try {
8
+ const output = execSync(testCommand, { cwd: projectRoot, encoding: "utf8", stdio: "pipe" });
9
+ return {
10
+ content: [{ type: "text", text: `✅ Tests passed successfully!\n\n${output}` }]
11
+ };
12
+ }
13
+ catch (error) {
14
+ const err = error;
15
+ const stderr = err.stderr?.toString() || "";
16
+ const stdout = err.stdout?.toString() || "";
17
+ return {
18
+ isError: true,
19
+ content: [{
20
+ type: "text",
21
+ text: `❌ Tests FAILED!\n\n--- STDOUT ---\n${stdout}\n\n--- STDERR ---\n${stderr}`
22
+ }]
23
+ };
24
+ }
25
+ }
26
+ //# sourceMappingURL=run_tests.js.map