agent-enderun 0.4.4 → 0.4.6

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.
@@ -1,4 +1,4 @@
1
- # Agent Enderun (v0.4.4)
1
+ # Agent Enderun (v0.4.6)
2
2
  # Place in project root. This file is the single source of truth for Base Project AI Extensions.
3
3
 
4
4
  ## 🎖️ AGENT CHECKLIST (MANDATORY BEFORE RESPONSE)
@@ -12,14 +12,14 @@
12
12
  ---
13
13
 
14
14
  ## Constitution Status
15
- This file (`./gemini.md`) and the `.enderun/docs/` folder represent the "Supreme Law" of the project. All agents must read this file first in every session and strictly comply with its rules 100%.
15
+ This file (`./gemini.md`) and the `.enderun/docs/` folder represent the "Supreme Law" of the project. All agents must read this file first in every session and strictly comply with its rules 100%. All framework-specific documentation is stored within `.enderun/docs/`.
16
16
 
17
17
  ---
18
18
 
19
19
  ## STEP 0 — STARTUP (EVERY SESSION, NON-NEGOTIABLE)
20
20
 
21
21
  1. **Read ./gemini.md First:** Read and fully understand this file before taking any action.
22
- 2. **Check `.enderun/docs/` Folder:** Verify the existence of the `.enderun/docs/` folder in the project root.
22
+ 2. **Check `.enderun/docs/` Folder:** Verify the existence of the `.enderun/docs/` folder (located within the framework directory).
23
23
  3. **Absorb Context:** Read `.enderun/docs/tech-stack.md`. If it is empty, ask the user to fill it before proceeding.
24
24
  4. **Demand Context:** If the `.enderun/docs/` folder does not exist, ask the user for project context and target audience information before writing any code.
25
25
  5. Default Frontend: React 19 + Vite (SPA) + react-router-dom (User Preference)
@@ -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.4 | Absolute version parity across all components | @manager |
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 Unified Milestone & v0.4.4 Release
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/ENDERUN.md CHANGED
@@ -1,4 +1,4 @@
1
- # Agent Enderun (v0.3.4)
1
+ # Agent Enderun (v0.4.6)
2
2
  # Place in project root. This file is the single source of truth for Base Project AI Extensions.
3
3
 
4
4
  ## 🎖️ AGENT CHECKLIST (MANDATORY BEFORE RESPONSE)
@@ -12,14 +12,14 @@
12
12
  ---
13
13
 
14
14
  ## Constitution Status
15
- This file (`./{{ADAPTER}}.md`) and the `{{FRAMEWORK_DIR}}/docs/` folder represent the "Supreme Law" of the project. All agents must read this file first in every session and strictly comply with its rules 100%.
15
+ This file (`./{{ADAPTER}}.md`) and the `{{FRAMEWORK_DIR}}/docs/` folder represent the "Supreme Law" of the project. All agents must read this file first in every session and strictly comply with its rules 100%. All framework-specific documentation is stored within `{{FRAMEWORK_DIR}}/docs/`.
16
16
 
17
17
  ---
18
18
 
19
19
  ## STEP 0 — STARTUP (EVERY SESSION, NON-NEGOTIABLE)
20
20
 
21
21
  1. **Read ./{{ADAPTER}}.md First:** Read and fully understand this file before taking any action.
22
- 2. **Check `{{FRAMEWORK_DIR}}/docs/` Folder:** Verify the existence of the `{{FRAMEWORK_DIR}}/docs/` folder in the project root.
22
+ 2. **Check `{{FRAMEWORK_DIR}}/docs/` Folder:** Verify the existence of the `{{FRAMEWORK_DIR}}/docs/` folder (located within the framework directory).
23
23
  3. **Absorb Context:** Read `{{FRAMEWORK_DIR}}/docs/tech-stack.md`. If it is empty, ask the user to fill it before proceeding.
24
24
  4. **Demand Context:** If the `{{FRAMEWORK_DIR}}/docs/` folder does not exist, ask the user for project context and target audience information before writing any code.
25
25
  5. Default Frontend: React 19 + Vite (SPA) + react-router-dom (User Preference)
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 🏛️ Agent Enderun — v0.4.4
1
+ # 🏛️ Agent Enderun — v0.4.6
2
2
 
3
3
  **The Supreme AI Governance & Orchestration Framework for Enterprise Development**
4
4
 
