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.
- package/ENDERUN.md +12 -9
- package/README.md +12 -29
- package/bin/run-multi-test.js +77 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.d.ts +5 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js +30 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js.map +1 -0
- package/dist/framework-mcp/src/tools/definitions.js +118 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +5 -0
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +51 -0
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -4
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/write_file.js +3 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/audit_deps.d.ts +6 -0
- package/dist/framework-mcp/src/tools/framework/audit_deps.js +42 -0
- package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.d.ts +5 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.js +26 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -0
- package/dist/framework-mcp/src/tools/index.js +24 -0
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/memory/get_insights.d.ts +6 -0
- package/dist/framework-mcp/src/tools/memory/get_insights.js +35 -0
- package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.d.ts +6 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.js +29 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +5 -0
- package/dist/framework-mcp/src/tools/observability/check_ports.js +27 -0
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -0
- package/dist/framework-mcp/src/tools/observability/get_health.d.ts +5 -0
- package/dist/framework-mcp/src/tools/observability/get_health.js +21 -0
- package/dist/framework-mcp/src/tools/observability/get_health.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.d.ts +6 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.js +49 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_map.d.ts +6 -0
- package/dist/framework-mcp/src/tools/search/get_map.js +45 -0
- package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/grep_search.d.ts +5 -0
- package/dist/framework-mcp/src/tools/search/grep_search.js +60 -0
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/list_dir.d.ts +5 -0
- package/dist/framework-mcp/src/tools/search/list_dir.js +29 -0
- package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -0
- package/dist/framework-mcp/src/tools/types.d.ts +10 -5
- package/dist/framework-mcp/src/utils/compliance.d.ts +5 -0
- package/dist/framework-mcp/src/utils/compliance.js +30 -0
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/src/cli/adapters/types.d.ts +2 -2
- package/dist/src/cli/adapters.d.ts +1 -1
- package/dist/src/cli/adapters.js +45 -77
- package/dist/src/cli/adapters.js.map +1 -1
- package/dist/src/cli/commands/check.js +52 -6
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +5 -1
- package/dist/src/cli/commands/init.js +183 -124
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +3 -3
- package/dist/src/cli/commands/orchestrate.js +14 -8
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/status.js +3 -2
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/index.js +4 -3
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/shims.js +6 -6
- package/dist/src/cli/utils/app-backend.d.ts +2 -0
- package/dist/src/cli/utils/app-backend.js +236 -0
- package/dist/src/cli/utils/app-backend.js.map +1 -0
- package/dist/src/cli/utils/app-docs.d.ts +3 -0
- package/dist/src/cli/utils/app-docs.js +59 -0
- package/dist/src/cli/utils/app-docs.js.map +1 -0
- package/dist/src/cli/utils/app-frontend.d.ts +2 -0
- package/dist/src/cli/utils/app-frontend.js +248 -0
- package/dist/src/cli/utils/app-frontend.js.map +1 -0
- package/dist/src/cli/utils/app-inferrer.d.ts +14 -0
- package/dist/src/cli/utils/app-inferrer.js +39 -0
- package/dist/src/cli/utils/app-inferrer.js.map +1 -0
- package/dist/src/cli/utils/app-types.d.ts +3 -0
- package/dist/src/cli/utils/app-types.js +233 -0
- package/dist/src/cli/utils/app-types.js.map +1 -0
- package/dist/src/cli/utils/app.d.ts +5 -32
- package/dist/src/cli/utils/app.js +5 -794
- package/dist/src/cli/utils/app.js.map +1 -1
- package/dist/src/cli/utils/memory.js +8 -4
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/modules/adapters/antigravity-cli.js +3 -3
- package/dist/src/modules/adapters/antigravity-cli.js.map +1 -1
- package/dist/src/modules/adapters/claude.js +1 -1
- package/dist/src/modules/adapters/claude.js.map +1 -1
- package/dist/src/modules/adapters/codex.js +2 -2
- package/dist/src/modules/adapters/codex.js.map +1 -1
- package/dist/src/modules/adapters/cursor.js +1 -1
- package/dist/src/modules/adapters/cursor.js.map +1 -1
- package/dist/src/modules/adapters/definitions.d.ts +9 -0
- package/dist/src/modules/adapters/definitions.js +124 -0
- package/dist/src/modules/adapters/definitions.js.map +1 -0
- package/dist/src/modules/adapters/gemini.js +2 -2
- package/dist/src/modules/adapters/gemini.js.map +1 -1
- package/dist/src/modules/adapters/grok.js +1 -1
- package/dist/src/modules/adapters/grok.js.map +1 -1
- package/dist/src/modules/agents/definitions.js +26 -27
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/shared/config.d.ts +3 -3
- package/dist/src/shared/logger.js +8 -5
- package/dist/src/shared/logger.js.map +1 -1
- package/dist/tests/adapter.test.d.ts +1 -0
- package/dist/tests/adapter.test.js +129 -0
- package/dist/tests/adapter.test.js.map +1 -0
- package/dist/tests/agents-definitions.test.d.ts +1 -0
- package/dist/tests/agents-definitions.test.js +54 -0
- package/dist/tests/agents-definitions.test.js.map +1 -0
- package/dist/tests/approve.test.d.ts +1 -0
- package/dist/tests/approve.test.js +88 -0
- package/dist/tests/approve.test.js.map +1 -0
- package/dist/tests/config.test.d.ts +1 -0
- package/dist/tests/config.test.js +58 -0
- package/dist/tests/config.test.js.map +1 -0
- package/dist/tests/container.runner.d.ts +1 -0
- package/dist/tests/container.runner.js +68 -0
- package/dist/tests/container.runner.js.map +1 -0
- package/dist/tests/container.test.d.ts +1 -0
- package/dist/tests/container.test.js +73 -0
- package/dist/tests/container.test.js.map +1 -0
- package/dist/tests/errors.test.d.ts +1 -0
- package/dist/tests/errors.test.js +64 -0
- package/dist/tests/errors.test.js.map +1 -0
- package/dist/tests/fs-utils.test.d.ts +1 -0
- package/dist/tests/fs-utils.test.js +101 -0
- package/dist/tests/fs-utils.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +1 -0
- package/dist/tests/logger.test.js +81 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/memory-utils.test.d.ts +1 -0
- package/dist/tests/memory-utils.test.js +173 -0
- package/dist/tests/memory-utils.test.js.map +1 -0
- package/dist/tests/orchestrate.test.d.ts +1 -0
- package/dist/tests/orchestrate.test.js +131 -0
- package/dist/tests/orchestrate.test.js.map +1 -0
- package/dist/tests/skills-definitions.test.d.ts +1 -0
- package/dist/tests/skills-definitions.test.js +34 -0
- package/dist/tests/skills-definitions.test.js.map +1 -0
- package/dist/tests/status.test.d.ts +1 -0
- package/dist/tests/status.test.js +105 -0
- package/dist/tests/status.test.js.map +1 -0
- package/dist/tests/string.test.d.ts +1 -0
- package/dist/tests/string.test.js +89 -0
- package/dist/tests/string.test.js.map +1 -0
- package/dist/tests/time.test.d.ts +1 -0
- package/dist/tests/time.test.js +48 -0
- package/dist/tests/time.test.js.map +1 -0
- package/dist/tests/trace.test.d.ts +1 -0
- package/dist/tests/trace.test.js +61 -0
- package/dist/tests/trace.test.js.map +1 -0
- package/dist/vitest.config.js +1 -0
- package/dist/vitest.config.js.map +1 -1
- package/docs/getting-started.md +4 -0
- package/docs/user/corporate-governance.md +25 -0
- package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
- package/framework-mcp/dist/tools/definitions.js +118 -0
- package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +50 -0
- package/framework-mcp/dist/tools/file_system/replace_text.js +8 -4
- package/framework-mcp/dist/tools/file_system/write_file.js +3 -0
- package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
- package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
- package/framework-mcp/dist/tools/index.js +24 -0
- package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
- package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
- package/framework-mcp/dist/tools/messaging/send_message.js +1 -1
- package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
- package/framework-mcp/dist/tools/observability/get_health.js +20 -0
- package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
- package/framework-mcp/dist/tools/search/get_map.js +44 -0
- package/framework-mcp/dist/tools/search/grep_search.js +59 -0
- package/framework-mcp/dist/tools/search/list_dir.js +28 -0
- package/framework-mcp/dist/utils/compliance.js +29 -0
- package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
- package/framework-mcp/src/tools/definitions.ts +118 -0
- package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +70 -0
- package/framework-mcp/src/tools/file_system/replace_text.ts +10 -4
- package/framework-mcp/src/tools/file_system/write_file.ts +5 -0
- package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
- package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
- package/framework-mcp/src/tools/index.ts +24 -0
- package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
- package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
- package/framework-mcp/src/tools/messaging/send_message.ts +1 -1
- package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
- package/framework-mcp/src/tools/observability/get_health.ts +25 -0
- package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
- package/framework-mcp/src/tools/search/get_map.ts +50 -0
- package/framework-mcp/src/tools/search/grep_search.ts +66 -0
- package/framework-mcp/src/tools/search/list_dir.ts +34 -0
- package/framework-mcp/src/tools/types.ts +11 -1
- package/framework-mcp/src/utils/compliance.ts +37 -0
- package/framework-mcp/tests/tools/messaging/send_message.test.ts +5 -5
- package/package.json +2 -2
- package/src/cli/adapters/types.ts +2 -2
- package/src/cli/adapters.ts +45 -80
- package/src/cli/commands/check.ts +52 -6
- package/src/cli/commands/init.ts +193 -138
- package/src/cli/commands/orchestrate.ts +14 -8
- package/src/cli/commands/status.ts +3 -2
- package/src/cli/index.ts +4 -3
- package/src/cli/shims.ts +6 -6
- package/src/cli/utils/app-backend.ts +249 -0
- package/src/cli/utils/app-docs.ts +65 -0
- package/src/cli/utils/app-frontend.ts +257 -0
- package/src/cli/utils/app-inferrer.ts +53 -0
- package/src/cli/utils/app-types.ts +243 -0
- package/src/cli/utils/app.ts +5 -849
- package/src/cli/utils/memory.ts +8 -4
- package/src/modules/adapters/definitions.ts +125 -0
- package/src/modules/agents/definitions.ts +26 -27
- package/src/shared/logger.ts +8 -5
- package/templates/prompts/bug-fix-recipe.md +20 -0
- package/templates/prompts/new-feature-recipe.md +19 -0
- package/templates/prompts/refactoring-recipe.md +21 -0
- package/templates/standards/architecture-standards.md +23 -0
- package/templates/standards/crud-governance.md +21 -0
- package/templates/standards/frontend-standards.md +38 -0
- package/templates/standards/i18n-standards.md +17 -0
- package/templates/standards/logging-and-secrets.md +29 -0
- package/templates/standards/mobile-standards.md +24 -0
- package/templates/standards/quality-standards.md +31 -0
- package/templates/standards/security-standards.md +21 -0
- package/templates/standards/tailwind-standards.md +20 -0
- package/templates/standards/testing-standards.md +31 -0
- package/src/modules/adapters/antigravity-cli.ts +0 -25
- package/src/modules/adapters/claude.ts +0 -36
- package/src/modules/adapters/codex.ts +0 -22
- package/src/modules/adapters/cursor.ts +0 -22
- package/src/modules/adapters/gemini.ts +0 -27
- package/src/modules/adapters/grok.ts +0 -20
- package/templates/architecture/agents-manifest.md +0 -79
- package/templates/architecture/approval-flows.md +0 -61
- package/templates/architecture/enterprise-architecture.md +0 -69
- package/templates/architecture/standards/crud-governance.md +0 -46
- package/templates/architecture/standards/data-fetching-patterns.md +0 -13
- package/templates/architecture/standards/design-system.md +0 -31
- package/templates/architecture/standards/documentation-ownership.md +0 -21
- package/templates/architecture/standards/logging.md +0 -7
- package/templates/architecture/standards/mobile-standards.md +0 -48
- package/templates/architecture/standards/tech-stack.md +0 -9
- package/templates/backend/error-handling.md +0 -74
- 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
|
-
## 🎖️
|
|
5
|
-
>
|
|
6
|
-
- [ ] **Surgical
|
|
7
|
-
- [ ] **
|
|
8
|
-
- [ ] **
|
|
9
|
-
- [ ] **
|
|
10
|
-
- [ ] **
|
|
11
|
-
|
|
12
|
-
|
|
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.
|
|
3
|
+
> **Stable Release:** v1.1.7 (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ş
|
|
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ış
|
|
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
|
|
213
|
+
### 🪖 The Consolidated 13-Agent Army
|
|
209
214
|
|
|
210
|
-
All workspace operations are divided among
|
|
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.
|
|
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 fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { execSync } from "child_process";
|
|
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: ".antigravity",
|
|
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,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":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAqB;IACnC;QACI,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBAClF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBACvF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;aACtF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACrB;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBAClF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAChC;KACJ;IACD;QACI,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
27
|
+
newContent = content.replace(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), newText);
|
|
26
28
|
}
|
|
27
29
|
else {
|
|
28
|
-
|
|
30
|
+
newContent = content.replace(oldText, newText);
|
|
29
31
|
}
|
|
30
|
-
|
|
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,
|
|
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,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,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
|