@dforge-core/dforge-mcp 0.1.0-rc.12 → 0.1.0-rc.13

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 (43) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +75 -21
  3. package/dist/server.js +2405 -272
  4. package/docs/creating-modules.md +7 -3
  5. package/package.json +11 -6
  6. package/resources/docs/conventions.md +12 -9
  7. package/resources/schemas/entity.schema.json +4 -0
  8. package/resources/schemas/reports.schema.json +4 -0
  9. package/skills/dforge-mcp-author/SKILL.md +220 -91
  10. package/skills/dforge-mcp-author/examples/simple-todo/README.md +38 -0
  11. package/skills/dforge-mcp-author/examples/simple-todo/entities/todo_item.json +83 -0
  12. package/skills/dforge-mcp-author/examples/simple-todo/entities/todo_list.json +43 -0
  13. package/skills/dforge-mcp-author/examples/simple-todo/logic/actions/mark_done.dsl +6 -0
  14. package/skills/dforge-mcp-author/examples/simple-todo/manifest.json +32 -0
  15. package/skills/dforge-mcp-author/examples/simple-todo/security/roles.json +10 -0
  16. package/skills/dforge-mcp-author/examples/simple-todo/seed-data/01-lists.json +17 -0
  17. package/skills/dforge-mcp-author/examples/simple-todo/ui/actions.json +11 -0
  18. package/skills/dforge-mcp-author/examples/simple-todo/ui/data_views.json +35 -0
  19. package/skills/dforge-mcp-author/examples/simple-todo/ui/menus.json +28 -0
  20. package/skills/dforge-mcp-author/references/action-dsl.md +397 -0
  21. package/skills/dforge-mcp-author/references/column-types.md +168 -0
  22. package/skills/dforge-mcp-author/references/conventions.md +177 -0
  23. package/skills/dforge-mcp-author/references/data-migration.md +270 -0
  24. package/skills/dforge-mcp-author/references/data-views.md +192 -0
  25. package/skills/dforge-mcp-author/references/excel-import.md +61 -0
  26. package/skills/dforge-mcp-author/references/field-types.md +144 -0
  27. package/skills/dforge-mcp-author/references/filters.md +326 -0
  28. package/skills/dforge-mcp-author/references/flags.md +73 -0
  29. package/skills/dforge-mcp-author/references/formulas.md +206 -0
  30. package/skills/dforge-mcp-author/references/jobs.md +149 -0
  31. package/skills/dforge-mcp-author/references/manifest.md +123 -0
  32. package/skills/dforge-mcp-author/references/menus.md +164 -0
  33. package/skills/dforge-mcp-author/references/number-sequences.md +117 -0
  34. package/skills/dforge-mcp-author/references/print-templates.md +159 -0
  35. package/skills/dforge-mcp-author/references/queries.md +312 -0
  36. package/skills/dforge-mcp-author/references/reports.md +398 -0
  37. package/skills/dforge-mcp-author/references/schema-import.md +331 -0
  38. package/skills/dforge-mcp-author/references/security.md +244 -0
  39. package/skills/dforge-mcp-author/references/settings.md +120 -0
  40. package/skills/dforge-mcp-author/references/traits.md +153 -0
  41. package/skills/dforge-mcp-author/references/translations.md +158 -0
  42. package/skills/dforge-mcp-author/references/validation-checklist.md +182 -0
  43. package/skills/dforge-mcp-author/scripts/xlsx_to_model.py +198 -0
@@ -64,10 +64,14 @@ You: "I want a module to collect end-user feedback on app pages."
64
64
 
65
65
  The wizard runs:
66
66
 
67
- ### Phase 0 — Intake (required, ~1 turn)
67
+ ### Phase 0 — Identity, requirements, design, validation (required)
68
68
 
69
- Four questions in one message: purpose / users / dependencies / language scope.
70
- You can accept defaults to move fast. Writes `_brief/00-intake.md`.
69
+ A documented chain the `dforge-mcp-author` skill enforces the AI authors each artifact directly (drafts it, you approve, your client writes the file):
70
+
71
+ - **0a Identity** — write `CLAUDE.md` (identity + MCP-first rules + a live status tracker).
72
+ - **0b Requirements** — intake questions (purpose / users / dependencies / language scope), then write `docs/REQUIREMENTS.md`. **You review it before moving on.**
73
+ - **0c Design** — entity list, relationships, status machines, then write `docs/DESIGN.md`. **You review it before moving on.**
74
+ - **0d Validation** — the AI cross-checks the documents, reports every gap/flaw/inconsistency to `docs/VALIDATION.md`, and must reach a clean pass before scaffolding.
71
75
 
