@antelopejs/dms-ai 0.3.0 → 0.4.1

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 (67) hide show
  1. package/README.md +67 -206
  2. package/dist/index.js +3 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/lifecycle/skill-sources.d.ts +1 -1
  5. package/dist/lifecycle/skill-sources.js +29 -13
  6. package/dist/lifecycle/skill-sources.js.map +1 -1
  7. package/frontend-vue/app/chat/components/BlockPreviewCard.vue +172 -0
  8. package/frontend-vue/app/chat/components/BlockPreviewModal.vue +324 -0
  9. package/frontend-vue/app/chat/components/BlockPreviewThumb.vue +141 -0
  10. package/frontend-vue/app/chat/components/MessageList.vue +20 -0
  11. package/frontend-vue/app/chat/components/SketchFrame.vue +59 -0
  12. package/frontend-vue/app/chat/composables/conversation-events.ts +23 -1
  13. package/frontend-vue/app/chat/composables/useBlockPreviewComponent.ts +15 -0
  14. package/frontend-vue/app/chat/composables/useDashboardScheme.ts +42 -0
  15. package/frontend-vue/app/chat/constants/block-preview.ts +27 -0
  16. package/frontend-vue/app/chat/constants/conversation.ts +1 -0
  17. package/frontend-vue/app/chat/constants/protocol.ts +1 -0
  18. package/frontend-vue/app/chat/constants/sketch.ts +105 -0
  19. package/frontend-vue/app/chat/types/conversation.ts +11 -1
  20. package/frontend-vue/app/chat/types/protocol.ts +56 -0
  21. package/frontend-vue/app/chat/utils/block-preview.ts +145 -0
  22. package/frontend-vue/app/chat/utils/conversation-messages.ts +23 -1
  23. package/frontend-vue/app/chat/utils/render-items.ts +13 -2
  24. package/frontend-vue/app/chat/utils/sketch.ts +56 -0
  25. package/frontend-vue/app/chat/utils/tool-lexicon.ts +7 -0
  26. package/frontend-vue/app/runtime/session-gate.ts +11 -5
  27. package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +23 -1
  28. package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +23 -1
  29. package/frontend-vue/package.json +1 -1
  30. package/frontend-vue/tests/chat/block-preview.test.ts +448 -0
  31. package/frontend-vue/tests/session-gate.test.ts +28 -1
  32. package/package.json +22 -8
  33. package/sidecar/dist/constants/mcp.js +2 -0
  34. package/sidecar/dist/constants/mcp.js.map +1 -1
  35. package/sidecar/dist/constants/preview.d.ts +39 -0
  36. package/sidecar/dist/constants/preview.js +55 -0
  37. package/sidecar/dist/constants/preview.js.map +1 -0
  38. package/sidecar/dist/constants/tool-kinds.js +2 -0
  39. package/sidecar/dist/constants/tool-kinds.js.map +1 -1
  40. package/sidecar/dist/mcp/tool-definitions.js +5 -0
  41. package/sidecar/dist/mcp/tool-definitions.js.map +1 -1
  42. package/sidecar/dist/mcp/tools/preview-blocks.d.ts +65 -0
  43. package/sidecar/dist/mcp/tools/preview-blocks.js +176 -0
  44. package/sidecar/dist/mcp/tools/preview-blocks.js.map +1 -0
  45. package/sidecar/dist/mcp/types.d.ts +3 -0
  46. package/sidecar/dist/prompts/agent.d.ts +1 -1
  47. package/sidecar/dist/prompts/agent.js +3 -2
  48. package/sidecar/dist/prompts/agent.js.map +1 -1
  49. package/sidecar/dist/protocol/events.d.ts +313 -0
  50. package/sidecar/dist/protocol/events.js +9 -0
  51. package/sidecar/dist/protocol/events.js.map +1 -1
  52. package/sidecar/dist/protocol/preview.d.ts +130 -0
  53. package/sidecar/dist/protocol/preview.js +91 -0
  54. package/sidecar/dist/protocol/preview.js.map +1 -0
  55. package/sidecar/dist/server/chat-events.d.ts +3 -0
  56. package/sidecar/dist/server/chat-events.js +21 -0
  57. package/sidecar/dist/server/chat-events.js.map +1 -1
  58. package/sidecar/dist/server/ws.js +3 -1
  59. package/sidecar/dist/server/ws.js.map +1 -1
  60. package/sidecar/dist/state/types.d.ts +3 -1
  61. package/sidecar/dist/state/types.js +1 -0
  62. package/sidecar/dist/state/types.js.map +1 -1
  63. package/sidecar/package.json +1 -1
  64. package/skills/dms-ai/SKILL.md +30 -0
  65. package/skills/dms-ai-code-mode/SKILL.md +51 -0
  66. package/skills/dms-builder-safe/SKILL.md +9 -2
  67. package/skills/dms-builder-page/SKILL.md +0 -80
