agent-enderun 0.6.0 → 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.
Files changed (75) hide show
  1. package/.enderun/PROJECT_MEMORY.md +117 -3
  2. package/.enderun/STATUS.md +4 -4
  3. package/.enderun/agents/analyst.md +98 -12
  4. package/.enderun/agents/backend.md +258 -14
  5. package/.enderun/agents/explorer.md +67 -2
  6. package/.enderun/agents/frontend.md +404 -66
  7. package/.enderun/agents/git.md +19 -2
  8. package/.enderun/agents/manager.md +412 -45
  9. package/.enderun/agents/mobile.md +63 -19
  10. package/.enderun/agents/native.md +61 -11
  11. package/.enderun/blueprints/backend/errors/blueprint.json +11 -0
  12. package/.enderun/blueprints/backend/errors/domain-error.ts +34 -55
  13. package/.enderun/docs/tech-stack.md +7 -8
  14. package/.enderun/knowledge/contract_versioning.md +1 -1
  15. package/.enderun/knowledge/framework_vs_user_project_boundary.md +52 -0
  16. package/.enderun/knowledge/frontend_professionalization_guidelines.md +108 -0
  17. package/.enderun/knowledge/hermes_live_test_guidelines.md +90 -0
  18. package/.enderun/knowledge/manager_authority_audit_enforcement.md +104 -0
  19. package/.enderun/knowledge/project_scaffold_guidelines.md +99 -0
  20. package/.enderun/knowledge/reference_application_guidelines.md +90 -0
  21. package/.enderun/messages/2026-05-23-backend-to-manager-auth-errors-reply.json +23 -0
  22. package/.enderun/messages/2026-05-23-manager-to-backend-auth-errors.json +26 -0
  23. package/ENDERUN.md +12 -4
  24. package/README.md +185 -626
  25. package/antigravity.md +15 -0
  26. package/bin/cli.js +105 -30
  27. package/bin/update-contract.js +2 -2
  28. package/docs/README.md +33 -3
  29. package/docs/getting-started.md +497 -0
  30. package/docs/roadmap.md +200 -0
  31. package/framework-mcp/README.md +1 -1
  32. package/framework-mcp/dist/index.js +0 -0
  33. package/framework-mcp/dist/tools/academy.js +6 -8
  34. package/framework-mcp/dist/tools/codebase.js +6 -6
  35. package/framework-mcp/dist/tools/contract.js +94 -4
  36. package/framework-mcp/dist/tools/database.js +1 -1
  37. package/framework-mcp/dist/tools/framework.js +8 -12
  38. package/framework-mcp/dist/tools/git.js +2 -2
  39. package/framework-mcp/dist/tools/knowledge.js +4 -4
  40. package/framework-mcp/dist/tools/memory.js +5 -7
  41. package/framework-mcp/dist/tools/messages.js +6 -6
  42. package/framework-mcp/dist/tools/repository.js +4 -4
  43. package/framework-mcp/dist/tools/scaffold.js +6 -3
  44. package/framework-mcp/dist/tools/security.js +4 -4
  45. package/framework-mcp/dist/utils.js +2 -2
  46. package/framework-mcp/package.json +1 -1
  47. package/framework-mcp/src/schemas.ts +7 -0
  48. package/framework-mcp/src/tools/academy.ts +5 -9
  49. package/framework-mcp/src/tools/codebase.ts +6 -6
  50. package/framework-mcp/src/tools/contract.ts +114 -4
  51. package/framework-mcp/src/tools/database.ts +1 -1
  52. package/framework-mcp/src/tools/framework.ts +9 -12
  53. package/framework-mcp/src/tools/git.ts +2 -2
  54. package/framework-mcp/src/tools/knowledge.ts +5 -6
  55. package/framework-mcp/src/tools/memory.ts +5 -6
  56. package/framework-mcp/src/tools/messages.ts +94 -28
  57. package/framework-mcp/src/tools/repository.ts +5 -6
  58. package/framework-mcp/src/tools/scaffold.ts +9 -6
  59. package/framework-mcp/src/tools/security.ts +4 -4
  60. package/framework-mcp/src/utils.ts +2 -2
  61. package/gemini.md +4 -4
  62. package/package.json +11 -7
  63. package/panda.config.ts +3 -1
  64. package/.enderun/benchmarks/.gitkeep +0 -0
  65. package/.enderun/blueprints/backend/middleware/error-handler.ts +0 -24
  66. package/.enderun/blueprints/backend/types/api.ts +0 -20
  67. package/.enderun/blueprints/backend/types/brands.ts +0 -12
  68. package/.enderun/blueprints/backend/types/constants.ts +0 -34
  69. package/.enderun/blueprints/backend/types/index.ts +0 -49
  70. package/.enderun/blueprints/backend/types/logs.ts +0 -16
  71. package/.enderun/blueprints/backend/types/models.ts +0 -65
  72. package/.enderun/blueprints/frontend/ui/Button.tsx +0 -60
  73. package/.enderun/blueprints/frontend/ui/Input.tsx +0 -43
  74. package/.enderun/monitoring/.gitkeep +0 -0
  75. package/gemini-extension.json +0 -13
