agent-enderun 1.1.5 → 1.1.7
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.md +13 -10
- package/README.md +14 -31
- package/bin/run-multi-test.js +77 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.d.ts +5 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js +30 -0
- package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js.map +1 -0
- package/dist/framework-mcp/src/tools/definitions.js +118 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +5 -0
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +51 -0
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -4
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/write_file.js +3 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/audit_deps.d.ts +6 -0
- package/dist/framework-mcp/src/tools/framework/audit_deps.js +42 -0
- package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.d.ts +5 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.js +26 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -0
- package/dist/framework-mcp/src/tools/index.js +24 -0
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/memory/get_insights.d.ts +6 -0
- package/dist/framework-mcp/src/tools/memory/get_insights.js +35 -0
- package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.d.ts +6 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.js +29 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +5 -0
- package/dist/framework-mcp/src/tools/observability/check_ports.js +27 -0
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -0
- package/dist/framework-mcp/src/tools/observability/get_health.d.ts +5 -0
- package/dist/framework-mcp/src/tools/observability/get_health.js +21 -0
- package/dist/framework-mcp/src/tools/observability/get_health.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.d.ts +6 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.js +49 -0
- package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_map.d.ts +6 -0
- package/dist/framework-mcp/src/tools/search/get_map.js +45 -0
- package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/grep_search.d.ts +5 -0
- package/dist/framework-mcp/src/tools/search/grep_search.js +60 -0
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/list_dir.d.ts +5 -0
- package/dist/framework-mcp/src/tools/search/list_dir.js +29 -0
- package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -0
- package/dist/framework-mcp/src/tools/types.d.ts +10 -5
- package/dist/framework-mcp/src/utils/compliance.d.ts +5 -0
- package/dist/framework-mcp/src/utils/compliance.js +30 -0
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/src/cli/adapters/types.d.ts +2 -2
- package/dist/src/cli/adapters.d.ts +1 -1
- package/dist/src/cli/adapters.js +45 -77
- package/dist/src/cli/adapters.js.map +1 -1
- package/dist/src/cli/commands/check.js +52 -6
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +5 -1
- package/dist/src/cli/commands/init.js +184 -106
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +3 -3
- package/dist/src/cli/commands/orchestrate.js +14 -8
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/status.js +3 -2
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/index.js +4 -3
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/shims.js +6 -6
- package/dist/src/cli/utils/app-backend.d.ts +2 -0
- package/dist/src/cli/utils/app-backend.js +236 -0
- package/dist/src/cli/utils/app-backend.js.map +1 -0
- package/dist/src/cli/utils/app-docs.d.ts +3 -0
- package/dist/src/cli/utils/app-docs.js +59 -0
- package/dist/src/cli/utils/app-docs.js.map +1 -0
- package/dist/src/cli/utils/app-frontend.d.ts +2 -0
- package/dist/src/cli/utils/app-frontend.js +248 -0
- package/dist/src/cli/utils/app-frontend.js.map +1 -0
- package/dist/src/cli/utils/app-inferrer.d.ts +14 -0
- package/dist/src/cli/utils/app-inferrer.js +39 -0
- package/dist/src/cli/utils/app-inferrer.js.map +1 -0
- package/dist/src/cli/utils/app-types.d.ts +3 -0
- package/dist/src/cli/utils/app-types.js +233 -0
- package/dist/src/cli/utils/app-types.js.map +1 -0
- package/dist/src/cli/utils/app.d.ts +5 -32
- package/dist/src/cli/utils/app.js +5 -794
- package/dist/src/cli/utils/app.js.map +1 -1
- package/dist/src/cli/utils/memory.js +8 -4
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/modules/adapters/antigravity-cli.js +3 -3
- package/dist/src/modules/adapters/antigravity-cli.js.map +1 -1
- package/dist/src/modules/adapters/claude.js +1 -1
- package/dist/src/modules/adapters/claude.js.map +1 -1
- package/dist/src/modules/adapters/codex.js +2 -2
- package/dist/src/modules/adapters/codex.js.map +1 -1
- package/dist/src/modules/adapters/cursor.js +1 -1
- package/dist/src/modules/adapters/cursor.js.map +1 -1
- package/dist/src/modules/adapters/definitions.d.ts +9 -0
- package/dist/src/modules/adapters/definitions.js +124 -0
- package/dist/src/modules/adapters/definitions.js.map +1 -0
- package/dist/src/modules/adapters/gemini.js +2 -2
- package/dist/src/modules/adapters/gemini.js.map +1 -1
- package/dist/src/modules/adapters/grok.js +1 -1
- package/dist/src/modules/adapters/grok.js.map +1 -1
- package/dist/src/modules/agents/definitions.js +26 -27
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/shared/config.d.ts +3 -3
- package/dist/src/shared/logger.js +8 -5
- package/dist/src/shared/logger.js.map +1 -1
- package/dist/tests/adapter.test.d.ts +1 -0
- package/dist/tests/adapter.test.js +129 -0
- package/dist/tests/adapter.test.js.map +1 -0
- package/dist/tests/agents-definitions.test.d.ts +1 -0
- package/dist/tests/agents-definitions.test.js +54 -0
- package/dist/tests/agents-definitions.test.js.map +1 -0
- package/dist/tests/approve.test.d.ts +1 -0
- package/dist/tests/approve.test.js +88 -0
- package/dist/tests/approve.test.js.map +1 -0
- package/dist/tests/config.test.d.ts +1 -0
- package/dist/tests/config.test.js +58 -0
- package/dist/tests/config.test.js.map +1 -0
- package/dist/tests/container.runner.d.ts +1 -0
- package/dist/tests/container.runner.js +68 -0
- package/dist/tests/container.runner.js.map +1 -0
- package/dist/tests/container.test.d.ts +1 -0
- package/dist/tests/container.test.js +73 -0
- package/dist/tests/container.test.js.map +1 -0
- package/dist/tests/errors.test.d.ts +1 -0
- package/dist/tests/errors.test.js +64 -0
- package/dist/tests/errors.test.js.map +1 -0
- package/dist/tests/fs-utils.test.d.ts +1 -0
- package/dist/tests/fs-utils.test.js +101 -0
- package/dist/tests/fs-utils.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +1 -0
- package/dist/tests/logger.test.js +81 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/memory-utils.test.d.ts +1 -0
- package/dist/tests/memory-utils.test.js +173 -0
- package/dist/tests/memory-utils.test.js.map +1 -0
- package/dist/tests/orchestrate.test.d.ts +1 -0
- package/dist/tests/orchestrate.test.js +131 -0
- package/dist/tests/orchestrate.test.js.map +1 -0
- package/dist/tests/skills-definitions.test.d.ts +1 -0
- package/dist/tests/skills-definitions.test.js +34 -0
- package/dist/tests/skills-definitions.test.js.map +1 -0
- package/dist/tests/status.test.d.ts +1 -0
- package/dist/tests/status.test.js +105 -0
- package/dist/tests/status.test.js.map +1 -0
- package/dist/tests/string.test.d.ts +1 -0
- package/dist/tests/string.test.js +89 -0
- package/dist/tests/string.test.js.map +1 -0
- package/dist/tests/time.test.d.ts +1 -0
- package/dist/tests/time.test.js +48 -0
- package/dist/tests/time.test.js.map +1 -0
- package/dist/tests/trace.test.d.ts +1 -0
- package/dist/tests/trace.test.js +61 -0
- package/dist/tests/trace.test.js.map +1 -0
- package/dist/vitest.config.js +1 -0
- package/dist/vitest.config.js.map +1 -1
- package/docs/getting-started.md +4 -0
- package/docs/user/corporate-governance.md +25 -0
- package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
- package/framework-mcp/dist/tools/definitions.js +118 -0
- package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +50 -0
- package/framework-mcp/dist/tools/file_system/replace_text.js +8 -4
- package/framework-mcp/dist/tools/file_system/write_file.js +3 -0
- package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
- package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
- package/framework-mcp/dist/tools/index.js +24 -0
- package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
- package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
- package/framework-mcp/dist/tools/messaging/send_message.js +1 -1
- package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
- package/framework-mcp/dist/tools/observability/get_health.js +20 -0
- package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
- package/framework-mcp/dist/tools/search/get_map.js +44 -0
- package/framework-mcp/dist/tools/search/grep_search.js +59 -0
- package/framework-mcp/dist/tools/search/list_dir.js +28 -0
- package/framework-mcp/dist/utils/compliance.js +29 -0
- package/framework-mcp/package.json +1 -1
- package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
- package/framework-mcp/src/tools/definitions.ts +118 -0
- package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +70 -0
- package/framework-mcp/src/tools/file_system/replace_text.ts +10 -4
- package/framework-mcp/src/tools/file_system/write_file.ts +5 -0
- package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
- package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
- package/framework-mcp/src/tools/index.ts +24 -0
- package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
- package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
- package/framework-mcp/src/tools/messaging/send_message.ts +1 -1
- package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
- package/framework-mcp/src/tools/observability/get_health.ts +25 -0
- package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
- package/framework-mcp/src/tools/search/get_map.ts +50 -0
- package/framework-mcp/src/tools/search/grep_search.ts +66 -0
- package/framework-mcp/src/tools/search/list_dir.ts +34 -0
- package/framework-mcp/src/tools/types.ts +11 -1
- package/framework-mcp/src/utils/compliance.ts +37 -0
- package/framework-mcp/tests/tools/messaging/send_message.test.ts +5 -5
- package/package.json +3 -3
- package/src/cli/adapters/types.ts +2 -2
- package/src/cli/adapters.ts +45 -80
- package/src/cli/commands/check.ts +52 -6
- package/src/cli/commands/init.ts +193 -114
- package/src/cli/commands/orchestrate.ts +14 -8
- package/src/cli/commands/status.ts +3 -2
- package/src/cli/index.ts +4 -3
- package/src/cli/shims.ts +6 -6
- package/src/cli/utils/app-backend.ts +249 -0
- package/src/cli/utils/app-docs.ts +65 -0
- package/src/cli/utils/app-frontend.ts +257 -0
- package/src/cli/utils/app-inferrer.ts +53 -0
- package/src/cli/utils/app-types.ts +243 -0
- package/src/cli/utils/app.ts +5 -849
- package/src/cli/utils/memory.ts +8 -4
- package/src/modules/adapters/definitions.ts +125 -0
- package/src/modules/agents/definitions.ts +26 -27
- package/src/shared/logger.ts +8 -5
- package/templates/prompts/bug-fix-recipe.md +20 -0
- package/templates/prompts/new-feature-recipe.md +19 -0
- package/templates/prompts/refactoring-recipe.md +21 -0
- package/templates/standards/architecture-standards.md +23 -0
- package/templates/standards/crud-governance.md +21 -0
- package/templates/standards/frontend-standards.md +38 -0
- package/templates/standards/i18n-standards.md +17 -0
- package/templates/standards/logging-and-secrets.md +29 -0
- package/templates/standards/mobile-standards.md +24 -0
- package/templates/standards/quality-standards.md +31 -0
- package/templates/standards/security-standards.md +21 -0
- package/templates/standards/tailwind-standards.md +20 -0
- package/templates/standards/testing-standards.md +31 -0
- package/src/modules/adapters/antigravity-cli.ts +0 -25
- package/src/modules/adapters/claude.ts +0 -36
- package/src/modules/adapters/codex.ts +0 -22
- package/src/modules/adapters/cursor.ts +0 -22
- package/src/modules/adapters/gemini.ts +0 -27
- package/src/modules/adapters/grok.ts +0 -20
- package/templates/architecture/agents-manifest.md +0 -79
- package/templates/architecture/approval-flows.md +0 -61
- package/templates/architecture/enterprise-architecture.md +0 -69
- package/templates/architecture/standards/crud-governance.md +0 -46
- package/templates/architecture/standards/data-fetching-patterns.md +0 -13
- package/templates/architecture/standards/design-system.md +0 -31
- package/templates/architecture/standards/documentation-ownership.md +0 -21
- package/templates/architecture/standards/logging.md +0 -7
- package/templates/architecture/standards/mobile-standards.md +0 -48
- package/templates/architecture/standards/tech-stack.md +0 -9
- package/templates/backend/error-handling.md +0 -74
- package/templates/frontend/component-patterns.md +0 -91
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Mobile Standards — Agent Enderun (React Native & Expo)
|
|
2
|
-
|
|
3
|
-
This document establishes the responsive styling, safe layout, and development standards for mobile applications.
|
|
4
|
-
|
|
5
|
-
## 📱 1. Safe Layout & Notches
|
|
6
|
-
|
|
7
|
-
- **SafeAreaView Usage:** All screen entry points must be wrapped in a `SafeAreaView` (from `react-native-safe-area-context`) to avoid overlap with device notches, status bars, and home indicators.
|
|
8
|
-
- **Avoid Hardcoded Padding/Margins:** Use the dynamic insets returned by the `useSafeAreaInsets()` hook for custom spacing.
|
|
9
|
-
|
|
10
|
-
## 📏 2. Fluid & Responsive Dimensions
|
|
11
|
-
|
|
12
|
-
- **No Hardcoded Absolute Sizes:** Hardcoding absolute widths and heights (e.g. `width: 375`) is strictly forbidden.
|
|
13
|
-
- **Flexbox First:** Build layouts using Flexbox (`flex: 1`, `flexDirection`, `justifyContent`, `alignItems`).
|
|
14
|
-
- **Dynamic Scales:** Use percentages (`width: "100%"`) or calculate dynamic values using `useWindowDimensions()` or a scaling utility:
|
|
15
|
-
```typescript
|
|
16
|
-
import { Dimensions } from "react-native";
|
|
17
|
-
const { width, height } = Dimensions.get("window");
|
|
18
|
-
|
|
19
|
-
// Base design width (e.g., iPhone 14 / 390px wide)
|
|
20
|
-
const scale = width / 390;
|
|
21
|
-
export const normalize = (size: number) => Math.round(size * scale);
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## 🎨 3. Typography & Styling
|
|
25
|
-
|
|
26
|
-
- **System Fonts:** Use native platform fonts or custom configured Expo fonts consistently.
|
|
27
|
-
- **Fluid Typography:** Scale font sizes dynamically using scaling utilities so they look proportionate on both compact screens and tablets.
|
|
28
|
-
- **Platform Selection:** Target Android and iOS specifically when styling differs (e.g., shadows vs elevation) using `Platform.select()`:
|
|
29
|
-
```typescript
|
|
30
|
-
const cardStyle = {
|
|
31
|
-
...Platform.select({
|
|
32
|
-
ios: {
|
|
33
|
-
shadowColor: "#000",
|
|
34
|
-
shadowOffset: { width: 0, height: 2 },
|
|
35
|
-
shadowOpacity: 0.1,
|
|
36
|
-
shadowRadius: 4,
|
|
37
|
-
},
|
|
38
|
-
android: {
|
|
39
|
-
elevation: 4,
|
|
40
|
-
},
|
|
41
|
-
}),
|
|
42
|
-
};
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## 📦 4. Asset & Network Optimization
|
|
46
|
-
|
|
47
|
-
- **Vector Graphics:** Prefer SVG files over high-resolution PNG/JPG files for icons and illustrations to prevent scaling pixelation.
|
|
48
|
-
- **Image Performance:** Always use caching and optimizing components like Expo's `Image` with appropriate content-fit modes.
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Tech Stack — Agent Enderun (Enterprise)
|
|
2
|
-
|
|
3
|
-
- **Execution Profile:** Full (Enterprise)
|
|
4
|
-
- **Frontend:** React (Vite), Panda CSS (Zero UI Library)
|
|
5
|
-
- **Backend:** Fastify API, Kysely (Query Builder)
|
|
6
|
-
- **Database:** PostgreSQL
|
|
7
|
-
- **Testing:** Vitest (Integration + Unit)
|
|
8
|
-
- **Auth:** Contract-first (Type definitions)
|
|
9
|
-
- **Versioning:** API-path versioning (/api/v1/...)
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# Professional Domain Error Handling Pattern (v0.8.5)
|
|
2
|
-
|
|
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,91 +0,0 @@
|
|
|
1
|
-
# Atomic Component Standards & Panda CSS Guidelines (v0.8.5)
|
|
2
|
-
|
|
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.
|