@eventmodelers/cli 1.0.128 → 1.0.129
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eventmodelers/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.129",
|
|
4
4
|
"description": "Eventmodelers CLI — real-time Claude agent + skills for Claude Code, for any stack (Node, Supabase, Axon, OpenCQRS, UmaDB, Kurrent, or modeling-only)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -1152,7 +1152,8 @@ Rule of thumb: if you are about to write "Shall I…?", "Want me to…?", "A or
|
|
|
1152
1152
|
nodeId?: string, // the slice's SLICE_BORDER — drawn in its lanes, selecting the step zooms to it; none for a new slice
|
|
1153
1153
|
status?: 'existing' | 'changed' | 'new', // planned feature: used as is / needs adjustment / built from scratch
|
|
1154
1154
|
elements?: Array<{ type: 'SCREEN' | 'COMMAND' | 'EVENT' | 'READMODEL' | 'AUTOMATION',
|
|
1155
|
-
title: string, fields?: string[]
|
|
1155
|
+
title: string, fields?: string[],
|
|
1156
|
+
html?: string }>, // a new slice only: its sketch, drawn in lanes; html = the SCREEN as a small HTML page (≤ 16000 chars)
|
|
1156
1157
|
screenId?: string, // a SCREEN / HTML_SCREEN outside the slice the person sees in this step
|
|
1157
1158
|
rules?: string[], // business rules of this slice
|
|
1158
1159
|
changes?: string[] }> } // planned feature: what has to change or be built here
|
|
@@ -1166,7 +1167,7 @@ Rule of thumb: if you are about to write "Shall I…?", "Want me to…?", "A or
|
|
|
1166
1167
|
- **Answers are text.** For a `tasks` answer, match the titles (or ids) back to your list; an element the person left unticked was declined, not forgotten. A `poll` option with a `message` of your own makes the answer unambiguous.
|
|
1167
1168
|
- `get_chat_session` shows your snippet on the message as `snippet`, and the person's answer is the user message after it, carrying `context.snippetReply.messageId` (your message's id) — useful to tell an answer to a snippet from a new message.
|
|
1168
1169
|
- **`report`** draws the numbers you send — it computes nothing, so aggregate first. A series whose length differs from `labels`, or a non-number, makes the whole snippet invisible. Keep `text` as a one-line summary of what the diagram shows. Add `confirm` when the diagram leads to a follow-up question ("Want me to look into the backward arrows?"): the answer comes back like a `confirm` answer, and without it the report is display only.
|
|
1169
|
-
- **`walkthrough`** answers "how does X work?" and "walk me through what changes for Y", **one step per slice**. It opens with a summary page — the slice count (with `status`: how many exist, need adjustment, are new) above your `summary` — then shows each slice in its lanes like Slice View (screen, command / read model, events), a `new` slice sketched from its `elements
|
|
1170
|
+
- **`walkthrough`** answers "how does X work?" and "walk me through what changes for Y", **one step per slice**. It opens with a summary page — the slice count (with `status`: how many exist, need adjustment, are new) above your `summary` — then shows each slice in its lanes like Slice View (screen, command / read model, events), a `new` slice sketched from its `elements` (its SCREEN rendered from the `html` you write: a real, simple page — a form, a list, a table — with inline styles only; scripts and external resources are blocked; without `html` a plain form/table is generated from the fields); each step zooms the canvas to its slice, and **Play** opens it full-screen with description, changes and rules underneath. Build it from the board, never from memory — the `walkthrough` skill (modeling kit) has the procedure. Every `nodeId`/`screenId` must be a real id from this board. Keep `text` to one line naming the feature and the number of slices.
|
|
1170
1171
|
- A snippet is shown exactly as you send it — keep secrets and tokens out of `code` and `image`.
|
|
1171
1172
|
|
|
1172
1173
|
---
|
|
@@ -107,11 +107,13 @@ Per step:
|
|
|
107
107
|
| `description` | 1–3 sentences: what happens in this slice and why it matters, in the board's language. No ids, no cell addresses. |
|
|
108
108
|
| `nodeId` | the slice's `SLICE_BORDER` id from `list_slices` — the player draws the slice from it and zooms the canvas to it. Left out for a `new` slice |
|
|
109
109
|
| `status` | **impact mode: required on every step** — `existing`, `changed` or `new` (table above). Omitted in explain mode |
|
|
110
|
-
| `elements` | **`new` slices only**: the sketch — `[{ "type": "SCREEN" \| "COMMAND" \| "EVENT" \| "READMODEL" \| "AUTOMATION", "title": "…", "fields": ["…"] }]`, the elements the slice will have (a state change: screen → command → event; a state view: event(s) → read model → screen; an automation: read model → automation → command → event). Titles and fields in the board's style; reuse the names of existing events the slice reads from |
|
|
110
|
+
| `elements` | **`new` slices only**: the sketch — `[{ "type": "SCREEN" \| "COMMAND" \| "EVENT" \| "READMODEL" \| "AUTOMATION", "title": "…", "fields": ["…"] }]`, the elements the slice will have (a state change: screen → command → event; a state view: event(s) → read model → screen; an automation: read model → automation → command → event). Titles and fields in the board's style; reuse the names of existing events the slice reads from. **Give the SCREEN an `html`** — see *Screen HTML* below |
|
|
111
111
|
| `screenId` | only when the screen a person sees in this step is not part of the slice itself |
|
|
112
112
|
| `rules` | the business rules of this slice, taken from its scenarios (and the context note); one line each, thresholds verbatim. Empty when there are none — never invent one |
|
|
113
113
|
| `changes` | **impact mode only**: what has to change or be built in this slice, one line each — "add field `email` (String) to Register Customer", "new scenario: duplicate email is rejected" |
|
|
114
114
|
|
|
115
|
+
**Screen HTML.** A new slice's SCREEN is shown as a real screen, so write it: `html` is a small HTML page of what the person sees there — a form for a state change (an input per command field, labelled in business words, a button named after the command), a list or table for a state view (columns from the read model's fields, 2–3 rows of plausible example data), whatever fits the screen otherwise (a checklist, a confirmation page). Keep it rough and simple: a heading and the content, no navigation, header or footer. Body content only (no `<html>`/`<head>` needed), inline `style` attributes or one `<style>` block, at most 16000 characters. It renders sandboxed: scripts, external images, fonts and stylesheets are blocked, so no `<script>`, no CDN, no `https://` images. Without `html` the player generates a plain form/table from the fields.
|
|
116
|
+
|
|
115
117
|
**Faithfulness.** Existing slices come from the board. A rule nobody modelled is not a rule — if the walkthrough reveals a gap ("nothing says what happens when confirmation never arrives"), mention it in the step's `description` as an open question, not as a rule. A sketched new slice is a proposal, and the `description` should read like one.
|
|
116
118
|
|
|
117
119
|
---
|
|
@@ -152,7 +154,8 @@ Impact mode, same shape with `status` (and `changes`, or `elements` for a new sl
|
|
|
152
154
|
{ "title": "Confirm Email", "status": "new",
|
|
153
155
|
"description": "Proposed: the customer opens the link and the email is marked as confirmed.",
|
|
154
156
|
"elements": [
|
|
155
|
-
{ "type": "SCREEN", "title": "Confirm Email Page"
|
|
157
|
+
{ "type": "SCREEN", "title": "Confirm Email Page",
|
|
158
|
+
"html": "<h3>Confirm your email</h3><p>We sent a link to <b>jane@example.com</b>.</p><label>Code<br><input value=\"8F3K-21\"></label><br><br><button>Confirm Email</button>" },
|
|
156
159
|
{ "type": "COMMAND", "title": "Confirm Email", "fields": ["customerId", "token"] },
|
|
157
160
|
{ "type": "EVENT", "title": "Email Confirmed", "fields": ["customerId", "confirmedAt"] }
|
|
158
161
|
],
|
|
@@ -163,7 +166,7 @@ Impact mode, same shape with `status` (and `changes`, or `elements` for a new sl
|
|
|
163
166
|
```
|
|
164
167
|
|
|
165
168
|
- `text` is one line: the subject and the number of slices — in impact mode with the split ("Startup license in 8 slices: 3 new, 2 to adjust"). It is the fallback, so it must make sense alone.
|
|
166
|
-
- Impact mode: before posting, check that every step has a `status`, every `changed` step has `changes` and every `new` step has `elements` and no `nodeId`.
|
|
169
|
+
- Impact mode: before posting, check that every step has a `status`, every `changed` step has `changes` and every `new` step has `elements` (its SCREEN with `html`) and no `nodeId`.
|
|
167
170
|
- `summary` is always there — the first page shows it under the slice count.
|
|
168
171
|
- Every `nodeId` / `screenId` is an id you read in Steps 2–3 — never a guessed or remembered one. A `new` slice has no `nodeId`.
|
|
169
172
|
- The snippet is at most 64 KB; keep descriptions short rather than dropping steps.
|