agent-enderun 0.6.7 → 0.7.0

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 (105) hide show
  1. package/{.enderun → .antigravitycli}/BRAIN_DASHBOARD.md +0 -0
  2. package/.antigravitycli/ENDERUN.md +253 -0
  3. package/.antigravitycli/PROJECT_MEMORY.md +78 -0
  4. package/{.enderun → .antigravitycli}/STATUS.md +0 -0
  5. package/.antigravitycli/agents/agent_army_schema.json +79 -0
  6. package/.antigravitycli/agents/analyst/agent.json +55 -0
  7. package/.antigravitycli/agents/backend/agent.json +58 -0
  8. package/.antigravitycli/agents/explorer/agent.json +50 -0
  9. package/.antigravitycli/agents/frontend/agent.json +56 -0
  10. package/.antigravitycli/agents/git/agent.json +53 -0
  11. package/.antigravitycli/agents/manager/agent.json +82 -0
  12. package/.antigravitycli/agents/mobile/agent.json +52 -0
  13. package/.antigravitycli/agents/native/agent.json +56 -0
  14. package/.antigravitycli/assets/manager.png +0 -0
  15. package/{.enderun → .antigravitycli}/blueprints/README.md +1 -1
  16. package/{.enderun → .antigravitycli}/blueprints/backend/errors/config/meta.json +7 -2
  17. package/{.enderun → .antigravitycli}/blueprints/backend/errors/domain-error.ts +2 -1
  18. package/.antigravitycli/cli-commands.json +72 -0
  19. package/{.enderun → .antigravitycli}/config.json +1 -1
  20. package/{.enderun → .antigravitycli}/knowledge/api_design_rules.md +0 -0
  21. package/{.enderun → .antigravitycli}/knowledge/async_error_handling.md +0 -0
  22. package/{.enderun → .antigravitycli}/knowledge/branded_types_pattern.md +0 -0
  23. package/{.enderun → .antigravitycli}/knowledge/code_review_checklist.md +0 -0
  24. package/{.enderun → .antigravitycli}/knowledge/contract_versioning.md +0 -0
  25. package/{.enderun → .antigravitycli}/knowledge/database_migration.md +0 -0
  26. package/{.enderun → .antigravitycli}/knowledge/deployment_checklist.md +0 -0
  27. package/{.enderun → .antigravitycli}/knowledge/documentation_ownership.md +7 -7
  28. package/{.enderun → .antigravitycli}/knowledge/enterprise_capabilities_reference.md +11 -11
  29. package/{.enderun → .antigravitycli}/knowledge/enterprise_frontend_adaptation.md +4 -4
  30. package/{.enderun → .antigravitycli}/knowledge/enterprise_project_adaptation.md +3 -3
  31. package/{.enderun → .antigravitycli}/knowledge/framework_vs_user_project_boundary.md +3 -3
  32. package/{.enderun → .antigravitycli}/knowledge/frontend_professionalization_guidelines.md +2 -2
  33. package/{.enderun → .antigravitycli}/knowledge/frontend_real_battle_test_protocol.md +4 -4
  34. package/{.enderun → .antigravitycli}/knowledge/git_commit_strategy.md +0 -0
  35. package/{.enderun → .antigravitycli}/knowledge/hermes_live_test_guidelines.md +4 -4
  36. package/{.enderun → .antigravitycli}/knowledge/hermes_protocol.md +2 -2
  37. package/{.enderun → .antigravitycli}/knowledge/legacy_onboarding.md +0 -0
  38. package/{.enderun → .antigravitycli}/knowledge/manager_authority_audit_enforcement.md +4 -4
  39. package/{.enderun → .antigravitycli}/knowledge/monitoring_setup.md +0 -0
  40. package/{.enderun → .antigravitycli}/knowledge/performance_guidelines.md +0 -0
  41. package/{.enderun → .antigravitycli}/knowledge/project_scaffold_guidelines.md +4 -4
  42. package/{.enderun → .antigravitycli}/knowledge/reference_application_guidelines.md +1 -1
  43. package/{.enderun → .antigravitycli}/knowledge/repository_patterns.md +0 -0
  44. package/{.enderun → .antigravitycli}/knowledge/responsive_design_standards.md +0 -0
  45. package/{.enderun → .antigravitycli}/knowledge/security_scanning.md +0 -0
  46. package/{.enderun → .antigravitycli}/knowledge/troubleshooting_guide.md +0 -0
  47. package/{.enderun → .antigravitycli}/knowledge/zero_ui_library_policy.md +0 -0
  48. package/{.enderun/logs → .antigravitycli/messages}/.gitkeep +0 -0
  49. package/ENDERUN.md +9 -9
  50. package/README.md +115 -148
  51. package/antigravity.md +1 -1
  52. package/bin/cli.js +21 -36
  53. package/bin/validate-agent-army.js +46 -0
  54. package/docs/README.md +16 -43
  55. package/docs/architecture/approval-flows.md +38 -0
  56. package/docs/architecture/decisions/README.md +31 -0
  57. package/docs/architecture/notification-strategy.md +38 -0
  58. package/docs/backend/audit-logging.md +34 -0
  59. package/docs/backend/error-handling.md +52 -0
  60. package/docs/frontend/component-patterns.md +48 -0
  61. package/docs/frontend/forms.md +40 -0
  62. package/docs/frontend/notifications.md +37 -0
  63. package/framework-mcp/README.md +1 -1
  64. package/framework-mcp/dist/tools/framework.js +9 -4
  65. package/framework-mcp/dist/tools/messages.js +1 -1
  66. package/framework-mcp/dist/utils.js +17 -8
  67. package/framework-mcp/package.json +1 -1
  68. package/framework-mcp/src/tools/database.ts +2 -2
  69. package/framework-mcp/src/tools/framework.ts +9 -4
  70. package/framework-mcp/src/utils.ts +2 -9
  71. package/package.json +7 -11
  72. package/.enderun/PROJECT_MEMORY.md +0 -47
  73. package/.enderun/agents/README.md +0 -40
  74. package/.enderun/agents/analyst.md +0 -432
  75. package/.enderun/agents/backend.md +0 -683
  76. package/.enderun/agents/explorer.md +0 -253
  77. package/.enderun/agents/frontend.md +0 -742
  78. package/.enderun/agents/git.md +0 -190
  79. package/.enderun/agents/manager.md +0 -574
  80. package/.enderun/agents/mobile.md +0 -177
  81. package/.enderun/agents/native.md +0 -225
  82. package/.enderun/cli-commands.json +0 -21
  83. package/.enderun/docs/README.md +0 -50
  84. package/.enderun/docs/api/README.md +0 -8
  85. package/.enderun/docs/api/auth.md +0 -11
  86. package/.enderun/docs/api/errors.md +0 -7
  87. package/.enderun/docs/error-handling.md +0 -13
  88. package/.enderun/docs/phase1-reference-app-execution-plan.md +0 -177
  89. package/.enderun/docs/privacy.md +0 -3
  90. package/.enderun/docs/project-docs.md +0 -19
  91. package/.enderun/docs/security.md +0 -13
  92. package/.enderun/docs/structure-audit-2026-05-24.md +0 -72
  93. package/.enderun/docs/tech-stack.md +0 -37
  94. package/.enderun/docs/troubleshooting.md +0 -7
  95. package/.enderun/logs/manager.json +0 -23
  96. package/.enderun/messages/.gitkeep +0 -0
  97. package/claude.md +0 -15
  98. package/codex.md +0 -15
  99. package/cursor.md +0 -15
  100. package/gemini.md +0 -15
  101. /package/{.enderun → .antigravitycli}/knowledge/README.md +0 -0
  102. /package/{.enderun → .antigravitycli}/knowledge/blueprint_driven_construction.md +0 -0
  103. /package/{.enderun → .antigravitycli}/knowledge/database_governance_guidelines.md +0 -0
  104. /package/{.enderun → .antigravitycli}/knowledge/documentation_ownership_status.md +0 -0
  105. /package/{.enderun → .antigravitycli}/knowledge/testing_standards.md +0 -0
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from "fs";
4
+ import path from "path";
5
+
6
+ const AGENTS_DIR = path.resolve("./.antigravitycli/agents");
7
+ const SCHEMA_PATH = path.resolve("./.antigravitycli/agents/agent_army_schema.json");
8
+
9
+ console.log("🛡️ STARTING AUTOMATED AGENT ARMY VALIDATION...");
10
+
11
+ try {
12
+ const schema = JSON.parse(fs.readFileSync(SCHEMA_PATH, "utf8"));
13
+ const requiredKeys = schema.required;
14
+ const agents = fs.readdirSync(AGENTS_DIR);
15
+ let totalFailed = 0;
16
+
17
+ console.log("--------------------------------------------------");
18
+ console.log("| Agent ID | Status | Score | Category |");
19
+ console.log("--------------------------------------------------");
20
+
21
+ for (const agentDirName of agents) {
22
+ const agentJsonPath = path.join(AGENTS_DIR, agentDirName, "agent.json");
23
+ if (!fs.existsSync(agentJsonPath)) continue;
24
+
25
+ const agent = JSON.parse(fs.readFileSync(agentJsonPath, "utf8"));
26
+ const missing = requiredKeys.filter(k => agent[k] === undefined);
27
+
28
+ if (missing.length > 0) {
29
+ console.log(`| ${agentDirName.padEnd(9)} | ❌ FAILED | ----- | ${`Missing keys: ${missing.join(", ")}`.slice(0, 14)} |`);
30
+ totalFailed++;
31
+ } else {
32
+ console.log(`| ${agent.id.padEnd(9)} | ✅ PASSED | ${agent.capabilityRating.padEnd(5)} | ${agent.category.padEnd(14).slice(0, 14)} |`);
33
+ }
34
+ }
35
+
36
+ console.log("--------------------------------------------------");
37
+ if (totalFailed > 0) {
38
+ console.error(`❌ Validation failed! Detected ${totalFailed} invalid agent configurations.`);
39
+ process.exit(1);
40
+ } else {
41
+ console.log("🎉 SUCCESS: All 8 core agents comply 100% with the Master Agent Army Schema!");
42
+ }
43
+ } catch (e) {
44
+ console.error("❌ Critical error during schema validation:", e);
45
+ process.exit(1);
46
+ }
package/docs/README.md CHANGED
@@ -1,53 +1,26 @@
1
- # Project Documentation / Proje Dokümantasyonu
1
+ # Agent Enderun Corporate Project Portal
2
2
 
