agent-enderun 0.2.2 → 0.2.4
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/logs/manager.json +25 -1
- package/ENDERUN.md +1 -1
- package/README.md +1 -1
- package/bin/cli.js +37 -8
- package/package.json +17 -5
- package/packages/framework-mcp/dist/index.js +1 -1
- package/packages/framework-mcp/dist/tools/framework.js +2 -2
- package/packages/framework-mcp/dist/utils.js +13 -5
- package/packages/framework-mcp/package.json +1 -1
- package/packages/framework-mcp/src/index.ts +1 -1
- package/packages/framework-mcp/src/tools/framework.ts +2 -2
- package/packages/framework-mcp/src/utils.ts +14 -5
- package/packages/shared-types/package.json +1 -1
- package/packages/shared-types/tsconfig.json +2 -10
|
@@ -360,4 +360,28 @@
|
|
|
360
360
|
"package.json"
|
|
361
361
|
]
|
|
362
362
|
}
|
|
363
|
-
]
|
|
363
|
+
],
|
|
364
|
+
{
|
|
365
|
+
"timestamp": "2026-05-12T18:16:03Z",
|
|
366
|
+
"agent": "manager",
|
|
367
|
+
"action": "MODIFY",
|
|
368
|
+
"requestId": "fa4ead74-1ab2-4d4f-884b-93cd74c9b4c8",
|
|
369
|
+
"status": "SUCCESS",
|
|
370
|
+
"summary": "Fixed missing enderun:check script in target projects, added vitest support, and included panda.config.ts in core files.",
|
|
371
|
+
"files": [
|
|
372
|
+
"bin/cli.js"
|
|
373
|
+
]
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"timestamp": "2026-05-12T18:17:33Z",
|
|
378
|
+
"agent": "manager",
|
|
379
|
+
"action": "MODIFY",
|
|
380
|
+
"requestId": "fa4ead74-1ab2-4d4f-884b-93cd74c9b4c8",
|
|
381
|
+
"status": "SUCCESS",
|
|
382
|
+
"summary": "Improved package localization logic to automatically rename internal packages based on the target project's name or scope during initialization.",
|
|
383
|
+
"files": [
|
|
384
|
+
"bin/cli.js"
|
|
385
|
+
]
|
|
386
|
+
}
|
|
387
|
+
]
|
package/ENDERUN.md
CHANGED
package/README.md
CHANGED
package/bin/cli.js
CHANGED
|
@@ -139,6 +139,9 @@ function mergePackageJson(targetPath, sourcePath) {
|
|
|
139
139
|
"enderun:status": "agent-enderun status",
|
|
140
140
|
"enderun:trace": "agent-enderun trace:new",
|
|
141
141
|
"enderun:verify": "agent-enderun verify-contract",
|
|
142
|
+
"enderun:check": "agent-enderun check",
|
|
143
|
+
"enderun:test": "vitest run",
|
|
144
|
+
"enderun:test:watch": "vitest",
|
|
142
145
|
"enderun:build": `${runCmd} build --prefix packages/shared-types && ${runCmd} build --prefix packages/framework-mcp`,
|
|
143
146
|
};
|
|
144
147
|
|
|
@@ -151,6 +154,7 @@ function mergePackageJson(targetPath, sourcePath) {
|
|
|
151
154
|
...(sourceDevDeps["typescript"] ? {"typescript": sourceDevDeps["typescript"]} : {}),
|
|
152
155
|
...(sourceDevDeps["@types/node"] ? {"@types/node": sourceDevDeps["@types/node"]} : {}),
|
|
153
156
|
...(sourceDevDeps["tsx"] ? {"tsx": sourceDevDeps["tsx"]} : {}),
|
|
157
|
+
...(sourceDevDeps["vitest"] ? {"vitest": sourceDevDeps["vitest"]} : {}),
|
|
154
158
|
"@pandacss/dev": "^0.53.0"
|
|
155
159
|
});
|
|
156
160
|
|
|
@@ -321,6 +325,8 @@ async function initCommand(selectedAdapter) {
|
|
|
321
325
|
".env.example",
|
|
322
326
|
"ENDERUN.md",
|
|
323
327
|
"package.json",
|
|
328
|
+
"tsconfig.json",
|
|
329
|
+
"panda.config.ts",
|
|
324
330
|
"packages/framework-mcp",
|
|
325
331
|
"packages/shared-types",
|
|
326
332
|
];
|
|
@@ -378,8 +384,12 @@ async function initCommand(selectedAdapter) {
|
|
|
378
384
|
} catch (e) {}
|
|
379
385
|
|
|
380
386
|
let targetScope = "";
|
|
381
|
-
if (targetPkg.name
|
|
382
|
-
targetScope = targetPkg.name.
|
|
387
|
+
if (targetPkg.name) {
|
|
388
|
+
targetScope = targetPkg.name.startsWith("@")
|
|
389
|
+
? targetPkg.name.split("/")[0]
|
|
390
|
+
: `@${targetPkg.name}`;
|
|
391
|
+
} else {
|
|
392
|
+
targetScope = `@${path.basename(targetDir)}`;
|
|
383
393
|
}
|
|
384
394
|
|
|
385
395
|
for (const item of filesToProcess) {
|
|
@@ -629,15 +639,34 @@ function sanitizeJson(obj, targetScope = "") {
|
|
|
629
639
|
|
|
630
640
|
// Replace scope if needed
|
|
631
641
|
if (targetScope) {
|
|
642
|
+
const scopeName = targetScope.startsWith("@") ? targetScope.slice(1) : targetScope;
|
|
643
|
+
|
|
644
|
+
// Handle scoped: @ai-enderun/foo -> @target/foo
|
|
632
645
|
if (typeof key === "string" && key.startsWith("@ai-enderun/")) {
|
|
633
646
|
finalKey = key.replace("@ai-enderun/", `${targetScope}/`);
|
|
634
647
|
}
|
|
635
|
-
if (typeof value === "string") {
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
648
|
+
if (typeof value === "string" && value.startsWith("@ai-enderun/")) {
|
|
649
|
+
finalValue = value.replace("@ai-enderun/", `${targetScope}/`);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// Handle unscoped: ai-enderun-foo -> target-foo
|
|
653
|
+
if (typeof key === "string" && key.startsWith("ai-enderun-")) {
|
|
654
|
+
finalKey = key.replace("ai-enderun-", `${scopeName}-`);
|
|
655
|
+
}
|
|
656
|
+
if (typeof value === "string" && value.startsWith("ai-enderun-")) {
|
|
657
|
+
finalValue = value.replace("ai-enderun-", `${scopeName}-`);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Handle agent-enderun -> target (ONLY for the package name)
|
|
661
|
+
if (key === "name" && value === "agent-enderun") {
|
|
662
|
+
finalValue = scopeName;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// Preserve agent-enderun in dependencies and bin
|
|
666
|
+
// (No action needed as finalKey/finalValue default to original)
|
|
667
|
+
|
|
668
|
+
if (typeof value === "string" && value.startsWith("workspace:")) {
|
|
669
|
+
finalValue = "*";
|
|
641
670
|
}
|
|
642
671
|
} else if (typeof value === "string" && value.startsWith("workspace:")) {
|
|
643
672
|
finalValue = "*";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-enderun",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
|
|
5
5
|
"author": "Yusuf BEKAR",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"framework"
|
|
24
24
|
],
|
|
25
25
|
"workspaces": [
|
|
26
|
-
"packages/*"
|
|
26
|
+
"packages/*",
|
|
27
|
+
"apps/*"
|
|
27
28
|
],
|
|
28
29
|
"bin": {
|
|
29
30
|
"agent-enderun": "bin/cli.js"
|
|
@@ -49,16 +50,27 @@
|
|
|
49
50
|
".env.example"
|
|
50
51
|
],
|
|
51
52
|
"scripts": {
|
|
52
|
-
"enderun:build": "npm run build --
|
|
53
|
+
"enderun:build": "npm run build --workspaces --if-present",
|
|
54
|
+
"enderun:test": "vitest run",
|
|
55
|
+
"enderun:test:watch": "vitest",
|
|
53
56
|
"enderun:status": "agent-enderun status",
|
|
54
57
|
"enderun:trace": "agent-enderun trace:new",
|
|
55
|
-
"enderun:verify": "agent-enderun verify-contract"
|
|
58
|
+
"enderun:verify": "agent-enderun verify-contract",
|
|
59
|
+
"enderun:check": "agent-enderun check",
|
|
60
|
+
"clean": "rm -rf node_modules packages/*/node_modules apps/*/node_modules packages/*/dist apps/*/dist"
|
|
56
61
|
},
|
|
57
62
|
"publishConfig": {
|
|
58
63
|
"access": "public"
|
|
59
64
|
},
|
|
60
65
|
"dependencies": {},
|
|
61
|
-
"devDependencies": {
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/node": "^22.13.4",
|
|
68
|
+
"typescript": "^5.9.3",
|
|
69
|
+
"tsx": "^4.19.4",
|
|
70
|
+
"vitest": "^3.0.5",
|
|
71
|
+
"eslint": "^9.20.1",
|
|
72
|
+
"concurrently": "^9.1.2"
|
|
73
|
+
},
|
|
62
74
|
"enderun": {
|
|
63
75
|
"version": "0.2.2",
|
|
64
76
|
"initializedAt": "2026-05-09T13:24:27.472Z"
|
|
@@ -4,7 +4,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprot
|
|
|
4
4
|
import { allTools, allHandlers } from "./tools/index.js";
|
|
5
5
|
const server = new Server({
|
|
6
6
|
name: "ai-enderun-mcp",
|
|
7
|
-
version: "0.2.
|
|
7
|
+
version: "0.2.2",
|
|
8
8
|
}, {
|
|
9
9
|
capabilities: {
|
|
10
10
|
tools: {},
|
|
@@ -98,8 +98,8 @@ export const frameworkHandlers = {
|
|
|
98
98
|
{ path: ".env.example", type: "file" },
|
|
99
99
|
{ path: path.join(frameworkDir, "PROJECT_MEMORY.md"), type: "file" },
|
|
100
100
|
{ path: path.join(frameworkDir, "BRAIN_DASHBOARD.md"), type: "file" },
|
|
101
|
-
{ path: "docs/tech-stack.md", type: "file" },
|
|
102
|
-
{ path: "docs/project-docs.md", type: "file" },
|
|
101
|
+
{ path: path.join(frameworkDir, "docs/tech-stack.md"), type: "file" },
|
|
102
|
+
{ path: path.join(frameworkDir, "docs/project-docs.md"), type: "file" },
|
|
103
103
|
];
|
|
104
104
|
for (const item of checkPaths) {
|
|
105
105
|
const fullPath = path.join(projectRoot, item.path);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
export const FRAMEWORK_VERSION = "0.2.
|
|
3
|
+
export const FRAMEWORK_VERSION = "0.2.2";
|
|
4
4
|
export function getFrameworkDir(projectRoot) {
|
|
5
5
|
const adapters = [".gemini", ".claude", ".cursor", ".codex", ".enderun"];
|
|
6
6
|
for (const adp of adapters) {
|
|
@@ -56,10 +56,18 @@ export function buildLineMatches(files, matcher, maxResults, projectRoot) {
|
|
|
56
56
|
return matches;
|
|
57
57
|
}
|
|
58
58
|
export function collectMarkdownArtifacts(projectRoot) {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
const frameworkDir = getFrameworkDir(projectRoot);
|
|
60
|
+
const searchPaths = [
|
|
61
|
+
path.join(projectRoot, "docs"),
|
|
62
|
+
path.join(projectRoot, frameworkDir, "docs")
|
|
63
|
+
];
|
|
64
|
+
const results = [];
|
|
65
|
+
for (const docsRoot of searchPaths) {
|
|
66
|
+
if (fs.existsSync(docsRoot)) {
|
|
67
|
+
results.push(...collectFilesRecursively(docsRoot, new Set(["md"])).map((filePath) => path.relative(projectRoot, filePath)));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return Array.from(new Set(results));
|
|
63
71
|
}
|
|
64
72
|
export function replaceSectionContent(markdown, sectionTitle, newBody) {
|
|
65
73
|
const escaped = sectionTitle.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -97,8 +97,8 @@ export const frameworkHandlers = {
|
|
|
97
97
|
{ path: ".env.example", type: "file" },
|
|
98
98
|
{ path: path.join(frameworkDir, "PROJECT_MEMORY.md"), type: "file" },
|
|
99
99
|
{ path: path.join(frameworkDir, "BRAIN_DASHBOARD.md"), type: "file" },
|
|
100
|
-
{ path: "docs/tech-stack.md", type: "file" },
|
|
101
|
-
{ path: "docs/project-docs.md", type: "file" },
|
|
100
|
+
{ path: path.join(frameworkDir, "docs/tech-stack.md"), type: "file" },
|
|
101
|
+
{ path: path.join(frameworkDir, "docs/project-docs.md"), type: "file" },
|
|
102
102
|
];
|
|
103
103
|
for (const item of checkPaths) {
|
|
104
104
|
const fullPath = path.join(projectRoot, item.path);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
|
|
4
|
-
export const FRAMEWORK_VERSION = "0.2.
|
|
4
|
+
export const FRAMEWORK_VERSION = "0.2.4";
|
|
5
5
|
|
|
6
6
|
export function getFrameworkDir(projectRoot: string): string {
|
|
7
7
|
const adapters = [".gemini", ".claude", ".cursor", ".codex", ".enderun"];
|
|
@@ -62,10 +62,19 @@ export function buildLineMatches(files: string[], matcher: (line: string) => boo
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
export function collectMarkdownArtifacts(projectRoot: string): string[] {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
const frameworkDir = getFrameworkDir(projectRoot);
|
|
66
|
+
const searchPaths = [
|
|
67
|
+
path.join(projectRoot, "docs"),
|
|
68
|
+
path.join(projectRoot, frameworkDir, "docs")
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
const results: string[] = [];
|
|
72
|
+
for (const docsRoot of searchPaths) {
|
|
73
|
+
if (fs.existsSync(docsRoot)) {
|
|
74
|
+
results.push(...collectFilesRecursively(docsRoot, new Set(["md"])).map((filePath) => path.relative(projectRoot, filePath)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return Array.from(new Set(results));
|
|
69
78
|
}
|
|
70
79
|
|
|
71
80
|
export function replaceSectionContent(markdown: string, sectionTitle: string, newBody: string): string {
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
2
3
|
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "Node",
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"sourceMap": true,
|
|
9
4
|
"outDir": "./dist",
|
|
10
|
-
"
|
|
11
|
-
"esModuleInterop": true,
|
|
12
|
-
"skipLibCheck": true,
|
|
13
|
-
"forceConsistentCasingInFileNames": true
|
|
5
|
+
"rootDir": "./src"
|
|
14
6
|
},
|
|
15
7
|
"include": ["src/**/*"],
|
|
16
8
|
"exclude": ["node_modules", "dist"]
|