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/src/cli/utils/memory.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { sleep } from "./time.js";
|
|
|
5
5
|
import { generateULID } from "./time.js";
|
|
6
6
|
import { FRAMEWORK_DIR_CANDIDATES } from "../adapters.js";
|
|
7
7
|
import { EnderunConfigSchema } from "./config-schema.js";
|
|
8
|
+
import { logger } from "../../shared/logger.js";
|
|
8
9
|
|
|
9
10
|
const CWD = process.cwd();
|
|
10
11
|
const HOME = os.homedir();
|
|
@@ -19,7 +20,9 @@ function findFrameworkDir(basePath: string): string | null {
|
|
|
19
20
|
if (fs.existsSync(customDir)) return customDir;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
} catch {
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logger.debug("Failed to read package.json in findFrameworkDir", err);
|
|
25
|
+
}
|
|
23
26
|
|
|
24
27
|
for (const dir of FRAMEWORK_DIR_CANDIDATES) {
|
|
25
28
|
const dirPath = path.join(basePath, dir);
|
|
@@ -71,8 +74,9 @@ export function getConfiguredPaths(): { backend: string; frontend: string; docs:
|
|
|
71
74
|
result.error.issues.forEach(err => console.error(` - ${err.path.join(".")}: ${err.message}`));
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
|
-
} catch {
|
|
77
|
+
} catch (err) {
|
|
75
78
|
console.error("\n❌ Critical Error: Could not read or parse configuration file.");
|
|
79
|
+
logger.debug("Critical config read failure", err);
|
|
76
80
|
}
|
|
77
81
|
return defaultPaths;
|
|
78
82
|
}
|
|
@@ -100,8 +104,8 @@ export function acquireMemoryLock(lockPath: string, maxRetries = 5): boolean {
|
|
|
100
104
|
return true;
|
|
101
105
|
}
|
|
102
106
|
}
|
|
103
|
-
} catch {
|
|
104
|
-
|
|
107
|
+
} catch (err) {
|
|
108
|
+
logger.debug("Lock check or breaking failed", err);
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
if (attempt < maxRetries - 1) sleep(1000);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import type { AdapterConfig, AdapterId } from "../../cli/adapters/types.js";
|
|
3
|
+
import { addMcpServerToClaude, findClaudeConfigPath } from "../../cli/utils/claude.js";
|
|
4
|
+
import { writeJsonFile } from "../../shared/fs.js";
|
|
5
|
+
import { registerGlobalAntigravityPlugins } from "./shared.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mapped Adapter Configurations
|
|
9
|
+
*/
|
|
10
|
+
export const ADAPTER_CONFIGS: Record<AdapterId, AdapterConfig> = {
|
|
11
|
+
gemini: {
|
|
12
|
+
id: "gemini",
|
|
13
|
+
frameworkDir: ".antigravity",
|
|
14
|
+
shimFile: "GEMINI.md",
|
|
15
|
+
shimTemplate: "src/cli/shims/gemini.md",
|
|
16
|
+
role: "commander",
|
|
17
|
+
templateDir: ".enderun",
|
|
18
|
+
nestedDirs: ["plugins", "rules"],
|
|
19
|
+
agentsDir: ".antigravity/plugins",
|
|
20
|
+
agentsExt: ".md"
|
|
21
|
+
},
|
|
22
|
+
claude: {
|
|
23
|
+
id: "claude",
|
|
24
|
+
frameworkDir: ".claude",
|
|
25
|
+
shimFile: "CLAUDE.md",
|
|
26
|
+
shimTemplate: "src/cli/shims/claude.md",
|
|
27
|
+
role: "architect",
|
|
28
|
+
templateDir: ".enderun",
|
|
29
|
+
nestedDirs: ["agents", "rules"],
|
|
30
|
+
agentsDir: ".claude/agents",
|
|
31
|
+
agentsExt: ".md"
|
|
32
|
+
},
|
|
33
|
+
grok: {
|
|
34
|
+
id: "grok",
|
|
35
|
+
frameworkDir: ".grok",
|
|
36
|
+
shimFile: "GROK.md",
|
|
37
|
+
shimTemplate: "src/cli/shims/grok.md",
|
|
38
|
+
role: "researcher",
|
|
39
|
+
templateDir: ".enderun",
|
|
40
|
+
nestedDirs: ["rules"],
|
|
41
|
+
agentsDir: ".grok",
|
|
42
|
+
agentsExt: ".md"
|
|
43
|
+
},
|
|
44
|
+
cursor: {
|
|
45
|
+
id: "cursor",
|
|
46
|
+
frameworkDir: ".cursor",
|
|
47
|
+
shimFile: "CURSOR.md",
|
|
48
|
+
shimTemplate: "src/cli/shims/cursor.mdc",
|
|
49
|
+
role: "implementer",
|
|
50
|
+
templateDir: ".enderun",
|
|
51
|
+
nestedDirs: ["rules"],
|
|
52
|
+
agentsDir: ".cursor/rules",
|
|
53
|
+
agentsExt: ".mdc"
|
|
54
|
+
},
|
|
55
|
+
codex: {
|
|
56
|
+
id: "codex",
|
|
57
|
+
frameworkDir: ".agents",
|
|
58
|
+
shimFile: "copilot-instructions.md",
|
|
59
|
+
shimTemplate: "src/cli/shims/codex.md",
|
|
60
|
+
role: "implementer",
|
|
61
|
+
templateDir: ".enderun",
|
|
62
|
+
nestedDirs: ["skills", "rules", "instructions"],
|
|
63
|
+
agentsDir: ".agents/skills",
|
|
64
|
+
agentsExt: ".md"
|
|
65
|
+
},
|
|
66
|
+
"antigravity-cli": {
|
|
67
|
+
id: "antigravity-cli",
|
|
68
|
+
frameworkDir: ".antigravity",
|
|
69
|
+
shimFile: "AGENTS.md",
|
|
70
|
+
shimTemplate: "src/cli/shims/antigravity-cli.md",
|
|
71
|
+
role: "general",
|
|
72
|
+
templateDir: ".enderun",
|
|
73
|
+
nestedDirs: ["agents", "plugins", "rules"],
|
|
74
|
+
agentsDir: ".antigravity/agents",
|
|
75
|
+
agentsExt: ".md"
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Post-Initialization Handlers for specific adapters
|
|
81
|
+
*/
|
|
82
|
+
export const POST_INIT_HANDLERS: Record<AdapterId, (projectRoot: string, mcpBlock: unknown) => void> = {
|
|
83
|
+
gemini: (projectRoot, mcpBlock) => {
|
|
84
|
+
const frameworkDir = ADAPTER_CONFIGS.gemini.frameworkDir;
|
|
85
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
|
|
86
|
+
console.warn(`✅ Gemini MCP registered → ${frameworkDir}/mcp.json`);
|
|
87
|
+
registerGlobalAntigravityPlugins(mcpBlock);
|
|
88
|
+
},
|
|
89
|
+
claude: (projectRoot, mcpBlock) => {
|
|
90
|
+
const configPath = findClaudeConfigPath();
|
|
91
|
+
if (configPath) {
|
|
92
|
+
const block = mcpBlock as { mcpServers: Record<string, unknown> };
|
|
93
|
+
const mcpEntry = block.mcpServers["agent-enderun"] as Record<string, unknown>;
|
|
94
|
+
const ok = addMcpServerToClaude(configPath, "agent-enderun", mcpEntry);
|
|
95
|
+
if (ok) console.warn(`✅ Claude MCP registered → ${configPath}`);
|
|
96
|
+
}
|
|
97
|
+
const frameworkDir = ADAPTER_CONFIGS.claude.frameworkDir;
|
|
98
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
|
|
99
|
+
writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
|
|
100
|
+
console.warn("✅ Claude Code Project MCP → .mcp.json");
|
|
101
|
+
},
|
|
102
|
+
grok: (projectRoot, mcpBlock) => {
|
|
103
|
+
const frameworkDir = ADAPTER_CONFIGS.grok.frameworkDir;
|
|
104
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
|
|
105
|
+
console.warn(`✅ Grok MCP → ${frameworkDir}/mcp_config.json`);
|
|
106
|
+
},
|
|
107
|
+
cursor: (projectRoot, mcpBlock) => {
|
|
108
|
+
const frameworkDir = ADAPTER_CONFIGS.cursor.frameworkDir;
|
|
109
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp.json"), mcpBlock);
|
|
110
|
+
console.warn(`✅ Cursor IDE Project MCP → ${frameworkDir}/mcp.json`);
|
|
111
|
+
},
|
|
112
|
+
codex: (projectRoot, mcpBlock) => {
|
|
113
|
+
const frameworkDir = ADAPTER_CONFIGS.codex.frameworkDir;
|
|
114
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
|
|
115
|
+
writeJsonFile(path.join(projectRoot, ".vscode/mcp.json"), mcpBlock);
|
|
116
|
+
writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
|
|
117
|
+
console.warn("✅ GitHub Copilot Project MCP → .vscode/mcp.json & .mcp.json");
|
|
118
|
+
},
|
|
119
|
+
"antigravity-cli": (projectRoot, mcpBlock) => {
|
|
120
|
+
const frameworkDir = ADAPTER_CONFIGS["antigravity-cli"].frameworkDir;
|
|
121
|
+
writeJsonFile(path.join(projectRoot, frameworkDir, "mcp_config.json"), mcpBlock);
|
|
122
|
+
console.warn(`✅ Antigravity CLI MCP → ${frameworkDir}/mcp_config.json`);
|
|
123
|
+
registerGlobalAntigravityPlugins(mcpBlock);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
@@ -14,13 +14,13 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
14
14
|
{
|
|
15
15
|
name: "manager",
|
|
16
16
|
displayName: "Manager (Orchestrator)",
|
|
17
|
-
role: "Orchestration",
|
|
18
|
-
description: "The Supreme Manager and Strategic Orchestrator of the Enderun Army.",
|
|
17
|
+
role: "Corporate Orchestration & AL Governance",
|
|
18
|
+
description: "The Supreme Manager and Strategic Orchestrator of the Enderun Army. Acts as the AL Management Assistant.",
|
|
19
19
|
capability: 10,
|
|
20
|
-
tags: ["core", "orchestration"],
|
|
20
|
+
tags: ["core", "orchestration", "governance"],
|
|
21
21
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
22
|
-
tools: ["orchestrate_loop", "send_agent_message", "
|
|
23
|
-
instructions: "You
|
|
22
|
+
tools: ["orchestrate_loop", "send_agent_message", "read_project_memory", "get_memory_insights", "update_project_memory", "get_project_gaps", "get_project_map", "audit_dependencies", "list_dir", "grep_search", "get_framework_status", "get_system_health", "check_active_ports", "start_dashboard"],
|
|
23
|
+
instructions: "You are the AL (Agent Lifecycle) Management Assistant and the SUPREME DISCIPLINE ENFORCER of the Enderun Army. Your primary mission is to ensure ZERO DEVIATION from the established 'Nizam-ı Enderun' standards. \n\n### THE LAW OF ZERO DEVIATION:\n1. **Absolute Compliance:** If a specialist violates any rule in 'ENDERUN.md' (e.g., using 'any', 'console.log', or overwriting a file), you must IMMEDIATELY mark the project as 'FROZEN' and the task as 'BLOCKED'. No further action is permitted until the breach is purged.\n2. **Phase Wall:** You are the gatekeeper. No phase transition is allowed if even a single 'TODO' or 'Lint Error' exists in the current scope.\n3. **Orchestration & Audit:** Every message from specialists must be audited for constitutional compliance before you delegate the next sub-task.\n4. **Strategic Recipes:** For complex tasks like refactoring, bug-fixing, or adding new features, ALWAYS direct specialists to read the corresponding recipe in '.enderun/prompts/'.\n5. **Surgical Precision:** Reject any proposal that suggests a 'full file overwrite' unless the file is under 50 lines.\n6. **Completion & Gap Analysis:** Use 'get_project_gaps' to scan for unfinished logic. Unfinished work is a breach of discipline.\n7. **System Health & Observability:** Periodically use 'get_system_health' and 'check_active_ports' to ensure the development environment is stable.\n8. **Memory Integrity:** Synchronize 'PROJECT_MEMORY.md' after every single turn. Memory drift is an act of treason."
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
name: "architect",
|
|
@@ -30,7 +30,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
30
30
|
capability: 9,
|
|
31
31
|
tags: ["core", "design"],
|
|
32
32
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
33
|
-
tools: ["
|
|
33
|
+
tools: ["read_file", "write_file", "replace_text", "batch_surgical_edit", "list_dir", "grep_search", "update_contract_hash", "read_project_memory", "get_memory_insights"],
|
|
34
34
|
instructions: "Design the project's foundation. Design must be flawless and adhere to the Nizam. You possess the Control Plane Governance & Locking skill. Always prioritize reading rules and governance documents before designing contracts. Ensure type contract stability (contract.version.json), strictly forbid 'any' type, and enforce type safety across all boundaries."
|
|
35
35
|
},
|
|
36
36
|
{
|
|
@@ -41,10 +41,9 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
41
41
|
capability: 9,
|
|
42
42
|
tags: ["core", "logic"],
|
|
43
43
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
44
|
-
tools: ["
|
|
44
|
+
tools: ["read_file", "write_file", "replace_text", "batch_surgical_edit", "patch_file", "list_dir", "grep_search", "read_project_memory", "get_memory_insights"],
|
|
45
45
|
instructions: "Focus on server logic and databases. Any deviation from the Ferman is a breach of discipline. You possess the Database Management & Migrations skill. Always prioritize reading rules and skills/database_management.md before writing API handlers or database code. Strictly enforce Branded Types for all IDs, use Kysely for queries (strictly forbid raw SQL strings), isolate queries in repository/service layers (forbid direct DB calls in controllers), and use robust try/catch blocks for error handling. You are strictly prohibited from performing High-Risk Administrative Operations (User/role management, bulk deletes, schema alterations, billing changes) autonomously. If requested, you must return a standard refusal, write a managerApproval request via send_agent_message to @manager, and shift to WAITING status."
|
|
46
|
-
},
|
|
47
|
-
{
|
|
46
|
+
}, {
|
|
48
47
|
name: "frontend",
|
|
49
48
|
displayName: "Frontend Specialist",
|
|
50
49
|
role: "Frontend Development",
|
|
@@ -52,19 +51,19 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
52
51
|
capability: 9,
|
|
53
52
|
tags: ["core", "ui"],
|
|
54
53
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
55
|
-
tools: ["
|
|
56
|
-
instructions: "Build elegant, disciplined, and 100% responsive UIs
|
|
54
|
+
tools: ["read_file", "write_file", "replace_text", "batch_surgical_edit", "patch_file", "list_dir", "grep_search", "read_project_memory", "get_memory_insights"],
|
|
55
|
+
instructions: "Build elegant, disciplined, and 100% responsive UIs that adapt flawlessly to mobile, tablet, and desktop viewports. ALWAYS read 'frontend-standards.md' and 'i18n-standards.md' before starting. \n\n### MANDATORY STANDARDS:\n1. **Panda/Tailwind CSS:** Follow the specific framework standards strictly. Avoid ad-hoc utility classes for layout.\n2. **i18n Discipline:** NEVER hardcode user-facing strings. Move all text to 'locales/' JSON files.\n3. **Responsive-First Architecture:** Always design Mobile-First. Use object-based syntax for ALL layouts (e.g., width: { base: '100%', md: '50%', lg: '33.33%' }). Do not use hardcoded pixel values for core layout grids.\n4. **Flexbox & Grid-First:** Forbid absolute layout positioning (`position: absolute`) for general page structure. Use flex layouts or CSS Grid to handle variable screen heights and widths.\n5. **Fluid Typography & Spacing:** Utilize clamp() or viewport-based spacing formulas to ensure texts and margins scale smoothly across screen sizes without breaking layouts.\n6. **Viewport Overflow Guard:** Ensure all interactive components prevent horizontal scrolls by applying proper box-sizing, max-width bounds, and layout container margins.\n7. **Atomic UI:** Create shared components ONLY in 'apps/web/src/components/ui/'."
|
|
57
56
|
},
|
|
58
57
|
{
|
|
59
58
|
name: "quality",
|
|
60
59
|
displayName: "Quality Specialist",
|
|
61
|
-
role: "Quality Audit",
|
|
62
|
-
description: "Audit, Testing, and Compliance specialist.",
|
|
60
|
+
role: "Quality Audit & Discipline Enforcer",
|
|
61
|
+
description: "Audit, Testing, and Compliance specialist. The guardian of code discipline.",
|
|
63
62
|
capability: 9,
|
|
64
|
-
tags: ["core", "audit"],
|
|
63
|
+
tags: ["core", "audit", "discipline"],
|
|
65
64
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
66
|
-
tools: ["
|
|
67
|
-
instructions: "You are the inspector of the
|
|
65
|
+
tools: ["list_dir", "grep_search", "read_file", "get_project_gaps", "read_project_memory", "get_memory_insights", "run_tests", "log_agent_action"],
|
|
66
|
+
instructions: "You are the supreme inspector of the Enderun Army. ALWAYS read 'quality-standards.md' and 'testing-standards.md' before auditing. \n\n### MANDATORY STANDARDS:\n1. **Otonom Test:** Execute 'run_tests' after any logic change. If tests fail, analyze the stderr and pinpoint the exact line of failure.\n2. **Hata Takibi:** If a specialist's code fails, log a 'FAILURE' action with 'log_agent_action' and include the stack trace. Notify @manager to FREEZE the task.\n3. **Test Coverage:** Ensure every new service or logic has a corresponding '.test.ts' file using Vitest.\n4. **Zero Tolerance:** Reject any code with lint errors, 'any' usage, or hardcoded 'console.log'.\n5. **Pattern Guard:** Enforce 'Given-When-Then' pattern in all test suites."
|
|
68
67
|
},
|
|
69
68
|
{
|
|
70
69
|
name: "database",
|
|
@@ -74,7 +73,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
74
73
|
capability: 9,
|
|
75
74
|
tags: ["core", "data"],
|
|
76
75
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
77
|
-
tools: ["
|
|
76
|
+
tools: ["read_file", "write_file", "replace_text", "list_dir", "grep_search", "read_project_memory"],
|
|
78
77
|
instructions: "Manage data as the empire's treasury. Secure and optimized. You possess the Database Management & Migrations skill. Always prioritize reading skills/database_management.md (or equivalent inside the framework's skills directory) before modifying databases, designing schemas, or creating migrations."
|
|
79
78
|
},
|
|
80
79
|
{
|
|
@@ -85,8 +84,8 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
85
84
|
capability: 9,
|
|
86
85
|
tags: ["core", "infra"],
|
|
87
86
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
88
|
-
tools: ["run_shell_command", "view_file", "list_dir"],
|
|
89
|
-
instructions: "Maintain reliable supply lines and systems like fortresses. You possess the DevOps & Infrastructure skill. Always prioritize reading skills/devops_infrastructure.md
|
|
87
|
+
tools: ["run_shell_command", "view_file", "list_dir", "get_system_health", "check_active_ports", "read_project_memory"],
|
|
88
|
+
instructions: "Maintain reliable supply lines and systems like fortresses. You possess the DevOps & Infrastructure skill. Always prioritize reading skills/devops_infrastructure.md before managing configurations. \n\n### SYSTEM GUARDIAN:\n1. **Health Check:** Use 'get_system_health' to monitor RAM and CPU usage. If resources are critically low, alert @manager.\n2. **Port Audit:** Use 'check_active_ports' to verify that development servers (Next.js, API, DB) are running on correct ports.\n3. **Environment Isolation:** Ensure all services are correctly containerized and environment variables are strictly managed via '.env'."
|
|
90
89
|
},
|
|
91
90
|
{
|
|
92
91
|
name: "explorer",
|
|
@@ -96,7 +95,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
96
95
|
capability: 8,
|
|
97
96
|
tags: ["core", "recon"],
|
|
98
97
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
99
|
-
tools: ["
|
|
98
|
+
tools: ["read_file", "list_dir", "grep_search", "get_project_map", "read_project_memory", "get_memory_insights"],
|
|
100
99
|
instructions: "Gather tactical intelligence and map dependencies for the Manager. You possess the Reconnaissance & Context Discovery skill. Strictly execute the Architecture Discovery Protocol (ADP): identify main entry points (index.ts, main.ts), scan domain structures, and map file dependencies. You operate strictly in read-only mode; never suggest, write, or modify codebase files directly."
|
|
101
100
|
},
|
|
102
101
|
{
|
|
@@ -107,7 +106,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
107
106
|
capability: 9,
|
|
108
107
|
tags: ["core", "logistics"],
|
|
109
108
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
110
|
-
tools: ["
|
|
109
|
+
tools: ["list_dir", "grep_search", "read_project_memory"],
|
|
111
110
|
instructions: "Manage the scrolls of history. Every commit must be atomic and traceable. You possess the Version Control skill. Strictly enforce that every git commit message is prefixed with the active Trace ID (e.g., '[TraceId] Description') to maintain traceability, ensure all commits are atomic (containing a single logical change), and follow standard git-flow branching rules."
|
|
112
111
|
},
|
|
113
112
|
{
|
|
@@ -118,8 +117,8 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
118
117
|
capability: 9,
|
|
119
118
|
tags: ["core", "mobile"],
|
|
120
119
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
121
|
-
tools: ["
|
|
122
|
-
instructions: "Build
|
|
120
|
+
tools: ["read_file", "write_file", "replace_text", "batch_surgical_edit", "list_dir", "grep_search", "read_project_memory"],
|
|
121
|
+
instructions: "Build high-performance React Native / Expo apps that adapt dynamically to different screen aspect ratios (from compact SE phones to tablets). ALWAYS read 'mobile-standards.md' in the knowledge directory before starting.\n\n### MANDATORY STANDARDS:\n1. **Dynamic Scaling:** Use the 'useWindowDimensions' hook or proportional layout dimensions (percentages / flex ratios). Strictly forbid hardcoded layout pixel sizes for parent containers and major components.\n2. **SafeArea Compliance:** Wrap all screen views in `SafeAreaProvider` and `SafeAreaView` from `react-native-safe-area-context` to handle notch and home indicator spacing gracefully without overlapping text or status bars.\n3. **Text Overflow Guard:** Always set appropriate text styling (like numberOfLines and ellipsizeMode) and dynamic wrapper heights to ensure that system-wide accessibility font scaling doesn't truncate or break the layout.\n4. **FlashList:** Use Shopify's FlashList for all scrollable lists. Ensure items have correct estimated sizes to optimize UI thread frame rates on lower-end devices.\n5. **Touch Targets & Accessibility:** All touchable components (TouchableOpacity, Pressable) must have a minimum interactive target size of 44dp x 44dp to be accessible on all touchscreen devices.\n6. **Offline-First:** Implement caching via React Query and local storage."
|
|
123
122
|
},
|
|
124
123
|
{
|
|
125
124
|
name: "native",
|
|
@@ -129,7 +128,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
129
128
|
capability: 9,
|
|
130
129
|
tags: ["core", "native"],
|
|
131
130
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
132
|
-
tools: ["
|
|
131
|
+
tools: ["read_file", "write_file", "replace_text", "list_dir", "grep_search", "read_project_memory"],
|
|
133
132
|
instructions: "Handle deep layers of the OS with paramount security."
|
|
134
133
|
},
|
|
135
134
|
{
|
|
@@ -140,8 +139,8 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
140
139
|
capability: 10,
|
|
141
140
|
tags: ["core", "security"],
|
|
142
141
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
143
|
-
tools: ["
|
|
144
|
-
instructions: "Guardian of the Nizam.
|
|
142
|
+
tools: ["read_file", "replace_text", "grep_search", "read_project_memory", "get_memory_insights"],
|
|
143
|
+
instructions: "Guardian of the Nizam. Block any action that endangers the project. ALWAYS read 'security-standards.md' in the knowledge directory before starting. \n\n### MANDATORY STANDARDS:\n1. **RLS Enforcement:** Ensure multi-tenant Row Level Security (RLS) policies are active on all database tables.\n2. **No Secrets:** Block any commit containing hardcoded secrets (API keys, passwords). Force the use of '.env'.\n3. **Ham SQL Forbidden:** Ensure all database queries use Kysely. Reject raw SQL strings.\n4. **Audit Logs:** Monitor and log all high-risk administrative actions."
|
|
145
144
|
},
|
|
146
145
|
{
|
|
147
146
|
name: "analyst",
|
|
@@ -151,7 +150,7 @@ export const ALL_AGENTS: AgentDefinition[] = [
|
|
|
151
150
|
capability: 9,
|
|
152
151
|
tags: ["core", "strategy"],
|
|
153
152
|
stateMachine: "../schema/agent-lifecycle-schema.json",
|
|
154
|
-
tools: ["
|
|
153
|
+
tools: ["read_file", "list_dir", "grep_search", "get_project_map", "read_project_memory", "get_memory_insights"],
|
|
155
154
|
instructions: "Audit of truth and contracts within the Army. You possess the Strategy Analysis & Specification Validation skill. Verify that user requirements (from docs/ or specifications) are correctly mapped to API schemas and types, enforce the Contract-First development model strictly before any application code is written, and validate that API versioning changes are correctly registered in contract.version.json."
|
|
156
155
|
}
|
|
157
156
|
];
|
package/src/shared/logger.ts
CHANGED
|
@@ -47,7 +47,8 @@ export class EnterpriseLogger {
|
|
|
47
47
|
fs.mkdirSync(dir, { recursive: true });
|
|
48
48
|
}
|
|
49
49
|
} catch (err) {
|
|
50
|
-
|
|
50
|
+
// Directly write to stderr — using console here would be circular
|
|
51
|
+
process.stderr.write(`[Logger] Failed to create log directory: ${err}\n`);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
}
|
|
@@ -98,11 +99,12 @@ export class EnterpriseLogger {
|
|
|
98
99
|
|
|
99
100
|
const formatted = this.formatMessage(level, message, meta);
|
|
100
101
|
|
|
101
|
-
//
|
|
102
|
+
// Route to stderr for ERROR/FATAL, stdout otherwise.
|
|
103
|
+
// Using process.write directly here is intentional — this IS the logger.
|
|
102
104
|
if (level >= LogLevel.ERROR) {
|
|
103
|
-
|
|
105
|
+
process.stderr.write(formatted + "\n");
|
|
104
106
|
} else {
|
|
105
|
-
|
|
107
|
+
process.stdout.write(formatted + "\n");
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
// Output to file if configured
|
|
@@ -110,7 +112,8 @@ export class EnterpriseLogger {
|
|
|
110
112
|
try {
|
|
111
113
|
fs.appendFileSync(this.config.logFile, formatted + "\n", "utf8");
|
|
112
114
|
} catch (err) {
|
|
113
|
-
|
|
115
|
+
// Directly write to stderr — using console here would be circular
|
|
116
|
+
process.stderr.write(`[Logger] Failed to write to log file: ${err}\n`);
|
|
114
117
|
}
|
|
115
118
|
}
|
|
116
119
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 🐞 Bilimsel Hata Ayıklama (Bug-Fix) Reçetesi
|
|
2
|
+
|
|
3
|
+
Bu reçete, bir hatayı otonom olarak nasıl tespit edip kalıcı olarak çözeceğinizi tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Yeniden Üretim (Reproduction)
|
|
6
|
+
- Hatayı bildiren logları (`audit_log.md`) analiz edin.
|
|
7
|
+
- Hatayı tetikleyen en küçük test vakasını (failing test) yazın.
|
|
8
|
+
|
|
9
|
+
## 2. Kök Neden Analizi (Root Cause)
|
|
10
|
+
- `get_system_health` ile sistem kaynaklarını kontrol edin.
|
|
11
|
+
- `check_active_ports` ile servislerin durumunu doğrulayın.
|
|
12
|
+
- `read_file` ile ilgili kod bloklarını satır satır inceleyin.
|
|
13
|
+
|
|
14
|
+
## 3. Onarım (Surgical Fix)
|
|
15
|
+
- Sadece hatayı düzeltecek cerrahi müdahaleyi yapın.
|
|
16
|
+
- ".env" içinde eksik bir değişken olup olmadığını kontrol edin.
|
|
17
|
+
|
|
18
|
+
## 4. Kalıcı Çözüm
|
|
19
|
+
- Yazdığınız testin geçtiğini doğrulayın.
|
|
20
|
+
- Benzer hataların oluşmaması için `quality-standards.md` güncellenmesi gerekiyorsa öneri sunun.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ✨ Yeni Özellik (New Feature) Geliştirme Reçetesi
|
|
2
|
+
|
|
3
|
+
Yeni bir modül veya özellik eklerken takip edilmesi gereken "Nizam-ı Enderun" adımları.
|
|
4
|
+
|
|
5
|
+
## 1. Kontrat Tasarımı (Phase 1)
|
|
6
|
+
- Önce `contract.version.json` dosyasını ve ilgili TypeScript tiplerini güncelleyin.
|
|
7
|
+
- `@architect` onayı almadan kod yazmaya başlamayın.
|
|
8
|
+
|
|
9
|
+
## 2. Mock-Free Geliştirme (Phase 2)
|
|
10
|
+
- Yeni özelliği `apps/backend` veya `apps/web` altında doğru dizine ekleyin.
|
|
11
|
+
- Veritabanı değişikliği gerekiyorsa `@database` ajanıyla koordine olun.
|
|
12
|
+
|
|
13
|
+
## 3. Responsive & i18n (Phase 3)
|
|
14
|
+
- Frontend geliştirmelerinde `{ base: '...', md: '...' }` responsive sözdizimini kullanın.
|
|
15
|
+
- Tüm metinleri anında `locales/` altına taşıyın.
|
|
16
|
+
|
|
17
|
+
## 4. Tamamlama (Phase 4)
|
|
18
|
+
- `get_project_gaps` ile hiçbir TODO kalmadığından emin olun.
|
|
19
|
+
- `audit_dependencies` ile yeni bir paket kirliliği yaratmadığınızı doğrulayın.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 🛠️ Cerrahi Refactoring Reçetesi
|
|
2
|
+
|
|
3
|
+
Bu reçete, mevcut bir kodu projenin diğer kısımlarını bozmadan nasıl modernize edeceğinizi tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Keşif (Reconnaissance)
|
|
6
|
+
- `grep_search` kullanarak refactor edilecek fonksiyonun tüm referanslarını bulun.
|
|
7
|
+
- `get_project_map` ile modülün bağımlılık grafiğini anlayın.
|
|
8
|
+
- Mevcut testleri koşturarak (`run_tests`) baz hattını (baseline) doğrulayın.
|
|
9
|
+
|
|
10
|
+
## 2. Planlama (Strategy)
|
|
11
|
+
- Değişikliği küçük, atomik adımlara bölün.
|
|
12
|
+
- Yeni tipleri ve arayüzleri (interfaces) önce tanımlayın.
|
|
13
|
+
|
|
14
|
+
## 3. Uygulama (Surgical Execution)
|
|
15
|
+
- **KURAL:** Dosyayı asla tamamen silmeyin. Sadece `replace_text` veya `batch_surgical_edit` kullanın.
|
|
16
|
+
- Her adımda tip güvenliğini (`any` yasağı) koruyun.
|
|
17
|
+
- Her büyük değişiklikten sonra `PROJECT_MEMORY.md`'yi güncelleyin.
|
|
18
|
+
|
|
19
|
+
## 4. Doğrulama (Validation)
|
|
20
|
+
- `run_tests` ile hiçbir regresyon oluşmadığından emin olun.
|
|
21
|
+
- `@quality` ajanıyla kod kalitesini denetleyin.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 📐 Kurumsal Mimari Standartları (AL Framework)
|
|
2
|
+
|
|
3
|
+
Bu proje, Agent Enderun tarafından belirlenen "Nizam-ı Mimari" kurallarına uygun olarak geliştirilmektedir.
|
|
4
|
+
|
|
5
|
+
## 1. Klasör Yapısı (Monorepo Standardı)
|
|
6
|
+
- `apps/backend/`: İş mantığı, API ve veritabanı katmanları.
|
|
7
|
+
- `apps/web/`: Frontend (React/Next.js) katmanı.
|
|
8
|
+
- `packages/shared/`: Backend ve Frontend arasında paylaşılan tip tanımları ve yardımcılar.
|
|
9
|
+
|
|
10
|
+
## 2. Katmanlı Mimari (Layered Architecture)
|
|
11
|
+
Tüm iş mantığı şu hiyerarşiyi takip etmelidir:
|
|
12
|
+
1. **Routes/Controllers:** API giriş noktaları ve request validasyonu.
|
|
13
|
+
2. **Services:** İş mantığının (Business Logic) koordine edildiği yer.
|
|
14
|
+
3. **Repositories/Models:** Veritabanı erişimi ve ham veri mutasyonları.
|
|
15
|
+
|
|
16
|
+
## 3. Tip Güvenliği ve Kontratlar
|
|
17
|
+
- `contract.version.json` dosyasındaki hash, aktif kodla her zaman uyumlu olmalıdır.
|
|
18
|
+
- `any` tipi kullanımı kesinlikle yasaktır.
|
|
19
|
+
- Tüm asenkron operasyonlar `try-catch` blokları ve uygun hata yönetimi (ErrorHandler) ile sarılmalıdır.
|
|
20
|
+
|
|
21
|
+
## 4. AL (Agent Lifecycle) Faz Disiplini
|
|
22
|
+
- Geliştirme, Faz 0'dan Faz 4'e kadar sırayla ilerler.
|
|
23
|
+
- Kontratlar onaylanmadan (Faz 1) uygulama kodu yazılamaz (Faz 2).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 🏛️ Kurumsal CRUD ve Yönetişim Standartları
|
|
2
|
+
|
|
3
|
+
Bu belge, Agent Enderun ordusu tarafından yönetilen projelerde veri mutasyonu ve idari işlemler için geçerli olan katı kuralları tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Yüksek Riskli İşlemler (High-Risk Operations)
|
|
6
|
+
Aşağıdaki işlemler "Yüksek Riskli" olarak kabul edilir ve uzman ajanlar (@backend, @database vb.) tarafından otonom olarak gerçekleştirilemez:
|
|
7
|
+
- Veritabanı şeması değişiklikleri (DDL).
|
|
8
|
+
- Toplu veri silme veya temizleme (Bulk Delete/Purge).
|
|
9
|
+
- Kullanıcı yetkilendirme ve rol atama sistemleri.
|
|
10
|
+
- Ödeme sistemi (Billing) entegrasyonları.
|
|
11
|
+
- PII (Kişisel Veri) dışa aktarımı.
|
|
12
|
+
|
|
13
|
+
## 2. Onay Akışı (Approval Flow)
|
|
14
|
+
- Uzman ajan, bir yüksek riskli işlem talebi aldığında işlemi reddetmeli ve durumu `@manager`'a bildirmelidir.
|
|
15
|
+
- `@manager`, talebi analiz eder ve `managerApproval` bekleyen bir görev oluşturur.
|
|
16
|
+
- İnsan denetçi (Human-in-the-Loop), `agent-enderun approve [TraceID]` komutu ile onay verene kadar işlem bekletilir.
|
|
17
|
+
|
|
18
|
+
## 3. Veri Disiplini
|
|
19
|
+
- **Branded Types:** Tüm ID'ler (UserID, OrderID vb.) kesinlikle branded types formatında olmalıdır.
|
|
20
|
+
- **Kysely Only:** Ham SQL sorguları yasaktır. Sadece tip güvenli Kysely sorgu oluşturucu kullanılabilir.
|
|
21
|
+
- **Repository Pattern:** Veritabanı işlemleri doğrudan controller'lar içinde yapılamaz; mutlaka servis ve repository katmanlarından geçmelidir.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 🎨 Kurumsal Frontend ve Responsive Standartları
|
|
2
|
+
|
|
3
|
+
Bu belge, Agent Enderun tarafından yönetilen projelerdeki UI/UX standartlarını tanımlar. Tüm arayüzler "Mobile-First", "Fluid Responsive" ve "Cross-Device Adaptive" prensiplerine uygun olmalıdır.
|
|
4
|
+
|
|
5
|
+
## 1. Tasarım Sistemi: Panda CSS & Tailwind Entegrasyonu
|
|
6
|
+
- **Sıfır UI Kütüphanesi:** Ant Design, MUI gibi hantal harici UI kütüphaneleri kullanılmaz. Tüm stiller tip güvenli **Panda CSS** veya yapılandırılmış **Tailwind CSS** ile yazılır.
|
|
7
|
+
- **Token Kullanımı:** Renkler, boşluklar ve font boyutları mutlaka `token()` fonksiyonu veya standart CSS değişkenleri üzerinden yönetilmelidir.
|
|
8
|
+
- **Responsive Syntax:** Obje tabanlı responsive syntax zorunludur:
|
|
9
|
+
```typescript
|
|
10
|
+
css({
|
|
11
|
+
width: { base: '100%', md: '50%', lg: '33.33%' },
|
|
12
|
+
padding: { base: '4', md: '8' }
|
|
13
|
+
})
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 2. Mobil-First ve Akıcı Tasarım (Fluid Design)
|
|
17
|
+
- **Mobile-First Yaklaşımı:** Stiller her zaman en küçük ekran boyutu (`base`) için yazılmalı, ardından `sm`, `md`, `lg`, `xl`, `2xl` breakpoint'leri ile geniş ekranlara doğru genişletilmelidir.
|
|
18
|
+
- **Fluid Grid & Flexbox:** Düzenler sabit genişliklerle sınırlandırılmamalıdır. `flex-wrap`, CSS Grid (`grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))`) tercih edilmelidir.
|
|
19
|
+
- **Fluid Typography:** Yazı boyutları ekran genişliğine göre dinamik ölçeklenmelidir:
|
|
20
|
+
```css
|
|
21
|
+
font-size: clamp(1rem, 2vw + 0.5rem, 2rem);
|
|
22
|
+
```
|
|
23
|
+
- **Kapsayıcı Sınırları (Container Bounds):** Sayfa ana gövdesi mutlaka responsive padding'e ve maksimum genişlik sınırına sahip olmalıdır (`max-width: 1280px` veya `1440px` standardı).
|
|
24
|
+
|
|
25
|
+
## 3. Ekran Boyutu ve Cihaz Güvenliği (Viewport Safety)
|
|
26
|
+
- **Viewport Taşması (Overflow Guard):** Sayfalarda yatay kaydırma çubuğu (horizontal scrollbar) oluşması kesinlikle yasaktır. Tüm elemanlara `box-sizing: border-box` uygulanmalı ve genişlikler `max-width: 100%` ile sınırlandırılmalıdır.
|
|
27
|
+
- **Dinamik Viewport Birimleri:** Mobil tarayıcıların adres çubuğu değişimlerinden etkilenmemek için `vh` yerine `dvh` (Dynamic Viewport Height) ve `vw` yerine `dvw` birimleri kullanılmalıdır.
|
|
28
|
+
- **Dokunmatik Hedefler (Touch Targets):** Mobil cihazlarda tıklanabilir elemanların (buton, link, input) boyutu en az `44px x 44px` olmalıdır.
|
|
29
|
+
|
|
30
|
+
## 4. Bileşen Disiplini (Component Governance)
|
|
31
|
+
- **Atomic Design:** UI bileşenleri `apps/web/src/components/ui/` altında toplanmalıdır.
|
|
32
|
+
- **Sayfa İzolasyonu:** Sayfa dosyaları içinde stil tanımlamak yerine, reusable atomic bileşenler tercih edilmelidir.
|
|
33
|
+
- **Görsel Optimizasyonu:** Responsive resimler için `picture` tagi veya `srcset` kullanılmalı, retina ekranlar için `@2x` çözünürlükleri desteklenmelidir. SVG'ler her zaman `viewBox` ile ölçeklenebilir kılınmalıdır.
|
|
34
|
+
|
|
35
|
+
## 5. Erişilebilirlik ve Performans
|
|
36
|
+
- **WCAG AA:** Tüm renk kontrastları ve klavye navigasyon yapıları WCAG AA standartlarına uygun olmalıdır.
|
|
37
|
+
- **Lighthouse Score:** Tüm sayfalar için performans, erişilebilirlik ve SEO skorları 90+ hedeflenmelidir.
|
|
38
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 🌐 Kurumsal Çoklu Dil (i18n) Standartları
|
|
2
|
+
|
|
3
|
+
Bu belge, Agent Enderun tarafından yönetilen projelerdeki yerelleştirme ve çoklu dil yönetim kurallarını tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Merkezi Yönetim
|
|
6
|
+
- **Hardcoded Yasak:** Kullanıcıya görünen hiçbir metin doğrudan kod içine (JSX/HTML/TS) yazılmaz.
|
|
7
|
+
- **Locales Dizini:** Tüm diller `apps/web/public/locales/` veya `apps/web/src/locales/` altında JSON dosyaları olarak saklanır.
|
|
8
|
+
- **Key-Value Standardı:** Anlamlı ve hiyerarşik anahtarlar kullanılır (örn: `common.buttons.save`, `errors.auth.invalid_password`).
|
|
9
|
+
|
|
10
|
+
## 2. Teknik Uygulama
|
|
11
|
+
- **i18next:** Projelerde `next-i18next` veya `react-i18next` kütüphanesi standarttır.
|
|
12
|
+
- **Dynamic Content:** Değişken içeren metinlerde mutlaka i18n interpolation (`{{name}}`) kullanılmalıdır.
|
|
13
|
+
- **Pluralization:** Tekil/çoğul durumları i18n kütüphanesinin kendi kuralları ile yönetilmelidir.
|
|
14
|
+
|
|
15
|
+
## 3. Denetim
|
|
16
|
+
- `@frontend` ajanı, yeni bir UI bileşeni oluşturduğunda metinleri otomatik olarak ilgili JSON dosyalarına taşır.
|
|
17
|
+
- Eksik çeviri (missing key) kontrolü `@quality` tarafından denetlenir.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 🪵 Kurumsal Loglama ve Sır Yönetimi (.env) Standartları
|
|
2
|
+
|
|
3
|
+
Bu belge, Agent Enderun ordusu tarafından yönetilen projelerdeki loglama disiplini ve hassas veri (secret) yönetim kurallarını tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Loglama Disiplini (Zero Console Policy)
|
|
6
|
+
- **console.log Yasaktır:** Üretim (production) kodunda `console.log`, `console.warn` veya `console.error` kullanımı kesinlikle yasaktır.
|
|
7
|
+
- **Enterprise Logger Kullanımı:** Tüm loglama işlemleri projenin merkezi logger sistemi (`src/shared/logger.ts`) üzerinden yapılmalıdır.
|
|
8
|
+
```typescript
|
|
9
|
+
import { logger } from "@/shared/logger";
|
|
10
|
+
|
|
11
|
+
logger.info("Kullanıcı giriş yaptı", { userId: "..." });
|
|
12
|
+
logger.error("Veritabanı bağlantı hatası", { error: "..." });
|
|
13
|
+
```
|
|
14
|
+
- **Log Seviyeleri (Levels):**
|
|
15
|
+
- `DEBUG`: Geliştirme aşamasındaki detaylı teknik bilgiler.
|
|
16
|
+
- `INFO`: Normal sistem akışı (örn: servis başlatıldı, görev tamamlandı).
|
|
17
|
+
- `WARN`: Hata olmayan ama dikkat edilmesi gereken durumlar.
|
|
18
|
+
- `ERROR`: Sistem çalışmasını bozmayan ama incelenmesi gereken hatalar.
|
|
19
|
+
- `FATAL`: Sistemin çökmesine neden olan kritik hatalar.
|
|
20
|
+
|
|
21
|
+
## 2. Sır Yönetimi ve .env Disiplini
|
|
22
|
+
- **Hassas Veriler (Secrets):** API anahtarları, veritabanı şifreleri, JWT secret'ları ve özel anahtarlar ASLA kod içine yazılmaz (hardcoded).
|
|
23
|
+
- **.env Kullanımı:** Tüm hassas veriler ve çevreye özgü (environment-specific) ayarlar `.env` dosyası üzerinden yönetilir.
|
|
24
|
+
- **.env.example:** Projenin kök dizininde her zaman güncel bir `.env.example` dosyası bulunmalıdır. Bu dosya sadece anahtarları içermeli, gerçek değerleri içermemelidir.
|
|
25
|
+
- **Dinamik Kontrol:** Ajanlar, `.env` dosyasındaki bir değerin eksikliğini uygulama çalışma zamanından (runtime) önce doğrulamalıdır.
|
|
26
|
+
|
|
27
|
+
## 3. Güvenlik Kuralları
|
|
28
|
+
- **Git Ignored:** `.env` dosyası her zaman `.gitignore` içinde yer almalı ve asla source control sistemine commit edilmemelidir.
|
|
29
|
+
- **Masking:** Loglarda şifre, kredi kartı numarası veya API anahtarı gibi hassas veriler asla açık bir şekilde yazılmamalıdır (Maskelenmelidir).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 📱 Kurumsal Mobil Geliştirme Standartları (React Native / Expo)
|
|
2
|
+
|
|
3
|
+
Bu belge, mobil uygulama geliştirme süreçlerindeki katı kuralları ve performans standartlarını tanımlar.
|
|
4
|
+
|
|
5
|
+
## 1. Teknoloji Stack ve Yapı
|
|
6
|
+
- **Framework:** Expo (Managed Workflow) ve React Native.
|
|
7
|
+
- **Styling:** `react-native-reanimated` ve tip güvenli stil objeleri veya Tailwind (NativeWind).
|
|
8
|
+
- **Navigation:** Expo Router (File-based navigation) ve Safe Link yapıları.
|
|
9
|
+
|
|
10
|
+
## 2. Her Ekrana Uygun Tasarım (Responsive Mobil Düzen)
|
|
11
|
+
- **Ekran Çözünürlüğü Bağımsızlığı:** Sabit `px` genişlikleri ve yükseklikleri asla kullanılmamalıdır. Bunun yerine, flexbox oranları, yüzdesel genişlikler ve `useWindowDimensions` kancasından alınan dinamik değerler kullanılmalıdır.
|
|
12
|
+
- **SafeArea Güvenliği:** Tüm ekran yapıları `react-native-safe-area-context` içindeki `SafeAreaProvider` ve `SafeAreaView` (veya dinamik `insets` nesnesi) ile sarmalanarak çentikli (notch) ekranlar, durum çubukları (status bars) ve ana ekran çizgileri (home indicators) ile çakışması önlenmelidir.
|
|
13
|
+
- **Yazı Boyutları ve Erişilebilirlik:** Sistem yazı boyutlarının değiştirilmesi (Accessibility Font Scaling) durumunda metinlerin kesilmemesi (truncation) veya sınırların dışına taşmaması için `Text` bileşenlerinde `numberOfLines` / `ellipsizeMode` kullanılmalı veya dinamik yükseklik sağlayan kapsayıcılar tasarlanmalıdır.
|
|
14
|
+
- **Yönlendirme Adaptasyonu (Orientation):** Arayüzler hem dikey (portrait) hem de yatay (landscape) kullanım senaryolarına adapte olabilmeli; özellikle tabletlerde çift sütunlu (Master-Detail) veya Grid düzeni dinamik ekran eni/boyu oranına göre ayarlanmalıdır.
|
|
15
|
+
|
|
16
|
+
## 3. Performans ve Akıcılık
|
|
17
|
+
- **Performanslı Listeler:** Büyük veri listelerinde performansı korumak için `ScrollView` veya `FlatList` yerine mutlaka `FlashList` (Shopify) kullanılmalıdır.
|
|
18
|
+
- **Görsel Kaynakları:** Görseller `expo-image` ile önbelleğe alınmalı, hızlı yüklenmeleri için WebP formatları tercih edilmeli ve ölçeklenirken en boy oranları (`contentFit`) korunmalıdır.
|
|
19
|
+
- **Dokunmatik Hedefler (Touch Targets):** Tüm dokunmatik etkileşim alanları en az `44dp x 44dp` olmalıdır.
|
|
20
|
+
|
|
21
|
+
## 4. Donanım ve Çevrimdışı Çalışma
|
|
22
|
+
- **İzinler (Permissions):** Hassas izinler (konum, kamera, bildirimler) yalnızca özellik kullanılırken istenmeli ve kullanıcıya açıkça gerekçesi gösterilmelidir.
|
|
23
|
+
- **Offline First (Çevrimdışı Öncelik):** Ağ istekleri `React Query` ile önbelleğe alınmalı; yerel kalıcı saklama için MMKV (veya SQLite) kullanılmalıdır.
|
|
24
|
+
|