@eventmodelers/cli 0.0.33 → 0.0.34

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 CHANGED
@@ -1140,19 +1140,25 @@ async function runModeling(kitDir, projectDir) {
1140
1140
 
1141
1141
  // Bare tool names (`→ Bash`, `→ Skill`) tell you nothing happened worth
1142
1142
  // reading — this pulls out the one input field that actually says what the
1143
- // tool did, so the trace is skimmable without the interactive TUI.
1143
+ // tool did, so the trace is skimmable without the interactive TUI. Collapsed
1144
+ // to one line and capped in length — a raw multi-line curl or a long grep
1145
+ // pattern wrapping across the terminal is just as unreadable as no detail at all.
1146
+ const oneLine = (s, max = 100) => {
1147
+ const flat = String(s ?? '').replace(/\s+/g, ' ').trim();
1148
+ return flat.length > max ? `${flat.slice(0, max)}…` : flat;
1149
+ };
1144
1150
  function describeToolUse(block) {
1145
1151
  const input = block.input ?? {};
1146
1152
  switch (block.name) {
1147
- case 'Bash': return `Bash: ${input.command}`;
1148
- case 'Skill': return `Skill: ${input.skill}${input.args ? ` ${input.args}` : ''}`;
1153
+ case 'Bash': return `Bash: ${oneLine(input.command)}`;
1154
+ case 'Skill': return `Skill: ${input.skill}${input.args ? ` ${oneLine(input.args, 60)}` : ''}`;
1149
1155
  case 'Read': return `Read: ${input.file_path}`;
1150
1156
  case 'Edit': return `Edit: ${input.file_path}`;
1151
1157
  case 'Write': return `Write: ${input.file_path}`;
1152
- case 'Grep': return `Grep: ${input.pattern}`;
1158
+ case 'Grep': return `Grep: ${oneLine(input.pattern, 60)}`;
1153
1159
  case 'Glob': return `Glob: ${input.pattern}`;
1154
1160
  case 'WebFetch': return `WebFetch: ${input.url}`;
1155
- case 'Agent': return `Agent: ${input.description ?? input.subagent_type ?? ''}`;
1161
+ case 'Agent': return `Agent: ${oneLine(input.description ?? input.subagent_type ?? '', 60)}`;
1156
1162
  default: return block.name;
1157
1163
  }
1158
1164
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventmodelers/cli",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
4
4
  "description": "Eventmodelers CLI — real-time Claude agent + skills for Claude Code, for any stack (Node, Supabase, Axon, Cratis, or modeling-only)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,7 +21,9 @@ You are a long-lived process handling many turns in a row. Don't redo one-time s
21
21
  **Resolve `CELL_ID`** from this turn's `context.selectedCell.id`, if present and non-null. When present, it overrules any cell reference (e.g. `"A2"`) parsed from the prompt text itself — it reflects the actual cell the user had selected on the canvas when they issued the prompt, and is more reliable than free-text parsing.
22
22
  4. **Mark the prompt as started** — invoke `/update-prompt-status` with this turn's `prompt_id` and `newStatus=IN_PROGRESS`, before doing any of the actual work below. This is what makes the board UI show the prompt as being actively worked on.
23
23
  5. Execute the prompt using the skill matched in `.agent-modeling-kit/CLAUDE.md`'s Skill Selection table, passing the resolved `TIMELINE_ID`, `NODE_ID`, and `CELL_ID` from step 3 as that skill's `timelineId`/node-reference/`cellName` arguments (not the raw `timeline_id`/`node_id` fields, and not a cell reference parsed from the prompt text). For a skill like `/place-element` that accepts a `cellName`, pass the resolved `CELL_ID` as `cellName` whenever it's present — skip parsing the prompt text for a cell reference entirely in that case.
24
- **Questioning rule**: you are running autonomously — no human is available to answer questions. If you need clarification, do not pause or ask interactively — post a `QUESTION`-type comment (`/handle-comment` with `action=place`, `type=QUESTION`) on the most relevant node, then continue with your best interpretation.
24
+ **Questioning rule**: you are running autonomously — no human is available to answer questions. If you need clarification, do not pause or ask interactively — post a `QUESTION`-type comment (`/handle-comment` with `action=place`, `type=QUESTION`) on the most relevant node. Then:
25
+ - If a reasonable default interpretation exists, continue with it.
26
+ - If it doesn't — the prompt is ambiguous enough that any guess risks doing the wrong thing — stop instead of guessing. Skip straight to step 6 and mark the prompt `DONE` with a comment explaining what's unclear and pointing to the `QUESTION` comment you just posted. Never leave a prompt neither progressed nor closed.
25
27
  6. **Mark the prompt as finished** — invoke `/update-prompt-status` with this turn's `prompt_id`, `newStatus=DONE`, and a `comment` that summarizes what you actually did (e.g. "Added the OrderPlaced event and wired it to the read model"). Do this once, right after the work is done — not per skill call within the turn.
26
28
  7. If this turn has a `comment_id` field, invoke `/handle-comment` with `action=resolve`, `nodeId` from the resolved `NODE_ID` (step 3), `commentId` from `comment_id`.
27
29
  8. Append a progress entry to `progress.txt` — see `.agent-modeling-kit/CLAUDE.md`'s Progress Entry Format. Fill in the `Learnings` line with anything reusable noticed this turn (pattern, gotcha, useful context), or "none".