@milehimikey/em 1.7.1 → 1.8.0
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/.claude/skills/event-modeling/SKILL.md +92 -65
- package/.claude/skills/event-modeling/reference/conform.md +45 -20
- package/.claude/skills/event-modeling/reference/em-dsl.md +120 -55
- package/.claude/skills/event-modeling/reference/extract.md +5 -4
- package/.claude/skills/event-modeling/reference/implement.md +34 -22
- package/.claude/skills/event-modeling/templates/model-readme.md +8 -5
- package/.claude/skills/event-modeling/templates/slice.md +19 -5
- package/README.md +6 -4
- package/dist/catalog/docJoin.d.ts +28 -3
- package/dist/catalog/docJoin.js +82 -13
- package/dist/catalog/docJoin.js.map +1 -1
- package/dist/catalog/docModelConsistencyValidate.d.ts +8 -0
- package/dist/catalog/docModelConsistencyValidate.js +335 -0
- package/dist/catalog/docModelConsistencyValidate.js.map +1 -0
- package/dist/catalog/noteBindingValidate.d.ts +8 -0
- package/dist/catalog/noteBindingValidate.js +133 -0
- package/dist/catalog/noteBindingValidate.js.map +1 -0
- package/dist/catalog/pages.js +3 -3
- package/dist/catalog/pages.js.map +1 -1
- package/dist/catalog/sliceDoc.d.ts +14 -0
- package/dist/catalog/sliceDoc.js +22 -0
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.d.ts +18 -0
- package/dist/catalog/sliceReadyValidate.js +25 -1
- package/dist/catalog/sliceReadyValidate.js.map +1 -1
- package/dist/cli/agentsMd.d.ts +15 -0
- package/dist/cli/agentsMd.js +72 -0
- package/dist/cli/agentsMd.js.map +1 -0
- package/dist/cli/conformScope.d.ts +86 -0
- package/dist/cli/conformScope.js +156 -0
- package/dist/cli/conformScope.js.map +1 -0
- package/dist/cli/contract.d.ts +7 -0
- package/dist/cli/contract.js +27 -0
- package/dist/cli/contract.js.map +1 -0
- package/dist/cli/coverage.d.ts +69 -0
- package/dist/cli/coverage.js +157 -0
- package/dist/cli/coverage.js.map +1 -0
- package/dist/cli/markImplemented.d.ts +34 -0
- package/dist/cli/markImplemented.js +180 -0
- package/dist/cli/markImplemented.js.map +1 -0
- package/dist/cli/migrateReactionShape.d.ts +62 -0
- package/dist/cli/migrateReactionShape.js +283 -0
- package/dist/cli/migrateReactionShape.js.map +1 -0
- package/dist/cli/sliceIndex.d.ts +49 -0
- package/dist/cli/sliceIndex.js +115 -0
- package/dist/cli/sliceIndex.js.map +1 -0
- package/dist/cli/sliceNew.d.ts +18 -0
- package/dist/cli/sliceNew.js +53 -0
- package/dist/cli/sliceNew.js.map +1 -0
- package/dist/cli/stateFile.d.ts +74 -0
- package/dist/cli/stateFile.js +191 -0
- package/dist/cli/stateFile.js.map +1 -0
- package/dist/cli.js +535 -43
- package/dist/cli.js.map +1 -1
- package/dist/emit/coverageJson.d.ts +8 -0
- package/dist/emit/coverageJson.js +30 -0
- package/dist/emit/coverageJson.js.map +1 -0
- package/dist/emit/dot.js +41 -10
- package/dist/emit/dot.js.map +1 -1
- package/dist/emit/json.d.ts +72 -4
- package/dist/emit/json.js +73 -4
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/validateJson.d.ts +52 -0
- package/dist/emit/validateJson.js +120 -0
- package/dist/emit/validateJson.js.map +1 -0
- package/dist/mcp/main.d.ts +2 -0
- package/dist/mcp/main.js +20 -0
- package/dist/mcp/main.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.js +260 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/model/model.d.ts +30 -1
- package/dist/model/model.js +26 -0
- package/dist/model/model.js.map +1 -1
- package/dist/model/rules.d.ts +114 -0
- package/dist/model/rules.js +116 -4
- package/dist/model/rules.js.map +1 -1
- package/dist/model/validate.js +83 -7
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +41 -0
- package/dist/parser/lexer.d.ts +16 -0
- package/dist/parser/lexer.js +44 -2
- package/dist/parser/lexer.js.map +1 -1
- package/dist/parser/parser.js +340 -20
- package/dist/parser/parser.js.map +1 -1
- package/dist/render/drawNotes.js +8 -1
- package/dist/render/drawNotes.js.map +1 -1
- package/dist/render/render.js +85 -17
- package/dist/render/render.js.map +1 -1
- package/dist/render/serve.d.ts +4 -0
- package/dist/render/serve.js +23 -227
- package/dist/render/serve.js.map +1 -1
- package/dist/render/sliceStatus.d.ts +1 -1
- package/dist/render/sliceStatus.js +35 -6
- package/dist/render/sliceStatus.js.map +1 -1
- package/dist/render/viewerHtml.d.ts +1 -0
- package/dist/render/viewerHtml.js +5 -0
- package/dist/render/viewerHtml.js.map +1 -0
- package/dist/render/watch.d.ts +10 -0
- package/dist/render/watch.js +29 -0
- package/dist/render/watch.js.map +1 -1
- package/dist/templates.d.ts +19 -0
- package/dist/templates.js +169 -0
- package/dist/templates.js.map +1 -1
- package/dist/util/markers.d.ts +13 -0
- package/dist/util/markers.js +30 -0
- package/dist/util/markers.js.map +1 -0
- package/dist/util/walkDir.d.ts +10 -1
- package/dist/util/walkDir.js +11 -7
- package/dist/util/walkDir.js.map +1 -1
- package/package.json +12 -3
- package/.claude/skills/event-modeling/templates/live.html +0 -105
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<!--
|
|
3
|
-
Live viewer for an em event model. Auto-reloads the rendered SVG so a team on a shared
|
|
4
|
-
screen sees updates from `em watch` without manual refresh.
|
|
5
|
-
|
|
6
|
-
Two ways to use it:
|
|
7
|
-
|
|
8
|
-
A) Push (recommended, instant, no polling):
|
|
9
|
-
em watch MODEL.em -o MODEL.svg --serve
|
|
10
|
-
then open the URL it prints (http://localhost:5173/?svg=MODEL.svg). You don't need
|
|
11
|
-
this file at all in that mode — the server serves its own push-based viewer.
|
|
12
|
-
|
|
13
|
-
B) This file, over file:// (no server):
|
|
14
|
-
1) In one terminal: em watch MODEL.em -o MODEL.svg
|
|
15
|
-
2) Open this file with the SVG name in the query:
|
|
16
|
-
open "live.html?svg=MODEL.svg" (macOS)
|
|
17
|
-
No editing required — the ?svg= param picks the model.
|
|
18
|
-
|
|
19
|
-
Under file:// the browser gives no reliable "did the file change?" signal (fetch/HEAD is
|
|
20
|
-
blocked), so this fallback polls and reloads on a gentle interval. It double-buffers the
|
|
21
|
-
swap so a shared screen never flashes. For zero idle work and instant updates, use --serve.
|
|
22
|
-
|
|
23
|
-
The SVG is embedded via <object> so note "..." links inside it stay clickable.
|
|
24
|
-
-->
|
|
25
|
-
<html lang="en">
|
|
26
|
-
<head>
|
|
27
|
-
<meta charset="utf-8" />
|
|
28
|
-
<title>Event Model — Live</title>
|
|
29
|
-
<style>
|
|
30
|
-
:root { color-scheme: light dark; }
|
|
31
|
-
body { margin: 0; font-family: system-ui, sans-serif; background: #fafafa; }
|
|
32
|
-
header {
|
|
33
|
-
display: flex; align-items: center; gap: .75rem;
|
|
34
|
-
padding: .5rem .9rem; background: #1f2933; color: #fff; font-size: 14px;
|
|
35
|
-
}
|
|
36
|
-
header .dot { width: 9px; height: 9px; border-radius: 50%; background: #34c759; }
|
|
37
|
-
header .stamp { margin-left: auto; opacity: .7; font-variant-numeric: tabular-nums; }
|
|
38
|
-
#stage { padding: 1rem; }
|
|
39
|
-
object { width: 100%; height: calc(100vh - 60px); border: 0; }
|
|
40
|
-
</style>
|
|
41
|
-
</head>
|
|
42
|
-
<body>
|
|
43
|
-
<header>
|
|
44
|
-
<span class="dot"></span>
|
|
45
|
-
<span>Event Model — live (auto-refresh)</span>
|
|
46
|
-
<span class="stamp" id="stamp">—</span>
|
|
47
|
-
</header>
|
|
48
|
-
<div id="stage">
|
|
49
|
-
<object id="svg" type="image/svg+xml"></object>
|
|
50
|
-
</div>
|
|
51
|
-
<script>
|
|
52
|
-
// SVG filename from ?svg=<name>.svg (defaults to model.svg) — one file serves any model.
|
|
53
|
-
const SVG_FILE = new URLSearchParams(location.search).get("svg") || "model.svg";
|
|
54
|
-
// Poll cadence for the file:// fallback. Tune freely; --serve makes polling unnecessary.
|
|
55
|
-
const REFRESH_INTERVAL_MS = 2000;
|
|
56
|
-
|
|
57
|
-
const stage = document.getElementById("stage");
|
|
58
|
-
const stamp = document.getElementById("stamp");
|
|
59
|
-
let current = document.getElementById("svg");
|
|
60
|
-
let lastModified = null;
|
|
61
|
-
|
|
62
|
-
// Best-effort change check — only meaningful when served over http(s). Under file://
|
|
63
|
-
// fetch/HEAD is blocked, so this throws and we fall back to reloading every tick.
|
|
64
|
-
async function changed() {
|
|
65
|
-
if (!location.protocol.startsWith("http")) return true;
|
|
66
|
-
try {
|
|
67
|
-
const res = await fetch(SVG_FILE, { method: "HEAD", cache: "no-store" });
|
|
68
|
-
const tag = res.headers.get("last-modified") || res.headers.get("etag");
|
|
69
|
-
if (tag && tag === lastModified) return false;
|
|
70
|
-
lastModified = tag;
|
|
71
|
-
return true;
|
|
72
|
-
} catch {
|
|
73
|
-
return true; // can't tell — reload to be safe
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Double-buffer: load into a hidden <object>, swap on load, so the shared screen
|
|
78
|
-
// never flashes white during a reload.
|
|
79
|
-
function swap() {
|
|
80
|
-
const next = document.createElement("object");
|
|
81
|
-
next.type = "image/svg+xml";
|
|
82
|
-
next.style.cssText = current.style.cssText;
|
|
83
|
-
next.addEventListener("load", () => {
|
|
84
|
-
stage.replaceChild(next, current);
|
|
85
|
-
current = next;
|
|
86
|
-
stamp.textContent = new Date().toLocaleTimeString();
|
|
87
|
-
}, { once: true });
|
|
88
|
-
next.setAttribute("data", SVG_FILE + "?t=" + Date.now());
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Self-scheduling loop: schedule the next tick only after this one resolves, so a slow
|
|
92
|
-
// reload can never overlap the next tick.
|
|
93
|
-
async function tick() {
|
|
94
|
-
try {
|
|
95
|
-
if (await changed()) swap();
|
|
96
|
-
} finally {
|
|
97
|
-
setTimeout(tick, REFRESH_INTERVAL_MS);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
swap();
|
|
102
|
-
setTimeout(tick, REFRESH_INTERVAL_MS);
|
|
103
|
-
</script>
|
|
104
|
-
</body>
|
|
105
|
-
</html>
|