@echomem/mcp 1.3.2 → 1.4.1

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.
@@ -0,0 +1,37 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Echo Repo City — live</title>
6
+ <style>
7
+ html, body { margin: 0; height: 100%; background: #ffffff; overflow: hidden; }
8
+ iframe { position: fixed; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
9
+ #status { position: fixed; left: 14px; bottom: 12px; color: #9aa3b2; z-index: 9;
10
+ font: 12px/1.4 ui-monospace, "IBM Plex Mono", monospace; opacity: .7;
11
+ letter-spacing: .04em; pointer-events: none; }
12
+ #status b { color: #5b6677; font-weight: 600; }
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <iframe id="f" src="echo-ai-city-only.html"></iframe>
17
+ <div id="status">live · watching <b>echo-ai-city-only.html</b> · auto-reloads on change</div>
18
+ <script>
19
+ const f = document.getElementById("f");
20
+ const s = document.getElementById("status");
21
+ let last = null;
22
+ async function poll() {
23
+ try {
24
+ const r = await fetch("echo-ai-city-only.html", { method: "HEAD", cache: "no-store" });
25
+ const lm = r.headers.get("last-modified");
26
+ if (last && lm !== last) {
27
+ f.src = "echo-ai-city-only.html?" + Date.now();
28
+ s.innerHTML = "live · updated <b>" + new Date().toLocaleTimeString() + "</b>";
29
+ }
30
+ last = lm;
31
+ } catch (e) {}
32
+ }
33
+ setInterval(poll, 1000);
34
+ poll();
35
+ </script>
36
+ </body>
37
+ </html>
@@ -0,0 +1,45 @@
1
+ import http from "node:http";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+
5
+ const root = path.resolve("artifacts");
6
+ const PORT = 8787;
7
+ const types = {
8
+ ".html": "text/html; charset=utf-8",
9
+ ".png": "image/png",
10
+ ".json": "application/json",
11
+ ".css": "text/css",
12
+ ".js": "text/javascript",
13
+ ".svg": "image/svg+xml",
14
+ ".wasm": "application/wasm",
15
+ ".riv": "application/octet-stream",
16
+ };
17
+
18
+ http
19
+ .createServer((req, res) => {
20
+ let p = decodeURIComponent(req.url.split("?")[0]);
21
+ if (p === "/") p = "/_live.html";
22
+ const f = path.join(root, p);
23
+ if (!f.startsWith(root)) {
24
+ res.writeHead(403);
25
+ return res.end();
26
+ }
27
+ fs.stat(f, (err, st) => {
28
+ if (err || !st.isFile()) {
29
+ res.writeHead(404);
30
+ return res.end("not found");
31
+ }
32
+ const headers = {
33
+ "Last-Modified": st.mtime.toUTCString(),
34
+ "Cache-Control": "no-store",
35
+ };
36
+ if (req.method === "HEAD") {
37
+ res.writeHead(200, headers);
38
+ return res.end();
39
+ }
40
+ headers["Content-Type"] = types[path.extname(f)] || "application/octet-stream";
41
+ res.writeHead(200, headers);
42
+ fs.createReadStream(f).pipe(res);
43
+ });
44
+ })
45
+ .listen(PORT, () => console.log(`serving ${root} on http://localhost:${PORT}`));
@@ -0,0 +1,15 @@
1
+ {
2
+ "_note": "Frozen snapshot for the Repo City share card (Kobe). Only the keys generate-echo-city-only.mjs actually renders remain — dead fields were pruned in the Carmack cleanup. For multi-user / the setup flow these must be DERIVED from buildForensicReport(), not frozen — see docs/repo-city-setup-integration-plan.md.",
3
+ "computeCost": "$13,689",
4
+ "attentionHours": 191.1,
5
+ "split": { "codexPct": 26, "claudePct": 74 },
6
+ "dirty": { "pct": "85.0" },
7
+ "persona": {
8
+ "primary": "bossy",
9
+ "rank": "the architect",
10
+ "rhythm": "marathoner",
11
+ "sides": ["loopy", "lusty", "maxxy"],
12
+ "verdict": "you don't write code, you run a daycare for <b>163</b> sleepless interns who reread the same file into amnesia and bill every typo to Opus — <b>$13,689</b> later, you wanted a helper and became a dad. 🗿"
13
+ },
14
+ "counterfactual": { "reachDate": "Jun 2", "insteadOf": "Jun 20", "daysEarlier": 18 }
15
+ }
@@ -0,0 +1,248 @@
1
+ {
2
+ "globals": {
3
+ "totalTokens": 7559773827,
4
+ "sessions": 170,
5
+ "repoCount": 21,
6
+ "activeDays": 55,
7
+ "codexTokens": 1935230820,
8
+ "claudeTokens": 5624543007,
9
+ "codexSharePct": 26,
10
+ "claudeSharePct": 74,
11
+ "cleanlinessScore": 15,
12
+ "staleReadSharePct": 85,
13
+ "costTotal": 13907.29
14
+ },
15
+ "repos": [
16
+ {
17
+ "name": "WebPageReactVersion",
18
+ "sessions": 74,
19
+ "tokens": 3436946364,
20
+ "attentionHours": 92.8,
21
+ "reads": 6411,
22
+ "staleRereads": 5426,
23
+ "codexPct": 31,
24
+ "claudePct": 69,
25
+ "dirtyPct": 85
26
+ },
27
+ {
28
+ "name": "EchoMem-Chrome",
29
+ "sessions": 38,
30
+ "tokens": 2863590896,
31
+ "attentionHours": 67.2,
32
+ "reads": 3375,
33
+ "staleRereads": 2632,
34
+ "codexPct": 19,
35
+ "claudePct": 81,
36
+ "dirtyPct": 78
37
+ },
38
+ {
39
+ "name": "echo-design-system",
40
+ "sessions": 29,
41
+ "tokens": 382642012,
42
+ "attentionHours": 21.2,
43
+ "reads": 814,
44
+ "staleRereads": 728,
45
+ "codexPct": 44,
46
+ "claudePct": 56,
47
+ "dirtyPct": 89
48
+ },
49
+ {
50
+ "name": "Kobe Life",
51
+ "sessions": 12,
52
+ "tokens": 122566296,
53
+ "attentionHours": 9.6,
54
+ "reads": 158,
55
+ "staleRereads": 125,
56
+ "codexPct": 100,
57
+ "claudePct": 0,
58
+ "dirtyPct": 79
59
+ },
60
+ {
61
+ "name": "DG-Web",
62
+ "sessions": 4,
63
+ "tokens": 253239297,
64
+ "attentionHours": 6.8,
65
+ "reads": 57,
66
+ "staleRereads": 15,
67
+ "codexPct": 0,
68
+ "claudePct": 100,
69
+ "dirtyPct": 26
70
+ },
71
+ {
72
+ "name": "sleepy-merkle-3d0470",
73
+ "sessions": 1,
74
+ "tokens": 307339018,
75
+ "attentionHours": 3.8,
76
+ "reads": 75,
77
+ "staleRereads": 23,
78
+ "codexPct": 0,
79
+ "claudePct": 100,
80
+ "dirtyPct": 31
81
+ },
82
+ {
83
+ "name": "public",
84
+ "sessions": 1,
85
+ "tokens": 102828178,
86
+ "attentionHours": 1.9,
87
+ "reads": 7,
88
+ "staleRereads": 3,
89
+ "codexPct": 0,
90
+ "claudePct": 100,
91
+ "dirtyPct": 43
92
+ },
93
+ {
94
+ "name": "EchoMemory_log",
95
+ "sessions": 8,
96
+ "tokens": 43937440,
97
+ "attentionHours": 1.8,
98
+ "reads": 349,
99
+ "staleRereads": 289,
100
+ "codexPct": 63,
101
+ "claudePct": 37,
102
+ "dirtyPct": 83
103
+ },
104
+ {
105
+ "name": "Daimler Engineering.",
106
+ "sessions": 2,
107
+ "tokens": 4439902,
108
+ "attentionHours": 0.2,
109
+ "reads": 13,
110
+ "staleRereads": 5,
111
+ "codexPct": 100,
112
+ "claudePct": 0,
113
+ "dirtyPct": 38
114
+ },
115
+ {
116
+ "name": "brands",
117
+ "sessions": 1,
118
+ "tokens": 8010799,
119
+ "attentionHours": 0.1,
120
+ "reads": 3,
121
+ "staleRereads": 0,
122
+ "codexPct": 0,
123
+ "claudePct": 100,
124
+ "dirtyPct": 0
125
+ },
126
+ {
127
+ "name": "remote",
128
+ "sessions": 2,
129
+ "tokens": 1357359,
130
+ "attentionHours": 0.1,
131
+ "reads": 3,
132
+ "staleRereads": 0,
133
+ "codexPct": 0,
134
+ "claudePct": 100,
135
+ "dirtyPct": 0
136
+ },
137
+ {
138
+ "name": "production-prompt",
139
+ "sessions": 1,
140
+ "tokens": 11092185,
141
+ "attentionHours": 0,
142
+ "reads": 0,
143
+ "staleRereads": 0,
144
+ "codexPct": 0,
145
+ "claudePct": 100,
146
+ "dirtyPct": 0
147
+ },
148
+ {
149
+ "name": "components",
150
+ "sessions": 1,
151
+ "tokens": 7978639,
152
+ "attentionHours": 0,
153
+ "reads": 2,
154
+ "staleRereads": 0,
155
+ "codexPct": 0,
156
+ "claudePct": 100,
157
+ "dirtyPct": 0
158
+ },
159
+ {
160
+ "name": "dist",
161
+ "sessions": 2,
162
+ "tokens": 4550877,
163
+ "attentionHours": 0,
164
+ "reads": 0,
165
+ "staleRereads": 0,
166
+ "codexPct": 0,
167
+ "claudePct": 100,
168
+ "dirtyPct": 0
169
+ },
170
+ {
171
+ "name": "assets",
172
+ "sessions": 1,
173
+ "tokens": 3490780,
174
+ "attentionHours": 0,
175
+ "reads": 0,
176
+ "staleRereads": 0,
177
+ "codexPct": 0,
178
+ "claudePct": 100,
179
+ "dirtyPct": 0
180
+ },
181
+ {
182
+ "name": "src",
183
+ "sessions": 1,
184
+ "tokens": 2594990,
185
+ "attentionHours": 0,
186
+ "reads": 1,
187
+ "staleRereads": 0,
188
+ "codexPct": 0,
189
+ "claudePct": 100,
190
+ "dirtyPct": 0
191
+ },
192
+ {
193
+ "name": "styles",
194
+ "sessions": 1,
195
+ "tokens": 1587154,
196
+ "attentionHours": 0,
197
+ "reads": 0,
198
+ "staleRereads": 0,
199
+ "codexPct": 0,
200
+ "claudePct": 100,
201
+ "dirtyPct": 0
202
+ },
203
+ {
204
+ "name": "memory_log_ui",
205
+ "sessions": 1,
206
+ "tokens": 1220676,
207
+ "attentionHours": 0,
208
+ "reads": 0,
209
+ "staleRereads": 0,
210
+ "codexPct": 0,
211
+ "claudePct": 100,
212
+ "dirtyPct": 0
213
+ },
214
+ {
215
+ "name": "Atlas",
216
+ "sessions": 1,
217
+ "tokens": 197129,
218
+ "attentionHours": 0,
219
+ "reads": 0,
220
+ "staleRereads": 0,
221
+ "codexPct": 100,
222
+ "claudePct": 0,
223
+ "dirtyPct": 0
224
+ },
225
+ {
226
+ "name": "EchoMemory-Cloud-OpenClaw-Plugin",
227
+ "sessions": 2,
228
+ "tokens": 163836,
229
+ "attentionHours": 0,
230
+ "reads": 0,
231
+ "staleRereads": 0,
232
+ "codexPct": 100,
233
+ "claudePct": 0,
234
+ "dirtyPct": 0
235
+ },
236
+ {
237
+ "name": "kobe",
238
+ "sessions": 1,
239
+ "tokens": 0,
240
+ "attentionHours": 0,
241
+ "reads": 0,
242
+ "staleRereads": 0,
243
+ "codexPct": 0,
244
+ "claudePct": 0,
245
+ "dirtyPct": 0
246
+ }
247
+ ]
248
+ }