@@ -0,0 +1,91 @@
1
+ import { z } from "zod";
2
+ import { PREVIEW_MAX_CAPTION_CHARS, PREVIEW_MAX_DESCRIPTION_CHARS, PREVIEW_MAX_JSON_BYTES, PREVIEW_MAX_LABEL_CHARS, PREVIEW_MAX_ROOTS, PREVIEW_MAX_TITLE_CHARS, PREVIEW_MAX_URL_CHARS, PREVIEW_MAX_VARIANTS, PREVIEW_SKETCH_DEFAULT_HEIGHT_PX, PREVIEW_SKETCH_MAX_HEIGHT_PX, PREVIEW_SKETCH_MIN_HEIGHT_PX, } from "../constants/preview.js";
3
+ export const PreviewNodeSchema = z.object({
4
+ type: z
5
+ .string()
6
+ .optional()
7
+ .describe("Block type from BuilderCatalog, e.g. `KpiCard`."),
8
+ componentName: z
9
+ .string()
10
+ .optional()
11
+ .describe("Registered block component name, e.g. `dms-kpi-card`; only when `type` is unknown."),
12
+ options: z
13
+ .record(z.string(), z.unknown())
14
+ .optional()
15
+ .describe("The block's options, as its declaration takes them. A `fetchUrl` must be a same-origin path."),
16
+ id: z.string().optional().describe("Child id, unique among its siblings."),
17
+ slot: z
18
+ .string()
19
+ .optional()
20
+ .describe("Slot of the parent the child renders in, when it has several."),
21
+ colSpan: z
22
+ .number()
23
+ .int()
24
+ .positive()
25
+ .optional()
26
+ .describe("Columns a GridRow child spans."),
27
+ get children() {
28
+ return z
29
+ .array(PreviewNodeSchema)
30
+ .optional()
31
+ .describe("Nested blocks, in order.");
32
+ },
33
+ });
34
+ export const PreviewTreeSchema = z
35
+ .union([
36
+ PreviewNodeSchema,
37
+ z.array(PreviewNodeSchema).min(1).max(PREVIEW_MAX_ROOTS),
38
+ ])
39
+ .describe("One block, or a list of blocks stacked in order.");
40
+ export const PreviewSketchSchema = z
41
+ .object({
42
+ html: z
43
+ .string()
44
+ .min(1)
45
+ .max(PREVIEW_MAX_JSON_BYTES)
46
+ .describe("Body markup of the component. Static only: no script, event handler or external resource; images and fonts as data: URLs."),
47
+ css: z
48
+ .string()
49
+ .max(PREVIEW_MAX_JSON_BYTES)
50
+ .optional()
51
+ .describe("Styles for the markup. The `--sketch-*` variables (surface, text, border, accent, radius, font) follow the dashboard's light or dark theme."),
52
+ caption: z
53
+ .string()
54
+ .max(PREVIEW_MAX_CAPTION_CHARS)
55
+ .optional()
56
+ .describe("One line on what the sketch shows, e.g. `Revenue card with a sparkline`."),
57
+ height: z
58
+ .number()
59
+ .int()
60
+ .min(PREVIEW_SKETCH_MIN_HEIGHT_PX)
61
+ .max(PREVIEW_SKETCH_MAX_HEIGHT_PX)
62
+ .optional()
63
+ .describe(`Frame height in pixels; the sketch scrolls past it. Default ${PREVIEW_SKETCH_DEFAULT_HEIGHT_PX}.`),
64
+ })
65
+ .describe("A proposed custom component as static HTML and CSS, shown beside the DMS option and labelled as not a DMS block.");
66
+ export const PreviewVariantSchema = z.object({
67
+ label: z
68
+ .string()
69
+ .min(1)
70
+ .max(PREVIEW_MAX_LABEL_CHARS)
71
+ .describe("Tab label, e.g. `Compact` or `Custom sketch`."),
72
+ tree: PreviewTreeSchema.optional(),
73
+ sketch: PreviewSketchSchema.optional(),
74
+ });
75
+ export const BlockPreviewReferenceSchema = z.object({
76
+ attachmentName: z.string().optional(),
77
+ url: z.string().max(PREVIEW_MAX_URL_CHARS).optional(),
78
+ caption: z.string().max(PREVIEW_MAX_CAPTION_CHARS).optional(),
79
+ });
80
+ export const BlockPreviewSchema = z.object({
81
+ id: z.string(),
82
+ title: z.string().max(PREVIEW_MAX_TITLE_CHARS),
83
+ description: z.string().max(PREVIEW_MAX_DESCRIPTION_CHARS).optional(),
84
+ label: z.string().max(PREVIEW_MAX_LABEL_CHARS).optional(),
85
+ tree: PreviewTreeSchema.optional(),
86
+ sketch: PreviewSketchSchema.optional(),
87
+ reference: BlockPreviewReferenceSchema.optional(),
88
+ variants: z.array(PreviewVariantSchema).max(PREVIEW_MAX_VARIANTS).optional(),
89
+ timestampMs: z.number(),
90
+ });
91
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/protocol/preview.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { PendingRequest } from "../agent/permission-bus.js";
2
2
  import type { PendingQuestion } from "../agent/question-bus.js";
