agent-enderun 0.6.1 → 0.6.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 +110 -2
- package/.enderun/STATUS.md +3 -3
- package/.enderun/agents/analyst.md +97 -10
- package/.enderun/agents/backend.md +258 -14
- package/.enderun/agents/explorer.md +67 -2
- package/.enderun/agents/frontend.md +404 -66
- package/.enderun/agents/git.md +19 -2
- package/.enderun/agents/manager.md +412 -45
- package/.enderun/agents/mobile.md +62 -18
- package/.enderun/agents/native.md +60 -10
- package/.enderun/blueprints/backend/errors/blueprint.json +11 -0
- package/.enderun/blueprints/backend/errors/domain-error.ts +34 -55
- package/.enderun/knowledge/framework_vs_user_project_boundary.md +52 -0
- package/.enderun/knowledge/frontend_professionalization_guidelines.md +108 -0
- package/.enderun/knowledge/hermes_live_test_guidelines.md +90 -0
- package/.enderun/knowledge/manager_authority_audit_enforcement.md +104 -0
- package/.enderun/knowledge/project_scaffold_guidelines.md +99 -0
- package/.enderun/knowledge/reference_application_guidelines.md +90 -0
- package/.enderun/messages/2026-05-23-backend-to-manager-auth-errors-reply.json +23 -0
- package/.enderun/messages/2026-05-23-manager-to-backend-auth-errors.json +26 -0
- package/ENDERUN.md +10 -3
- package/README.md +185 -625
- package/antigravity.md +15 -0
- package/bin/cli.js +92 -27
- package/docs/README.md +33 -3
- package/docs/getting-started.md +497 -0
- package/docs/roadmap.md +200 -0
- package/framework-mcp/README.md +1 -1
- package/framework-mcp/dist/index.js +0 -0
- package/framework-mcp/dist/tools/academy.js +6 -8
- package/framework-mcp/dist/tools/codebase.js +6 -6
- package/framework-mcp/dist/tools/contract.js +94 -4
- package/framework-mcp/dist/tools/database.js +1 -1
- package/framework-mcp/dist/tools/framework.js +8 -12
- package/framework-mcp/dist/tools/git.js +2 -2
- package/framework-mcp/dist/tools/knowledge.js +4 -4
- package/framework-mcp/dist/tools/memory.js +5 -7
- package/framework-mcp/dist/tools/messages.js +6 -6
- package/framework-mcp/dist/tools/repository.js +4 -4
- package/framework-mcp/dist/tools/scaffold.js +6 -3
- package/framework-mcp/dist/tools/security.js +4 -4
- package/framework-mcp/dist/utils.js +1 -1
- package/framework-mcp/package.json +1 -1
- package/framework-mcp/src/schemas.ts +7 -0
- package/framework-mcp/src/tools/academy.ts +5 -9
- package/framework-mcp/src/tools/codebase.ts +6 -6
- package/framework-mcp/src/tools/contract.ts +114 -4
- package/framework-mcp/src/tools/database.ts +1 -1
- package/framework-mcp/src/tools/framework.ts +9 -12
- package/framework-mcp/src/tools/git.ts +2 -2
- package/framework-mcp/src/tools/knowledge.ts +5 -6
- package/framework-mcp/src/tools/memory.ts +5 -6
- package/framework-mcp/src/tools/messages.ts +94 -28
- package/framework-mcp/src/tools/repository.ts +5 -6
- package/framework-mcp/src/tools/scaffold.ts +9 -6
- package/framework-mcp/src/tools/security.ts +4 -4
- package/framework-mcp/src/utils.ts +2 -2
- package/gemini.md +4 -4
- package/package.json +11 -7
- package/panda.config.ts +3 -1
- package/.enderun/benchmarks/.gitkeep +0 -0
- package/.enderun/blueprints/backend/middleware/error-handler.ts +0 -24
- package/.enderun/blueprints/backend/types/api.ts +0 -20
- package/.enderun/blueprints/backend/types/brands.ts +0 -12
- package/.enderun/blueprints/backend/types/constants.ts +0 -34
- package/.enderun/blueprints/backend/types/index.ts +0 -49
- package/.enderun/blueprints/backend/types/logs.ts +0 -16
- package/.enderun/blueprints/backend/types/models.ts +0 -65
- package/.enderun/blueprints/frontend/ui/Button.tsx +0 -60
- package/.enderun/blueprints/frontend/ui/Input.tsx +0 -43
- package/.enderun/monitoring/.gitkeep +0 -0
- package/gemini-extension.json +0 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-enderun",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
|
|
5
5
|
"author": "Yusuf BEKAR",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
".env.example",
|
|
44
44
|
"tsconfig.json",
|
|
45
45
|
"panda.config.ts",
|
|
46
|
-
"
|
|
47
|
-
"gemini-extension.json",
|
|
46
|
+
"antigravity.md",
|
|
48
47
|
"cursor.md",
|
|
49
48
|
"claude.md",
|
|
50
49
|
"codex.md",
|
|
50
|
+
"gemini.md",
|
|
51
51
|
"docs"
|
|
52
52
|
],
|
|
53
53
|
"scripts": {
|
|
54
|
-
"enderun:build": "npm run build --
|
|
54
|
+
"enderun:build": "npm run build --workspace=framework-mcp",
|
|
55
55
|
"enderun:test": "vitest run",
|
|
56
56
|
"enderun:test:watch": "vitest",
|
|
57
57
|
"enderun:status": "agent-enderun status",
|
|
@@ -66,18 +66,22 @@
|
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@eslint/js": "^9.20.0",
|
|
69
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
70
|
+
"@pandacss/dev": "^0.53.0",
|
|
69
71
|
"@types/node": "^22.13.4",
|
|
72
|
+
"agent-enderun": "^0.6.5",
|
|
70
73
|
"concurrently": "^9.1.2",
|
|
71
74
|
"eslint": "^9.20.1",
|
|
75
|
+
"ts-morph": "^28.0.0",
|
|
72
76
|
"tsx": "^4.19.4",
|
|
73
77
|
"typescript": "^5.9.3",
|
|
74
78
|
"typescript-eslint": "^8.59.3",
|
|
75
79
|
"vitest": "^3.0.5",
|
|
76
|
-
"
|
|
80
|
+
"zod": "^3.24.2"
|
|
77
81
|
},
|
|
78
82
|
"enderun": {
|
|
79
|
-
"version": "0.5
|
|
80
|
-
"initializedAt": "2026-05-
|
|
83
|
+
"version": "0.6.5",
|
|
84
|
+
"initializedAt": "2026-05-23T13:00:32.411Z"
|
|
81
85
|
},
|
|
82
86
|
"dependencies": {}
|
|
83
87
|
}
|
package/panda.config.ts
CHANGED
|
@@ -9,7 +9,9 @@ export default defineConfig({
|
|
|
9
9
|
"./src/**/*.{js,jsx,ts,tsx}",
|
|
10
10
|
"./pages/**/*.{js,jsx,ts,tsx}",
|
|
11
11
|
"./apps/**/*.{js,jsx,ts,tsx}",
|
|
12
|
-
|
|
12
|
+
// Project-internal UI components only (no packages/ui by default)
|
|
13
|
+
"./apps/**/src/components/**/*.{ts,tsx}",
|
|
14
|
+
"./apps/**/src/ui/**/*.{ts,tsx}",
|
|
13
15
|
],
|
|
14
16
|
|
|
15
17
|
// Files to exclude
|
|
File without changes
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { DomainError } from "../errors/domain-error.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Global Error Handler for Fastify (Template)
|
|
6
|
-
* This middleware captures DomainErrors and formats them consistently.
|
|
7
|
-
*/
|
|
8
|
-
export const errorHandler = (error: unknown, request: any, reply: any) => {
|
|
9
|
-
// Capture custom domain errors
|
|
10
|
-
if (error instanceof DomainError) {
|
|
11
|
-
return reply.status(error.statusCode).send(error.toApiResponse());
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// Fallback for unknown errors
|
|
15
|
-
request.log.error(error);
|
|
16
|
-
|
|
17
|
-
return reply.status(500).send({
|
|
18
|
-
error: {
|
|
19
|
-
code: "INTERNAL_ERROR",
|
|
20
|
-
message: "An unexpected error occurred.",
|
|
21
|
-
details: process.env.NODE_ENV === "development" ? error.message : undefined
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { TraceID } from "./brands.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* API Response Wrappers
|
|
5
|
-
*/
|
|
6
|
-
export interface ApiResponse<T> {
|
|
7
|
-
data: T;
|
|
8
|
-
meta?: {
|
|
9
|
-
requestId: TraceID;
|
|
10
|
-
timestamp: string;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface ApiError {
|
|
15
|
-
error: {
|
|
16
|
-
code: string;
|
|
17
|
-
message: string;
|
|
18
|
-
details?: unknown;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Branded Type Utility
|
|
3
|
-
*/
|
|
4
|
-
export type Brand<K, T> = K & { __brand: T };
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Entity IDs (Branded)
|
|
8
|
-
*/
|
|
9
|
-
export type TraceID = Brand<string, "TraceID">;
|
|
10
|
-
export type AgentID = Brand<string, "AgentID">;
|
|
11
|
-
export type ProjectID = Brand<string, "ProjectID">;
|
|
12
|
-
export type UserID = Brand<string, "UserID">;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { TraceID } from "./brands.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Project Phases
|
|
5
|
-
*/
|
|
6
|
-
export const PROJECT_PHASES = ["PHASE_0", "PHASE_1", "PHASE_2", "PHASE_3", "PHASE_4"] as const;
|
|
7
|
-
export type ProjectPhase = (typeof PROJECT_PHASES)[number];
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Execution Profiles
|
|
11
|
-
*/
|
|
12
|
-
export const EXECUTION_PROFILES = ["Lightweight", "Full"] as const;
|
|
13
|
-
export type ExecutionProfile = (typeof EXECUTION_PROFILES)[number];
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Task Priorities
|
|
17
|
-
*/
|
|
18
|
-
export const TASK_PRIORITIES = ["P0", "P1", "P2", "P3"] as const;
|
|
19
|
-
export type TaskPriority = (typeof TASK_PRIORITIES)[number];
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Task Statuses
|
|
23
|
-
*/
|
|
24
|
-
export const TASK_STATUSES = ["PENDING", "IN_PROGRESS", "BLOCKED", "COMPLETED", "FAILED"] as const;
|
|
25
|
-
export type TaskStatus = (typeof TASK_STATUSES)[number];
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Action Types & Status
|
|
29
|
-
*/
|
|
30
|
-
export const ACTION_TYPES = ["CREATE", "MODIFY", "DELETE", "RESEARCH", "ORCHESTRATE"] as const;
|
|
31
|
-
export type ActionType = (typeof ACTION_TYPES)[number];
|
|
32
|
-
|
|
33
|
-
export const ACTION_STATUSES = ["SUCCESS", "FAILURE", "WAITING"] as const;
|
|
34
|
-
export type ActionStatus = (typeof ACTION_STATUSES)[number];
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Enderun — App-Local Types (Modular)
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export * from "./brands.js";
|
|
6
|
-
export * from "./constants.js";
|
|
7
|
-
export * from "./models.js";
|
|
8
|
-
export * from "./api.js";
|
|
9
|
-
export * from "./logs.js";
|
|
10
|
-
|
|
11
|
-
// --- Generated Application Contract ---
|
|
12
|
-
export type RoleID = Brand<string, "RoleID">;
|
|
13
|
-
export type ReportID = Brand<string, "ReportID">;
|
|
14
|
-
export type CustomerID = Brand<string, "CustomerID">;
|
|
15
|
-
|
|
16
|
-
export interface AuthSession {
|
|
17
|
-
user: User;
|
|
18
|
-
token: string;
|
|
19
|
-
expiresAt: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface Role {
|
|
23
|
-
id: RoleID;
|
|
24
|
-
name: string;
|
|
25
|
-
permissions: string[];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface Customer {
|
|
29
|
-
id: CustomerID;
|
|
30
|
-
name: string;
|
|
31
|
-
ownerId: UserID;
|
|
32
|
-
status: "LEAD" | "ACTIVE" | "AT_RISK";
|
|
33
|
-
annualValue: number;
|
|
34
|
-
createdAt: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface ReportMetric {
|
|
38
|
-
id: ReportID;
|
|
39
|
-
label: string;
|
|
40
|
-
value: number;
|
|
41
|
-
trend: "UP" | "DOWN" | "FLAT";
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface DashboardSummary {
|
|
45
|
-
customers: Customer[];
|
|
46
|
-
users: User[];
|
|
47
|
-
roles: Role[];
|
|
48
|
-
reports: ReportMetric[];
|
|
49
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { TraceID, AgentID } from "./brands.js";
|
|
2
|
-
import { ActionType, ActionStatus } from "./constants.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Audit & Agent Logging Types
|
|
6
|
-
*/
|
|
7
|
-
export interface AgentActionLog {
|
|
8
|
-
timestamp: string;
|
|
9
|
-
agent: AgentID;
|
|
10
|
-
action: ActionType;
|
|
11
|
-
requestId: TraceID | "—";
|
|
12
|
-
status: ActionStatus;
|
|
13
|
-
summary: string;
|
|
14
|
-
files?: string[];
|
|
15
|
-
details?: Record<string, unknown>;
|
|
16
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { UserID, TraceID, AgentID } from "./brands.js";
|
|
2
|
-
import { ProjectPhase, ExecutionProfile, TaskPriority, TaskStatus } from "./constants.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Base Entity Fields
|
|
6
|
-
*/
|
|
7
|
-
export interface BaseEntity {
|
|
8
|
-
id: string; // Usually ULID
|
|
9
|
-
createdAt: string;
|
|
10
|
-
updatedAt: string;
|
|
11
|
-
deletedAt?: string | null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Audit Log Model
|
|
16
|
-
*/
|
|
17
|
-
export interface AuditLog extends BaseEntity {
|
|
18
|
-
entityName: string;
|
|
19
|
-
entityId: string;
|
|
20
|
-
action: "CREATE" | "UPDATE" | "DELETE" | "RESTORE";
|
|
21
|
-
userId: UserID;
|
|
22
|
-
previousState?: Record<string, unknown> | null;
|
|
23
|
-
newState?: Record<string, unknown> | null;
|
|
24
|
-
traceId: TraceID;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* User Model
|
|
29
|
-
*/
|
|
30
|
-
export interface User extends BaseEntity {
|
|
31
|
-
id: UserID;
|
|
32
|
-
email: string;
|
|
33
|
-
fullName: string;
|
|
34
|
-
role: "ADMIN" | "DEVELOPER" | "VIEWER";
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface UserProfile extends User {
|
|
38
|
-
avatarUrl?: string;
|
|
39
|
-
bio?: string;
|
|
40
|
-
preferences: Record<string, unknown>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Project Status
|
|
45
|
-
*/
|
|
46
|
-
export interface ProjectStatus {
|
|
47
|
-
phase: ProjectPhase;
|
|
48
|
-
profile: ExecutionProfile;
|
|
49
|
-
lastUpdate: string;
|
|
50
|
-
activeTraceId: TraceID | null;
|
|
51
|
-
blockers: string[];
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Task Model
|
|
56
|
-
*/
|
|
57
|
-
export interface Task {
|
|
58
|
-
id: TraceID;
|
|
59
|
-
description: string;
|
|
60
|
-
agent: AgentID;
|
|
61
|
-
priority: TaskPriority;
|
|
62
|
-
status: TaskStatus;
|
|
63
|
-
createdAt: string;
|
|
64
|
-
updatedAt: string;
|
|
65
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { css, cx } from "../../../styled-system/css";
|
|
2
|
-
import { type HTMLPandaProps } from "../../../styled-system/types";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* GOLDEN STANDARD: Button Component
|
|
6
|
-
* Uses Semantic Tokens for automatic theme support.
|
|
7
|
-
*/
|
|
8
|
-
export interface ButtonProps extends HTMLPandaProps<"button"> {
|
|
9
|
-
variant?: "primary" | "secondary" | "outline" | "ghost";
|
|
10
|
-
size?: "sm" | "md" | "lg";
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const Button = (props: ButtonProps) => {
|
|
14
|
-
const { variant = "primary", size = "md", className, ...rest } = props;
|
|
15
|
-
|
|
16
|
-
const buttonStyles = css({
|
|
17
|
-
display: "inline-flex",
|
|
18
|
-
alignItems: "center",
|
|
19
|
-
justifyContent: "center",
|
|
20
|
-
fontWeight: "600",
|
|
21
|
-
borderRadius: "md",
|
|
22
|
-
cursor: "pointer",
|
|
23
|
-
transition: "all 0.2s ease",
|
|
24
|
-
_disabled: { opacity: 0.5, cursor: "not-allowed" },
|
|
25
|
-
_active: { transform: "scale(0.98)" },
|
|
26
|
-
|
|
27
|
-
// Size variants
|
|
28
|
-
...(size === "sm" && { px: "3", py: "1.5", fontSize: "xs" }),
|
|
29
|
-
...(size === "md" && { px: "4", py: "2", fontSize: "sm" }),
|
|
30
|
-
...(size === "lg" && { px: "6", py: "3", fontSize: "md" }),
|
|
31
|
-
|
|
32
|
-
// Theme-aware Semantic Tokens
|
|
33
|
-
...(variant === "primary" && {
|
|
34
|
-
bg: "accent.default",
|
|
35
|
-
color: "accent.fg",
|
|
36
|
-
_hover: { bg: "accent.emphasis" },
|
|
37
|
-
}),
|
|
38
|
-
...(variant === "secondary" && {
|
|
39
|
-
bg: "bg.muted",
|
|
40
|
-
color: "text.default",
|
|
41
|
-
_hover: { bg: "border.default" },
|
|
42
|
-
}),
|
|
43
|
-
...(variant === "outline" && {
|
|
44
|
-
bg: "transparent",
|
|
45
|
-
border: "1px solid",
|
|
46
|
-
borderColor: "border.default",
|
|
47
|
-
color: "text.default",
|
|
48
|
-
_hover: { bg: "bg.muted" },
|
|
49
|
-
}),
|
|
50
|
-
...(variant === "ghost" && {
|
|
51
|
-
bg: "transparent",
|
|
52
|
-
color: "text.default",
|
|
53
|
-
_hover: { bg: "bg.muted" },
|
|
54
|
-
}),
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return (
|
|
58
|
-
<button className={cx(buttonStyles, className)} {...rest} />
|
|
59
|
-
);
|
|
60
|
-
};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { css, cx } from "../../../styled-system/css";
|
|
2
|
-
import { type HTMLPandaProps } from "../../../styled-system/types";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* GOLDEN STANDARD: Input Component
|
|
6
|
-
* Fully theme-aware using semantic border and background tokens.
|
|
7
|
-
*/
|
|
8
|
-
export interface InputProps extends HTMLPandaProps<"input"> {
|
|
9
|
-
label?: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const Input = (props: InputProps) => {
|
|
13
|
-
const { className, ...rest } = props;
|
|
14
|
-
|
|
15
|
-
const inputStyles = css({
|
|
16
|
-
width: "100%",
|
|
17
|
-
px: "4",
|
|
18
|
-
py: "2",
|
|
19
|
-
borderRadius: "md",
|
|
20
|
-
border: "1px solid",
|
|
21
|
-
borderColor: "border.default",
|
|
22
|
-
bg: "bg.canvas",
|
|
23
|
-
color: "text.default",
|
|
24
|
-
fontSize: "sm",
|
|
25
|
-
outline: "none",
|
|
26
|
-
transition: "all 0.2s ease",
|
|
27
|
-
_placeholder: { color: "text.muted" },
|
|
28
|
-
_focus: {
|
|
29
|
-
borderColor: "accent.default",
|
|
30
|
-
ring: "2px",
|
|
31
|
-
ringColor: "accent.default/20",
|
|
32
|
-
},
|
|
33
|
-
_disabled: {
|
|
34
|
-
opacity: 0.5,
|
|
35
|
-
cursor: "not-allowed",
|
|
36
|
-
bg: "bg.muted",
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
return (
|
|
41
|
-
<input className={cx(inputStyles, className)} {...rest} />
|
|
42
|
-
);
|
|
43
|
-
};
|
|
File without changes
|
package/gemini-extension.json
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Agent Enderun",
|
|
3
|
-
"description": "Enterprise-grade AI orchestration framework for software teams.",
|
|
4
|
-
"instructions": ".gemini/ENDERUN.md",
|
|
5
|
-
"mcpServers": {
|
|
6
|
-
"agent-enderun": {
|
|
7
|
-
"command": "node",
|
|
8
|
-
"args": [
|
|
9
|
-
"framework-mcp/dist/index.js"
|
|
10
|
-
]
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|