package/bin/cli.js CHANGED
@@ -453,8 +453,15 @@ async function initCommand(selectedAdapter) {
453
453
  const textExtensions = [".md", ".json", ".js", ".ts", ".txt", ""];
454
454
  if (textExtensions.includes(ext)) {
455
455
  let content = fs.readFileSync(src, "utf8");
456
+ let currentAdapter = selectedAdapter || "enderun";
457
+ if (item.endsWith(".md") && Object.keys(ADAPTERS).some(a => item.startsWith(a))) {
458
+ currentAdapter = Object.keys(ADAPTERS).find(a => item.startsWith(a));
459
+ } else if (item.endsWith("-extension.json")) {
460
+ currentAdapter = Object.keys(ADAPTERS).find(a => item.startsWith(a)) || currentAdapter;
461
+ }
462
+
456
463
  content = content.replace(/\{\{FRAMEWORK_DIR\}\}/g, targetBase);
457
- content = content.replace(/\{\{ADAPTER\}\}/g, selectedAdapter || "enderun");
464
+ content = content.replace(/\{\{ADAPTER\}\}/g, currentAdapter);
458
465
 
459
466
  if (ext === ".json") {
460
467
  try {
@@ -462,7 +469,7 @@ async function initCommand(selectedAdapter) {
462
469
  content = JSON.stringify(sanitizeJson(json, targetScope), null, 2);
463
470
  // Ensure variable replacement even inside JSON strings if any
464
471
  content = content.replace(/\{\{FRAMEWORK_DIR\}\}/g, targetBase);
465
- content = content.replace(/\{\{ADAPTER\}\}/g, selectedAdapter || "enderun");
472
+ content = content.replace(/\{\{ADAPTER\}\}/g, currentAdapter);
466
473
  } catch (e) {
467
474
  content = content.replace(/workspace:[^"'\s]*/g, "*");
468
475
  }
@@ -738,9 +745,14 @@ function copyDir(src, dest, skipSet = new Set(), nonDestructive = false, framewo
738
745
  content = content.replace(/workspace:[^"'\s]*/g, "*");
739
746
  }
740
747
 
741
- // Also replace ADAPTER
742
- const adapterName = frameworkDir.startsWith(".") ? frameworkDir.slice(1) : frameworkDir;
743
- content = content.replace(/\{\{ADAPTER\}\}/g, adapterName);
748
+ const frameworkBase = frameworkDir.startsWith(".") ? frameworkDir.slice(1) : frameworkDir;
749
+ let currentAdapter = frameworkBase;
750
+ if (entry.name.endsWith(".md") && [ "gemini", "claude", "cursor", "codex" ].some(a => entry.name.startsWith(a))) {
751
+ currentAdapter = [ "gemini", "claude", "cursor", "codex" ].find(a => entry.name.startsWith(a));
752
+ }
753
+
754
+ content = content.replace(/\{\{FRAMEWORK_DIR\}\}/g, frameworkDir);
755
+ content = content.replace(/\{\{ADAPTER\}\}/g, currentAdapter);
744
756
 
745
757
  fs.writeFileSync(destPath, content);
746
758
  } else {
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
+ 👉 **[.enderun/ENDERUN.md](.enderun/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
+ 👉 **[.enderun/ENDERUN.md](.enderun/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
+ 👉 **[.enderun/ENDERUN.md](.enderun/ENDERUN.md)**
6
+
7
+ Please read that file thoroughly before taking any action.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Agent Enderun",
3
+ "description": "Enterprise-grade AI orchestration framework for software teams.",
4
+ "instructions": ".enderun/ENDERUN.md"
5
+ }
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
+ 👉 **[.enderun/ENDERUN.md](.enderun/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.4",
3
+ "version": "0.4.6",
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.4",
79
+ "version": "0.4.6",
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 checkFile = (filePath) => {
92
- const content = fs.readFileSync(filePath, "utf-8");
93
- const relativePath = path.relative(projectRoot, filePath);
94
- const forbiddenLibraries = ["@shadcn", "mui", "@chakra-ui", "antd", "bootstrap", "tailwindcss"];
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:** No violations of ENDERUN.md rules detected.") }] };
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." }] };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-enderun-mcp",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "Enterprise-grade MCP Server for AI Agent Framework",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
3
 
4
- export const FRAMEWORK_VERSION = "0.3.4";
4
+ export const FRAMEWORK_VERSION = "0.4.6";
5
5
 
6
6
  export function getFrameworkDir(projectRoot: string): string {
7
7
  const adapters = [".gemini", ".claude", ".cursor", ".codex", ".enderun"];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-enderun/shared-types",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "Shared TypeScript types for AI-Enderun Framework. Ensures Contract-First synchronization between agents.",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",