@echomem/mcp 1.4.9 → 1.4.10

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.
Files changed (48) hide show
  1. package/assets/hud/github.svg +1 -0
  2. package/dist/city/README.md +9 -0
  3. package/dist/city/echo-ai-city-only.html +54 -93
  4. package/dist/context-analysis/claude-canonical-adapter.js +315 -0
  5. package/dist/context-analysis/claude-native-canonical.js +35 -12
  6. package/dist/context-metrics/calculate.js +2 -15
  7. package/dist/context-metrics/estimator.js +45 -0
  8. package/dist/context-metrics/ledger.js +507 -0
  9. package/dist/context-metrics/parse-claude.js +227 -0
  10. package/dist/context-metrics/parse-codex.js +276 -0
  11. package/dist/hud/adapters.js +69 -198
  12. package/dist/hud/cli.js +0 -0
  13. package/dist/hud/efficiency.js +447 -0
  14. package/dist/hud/electron-main.js +3 -2
  15. package/dist/hud/fs.js +14 -0
  16. package/dist/hud/metric.js +4 -98
  17. package/dist/hud/monitor.js +1 -12
  18. package/dist/hud/render.js +4 -3
  19. package/dist/hud/server.js +30 -0
  20. package/dist/hud/web.js +409 -186
  21. package/dist/index.js +0 -0
  22. package/dist/setup-page/client-core.js +475 -0
  23. package/dist/setup-page/client-extraction.js +550 -0
  24. package/dist/setup-page/client-lifecycle.js +116 -0
  25. package/dist/setup-page/client-report-audit.js +818 -0
  26. package/dist/setup-page/client-report-city.js +204 -0
  27. package/dist/setup-page/client-report.js +6 -0
  28. package/dist/setup-page/client.js +15 -0
  29. package/dist/setup-page/document.js +37 -0
  30. package/dist/setup-page/styles-city-report.js +880 -0
  31. package/dist/setup-page/styles-context-audit.js +470 -0
  32. package/dist/setup-page/styles-extraction.js +821 -0
  33. package/dist/setup-page/styles-foundation.js +231 -0
  34. package/dist/setup-page/styles.js +11 -0
  35. package/dist/setup-page.js +6 -5623
  36. package/dist/setup.js +24 -10
  37. package/package.json +4 -4
  38. package/dist/city/10-problems-report.html +0 -649
  39. package/dist/city/_live.html +0 -37
  40. package/dist/city/_serve.mjs +0 -45
  41. package/dist/city/card-data.json +0 -15
  42. package/dist/city/chaos-to-clarity-pencil.html +0 -582
  43. package/dist/city/city-data.json +0 -248
  44. package/dist/city/echo-ai-city-only.template.html +0 -2271
  45. package/dist/city/generate-echo-city-only.mjs +0 -112
  46. package/dist/city/pencil-pie-generator.html +0 -883
  47. package/dist/city/pencil-webgl-landscape.html +0 -1239
  48. package/dist/city/spatial-fan-story.html +0 -479
@@ -157,6 +157,35 @@ export async function createHudServer(opts = {}) {
157
157
  res.end(JSON.stringify({ ok: canReveal, reason: canReveal ? undefined : opts.onReveal ? "unknown_path" : "no_desktop" }));
158
158
  return;
159
159
  }
160
+ if (url.pathname === "/jump") {
161
+ // Deep-link into the session's own app, at the conversation level:
162
+ // Claude Code CLI session -> claude://resume?session=<uuid> (imports + opens in Claude desktop)
163
+ // Codex thread -> codex://threads/<uuid> (opens in the ChatGPT app's Codex)
164
+ // The uuid is the one already embedded in the tracked transcript filename.
165
+ const id = url.searchParams.get("id") || "";
166
+ const rec = (latest.recentSessions || []).find((s) => s.id === id);
167
+ let link = "";
168
+ if (rec) {
169
+ const uuid = (path.basename(rec.sourcePath).match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i) || [])[0] || "";
170
+ if (uuid)
171
+ link = rec.client === "codex" ? `codex://threads/${uuid}` : `claude://resume?session=${uuid}`;
172
+ else if (rec.client === "claude-desktop")
173
+ link = "claude://";
174
+ }
175
+ let ok = false;
176
+ if (link) {
177
+ try {
178
+ execFileSync("open", [link]);
179
+ ok = true;
180
+ }
181
+ catch {
182
+ ok = false;
183
+ }
184
+ }
185
+ res.writeHead(200, { "content-type": "application/json" });
186
+ res.end(JSON.stringify({ ok, link: link || undefined }));
187
+ return;
188
+ }
160
189
  if (url.pathname === "/renew") {
161
190
  handleRenew(latest, res).catch((error) => {
162
191
  if (res.writableEnded)
@@ -511,6 +540,7 @@ function serveHudAsset(pathname, res) {
511
540
  "/assets/hud/echo-face-cutout.png": { path: "../../assets/hud/echo-face-cutout.png", type: "image/png" },
512
541
  "/assets/hud/claude.svg": { path: "../../assets/hud/claude.svg", type: "image/svg+xml; charset=utf-8" },
513
542
  "/assets/hud/codex.svg": { path: "../../assets/hud/codex.svg", type: "image/svg+xml; charset=utf-8" },
543
+ "/assets/hud/github.svg": { path: "../../assets/hud/github.svg", type: "image/svg+xml; charset=utf-8" },
514
544
  };
515
545
  const asset = assets[pathname];
516
546
  if (!asset)