3
3
  import { type AskQuestionEventType, type ConversationListEventType, type ConversationSnapshotEventType, type ConversationSummaryType, type PermissionRequestEventType, type SettingsUpdateEventType } from "../protocol/events.js";
4
+ import type { BlockPreviewType } from "../protocol/preview.js";
4
5
  import type { Notice } from "../state/types.js";
5
6
  import type { SidecarServices } from "./services.js";
6
7
  export declare function buildSnapshotEvent(services: SidecarServices, conversationId: string): ConversationSnapshotEventType | null;
@@ -10,6 +11,8 @@ export declare function broadcastConversationList(services: SidecarServices): vo
10
11
  export declare function sendConversationMode(services: SidecarServices, conversationId: string): void;
11
12
  export declare function sendRulesState(services: SidecarServices, conversationId: string): void;
12
13
  export declare function emitNotice(services: SidecarServices, conversationId: string, notice: Notice): void;
14
+ export declare function emitBlockPreview(services: SidecarServices, conversationId: string, preview: BlockPreviewType): void;
15
+ export declare function listAttachedImages(services: SidecarServices, conversationId: string): string[];
13
16
  export declare function buildPermissionRequestEvent(request: PendingRequest): PermissionRequestEventType;
14
17
  export declare function buildAskQuestionEvent(question: PendingQuestion): AskQuestionEventType;
15
18
  export declare function buildSettingsUpdateEvent(services: Pick<SidecarServices, "settingsStore">): SettingsUpdateEventType;
@@ -1,4 +1,5 @@
1
1
  import { getBuilderAvailable } from "../builder/capability.js";
2
+ import { PREVIEW_IMAGE_MIME_PREFIX } from "../constants/preview.js";
2
3
  import { EVENT_TYPES, } from "../protocol/events.js";
3
4
  import { getProviderAvailability } from "../providers/registry.js";
4
5
  const HIDDEN_ROLES = ["permission"];
@@ -98,6 +99,26 @@ export function emitNotice(services, conversationId, notice) {
98
99
  notice,
99
100
  });
100
101
  }
