@eventmodelers/cli 2.0.36 → 2.0.38

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.
@@ -13,6 +13,7 @@ import { requestFetch, requestSync } from './stubs/chatSend'
13
13
  import { phaseOf } from './stubs/useApplyStatus'
14
14
  import { RebuildButton } from '@player/RebuildButton'
15
15
  import { usePrototypeRebuild } from '@player/usePrototypeRebuild'
16
+ import { snapshotsKey, useSnapshots } from '@player/snapshots'
16
17
  import '@player/feedback/FeedbackReplay' // registers the replay overlay
17
18
 
18
19
  const SQUARE: React.CSSProperties = { margin: 0, width: 30, height: 30, padding: 0, display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }
@@ -115,6 +116,7 @@ const LocalPlayer: React.FC = () => {
115
116
  const name = (load && 'contextName' in load && load.contextName) || 'Prototype'
116
117
  const reloadRef = useRef<() => void>(() => {})
117
118
  const feedback = usePrototypeFeedback(frame, { timelineId: 'local', title: name, html, boardId: 'local' })
119
+ useSnapshots(frame, snapshotsKey('local', 'local', name), run) // the Event log panel's named snapshots, kept in this browser
118
120
  const agentRebuild = usePrototypeRebuild({ timelineId: 'local', title: name, boardId: 'local', name, onRebuilt: () => reloadRef.current() })
119
121
 
120
122
  const reload = useCallback(() => { setFrameReady(false); setRun(r => r + 1) }, [])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventmodelers/cli",
3
- "version": "2.0.36",
3
+ "version": "2.0.38",
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": {
@@ -93,6 +93,11 @@
93
93
  .em-toast.em-error { background: #b91c1c; }
94
94
  .em-banner { padding: 10px 16px; font: 14px system-ui; color: #fff; background: #b91c1c; }
95
95
  .em-banner pre { margin: 6px 0 0; white-space: pre-wrap; font-size: 12px; }
96
+ .em-note { display: flex; align-items: flex-start; gap: 8px; padding: 4px 12px; font: 12px system-ui; color: #92400e; background: #fffbeb; border-bottom: 1px solid #fde68a; }
97
+ .em-note details { flex: 1; }
98
+ .em-note summary { cursor: pointer; }
99
+ .em-note pre { margin: 4px 0; white-space: pre-wrap; font-size: 11px; color: #451a03; }
100
+ .em-note button { border: 0; background: none; cursor: pointer; font-size: 14px; line-height: 1; color: inherit; }
96
101
  /* Narrow (the small snippet in the chat): the page gets all the room — the event panel is for the wider views. */
97
102
  @media (max-width: 720px) { .em-shell { grid-template-columns: 1fr; } .em-panel { display: none; } }
98
103
  </style>
@@ -780,10 +785,21 @@ globalThis.emMount = () => {
780
785
  }
781
786
  const failed = EMRuntime.runSpecs(EMRuntime.domain).filter((r) => !r.pass);
782
787
  if (failed.length) {
783
- show(
784
- `${failed.length} scenario${failed.length === 1 ? '' : 's'} from the board fail`,
785
- failed.map((r) => `✗ [${r.spec.slice || '-'}] ${r.spec.title}\n ${r.detail}`).join('\n'),
786
- );
788
+ const note = document.createElement('div');
789
+ note.className = 'em-note';
790
+ const det = document.createElement('details');
791
+ const sum = document.createElement('summary');
792
+ sum.textContent = `${failed.length} scenario${failed.length === 1 ? '' : 's'} from the board fail — run /prototype again to regenerate`;
793
+ const pre = document.createElement('pre');
794
+ pre.textContent = failed.map((r) => `✗ [${r.spec.slice || '-'}] ${r.spec.title}\n ${r.detail}`).join('\n');
795
+ det.append(sum, pre);
796
+ const close = document.createElement('button');
797
+ close.type = 'button';
798
+ close.title = 'Dismiss';
799
+ close.textContent = '×';
800
+ close.onclick = () => note.remove();
801
+ note.append(det, close);
802
+ banner.appendChild(note);
787
803
  }
788
804
  emMount();
789
805
  })();