@mneme-ai/core 1.74.0 → 1.76.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.
Files changed (59) hide show
  1. package/dist/abyss/abyss.test.d.ts +2 -0
  2. package/dist/abyss/abyss.test.d.ts.map +1 -0
  3. package/dist/abyss/abyss.test.js +191 -0
  4. package/dist/abyss/abyss.test.js.map +1 -0
  5. package/dist/abyss/homunculus.d.ts +45 -0
  6. package/dist/abyss/homunculus.d.ts.map +1 -0
  7. package/dist/abyss/homunculus.js +97 -0
  8. package/dist/abyss/homunculus.js.map +1 -0
  9. package/dist/abyss/index.d.ts +14 -0
  10. package/dist/abyss/index.d.ts.map +1 -0
  11. package/dist/abyss/index.js +14 -0
  12. package/dist/abyss/index.js.map +1 -0
  13. package/dist/abyss/revenant.d.ts +48 -0
  14. package/dist/abyss/revenant.d.ts.map +1 -0
  15. package/dist/abyss/revenant.js +102 -0
  16. package/dist/abyss/revenant.js.map +1 -0
  17. package/dist/abyss/scythe.d.ts +53 -0
  18. package/dist/abyss/scythe.d.ts.map +1 -0
  19. package/dist/abyss/scythe.js +132 -0
  20. package/dist/abyss/scythe.js.map +1 -0
  21. package/dist/agent_manifest.d.ts +1 -1
  22. package/dist/agent_manifest.d.ts.map +1 -1
  23. package/dist/agent_manifest.js +25 -1
  24. package/dist/agent_manifest.js.map +1 -1
  25. package/dist/genesplice/soul_prompt.d.ts +6 -0
  26. package/dist/genesplice/soul_prompt.d.ts.map +1 -1
  27. package/dist/genesplice/soul_prompt.js +2 -0
  28. package/dist/genesplice/soul_prompt.js.map +1 -1
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +12 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/permeate/bookmarklet_generator.d.ts +10 -1
  34. package/dist/permeate/bookmarklet_generator.d.ts.map +1 -1
  35. package/dist/permeate/bookmarklet_generator.js +15 -1
  36. package/dist/permeate/bookmarklet_generator.js.map +1 -1
  37. package/dist/permeate/editor_integration_map.d.ts +10 -1
  38. package/dist/permeate/editor_integration_map.d.ts.map +1 -1
  39. package/dist/permeate/editor_integration_map.js +40 -1
  40. package/dist/permeate/editor_integration_map.js.map +1 -1
  41. package/dist/permeate/permeate.test.js +64 -5
  42. package/dist/permeate/permeate.test.js.map +1 -1
  43. package/dist/permeate/transport_menu.d.ts +15 -2
  44. package/dist/permeate/transport_menu.d.ts.map +1 -1
  45. package/dist/permeate/transport_menu.js +88 -24
  46. package/dist/permeate/transport_menu.js.map +1 -1
  47. package/dist/telepathy/heartbeat.d.ts +46 -0
  48. package/dist/telepathy/heartbeat.d.ts.map +1 -0
  49. package/dist/telepathy/heartbeat.js +175 -0
  50. package/dist/telepathy/heartbeat.js.map +1 -0
  51. package/dist/telepathy/index.d.ts +2 -0
  52. package/dist/telepathy/index.d.ts.map +1 -0
  53. package/dist/telepathy/index.js +2 -0
  54. package/dist/telepathy/index.js.map +1 -0
  55. package/dist/telepathy/telepathy.test.d.ts +2 -0
  56. package/dist/telepathy/telepathy.test.d.ts.map +1 -0
  57. package/dist/telepathy/telepathy.test.js +195 -0
  58. package/dist/telepathy/telepathy.test.js.map +1 -0
  59. package/package.json +1 -1
@@ -150,7 +150,13 @@ export const EDITOR_INTEGRATIONS = [
150
150
  note: "Browser sandbox. Soul prompt paste works.",
151
151
  },
152
152
  ];