3
- English | [Türkçe](#türkçe)
3
+ Welcome to the central documentation portal for your corporate project. This portal is designed to provide your **Agent Army** and human developers with a structured, clean, and unambiguous framework for software design, architecture, and governance.
4
4
 
5
5
  ---
6
6
 
7
- # English
7
+ ## 📂 Documentation Directory
8
8
 
9
- This folder is managed by **Agent Enderun agents** and contains documentation generated for **your project** — not the framework itself.
9
+ ### [1. Architecture & Governance](architecture/)
10
+ - **[Architecture Decisions (ADRs)](architecture/decisions/)**: Log of key architectural choices and design patterns.
11
+ - **[Approval & High-Risk Workflows](architecture/approval-flows.md)**: Detailed contracts and state machines for `managerApproval` tokens.
12
+ - **[Notification Strategy](architecture/notification-strategy.md)**: Dynamic notification patterns and toaster integrations.
10
13
 
11
- ## What Goes Here
14
+ ### [2. Frontend Standards](frontend/)
15
+ - **[Component Patterns](frontend/component-patterns.md)**: Guidelines for custom, Zero-UI-Library React components styled with Panda CSS.
16
+ - **[Form Validations](frontend/forms.md)**: Type-safe form states using Zod and React hooks.
17
+ - **[Toaster Notifications](frontend/notifications.md)**: Integration guides for Sonner toast configurations.
12
18
 
13
- | File | Owner Agent | Description |
14
- | :--- | :--- | :--- |
15
- | `architecture.md` | @backend | System architecture and data flow diagrams |
16
- | `api-reference.md` | @backend | Public API endpoints and usage examples |
17
- | `components.md` | @frontend | UI component catalog and usage guidelines |
18
- | `deployment.md` | @manager | Deployment steps and environment setup |
19
- | `decisions.md` | @manager | Architecture Decision Records (ADRs) |
20
-
21
- ## Distinction from `.enderun/docs/`
22
-
23
- | Path | Purpose |
24
- | :--- | :--- |
25
- | `/docs/` | **Your project** documentation — written by agents as features are built |
26
- | `/.enderun/docs/` | **Framework** configuration — tech-stack, security policy, privacy policy |
27
-
28
- > Agents will populate this folder automatically during **PHASE_2 (Core Development)**.
19
+ ### [3. Backend Standards](backend/)
20
+ - **[Error Handling](backend/error-handling.md)**: Standardized `DomainError` class hierarchies and Fastify error maps.
21
+ - **[Audit Logging](backend/audit-logging.md)**: Database auditing schemes and transaction log contracts.
29
22
 
30
23
  ---
31
24
 
32
- # Türkçe
33
-
34
- Bu klasör **Agent Enderun ajanları** tarafından yönetilir ve framework'ün kendisi için değil, **sizin projeniz** için oluşturulan dokümanları içerir.
35
-
36
- ## Burada Neler Var?
37
-
38
- | Dosya | Sahip Ajan | Açıklama |
39
- | :--- | :--- | :--- |
40
- | `architecture.md` | @backend | Sistem mimarisi ve veri akış diyagramları |
41
- | `api-reference.md` | @backend | Genel API uç noktaları ve kullanım örnekleri |
42
- | `components.md` | @frontend | UI bileşen kataloğu ve kullanım kılavuzları |
43
- | `deployment.md` | @manager | Dağıtım adımları ve ortam kurulumu |
44
- | `decisions.md` | @manager | Mimari Karar Kayıtları (ADRs) |
45
-
46
- ## `.enderun/docs/` Klasöründen Farkı
47
-
48
- | Yol | Amaç |
49
- | :--- | :--- |
50
- | `/docs/` | **Sizin projenizin** dokümantasyonu — özellikler geliştirildikçe ajanlar tarafından yazılır |
51
- | `/.enderun/docs/` | **Framework** konfigürasyonu — tech-stack, güvenlik politikası, gizlilik politikası |
52
-
53
- > Ajanlar bu klasörü **PHASE_2 (Core Development)** sırasında otomatik olarak dolduracaktır.
25
+ > [!TIP]
26
+ > **Enforcement Rule:** All agents in the army are mandated to read these guidelines before writing any code, ensuring 100% architectural alignment and clean, modular codebase organization.
@@ -0,0 +1,38 @@
1
+ # Approval & High-Risk Workflows
2
+
3
+ This document establishes the security guidelines, contracts, and state machines for **High-Risk Administrative Actions** that require dynamic `@manager` signature payloads.
4
+
5
+ ---
6
+
7
+ ## 🔒 High-Risk Actions Matrix
8
+
9
+ The following operations require an explicit `managerApproval` token injection:
10
+
11
+ | Action Category | Target Resource | Verification Criteria | Rollback Strategy |
12
+ | :--- | :--- | :--- | :--- |
13
+ | **Identity & Access** | suspends users, role updates | Signed token from `@manager` | demote role to standard User |
14
+ | **Data Purge** | bulk database catalog purge | `@manager` + Human dual signature | Restore from daily pg_dump |
15
+ | **System Settings** | updating cache parameters | Verified `@manager` hash | Reload last active env config |
16
+
17
+ ---
18
+
19
+ ## 🛰️ hermesApproval Transaction Payload
20
+
21
+ Every high-risk action must inject this exact JSON contract in the transaction header/payload:
22
+
23
+ ```typescript
24
+ interface ManagerApproval {
25
+ approved: boolean;
26
+ traceId: string; // active ULID Trace ID
27
+ approvedBy: "@manager"; // signed coordinator identifier
28
+ approvedAt: string; // ISO timestamp
29
+ reason: string; // justification for database auditing
30
+ riskLevel: "Critical" | "High";
31
+ rollbackPlan: string; // automated/manual rollback script steps
32
+ }
33
+ ```
34
+
35
+ ---
36
+
37
+ > [!WARNING]
38
+ > **Audit Lock:** Any transaction failing to present a verified `ManagerApproval` signature will trigger an automatic transaction abort and generate a high-priority security alert.
@@ -0,0 +1,31 @@
1
+ # Architecture Decision Records (ADRs)
2
+
3
+ Use this directory to store all major architectural and technical choices made during the development of your corporate applications. Storing decisions as markdown-based ADRs creates a strong institutional memory, allowing future developers and AI agents to quickly understand the rationale behind the system's design.
4
+
5
+ ---
6
+
7
+ ## 📝 ADR Template
8
+
9
+ Every new ADR must follow this exact format:
10
+
11
+ ```markdown
12
+ # ADR [ID]: [Title of Decision]
13
+
14
+ **Date:** YYYY-MM-DD
15
+ **Status:** [Proposed | Approved | Superseded | Retired]
16
+ **Author:** [Agent Name | Developer Name]
17
+
18
+ ## Context
19
+ Provide brief background details regarding the problem we are solving, technical constraints, and why a decision is necessary.
20
+
21
+ ## Decision
22
+ Detail the chosen path, technologies, patterns, or libraries being adopted.
23
+
24
+ ## Consequences
25
+ Outline the positive, negative, and neutral impacts of this decision on the codebase, performance, and maintenance.
26
+ ```
27
+
28
+ ---
29
+
30
+ > [!IMPORTANT]
31
+ > **Traceability:** Every ADR must include the active **Trace ID** under which it was generated to maintain 100% development accountability.
@@ -0,0 +1,38 @@
1
+ # Notification Strategy & Toast Patterns
2
+
3
+ This document defines the central notification patterns for all web applications, ensuring consistent, responsive, and highly accessible user feedback.
4
+
5
+ ---
6
+
7
+ ## 🎨 Toast Design Tokens
8
+
9
+ All notifications must be categorized under these specific fütüristik statuses:
10
+
11
+ - **SUCCESS (Emerald Green):** For completed asynchronous actions.
12
+ - **ERROR (Ruby Red):** For blocked operations or aborted transactions.
13
+ - **INFO (Neon Blue):** For background jobs and non-blocking events.
14
+ - **WARNING (Amber Orange):** For dangerous or high-risk state mutations.
15
+
16
+ ---
17
+
18
+ ## 💻 Technical Integration (Sonner Toaster)
19
+
20
+ The frontend applications must use the custom Sonner Toaster wrapped in a highly accessible container:
21
+
22
+ ```tsx
23
+ import { toast } from "sonner";
24
+
25
+ // Standard Success Toast
26
+ toast.success("User role updated successfully.", {
27
+ description: "Trace ID: 01JK5V3A4B5...",
28
+ action: {
29
+ label: "Undo",
30
+ onClick: () => handleRollback()
31
+ }
32
+ });
33
+ ```
34
+
35
+ ---
36
+
37
+ > [!TIP]
38
+ > **Accessibility:** Every toast notification must carry an explicit `role="alert"` or `role="status"` attribute to ensure compatible screen-reader audio feedback.
@@ -0,0 +1,34 @@
1
+ # Backend Audit Logging & Observability
2
+
3
+ This document defines the schema, storage criteria, and compliance guidelines for transactional database audit logs.
4
+
5
+ ---
6
+
7
+ ## 🔒 Audit Log Schema
8
+
9
+ Every state-changing transaction (Insert, Update, Delete) must generate a secure, untamperable audit record with this exact schema:
10
+
11
+ ```json
12
+ {
13
+ "timestamp": "2026-05-24T12:00:00.000Z",
14
+ "userId": "usr_91a0b3...",
15
+ "operation": "UPDATE",
16
+ "targetTable": "users",
17
+ "targetRowId": "42",
18
+ "previousState": {
19
+ "role": "User",
20
+ "status": "Active"
21
+ },
22
+ "newState": {
23
+ "role": "SuperAdmin",
24
+ "status": "Active"
25
+ },
26
+ "traceId": "01H...",
27
+ "managerApprovalSignature": "approved_sig_payload_hash"
28
+ }
29
+ ```
30
+
31
+ ---
32
+
33
+ > [!WARNING]
34
+ > **Data Privacy:** Audit logs must never contain raw PII (Personally Identifiable Information) such as unhashed passwords, credit card tokens, or cleartext social security numbers.
@@ -0,0 +1,52 @@
1
+ # Backend Error Handling & DomainError Hierarchy
2
+
3
+ This document defines the error handling architecture, status codes, and standard API responses for all Fastify backend microservices.
4
+
5
+ ---
6
+
7
+ ## 🔒 DomainError Class Structure
8
+
9
+ Never throw raw javascript errors. Always extend the abstract `DomainError` class to ensure all failures carry typed status codes and machine-readable error codes:
10
+
11
+ ```typescript
12
+ export abstract class DomainError extends Error {
13
+ public readonly statusCode: number;
14
+ public readonly code: string;
15
+
16
+ constructor(message: string, statusCode: number, code: string) {
17
+ super(message);
18
+ this.name = this.constructor.name;
19
+ this.statusCode = statusCode;
20
+ this.code = code;
21
+ Error.captureStackTrace(this, this.constructor);
22
+ }
23
+ }
24
+ ```
25
+
26
+ ---
27
+
28
+ ## 📝 Error Map Example
29
+
30
+ Map domain errors securely inside Fastify error handlers:
31
+
32
+ ```typescript
33
+ fastify.setErrorHandler((error, request, reply) => {
34
+ if (error instanceof DomainError) {
35
+ reply.status(error.statusCode).send({
36
+ success: false,
37
+ code: error.code,
38
+ message: error.message,
39
+ traceId: request.headers["x-trace-id"]
40
+ });
41
+ return;
42
+ }
43
+
44
+ // Log unexpected internal errors securely
45
+ fastify.log.error(error);
46
+ reply.status(500).send({
47
+ success: false,
48
+ code: "INTERNAL_ERROR",
49
+ message: "An unexpected error occurred."
50
+ });
51
+ });
52
+ ```
@@ -0,0 +1,48 @@
1
+ # Frontend Component Patterns & Panda CSS Standards
2
+
3
+ Guidelines for crafting custom, high-performance, and highly accessible React components styled exclusively with Panda CSS.
4
+
5
+ ---
6
+
7
+ ## 🎨 Zero UI Library Policy
8
+
9
+ In our framework, using ready-made external UI libraries (such as Radix UI, Shadcn, or Tailwind CSS) is **strictly forbidden**. This prevents bundle bloat, ensures design consistency, and protects codebase hygiene.
10
+
11
+ All components must be:
12
+ - Written as custom vanilla HTML elements.
13
+ - Styled with type-safe Panda CSS design tokens.
14
+ - Bound to state using lightweight React hooks.
15
+
16
+ ---
17
+
18
+ ## 💻 Panda CSS Styling Example
19
+
20
+ Create fütüristik glassmorphic containers using type-safe tokens:
21
+
22
+ ```tsx
23
+ import { css } from "../../styled-system/css";
24
+
25
+ export const Card = ({ children }) => {
26
+ return (
27
+ <div className={css({
28
+ padding: "6",
29
+ borderRadius: "xl",
30
+ background: "rgba(255, 255, 255, 0.05)",
31
+ backdropFilter: "blur(12px)",
32
+ border: "1px solid rgba(255, 255, 255, 0.1)",
33
+ transition: "all 0.3s ease",
34
+ _hover: {
35
+ background: "rgba(255, 255, 255, 0.08)",
36
+ transform: "translateY(-4px)"
37
+ }
38
+ })}>
39
+ {children}
40
+ </div>
41
+ );
42
+ };
43
+ ```
44
+
45
+ ---
46
+
47
+ > [!IMPORTANT]
48
+ > **Unique Test IDs:** Every interactive component (buttons, inputs, select triggers) must include a unique `data-testid` attribute to facilitate automated QA auditing.
@@ -0,0 +1,40 @@
1
+ # Type-Safe Forms with Zod Validations
2
+
3
+ Guidelines for building highly responsive, type-safe web forms using React state hooks and Zod validation schemas.
4
+
5
+ ---
6
+
7
+ ## 📝 Form Validation Pattern
8
+
9
+ Always decouple validation schemas from the component render context:
10
+
11
+ ```typescript
12
+ import { z } from "zod";
13
+
14
+ export const CreateUserFormSchema = z.object({
15
+ email: z.string().email("Invalid email address"),
16
+ role: z.enum(["admin", "editor", "user"]),
17
+ fullName: z.string().min(2, "Full name must be at least 2 characters")
18
+ });
19
+ ```
20
+
21
+ Verify states on submit:
22
+
23
+ ```tsx
24
+ const onSubmit = (data: unknown) => {
25
+ const result = CreateUserFormSchema.safeParse(data);
26
+ if (!result.success) {
27
+ const fieldErrors = result.error.formErrors.fieldErrors;
28
+ setErrors(fieldErrors);
29
+ return;
30
+ }
31
+
32
+ // Submit verified payload
33
+ submitPayload(result.data);
34
+ };
35
+ ```
36
+
37
+ ---
38
+
39
+ > [!IMPORTANT]
40
+ > **Keyboard Traps:** Ensure form fields support keyboard navigation (`Tab` index navigation) and submit correctly upon hitting `Enter` when inside an active field.
@@ -0,0 +1,37 @@
1
+ # Frontend Notifications & Sonner Toaster Integration
2
+
3
+ This document defines the integration steps, design tokens, and accessibility standards for frontend notifications inside your React/Vite applications.
4
+
5
+ ---
6
+
7
+ ## 💻 Toaster Configuration
8
+
9
+ Place the custom Sonner Toaster container in your root layout:
10
+
11
+ ```tsx
12
+ import { Toaster } from "sonner";
13
+
14
+ export const RootLayout = ({ children }) => {
15
+ return (
16
+ <>
17
+ <Toaster
18
+ theme="dark"
19
+ position="bottom-right"
20
+ toastOptions={{
21
+ style: {
22
+ background: "#121214",
23
+ border: "1px solid #29292e",
24
+ color: "#e1e1e6"
25
+ }
26
+ }}
27
+ />
28
+ <main>{children}</main>
29
+ </>
30
+ );
31
+ };
32
+ ```
33
+
34
+ ---
35
+
36
+ > [!TIP]
37
+ > **Dynamic Action Toasts:** For high-risk administrative operations (such as user suspends), toast messages must present a valid action hook button to undo the action instantly.
@@ -1,4 +1,4 @@
1
- # AI-Enderun MCP Server (v0.6.7)
1
+ # AI-Enderun MCP Server (v0.6.8)
2
2
 
3
3
  English | [Türkçe](#türkçe)
4
4
 
@@ -103,13 +103,15 @@ export const frameworkHandlers = {
103
103
  { path: "apps/backend/src/types", type: "folder" },
104
104
  { path: "apps/web/src/types", type: "folder" },
105
105
  { path: "framework-mcp/src", type: "folder" },
106
- { path: path.join(frameworkDir, "docs/api"), type: "folder", optional: true },
107
106
  { path: ".env", type: "file", optional: true },
108
107
  { path: ".env.example", type: "file" },
109
108
  { path: path.join(frameworkDir, "PROJECT_MEMORY.md"), type: "file" },
110
109
  { path: path.join(frameworkDir, "BRAIN_DASHBOARD.md"), type: "file" },
111
- { path: path.join(frameworkDir, "docs/tech-stack.md"), type: "file" },
112
- { path: path.join(frameworkDir, "docs/project-docs.md"), type: "file" },
110
+ { path: "docs/README.md", type: "file" },
111
+ { path: "docs/getting-started.md", type: "file" },
112
+ { path: "docs/architecture/approval-flows.md", type: "file" },
113
+ { path: "docs/backend/error-handling.md", type: "file" },
114
+ { path: "docs/frontend/component-patterns.md", type: "file" },
113
115
  ];
114
116
  for (const item of checkPaths) {
115
117
  const fullPath = path.join(projectRoot, item.path);
@@ -122,7 +124,10 @@ export const frameworkHandlers = {
122
124
  missing.push(`[MISSING FOLDER] ${frameworkDir}/agents`);
123
125
  }
124
126
  else {
125
- const agents = fs.readdirSync(agentsDir).filter((f) => f.endsWith(".md")).map((f) => f.replace(".md", ""));
127
+ const agents = fs.readdirSync(agentsDir).filter((f) => {
128
+ const fullAgentDir = path.join(agentsDir, f);
129
+ return fs.statSync(fullAgentDir).isDirectory() && fs.existsSync(path.join(fullAgentDir, "agent.json"));
130
+ });
126
131
  const logsDir = path.join(projectRoot, frameworkDir, "logs");
127
132
  for (const agentName of agents) {
128
133
  const logFile = path.join(logsDir, `${agentName}.json`);
@@ -123,7 +123,7 @@ export const messageHandlers = {
123
123
  return { content: [{ type: "text", text: `### HERMES INBOX: @${agentName}\n\n${formatted}` }] };
124
124
  }
125
125
  catch {
126
- return { content: [{ type: "text", text: "Failed to send agent message." }] };
126
+ return { content: [{ type: "text", text: "Failed to read agent messages." }] };
127
127
  }
128
128
  },
129
129
  get_agent_inbox_stats: async (args, projectRoot) => {
@@ -1,15 +1,24 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- export const FRAMEWORK_VERSION = "0.6.5";
4
- export function getFrameworkDir(projectRoot) {
5
- const adapters = [".antigravitycli", ".claude", ".cursor", ".enderun", ".codex"];
6
- for (const adp of adapters) {
7
- const fullPath = path.join(projectRoot, adp);
8
- if (fs.existsSync(fullPath) && fs.lstatSync(fullPath).isDirectory()) {
9
- return adp;
3
+ import { fileURLToPath } from "url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = path.dirname(__filename);
6
+ const getPackageVersion = () => {
7
+ try {
8
+ const pkgPath = path.join(__dirname, "../package.json");
9
+ if (fs.existsSync(pkgPath)) {
10
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
11
+ return pkg.version || "0.6.6";
10
12
  }
11
13
  }
12
- return ".enderun";
14
+ catch {
15
+ // fallback
16
+ }
17
+ return "0.6.6";
18
+ };
19
+ export const FRAMEWORK_VERSION = getPackageVersion();
20
+ export function getFrameworkDir(_projectRoot) {
21
+ return ".antigravitycli";
13
22
  }
14
23
  export function resolveSafePath(projectRoot, targetPath) {
15
24
  const resolved = path.resolve(projectRoot, targetPath);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-enderun-mcp",
3
- "version": "0.6.7",
3
+ "version": "0.7.0",
4
4
  "description": "Enterprise-grade MCP Server for AI Agent Framework",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
@@ -31,11 +31,11 @@ export const databaseHandlers = {
31
31
  const text = sourceFile.getFullText();
32
32
  const tableMatches = Array.from(text.matchAll(/\.createTable\(['"]([^'"]+)['"]\)/g));
33
33
  for (let i = 0; i < tableMatches.length; i++) {
34
- const match = tableMatches[i] as any;
34
+ const match = tableMatches[i] as RegExpExecArray;
35
35
  const tableName = match[1]; tablesFound++;
36
36
  mermaid += ` ${tableName} {\n`;
37
37
  const startIndex = match.index ?? 0;
38
- const nextMatch = tableMatches[i + 1];
38
+ const nextMatch = tableMatches[i + 1] as RegExpExecArray | undefined;
39
39
  const endIndex = nextMatch ? (nextMatch.index ?? text.length) : text.length;
40
40
  const tableBlockText = text.substring(startIndex, endIndex);
41
41
  const colRegex = /\.addColumn\(['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]/g;
@@ -103,13 +103,15 @@ export const frameworkHandlers = {
103
103
  { path: "apps/backend/src/types", type: "folder" },
104
104
  { path: "apps/web/src/types", type: "folder" },
105
105
  { path: "framework-mcp/src", type: "folder" },
106
- { path: path.join(frameworkDir, "docs/api"), type: "folder", optional: true },
107
106
  { path: ".env", type: "file", optional: true },
108
107
  { path: ".env.example", type: "file" },
109
108
  { path: path.join(frameworkDir, "PROJECT_MEMORY.md"), type: "file" },
110
109
  { path: path.join(frameworkDir, "BRAIN_DASHBOARD.md"), type: "file" },
111
- { path: path.join(frameworkDir, "docs/tech-stack.md"), type: "file" },
112
- { path: path.join(frameworkDir, "docs/project-docs.md"), type: "file" },
110
+ { path: "docs/README.md", type: "file" },
111
+ { path: "docs/getting-started.md", type: "file" },
112
+ { path: "docs/architecture/approval-flows.md", type: "file" },
113
+ { path: "docs/backend/error-handling.md", type: "file" },
114
+ { path: "docs/frontend/component-patterns.md", type: "file" },
113
115
  ];
114
116
  for (const item of checkPaths) {
115
117
  const fullPath = path.join(projectRoot, item.path);
@@ -121,7 +123,10 @@ export const frameworkHandlers = {
121
123
  if (!fs.existsSync(agentsDir)) {
122
124
  missing.push(`[MISSING FOLDER] ${frameworkDir}/agents`);
123
125
  } else {
124
- const agents = fs.readdirSync(agentsDir).filter((f) => f.endsWith(".md")).map((f) => f.replace(".md", ""));
126
+ const agents = fs.readdirSync(agentsDir).filter((f) => {
127
+ const fullAgentDir = path.join(agentsDir, f);
128
+ return fs.statSync(fullAgentDir).isDirectory() && fs.existsSync(path.join(fullAgentDir, "agent.json"));
129
+ });
125
130
  const logsDir = path.join(projectRoot, frameworkDir, "logs");
126
131
  for (const agentName of agents) {
127
132
  const logFile = path.join(logsDir, `${agentName}.json`);
@@ -20,15 +20,8 @@ const getPackageVersion = (): string => {
20
20
 
21
21
  export const FRAMEWORK_VERSION = getPackageVersion();
22
22
 
23
- export function getFrameworkDir(projectRoot: string): string {
24
- const adapters = [".antigravitycli", ".claude", ".cursor", ".enderun", ".codex"];
25
- for (const adp of adapters) {
26
- const fullPath = path.join(projectRoot, adp);
27
- if (fs.existsSync(fullPath) && fs.lstatSync(fullPath).isDirectory()) {
28
- return adp;
29
- }
30
- }
31
- return ".enderun";
23
+ export function getFrameworkDir(_projectRoot: string): string {
24
+ return ".antigravitycli";
32
25
  }
33
26
 
34
27
  export function resolveSafePath(projectRoot: string, targetPath: string): string {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-enderun",
3
- "version": "0.6.7",
3
+ "version": "0.7.0",
4
4
  "description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
@@ -35,7 +35,7 @@
35
35
  "framework-mcp/dist",
36
36
  "framework-mcp/src",
37
37
  "framework-mcp/package.json",
38
- ".enderun",
38
+ ".antigravitycli",
39
39
  "ENDERUN.md",
40
40
  "README.md",
41
41
  "LICENSE",
@@ -44,14 +44,10 @@
44
44
  "tsconfig.json",
45
45
  "panda.config.ts",
46
46
  "antigravity.md",
47
- "cursor.md",
48
- "claude.md",
49
- "codex.md",
50
- "gemini.md",
51
47
  "docs"
52
48
  ],
53
49
  "scripts": {
54
- "enderun:build": "npm run build --workspace=framework-mcp",
50
+ "enderun:build": "npm run build --prefix framework-mcp",
55
51
  "enderun:test": "vitest run",
56
52
  "enderun:test:watch": "vitest",
57
53
  "enderun:status": "agent-enderun status",
@@ -69,7 +65,6 @@
69
65
  "@modelcontextprotocol/sdk": "^1.26.0",
70
66
  "@pandacss/dev": "^0.53.0",
71
67
  "@types/node": "^22.13.4",
72
- "agent-enderun": "^0.6.7",
73
68
  "concurrently": "^9.1.2",
74
69
  "eslint": "^9.20.1",
75
70
  "ts-morph": "^28.0.0",
@@ -77,11 +72,12 @@
77
72
  "typescript": "^5.9.3",
78
73
  "typescript-eslint": "^8.59.3",
79
74
  "vitest": "^3.0.5",
80
- "zod": "^3.24.2"
75
+ "zod": "^3.24.2",
76
+ "agent-enderun": "^0.6.8"
81
77
  },
82
78
  "enderun": {
83
- "version": "0.6.7",
84
- "initializedAt": "2026-05-23T13:00:32.411Z"
79
+ "version": "0.6.8",
80
+ "initializedAt": "2026-05-24T12:00:52.687Z"
85
81
  },
86
82
  "dependencies": {}
87
83
  }