agent-enderun 1.1.5 → 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 +13 -10
- package/README.md +14 -31
- 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 +184 -106
- 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/package.json +1 -1
- 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 +3 -3
- 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 -114
- 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/src/cli/commands/init.ts
CHANGED
|
@@ -6,13 +6,16 @@ import {
|
|
|
6
6
|
resolveAdapter,
|
|
7
7
|
runAdapterPostInit,
|
|
8
8
|
remapFrameworkContent,
|
|
9
|
+
scaffoldAgents,
|
|
9
10
|
type AdapterConfig,
|
|
10
11
|
type AdapterId,
|
|
11
12
|
} from "../adapters.js";
|
|
12
13
|
import { getPackageRoot, getPackageVersion } from "../utils/pkg.js";
|
|
13
14
|
import { ensureDir, writeJsonFile } from "../utils/fs.js";
|
|
14
15
|
import { initializeMemory, getConfiguredPaths } from "../utils/memory.js";
|
|
16
|
+
import { logger } from "../../shared/logger.js";
|
|
15
17
|
import { SHIM_TEMPLATES } from "../shims.js";
|
|
18
|
+
import { UI } from "../utils/ui.js";
|
|
16
19
|
|
|
17
20
|
// Import Modular Definitions
|
|
18
21
|
import { ALL_AGENTS, buildAgentJson } from "../../modules/agents/definitions.js";
|
|
@@ -26,6 +29,7 @@ const FRAMEWORK_SUBDIRS = [
|
|
|
26
29
|
"agents",
|
|
27
30
|
"skills",
|
|
28
31
|
"knowledge",
|
|
32
|
+
"prompts",
|
|
29
33
|
"memory",
|
|
30
34
|
"router",
|
|
31
35
|
"registry",
|
|
@@ -80,8 +84,11 @@ function scaffoldConstitution(targetDir: string, frameworkDir: string, adapterId
|
|
|
80
84
|
console.warn(`⚠️ Failed to read global constitution template: ${e}`);
|
|
81
85
|
}
|
|
82
86
|
content = remapFrameworkContent(content, frameworkDir, adapterId);
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
|
|
88
|
+
// Write ONLY to the framework directory (e.g. .gemini/ENDERUN.md)
|
|
89
|
+
const destPath = path.join(targetDir, frameworkDir, "ENDERUN.md");
|
|
90
|
+
fs.writeFileSync(destPath, content);
|
|
91
|
+
console.warn(`✅ Constitution file created inside: ${frameworkDir}/ENDERUN.md${readSuccess ? "" : " (default template)"}`);
|
|
85
92
|
}
|
|
86
93
|
|
|
87
94
|
function scaffoldCoreAgents(agentsToScaffold: string[], agentsBaseDir: string, adapterId: string, dryRun: boolean) {
|
|
@@ -185,6 +192,96 @@ This document outlines the strict ESLint coding standards for Agent Enderun proj
|
|
|
185
192
|
const knowledgePath = path.join(frameworkDir, knowledgeDir);
|
|
186
193
|
if (!fs.existsSync(knowledgePath)) fs.mkdirSync(knowledgePath, { recursive: true });
|
|
187
194
|
fs.writeFileSync(path.join(knowledgePath, "eslint-standards.md"), eslintStandardsContent);
|
|
195
|
+
|
|
196
|
+
// Scaffold Corporate Standards (CRUD & Architecture)
|
|
197
|
+
const standards = [
|
|
198
|
+
{
|
|
199
|
+
file: "crud-governance.md",
|
|
200
|
+
template: "templates/standards/crud-governance.md",
|
|
201
|
+
default: "# 🏛️ Kurumsal CRUD ve Yönetişim Standartları\n\n1. **Yüksek Riskli İşlemler:** @manager onayı gerektirir.\n2. **Branded Types:** Zorunludur.\n3. **Kysely:** Ham SQL yasaktır."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
file: "architecture-standards.md",
|
|
205
|
+
template: "templates/standards/architecture-standards.md",
|
|
206
|
+
default: "# 📐 Kurumsal Mimari Standartları\n\n1. **Layered Architecture:** Route -> Service -> Repository.\n2. **Zero Mock:** Gerçek veri/kontrat kullanımı zorunludur.\n3. **any Forbidden:** TypeScript disiplini."
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
file: "frontend-standards.md",
|
|
210
|
+
template: "templates/standards/frontend-standards.md",
|
|
211
|
+
default: "# 🎨 Kurumsal Frontend Standartları\n\n1. **Style Discipline:** Tip güvenli veya utility-first sistemler tercih edilir.\n2. **Responsive-First:** Mobil-ilk tasarım zorunludur.\n3. **WCAG AA:** Erişilebilirlik standarttır."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
file: "tailwind-standards.md",
|
|
215
|
+
template: "templates/standards/tailwind-standards.md",
|
|
216
|
+
default: "# 🌊 Kurumsal Tailwind Standartları\n\n1. **No Arbitrary Values:** h-[10px] yasaktır.\n2. **Mobile-First:** sm:, md: kullanımı zorunludur.\n3. **Prettier:** Tailwind plugin kullanımı önerilir."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
file: "mobile-standards.md",
|
|
220
|
+
template: "templates/standards/mobile-standards.md",
|
|
221
|
+
default: "# 📱 Kurumsal Mobil Standartları\n\n1. **Expo/React Native:** Standart platformdur.\n2. **Dynamic Scaling:** useWindowDimensions kullanımı zorunludur.\n3. **FlashList:** Büyük listeler için Shopify FlashList kullanılır."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
file: "security-standards.md",
|
|
225
|
+
template: "templates/standards/security-standards.md",
|
|
226
|
+
default: "# 🛡️ Kurumsal Güvenlik Standartları\n\n1. **No Ham SQL:** Kysely zorunluluğu.\n2. **RLS:** Row Level Security uygulanmalıdır.\n3. **Secrets:** .env disiplini."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
file: "quality-standards.md",
|
|
230
|
+
template: "templates/standards/quality-standards.md",
|
|
231
|
+
default: "# ⚖️ Kurumsal Kod Kalitesi Standartları\n\n1. **Zero any:** TypeScript disiplini.\n2. **Zero Warnings:** ESLint temizliği.\n3. **4 Spaces:** Girintileme kuralı."
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
file: "logging-and-secrets.md",
|
|
235
|
+
template: "templates/standards/logging-and-secrets.md",
|
|
236
|
+
default: "# 🪵 Kurumsal Loglama Standartları\n\n1. **Zero Console:** console.log yasaktır.\n2. **Logger:** Kurumsal logger kullanılır.\n3. **Secrets:** .env disiplini zorunludur."
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
file: "testing-standards.md",
|
|
240
|
+
template: "templates/standards/testing-standards.md",
|
|
241
|
+
default: "# 🧪 Kurumsal Test Standartları\n\n1. **Framework:** Vitest kullanılır.\n2. **Naming:** .test.ts formatı.\n3. **Zero Mock:** İç servisler mocklanmaz."
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
file: "i18n-standards.md",
|
|
245
|
+
template: "templates/standards/i18n-standards.md",
|
|
246
|
+
default: "# 🌐 Kurumsal i18n Standartları\n\n1. **No Hardcoded:** Metinler JSON'da tutulur.\n2. **i18next:** Standart kütüphanedir.\n3. **Centralized:** Locales dizini zorunludur."
|
|
247
|
+
}
|
|
248
|
+
];
|
|
249
|
+
|
|
250
|
+
for (const std of standards) {
|
|
251
|
+
let content = std.default;
|
|
252
|
+
try {
|
|
253
|
+
const fullTemplatePath = path.join(getPackageRoot(), std.template);
|
|
254
|
+
if (fs.existsSync(fullTemplatePath)) {
|
|
255
|
+
content = fs.readFileSync(fullTemplatePath, "utf8");
|
|
256
|
+
}
|
|
257
|
+
} catch {
|
|
258
|
+
// Intentional: if the template file is unreadable, fall back to the inline default.
|
|
259
|
+
// No logging needed — the default value is a valid fallback, not an error condition.
|
|
260
|
+
}
|
|
261
|
+
fs.writeFileSync(path.join(knowledgePath, std.file), content);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Scaffold Prompt Recipes
|
|
265
|
+
const promptsPath = path.join(frameworkDir, "prompts");
|
|
266
|
+
if (!fs.existsSync(promptsPath)) fs.mkdirSync(promptsPath, { recursive: true });
|
|
267
|
+
|
|
268
|
+
const recipes = [
|
|
269
|
+
{ file: "refactoring-recipe.md", template: "templates/prompts/refactoring-recipe.md" },
|
|
270
|
+
{ file: "bug-fix-recipe.md", template: "templates/prompts/bug-fix-recipe.md" },
|
|
271
|
+
{ file: "new-feature-recipe.md", template: "templates/prompts/new-feature-recipe.md" }
|
|
272
|
+
];
|
|
273
|
+
|
|
274
|
+
for (const recipe of recipes) {
|
|
275
|
+
try {
|
|
276
|
+
const fullTemplatePath = path.join(getPackageRoot(), recipe.template);
|
|
277
|
+
if (fs.existsSync(fullTemplatePath)) {
|
|
278
|
+
const content = fs.readFileSync(fullTemplatePath, "utf8");
|
|
279
|
+
fs.writeFileSync(path.join(promptsPath, recipe.file), content);
|
|
280
|
+
}
|
|
281
|
+
} catch (e) {
|
|
282
|
+
logger.debug(`Failed to scaffold prompt recipe: ${recipe.file}`, e);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
188
285
|
|
|
189
286
|
// Scaffold cli-commands.json
|
|
190
287
|
const cliCommands = {
|
|
@@ -248,135 +345,117 @@ List of active agents, their roles, capacities, and matching directory patterns.
|
|
|
248
345
|
// Scaffold observability files
|
|
249
346
|
const obsDir = path.join(frameworkDir, "observability");
|
|
250
347
|
if (!fs.existsSync(obsDir)) fs.mkdirSync(obsDir, { recursive: true });
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
348
|
+
|
|
349
|
+
// Add audit log
|
|
350
|
+
const auditLogPath = path.join(obsDir, "audit_log.md");
|
|
351
|
+
if (!fs.existsSync(auditLogPath)) {
|
|
352
|
+
fs.writeFileSync(auditLogPath, "# 🎖️ Agent Enderun — Audit Log\n\n| Timestamp | Agent | Action | Trace ID | Status |\n|---|---|---|---|---|\n");
|
|
353
|
+
}
|
|
254
354
|
|
|
255
|
-
|
|
355
|
+
// Add metrics.json
|
|
356
|
+
const metricsPath = path.join(obsDir, "metrics.json");
|
|
357
|
+
if (!fs.existsSync(metricsPath)) {
|
|
358
|
+
fs.writeFileSync(metricsPath, "[]");
|
|
359
|
+
}
|
|
256
360
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
);
|
|
260
|
-
fs.writeFileSync(
|
|
261
|
-
|
|
262
|
-
|
|
361
|
+
// Scaffold rules
|
|
362
|
+
const rulesDir = path.join(frameworkDir, "rules");
|
|
363
|
+
if (!fs.existsSync(rulesDir)) fs.mkdirSync(rulesDir, { recursive: true });
|
|
364
|
+
fs.writeFileSync(path.join(rulesDir, "global_rules.mdc"), `---
|
|
365
|
+
description: Global Rules for Agent Enderun Army
|
|
366
|
+
globs: **/*
|
|
367
|
+
---
|
|
263
368
|
|
|
264
|
-
|
|
265
|
-
- **Memory File:** \`${fDir}/memory/PROJECT_MEMORY.md\` (SSOT)
|
|
266
|
-
- **Pruning Trigger:** Active history entries are pruned and archived under \`${fDir}/memory-graph/archive/\` once the log exceeds 10 records.
|
|
267
|
-
- **Audit Logs:** Agent interactions are saved locally inside \`observability/audit_log.md\` to keep API usage transparent and track performance bottlenecks.
|
|
268
|
-
`
|
|
269
|
-
);
|
|
369
|
+
# 🎖️ Agent Enderun — Global Army Rules
|
|
270
370
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
fs.writeFileSync(destShimPath, shimContent);
|
|
279
|
-
console.warn(`✅ Strategy shim created: ${entryFileName}`);
|
|
280
|
-
}
|
|
371
|
+
- **Traceability:** Prefix every commit and log with the active Trace ID.
|
|
372
|
+
- **Surgical Edits:** Use \`replace_text\` or \`patch_file\` tools. Overwriting entire files is forbidden.
|
|
373
|
+
- **Contract-First:** Verify types before implementation.
|
|
374
|
+
- **Zero Mock:** Use real data contracts.
|
|
375
|
+
- **any Forbidden:** Strictly use TypeScript types.
|
|
376
|
+
`);
|
|
281
377
|
}
|
|
282
378
|
|
|
283
|
-
function
|
|
284
|
-
|
|
285
|
-
const
|
|
286
|
-
const sourceDocsDir = path.join(pkgRoot, "templates");
|
|
287
|
-
const frameworkDir = path.join(targetDir, fDir);
|
|
379
|
+
export async function initCommand(adapterName: string, options: { unified?: boolean, dryRun?: boolean, yes?: boolean }) {
|
|
380
|
+
const adapterId = (adapterName || "gemini") as AdapterId;
|
|
381
|
+
const adapter = resolveAdapter(adapterId);
|
|
288
382
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
383
|
+
if (!adapter) {
|
|
384
|
+
UI.error(`Unknown adapter: ${adapterId}`);
|
|
385
|
+
process.exit(1);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const projectRoot = process.cwd();
|
|
389
|
+
const isUnified = options.unified || false;
|
|
390
|
+
|
|
391
|
+
// STRICT ISOLATION STRATEGY
|
|
392
|
+
const coreDir = ".enderun"; // Pure Memory & Knowledge
|
|
393
|
+
const aiToolDir = isUnified ? ".agents" : adapter.frameworkDir; // Pure Agents & Skills
|
|
292
394
|
|
|
293
|
-
|
|
294
|
-
|
|
395
|
+
const dryRun = options.dryRun || false;
|
|
396
|
+
const forceYes = options.yes || false;
|
|
397
|
+
|
|
398
|
+
UI.intent("Enderun Initialization", `Bootstrapping ${FRAMEWORK_NAME} (v${FRAMEWORK_VERSION}) with ${adapterId} adapter...`);
|
|
399
|
+
|
|
400
|
+
let selectedDirs: string[];
|
|
401
|
+
let selectedAgents: string[];
|
|
402
|
+
let selectedPalette: string;
|
|
403
|
+
|
|
404
|
+
if (forceYes) {
|
|
405
|
+
selectedDirs = ["knowledge", "prompts", "memory", "router", "registry", "observability", "rules"];
|
|
406
|
+
selectedAgents = ALL_AGENTS.map(a => a.name);
|
|
407
|
+
selectedPalette = "Modern Blue";
|
|
408
|
+
UI.success("Non-interactive mode: Using default configurations.");
|
|
409
|
+
} else {
|
|
410
|
+
const result = await runInteractiveInit();
|
|
411
|
+
selectedDirs = result.selectedDirs.filter(d => d !== "agents" && d !== "skills");
|
|
412
|
+
selectedAgents = result.selectedAgents;
|
|
413
|
+
selectedPalette = result.selectedPalette;
|
|
295
414
|
}
|
|
296
415
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
{ src: "architecture/standards/documentation-ownership.md", dest: "documentation_ownership.md" },
|
|
303
|
-
{ src: "architecture/standards/mobile-standards.md", dest: "mobile_standards.md" },
|
|
304
|
-
{ src: "architecture/standards/crud-governance.md", dest: "crud-governance.md" },
|
|
305
|
-
{ src: "backend/error-handling.md", dest: "error-handling.md" },
|
|
306
|
-
{ src: "frontend/component-patterns.md", dest: "component-patterns.md" },
|
|
307
|
-
{ src: "architecture/enterprise-architecture.md", dest: "enterprise-architecture.md" },
|
|
308
|
-
{ src: "architecture/approval-flows.md", dest: "approval-flows.md" },
|
|
309
|
-
{ src: "architecture/agents-manifest.md", dest: "agents-manifest.md" }
|
|
310
|
-
];
|
|
416
|
+
// 1. Create Core Framework Structure (.enderun) - EXCLUSIVELY FOR DATA
|
|
417
|
+
ensureDir(path.join(projectRoot, coreDir), dryRun);
|
|
418
|
+
["knowledge", "memory", "logs", "observability", "router", "registry", "rules", "prompts"].forEach(dir => {
|
|
419
|
+
ensureDir(path.join(projectRoot, coreDir, dir), dryRun);
|
|
420
|
+
});
|
|
311
421
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (fs.existsSync(srcPath)) {
|
|
317
|
-
let content = fs.readFileSync(srcPath, "utf8");
|
|
318
|
-
content = remapFrameworkContent(content, fDir, fDir === ".github" ? "codex" : "gemini");
|
|
319
|
-
fs.writeFileSync(destPath, content);
|
|
320
|
-
console.warn(`✅ Copied document: ${item.dest} to ${fDir}/${knowledgeDirName}/`);
|
|
321
|
-
}
|
|
322
|
-
} catch (e) {
|
|
323
|
-
console.warn(`⚠️ Failed to copy ${item.src} to ${destPath}: ${e}`);
|
|
324
|
-
}
|
|
422
|
+
// 2. Create AI Tool Specific Structure (.agents, .claude, etc.) - EXCLUSIVELY FOR AGENTS/SKILLS
|
|
423
|
+
ensureDir(path.join(projectRoot, aiToolDir), dryRun);
|
|
424
|
+
if (adapter.nestedDirs) {
|
|
425
|
+
adapter.nestedDirs.forEach(dir => ensureDir(path.join(projectRoot, aiToolDir, dir), dryRun));
|
|
325
426
|
}
|
|
326
|
-
}
|
|
327
427
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
const targetDir = process.cwd();
|
|
331
|
-
const adapter = resolveAdapter(adapterInput);
|
|
332
|
-
const frameworkDirs = [adapter.frameworkDir];
|
|
428
|
+
// 3. Scaffold Constitution (Inside .enderun)
|
|
429
|
+
scaffoldConstitution(projectRoot, coreDir, adapterId, dryRun);
|
|
333
430
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
ensureDir(base, dryRun);
|
|
431
|
+
// 4. Scaffold Core Agents (Inside AI Tool Dir ONLY - Centralized)
|
|
432
|
+
scaffoldAgents(projectRoot, adapterId, dryRun);
|
|
337
433
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
// Scaffold target project docs/ folder
|
|
355
|
-
const targetDocsDir = path.join(targetDir, "docs");
|
|
356
|
-
ensureDir(targetDocsDir, dryRun);
|
|
357
|
-
if (!dryRun) {
|
|
358
|
-
const readmePath = path.join(targetDocsDir, "README.md");
|
|
359
|
-
if (!fs.existsSync(readmePath)) {
|
|
360
|
-
fs.writeFileSync(readmePath, "# 📝 Project Documentation\n\nWelcome to your new project scaffolded with Agent Enderun.\n\n## Project Overview\nWrite your project description, goals, and target audience here. The AI agents will read this file to understand the scope.\n");
|
|
361
|
-
}
|
|
362
|
-
const gettingStartedPath = path.join(targetDocsDir, "getting-started.md");
|
|
363
|
-
if (!fs.existsSync(gettingStartedPath)) {
|
|
364
|
-
fs.writeFileSync(gettingStartedPath, "# 🚀 Getting Started\n\n## Project Requirements\nWrite the core requirements and features of your application here.\n");
|
|
434
|
+
// 5. Scaffold Skills (Inside AI Tool Dir ONLY)
|
|
435
|
+
const skillsBaseDir = path.join(projectRoot, aiToolDir, "skills");
|
|
436
|
+
scaffoldSkills(skillsBaseDir, dryRun);
|
|
437
|
+
|
|
438
|
+
// 6. Scaffold Memory & Knowledge (Inside .enderun ONLY)
|
|
439
|
+
initializeMemory(projectRoot, coreDir, dryRun);
|
|
440
|
+
scaffoldFrameworkConfigs(projectRoot, coreDir, adapter, dryRun, selectedPalette);
|
|
441
|
+
|
|
442
|
+
// 7. Platform Specific Shims (At project root)
|
|
443
|
+
for (const [name, content] of Object.entries(SHIM_TEMPLATES)) {
|
|
444
|
+
if (name.toLowerCase() === adapterId.split("-")[0] || name === adapterId) {
|
|
445
|
+
const shimContent = remapFrameworkContent(content, coreDir, adapterId);
|
|
446
|
+
const shimFileName = adapter.shimFile || `${name.toUpperCase()}.md`;
|
|
447
|
+
if (!dryRun) fs.writeFileSync(path.join(projectRoot, shimFileName), shimContent);
|
|
448
|
+
console.warn(`✅ Platform shim created: ${shimFileName}`);
|
|
365
449
|
}
|
|
366
|
-
console.warn("✅ Project docs folder initialized with placeholders.");
|
|
367
450
|
}
|
|
368
451
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
fs.writeFileSync(path.join(targetDir, "mcp.json"), JSON.stringify(mcpConfig, null, 2));
|
|
372
|
-
|
|
373
|
-
const paths = getConfiguredPaths();
|
|
374
|
-
const frontendDir = path.join(targetDir, paths.frontend);
|
|
375
|
-
ensureDir(frontendDir, dryRun);
|
|
452
|
+
// 8. Run Adapter Post-Init
|
|
453
|
+
runAdapterPostInit(adapter, projectRoot);
|
|
376
454
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
console.warn(
|
|
455
|
+
UI.success(`\n🚀 ${FRAMEWORK_NAME} initialized successfully!`);
|
|
456
|
+
console.warn(`\n- Brain & Memory Hub (Protected): ${coreDir}/`);
|
|
457
|
+
console.warn(`- AI Agent Commands (Active): ${aiToolDir}/`);
|
|
458
|
+
console.warn("\nNext Steps:");
|
|
459
|
+
console.warn(" 1. Run 'agent-enderun status' to verify the environment.");
|
|
460
|
+
console.warn(` 2. Open ${adapterId === "claude" ? "Claude Desktop" : "your AI Assistant"} and start commanding the Army.`);
|
|
382
461
|
}
|
|
@@ -4,6 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import { getFrameworkDir } from "../utils/memory.js";
|
|
5
5
|
import { UI } from "../utils/ui.js";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
+
import { logger } from "../../shared/logger.js";
|
|
7
8
|
|
|
8
9
|
export const HermesMessageSchema = z.object({
|
|
9
10
|
timestamp: z.string(),
|
|
@@ -62,8 +63,9 @@ export async function orchestrateCommand() {
|
|
|
62
63
|
if (updatedStatus) {
|
|
63
64
|
fs.writeFileSync(statusPath, newLines.join("\n"));
|
|
64
65
|
}
|
|
65
|
-
} catch {
|
|
66
|
+
} catch (err) {
|
|
66
67
|
UI.error("Ajan zaman aşımı kontrolü sırasında hata oluştu.");
|
|
68
|
+
logger.debug("Agent timeout check failed", err);
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
|
|
@@ -97,8 +99,9 @@ export async function orchestrateCommand() {
|
|
|
97
99
|
}
|
|
98
100
|
});
|
|
99
101
|
fileMessagesMap[file] = allMsgs;
|
|
100
|
-
} catch {
|
|
102
|
+
} catch (err) {
|
|
101
103
|
UI.error(`${file} mesajı okunurken hata oluştu.`);
|
|
104
|
+
logger.debug(`Failed to read message file ${file}`, err);
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
|
|
@@ -181,8 +184,9 @@ export async function orchestrateCommand() {
|
|
|
181
184
|
fs.appendFileSync(archivePath, archiveContent, "utf8");
|
|
182
185
|
UI.success(`Archived ${processedMsgs.length} messages for @${agentName}`);
|
|
183
186
|
}
|
|
184
|
-
} catch {
|
|
187
|
+
} catch (err) {
|
|
185
188
|
UI.error(`${file} mesaj dosyası güncellenirken ve arşivlenirken hata oluştu.`);
|
|
189
|
+
logger.debug(`Failed to update and archive message file ${file}`, err);
|
|
186
190
|
}
|
|
187
191
|
}
|
|
188
192
|
}
|
|
@@ -203,7 +207,7 @@ export async function sendMessage(args: {
|
|
|
203
207
|
const messagesDir = path.join(frameworkDir, "messages");
|
|
204
208
|
const agentName = args.to.replace("@", "");
|
|
205
209
|
const messagePath = path.join(messagesDir, `${agentName}.json`);
|
|
206
|
-
const lockPath = path.join(messagesDir,
|
|
210
|
+
const lockPath = path.join(messagesDir, `${agentName}.lock`);
|
|
207
211
|
|
|
208
212
|
let retries = 3;
|
|
209
213
|
let acquired = false;
|
|
@@ -215,8 +219,8 @@ export async function sendMessage(args: {
|
|
|
215
219
|
if (Date.now() - stats.mtimeMs > 5000) {
|
|
216
220
|
fs.unlinkSync(lockPath);
|
|
217
221
|
}
|
|
218
|
-
} catch {
|
|
219
|
-
|
|
222
|
+
} catch (err) {
|
|
223
|
+
logger.debug(`Failed to unlink stale Hermes lock for ${agentName} concurrently`, err);
|
|
220
224
|
}
|
|
221
225
|
}
|
|
222
226
|
if (!fs.existsSync(messagesDir)) {
|
|
@@ -263,8 +267,9 @@ export async function sendMessage(args: {
|
|
|
263
267
|
}
|
|
264
268
|
|
|
265
269
|
return message;
|
|
266
|
-
} catch {
|
|
270
|
+
} catch (err) {
|
|
267
271
|
UI.error(`Mesaj iletilemedi: ${args.from} -> ${args.to}`);
|
|
272
|
+
logger.debug(`Hermes sendMessage failed (${args.from} -> ${args.to})`, err);
|
|
268
273
|
} finally {
|
|
269
274
|
if (acquired && fs.existsSync(lockPath)) {
|
|
270
275
|
try {
|
|
@@ -297,7 +302,8 @@ function transitionAgentState(agent: string, state: string, task: string) {
|
|
|
297
302
|
return line;
|
|
298
303
|
});
|
|
299
304
|
fs.writeFileSync(statusPath, newLines.join("\n"));
|
|
300
|
-
} catch {
|
|
305
|
+
} catch (err) {
|
|
301
306
|
UI.error("STATUS.md güncellenemedi.");
|
|
307
|
+
logger.debug(`Failed to transition agent state for ${agent}`, err);
|
|
302
308
|
}
|
|
303
309
|
}
|
|
@@ -3,6 +3,7 @@ import path from "path";
|
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
|
|
5
5
|
import { getMemoryPath, getFrameworkDir } from "../utils/memory.js";
|
|
6
|
+
import { logger } from "../../shared/logger.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Print the current framework status.
|
|
@@ -77,8 +78,8 @@ export function statusCommand() {
|
|
|
77
78
|
}
|
|
78
79
|
});
|
|
79
80
|
}
|
|
80
|
-
} catch {
|
|
81
|
-
|
|
81
|
+
} catch (err) {
|
|
82
|
+
logger.debug("Failed to read army status file", err);
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
|
package/src/cli/index.ts
CHANGED
|
@@ -62,9 +62,10 @@ async function main() {
|
|
|
62
62
|
switch (command) {
|
|
63
63
|
case "init": {
|
|
64
64
|
const dryRun = args.includes("--dry-run");
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
|
|
65
|
+
const isUnified = args.includes("--unified");
|
|
66
|
+
const forceYes = args.includes("--yes") || args.includes("-y");
|
|
67
|
+
const adapter = args.find(a => !a.startsWith("-") && a !== "init") || "gemini";
|
|
68
|
+
await initCommand(adapter, { dryRun, unified: isUnified, yes: forceYes });
|
|
68
69
|
break;
|
|
69
70
|
}
|
|
70
71
|
|
package/src/cli/shims.ts
CHANGED
|
@@ -4,7 +4,7 @@ export const SHIM_TEMPLATES: Record<string, string> = {
|
|
|
4
4
|
You are the **Gemini Commander** (Strategic Decision Center).
|
|
5
5
|
|
|
6
6
|
## 🏛️ Directives
|
|
7
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
7
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
8
8
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
9
9
|
- **Zero-Request Logging:** Write logs to \`{{FRAMEWORK_DIR}}/logs/\` at the end of every turn.
|
|
10
10
|
`,
|
|
@@ -13,7 +13,7 @@ You are the **Gemini Commander** (Strategic Decision Center).
|
|
|
13
13
|
You are the **Antigravity Specialist** (Preserve Coding Standards).
|
|
14
14
|
|
|
15
15
|
## 🏛️ Directives
|
|
16
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
16
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
17
17
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
18
18
|
- **Standard Check:** Run health checks regularly to preserve framework integrity.
|
|
19
19
|
`,
|
|
@@ -22,7 +22,7 @@ You are the **Antigravity Specialist** (Preserve Coding Standards).
|
|
|
22
22
|
You are the **Claude Field Engineer** (Surgical Operations).
|
|
23
23
|
|
|
24
24
|
## 🏛️ Directives
|
|
25
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
25
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
26
26
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
27
27
|
- **Surgical Precision:** Do not rewrite files. Execute surgical edits.
|
|
28
28
|
`,
|
|
@@ -31,7 +31,7 @@ You are the **Claude Field Engineer** (Surgical Operations).
|
|
|
31
31
|
You are the **Grok Explorer** (Experimental Protocols).
|
|
32
32
|
|
|
33
33
|
## 🏛️ Directives
|
|
34
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
34
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
35
35
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
36
36
|
`,
|
|
37
37
|
cursor: `# 🎖️ Enderun Core — CURSOR Strategy
|
|
@@ -39,7 +39,7 @@ You are the **Grok Explorer** (Experimental Protocols).
|
|
|
39
39
|
You are the **Cursor Implementer** (IDE Integration).
|
|
40
40
|
|
|
41
41
|
## 🏛️ Directives
|
|
42
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
42
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
43
43
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
44
44
|
`,
|
|
45
45
|
codex: `# 🎖️ Enderun Core — COPILOT Strategy
|
|
@@ -47,7 +47,7 @@ You are the **Cursor Implementer** (IDE Integration).
|
|
|
47
47
|
You are the **Copilot Implementer** (GitHub Copilot Integration).
|
|
48
48
|
|
|
49
49
|
## 🏛️ Directives
|
|
50
|
-
- **Constitutional Supremacy:** Read \`ENDERUN.md\` first.
|
|
50
|
+
- **Constitutional Supremacy:** Read \`{{FRAMEWORK_DIR}}/ENDERUN.md\` first.
|
|
51
51
|
- **State Persistence:** Read \`{{FRAMEWORK_DIR}}/memory/PROJECT_MEMORY.md\` to restore session memory.
|
|
52
52
|
`
|
|
53
53
|
};
|