agent-enderun 0.4.4 → 0.4.5
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/PROJECT_MEMORY.md +8 -2
- package/README.md +1 -1
- package/claude.md +7 -0
- package/codex.md +7 -0
- package/cursor.md +7 -0
- package/gemini-extension.json +5 -0
- package/gemini.md +7 -0
- package/package.json +8 -3
- package/packages/framework-mcp/dist/tools/security.js +36 -21
- package/packages/framework-mcp/package.json +1 -1
- package/packages/shared-types/package.json +1 -1
|
@@ -32,7 +32,7 @@ This file is the Single Source of Truth (SSOT) and the persistent memory of the
|
|
|
32
32
|
|
|
33
33
|
| Date | Decision | Rationale | Agent |
|
|
34
34
|
| :--- | :--- | :--- | :--- |
|
|
35
|
-
| 2026-05-12 | Framework Unified to v0.4.
|
|
35
|
+
| 2026-05-12 | Framework Unified to v0.4.5 | Inclusion of missing adapter files and installation fix | @manager |
|
|
36
36
|
| 2026-05-09 | Project Initialized | Framework setup via CLI | @manager |
|
|
37
37
|
|
|
38
38
|
## DELIVERABLES
|
|
@@ -49,7 +49,13 @@ This file is the Single Source of Truth (SSOT) and the persistent memory of the
|
|
|
49
49
|
|
|
50
50
|
## HISTORY (Persistent Memory)
|
|
51
51
|
|
|
52
|
-
### 2026-05-12 — The
|
|
52
|
+
### 2026-05-12 — The Installation Fix & v0.4.5 Release
|
|
53
|
+
+
|
|
54
|
+
+- **Agent:** @manager
|
|
55
|
+
+- **Trace ID:** 01KR6EJA6GG3RPS849097KS37Q
|
|
56
|
+
+- **Action:** Bumped version to v0.4.5. Fixed a critical issue where adapter files (gemini.md, cursor.md, claude.md, codex.md) were excluded from the npm package. Verified the fix via local and npx-simulated tests. Cleaned up logs and temporary test files.
|
|
57
|
+
+
|
|
58
|
+
+### 2026-05-12 — The Unified Milestone & v0.4.4 Release
|
|
53
59
|
|
|
54
60
|
- **Agent:** @manager
|
|
55
61
|
- **Trace ID:** 01KR6EJA6GG3RPS849097KS37Q
|
package/README.md
CHANGED
package/claude.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Agent Enderun — Claude Adapter
|
|
2
|
+
|
|
3
|
+
This file is the entry point for Claude. The project's "Supreme Law" and all instructions are located in the following file:
|
|
4
|
+
|
|
5
|
+
👉 **[{{FRAMEWORK_DIR}}/ENDERUN.md]({{FRAMEWORK_DIR}}/ENDERUN.md)**
|
|
6
|
+
|
|
7
|
+
Please read that file thoroughly before taking any action.
|
package/codex.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Agent Enderun — Codex Adapter
|
|
2
|
+
|
|
3
|
+
This file is the entry point for Codex. The project's "Supreme Law" and all instructions are located in the following file:
|
|
4
|
+
|
|
5
|
+
👉 **[{{FRAMEWORK_DIR}}/ENDERUN.md]({{FRAMEWORK_DIR}}/ENDERUN.md)**
|
|
6
|
+
|
|
7
|
+
Please read that file thoroughly before taking any action.
|
package/cursor.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Agent Enderun — Cursor Adapter
|
|
2
|
+
|
|
3
|
+
This file is the entry point for Cursor. The project's "Supreme Law" and all instructions are located in the following file:
|
|
4
|
+
|
|
5
|
+
👉 **[{{FRAMEWORK_DIR}}/ENDERUN.md]({{FRAMEWORK_DIR}}/ENDERUN.md)**
|
|
6
|
+
|
|
7
|
+
Please read that file thoroughly before taking any action.
|
package/gemini.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Agent Enderun — Gemini Adapter
|
|
2
|
+
|
|
3
|
+
This file is the entry point for Gemini. The project's "Supreme Law" and all instructions are located in the following file:
|
|
4
|
+
|
|
5
|
+
👉 **[{{FRAMEWORK_DIR}}/ENDERUN.md]({{FRAMEWORK_DIR}}/ENDERUN.md)**
|
|
6
|
+
|
|
7
|
+
Please read that file thoroughly before taking any action.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-enderun",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
|
|
5
5
|
"author": "Yusuf BEKAR",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,12 @@
|
|
|
46
46
|
"mcp.json",
|
|
47
47
|
".env.example",
|
|
48
48
|
"tsconfig.json",
|
|
49
|
-
"panda.config.ts"
|
|
49
|
+
"panda.config.ts",
|
|
50
|
+
"gemini.md",
|
|
51
|
+
"gemini-extension.json",
|
|
52
|
+
"cursor.md",
|
|
53
|
+
"claude.md",
|
|
54
|
+
"codex.md"
|
|
50
55
|
],
|
|
51
56
|
"scripts": {
|
|
52
57
|
"enderun:build": "npm run build --workspaces --if-present",
|
|
@@ -71,7 +76,7 @@
|
|
|
71
76
|
"concurrently": "^9.1.2"
|
|
72
77
|
},
|
|
73
78
|
"enderun": {
|
|
74
|
-
"version": "0.4.
|
|
79
|
+
"version": "0.4.5",
|
|
75
80
|
"initializedAt": "2026-05-09T13:24:27.472Z"
|
|
76
81
|
}
|
|
77
82
|
}
|
|
@@ -88,32 +88,47 @@ export const securityHandlers = {
|
|
|
88
88
|
try {
|
|
89
89
|
const safePath = resolveSafePath(projectRoot, parsed.data.path);
|
|
90
90
|
const violations = [];
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
91
|
+
const forbiddenLibraries = ["@shadcn", "mui", "@chakra-ui", "antd", "bootstrap", "tailwindcss"];
|
|
92
|
+
if (fs.existsSync(safePath) && fs.lstatSync(safePath).isDirectory()) {
|
|
93
|
+
const tsProject = new Project({ compilerOptions: { allowJs: true } });
|
|
94
|
+
tsProject.addSourceFilesAtPaths(path.join(safePath, "**/*.{ts,tsx,js,jsx}"));
|
|
95
|
+
for (const sourceFile of tsProject.getSourceFiles()) {
|
|
96
|
+
const relativePath = path.relative(projectRoot, sourceFile.getFilePath());
|
|
97
|
+
if (relativePath.includes("node_modules") || relativePath.includes("dist"))
|
|
98
|
+
continue;
|
|
99
|
+
// AST-based Import Check for Zero UI Policy
|
|
100
|
+
sourceFile.getImportDeclarations().forEach(imp => {
|
|
101
|
+
const moduleValue = imp.getModuleSpecifierValue();
|
|
102
|
+
if (forbiddenLibraries.some(lib => moduleValue.includes(lib))) {
|
|
103
|
+
violations.push(`${relativePath}: AST Violation - Zero UI Library Policy (imported '${moduleValue}')`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
// AST-based String ID Check for Branded Types Law
|
|
107
|
+
sourceFile.getInterfaces().forEach(iface => {
|
|
108
|
+
const idProp = iface.getProperty("id");
|
|
109
|
+
if (idProp && idProp.getType().isString() && !idProp.getType().getText().includes("Brand")) {
|
|
110
|
+
violations.push(`${relativePath}: AST Violation - Branded Types Law (interface '${iface.getName()}' uses plain string for ID)`);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
const content = sourceFile.getFullText();
|
|
114
|
+
if (content.includes("console.log") && !relativePath.includes("cli.js")) {
|
|
115
|
+
violations.push(`${relativePath}: Text Violation - Logging Policy (found 'console.log')`);
|
|
116
|
+
}
|
|
117
|
+
if (content.includes("sql`")) {
|
|
118
|
+
violations.push(`${relativePath}: Text Violation - Potential Kysely Standards (found raw 'sql' tag)`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (fs.existsSync(safePath)) {
|
|
123
|
+
// Fallback for single files
|
|
124
|
+
const content = fs.readFileSync(safePath, "utf-8");
|
|
125
|
+
const relativePath = path.relative(projectRoot, safePath);
|
|
95
126
|
for (const lib of forbiddenLibraries) {
|
|
96
127
|
if (content.includes(lib))
|
|
97
128
|
violations.push(`${relativePath}: Violation of Zero UI Library Policy (found '${lib}')`);
|
|
98
129
|
}
|
|
99
|
-
if (content.includes("console.log") && !filePath.includes("cli.js") && !filePath.includes("node_modules")) {
|
|
100
|
-
violations.push(`${relativePath}: Violation of Logging Policy (found 'console.log', use proper logger)`);
|
|
101
|
-
}
|
|
102
|
-
if (content.includes("sql`") && !filePath.includes("node_modules")) {
|
|
103
|
-
violations.push(`${relativePath}: Potential Violation of Kysely Standards (found raw 'sql' tag)`);
|
|
104
|
-
}
|
|
105
|
-
if (filePath.endsWith(".ts") && !filePath.includes("shared-types") && !filePath.includes("node_modules")) {
|
|
106
|
-
if (content.match(/interface.*ID\s*:\s*string/))
|
|
107
|
-
violations.push(`${relativePath}: Violation of Branded Types Law (found ID typed as plain string)`);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
if (fs.lstatSync(safePath).isDirectory()) {
|
|
111
|
-
collectFilesRecursively(safePath, new Set(["ts", "tsx", "js", "jsx"])).forEach(checkFile);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
checkFile(safePath);
|
|
115
130
|
}
|
|
116
|
-
return { content: [{ type: "text", text: `### CONSTITUTION COMPLIANCE REPORT\n\n` + (violations.length > 0 ? `⚠️ **VIOLATIONS FOUND:**\n${violations.map(v => `- ${v}`).join("\n")}` : "✅ **ALL SYSTEMS COMPLIANT:**
|
|
131
|
+
return { content: [{ type: "text", text: `### CONSTITUTION COMPLIANCE REPORT\n\n` + (violations.length > 0 ? `⚠️ **VIOLATIONS FOUND:**\n${violations.map(v => `- ${v}`).join("\n")}` : "✅ **ALL SYSTEMS COMPLIANT:** AST and Regex scans passed. No rule violations detected.") }] };
|
|
117
132
|
}
|
|
118
133
|
catch (error) {
|
|
119
134
|
return { content: [{ type: "text", text: "Compliance analysis failed." }] };
|