72
76
  ### Phase 1 — Domain (required, looping)
73
77
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dforge-core/dforge-mcp",
3
- "version": "0.1.0-rc.12",
3
+ "version": "0.1.0-rc.13",
4
4
  "description": "MCP server for dForge module authoring. Exposes scaffold/pack/install tools and schema resources so AI agents (Claude Code, Cursor, Zed) can create and ship dForge modules.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/iash44/dForge-core",
@@ -16,7 +16,8 @@
16
16
  "docs/",
17
17
  "resources/",
18
18
  "skills/",
19
- "README.md"
19
+ "README.md",
20
+ "CHANGELOG.md"
20
21
  ],
21
22
  "main": "dist/server.js",
22
23
  "engines": {
@@ -24,17 +25,21 @@
24
25
  },
25
26
  "scripts": {
26
27
  "build": "tsup",
27
- "prepublishOnly": "tsup",
28
- "typecheck": "tsc --noEmit"
28
+ "sync-schemas": "node scripts/vendor-schemas.cjs",
29
+ "prepublishOnly": "node scripts/vendor-schemas.cjs && tsup",
30
+ "typecheck": "tsc --noEmit",
31
+ "test": "vitest run"
29
32
  },
30
33
  "dependencies": {
31
- "@dforge-core/dforge-cli": "^0.1.2",
34
+ "@dforge-core/dforge-cli": "^0.2.2",
35
+ "@dforge-core/metadata": "^0.0.2",
32
36
  "@modelcontextprotocol/sdk": "^1.29.0",
33
37
  "zod": "^4.4.3"
34
38
  },
35
39
  "devDependencies": {
36
40
  "@types/node": "^22.10.2",
37
41
  "tsup": "^8.5.1",
38
- "typescript": "^6.0.3"
42
+ "typescript": "^6.0.3",
43
+ "vitest": "^3.2.0"
39
44
  }
40
45
  }
@@ -84,7 +84,7 @@ Use the CRM sample module (`modules/crm/`) as a reference implementation.
84
84
  ```json
85
85
  {
86
86
  "packageFormat": 1,
87
- "moduleId": "10000000-0000-0000-0000-000000000002",
87
+ "moduleId": "REPLACE-WITH-A-FRESH-UUID",
88
88
  "code": "hr",
89
89
  "version": "0.0.1",
90
90
  "dbSchemaVersion": "0.0.1",
@@ -518,7 +518,7 @@ seed-data/
518
518
  "entityCode": "department",
519
519
  "records": [
520
520
  {
521
- "department_id": "a0030000-0000-0000-0000-000000000001",
521
+ "department_id": 3001,
522
522
  "department_code": "EXEC",
523
523
  "department_name": "Executive / Leadership",
524
524
  "is_active": true
@@ -530,10 +530,10 @@ seed-data/
530
530
  **Rules:**
531
531
  - Files are loaded alphabetically — use numbered prefixes (01-, 02-, etc.)
532
532
  - Parent tables must come before child tables (FK dependency order)
533
- - Include explicit PK values (UUIDs) so child records can reference them
534
- - Use a stable UUID scheme: `a00X0000-0000-0000-0000-00000000000Y` where X=entity type, Y=record
533
+ - Include explicit PK values so child records can reference them
534
+ - PKs from the `identity` trait are `cuid` — physically `int8` (bigint), **not** UUID strings. Use numeric integers with a stable per-entity scheme: `1001`–`1099` for the first entity type, `2001`–`2099` for the next, etc. Using UUID strings here fails the seed load against `int8` columns.
535
535
  - Inserts use `ON CONFLICT DO NOTHING` (idempotent)
536
- - UUIDs and dates in string format are auto-converted by the seed runner
536
+ - Dates in string format are auto-converted by the seed runner
537
537
  - Omit auto-generated fields (`created_date`, `last_updated`) — they use DB defaults
538
538
  - Omit cross-module FK fields (e.g., `owner_id` referencing `user` table)
539
539
 
@@ -616,7 +616,7 @@ Cron-driven action fires. Each entry pairs an existing action (declared in `ui/a
616
616
  "toString": "{first_name} {last_name}",
