agent-enderun 0.8.3 → 0.8.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 +5 -0
- package/.enderun/STATUS.md +1 -1
- package/.enderun/claude.md +1 -1
- package/.enderun/config.json +1 -1
- package/.enderun/cursor.md +1 -1
- package/.enderun/knowledge/hermes_protocol.md +1 -1
- package/.enderun/memory-graph/shared-facts.json +1 -1
- package/ENDERUN.md +1 -1
- package/README.md +3 -3
- package/claude.md +1 -1
- package/cursor.md +1 -1
- package/docs/architecture/approval-flows.md +60 -2
- package/docs/backend/error-handling.md +73 -2
- package/docs/frontend/component-patterns.md +90 -2
- package/framework-mcp/package.json +3 -3
- package/framework-mcp/src/tools/framework.ts +3 -4
- package/framework-mcp/src/utils.ts +2 -2
- package/package.json +1 -1
- package/src/cli/index.ts +1 -1
|
@@ -39,6 +39,11 @@ This file is the Single Source of Truth (SSOT) and the persistent memory of the
|
|
|
39
39
|
| Module | Status | Agent | Date |
|
|
40
40
|
| :--- | :--- | :--- | :--- |
|
|
41
41
|
|
|
42
|
+
## ACTIVE TASKS
|
|
43
|
+
|
|
44
|
+
| Trace ID | Task | Agent | Priority | Status |
|
|
45
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
46
|
+
|
|
42
47
|
## HISTORY (Persistent Memory)
|
|
43
48
|
|
|
44
49
|
### 2026-05-26 — Framework Cleanup
|
package/.enderun/STATUS.md
CHANGED
package/.enderun/claude.md
CHANGED
|
@@ -14,6 +14,6 @@ You are operating under the Agent Enderun governance framework.
|
|
|
14
14
|
|
|
15
15
|
At the **start of every session**, before any work:
|
|
16
16
|
1. Read `.claude/PROJECT_MEMORY.md` to restore state, active Trace ID, and history.
|
|
17
|
-
2. Read the relevant agent definition under `.claude/agents/{agent}
|
|
17
|
+
2. Read the relevant agent definition under `.claude/agents/{agent}.md` (especially `@manager`).
|
|
18
18
|
|
|
19
19
|
All paths and references inside `.claude/` use the Claude adapter structure. No migration to other CLIs is required.
|
package/.enderun/config.json
CHANGED
package/.enderun/cursor.md
CHANGED
|
@@ -14,6 +14,6 @@ You are operating under the Agent Enderun governance framework.
|
|
|
14
14
|
|
|
15
15
|
At the **start of every session**, before any work:
|
|
16
16
|
1. Read `.cursor/PROJECT_MEMORY.md` to restore state, active Trace ID, and history.
|
|
17
|
-
2. Read the relevant agent definition under `.cursor/agents/{agent}
|
|
17
|
+
2. Read the relevant agent definition under `.cursor/agents/{agent}.md` (especially `@manager`).
|
|
18
18
|
|
|
19
19
|
All paths and references inside `.cursor/` use the Cursor adapter structure. No migration to other CLIs is required.
|
|
@@ -48,7 +48,7 @@ Every message sent via `send_agent_message` must follow this conceptual structur
|
|
|
48
48
|
1. **Dispatch:** Agent calls `send_agent_message`. Message is saved in `.enderun/messages/recipient.json`.
|
|
49
49
|
2. **Notification:** The recipient agent checks their inbox during their turn via `read_agent_messages`.
|
|
50
50
|
3. **Acknowledgment:** For `ACTION` or `DELEGATION`, the recipient should send an `INFO` message back once started or completed.
|
|
51
|
-
4. **Logging:** All critical communications must be summarized in the agent's log file (`.enderun/logs/
|
|
51
|
+
4. **Logging:** All critical communications must be summarized in the agent's specific log file (`.enderun/logs/{agent_name}.json`).
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
package/ENDERUN.md
CHANGED
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# 🏛️ Agent Enderun (v0.8.
|
|
1
|
+
# 🏛️ Agent Enderun (v0.8.5) — The Supreme AI Governance & Orchestration Framework
|
|
2
2
|
|
|
3
3
|
**The Supreme AI Governance & Orchestration Framework for Enterprise Development**
|
|
4
4
|
|
|
5
5
|
**Author:** Yusuf BEKAR
|
|
6
|
-
**Version:** 0.8.
|
|
6
|
+
**Version:** 0.8.5
|
|
7
7
|
**License:** MIT
|
|
8
8
|
|
|
9
9
|
[English](#english) | [Türkçe](#türkçe)
|
|
@@ -219,7 +219,7 @@ Enderun Ordusu'ndaki her ajan, kendilerine ait kuralları, izin verilen dizinler
|
|
|
219
219
|
|
|
220
220
|
---
|
|
221
221
|
|
|
222
|
-
## 🏛️ Agent Enderun: Detaylı Kod Tabanı Denetim Raporu (v0.8.
|
|
222
|
+
## 🏛️ Agent Enderun: Detaylı Kod Tabanı Denetim Raporu (v0.8.5)
|
|
223
223
|
|
|
224
224
|
Çerçevenin (framework) çekirdek kod yapısı, operasyonel işleyişi, alt-üst ajan hiyerarşisi ve temizlenmiş mükerrer alanları en ince ayrıntısına kadar denetlenmiş ve belgelenmiştir:
|
|
225
225
|
|
package/claude.md
CHANGED
|
@@ -14,6 +14,6 @@ You are operating under the Agent Enderun governance framework.
|
|
|
14
14
|
|
|
15
15
|
At the **start of every session**, before any work:
|
|
16
16
|
1. Read `.claude/PROJECT_MEMORY.md` to restore state, active Trace ID, and history.
|
|
17
|
-
2. Read the relevant agent definition under `.claude/agents/{agent}
|
|
17
|
+
2. Read the relevant agent definition under `.claude/agents/{agent}.md` (especially `@manager`).
|
|
18
18
|
|
|
19
19
|
All paths and references inside `.claude/` use the Claude adapter structure. No migration to other CLIs is required.
|
package/cursor.md
CHANGED
|
@@ -14,6 +14,6 @@ You are operating under the Agent Enderun governance framework.
|
|
|
14
14
|
|
|
15
15
|
At the **start of every session**, before any work:
|
|
16
16
|
1. Read `.cursor/PROJECT_MEMORY.md` to restore state, active Trace ID, and history.
|
|
17
|
-
2. Read the relevant agent definition under `.cursor/agents/{agent}
|
|
17
|
+
2. Read the relevant agent definition under `.cursor/agents/{agent}.md` (especially `@manager`).
|
|
18
18
|
|
|
19
19
|
All paths and references inside `.cursor/` use the Cursor adapter structure. No migration to other CLIs is required.
|
|
@@ -1,3 +1,61 @@
|
|
|
1
|
-
# Enterprise Approval Flows Protocol
|
|
1
|
+
# Enterprise Approval Flows & Governance Protocol (v0.8.5)
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This protocol defines the strict governance model for high-risk operations and cross-agent approval flows within the Agent Enderun framework. It ensures that no critical mutations or sensitive actions are executed by AI specialists without formal orchestration and explicit authorization.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🔒 1. High-Risk Action Catalog
|
|
8
|
+
|
|
9
|
+
Specialist agents (@backend, @frontend, @devops, etc.) are strictly prohibited from performing any of the following administrative operations autonomously. If requested, they must halt work, shift to `WAITING` status, and escalate to `@manager` via the **Hermes Protocol**.
|
|
10
|
+
|
|
11
|
+
| Category | High-Risk Operations | Designated Controller |
|
|
12
|
+
| :--- | :--- | :--- |
|
|
13
|
+
| **Data Management** | Bulk delete/purge, data migration, PII export, schema modifications. | `@manager` |
|
|
14
|
+
| **System Security** | Security credentials modification, CSP rule changes, private keys rotation. | `@security` & `@manager` |
|
|
15
|
+
| **Infrastructure** | Production deployment triggers, container orchestration changes, ENV vars rotation. | `@devops` & `@manager` |
|
|
16
|
+
| **Contract Stability**| Breaking API modifications, major type updates inside `src/types/`. | `@backend` & `@manager` |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 💬 2. Hermes approval Flow (`managerApproval`)
|
|
21
|
+
|
|
22
|
+
When a specialist agent encounters a high-risk operation, it must execute the following message queue protocol.
|
|
23
|
+
|
|
24
|
+
### Step 1: Lock the Hermes Inbox
|
|
25
|
+
To prevent race conditions, the agent must check for `{{FRAMEWORK_DIR}}/messages/.lock`. If the lock is active, the agent retries (up to 3 times, waiting 500ms between attempts). If no lock exists, it creates `.lock` to claim the channel.
|
|
26
|
+
|
|
27
|
+
### Step 2: Write Approval Request File
|
|
28
|
+
The requesting agent writes a structured JSON file inside `{{FRAMEWORK_DIR}}/queue/pending/` or `{{FRAMEWORK_DIR}}/messages/` with the unique `Trace ID` (ULID) and a `managerApproval` request flag:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"traceId": "01JM5S8A0F2B4C6D8E0G2H4J6K",
|
|
33
|
+
"from": "@backend",
|
|
34
|
+
"to": "@manager",
|
|
35
|
+
"category": "ALERT",
|
|
36
|
+
"priority": "HIGH",
|
|
37
|
+
"action": "RUN_DATABASE_MIGRATION",
|
|
38
|
+
"payload": {
|
|
39
|
+
"migrationFile": "20260527_add_tenant_rls_policy.sql",
|
|
40
|
+
"rationale": "Enables multi-tenant Row Level Security (RLS) on PostgreSQL."
|
|
41
|
+
},
|
|
42
|
+
"timestamp": "2026-05-27T20:45:00Z"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 3: Shift Agent State
|
|
47
|
+
The requesting agent updates its state inside `.enderun/STATUS.md` to `WAITING` and appends `BLOCKED_BY_APPROVAL` to its action log.
|
|
48
|
+
|
|
49
|
+
### Step 4: Human-in-the-Loop Signing
|
|
50
|
+
In production workspaces, the `@manager` compiles the war-room report and requests the human architect (CTO) to sign off on the transaction. The human developer signs the transaction by executing:
|
|
51
|
+
```bash
|
|
52
|
+
npx agent-enderun approve 01JM5S8A0F2B4C6D8E0G2H4J6K
|
|
53
|
+
```
|
|
54
|
+
Or by writing a signed token to the message queue.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 🚦 3. Conflict Resolution & Rollback
|
|
59
|
+
|
|
60
|
+
1. **Approval Rejection:** If the transaction is rejected, `@manager` issues a `REJECTED` signal. The specialist agent rolls back any staged changes and returns to `IDLE` state.
|
|
61
|
+
2. **Stale Lock Recovery:** If a Hermes inbox `.lock` remains for more than 1.5 seconds, the active agent assumes a **stale lock** (LLM timeout), deletes the lock, and logs the incident to `@manager`.
|
|
@@ -1,3 +1,74 @@
|
|
|
1
|
-
# Professional Error Handling Pattern
|
|
1
|
+
# Professional Domain Error Handling Pattern (v0.8.5)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
All backend components developed under the Agent Enderun framework must comply with the **Domain Error Handling Protocol**. Direct usage of generic Javascript `Error` objects or HTTP status codes inside domain services is strictly forbidden.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🏛️ 1. DomainError Base Hierarchy
|
|
8
|
+
|
|
9
|
+
We implement a strongly-typed, business-aware exception hierarchy. Every error thrown by the domain logic must inherit from the `DomainError` class.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
export abstract class DomainError extends Error {
|
|
13
|
+
public abstract readonly statusCode: number;
|
|
14
|
+
public abstract readonly errorCode: string;
|
|
15
|
+
public readonly timestamp: string;
|
|
16
|
+
|
|
17
|
+
constructor(message: string, public readonly metadata: Record<string, unknown> = {}) {
|
|
18
|
+
super(message);
|
|
19
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
20
|
+
this.name = this.constructor.name;
|
|
21
|
+
this.timestamp = new Date().toISOString();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Core Exception Catalog
|
|
27
|
+
|
|
28
|
+
* **`NotFoundError` (HTTP 404):** Thrown when a resource (e.g., `User`, `Project`) identified by a **Branded Type ID** does not exist.
|
|
29
|
+
* **`ValidationError` (HTTP 400):** Thrown when data validation (usually Zod schemas) fails before processing business logic.
|
|
30
|
+
* **`ConflictError` (HTTP 409):** Thrown when database unique constraints or concurrent updates conflict.
|
|
31
|
+
* **`UnauthorizedError` (HTTP 401 / 403):** Thrown when RLS (Row Level Security) or RBAC policies are violated.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ⚡ 2. Fastify Global Exception Handler
|
|
36
|
+
|
|
37
|
+
Fastify must be configured with a single central error handler to map `DomainError` to client responses safely, preventing internal stack traces from leaking to the outside world.
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
|
|
41
|
+
|
|
42
|
+
export function registerGlobalErrorHandler(server: FastifyInstance) {
|
|
43
|
+
server.setErrorHandler((error: Error, request: FastifyRequest, reply: FastifyReply) => {
|
|
44
|
+
if (error instanceof DomainError) {
|
|
45
|
+
server.log.warn({ err: error }, `Domain error: ${error.message}`);
|
|
46
|
+
return reply.status(error.statusCode).send({
|
|
47
|
+
success: false,
|
|
48
|
+
error: error.errorCode,
|
|
49
|
+
message: error.message,
|
|
50
|
+
timestamp: error.timestamp,
|
|
51
|
+
metadata: error.metadata
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Capture unhandled internal technical crashes
|
|
56
|
+
server.log.error({ err: error }, `Unhandled server crash: ${error.message}`);
|
|
57
|
+
return reply.status(500).send({
|
|
58
|
+
success: false,
|
|
59
|
+
error: "INTERNAL_SERVER_ERROR",
|
|
60
|
+
message: "An unexpected error occurred inside the system."
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🔒 3. Branded Types & Query Constraints
|
|
69
|
+
|
|
70
|
+
1. **Branded Type Enforcement:** You must never accept raw string IDs inside repository query parameters. Always enforce compile-time type safety:
|
|
71
|
+
```typescript
|
|
72
|
+
export type UserId = string & { readonly __brand: unique symbol };
|
|
73
|
+
```
|
|
74
|
+
2. **Kysely Query Failures:** All Kysely queries running inside database transactions must be wrapped inside a `try/catch` block that translates SQL constraints into precise `ConflictError` or `UnauthorizedError` entities instead of throwing raw database query failures.
|
|
@@ -1,3 +1,91 @@
|
|
|
1
|
-
# Atomic Component Standards
|
|
1
|
+
# Atomic Component Standards & Panda CSS Guidelines (v0.8.5)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
All user interface developments inside the Agent Enderun framework must follow the **Fluid Component Protocol**. We strictly build component hierarchies following **Mobile-First Responsive Design** and type-safe styling using **Panda CSS**.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚫 1. Absolute UI Policies
|
|
8
|
+
|
|
9
|
+
### A. Zero UI Library Policy
|
|
10
|
+
* **The Law:** The use of external component libraries (e.g. TailwindCSS, Radix UI, Shadcn/ui, Material UI, Chakra UI, Ant Design) is strictly forbidden.
|
|
11
|
+
* **The Reason:** This ensures absolute design authenticity, maximum bundle optimization, zero dependency bloat, and fully controlled accessibility (WCAG 2.2 AA).
|
|
12
|
+
* **Exception:** Low-level headless primitives (like `@radix-ui/react-dialog` for focus trapping or `sonner` for toast dispatchers) may be allowed, subject to direct approval by `@manager`.
|
|
13
|
+
|
|
14
|
+
### B. Shared Component First Policy
|
|
15
|
+
* **The Law:** Defining reusable atomic components (Buttons, Inputs, Cards, Badges, Modals) inside page-level files is strictly forbidden.
|
|
16
|
+
* **The Structure:** All atomic items must be created inside `apps/web/src/components/ui/` as focused, single-purpose, highly modular components.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 🐼 2. Panda CSS Styling Standards
|
|
21
|
+
|
|
22
|
+
We utilize **Panda CSS** as our build-time type-safe CSS-in-JS engine. Raw inline styles or unmapped class names are completely banned.
|
|
23
|
+
|
|
24
|
+
### A. Styling Token Best Practices
|
|
25
|
+
Always leverage designated design tokens (colors, spacings, shadows) from the Panda config (`panda.config.ts`):
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { css } from "../../styled-system/css";
|
|
29
|
+
|
|
30
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
31
|
+
variant?: "primary" | "secondary";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function Button({ variant = "primary", className, children, ...props }: ButtonProps) {
|
|
35
|
+
return (
|
|
36
|
+
<button
|
|
37
|
+
className={css(
|
|
38
|
+
{
|
|
39
|
+
display: "inline-flex",
|
|
40
|
+
alignItems: "center",
|
|
41
|
+
justifyContent: "center",
|
|
42
|
+
px: "4",
|
|
43
|
+
py: "2.5",
|
|
44
|
+
borderRadius: "md",
|
|
45
|
+
fontSize: "sm",
|
|
46
|
+
fontWeight: "medium",
|
|
47
|
+
transition: "all 0.2s ease-in-out",
|
|
48
|
+
cursor: "pointer",
|
|
49
|
+
_disabled: { opacity: 0.5, cursor: "not-allowed" },
|
|
50
|
+
},
|
|
51
|
+
variant === "primary"
|
|
52
|
+
? {
|
|
53
|
+
bg: "brand.primary",
|
|
54
|
+
color: "white",
|
|
55
|
+
_hover: { bg: "brand.primary.hover" },
|
|
56
|
+
}
|
|
57
|
+
: {
|
|
58
|
+
bg: "transparent",
|
|
59
|
+
color: "slate.700",
|
|
60
|
+
border: "1px solid",
|
|
61
|
+
borderColor: "slate.200",
|
|
62
|
+
_hover: { bg: "slate.50" },
|
|
63
|
+
}
|
|
64
|
+
)}
|
|
65
|
+
{...props}
|
|
66
|
+
>
|
|
67
|
+
{children}
|
|
68
|
+
</button>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### B. Mobile-First Fluid Responsiveness
|
|
74
|
+
Use array-based or object-based responsive syntax inside the `css` block. Never hardcode pixel values:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// Enforce fluid flex layout across screen sizes
|
|
78
|
+
const containerStyle = css({
|
|
79
|
+
display: "flex",
|
|
80
|
+
flexDirection: { base: "column", md: "row" }, // Mobile-first (column -> row on desktop)
|
|
81
|
+
gap: { base: "4", lg: "8" },
|
|
82
|
+
p: { base: "4", md: "6", xl: "8" }
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## ♿ 3. Accessibility & QA Gates (WCAG 2.2)
|
|
89
|
+
|
|
90
|
+
1. **Aria Standards:** All custom interactive elements (dropdowns, mobile navigation draw-ins, accordion blocks) must support full keyboard navigation (Tab, Enter, Space) and have valid `aria-*` tags.
|
|
91
|
+
2. **Vitest Verification:** A component must never be merged into master without an accompanying test file (`[component].test.tsx`) that verifies the component renders correctly and responds to user click actions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-enderun-mcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
4
4
|
"description": "Enterprise-grade MCP Server for AI Agent Framework",
|
|
5
5
|
"author": "Yusuf BEKAR",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
38
38
|
"ts-morph": "^28.0.0",
|
|
39
|
-
"zod": "^
|
|
39
|
+
"zod": "^3.24.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@types/node": "^
|
|
42
|
+
"@types/node": "^25.9.1",
|
|
43
43
|
"tsx": "^4.19.4",
|
|
44
44
|
"typescript": "^5.9.3"
|
|
45
45
|
}
|
|
@@ -118,10 +118,9 @@ export const frameworkHandlers = {
|
|
|
118
118
|
if (!fs.existsSync(agentsDir)) {
|
|
119
119
|
missing.push(`[MISSING FOLDER] ${frameworkDir}/agents`);
|
|
120
120
|
} else {
|
|
121
|
-
const agents = fs.readdirSync(agentsDir)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
});
|
|
121
|
+
const agents = fs.readdirSync(agentsDir)
|
|
122
|
+
.filter((f) => f.endsWith(".md") && f !== "README.md")
|
|
123
|
+
.map((f) => f.replace(".md", ""));
|
|
125
124
|
const logsDir = path.join(projectRoot, frameworkDir, "logs");
|
|
126
125
|
for (const agentName of agents) {
|
|
127
126
|
const logFile = path.join(logsDir, `${agentName}.json`);
|
|
@@ -10,12 +10,12 @@ const getPackageVersion = (): string => {
|
|
|
10
10
|
const pkgPath = path.join(__dirname, "../package.json");
|
|
11
11
|
if (fs.existsSync(pkgPath)) {
|
|
12
12
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
13
|
-
return pkg.version || "0.8.
|
|
13
|
+
return pkg.version || "0.8.5";
|
|
14
14
|
}
|
|
15
15
|
} catch {
|
|
16
16
|
// fallback
|
|
17
17
|
}
|
|
18
|
-
return "0.
|
|
18
|
+
return "0.8.5";
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export const FRAMEWORK_VERSION = getPackageVersion();
|
package/package.json
CHANGED
package/src/cli/index.ts
CHANGED
|
@@ -195,7 +195,7 @@ function mergePackageJson(targetPath: string, sourcePath: string): void {
|
|
|
195
195
|
...(sourceDevDeps["@types/node"] ? {"@types/node": sourceDevDeps["@types/node"]} : {}),
|
|
196
196
|
...(sourceDevDeps["tsx"] ? {"tsx": sourceDevDeps["tsx"]} : {}),
|
|
197
197
|
...(sourceDevDeps["vitest"] ? {"vitest": sourceDevDeps["vitest"]} : {}),
|
|
198
|
-
"@pandacss/dev": "^
|
|
198
|
+
"@pandacss/dev": sourceDevDeps["@pandacss/dev"] || "^1.11.1"
|
|
199
199
|
});
|
|
200
200
|
|
|
201
201
|
if ((targetPkg as PackageJson).peerDependencies) {
|