@exchanet/enet 1.0.2 → 1.0.6
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/.enet/modular-design.md +136 -0
- package/README.md +7 -7
- package/package.json +1 -1
- package/registry.json +31 -23
- package/src/commands/install.js +3 -3
- package/src/utils/agent-detector.js +16 -2
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# METHOD REFLEX — Agent Instructions
|
|
2
|
+
> Universal Modular Architecture · v1.0.0 · @exchanet
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## YOUR PRIMARY DIRECTIVE / TU DIRECTIVA PRINCIPAL
|
|
7
|
+
|
|
8
|
+
You are building a modular application using Method REFLEX. Every module you create must be self-describing via a `manifest.json` file. The manifest is written **before any code**. The system reads manifests to automatically generate the Admin Panel, dashboard, and settings UI. You never manually wire backend logic to the Admin Panel — the manifest does it.
|
|
9
|
+
|
|
10
|
+
Estás construyendo una aplicación modular usando Method REFLEX. Cada módulo que crees debe ser auto-descriptivo a través de un archivo `manifest.json`. El manifest se escribe **antes de cualquier código**. El sistema lee los manifests para generar automáticamente el Panel Admin, dashboard y UI de configuración. Nunca cablearás manualmente la lógica backend al Panel Admin — el manifest lo hace.
|
|
11
|
+
|
|
12
|
+
**If a module has no manifest, it does not exist.**
|
|
13
|
+
**Si un módulo no tiene manifest, no existe.**
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## ABSOLUTE RULES / REGLAS ABSOLUTAS
|
|
18
|
+
|
|
19
|
+
1. **No manifest = module does not exist.** Core rejects modules without valid `manifest.json`.
|
|
20
|
+
2. **Manifest before code.** Complete manifest before any handler, model, or component.
|
|
21
|
+
3. **Zero hardcoded configuration.** Every configurable value lives in `manifest.settings`, read via `context.settings.get("key")`.
|
|
22
|
+
4. **Core has no business logic.** Domain logic lives in modules only.
|
|
23
|
+
5. **Admin Panel is a renderer.** Never code it to show a specific module — modules declare capabilities, Admin Panel renders them.
|
|
24
|
+
6. **A module is complete only when the Admin Panel reflects it correctly.**
|
|
25
|
+
7. **Removing a module folder requires zero code changes elsewhere.**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## WORKFLOW / FLUJO DE TRABAJO
|
|
30
|
+
|
|
31
|
+
### Starting a new project / Nuevo proyecto:
|
|
32
|
+
1. Ask for spectech if not provided (stack, database, deploy target)
|
|
33
|
+
2. Declare the architecture you will build
|
|
34
|
+
3. **Wait for confirmation before writing any code**
|
|
35
|
+
4. Build Core → Manifest schema → Modules → Admin Panel
|
|
36
|
+
|
|
37
|
+
### Adding a module / Añadir un módulo:
|
|
38
|
+
1. Write complete `manifest.json` (all settings + capabilities + hooks)
|
|
39
|
+
2. Validate against `manifest.schema.json`
|
|
40
|
+
3. Implement all handlers referenced in manifest
|
|
41
|
+
4. Place in modules directory (Core discovers automatically)
|
|
42
|
+
5. Boot system and verify module appears in Admin Panel
|
|
43
|
+
6. Build custom UI components only if manifest declares a `component` field
|
|
44
|
+
|
|
45
|
+
### When you cannot complete a manifest / Cuando no puedes completar un manifest:
|
|
46
|
+
|
|
47
|
+
**STOP. Ask the user:**
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
"I cannot complete the manifest for [module name] because I don't understand
|
|
51
|
+
[specific aspect]. Before I continue, I need you to clarify: [specific question]"
|
|
52
|
+
|
|
53
|
+
"No puedo completar el manifest de [nombre del módulo] porque no entiendo
|
|
54
|
+
[aspecto específico]. Antes de continuar, necesito que aclares: [pregunta específica]"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Do not proceed. Do not create a partial manifest. Do not make assumptions. Wait.
|
|
58
|
+
No continúes. No crees un manifest parcial. No hagas suposiciones. Espera.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## MANIFEST FORMAT / FORMATO DEL MANIFEST
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"id": "module-id",
|
|
67
|
+
"name": "Human Name",
|
|
68
|
+
"version": "1.0.0",
|
|
69
|
+
"type": "functional",
|
|
70
|
+
"section": "admin-section",
|
|
71
|
+
"dependencies": [],
|
|
72
|
+
"hooks": { "event.name": "ClassName.method" },
|
|
73
|
+
"settings": {
|
|
74
|
+
"key": {
|
|
75
|
+
"type": "integer|string|boolean|select",
|
|
76
|
+
"label": "Label",
|
|
77
|
+
"default": null,
|
|
78
|
+
"ui": "slider|toggle|text|select"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"capabilities": [
|
|
82
|
+
{ "type": "view", "label": "Label", "data": "ClassName.method" },
|
|
83
|
+
{ "type": "action", "label": "Label", "handler": "ClassName.method", "dangerous": false },
|
|
84
|
+
{ "type": "metric", "label": "Label", "data": "ClassName.method" },
|
|
85
|
+
{ "type": "widget", "label": "Label", "data": "ClassName.method", "component": "ComponentName" }
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## WHAT THE CORE MUST IMPLEMENT / QUÉ DEBE IMPLEMENTAR EL CORE
|
|
93
|
+
|
|
94
|
+
- Module discovery — scan modules dir for valid manifests
|
|
95
|
+
- Manifest validation — reject invalid manifests with clear errors (never silent)
|
|
96
|
+
- Dependency resolution — boot in correct order
|
|
97
|
+
- Handler registry — map `ClassName.method` references to implementations
|
|
98
|
+
- Hook system — dispatch events to declared handlers
|
|
99
|
+
- Settings store — persistent, namespaced by module ID, initialized from defaults
|
|
100
|
+
- REFLEX engine — read all manifests, build Admin nav, dashboard, settings schemas
|
|
101
|
+
- Admin API — standard endpoints (same in every project, every stack)
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
GET /api/admin/manifest-registry
|
|
105
|
+
GET /api/admin/navigation
|
|
106
|
+
GET /api/admin/settings/:moduleId
|
|
107
|
+
POST /api/admin/settings/:moduleId
|
|
108
|
+
GET /api/admin/dashboard
|
|
109
|
+
POST /api/admin/action/:moduleId/:actionId
|
|
110
|
+
GET /api/admin/health
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**The Core has ZERO business logic. / El Core tiene CERO lógica de negocio.**
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## COMPLETION CHECKLIST / CHECKLIST DE COMPLETITUD
|
|
118
|
+
|
|
119
|
+
Before marking any module complete / Antes de marcar cualquier módulo como completo:
|
|
120
|
+
|
|
121
|
+
- [ ] `manifest.json` valid / válido
|
|
122
|
+
- [ ] All declared handlers implemented / Todos los handlers declarados implementados
|
|
123
|
+
- [ ] Zero hardcoded values — all settings use `context.settings.get()` / Cero hardcoded
|
|
124
|
+
- [ ] Module appears in Admin Panel navigation / El módulo aparece en la navegación del Panel Admin
|
|
125
|
+
- [ ] All views render with data / Todas las vistas renderizan con datos
|
|
126
|
+
- [ ] All actions execute correctly / Todas las acciones ejecutan correctamente
|
|
127
|
+
- [ ] Dangerous actions show confirmation dialog / Las acciones peligrosas muestran diálogo
|
|
128
|
+
- [ ] All metrics show in dashboard / Todas las métricas aparecen en el dashboard
|
|
129
|
+
- [ ] All settings render and save correctly / Todos los settings renderizan y guardan
|
|
130
|
+
- [ ] Adding this module required zero Core changes / Añadir el módulo requirió cero cambios en el Core
|
|
131
|
+
- [ ] Removing module folder removes it completely from Admin Panel / Eliminar la carpeta lo elimina del Panel Admin
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
*For full documentation / Para documentación completa: `METHOD.md`*
|
|
136
|
+
*Method REFLEX v1.0.0 · @exchanet · MIT*
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Think of it as `brew` or `npm`, but for AI coding architecture methods.
|
|
|
24
24
|
|
|
25
25
|
| Method | What it does |
|
|
26
26
|
|---|---|
|
|
27
|
-
| `
|
|
27
|
+
| `modular-design` | Universal modular architecture. Auto-generated Admin Panel, zero hardcoded config. |
|
|
28
28
|
| `pdca-t` | ≥99% test coverage, zero vulnerabilities, systematic quality validation. |
|
|
29
29
|
| `iris` | Continuous improvement of existing systems without breaking architecture. |
|
|
30
30
|
| `enterprise-builder` | Large-scale planning for complex projects before writing code. |
|
|
@@ -38,7 +38,7 @@ The registry is live — new methods appear automatically without updating enet.
|
|
|
38
38
|
### Install a method
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
enet install
|
|
41
|
+
enet install modular-design
|
|
42
42
|
enet install pdca-t
|
|
43
43
|
enet install iris
|
|
44
44
|
enet install enterprise-builder
|
|
@@ -48,10 +48,10 @@ enet detects your AI agent automatically and places the adapter in the right loc
|
|
|
48
48
|
|
|
49
49
|
| Agent detected | Installs to |
|
|
50
50
|
|---|---|
|
|
51
|
-
| Cursor | `.cursor/rules/enet-
|
|
51
|
+
| Cursor | `.cursor/rules/enet-modular-design.md` |
|
|
52
52
|
| Windsurf | Appended to `.windsurfrules` |
|
|
53
53
|
| GitHub Copilot | `.github/copilot-instructions.md` |
|
|
54
|
-
| None detected | `.enet/
|
|
54
|
+
| None detected | `.enet/modular-design.md` |
|
|
55
55
|
|
|
56
56
|
Override with `--agent cursor\|windsurf\|copilot\|generic`.
|
|
57
57
|
|
|
@@ -99,15 +99,15 @@ enet validate --strict # warnings become errors
|
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
101
|
enet update # update all installed methods
|
|
102
|
-
enet update
|
|
102
|
+
enet update modular-design # update a specific method
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
---
|
|
106
106
|
|
|
107
107
|
## How it works
|
|
108
108
|
|
|
109
|
-
1. `enet install
|
|
110
|
-
2. Finds the repo for `
|
|
109
|
+
1. `enet install modular-design` fetches `registry.json` from this repo
|
|
110
|
+
2. Finds the repo for `modular-design` (`exchanet/method_modular_design`)
|
|
111
111
|
3. Detects your agent (Cursor, Windsurf, Copilot...)
|
|
112
112
|
4. Downloads the right adapter from GitHub in real time
|
|
113
113
|
5. Writes it to the correct location in your project
|
package/package.json
CHANGED
package/registry.json
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
|
-
"updated": "
|
|
3
|
+
"updated": "2026-03-01",
|
|
4
4
|
"methods": {
|
|
5
|
-
"
|
|
6
|
-
"id": "
|
|
7
|
-
"name": "Method
|
|
5
|
+
"modular-design": {
|
|
6
|
+
"id": "modular-design",
|
|
7
|
+
"name": "Method Modular Design",
|
|
8
8
|
"description": "Universal modular architecture. Auto-generated Admin Panel, zero hardcoded config, self-describing modules via manifest.json.",
|
|
9
|
-
"repo": "exchanet/
|
|
10
|
-
"version": "
|
|
9
|
+
"repo": "exchanet/method_modular_design",
|
|
10
|
+
"version": "2.0.0",
|
|
11
11
|
"tags": ["architecture", "modular", "admin-panel", "manifest", "core"],
|
|
12
12
|
"adapters": {
|
|
13
|
-
"cursor":
|
|
14
|
-
"windsurf":
|
|
15
|
-
"copilot":
|
|
16
|
-
"
|
|
13
|
+
"cursor": "adapters/cursor.md",
|
|
14
|
+
"windsurf": "adapters/windsurf.md",
|
|
15
|
+
"copilot": "adapters/copilot.md",
|
|
16
|
+
"antigravity": "adapters/antigravity.md",
|
|
17
|
+
"claudecode": "adapters/claudecode.md",
|
|
18
|
+
"generic": "adapters/generic.md"
|
|
17
19
|
},
|
|
18
20
|
"extras": {
|
|
19
21
|
"schema": "schemas/manifest.schema.json"
|
|
@@ -22,15 +24,17 @@
|
|
|
22
24
|
"pdca-t": {
|
|
23
25
|
"id": "pdca-t",
|
|
24
26
|
"name": "Method PDCA-T",
|
|
25
|
-
"description": "≥99% test coverage, zero vulnerabilities, systematic quality validation cycles. Use alongside
|
|
27
|
+
"description": "≥99% test coverage, zero vulnerabilities, systematic quality validation cycles. Use alongside Modular Design for pro-grade results.",
|
|
26
28
|
"repo": "exchanet/method_pdca-t_coding_Cursor",
|
|
27
29
|
"version": "1.0.0",
|
|
28
30
|
"tags": ["quality", "testing", "security", "coverage", "validation"],
|
|
29
31
|
"adapters": {
|
|
30
|
-
"cursor":
|
|
31
|
-
"windsurf":
|
|
32
|
-
"copilot":
|
|
33
|
-
"
|
|
32
|
+
"cursor": ".cursor/rules/METHOD-PDCA-T.md",
|
|
33
|
+
"windsurf": ".cursor/rules/METHOD-PDCA-T.md",
|
|
34
|
+
"copilot": ".cursor/rules/METHOD-PDCA-T.md",
|
|
35
|
+
"antigravity": ".cursor/rules/METHOD-PDCA-T.md",
|
|
36
|
+
"claudecode": ".cursor/rules/METHOD-PDCA-T.md",
|
|
37
|
+
"generic": ".cursor/rules/METHOD-PDCA-T.md"
|
|
34
38
|
}
|
|
35
39
|
},
|
|
36
40
|
"iris": {
|
|
@@ -41,10 +45,12 @@
|
|
|
41
45
|
"version": "1.0.0",
|
|
42
46
|
"tags": ["refactoring", "improvement", "evolution", "maintenance"],
|
|
43
47
|
"adapters": {
|
|
44
|
-
"cursor":
|
|
45
|
-
"windsurf":
|
|
46
|
-
"copilot":
|
|
47
|
-
"
|
|
48
|
+
"cursor": "adapters/cursor.md",
|
|
49
|
+
"windsurf": "adapters/windsurf.md",
|
|
50
|
+
"copilot": "adapters/copilot.md",
|
|
51
|
+
"antigravity": "adapters/antigravity.md",
|
|
52
|
+
"claudecode": "adapters/claudecode.md",
|
|
53
|
+
"generic": "adapters/generic.md"
|
|
48
54
|
}
|
|
49
55
|
},
|
|
50
56
|
"enterprise-builder": {
|
|
@@ -55,10 +61,12 @@
|
|
|
55
61
|
"version": "1.0.0",
|
|
56
62
|
"tags": ["planning", "enterprise", "architecture", "scale"],
|
|
57
63
|
"adapters": {
|
|
58
|
-
"cursor":
|
|
59
|
-
"windsurf":
|
|
60
|
-
"copilot":
|
|
61
|
-
"
|
|
64
|
+
"cursor": "adapters/cursor.md",
|
|
65
|
+
"windsurf": "adapters/windsurf.md",
|
|
66
|
+
"copilot": "adapters/copilot.md",
|
|
67
|
+
"antigravity": "adapters/antigravity.md",
|
|
68
|
+
"claudecode": "adapters/claudecode.md",
|
|
69
|
+
"generic": "adapters/generic.md"
|
|
62
70
|
}
|
|
63
71
|
}
|
|
64
72
|
}
|
package/src/commands/install.js
CHANGED
|
@@ -62,7 +62,7 @@ export async function installCommand(methodId, options) {
|
|
|
62
62
|
console.log(chalk.dim(` → ${path.relative(process.cwd(), installPath)}`))
|
|
63
63
|
console.log(chalk.dim(` ${agent.configNote}\n`))
|
|
64
64
|
|
|
65
|
-
// Download extras (e.g. manifest.schema.json for
|
|
65
|
+
// Download extras (e.g. manifest.schema.json for modular-design)
|
|
66
66
|
if (method.extras) {
|
|
67
67
|
for (const [key, filePath] of Object.entries(method.extras)) {
|
|
68
68
|
const extraSpinner = ora(`Fetching ${key}...`).start()
|
|
@@ -88,7 +88,7 @@ export async function installCommand(methodId, options) {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
function printHints(methodId) {
|
|
91
|
-
if (methodId === '
|
|
91
|
+
if (methodId === 'modular-design') {
|
|
92
92
|
console.log(chalk.dim(' Next:'))
|
|
93
93
|
console.log(chalk.dim(` 1. Give your agent a spectech (stack + modules needed)`))
|
|
94
94
|
console.log(chalk.dim(` 2. Agent declares architecture — confirm it`))
|
|
@@ -99,6 +99,6 @@ function printHints(methodId) {
|
|
|
99
99
|
}
|
|
100
100
|
if (methodId === 'pdca-t') {
|
|
101
101
|
console.log(chalk.dim(` PDCA-T adds quality validation to your workflow.`))
|
|
102
|
-
console.log(chalk.dim(` Works best alongside ${chalk.white('enet install
|
|
102
|
+
console.log(chalk.dim(` Works best alongside ${chalk.white('enet install modular-design')}.\n`))
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -4,11 +4,25 @@ import path from 'path'
|
|
|
4
4
|
export const AGENTS = {
|
|
5
5
|
cursor: {
|
|
6
6
|
name: 'Cursor',
|
|
7
|
-
signals: ['.cursor'],
|
|
7
|
+
signals: ['.cursor/rules', '.cursor'],
|
|
8
8
|
installDir: '.cursor/rules',
|
|
9
9
|
filename: 'enet-{id}.md',
|
|
10
10
|
configNote: 'Rule auto-applies to all files (alwaysApply: true)'
|
|
11
11
|
},
|
|
12
|
+
antigravity: {
|
|
13
|
+
name: 'Antigravity (Google)',
|
|
14
|
+
signals: ['.agent/rules', '.agent'],
|
|
15
|
+
installDir: '.agent/rules',
|
|
16
|
+
filename: 'enet-{id}.md',
|
|
17
|
+
configNote: 'Rule saved to .agent/rules/ — set activation to Always On in Antigravity'
|
|
18
|
+
},
|
|
19
|
+
claudecode: {
|
|
20
|
+
name: 'Claude Code',
|
|
21
|
+
signals: ['CLAUDE.md', '.claude'],
|
|
22
|
+
installDir: '.',
|
|
23
|
+
filename: 'CLAUDE.md',
|
|
24
|
+
configNote: 'Written to CLAUDE.md — Claude Code reads this file automatically'
|
|
25
|
+
},
|
|
12
26
|
windsurf: {
|
|
13
27
|
name: 'Windsurf',
|
|
14
28
|
signals: ['.windsurfrules', '.windsurf'],
|
|
@@ -18,7 +32,7 @@ export const AGENTS = {
|
|
|
18
32
|
},
|
|
19
33
|
copilot: {
|
|
20
34
|
name: 'GitHub Copilot',
|
|
21
|
-
signals: ['.github/copilot-instructions.md'
|
|
35
|
+
signals: ['.github/copilot-instructions.md'],
|
|
22
36
|
installDir: '.github',
|
|
23
37
|
filename: 'copilot-instructions.md',
|
|
24
38
|
configNote: 'Written to .github/copilot-instructions.md'
|