617
617
  "fields": {
618
618
  "employee_id": {
619
- "dbDatatype": "uuid",
619
+ "dbDatatype": "cuid",
620
620
  "isPk": true,
621
621
  "isIdentity": true,
622
622
  "isNullable": false,
@@ -633,7 +633,8 @@ Cron-driven action fires. Each entry pairs an existing action (declared in `ui/a
633
633
  "description": "Employee Code"
634
634
  },
635
635
  "department_id": {
636
- "dbDatatype": "uuid",
636
+ "dbDatatype": "cuid",
637
+ "fieldTypeCd": "hidden",
637
638
  "flags": "EM",
638
639
  "orderNum": 30,
639
640
  "description": "Department ID"
@@ -706,7 +707,8 @@ For every foreign key relationship, create TWO columns:
706
707
  ### 1. Hidden FK Column (Database)
707
708
  ```json
708
709
  "department_id": {
709
- "dbDatatype": "uuid",
710
+ "dbDatatype": "cuid",
711
+ "fieldTypeCd": "hidden",
710
712
  "flags": "EM",
711
713
  "orderNum": 30,
712
714
  "description": "Department ID"
@@ -745,6 +747,7 @@ For every foreign key relationship, create TWO columns:
745
747
  - `params` is used for other purposes (e.g., dropdown `options`)
746
748
  - Hidden FK column: `flags: "EM"` (no `V` = hidden from UI)
747
749
  - Visible reference column: `flags: "VEM"`, `columnType: "R"`
750
+ - The FK column's `dbDatatype` **MUST match the referenced PK's type** — use `cuid` for `identity`-trait PKs (`cuid` is physically `int8`, **not** a UUID). A mismatch (e.g. FK `uuid` → PK `cuid`) fails install with *"foreign key constraint … cannot be implemented"*.
748
751
 
749
752
  ---
750
753
 
@@ -924,7 +927,7 @@ When creating a module, ensure:
924
927
  - [ ] `folders.json` uses entity dictionary with `{ viewName, quickAdd }` objects
925
928
  - [ ] `roles.json` uses `"rights"` property (not `"entityRights"`)
926
929
  - [ ] Seed data files are numbered for FK dependency order (01-, 02-, etc.)
927
- - [ ] Seed data includes explicit PK UUIDs for cross-entity references
930
+ - [ ] Seed data includes explicit numeric (int8) PKs for cross-entity references — NOT UUID strings (`cuid` is `int8`)
928
931
  - [ ] `translations/<locale>.json` covers entities (+ fields), folders, views, menus (+ items), actions (+ params), and reports (+ dataset captions, + params) for every locale declared in `manifest.supportedLocales`. Do not include `en`/`en-US`. Sections `roles` and `print_templates` are not displayed even if listed.
929
932
  - [ ] Constraints have clear user-facing `message` values
930
933
  - [ ] Check constraint `expression` uses standard SQL subset (test in PostgreSQL first)
@@ -199,6 +199,10 @@
199
199
  "$ref": "#/$defs/fieldLink",
200
200
  "description": "Relationship link for Reference (R) and Set (S) columns"
201
201
  },
202
+ "cyclic": {
203
+ "type": "boolean",
204
+ "description": "On a self-referencing reference column (R column whose link.entity is the owning entity), set true to ALLOW parent/child cycles. When absent the self-reference is treated as an acyclic hierarchy and DB-level guards reject loops. Ignored on non-self-referencing columns."
205
+ },
202
206
  "refFilter": {
203
207
  "description": "Filter criteria for reference lookups"
204
208
  }
@@ -159,6 +159,10 @@
159
159
  "description": "Field type code (see settings.schema.json for the common list)"
160
160
  },
161
161
  "label": { "type": "string" },
162
+ "orderNum": {
163
+ "type": "integer",
164
+ "description": "Display order of the parameter in the report's parameter form. Read by ReportRegistrar (paramDef.OrderNum); falls back to declaration order when omitted."
165
+ },
162
166
  "required": {
163
167
  "type": "boolean",
164
168
  "default": false,