102
+ export function emitBlockPreview(services, conversationId, preview) {
103
+ services.conversationStore.appendMessage(conversationId, {
104
+ role: "block_preview",
105
+ content: "",
106
+ preview,
107
+ timestampMs: preview.timestampMs,
108
+ });
109
+ services.chatSocketRegistry.send(conversationId, {
110
+ type: EVENT_TYPES.BLOCK_PREVIEW,
111
+ conversationId,
112
+ preview,
113
+ });
114
+ }
115
+ export function listAttachedImages(services, conversationId) {
116
+ const messages = services.conversationStore.get(conversationId)?.messages ?? [];
117
+ return messages
118
+ .flatMap((message) => message.attachments ?? [])
119
+ .filter((attachment) => attachment.mimeType.startsWith(PREVIEW_IMAGE_MIME_PREFIX))
120
+ .map((attachment) => attachment.name);
121
+ }
101
122
  export function buildPermissionRequestEvent(request) {
102
123
  return { type: EVENT_TYPES.PERMISSION_REQUEST, ...request };
103
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chat-events.js","sourceRoot":"","sources":["../../src/server/chat-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-events.js","sourceRoot":"","sources":["../../src/server/chat-events.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ import { createAiMcpServer } from "../mcp/sdk-binding.js";
18
18
  import { PROVIDER_MODULES } from "../providers/registry.js";
19
19
  import { createChangeSetStore } from "../state/change-sets.js";
20
20
  import { PROVIDER_NAMES } from "../state/types.js";
21
- import { broadcastConversationList, emitNotice, sendConversationMode, } from "./chat-events.js";
21
+ import { broadcastConversationList, emitBlockPreview, emitNotice, listAttachedImages, sendConversationMode, } from "./chat-events.js";
22
22
  import { isClientAuthorized } from "./client-auth.js";
23
23
  import { createHostCommandRouter, } from "./host-command-router.js";
24
24
  import { createChatSocketRegistry, } from "./chat-socket-registry.js";
@@ -80,6 +80,8 @@ function buildMcpDepsFactory(staticDeps, holder, hostCommandsOf) {
80
80
  sendToHost: hostCommandsOf(conversationId),
81
81
  requestQuestion: (req) => askUser(services(holder), req),
82
82
  getLastEditedFile: () => services(holder).editTracker.getLastEditedFile(conversationId),
83
+ showPreview: (preview) => emitBlockPreview(services(holder), conversationId, preview),
84
+ listAttachedImages: () => listAttachedImages(services(holder), conversationId),
83
85
  gateBuilderOp: (toolName, args) => buildBuilderGate(services(holder), conversationId)(toolName, args),
84
86
  });
85
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/server/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/server/ws.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { AllowedBy, ChangeFileStatus, ChangeSetState, FullAutoDuration, PermissionKind, ToolOutcome, TypecheckOutcome } from "../constants/audit.js";
2
+ import type { BlockPreviewType } from "../protocol/preview.js";
2
3
  import type { ChatMode, GenerationMode } from "./settings-types.js";
3
- declare const STORED_MESSAGE_ROLES: readonly ["user", "assistant", "tool_use", "tool_result", "permission", "error", "notice", "change_set", "question_answer"];
4
+ declare const STORED_MESSAGE_ROLES: readonly ["user", "assistant", "tool_use", "tool_result", "permission", "error", "notice", "change_set", "question_answer", "block_preview"];
4
5
  type StoredMessageRole = (typeof STORED_MESSAGE_ROLES)[number];
5
6
  declare const STORED_MESSAGE_STATUSES: readonly ["success", "error"];
6
7
  type StoredMessageStatus = (typeof STORED_MESSAGE_STATUSES)[number];