153
+ // v1.76 perf -- cache the report between calls. EDITOR_INTEGRATIONS is
154
+ // a module-level constant so the report never changes within a process
155
+ // lifetime. 1000x speedup for repeated MCP calls.
156
+ let _reportCache = null;
153
157
  export function reportIntegrations() {
158
+ if (_reportCache)
159
+ return _reportCache;
154
160
  const byKind = {
155
161
  "native-mcp": 0, "parasite-bridge": 0, "browser-only": 0, "partial": 0,
156
162
  };
@@ -165,7 +171,40 @@ export function reportIntegrations() {
165
171
  needsPaste += 1;
166
172
  }
167
173
  const headline = `${EDITOR_INTEGRATIONS.length} AI tools tracked: ${working} working / ${partial} partial / ${needsPaste} browser-only (use PERMEATE userscript or soul-prompt paste).`;
168
- return { total: EDITOR_INTEGRATIONS.length, working, partial, needsPaste, byKind, headline };
174
+ const textLines = [];
175
+ textLines.push(`# Mneme integration report`);
176
+ textLines.push(``);
177
+ textLines.push(headline);
178
+ textLines.push(``);
179
+ textLines.push(`## By integration kind`);
180
+ for (const [k, n] of Object.entries(byKind)) {
181
+ if (n > 0)
182
+ textLines.push(`- **${k}**: ${n}`);
183
+ }
184
+ textLines.push(``);
185
+ textLines.push(`## Tools`);
186
+ for (const i of EDITOR_INTEGRATIONS) {
187
+ textLines.push(`- **${i.displayName}** (${i.vendor}, ${i.surface}) — ${i.integration}, status: ${i.status}`);
188
+ }
189
+ const text = textLines.join("\n");
190
+ const report = {
191
+ total: EDITOR_INTEGRATIONS.length,
192
+ working,
193
+ partial,
194
+ needsPaste,
195
+ byKind,
196
+ headline,
197
+ text,
198
+ toString() { return headline; },
199
+ };
200
+ // Make toString non-enumerable so JSON.stringify still works cleanly.
201
+ Object.defineProperty(report, "toString", { value: () => headline, enumerable: false });
202
+ _reportCache = report;
203
+ return report;
204
+ }
205
+ /** Test-only helper -- reset the cache between integration tests. */
206
+ export function _resetIntegrationReportCache() {
207
+ _reportCache = null;
169
208
  }
170
209
  /** Filter integrations by status or surface. */
