agent-enderun 1.0.7 → 1.0.9
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/ARCHITECTURE.md +1 -0
- package/.enderun/BRAIN_DASHBOARD.md +1 -1
- package/.enderun/ENDERUN.md +2 -2
- package/.enderun/SECURITY.md +1 -0
- package/.enderun/STATUS.md +5 -6
- package/.enderun/agents/agent_army_schema.json +71 -77
- package/.enderun/agents/analyst.json +32 -0
- package/.enderun/agents/backend.json +32 -0
- package/.enderun/agents/database.json +32 -0
- package/.enderun/agents/devops.json +32 -0
- package/.enderun/agents/explorer.json +32 -0
- package/.enderun/agents/frontend.json +32 -0
- package/.enderun/agents/git.json +32 -0
- package/.enderun/agents/manager.json +32 -0
- package/.enderun/agents/mobile.json +32 -0
- package/.enderun/agents/native.json +32 -0
- package/.enderun/agents/quality.json +32 -0
- package/.enderun/agents/schema/agent-lifecycle-schema.json +35 -80
- package/.enderun/agents/security.json +32 -0
- package/.enderun/cli-commands.json +7 -5
- package/.enderun/config.json +1 -1
- package/.enderun/knowledge/ARCHITECTURE.md +1 -0
- package/.enderun/knowledge/SECURITY.md +1 -0
- package/.enderun/knowledge/SHIM_TEMPLATE.md +12 -1
- package/.enderun/knowledge/evaluation_engine.md +11 -0
- package/.enderun/knowledge/legacy_onboarding.md +11 -0
- package/.enderun/knowledge/project_scaffold_guidelines.md +11 -0
- package/.enderun/knowledge/reference_application_guidelines.md +11 -0
- package/.enderun/logs/manager.json +52 -23
- package/.enderun/memory/PROJECT_MEMORY.md +14 -12
- package/.enderun/observability/README.md +19 -0
- package/README.md +38 -101
- package/agent.md +1 -1
- package/bin/hermes-sandbox.js +9 -0
- package/bin/init-check.js +9 -0
- package/bin/validate-agent-army.js +34 -92
- package/dist/apps/backend/src/types/index.d.ts +9 -0
- package/dist/apps/backend/src/types/index.js +5 -0
- package/dist/apps/backend/src/types/index.js.map +1 -0
- package/dist/apps/web/src/main.d.ts +1 -0
- package/dist/apps/web/src/main.js +9 -0
- package/dist/apps/web/src/main.js.map +1 -0
- package/dist/apps/web/vite.config.d.ts +2 -0
- package/dist/apps/web/vite.config.js +6 -0
- package/dist/apps/web/vite.config.js.map +1 -0
- package/dist/framework-mcp/src/index.d.ts +1 -0
- package/dist/framework-mcp/src/index.js +71 -0
- package/dist/framework-mcp/src/index.js.map +1 -0
- package/dist/framework-mcp/src/tools/definitions.d.ts +2 -0
- package/dist/framework-mcp/src/tools/definitions.js +111 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.js +19 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js +8 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +32 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js +10 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/get_status.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/get_status.js +6 -0
- package/dist/framework-mcp/src/tools/framework/get_status.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.js +6 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.js +6 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.js +9 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.js.map +1 -0
- package/dist/framework-mcp/src/tools/index.d.ts +5 -0
- package/dist/framework-mcp/src/tools/index.js +26 -0
- package/dist/framework-mcp/src/tools/index.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.d.ts +2 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.js +23 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.d.ts +2 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js +24 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -0
- package/dist/framework-mcp/src/tools/types.d.ts +47 -0
- package/dist/framework-mcp/src/tools/types.js +2 -0
- package/dist/framework-mcp/src/tools/types.js.map +1 -0
- package/dist/framework-mcp/src/utils/cli.d.ts +5 -0
- package/dist/framework-mcp/src/utils/cli.js +21 -0
- package/dist/framework-mcp/src/utils/cli.js.map +1 -0
- package/dist/framework-mcp/src/utils/security.d.ts +12 -0
- package/dist/framework-mcp/src/utils/security.js +54 -0
- package/dist/framework-mcp/src/utils/security.js.map +1 -0
- package/dist/src/cli/adapters.d.ts +32 -0
- package/dist/src/cli/adapters.js +264 -0
- package/dist/src/cli/adapters.js.map +1 -0
- package/dist/src/cli/commands/app.d.ts +4 -0
- package/dist/src/cli/commands/app.js +32 -0
- package/dist/src/cli/commands/app.js.map +1 -0
- package/dist/src/cli/commands/check.d.ts +6 -0
- package/dist/src/cli/commands/check.js +110 -0
- package/dist/src/cli/commands/check.js.map +1 -0
- package/dist/src/cli/commands/compliance.d.ts +1 -0
- package/dist/src/cli/commands/compliance.js +51 -0
- package/dist/src/cli/commands/compliance.js.map +1 -0
- package/dist/src/cli/commands/contract.d.ts +8 -0
- package/dist/src/cli/commands/contract.js +73 -0
- package/dist/src/cli/commands/contract.js.map +1 -0
- package/dist/src/cli/commands/explorer.d.ts +2 -0
- package/dist/src/cli/commands/explorer.js +43 -0
- package/dist/src/cli/commands/explorer.js.map +1 -0
- package/dist/src/cli/commands/git.d.ts +2 -0
- package/dist/src/cli/commands/git.js +41 -0
- package/dist/src/cli/commands/git.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +1 -0
- package/dist/src/cli/commands/init.js +338 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/knowledge.d.ts +2 -0
- package/dist/src/cli/commands/knowledge.js +43 -0
- package/dist/src/cli/commands/knowledge.js.map +1 -0
- package/dist/src/cli/commands/lint.d.ts +4 -0
- package/dist/src/cli/commands/lint.js +24 -0
- package/dist/src/cli/commands/lint.js.map +1 -0
- package/dist/src/cli/commands/log.d.ts +9 -0
- package/dist/src/cli/commands/log.js +33 -0
- package/dist/src/cli/commands/log.js.map +1 -0
- package/dist/src/cli/commands/memory.d.ts +1 -0
- package/dist/src/cli/commands/memory.js +72 -0
- package/dist/src/cli/commands/memory.js.map +1 -0
- package/dist/src/cli/commands/orchestrate.d.ts +1 -0
- package/dist/src/cli/commands/orchestrate.js +111 -0
- package/dist/src/cli/commands/orchestrate.js.map +1 -0
- package/dist/src/cli/commands/script.d.ts +1 -0
- package/dist/src/cli/commands/script.js +20 -0
- package/dist/src/cli/commands/script.js.map +1 -0
- package/dist/src/cli/commands/security.d.ts +1 -0
- package/dist/src/cli/commands/security.js +37 -0
- package/dist/src/cli/commands/security.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +4 -0
- package/dist/src/cli/commands/status.js +56 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/trace.d.ts +4 -0
- package/dist/src/cli/commands/trace.js +42 -0
- package/dist/src/cli/commands/trace.js.map +1 -0
- package/dist/src/cli/index.d.ts +2 -0
- package/dist/src/cli/index.js +117 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/utils/app.d.ts +33 -0
- package/dist/src/cli/utils/app.js +710 -0
- package/dist/src/cli/utils/app.js.map +1 -0
- package/dist/src/cli/utils/claude.d.ts +8 -0
- package/dist/src/cli/utils/claude.js +56 -0
- package/dist/src/cli/utils/claude.js.map +1 -0
- package/dist/src/cli/utils/fs.d.ts +11 -0
- package/dist/src/cli/utils/fs.js +144 -0
- package/dist/src/cli/utils/fs.js.map +1 -0
- package/dist/src/cli/utils/memory.d.ts +14 -0
- package/dist/src/cli/utils/memory.js +173 -0
- package/dist/src/cli/utils/memory.js.map +1 -0
- package/dist/src/cli/utils/pkg.d.ts +24 -0
- package/dist/src/cli/utils/pkg.js +254 -0
- package/dist/src/cli/utils/pkg.js.map +1 -0
- package/dist/src/cli/utils/string.d.ts +6 -0
- package/dist/src/cli/utils/string.js +44 -0
- package/dist/src/cli/utils/string.js.map +1 -0
- package/dist/src/cli/utils/time.d.ts +2 -0
- package/dist/src/cli/utils/time.js +28 -0
- package/dist/src/cli/utils/time.js.map +1 -0
- package/dist/tests/adapter.test.d.ts +1 -0
- package/dist/tests/adapter.test.js +80 -0
- package/dist/tests/adapter.test.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.d.ts +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.js +71 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js +111 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js +19 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js +8 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js +32 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js +10 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js +9 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.d.ts +5 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js +26 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js +23 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js +24 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.d.ts +47 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.d.ts +5 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js +21 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.d.ts +12 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js +54 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.d.ts +1 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js +69 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js.map +1 -0
- package/dist/tests/framework-init-test/panda.config.d.ts +4 -0
- package/dist/tests/framework-init-test/panda.config.js +95 -0
- package/dist/tests/framework-init-test/panda.config.js.map +1 -0
- package/dist/tests/framework-init-test/vitest.config.d.ts +2 -0
- package/dist/tests/framework-init-test/vitest.config.js +19 -0
- package/dist/tests/framework-init-test/vitest.config.js.map +1 -0
- package/dist/tests/gemini.test.d.ts +1 -0
- package/dist/tests/gemini.test.js +38 -0
- package/dist/tests/gemini.test.js.map +1 -0
- package/dist/tests/initial.test.d.ts +1 -0
- package/dist/tests/initial.test.js +7 -0
- package/dist/tests/initial.test.js.map +1 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +19 -0
- package/dist/vitest.config.js.map +1 -0
- package/docs/getting-started.md +4 -4
- package/eslint.config.js +1 -1
- package/framework-mcp/dist/index.js +2 -2
- package/framework-mcp/dist/src/index.js +70 -0
- package/framework-mcp/dist/src/tools/definitions.js +110 -0
- package/framework-mcp/dist/src/tools/file_system/patch_file.js +18 -0
- package/framework-mcp/dist/src/tools/file_system/read_file.js +7 -0
- package/framework-mcp/dist/src/tools/file_system/replace_text.js +31 -0
- package/framework-mcp/dist/src/tools/file_system/write_file.js +9 -0
- package/framework-mcp/dist/src/tools/framework/get_status.js +5 -0
- package/framework-mcp/dist/src/tools/framework/orchestrate.js +5 -0
- package/framework-mcp/dist/src/tools/framework/update_contract_hash.js +5 -0
- package/framework-mcp/dist/src/tools/framework/update_memory.js +8 -0
- package/framework-mcp/dist/src/tools/index.js +25 -0
- package/framework-mcp/dist/src/tools/messaging/log_action.js +22 -0
- package/framework-mcp/dist/src/tools/messaging/send_message.js +23 -0
- package/framework-mcp/dist/src/tools/types.js +1 -0
- package/framework-mcp/dist/src/utils/cli.js +20 -0
- package/framework-mcp/dist/src/utils/security.js +53 -0
- package/framework-mcp/dist/tests/tools/file_system/replace_text.test.js +68 -0
- package/framework-mcp/dist/tools/definitions.js +1 -0
- package/framework-mcp/dist/tools/file_system/replace_text.js +18 -1
- package/framework-mcp/dist/tools/framework/get_status.js +2 -2
- package/framework-mcp/dist/tools/framework/orchestrate.js +2 -2
- package/framework-mcp/dist/tools/framework/update_contract_hash.js +2 -2
- package/framework-mcp/dist/tools/framework/update_memory.js +1 -1
- package/framework-mcp/dist/tools/messaging/send_message.js +4 -2
- package/framework-mcp/dist/utils/cli.js +2 -2
- package/framework-mcp/dist/utils/security.js +23 -5
- package/framework-mcp/package.json +3 -3
- package/framework-mcp/src/index.ts +2 -2
- package/framework-mcp/src/tools/definitions.ts +1 -0
- package/framework-mcp/src/tools/file_system/replace_text.ts +21 -1
- package/framework-mcp/src/tools/framework/get_status.ts +3 -3
- package/framework-mcp/src/tools/framework/orchestrate.ts +3 -3
- package/framework-mcp/src/tools/framework/update_contract_hash.ts +3 -3
- package/framework-mcp/src/tools/framework/update_memory.ts +1 -1
- package/framework-mcp/src/tools/messaging/send_message.ts +5 -2
- package/framework-mcp/src/tools/types.ts +3 -0
- package/framework-mcp/src/utils/cli.ts +2 -2
- package/framework-mcp/src/utils/security.ts +23 -5
- package/framework-mcp/tests/tools/file_system/replace_text.test.js +68 -0
- package/framework-mcp/tests/tools/file_system/replace_text.test.ts +77 -0
- package/framework-mcp/tsconfig.json +1 -2
- package/mcp.json +4 -4
- package/package.json +4 -3
- package/src/cli/adapters.ts +16 -9
- package/src/cli/commands/check.ts +8 -5
- package/src/cli/commands/contract.ts +2 -2
- package/src/cli/commands/init.ts +213 -433
- package/src/cli/commands/memory.ts +5 -0
- package/src/cli/index.ts +12 -9
- package/src/cli/utils/app.ts +19 -16
- package/src/cli/utils/claude.ts +2 -1
- package/src/cli/utils/fs.ts +2 -1
- package/src/cli/utils/memory.ts +2 -2
- package/src/cli/utils/pkg.ts +72 -5
- package/.enderun/agents/analyst.md +0 -32
- package/.enderun/agents/backend.md +0 -49
- package/.enderun/agents/database.md +0 -41
- package/.enderun/agents/devops.md +0 -41
- package/.enderun/agents/explorer.md +0 -40
- package/.enderun/agents/frontend.md +0 -48
- package/.enderun/agents/git.md +0 -41
- package/.enderun/agents/manager.md +0 -43
- package/.enderun/agents/mobile.md +0 -42
- package/.enderun/agents/native.md +0 -41
- package/.enderun/agents/quality.md +0 -40
- package/.enderun/agents/security.md +0 -32
- package/docs/api-referans.md +0 -1137
- package/docs/is_akislari.md +0 -902
- package/docs/mimari.md +0 -926
- package/docs/moduller.md +0 -294
- package/docs/proje.md +0 -521
- package/docs/yap/304/261.md +0 -2150
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { findClaudeConfigPath, addMcpServerToClaude } from "./utils/claude.js";
|
|
4
|
+
import { writeJsonFile, writeTextFile } from "./utils/fs.js";
|
|
5
|
+
export const ADAPTER_IDS = ["gemini", "claude", "grok", "cursor", "codex", "antigravity", "antigravity-cli"];
|
|
6
|
+
export const ADAPTERS = {
|
|
7
|
+
gemini: {
|
|
8
|
+
id: "gemini",
|
|
9
|
+
frameworkDir: ".gemini",
|
|
10
|
+
shimFile: "gemini.md",
|
|
11
|
+
templateDir: ".enderun",
|
|
12
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
13
|
+
},
|
|
14
|
+
claude: {
|
|
15
|
+
id: "claude",
|
|
16
|
+
frameworkDir: ".claude",
|
|
17
|
+
shimFile: "CLAUDE.md",
|
|
18
|
+
templateDir: ".enderun",
|
|
19
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
20
|
+
},
|
|
21
|
+
cursor: {
|
|
22
|
+
id: "cursor",
|
|
23
|
+
frameworkDir: ".enderun",
|
|
24
|
+
shimFile: ".cursor/rules/global.mdc",
|
|
25
|
+
templateDir: ".enderun",
|
|
26
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
27
|
+
},
|
|
28
|
+
codex: {
|
|
29
|
+
id: "codex",
|
|
30
|
+
frameworkDir: ".enderun",
|
|
31
|
+
shimFile: ".github/copilot-instructions.md",
|
|
32
|
+
templateDir: ".enderun",
|
|
33
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
34
|
+
},
|
|
35
|
+
grok: {
|
|
36
|
+
id: "grok",
|
|
37
|
+
frameworkDir: ".grok",
|
|
38
|
+
shimFile: "grok.md",
|
|
39
|
+
templateDir: ".enderun",
|
|
40
|
+
nestedDirs: ["plugins", "agents", "knowledge"],
|
|
41
|
+
},
|
|
42
|
+
antigravity: {
|
|
43
|
+
id: "antigravity",
|
|
44
|
+
frameworkDir: ".agent",
|
|
45
|
+
shimFile: "agent.md",
|
|
46
|
+
templateDir: ".enderun",
|
|
47
|
+
nestedDirs: ["skills", "workflows", "rules", "knowledge"],
|
|
48
|
+
},
|
|
49
|
+
"antigravity-cli": {
|
|
50
|
+
id: "antigravity-cli",
|
|
51
|
+
frameworkDir: ".gemini/antigravity-cli",
|
|
52
|
+
shimFile: "agent.md",
|
|
53
|
+
templateDir: ".enderun",
|
|
54
|
+
nestedDirs: ["agents", "skills"],
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* All framework runtime directories (for discovery).
|
|
59
|
+
* Verified against 2026 industry standards.
|
|
60
|
+
* Includes .agent for direct antigravity adapter installs.
|
|
61
|
+
*/
|
|
62
|
+
export const FRAMEWORK_DIR_CANDIDATES = [
|
|
63
|
+
".enderun",
|
|
64
|
+
".claude",
|
|
65
|
+
".grok",
|
|
66
|
+
".agent",
|
|
67
|
+
".gemini",
|
|
68
|
+
".agents", // Keep .agents for Antigravity-CLI compatibility
|
|
69
|
+
];
|
|
70
|
+
const SHIM_FILES = ADAPTER_IDS.map((id) => ADAPTERS[id].shimFile);
|
|
71
|
+
export function resolveAdapter(input) {
|
|
72
|
+
const normalized = (input || "gemini").toLowerCase();
|
|
73
|
+
let config;
|
|
74
|
+
if (ADAPTER_IDS.includes(normalized)) {
|
|
75
|
+
config = { ...ADAPTERS[normalized] };
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.warn(`⚠️ Unknown adapter "${input}". Falling back to gemini (.gemini/).`);
|
|
79
|
+
config = { ...ADAPTERS.gemini };
|
|
80
|
+
}
|
|
81
|
+
// Dynamic Unified Mode Check:
|
|
82
|
+
// If a root `.enderun` folder exists, --unified flag is passed, or configured in package.json,
|
|
83
|
+
// we override `frameworkDir` to be `.enderun` to avoid folder clutter!
|
|
84
|
+
// We bypass the folder exists check if running unit tests (Vitest) to preserve test integrity.
|
|
85
|
+
const targetDir = process.cwd();
|
|
86
|
+
const enderunExists = fs.existsSync(path.join(targetDir, ".enderun"));
|
|
87
|
+
const hasUnifiedFlag = process.argv.includes("--unified");
|
|
88
|
+
const isTesting = process.env.VITEST === "true" || process.env.NODE_ENV === "test";
|
|
89
|
+
let forceEnderun = (enderunExists && !isTesting) || hasUnifiedFlag;
|
|
90
|
+
try {
|
|
91
|
+
const pkgPath = path.join(targetDir, "package.json");
|
|
92
|
+
if (fs.existsSync(pkgPath)) {
|
|
93
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
94
|
+
if (pkg.enderun && (pkg.enderun.frameworkDir === ".enderun" || pkg.enderun.frameworkDir === "unified")) {
|
|
95
|
+
// Only force enderun if not testing a specific adapter that expects a different frameworkDir
|
|
96
|
+
if (isTesting && config.frameworkDir !== ".enderun") {
|
|
97
|
+
// Do not force .enderun if we are testing adapters that expect a different frameworkDir
|
|
98
|
+
// and this is not a 'unified' adapter.
|
|
99
|
+
if (config.id !== "cursor" && config.id !== "codex") {
|
|
100
|
+
forceEnderun = false;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
forceEnderun = true; // Still force if it's a unified adapter like cursor/codex
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
forceEnderun = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// ignore
|
|
114
|
+
}
|
|
115
|
+
if (forceEnderun) {
|
|
116
|
+
config.frameworkDir = ".enderun";
|
|
117
|
+
// Ensure standard folder names inside .enderun for universal access
|
|
118
|
+
config.nestedDirs = ["agents", "skills", "knowledge"];
|
|
119
|
+
}
|
|
120
|
+
return config;
|
|
121
|
+
}
|
|
122
|
+
export function isAdapterShimFile(fileName) {
|
|
123
|
+
return SHIM_FILES.includes(fileName);
|
|
124
|
+
}
|
|
125
|
+
export function remapFrameworkContent(content, frameworkDir, adapterId) {
|
|
126
|
+
let result = content;
|
|
127
|
+
// 1. Dynamic Agent Folder Mapping based on adapter (Only remap if NOT in unified .enderun mode)
|
|
128
|
+
let agentFolder = "agents";
|
|
129
|
+
let knowledgeFolder = "knowledge";
|
|
130
|
+
if (frameworkDir !== ".enderun") {
|
|
131
|
+
if (adapterId === "antigravity") {
|
|
132
|
+
agentFolder = "skills";
|
|
133
|
+
knowledgeFolder = "rules";
|
|
134
|
+
}
|
|
135
|
+
else if (adapterId === "grok") {
|
|
136
|
+
agentFolder = "plugins";
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// 2. Replacements
|
|
140
|
+
result = result.replace(/\{\{FRAMEWORK_DIR\}\}/g, frameworkDir);
|
|
141
|
+
result = result.replace(/\{\{ADAPTER\}\}/g, adapterId);
|
|
142
|
+
// Replace standard patterns with adapter-specific ones
|
|
143
|
+
const frameworkPattern = ".enderun/";
|
|
144
|
+
result = result.replace(new RegExp(frameworkPattern + "agents/", "g"), `${frameworkDir}/${agentFolder}/`);
|
|
145
|
+
result = result.replace(new RegExp(frameworkPattern + "knowledge/", "g"), `${frameworkDir}/${knowledgeFolder}/`);
|
|
146
|
+
// Generic fallback for other .enderun/ paths
|
|
147
|
+
result = result.replace(/\.enderun\//g, `${frameworkDir}/`);
|
|
148
|
+
result = result.replace(/`\.enderun`/g, `\`${frameworkDir}\``);
|
|
149
|
+
result = result.replace(/\.enderun(?![\w/-])/g, frameworkDir);
|
|
150
|
+
// Read config paths dynamically to map directory tokens
|
|
151
|
+
let backend = "apps/backend";
|
|
152
|
+
let frontend = "apps/web";
|
|
153
|
+
let docs = "docs";
|
|
154
|
+
let tests = "tests";
|
|
155
|
+
try {
|
|
156
|
+
const configPath = path.join(process.cwd(), frameworkDir, "config.json");
|
|
157
|
+
if (fs.existsSync(configPath)) {
|
|
158
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
159
|
+
if (config.paths) {
|
|
160
|
+
if (config.paths.backend)
|
|
161
|
+
backend = config.paths.backend;
|
|
162
|
+
if (config.paths.frontend)
|
|
163
|
+
frontend = config.paths.frontend;
|
|
164
|
+
if (config.paths.docs)
|
|
165
|
+
docs = config.paths.docs;
|
|
166
|
+
if (config.paths.tests)
|
|
167
|
+
tests = config.paths.tests;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// ignore
|
|
173
|
+
}
|
|
174
|
+
result = result.replace(/\{\{BACKEND_DIR\}\}/g, backend);
|
|
175
|
+
result = result.replace(/\{\{FRONTEND_DIR\}\}/g, frontend);
|
|
176
|
+
result = result.replace(/\{\{DOCS_DIR\}\}/g, docs);
|
|
177
|
+
result = result.replace(/\{\{TESTS_DIR\}\}/g, tests);
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
export function buildMcpServerEntry(projectRoot) {
|
|
181
|
+
return {
|
|
182
|
+
command: "node",
|
|
183
|
+
args: [path.join(projectRoot, "framework-mcp/dist/index.js")],
|
|
184
|
+
env: {},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function writeAntigravityScaffold(frameworkDirPath) {
|
|
188
|
+
const antigravityReadme = `# Antigravity IDE — Agent Enderun
|
|
189
|
+
|
|
190
|
+
Antigravity IDE integration for the Gemini adapter.
|
|
191
|
+
|
|
192
|
+
- Framework root: \`${path.basename(frameworkDirPath)}/\`
|
|
193
|
+
- Nested path: \`antigravity/\`
|
|
194
|
+
- Use the parent \`mcp_config.json\` and \`gemini.md\` entrypoint at the project root.
|
|
195
|
+
`;
|
|
196
|
+
const antigravityCliReadme = `# Antigravity CLI — Agent Enderun
|
|
197
|
+
|
|
198
|
+
Antigravity CLI integration for the Gemini adapter.
|
|
199
|
+
|
|
200
|
+
- Framework root: \`${path.basename(frameworkDirPath)}/\`
|
|
201
|
+
- Nested path: \`antigravity-cli/\`
|
|
202
|
+
- Register MCP from the project root \`mcp.json\` or \`.gemini/mcp_config.json\`.
|
|
203
|
+
`;
|
|
204
|
+
writeTextFile(path.join(frameworkDirPath, "antigravity/README.md"), antigravityReadme);
|
|
205
|
+
writeTextFile(path.join(frameworkDirPath, "antigravity-cli/README.md"), antigravityCliReadme);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Adapter-specific MCP and IDE hooks after scaffold.
|
|
209
|
+
*/
|
|
210
|
+
export function runAdapterPostInit(adapter, projectRoot) {
|
|
211
|
+
const mcpEntry = buildMcpServerEntry(projectRoot);
|
|
212
|
+
const mcpBlock = { mcpServers: { "agent-enderun": mcpEntry } };
|
|
213
|
+
switch (adapter.id) {
|
|
214
|
+
case "gemini": {
|
|
215
|
+
writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
|
|
216
|
+
writeAntigravityScaffold(path.join(projectRoot, adapter.frameworkDir));
|
|
217
|
+
console.warn(`✅ Gemini MCP → ${adapter.frameworkDir}/mcp_config.json`);
|
|
218
|
+
console.warn(`✅ Antigravity → ${adapter.frameworkDir}/antigravity/ & antigravity-cli/`);
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case "antigravity": {
|
|
222
|
+
writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
|
|
223
|
+
console.warn(`✅ Antigravity IDE MCP → ${adapter.frameworkDir}/mcp_config.json`);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case "antigravity-cli": {
|
|
227
|
+
writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
|
|
228
|
+
console.warn(`✅ Antigravity CLI MCP → ${adapter.frameworkDir}/mcp_config.json`);
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
case "grok": {
|
|
232
|
+
writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
|
|
233
|
+
console.warn(`✅ Grok MCP → ${adapter.frameworkDir}/mcp_config.json`);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "claude": {
|
|
237
|
+
const configPath = findClaudeConfigPath();
|
|
238
|
+
if (configPath) {
|
|
239
|
+
const ok = addMcpServerToClaude(configPath, "agent-enderun", mcpEntry);
|
|
240
|
+
if (ok) {
|
|
241
|
+
console.warn(`✅ Claude MCP registered → ${configPath}`);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
console.warn("⚠️ Could not patch Claude config automatically.");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.warn("⚠️ Claude config not found. Add MCP manually (see README).");
|
|
249
|
+
}
|
|
250
|
+
writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
|
|
251
|
+
writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
|
|
252
|
+
console.warn("✅ Claude Code Project MCP → .mcp.json");
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
default:
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
// Keep root mcp.json in sync when missing or empty
|
|
259
|
+
const rootMcpPath = path.join(projectRoot, "mcp.json");
|
|
260
|
+
if (!fs.existsSync(rootMcpPath)) {
|
|
261
|
+
writeJsonFile(rootMcpPath, mcpBlock);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/cli/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { updateMemoryForGeneratedApp, collectCreateAppDescription, inferAppSpec, createBackendFiles, createWebFiles, updateProjectDocs } from "../utils/app.js";
|
|
3
|
+
import { traceNewCommand } from "./trace.js";
|
|
4
|
+
import { getMemoryPath } from "../utils/memory.js";
|
|
5
|
+
/**
|
|
6
|
+
* Generate a new application based on natural language input.
|
|
7
|
+
*/
|
|
8
|
+
export async function createAppCommand(args) {
|
|
9
|
+
const description = await collectCreateAppDescription(args);
|
|
10
|
+
const spec = inferAppSpec(description);
|
|
11
|
+
console.warn(`🚀 Generating Enterprise App: ${spec.title}...`);
|
|
12
|
+
createBackendFiles(spec);
|
|
13
|
+
createWebFiles(spec);
|
|
14
|
+
updateProjectDocs(spec);
|
|
15
|
+
const memoryPath = getMemoryPath();
|
|
16
|
+
let traceId = "01HGT8J5E2N0W0W0W0W0W0W0W0"; // default fallback
|
|
17
|
+
if (fs.existsSync(memoryPath)) {
|
|
18
|
+
const memory = fs.readFileSync(memoryPath, "utf8");
|
|
19
|
+
const match = memory.match(/- Trace ID: (.*)/);
|
|
20
|
+
if (match)
|
|
21
|
+
traceId = match[1].trim();
|
|
22
|
+
}
|
|
23
|
+
const activeTraceId = traceNewCommand(`Generate ${spec.title} from natural language request`, "manager", "P1") || traceId;
|
|
24
|
+
updateMemoryForGeneratedApp(spec, activeTraceId);
|
|
25
|
+
console.warn("\n✨ Application scaffolded successfully!");
|
|
26
|
+
console.warn("📜 Updated project docs and app-local types contract");
|
|
27
|
+
console.warn("\nNext commands:");
|
|
28
|
+
console.warn(" npm install");
|
|
29
|
+
console.warn(" npm run enderun:build");
|
|
30
|
+
console.warn(" agent-enderun frontend:dev\n");
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/cli/commands/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChK,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAc;IACjD,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAEvC,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAE/D,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzB,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,4BAA4B,CAAC,CAAC,mBAAmB;IAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,IAAI,CAAC,KAAK,gCAAgC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC;IAC1H,2BAA2B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAEjD,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { getFrameworkDir, getConfiguredPaths, getMemoryPath } from "../utils/memory.js";
|
|
5
|
+
import { getPackageVersion, getValidatorPath } from "../utils/pkg.js"; // To get FRAMEWORK_VERSION + robust npm-installed bin/validator resolution
|
|
6
|
+
const FRAMEWORK_VERSION = getPackageVersion();
|
|
7
|
+
/**
|
|
8
|
+
* Check framework health and MCP status.
|
|
9
|
+
* Now also runs full AL (Agent Lifecycle) army validation so that
|
|
10
|
+
* `agent-enderun check` guarantees that init setups are AL-compliant.
|
|
11
|
+
*/
|
|
12
|
+
export function checkCommand() {
|
|
13
|
+
console.warn(`🔍 Checking Agent Enderun Health (v${FRAMEWORK_VERSION})...`);
|
|
14
|
+
let issues = 0;
|
|
15
|
+
const frameworkDir = getFrameworkDir();
|
|
16
|
+
const pathsMap = getConfiguredPaths();
|
|
17
|
+
const memoryPath = getMemoryPath();
|
|
18
|
+
console.warn(` Using framework dir: ${frameworkDir} (AL cross-adapter aware)`);
|
|
19
|
+
// Determine folder names based on adapter detection (AL + cross-adapter support)
|
|
20
|
+
let knowledgeDir = "knowledge";
|
|
21
|
+
if (frameworkDir === ".agents" || frameworkDir === ".agent") {
|
|
22
|
+
knowledgeDir = "rules";
|
|
23
|
+
}
|
|
24
|
+
const constitutionPath = fs.existsSync(path.join(process.cwd(), "ENDERUN.md"))
|
|
25
|
+
? "ENDERUN.md"
|
|
26
|
+
: path.join(frameworkDir, "ENDERUN.md");
|
|
27
|
+
const checks = [
|
|
28
|
+
{ name: "Constitution (ENDERUN.md)", path: constitutionPath },
|
|
29
|
+
{ name: "Memory (PROJECT_MEMORY.md)", path: path.relative(process.cwd(), memoryPath) },
|
|
30
|
+
{ name: "Command Map (cli-commands.json)", path: path.join(frameworkDir, "cli-commands.json") },
|
|
31
|
+
{ name: "Framework Config (config.json)", path: path.join(frameworkDir, "config.json") },
|
|
32
|
+
{ name: "Agent Status (STATUS.md)", path: path.join(frameworkDir, "STATUS.md") },
|
|
33
|
+
{ name: "MCP Config (mcp.json)", path: "mcp.json" },
|
|
34
|
+
{ name: "ESLint Config (eslint.config.js)", path: "eslint.config.js" },
|
|
35
|
+
{ name: "ESLint Standards", path: path.join(frameworkDir, `${knowledgeDir}/eslint-standards.md`) },
|
|
36
|
+
{ name: "Backend Contract", path: path.join(pathsMap.backend, "contract.version.json") },
|
|
37
|
+
{ name: "MCP Server", path: "framework-mcp/package.json" },
|
|
38
|
+
{ name: "Panda CSS Config", path: "panda.config.ts" },
|
|
39
|
+
{ name: "Brain Dashboard", path: path.join(frameworkDir, "BRAIN_DASHBOARD.md") },
|
|
40
|
+
{ name: "Project Architectural Portal (docs/README.md)", path: path.join(pathsMap.docs, "README.md") },
|
|
41
|
+
{ name: "System Getting Started Guide (docs/getting-started.md)", path: path.join(pathsMap.docs, "getting-started.md") },
|
|
42
|
+
{ name: "Enterprise Approval Flows Protocol", path: path.join(pathsMap.docs, "architecture/approval-flows.md") },
|
|
43
|
+
{ name: "Professional Error Handling Pattern", path: path.join(pathsMap.docs, "backend/error-handling.md") },
|
|
44
|
+
{ name: "Atomic Component Standards", path: path.join(pathsMap.docs, "frontend/component-patterns.md") },
|
|
45
|
+
];
|
|
46
|
+
for (const check of checks) {
|
|
47
|
+
if (fs.existsSync(path.join(process.cwd(), check.path))) {
|
|
48
|
+
console.warn(`✅ ${check.name} found.`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.warn(`❌ ${check.name} MISSING! (${check.path})`);
|
|
52
|
+
issues++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Dependency Check
|
|
56
|
+
const mcpNodeModules = path.join(process.cwd(), "framework-mcp/node_modules");
|
|
57
|
+
const rootNodeModules = path.join(process.cwd(), "node_modules");
|
|
58
|
+
if (!fs.existsSync(mcpNodeModules) && !fs.existsSync(rootNodeModules)) {
|
|
59
|
+
console.warn("❌ Dependencies MISSING! (Run 'npm install')");
|
|
60
|
+
issues++;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.warn("✅ Dependencies found.");
|
|
64
|
+
}
|
|
65
|
+
// MCP Build Check
|
|
66
|
+
const mcpPath = path.join(process.cwd(), "framework-mcp/dist/index.js");
|
|
67
|
+
if (!fs.existsSync(mcpPath)) {
|
|
68
|
+
console.warn("❌ MCP Build MISSING! (Run 'npm run enderun:build')");
|
|
69
|
+
issues++;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.warn("✅ MCP Build found.");
|
|
73
|
+
console.warn("⏳ Testing MCP Server syntax...");
|
|
74
|
+
try {
|
|
75
|
+
execSync(`node --check ${mcpPath}`, { stdio: "pipe" });
|
|
76
|
+
console.warn("✅ MCP Server syntax valid.");
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// If --check fails on ESM, we might skip it or use a better check
|
|
80
|
+
console.warn("⚠️ MCP Syntax check skipped (ESM/Environment).");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// === AL (Agent Lifecycle) Army Validation ===
|
|
84
|
+
// This makes `agent-enderun check` also enforce that init'ed agents are AL-compliant
|
|
85
|
+
// (stateMachine + tags present and parseable). Works across adapters (skills/plugins/agents).
|
|
86
|
+
// Uses getValidatorPath() so it resolves inside node_modules/... when installed via npm (not just source cwd).
|
|
87
|
+
console.warn("\n🛡️ Running Agent Army AL Compliance (validate-agent-army)...");
|
|
88
|
+
try {
|
|
89
|
+
const validatorPath = getValidatorPath();
|
|
90
|
+
execSync(`node "${validatorPath}"`, { stdio: "pipe" });
|
|
91
|
+
console.warn("✅ Agent Army AL validation PASSED (all agents have stateMachine + tags).");
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
console.warn("❌ Agent Army AL validation FAILED.");
|
|
95
|
+
console.warn(" Run manually: agent-enderun validate (or: npx agent-enderun validate-army)");
|
|
96
|
+
console.warn(" This usually means your init used an adapter that remapped agents (e.g. antigravity → skills).");
|
|
97
|
+
console.warn(" The core .md definitions should still be correct; the standalone validator just couldn't locate them.");
|
|
98
|
+
console.warn(" (Note: from npm package, bare 'node bin/...' will not work — use the CLI command above.)");
|
|
99
|
+
issues++;
|
|
100
|
+
}
|
|
101
|
+
if (issues === 0) {
|
|
102
|
+
console.warn("\n🚀 All systems green! Agent Enderun is ready for orchestration.");
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.warn(`
|
|
106
|
+
⚠️ Found ${issues} issues. Please fix them before starting.`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function complianceCheckCommand(targetPath: string): void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { collectFiles } from "../utils/fs.js";
|
|
4
|
+
const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
|
|
5
|
+
export function complianceCheckCommand(targetPath) {
|
|
6
|
+
console.warn(`📜 Checking Constitution Compliance: ${targetPath}...`);
|
|
7
|
+
const violations = [];
|
|
8
|
+
const forbidden = ["@shadcn", "mui", "@chakra-ui", "tailwindcss"];
|
|
9
|
+
// 1. package.json scan (Blind Spot 5)
|
|
10
|
+
const pkgJsonPath = path.join(targetDir, "package.json");
|
|
11
|
+
if (fs.existsSync(pkgJsonPath)) {
|
|
12
|
+
try {
|
|
13
|
+
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
|
|
14
|
+
const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
15
|
+
forbidden.forEach(lib => {
|
|
16
|
+
if (allDeps[lib] || Object.keys(allDeps).some(d => d.toLowerCase().includes(lib.toLowerCase()))) {
|
|
17
|
+
violations.push(`package.json: Forbidden library dependency '${lib}' found in package.json.`);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// ignore
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// 2. Source files scan
|
|
26
|
+
const files = collectFiles(path.join(targetDir, targetPath), [".ts", ".tsx", ".js", ".jsx", ".md"]);
|
|
27
|
+
files.forEach(f => {
|
|
28
|
+
const isTypesFile = f.includes("brands.ts") || f.includes("brands.js") || f.includes("brands.tsx") || f.includes("src/types/brands");
|
|
29
|
+
const content = fs.readFileSync(f, "utf8");
|
|
30
|
+
forbidden.forEach(lib => {
|
|
31
|
+
if (content.includes(lib))
|
|
32
|
+
violations.push(`${path.relative(targetDir, f)}: Forbidden library '${lib}' found.`);
|
|
33
|
+
});
|
|
34
|
+
// Robust Branded Types validation (Blind Spot 4)
|
|
35
|
+
if ((f.endsWith(".ts") || f.endsWith(".tsx")) && !isTypesFile && content.includes("interface")) {
|
|
36
|
+
const plainIdMatches = content.match(/\b\w*(?:id|Id|ID)\??\s*:\s*(?:string|number)\b/g);
|
|
37
|
+
if (plainIdMatches) {
|
|
38
|
+
plainIdMatches.forEach(match => {
|
|
39
|
+
violations.push(`${path.relative(targetDir, f)}: Potential Branded Types violation (plain identifier '${match.trim()}' found inside interface).`);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
if (violations.length === 0) {
|
|
45
|
+
console.warn("✅ All systems compliant with ENDERUN.md.");
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
violations.forEach(v => console.warn(`❌ ${v}`));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../../src/cli/commands/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify type safety between backend and frontend contracts.
|
|
3
|
+
*/
|
|
4
|
+
export declare function verifyApiContractCommand(): void;
|
|
5
|
+
/**
|
|
6
|
+
* Update and synchronize type safety between backend and frontend contracts.
|
|
7
|
+
*/
|
|
8
|
+
export declare function updateApiContractCommand(): void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
import { getConfiguredPaths } from "../utils/memory.js";
|
|
5
|
+
/**
|
|
6
|
+
* Verify type safety between backend and frontend contracts.
|
|
7
|
+
*/
|
|
8
|
+
export function verifyApiContractCommand() {
|
|
9
|
+
const projectRoot = process.cwd();
|
|
10
|
+
const pathsMap = getConfiguredPaths();
|
|
11
|
+
const sharedDir = path.join(projectRoot, pathsMap.backend, "src/types");
|
|
12
|
+
const contractPath = path.join(projectRoot, pathsMap.backend, "contract.version.json");
|
|
13
|
+
if (!fs.existsSync(sharedDir) || !fs.existsSync(contractPath)) {
|
|
14
|
+
console.error("❌ Error: API types or contract version file missing.");
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const walk = (d) => fs.readdirSync(d, { withFileTypes: true }).flatMap((e) => {
|
|
18
|
+
const fullPath = path.join(d, e.name);
|
|
19
|
+
return e.isDirectory() ? walk(fullPath) : (e.name.endsWith(".ts") ? [fullPath] : []);
|
|
20
|
+
});
|
|
21
|
+
const hash = crypto.createHash("sha256");
|
|
22
|
+
for (const filePath of walk(sharedDir).sort()) {
|
|
23
|
+
hash.update(path.relative(projectRoot, filePath));
|
|
24
|
+
hash.update("\0");
|
|
25
|
+
hash.update(fs.readFileSync(filePath));
|
|
26
|
+
hash.update("\0");
|
|
27
|
+
}
|
|
28
|
+
const currentHash = hash.digest("hex");
|
|
29
|
+
const contract = JSON.parse(fs.readFileSync(contractPath, "utf8"));
|
|
30
|
+
if (contract.contract_hash === currentHash) {
|
|
31
|
+
console.warn("✅ Contract is valid and synchronized.");
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error("❌ Error: Contract drift detected!");
|
|
35
|
+
console.error(` Stored: ${contract.contract_hash}`);
|
|
36
|
+
console.error(` Actual: ${currentHash}`);
|
|
37
|
+
console.warn("\n👉 Run 'npm run update-contract' to re-sync.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Update and synchronize type safety between backend and frontend contracts.
|
|
43
|
+
*/
|
|
44
|
+
export function updateApiContractCommand() {
|
|
45
|
+
const projectRoot = process.cwd();
|
|
46
|
+
const pathsMap = getConfiguredPaths();
|
|
47
|
+
const sharedDir = path.join(projectRoot, pathsMap.backend, "src/types");
|
|
48
|
+
const contractPath = path.join(projectRoot, pathsMap.backend, "contract.version.json");
|
|
49
|
+
if (!fs.existsSync(sharedDir)) {
|
|
50
|
+
console.error("❌ Error: API types directory missing.");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const walk = (d) => fs.readdirSync(d, { withFileTypes: true }).flatMap((e) => {
|
|
54
|
+
const fullPath = path.join(d, e.name);
|
|
55
|
+
return e.isDirectory() ? walk(fullPath) : (e.name.endsWith(".ts") ? [fullPath] : []);
|
|
56
|
+
});
|
|
57
|
+
const hash = crypto.createHash("sha256");
|
|
58
|
+
for (const filePath of walk(sharedDir).sort()) {
|
|
59
|
+
hash.update(path.relative(projectRoot, filePath));
|
|
60
|
+
hash.update("\0");
|
|
61
|
+
hash.update(fs.readFileSync(filePath));
|
|
62
|
+
hash.update("\0");
|
|
63
|
+
}
|
|
64
|
+
const currentHash = hash.digest("hex");
|
|
65
|
+
const contractData = {
|
|
66
|
+
contract_hash: currentHash,
|
|
67
|
+
last_updated: new Date().toISOString()
|
|
68
|
+
};
|
|
69
|
+
fs.mkdirSync(path.dirname(contractPath), { recursive: true });
|
|
70
|
+
fs.writeFileSync(contractPath, JSON.stringify(contractData, null, 2));
|
|
71
|
+
console.warn(`✅ Contract successfully synchronized. New hash: ${currentHash}`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../src/cli/commands/contract.ts"],"names":[],"mappings":"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"}
|