@@ -56,6 +57,7 @@ export interface StoredMessage {
56
57
  changeSetId?: string;
57
58
  notice?: Notice;
58
59
  answers?: QuestionAnswerRecord[];
60
+ preview?: BlockPreviewType;
59
61
  isAutoFix?: boolean;
60
62
  requestId?: string;
61
63
  kind?: PermissionKind;
@@ -8,6 +8,7 @@ const STORED_MESSAGE_ROLES = [
8
8
  "notice",
9
9
  "change_set",
10
10
  "question_answer",
11
+ "block_preview",
11
12
  ];
12
13
  const STORED_MESSAGE_STATUSES = ["success", "error"];
13
14
  const STORED_PERMISSION_DECISIONS = ["approved", "denied"];
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AAWA,MAAM,oBAAoB,GAAG;IAC3B,MAAM;IACN,WAAW;IACX,UAAU;IACV,aAAa;IAIb,YAAY;IACZ,OAAO;IAIP,QAAQ;IAER,YAAY;IAEZ,iBAAiB;CACT,CAAC;AAIX,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAM9D,MAAM,2BAA2B,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAmFpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,qBAAqB,GAAiB,cAAc,CAAC,CAAC,CAAC,CAAC;AAUrE,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AAYA,MAAM,oBAAoB,GAAG;IAC3B,MAAM;IACN,WAAW;IACX,UAAU;IACV,aAAa;IAIb,YAAY;IACZ,OAAO;IAIP,QAAQ;IAER,YAAY;IAEZ,iBAAiB;IAEjB,eAAe;CACP,CAAC;AAIX,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAM9D,MAAM,2BAA2B,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAoFpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,qBAAqB,GAAiB,cAAc,CAAC,CAAC,CAAC,CAAC;AAUrE,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;CACf,CAAC"}
@@ -29,7 +29,7 @@
29
29
  "zod": "^4.0.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@antelopejs/tooling-configs": ">=0.0.7 <1.0.0",
32
+ "@antelopejs/tooling-configs": ">=0.0.9 <1.0.0",
33
33
  "@openai/codex": "0.154.0",
34
34
  "@types/node": "^22.19.15",
35
35
  "@types/ws": "^8.5.12",
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: dms-ai
3
+ description: Sets up and troubleshoots @antelopejs/dms-ai, the AI development assistant of the AntelopeJS DMS (chat panel, sidecar running Claude Code or Codex, change sets with undo, audit log and skills pages under /modules/ai). Use when installing or configuring dms-ai (backendUrl, DMS_AI, providers, Codex), when the assistant is offline, or when a module must ship skills to it through antelopeJs.skills.
4
+ icon: i-lucide-sparkles
5
+ category: ai
6
+ tags: [ai, assistant, sidecar, claude-code, codex, skills]
7
+ ---
8
+
9
+ # dms-ai
10
+
11
+ An owner-only development assistant. The backend starts a sidecar (child process, `127.0.0.1` only) that runs the agent in the project folder; the browser reaches it only through the DMS frontend server. User docs: https://dms.antelopejs.com/docs/modules/ai (source: `docs/` of this package).
12
+
13
+ ## Setup
14
+
15
+ - `ajs project modules add @antelopejs/dms-ai`; config `backendUrl: "${@api.API_LOCAL_BASE_URL}"`.
16
+ - Version 0.3+ needs `@antelopejs/dms` 0.9 (`interface-dms` 0.7) and `@antelopejs/dms-frontend` 0.6; 0.2 is the DMS 0.8 line. The frontend server proxies `/ai/**` to the backend with the session (`backendProxies`).
17
+ - Load `@antelopejs/dms-builder` too: chats then default to Safe mode (Builder tools only, typechecked writes). Code mode allows file edits and commands under the approval mode.
18
+ - Claude Code is the default provider. Codex needs `@openai/codex` at the exact version in `peerDependencies` and `OPENAI_API_KEY`; a provider that cannot run fails the turn, never falls back.
19
+
20
+ ## Skills
21
+
22
+ The sidecar loads every directory a loaded module declares in `package.json` `antelopeJs.skills` (and `~/.claude/skills` when Settings allow it). Ship a module's skill as `skills/<name>/SKILL.md` with `name`, `description`, `icon`, `category`, `tags: [a, b]` frontmatter, add `skills` to `files`. Two skills with one name: one is Shadowed.
23
+
24
+ ## Gotchas
25
+
26
+ - Refuses to run with `NODE_ENV=production`; `DMS_AI=0` starts the backend without the sidecar.
27
+ - Offline assistant: Restart on the Overview; lists and settings answer `503` while the sidecar is down.
28
+ - Remote over plain HTTP: start the frontend with `DMS_COOKIE_SECURE=false`.
29
+ - Deleting pages, tables, fields or queries asks in every mode, Full auto included.
30
+ - Undo is limited to the checkpoint retention (7, 30 or 90 days).
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: dms-ai-code-mode
3
+ description: Runs the dms-ai Code-mode loop for changing a DMS page in code while the user watches it in the dashboard overlay, with the ListPages, NavigateToPage, FindPagesUsing, Typecheck and QueryLogs host tools. Use when the dms-ai generation mode is Code and a change touches a rendered page, or when the user allows Code mode after a Builder tool answered opaque_target or unsupported.
4
+ icon: i-ph-code
5
+ category: Builder
6
+ tags: [Pages, CodeMode, DMS]
7
+ ---
8
+
9
+ # Code mode in dms-ai
10
+
11
+ What a page is made of and how to write it belongs to the core skills: **dms-best-practices**
12
+ (blocks described backend-side, custom only for the missing block, `.meta()` on it, design
13
+ fidelity) and **dms-pages** (`PageController`, blocks, the routes that feed them). This skill adds
14
+ what dms-ai changes: its host tools and the live overlay the user is watching. Without the
15
+ `NavigateToPage` tool you are not inside dms-ai, and this skill does not apply.
16
+
17
+ Before writing any custom block, run the path *Before any custom block* of **dms-best-practices**.
18
+
19
+ ## The loop, one page at a time
20
+
21
+ 1. **Map the edit.** Call `FindPagesUsing` on every file you intend to edit to get the pages that
22
+ render it, and group your edits by page.
23
+ 2. **Show the page.** Look its route up with `ListPages` (the `path` field: routes come from the
24
+ category chain and the `/modules` prefix, never from the file name) and call `NavigateToPage`
25
+ with it. Prefer the page the user is on, reported each turn in the host-context block. For a new
26
+ page, register the empty `PageController`, call `ListPages` with `refresh: true`, navigate to
27
+ it, and only then add blocks, so the user watches it fill in.
28
+ 3. **Edit.** The overlay hot-reloads the page and highlights the nodes that changed.
29
+ 4. **Typecheck.** Run `Typecheck` on the module after every source edit and fix every error: a
30
+ non-compiling edit makes the host reload fail and the page 404.
31
+ 5. **Verify.** If the page still looks wrong after the reload, read `QueryLogs`. Then take the
32
+ next page from step 2.
33
+
34
+ The change is done when every impacted page shows it and `Typecheck` reports no error.
35
+
36
+ ## Builder tools in Code mode
37
+
38
+ When `@antelopejs/dms-builder` is loaded, the `Builder*` tools stay available in Code mode.
39
+ Prefer them for what they cover: every operation is atomic and typecheck-gated. For a computed number over a builder-managed resource (a `KpiCard` count or sum),
40
+ `BuilderQueryTemplates` then `BuilderAddQuery` generate the route to pass as `fetchUrl`.
41
+
42
+ The Builder recognizes a query by its shape alone: a scalar route over a resource model calling a
43
+ `this.table…` chain. A hand-written route in that shape becomes editable by the Builder like a
44
+ generated one. To keep a hand-written aggregate out of its reach, compute it outside the chain
45
+ (an intermediate variable or a helper) and it reads back as `opaque`.
46
+
47
+ ## Leave the servers running
48
+
49
+ dms-ai runs inside the DMS backend, so stopping or restarting the dev servers stops the
50
+ assistant. Rely on hot reload; when a change needs a full restart (a new module or dependency, a
51
+ config edit), ask the user to run it.
@@ -12,6 +12,13 @@ In safe mode you act **only through the `Builder*` MCP tools** — raw file edit
12
12
  (`Write`/`Edit`/`Bash`) are blocked. Every op is **atomic and typecheck-gated**: on
13
13
  success it returns the file changes; on `typecheck_failed` **nothing is written**.
14
14
 
15
+ Load the core `dms-best-practices` skill first and follow it: it decides what a
16
+ page is made of (DMS blocks, custom only for a missing block, `.meta()` on custom
17
+ blocks) and runs the design-fidelity protocol when the user brings a mockup. This
18
+ skill only covers driving the Builder tools. Safe mode cannot write a custom block:
19
+ when the path *Before any custom block* of dms-best-practices leads to one, follow
20
+ its safe-mode branch.
21
+
15
22
  ## Addressing
16
23
 
17
24
  - **PageRef** = the page's route, e.g. `/charts/revenue`.
@@ -104,8 +111,8 @@ template catalog, route-bound params, opaque read-back, and the full query workf
104
111
  or doesn't implement the op (`request_failed` with `HTTP 400` = the host answered
105
112
  `unknown_op`). Explain the limitation; don't retry.
