@eventmodelers/cli 1.0.140 → 1.0.141
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 +1 -1
- package/shared/skills/learn-eventmodelers-api/SKILL.md +1 -1
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +5 -2
- package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +2 -0
- package/stacks/modeling-kit/templates/kit/CLAUDE.md +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eventmodelers/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.141",
|
|
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": {
|
|
@@ -36,7 +36,7 @@ Write tools take their items as an array (`nodeIds[]`, `elements[]`, `connection
|
|
|
36
36
|
| `get_board_events` | `boardId`, `since?`, `seq?` | A page of at most 300 board events, oldest first, as `{events, pageSize, hasMore}`. Not the whole log: while `hasMore` is true, page on by passing the last event's `seq` as `since`. `seq` returns only the event of exactly that seq | §1 `GET .../events` |
|
|
37
37
|
| `submit_node_events` | `boardId`, `events[]`, `autoConnect?`, `compact?` | Create/update nodes (raw `NodeChangeEvent`/edge events). Every event property is described on the tool's own `events[]` schema — read that rather than this skill when all you need is the event shape. An event needs its own `id` (required — a fresh uuid per event, never the node id) and its `eventType`, plus the keys of its kind (`nodeId`/`meta`/`node`, or `edgeId`/`source`/`target`). The `id` keys the returned `hashes` map and makes a resubmit idempotent — the same event sent twice under one id writes a single board event. Don't send `boardId` or `timestamp` per event — the server takes the board from the call and stamps the time itself, and ignores both if sent. `autoConnect: false` places freshly-created nodes without wiring them to their own/previous-column neighbors (avoids a stray nearest-left edge); `compact: true` returns `{persisted: <count>}` instead of the per-node hash map | §3 `POST .../nodes/events` |
|
|
38
38
|
| `delete_node` | `boardId`, `nodeIds[]` | Delete nodes, applied in order — one failure doesn't stop the rest; answers `{results}`. Deleting a chapter (timeline) cascades — every node placed in one of its cells, plus any node parented to it (e.g. SLICE_BORDER), is deleted too, along with all their edges | (via `node:deleted` event, §3) |
|
|
39
|
-
| `create_drawing` | `boardId`, `drawings[]` (each `kind`, `x`, `y`, `width`, `height`, ...) | Freehand canvas annotation (path/rect/text/sticky) — never placed in a cell. An annotation is rarely one stroke: an arrow plus its label is one call with several `drawings` entries, applied in order, not several calls. **"Hotspot"** means a red feedback note: `kind: "sticky"` with `fill: "#ef4444"` (a sticky with no `fill` renders yellow), `content` = the problem/question, placed right next to the element it concerns | — (REST `POST .../drawing/draw` accepts a single drawing or an array) |
|
|
39
|
+
| `create_drawing` | `boardId`, `drawings[]` (each `kind`, `x`, `y`, `width`, `height`, ...) | Freehand canvas annotation — **never** for a diagram the person asked to "draw/sketch" (that is a chat snippet) (path/rect/text/sticky) — never placed in a cell. An annotation is rarely one stroke: an arrow plus its label is one call with several `drawings` entries, applied in order, not several calls. **"Hotspot"** means a red feedback note: `kind: "sticky"` with `fill: "#ef4444"` (a sticky with no `fill` renders yellow), `content` = the problem/question, placed right next to the element it concerns | — (REST `POST .../drawing/draw` accepts a single drawing or an array) |
|
|
40
40
|
| `create_chapter` | `boardId`, `x?`, `y?`, `title?`, `columns?`, `lanes?: [{type, label?, height?}]` | Create a timeline. Omitting `x`/`y` auto-stacks it below the lowest existing chapter (by its *actual current* row-height total, not the height it was created with — safe even after `add_lane` growth), plus a fixed margin. Pass `title` to name it, `columns` for a known column count, and `lanes` to create named lanes (or several of one type, e.g. one swimlane per context) — none of the three needs a follow-up call, and the lanes are sorted into the required order automatically. The response carries every `columnId` and lane id, so the chapter needn't be read back before placing into it | §2 `POST .../chapters` |
|
|
41
41
|
| `get_chapter_bounds` | `boardId` | Absolute canvas bounding box `{id, title, x, y, width, height}` of every chapter on the board — width/height derived from each chapter's current row/column layout, not a guessed default. Use before picking explicit `x`/`y` for `create_chapter` (e.g. placing below the chapter with the largest `y + height`) to avoid overlapping one that grew since it was created | §2 `GET .../chapters/bounds` |
|
|
42
42
|
| `add_column` | `boardId`, `timelineId`, `index?`, `beforeNodeId?`, `afterNodeId?`, `count?` | Add one or more columns in one call. `count` inserts that many contiguously starting at the insertion point (default 1). Position with at most one of `index` (0-based), `beforeNodeId`, or `afterNodeId` (resolves the index from where that already-placed node currently sits) — omit all three to append | §2 `POST .../timelines/:id/columns` |
|
package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md
CHANGED
|
@@ -71,8 +71,11 @@ transition but not the lifecycle.
|
|
|
71
71
|
- `layout`: `"horizontal"` or `"vertical"` — how the beats are laid out in the storyline editor.
|
|
72
72
|
- Each beat has an `instanceId` (unique per beat, even when the same `refId` repeats — this is what
|
|
73
73
|
lets the *same* element, like the Todos read model above, appear multiple times across the
|
|
74
|
-
walkthrough, once per state) and a `refId` (the board node this beat walks through
|
|
75
|
-
|
|
74
|
+
walkthrough, once per state) and a `refId` (the board node this beat walks through).
|
|
75
|
+
- **Beat order rules** (the same ones the storyline editor enforces): the first beat is a
|
|
76
|
+
READMODEL; after a READMODEL comes an EVENT (or several); after an EVENT comes another EVENT or a
|
|
77
|
+
READMODEL. Beats are only READMODEL or EVENT — no COMMAND, SCREEN or other types. Every `refId`
|
|
78
|
+
must be on the same timeline.
|
|
76
79
|
- `isError` marks a beat as an alternate/error branch off the previous beat.
|
|
77
80
|
- `fields`, `expectEmptyList`, `exampleMode`, `examples` mirror the same fields GWT scenario steps
|
|
78
81
|
use, letting a beat show concrete example data the same way a "then" readmodel step does.
|
|
@@ -196,6 +196,8 @@ Only post questions that are **genuinely unclear or missing** — don't post obs
|
|
|
196
196
|
|
|
197
197
|
### 4.2 Arrows (every relational finding, always)
|
|
198
198
|
|
|
199
|
+
> **Arrows are for relational findings only.** Never use `create_drawing` (stickies, arrows, shapes) to draw a diagram the person asked for ("draw/sketch a UML diagram") — that is a snippet in the chat, not a board change.
|
|
200
|
+
|
|
199
201
|
**Prefer MCP:** `mcp__eventmodelers__create_drawing` — one call per drawing, no auth headers needed.
|
|
200
202
|
|
|
201
203
|
**Fallback (no MCP):** `POST /api/org/{orgId}/boards/{boardId}/drawing/draw` (auth headers same as every other call — `x-token`, `x-user-id: wdyt`). Same fields as the tool args below.
|
|
@@ -309,6 +309,9 @@ for it. Instead:
|
|
|
309
309
|
- a **screen idea** in the conversation ("what could that screen look like?") → `screen`, a sandboxed HTML mock-up in the chat; putting a screen on the board is `/html-screen` work;
|
|
310
310
|
- **where one piece of information comes from and where it is used** → `dataJourney` (the `/data-journey` skill);
|
|
311
311
|
- **who does what with which work object, per chapter** → an `svg` domain story (the `/domain-story` skill);
|
|
312
|
+
- **"draw" / "sketch" / "diagram" something** (a UML diagram, a flow, a class model) → a snippet in the chat (`svg`, or a
|
|
313
|
+
`code` block with Mermaid/PlantUML/ASCII), **never** drawn on the board with stickies, arrows or `create_drawing`.
|
|
314
|
+
Only an explicit request to put it on the board changes that, and then as an image (`/domain-story` § board), not rebuilt from shapes;
|
|
312
315
|
- **rows and columns** — a comparison, a matrix, a short list with a few attributes per item → `table`.
|
|
313
316
|
- anything the customer defined **their own snippet type** for → `custom` with its `ref`: `list_snippet_types`
|
|
314
317
|
shows them with `instructions` on when to use each; prefer a fitting one over a built-in kind. A click on it arrives
|