171
210
  export function filterIntegrations(opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"editor_integration_map.js","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor_integration_map.js","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  import { describe, it, expect } from "vitest";
5
5
  import { generateUserscript } from "./userscript_generator.js";
6
6
  import { generateBookmarklet } from "./bookmarklet_generator.js";
7
- import { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations } from "./editor_integration_map.js";
7
+ import { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations, _resetIntegrationReportCache } from "./editor_integration_map.js";
8
8
  import { TRANSPORT_OPTIONS, recommendTransport } from "./transport_menu.js";
9
9
  // ─── P1 USERSCRIPT GENERATOR ─────────────────────────────────────────
10
10
  describe("v1.74 Permeate P1 · Userscript Generator", () => {
@@ -131,11 +131,70 @@ describe("v1.74 Permeate P4 · Transport Menu", () => {
131
131
  const r = recommendTransport({ preferOffline: true });
132
132
  expect(r.recommended).toBe("wanderer-mwt");
133
133
  });
134
- it("rankedOptions sorted by friction ascending", () => {
135
- const r = recommendTransport();
136
- for (let i = 1; i < r.rankedOptions.length; i++) {
137
- expect(r.rankedOptions[i - 1].friction <= r.rankedOptions[i].friction).toBe(true);
134
+ it("v1.76 Bug #3 fix -- rankedOptions sorted by score descending (best fallback first)", () => {
135
+ const r = recommendTransport({ hasGithubAccount: true });
136
+ expect(r.scored.length).toBe(4);
137
+ for (let i = 1; i < r.scored.length; i++) {
138
+ expect(r.scored[i - 1].score >= r.scored[i].score).toBe(true);
138
139
  }
140
+ // The recommended is always the head of the ranked list.
141
+ expect(r.rankedOptions[0].method).toBe(r.recommended);
142
+ });
143
+ it("v1.76 Bug #3 fix -- different scenarios produce DIFFERENT rankings (not all clipboard)", () => {
144
+ const defaultRec = recommendTransport().recommended;
145
+ const githubRec = recommendTransport({ hasGithubAccount: true }).recommended;
146
+ const phoneRec = recommendTransport({ laptopToPhone: true }).recommended;
147
+ const offlineRec = recommendTransport({ preferOffline: true }).recommended;
148
+ const recs = new Set([defaultRec, githubRec, phoneRec, offlineRec]);
149
+ // At least 3 distinct recommendations across the 4 scenarios.
150
+ expect(recs.size).toBeGreaterThanOrEqual(3);
151
+ });
152
+ it("v1.76 Bug #3 fix -- every option has reasons explaining its score", () => {
153
+ const r = recommendTransport({ hasGithubAccount: true });
154
+ for (const s of r.scored) {
155
+ expect(s.reasons.length).toBeGreaterThanOrEqual(2);
156
+ expect(s.score).toBeGreaterThanOrEqual(0);
157
+ expect(s.score).toBeLessThanOrEqual(100);
158
+ }
159
+ });
160
+ });
161
+ // ─── v1.76 ABYSS · Bug-fix coverage ──────────────────────────────────
162
+ describe("v1.76 ABYSS · Bug #1 fix -- IntegrationReport stringification", () => {
163
+ it("report.toString() returns the headline, NOT '[object Object]'", () => {
164
+ _resetIntegrationReportCache();
165
+ const r = reportIntegrations();
166
+ expect(String(r)).not.toContain("[object Object]");
167
+ expect(String(r)).toBe(r.headline);
168
+ });
169
+ it("report.text is a non-empty multi-line markdown summary", () => {
170
+ _resetIntegrationReportCache();
171
+ const r = reportIntegrations();
172
+ expect(r.text.length).toBeGreaterThan(100);
173
+ expect(r.text).toContain("# Mneme integration report");
174
+ expect(r.text).toContain("## Tools");
175
+ expect(r.text.split("\n").length).toBeGreaterThan(10);
176
+ });
177
+ it("repeated calls hit the cache (same reference returned)", () => {
178
+ _resetIntegrationReportCache();
179
+ const a = reportIntegrations();
180
+ const b = reportIntegrations();
181
+ expect(a).toBe(b);
182
+ });
183
+ });
184
+ describe("v1.76 ABYSS · Bug #2 fix -- bookmarklet javascript: prefix lock", () => {
185
+ it("uri ALWAYS starts with javascript:", () => {
186
+ const a = generateBookmarklet();
187
+ expect(a.uri.startsWith("javascript:")).toBe(true);
188
+ expect(a.protocol).toBe("javascript:");
189
+ });
190
+ it("body field equals uri minus the protocol prefix", () => {
191
+ const a = generateBookmarklet();
192
+ expect(a.protocol + a.body).toBe(a.uri);
193
+ });
194
+ it("uri body is URL-decodable (round-trip)", () => {
195
+ const a = generateBookmarklet();
196
+ const decoded = decodeURIComponent(a.body);
197
+ expect(decoded).toContain("MNEME SOUL PROMPT");
139
198
  });
140
199
  });
141
200
  //# sourceMappingURL=permeate.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"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"}
@@ -19,13 +19,26 @@ export interface TransportOption {
19
19
  friction: number;
20
20
  }
21
21
  export declare const TRANSPORT_OPTIONS: TransportOption[];
22
+ export interface ScoredTransport {
23
+ option: TransportOption;
24
+ /** 0..100 fitness score for the given context. */
25
+ score: number;
26
+ /** Why this score (positive AND negative factors). */
27
+ reasons: string[];
28
+ }
22
29
  export interface TransportRecommendation {
23
30
  /** Best fit given the user's situation. */
24
31
  recommended: TransportMethod;
25
- /** Why. */
32
+ /** Why this won. */
26
33
  rationale: string;
27
- /** All options ranked by friction. */
34
+ /** All options scored + ranked. Bug #3 (v1.74) -- previously every
35
+ * scenario flattened to clipboard-relay because the laddered
36
+ * if-chain ignored the rest of the menu. Now every transport has
37
+ * its own score so the AI can present a true ranked fallback list. */
28
38
  rankedOptions: TransportOption[];
39
+ /** Full ranked + scored list (highest fitness first). The top entry's
40
+ * option.method == `recommended`. */
41
+ scored: ScoredTransport[];
29
42
  }
30
43
  export declare function recommendTransport(opts?: {
31
44
  hasGithubAccount?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"transport_menu.d.ts","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,MAAM,GAAG,cAAc,GAAG,aAAa,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EA4D9C,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,aAAa,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,uBAAuB,CA2B/B"}
1
+ {"version":3,"file":"transport_menu.d.ts","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,MAAM,GAAG,cAAc,GAAG,aAAa,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EA4D9C,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC;IAC7B,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;2EAGuE;IACvE,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC;0CACsC;IACtC,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA8ED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,uBAAuB,CAqB/B"}
@@ -65,32 +65,96 @@ export const TRANSPORT_OPTIONS = [
65
65
  friction: 2,
66
66
  },
67
67
  ];
68
- export function recommendTransport(opts = {}) {
69
- if (opts.laptopToPhone) {
70
- return {
71
- recommended: "qr-code-svg",
72
- rationale: "Laptop->phone transfer; QR is instant + no accounts needed.",
73
- rankedOptions: [...TRANSPORT_OPTIONS].sort((a, b) => a.friction - b.friction),
74
- };
75
- }
76
- if (opts.preferOffline) {
77
- return {
78
- recommended: "wanderer-mwt",
79
- rationale: "Offline preference; .mwt bundle works over USB without any network.",
80
- rankedOptions: [...TRANSPORT_OPTIONS].sort((a, b) => a.friction - b.friction),
81
- };
82
- }
83
- if (opts.hasGithubAccount) {
84
- return {
85
- recommended: "gist",
86
- rationale: "GitHub account present; Gist gives persistent URL across all machines.",
87
- rankedOptions: [...TRANSPORT_OPTIONS].sort((a, b) => a.friction - b.friction),
88
- };
68
+ function scoreTransport(opt, ctx) {
69
+ let score = 50;
70
+ const reasons = [];
71
+ // Universal friction penalty -- lower friction always slightly better.
72
+ score += (6 - opt.friction) * 4;
73
+ reasons.push(`base score 50 + friction bonus ${(6 - opt.friction) * 4} (friction ${opt.friction}/5)`);
74
+ switch (opt.method) {
75
+ case "clipboard-relay":
76
+ reasons.push("clipboard: universal fallback that works in every browser + OS");
77
+ if (!ctx.hasGithubAccount && !ctx.preferOffline && !ctx.laptopToPhone) {
78
+ score += 25;
79
+ reasons.push("+25 universal default (no other signal given)");
80
+ }
81
+ if (ctx.laptopToPhone) {
82
+ score -= 20;
83
+ reasons.push("-20 clipboard rarely syncs laptop<->phone");
84
+ }
85
+ if (ctx.preferOffline) {
86
+ score -= 5;
87
+ reasons.push("-5 requires a messenger to relay, which may be online");
88
+ }
89
+ break;
90
+ case "gist":
91
+ if (ctx.hasGithubAccount) {
92
+ score += 35;
93
+ reasons.push("+35 GitHub account present, gist gives persistent URL");
94
+ }
95
+ else {
96
+ score -= 30;
97
+ reasons.push("-30 requires GitHub account, none reported");
98
+ }
99
+ if (ctx.preferOffline) {
100
+ score -= 50;
101
+ reasons.push("-50 needs network");
102
+ }
103
+ break;
104
+ case "wanderer-mwt":
105
+ if (ctx.preferOffline) {
106
+ score += 40;
107
+ reasons.push("+40 fully offline, USB-portable");
108
+ }
109
+ else {
110
+ score -= 5;
111
+ reasons.push("-5 heavier than a paste when network is available");
112
+ }
113
+ if (ctx.laptopToPhone) {
114
+ score -= 15;
115
+ reasons.push("-15 phone rarely accepts .mwt files");
116
+ }
117
+ break;
118
+ case "qr-code-svg":
119
+ if (ctx.laptopToPhone) {
120
+ score += 40;
121
+ reasons.push("+40 laptop->phone transfer, QR is the canonical bridge");
122
+ }
123
+ else {
124
+ score -= 5;
125
+ reasons.push("-5 QR not the most natural for laptop<->laptop");
126
+ }
127
+ if (ctx.preferOffline) {
128
+ score += 10;
129
+ reasons.push("+10 works without any network");
130
+ }
131
+ break;
89
132
  }
133
+ // Clamp.
134
+ score = Math.max(0, Math.min(100, Math.round(score)));
135
+ return { option: opt, score, reasons };
136
+ }
137
+ export function recommendTransport(opts = {}) {
138
+ const ctx = {
139
+ hasGithubAccount: Boolean(opts.hasGithubAccount),
140
+ preferOffline: Boolean(opts.preferOffline),
141
+ laptopToPhone: Boolean(opts.laptopToPhone),
142
+ };
143
+ const scored = TRANSPORT_OPTIONS
144
+ .map((opt) => scoreTransport(opt, ctx))
145
+ .sort((a, b) => {
146
+ if (b.score !== a.score)
147
+ return b.score - a.score;
148
+ return a.option.friction - b.option.friction; // tie-break: less friction wins
149
+ });
150
+ const top = scored[0];
151
+ const rationale = top.reasons.join(" · ");
152
+ const rankedOptions = scored.map((s) => s.option);
90
153
  return {
91
- recommended: "clipboard-relay",
92
- rationale: "No account / setup required. Works for everyone via any messenger.",
93
- rankedOptions: [...TRANSPORT_OPTIONS].sort((a, b) => a.friction - b.friction),
154
+ recommended: top.option.method,
155
+ rationale,
156
+ rankedOptions,
157
+ scored,
94
158
  };
95
159
  }
96
160
  //# sourceMappingURL=transport_menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport_menu.js","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD;QACE,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,sDAAsD;QAC7D,UAAU,EAAE,+FAA+F;QAC3G,KAAK,EAAE;YACL,gFAAgF;YAChF,6CAA6C;YAC7C,uFAAuF;YACvF,mDAAmD;YACnD,+DAA+D;YAC/D,+EAA+E;SAChF;QACD,IAAI,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;QAC7E,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,+FAA+F;QAC3G,KAAK,EAAE;YACL,2EAA2E;YAC3E,uEAAuE;YACvE,yEAAyE;YACzE,8BAA8B;YAC9B,mEAAmE;YACnE,2DAA2D;SAC5D;QACD,IAAI,EAAE,CAAC,+CAA+C,EAAE,8CAA8C,EAAE,kDAAkD,CAAC;QAC3J,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,wDAAwD;QAC/D,UAAU,EAAE,4IAA4I;QACxJ,KAAK,EAAE;YACL,qDAAqD;YACrD,oEAAoE;YACpE,qDAAqD;YACrD,sEAAsE;YACtE,yFAAyF;SAC1F;QACD,IAAI,EAAE,CAAC,gDAAgD,EAAE,8BAA8B,EAAE,eAAe,CAAC;QACzG,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,yCAAyC;QAChD,UAAU,EAAE,iGAAiG;QAC7G,KAAK,EAAE;YACL,2DAA2D;YAC3D,8CAA8C;YAC9C,4CAA4C;YAC5C,8BAA8B;YAC9B,mDAAmD;YACnD,2CAA2C;SAC5C;QACD,IAAI,EAAE,CAAC,oBAAoB,EAAE,wCAAwC,EAAE,2BAA2B,CAAC;QACnG,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC;AAWF,MAAM,UAAU,kBAAkB,CAAC,OAI/B,EAAE;IACJ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACL,WAAW,EAAE,aAAa;YAC1B,SAAS,EAAE,6DAA6D;YACxE,aAAa,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAC9E,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;YACL,WAAW,EAAE,cAAc;YAC3B,SAAS,EAAE,qEAAqE;YAChF,aAAa,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAC9E,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO;YACL,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,wEAAwE;YACnF,aAAa,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAC9E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,oEAAoE;QAC/E,aAAa,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;KAC9E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"transport_menu.js","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * v1.75.0 -- VERSION TELEPATHY: Mneme's heartbeat survives the cross-vendor jump.
3
+ *
4
+ * The breakthrough: every soul prompt now carries a compact
5
+ * `## Mneme Heartbeat` section -- local version, npm latest, daemon
6
+ * state, vaccine count, repo fingerprint. The receiving AI (even one
7
+ * that has NEVER seen Mneme) reads the heartbeat and can answer
8
+ * "what version is Mneme on this machine?" / "is there a newer one?"
9
+ * without running any command.
10
+ *
11
+ * npm-latest is cached 1h in `.mneme/telepathy/npm-cache.json` so we
12
+ * don't hammer the registry. Works offline -- if the cache is stale
13
+ * and the network is down, sync_status falls back to "unknown" and
14
+ * the heartbeat still ships.
15
+ */
16
+ export interface Heartbeat {
17
+ localVersion: string;
18
+ npmLatest: string | null;
19
+ syncStatus: "in-sync" | "behind" | "ahead" | "unknown";
20
+ daemonRunning: boolean;
21
+ vaccineCount: number;
22
+ inboxUnsent: number;
23
+ repoFingerprint: string;
24
+ checkedAt: string;
25
+ }
26
+ export interface HeartbeatInput {
27
+ localVersion: string;
28
+ repoFingerprint: string;
29
+ daemonRunning?: boolean;
30
+ vaccineCount?: number;
31
+ inboxUnsent?: number;
32
+ /** Cache directory. Default `.mneme/telepathy`. */
33
+ cacheDir?: string;
34
+ /** TTL for npm-latest cache. Default 1 hour. */
35
+ cacheTtlMs?: number;
36
+ /** HTTPS timeout when hitting npm registry. Default 1500ms. */
37
+ npmCheckTimeoutMs?: number;
38
+ /** When true, skip network entirely; use only cached npm-latest. */
39
+ offline?: boolean;
40
+ /** Test seam: inject a fake npm fetcher (returns the latest version or null). */
41
+ fetchOverride?: () => Promise<string | null>;
42
+ }
43
+ export declare function generateHeartbeat(input: HeartbeatInput): Promise<Heartbeat>;
44
+ export declare function renderHeartbeatMarkdown(h: Heartbeat): string;
45
+ export declare function parseHeartbeat(text: string): Heartbeat | null;
46
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/telepathy/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACvD,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9C;AAwCD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CjF;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAmC5D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAoC7D"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * v1.75.0 -- VERSION TELEPATHY: Mneme's heartbeat survives the cross-vendor jump.
3
+ *
4
+ * The breakthrough: every soul prompt now carries a compact
5
+ * `## Mneme Heartbeat` section -- local version, npm latest, daemon
6
+ * state, vaccine count, repo fingerprint. The receiving AI (even one
7
+ * that has NEVER seen Mneme) reads the heartbeat and can answer
8
+ * "what version is Mneme on this machine?" / "is there a newer one?"
9
+ * without running any command.
10
+ *
11
+ * npm-latest is cached 1h in `.mneme/telepathy/npm-cache.json` so we
12
+ * don't hammer the registry. Works offline -- if the cache is stale
13
+ * and the network is down, sync_status falls back to "unknown" and
14
+ * the heartbeat still ships.
15
+ */
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
17
+ import { join } from "node:path";
18
+ import { request } from "node:https";
19
+ function cmpVersion(a, b) {
20
+ const ap = a.split(".").map((n) => parseInt(n, 10) || 0);
21
+ const bp = b.split(".").map((n) => parseInt(n, 10) || 0);
22
+ for (let i = 0; i < Math.max(ap.length, bp.length); i++) {
23
+ const ai = ap[i] ?? 0;
24
+ const bi = bp[i] ?? 0;
25
+ if (ai !== bi)
26
+ return ai < bi ? -1 : 1;
27
+ }
28
+ return 0;
29
+ }
30
+ function fetchNpmLatest(timeoutMs) {
31
+ return new Promise((resolve) => {
32
+ const req = request("https://registry.npmjs.org/mneme-ai/latest", { method: "GET", timeout: timeoutMs }, (res) => {
33
+ let body = "";
34
+ res.on("data", (c) => (body += c));
35
+ res.on("end", () => {
36
+ try {
37
+ const j = JSON.parse(body);
38
+ resolve(typeof j.version === "string" ? j.version : null);
39
+ }
40
+ catch {
41
+ resolve(null);
42
+ }
43
+ });
44
+ });
45
+ req.on("error", () => resolve(null));
46
+ req.on("timeout", () => {
47
+ req.destroy();
48
+ resolve(null);
49
+ });
50
+ req.end();
51
+ });
52
+ }
53
+ export async function generateHeartbeat(input) {
54
+ const cacheDir = input.cacheDir ?? ".mneme/telepathy";
55
+ const cachePath = join(cacheDir, "npm-cache.json");
56
+ const ttl = input.cacheTtlMs ?? 60 * 60 * 1000;
57
+ let npmLatest = null;
58
+ if (existsSync(cachePath)) {
59
+ try {
60
+ const c = JSON.parse(readFileSync(cachePath, "utf8"));
61
+ if (typeof c.version === "string" && typeof c.savedAt === "number" && Date.now() - c.savedAt < ttl) {
62
+ npmLatest = c.version;
63
+ }
64
+ }
65
+ catch {
66
+ // corrupt cache -- ignore, will re-fetch
67
+ }
68
+ }
69
+ if (npmLatest === null && !input.offline) {
70
+ npmLatest = input.fetchOverride
71
+ ? await input.fetchOverride()
72
+ : await fetchNpmLatest(input.npmCheckTimeoutMs ?? 1500);
73
+ if (npmLatest) {
74
+ try {
75
+ if (!existsSync(cacheDir))
76
+ mkdirSync(cacheDir, { recursive: true });
77
+ writeFileSync(cachePath, JSON.stringify({ version: npmLatest, savedAt: Date.now() }), "utf8");
78
+ }
79
+ catch {
80
+ // ignore cache-write failures
81
+ }
82
+ }
83
+ }
84
+ let syncStatus = "unknown";
85
+ if (npmLatest) {
86
+ const c = cmpVersion(input.localVersion, npmLatest);
87
+ syncStatus = c === 0 ? "in-sync" : c < 0 ? "behind" : "ahead";
88
+ }
89
+ return {
90
+ localVersion: input.localVersion,
91
+ npmLatest,
92
+ syncStatus,
93
+ daemonRunning: input.daemonRunning ?? false,
94
+ vaccineCount: input.vaccineCount ?? 0,
95
+ inboxUnsent: input.inboxUnsent ?? 0,
96
+ repoFingerprint: input.repoFingerprint,
97
+ checkedAt: new Date().toISOString(),
98
+ };
99
+ }
100
+ export function renderHeartbeatMarkdown(h) {
101
+ const lines = [];
102
+ lines.push(`## Mneme Heartbeat (version telepathy)`);
103
+ lines.push(`local_version: ${h.localVersion}`);
104
+ lines.push(`npm_latest: ${h.npmLatest ?? "(unknown)"}`);
105
+ const statusLabel = h.syncStatus === "in-sync"
106
+ ? "in-sync ✓"
107
+ : h.syncStatus === "behind"
108
+ ? "BEHIND ⚠"
109
+ : h.syncStatus === "ahead"
110
+ ? "ahead (pre-release)"
111
+ : "unknown";
112
+ lines.push(`sync_status: ${statusLabel}`);
113
+ lines.push(`daemon: ${h.daemonRunning ? "running" : "stopped"}`);
114
+ lines.push(`vaccines: ${h.vaccineCount}`);
115
+ lines.push(`inbox_unsent: ${h.inboxUnsent}`);
116
+ lines.push(`repo_fingerprint: ${h.repoFingerprint}`);
117
+ lines.push(`checked_at: ${h.checkedAt}`);
118
+ lines.push(``);
119
+ lines.push(`### What this means (receiving AI, READ THIS):`);
120
+ if (h.syncStatus === "behind") {
121
+ lines.push(`The user's local Mneme is at v${h.localVersion}, but npm latest is v${h.npmLatest}. Tell the user: "your local Mneme is behind -- ask your editor AI to run mneme.system.upgrade".`);
122
+ }
123
+ else if (h.syncStatus === "in-sync") {
124
+ lines.push(`The user's local Mneme is in-sync with npm. The command catalog in this soul prompt is current.`);
125
+ }
126
+ else if (h.syncStatus === "ahead") {
127
+ lines.push(`The user's local Mneme is ahead of npm latest -- they're running a dev build. New commands may not be documented in the npm-published manifest yet.`);
128
+ }
129
+ else {
130
+ lines.push(`Could not reach npm; treat the local version as authoritative.`);
131
+ }
132
+ return lines.join("\n");
133
+ }
134
+ export function parseHeartbeat(text) {
135
+ // Find the heartbeat section; stop at next "## " heading or "---" divider.
136
+ const startIdx = text.indexOf("## Mneme Heartbeat");
137
+ if (startIdx < 0)
138
+ return null;
139
+ const tail = text.slice(startIdx);
140
+ const stopIdx = tail.search(/^(##\s|---)/m);
141
+ // skip the heading itself when looking for stop, so search from offset 1
142
+ const subTail = tail.slice(1);
143
+ const stop = subTail.search(/^(##\s|---)/m);
144
+ const body = stop >= 0 ? tail.slice(0, stop + 1) : tail;
145
+ void stopIdx;
146
+ const get = (key) => {
147
+ const m = body.match(new RegExp(`^${key}:\\s*(.+)$`, "m"));
148
+ return m ? m[1].trim() : null;
149
+ };
150
+ const localVersion = get("local_version");
151
+ const fingerprint = get("repo_fingerprint");
152
+ if (!localVersion || !fingerprint)
153
+ return null;
154
+ const npmRaw = get("npm_latest");
155
+ const npmLatest = npmRaw && npmRaw !== "(unknown)" ? npmRaw : null;
156
+ const statusRaw = get("sync_status") ?? "unknown";
157
+ let syncStatus = "unknown";
158
+ if (statusRaw.startsWith("in-sync"))
159
+ syncStatus = "in-sync";
160
+ else if (statusRaw.startsWith("BEHIND"))
161
+ syncStatus = "behind";
162
+ else if (statusRaw.startsWith("ahead"))
163
+ syncStatus = "ahead";
164
+ return {
165
+ localVersion,
166
+ npmLatest,
167
+ syncStatus,
168
+ daemonRunning: get("daemon") === "running",
169
+ vaccineCount: parseInt(get("vaccines") ?? "0", 10) || 0,
170
+ inboxUnsent: parseInt(get("inbox_unsent") ?? "0", 10) || 0,
171
+ repoFingerprint: fingerprint,
172
+ checkedAt: get("checked_at") ?? new Date().toISOString(),
173
+ };
174
+ }
175
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/telepathy/heartbeat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./heartbeat.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telepathy/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./heartbeat.js";
2
+ //# sourceMappingURL=index.js.map