@eventmodelers/cli 1.0.80 → 1.0.84
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/cli.js +2 -2
- package/package.json +1 -1
- package/shared/skills/connect/SKILL.md +6 -4
- package/shared/skills/learn-eventmodelers-api/SKILL.md +24 -21
- package/shared/skills/request-feedback/SKILL.md +0 -2
- package/shared/skills/update-slice-status/SKILL.md +0 -2
- package/stacks/modeling-kit/templates/.claude/skills/attributes/SKILL.md +2 -2
- package/stacks/modeling-kit/templates/.claude/skills/attributes/references/api-fallback.md +1 -3
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/SKILL.md +19 -17
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/references/api-fallback.md +0 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +0 -4
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/api-fallback.md +0 -4
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-automation-chains/SKILL.md +9 -8
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-automation-chains/references/api-fallback.md +0 -1
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/SKILL.md +9 -9
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/references/api-fallback.md +0 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md +10 -9
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/references/api-fallback.md +0 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +14 -13
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/api-fallback.md +4 -4
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/SKILL.md +2 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/examples.md +2 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md +11 -11
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/references/api-fallback.md +0 -2
- package/stacks/modeling-kit/templates/.claude/skills/examples/SKILL.md +1 -3
- package/stacks/modeling-kit/templates/.claude/skills/examples/references/api-fallback.md +1 -3
- package/stacks/modeling-kit/templates/.claude/skills/handle-comment/SKILL.md +2 -2
- package/stacks/modeling-kit/templates/.claude/skills/html-screen/SKILL.md +8 -8
- package/stacks/modeling-kit/templates/.claude/skills/html-screen/references/api-fallback.md +0 -1
- package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +31 -26
- package/stacks/modeling-kit/templates/.claude/skills/place-element/references/api-fallback.md +5 -9
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/SKILL.md +18 -15
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/references/api-fallback.md +0 -1
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/SKILL.md +0 -1
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/references/api-fallback.md +0 -1
- package/stacks/modeling-kit/templates/.claude/skills/timeline/SKILL.md +4 -8
- package/stacks/modeling-kit/templates/.claude/skills/timeline/references/api-fallback.md +1 -7
- package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +19 -7
- package/stacks/modeling-kit/templates/kit/AGENTS.md +2 -1
- package/stacks/modeling-kit/templates/kit/CLAUDE.md +1 -1
|
@@ -48,8 +48,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
|
|
|
48
48
|
"id": "<event-uuid>",
|
|
49
49
|
"eventType": "node:created",
|
|
50
50
|
"nodeId": "<node-uuid>",
|
|
51
|
-
"boardId": "<BOARD_ID>",
|
|
52
|
-
"timestamp": <Date.now()>,
|
|
53
51
|
"chapterId": "<CHAPTER_ID>",
|
|
54
52
|
"cellId": "<CELL_ID>",
|
|
55
53
|
"meta": { "type": "EVENT", "title": "<EventName>" },
|
|
@@ -67,8 +65,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
|
|
|
67
65
|
"id": "<new-uuid>",
|
|
68
66
|
"eventType": "node:changed",
|
|
69
67
|
"nodeId": "<eventNodeId>",
|
|
70
|
-
"boardId": "<BOARD_ID>",
|
|
71
|
-
"timestamp": <Date.now()>,
|
|
72
68
|
"changedAttributes": ["meta.title"],
|
|
73
69
|
"meta": { "type": "EVENT", "title": "<NewTitle>" },
|
|
74
70
|
"node": { "id": "<eventNodeId>", "data": {} }
|
|
@@ -84,8 +80,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
|
|
|
84
80
|
-d '[{
|
|
85
81
|
"id": "<new-uuid>",
|
|
86
82
|
"eventType": "node:deleted",
|
|
87
|
-
"nodeId": "<eventNodeId>"
|
|
88
|
-
"boardId": "<BOARD_ID>",
|
|
89
|
-
"timestamp": <Date.now()>
|
|
83
|
+
"nodeId": "<eventNodeId>"
|
|
90
84
|
}]'
|
|
91
85
|
```
|
|
@@ -138,7 +138,7 @@ Use the `handle-comment` skill with `action=place` to post each comment. Pass:
|
|
|
138
138
|
- `type` — `COMMENT` (there is no separate question type — the text itself carries the question)
|
|
139
139
|
- `author` — `wdyt`
|
|
140
140
|
|
|
141
|
-
Post them together, not one at a time: `handle-comment` sends every comment of a run in a single batch request (`
|
|
141
|
+
Post them together, not one at a time: `handle-comment` sends every comment of a run in a single batch request (one `add_comment` call over MCP, `POST .../boards/:boardId/comments` over REST).
|
|
142
142
|
|
|
143
143
|
Only post questions that are **genuinely unclear or missing** — don't post observations that are clearly intentional design decisions.
|
|
144
144
|
|
|
@@ -153,18 +153,30 @@ There are two kinds — no text-callout kind; a drawing never carries the questi
|
|
|
153
153
|
- **Arrow** (`kind: "path"`, `arrowEnd: true`) — the concern is about a missing or unclear relationship *between two elements* (e.g. "does this event actually reach this automation?"). Draw a straight line from one element's position to the other's. `path` is `M 0 0 L <dx> <dy>` in the box's own local coordinates; `x`/`y`/`width`/`height` describe that box in canvas space (so `width`/`height` = the delta between the two elements' positions).
|
|
154
154
|
```
|
|
155
155
|
mcp__eventmodelers__create_drawing {
|
|
156
|
-
"boardId": "$BOARD_ID",
|
|
157
|
-
"
|
|
158
|
-
|
|
156
|
+
"boardId": "$BOARD_ID",
|
|
157
|
+
"drawings": [{
|
|
158
|
+
"kind": "path",
|
|
159
|
+
"x": <sourceX>,
|
|
160
|
+
"y": <sourceY>,
|
|
161
|
+
"width": <dx>,
|
|
162
|
+
"height": <dy>,
|
|
163
|
+
"path": "M 0 0 L <dx> <dy>",
|
|
164
|
+
"arrowEnd": true
|
|
165
|
+
}]
|
|
159
166
|
}
|
|
160
167
|
```
|
|
161
168
|
Get element positions from the slice data already loaded in Step 2. If a position is missing, fetch the nodes you need in **one** call — `mcp__eventmodelers__get_nodes { "boardId": "$BOARD_ID", "nodeIds": [<the ids>] }` — not `get_node` per element.
|
|
162
169
|
- **Group loop** (`kind: "rect"`, drawn around a computed bounding box) — the concern spans a *cluster* of elements together (e.g. "this whole flow assumes nothing ever fails"). There's no dedicated group endpoint — union the elements' own `x`/`y`/`width`/`height` (plus some padding) yourself and draw one `rect` around that box:
|
|
163
170
|
```
|
|
164
171
|
mcp__eventmodelers__create_drawing {
|
|
165
|
-
"boardId": "$BOARD_ID",
|
|
166
|
-
"
|
|
167
|
-
|
|
172
|
+
"boardId": "$BOARD_ID",
|
|
173
|
+
"drawings": [{
|
|
174
|
+
"kind": "rect",
|
|
175
|
+
"x": <minX - pad>,
|
|
176
|
+
"y": <minY - pad>,
|
|
177
|
+
"width": <maxX - minX + 2*pad>,
|
|
178
|
+
"height": <maxY - minY + 2*pad>
|
|
179
|
+
}]
|
|
168
180
|
}
|
|
169
181
|
```
|
|
170
182
|
This is a visual grouping only — unrelated to the `MODEL_CONTEXT` node type; never touch a `modelContext` field to satisfy this.
|
|
@@ -14,9 +14,10 @@ ones in a compressed, reusable form; only add if not already covered here.
|
|
|
14
14
|
- `/update-slice-status` rejects moving a slice into a status it's already in — this is a concurrency guard so two agents can't both claim the same slice. Treat this as `ALREADY_IN_STATUS`, not a task failure: drop the prompt, move on to the next task, and do not retry the same update.
|
|
15
15
|
- macOS/BSD `date` silently ignores GNU-only format specifiers like `%N`/`%3N` (sub-second precision) instead of erroring — it prints the literal characters, producing a malformed timestamp that only fails downstream. Don't shell out to `date` for sub-second precision; use `$(( $(date +%s) * 1000 ))` for whole-second-in-ms, or a runtime call (`Date.now()`, `process.hrtime()`) instead.
|
|
16
16
|
- Before retrying a failed shell command a second time, diagnose why it failed (e.g. a GNU/BSD flag mismatch) rather than re-running it unchanged — repeating the same command produces the same failure and just burns retries.
|
|
17
|
+
- A cell address (`B2`, `AE6`) is always read, never computed: `get_board_outline`, `get_nodes` and `get_node` each report a node's `cellName`. An address inferred from a column letter plus a node's place in a list is a guess, and a guess that happens to name an occupied cell is accepted silently by every cell-addressed tool.
|
|
17
18
|
- Orientation and working set are two different reads, in that order: `get_board_outline` (or `get_nodes` with `projection: "line"`) answers *where is the work*, and only then does one full-`meta` `get_nodes`, scoped by `chapterId`/`nodeIds`, cover the nodes actually being touched. Opening with an unscoped full-`meta` read pulls every field body and rendered HTML page on the board to answer the cheapest question of the turn.
|
|
18
19
|
- Both reads are once per turn. A chapter's outline and grid don't move unless something writes to them, so re-read only after a structural write. Three `get_board_outline` calls in one turn means the first two were thrown away.
|
|
19
|
-
- Mint ids
|
|
20
|
+
- Mint ids once per turn, in one shell: `for i in $(seq <n>); do uuidgen; done` — one per new node, plus one per event, since every event needs its own fresh `id` (required; not the node id). Nothing in it depends on anything being read, so splitting it across several calls buys round trips for nothing. Never mint a per-event `boardId` or `timestamp` — both are server-derived and ignored if sent.
|
|
20
21
|
- A subagent is a fresh session: it gets `token=`/`org=`/`baseUrl=`/`board=` inline as already-resolved values (which satisfies `connect` at its Step 0 — tell it not to invoke `/connect`) plus the board state already read for it, inline. Handed bare node ids instead, it has exactly one way to recover the rest — re-reading the whole board, once per agent.
|
|
21
22
|
- Dispatch executor agents with `model:` set to the session header's `subagent_model` (default `sonnet`). The judging happened before the dispatch, on this session's model; what's left is execution against a written brief. Keep an agent on the session model only where its piece re-derives modeling structure (a chain's shape, a slice boundary).
|
|
22
23
|
- Only slices in status `Created` may be modified. `get_nodes` returns `sliceStatus` per node and `get_board_outline` per column, so the board read at `/connect` Step 5 already answers it — absent means the element is in no slice (writable), not locked. Never spend a `list_slices`/`get_slice_data` call just to check whether you may write.
|
|
@@ -96,7 +96,7 @@ stale. Then a single full-`meta` `get_nodes`, scoped by
|
|
|
96
96
|
`chapterId` or `nodeIds`, covering the nodes you concluded you will touch. Both tiers are once per turn: keep what
|
|
97
97
|
came back and answer later questions from it instead of re-fetching a chapter you already hold. `/connect` Step 5
|
|
98
98
|
carries the full discipline — the two tiers, the one-call `submit_node_events` rule for writes, and the per-turn
|
|
99
|
-
pool for the ids
|
|
99
|
+
pool for the ids a `node:created` needs (one for the node, one for the event itself). Whatever you hand a subagent comes out of that same read,
|
|
100
100
|
never out of a second one it pays for itself (step 2).
|
|
101
101
|
|
|
102
102
|
**Every prompt gets exactly two `/update-prompt-status` calls per turn — never zero, never one.** `IN_PROGRESS` before you start the work (step 4), `DONE` after you finish it (step 6). This holds even for a prompt that turns out to be trivial or a no-op — the board UI has no other way to know the agent picked it up and finished it.
|