@@ -1,10 +1,10 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
3
 
4
- export const FRAMEWORK_VERSION = "0.6.0";
4
+ export const FRAMEWORK_VERSION = "0.6.5";
5
5
 
6
6
  export function getFrameworkDir(projectRoot: string): string {
7
- const adapters = [".gemini", ".claude", ".cursor", ".enderun", ".codex"];
7
+ const adapters = [".antigravitycli", ".claude", ".cursor", ".enderun", ".codex"];
8
8
  for (const adp of adapters) {
9
9
  const fullPath = path.join(projectRoot, adp);
10
10
  if (fs.existsSync(fullPath) && fs.lstatSync(fullPath).isDirectory()) {
package/gemini.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # Agent Enderun — Gemini Adapter
2
2
 
3
- This file is the entry point for Gemini. The project's "Supreme Law" and all instructions are located in the following file:
3
+ This file is the entry point for Google Gemini. The project's "Supreme Law" and all instructions are located in the following file:
4
4
 
5
- 👉 **[.gemini/ENDERUN.md](.gemini/ENDERUN.md)**
5
+ 👉 **[{{FRAMEWORK_DIR}}/ENDERUN.md]({{FRAMEWORK_DIR}}/ENDERUN.md)**
6
6
 
7
7
  ### 🤖 AGENT DIRECTIVE
8
8
  You are ALWAYS operating as `@manager` (Team-Lead) by default — on every message, every turn. The user does NOT need to type `@manager`. Typing a specific agent (e.g. `@backend`) explicitly will override this and activate that specialist role directly. You are responsible for analysis and delegation.
9
9
 
10
10
  ⚠️ **CRITICAL STARTUP REQUIREMENT:**
11
11
  At the start of every new session/conversation or first turn, before you perform any task or respond to the user:
12
- 1. You **MUST** read `.gemini/PROJECT_MEMORY.md` immediately (using the `read_project_memory` tool or the most specific file viewing tool) to restore the project's state, active phase, Trace ID, and recent history.
13
- 2. You **MUST** read `.gemini/agents/manager.md` (or the specialist's md file in `.gemini/agents/` if explicitly overridden) to load your role-specific rules, workflows, and checklists.
12
+ 1. You **MUST** read `{{FRAMEWORK_DIR}}/PROJECT_MEMORY.md` immediately (using the `read_project_memory` tool or the most specific file viewing tool) to restore the project's state, active phase, Trace ID, and recent history.
13
+ 2. You **MUST** read `{{FRAMEWORK_DIR}}/agents/manager.md` (or the specialist's md file in `{{FRAMEWORK_DIR}}/agents/` if explicitly overridden) to load your role-specific rules, workflows, and checklists.
14
14
 
15
15
  Please read the Supreme Law thoroughly before taking any action.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-enderun",
3
- "version": "0.6.0",
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
- "gemini.md",
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 --prefix framework-mcp",
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
- "@pandacss/dev": "^0.53.0"
80
+ "zod": "^3.24.2"
77
81
  },
78
82
  "enderun": {
79
- "version": "0.5.9",
80
- "initializedAt": "2026-05-19T14:23:38.760Z"
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
- "./packages/ui/src/**/*.{ts,tsx}",
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
@@ -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
- "packages/framework-mcp/dist/index.js"
10
- ]
11
- }
12
- }
13
- }