106
113
  - `opaque_target` / `unsupported` → **safe mode cannot do this**. Explain the
107
- limitation and ask permission to switch to **Code mode** for that one step; do not
108
- force it. After any Code mode excursion, call `BuilderRefresh` (optionally scoped
114
+ limitation and ask with `AskUser` to switch to **Code mode** for that one step; do
115
+ not force it. After any Code mode excursion, call `BuilderRefresh` (optionally scoped
109
116
  to the page) so the builder's source index reconciles with disk before further
110
117
  safe-mode ops.
111
118
  - `stale` → the page changed under you; re-read with `BuilderPageStructure`, retry.
@@ -1,80 +0,0 @@
1
- ---
2
- name: dms-builder-page
3
- description: Builds or modifies an AntelopeJS DMS admin page (dashboard screen). Use when the user wants to add, edit, or compose an admin page, dashboard, table, form, or chart in a dms-* module.
4
- icon: i-ph-layout
5
- category: Builder
6
- tags: [Pages, Dashboard, DMS]
7
- ---
8
-
9
- # Building an AntelopeJS DMS admin page
10
-
11
- Use this when adding or reshaping an admin page (a dashboard screen) in a DMS
12
- module. A page is a `@RegisterPage()` controller composed of DMS components bound
13
- to backend routes.
14
-
15
- ## Workflow
16
-
17
- 1. **Locate the module.** Pages belong to a module registered with
18
- `RegisterModule({ id, title, description, icon, landingPage })`. Find the existing
19
- `pages/module.ts` and the `pages/all.ts` barrel — every page file must be
20
- re-exported from `all.ts` or it will not load.
21
-
22
- 2. **Declare the page.** Create `pages/<name>/page.ts`:
23
- ```ts
24
- @RegisterPage()
25
- export class MyPage extends PageController(
26
- "<slug>",
27
- { displayName, description, icon, module: "<moduleId>", order: <n> },
28
- DefaultLayout({ fullWidth: true }),
29
- ) {
30
- static content = /* components */;
31
- }
32
- ```
33
- `order` controls sidebar position. Keep one page per file.
34
-
35
- 3. **Compose with shared components, not raw HTML.** Build the screen from the
36
- dms-base components (`KpiCard`, `ChartCard`, `TopListCard`, `TableView`,
37
- `Form`, `PeriodSelector`, `Grid`/`GridRow`). Lay them out with
38
- `Grid({ gap }).child(...)`.
39
-
40
- 4. **Bind to data via `fetchUrl`.** Components fetch from backend routes
41
- (e.g. `fetchUrl: "/<module>/metrics/kpi/actions"`). Each route is a
42
- `Controller` method that returns the payload shape the component expects —
43
- a `KpiCard` reads `{ value: number }`. Add the route alongside the existing
44
- ones and register it in the routes barrel.
45
- To make cards period-aware, declare one `PeriodSelector({ id })` and give each
46
- card `periodScope: <that id>`; the components then append `from`/`to`/
47
- `compareFrom`/`compareTo` query params to `fetchUrl`.
48
-
49
- An aggregate route can live **on the page controller itself**, which is
50
- simpler than a separate controller and inherits the page's auth gate for free:
51
- a `@Get("/stats/…")` method taking `@Model(XModel)` and returning
52
- `{ value: await model.someCount() }`. If the data comes from a builder-managed
53
- resource, prefer generating it — `BuilderAddQuery` emits exactly that shape and
54
- keeps the AQL chain typechecked. The Builder recognizes a query by its shape
55
- alone (a scalar route over a resource model calling a `this.table…` chain), so
56
- a hand-written route matching that grammar is picked up and editable just like
57
- a generated one — there is no marker. To keep a hand-written aggregate off the
58
- Builder's radar, write it **outside** the chain grammar (compute via an
59
- intermediate variable or a helper), and it reads back as `opaque`.
60
-
61
- 5. **Read before you write.** Model new components on the closest existing page
62
- in the same module and copy its option shape exactly — the component option
63
- contracts live in `node_modules/@antelopejs/interface-dms`.
64
-
65
- 6. **Typecheck before declaring done.** Run the `Typecheck` tool on the module
66
- after every source edit and fix every error — a non-compiling edit makes the
67
- host reload fail and the page 404. Use `FindPagesUsing` to map each file you
68
- edit to the pages that render it, and `QueryLogs` if the page still looks
69
- wrong after the reload.
70
-
71
- ## Guardrails
72
-
73
- - Re-export every new page from `pages/all.ts`.
74
- - A page's `module` must match an `id` passed to `RegisterModule`.
75
- - Prefer adding fields to an existing route payload over inventing new routes.
76
- - Before editing a page, make sure the host is displaying it (`NavigateToPage` —
77
- look the route up via `ListPages`, never derive it from the filename) so the
78
- live overlay hot-reloads onto your change while the user watches; for a
79
- brand-new page, register the empty page and navigate to it before composing
80
- content.