@mneme-ai/core 1.96.0 → 1.98.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 (46) hide show
  1. package/dist/permeate/userscript_generator.d.ts.map +1 -1
  2. package/dist/permeate/userscript_generator.js +1 -0
  3. package/dist/permeate/userscript_generator.js.map +1 -1
  4. package/dist/rainbow/bug_truth.d.ts +62 -0
  5. package/dist/rainbow/bug_truth.d.ts.map +1 -0
  6. package/dist/rainbow/bug_truth.js +74 -0
  7. package/dist/rainbow/bug_truth.js.map +1 -0
  8. package/dist/rainbow/clone_to.d.ts +133 -0
  9. package/dist/rainbow/clone_to.d.ts.map +1 -0
  10. package/dist/rainbow/clone_to.js +299 -0
  11. package/dist/rainbow/clone_to.js.map +1 -0
  12. package/dist/rainbow/clone_to.test.d.ts +2 -0
  13. package/dist/rainbow/clone_to.test.d.ts.map +1 -0
  14. package/dist/rainbow/clone_to.test.js +266 -0
  15. package/dist/rainbow/clone_to.test.js.map +1 -0
  16. package/dist/rainbow/handoff.d.ts +0 -3
  17. package/dist/rainbow/handoff.d.ts.map +1 -1
  18. package/dist/rainbow/handoff.js +13 -3
  19. package/dist/rainbow/handoff.js.map +1 -1
  20. package/dist/rainbow/index.d.ts +5 -0
  21. package/dist/rainbow/index.d.ts.map +1 -1
  22. package/dist/rainbow/index.js +18 -0
  23. package/dist/rainbow/index.js.map +1 -1
  24. package/dist/rainbow/passport.d.ts +107 -0
  25. package/dist/rainbow/passport.d.ts.map +1 -0
  26. package/dist/rainbow/passport.js +145 -0
  27. package/dist/rainbow/passport.js.map +1 -0
  28. package/dist/rainbow/v1_98.test.d.ts +2 -0
  29. package/dist/rainbow/v1_98.test.d.ts.map +1 -0
  30. package/dist/rainbow/v1_98.test.js +307 -0
  31. package/dist/rainbow/v1_98.test.js.map +1 -0
  32. package/dist/rainbow/vendor_probe.d.ts +52 -0
  33. package/dist/rainbow/vendor_probe.d.ts.map +1 -0
  34. package/dist/rainbow/vendor_probe.js +111 -0
  35. package/dist/rainbow/vendor_probe.js.map +1 -0
  36. package/dist/rainbow/vendor_strategy.d.ts +64 -0
  37. package/dist/rainbow/vendor_strategy.d.ts.map +1 -0
  38. package/dist/rainbow/vendor_strategy.js +157 -0
  39. package/dist/rainbow/vendor_strategy.js.map +1 -0
  40. package/dist/relay/deep_link.d.ts +24 -15
  41. package/dist/relay/deep_link.d.ts.map +1 -1
  42. package/dist/relay/deep_link.js +28 -18
  43. package/dist/relay/deep_link.js.map +1 -1
  44. package/dist/v1_87_regression.test.js +3 -2
  45. package/dist/v1_87_regression.test.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,266 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { parseCloneIntent, planTransport, cloneTo, formatCloneToPulseLine, openInBrowser, } from "./clone_to.js";
3
+ import { DEPRECATED_RELAY_PATHS, formatBugTruth } from "./bug_truth.js";
4
+ // ============================================================
5
+ // Phrase recognition — every phrase the user complained about MUST be
6
+ // recognized + routed to the right target.
7
+ // ============================================================
8
+ describe("v1.97 CLONE-TO · Thai phrase recognition (the bugs the user yelled about)", () => {
9
+ it("recognizes 'ย้าย mneme ไปใส่ใน mobile หน่อย'", () => {
10
+ const r = parseCloneIntent("ย้าย mneme ไปใส่ใน mobile หน่อย");
11
+ expect(r.isCloneRequest).toBe(true);
12
+ expect(r.target).toBe("mobile");
13
+ expect(r.confidence).toBeGreaterThan(0.7);
14
+ });
15
+ it("recognizes 'ส่งความจำของ mneme ไปใน gemini'", () => {
16
+ const r = parseCloneIntent("ส่งความจำของ mneme ไปใน gemini");
17
+ expect(r.isCloneRequest).toBe(true);
18
+ expect(r.target).toBe("gemini");
19
+ expect(r.confidence).toBeGreaterThanOrEqual(0.95);
20
+ });
21
+ it("recognizes 'ส่งสมองไปมือถือ'", () => {
22
+ const r = parseCloneIntent("ส่งสมองไปมือถือ");
23
+ expect(r.target).toBe("mobile");
24
+ expect(r.isCloneRequest).toBe(true);
25
+ });
26
+ it("recognizes 'โคลน mneme ไป chat gpt'", () => {
27
+ const r = parseCloneIntent("โคลน mneme ไป chat gpt");
28
+ expect(r.target).toBe("chatgpt");
29
+ });
30
+ it("recognizes 'sync brain to ipad'", () => {
31
+ const r = parseCloneIntent("sync brain to ipad");
32
+ expect(r.target).toBe("ipad");
33
+ });
34
+ it("recognizes 'clone to gemini-web'", () => {
35
+ const r = parseCloneIntent("clone to gemini-web");
36
+ expect(r.target).toBe("gemini");
37
+ });
38
+ it("recognizes 'send brain to my notebook'", () => {
39
+ const r = parseCloneIntent("send brain to my notebook");
40
+ expect(r.target).toBe("another-pc");
41
+ });
42
+ it("recognizes 'ก๊อปไปเครื่องนี้ browser'", () => {
43
+ const r = parseCloneIntent("ก๊อปไปเครื่องนี้ browser");
44
+ expect(r.target).toBe("this-pc");
45
+ });
46
+ it("recognizes 'copilot ใช้ mneme หน่อย'", () => {
47
+ const r = parseCloneIntent("copilot ใช้ mneme หน่อย");
48
+ expect(r.target).toBe("copilot");
49
+ });
50
+ it("recognizes 'pack mneme to usb'", () => {
51
+ const r = parseCloneIntent("pack mneme to usb");
52
+ expect(r.target).toBe("usb");
53
+ });
54
+ it("recognizes 'ส่งกลับมาที่ pc'", () => {
55
+ const r = parseCloneIntent("ส่งกลับมาที่ pc");
56
+ expect(r.target).toBe("return");
57
+ });
58
+ it("returns target=unknown + medium confidence when target ambiguous", () => {
59
+ const r = parseCloneIntent("ส่งสมอง mneme หน่อย");
60
+ expect(r.target).toBe("unknown");
61
+ expect(r.isCloneRequest).toBe(true); // still want clone, just unclear where
62
+ expect(r.confidence).toBeGreaterThanOrEqual(0.5);
63
+ expect(r.confidence).toBeLessThan(0.95);
64
+ });
65
+ it("returns isCloneRequest=false for non-clone messages", () => {
66
+ expect(parseCloneIntent("hi how are you").isCloneRequest).toBe(false);
67
+ expect(parseCloneIntent("what's the weather").isCloneRequest).toBe(false);
68
+ });
69
+ it("recognizes English + Thai mixed phrases", () => {
70
+ const r = parseCloneIntent("Please send my brain ไปที่ chatgpt now");
71
+ expect(r.target).toBe("chatgpt");
72
+ expect(r.isCloneRequest).toBe(true);
73
+ });
74
+ });
75
+ // ============================================================
76
+ // Transport planning
77
+ // ============================================================
78
+ describe("v1.97 CLONE-TO · transport planning", () => {
79
+ it("this-pc → same-shell on localhost:7741/local", () => {
80
+ const p = planTransport("this-pc");
81
+ expect(p.transport).toBe("same-shell");
82
+ if (p.transport === "same-shell") {
83
+ expect(p.openUrl).toContain("localhost:7741/local");
84
+ }
85
+ });
86
+ it("chatgpt → web-paste with chatgpt.com URL", () => {
87
+ const p = planTransport("chatgpt");
88
+ expect(p.transport).toBe("web-paste");
89
+ if (p.transport === "web-paste")
90
+ expect(p.aiUrl).toContain("chatgpt.com");
91
+ });
92
+ it("gemini → web-paste with gemini.google.com URL (no ?q= deep link)", () => {
93
+ const p = planTransport("gemini");
94
+ if (p.transport === "web-paste") {
95
+ expect(p.aiUrl).toContain("gemini.google.com");
96
+ // The fix for BUG #3: NO ?q= deep link reliance — open home page.
97
+ expect(p.aiUrl).not.toContain("?q=");
98
+ }
99
+ });
100
+ it("claude → claude.ai/new (no encrypted-fetch reliance — BUG #1 + #2 fix)", () => {
101
+ const p = planTransport("claude");
102
+ if (p.transport === "web-paste") {
103
+ expect(p.aiUrl).toContain("claude.ai");
104
+ // No fetch / decrypt instruction — pure clipboard handoff
105
+ expect(p.description).not.toContain("fetch");
106
+ expect(p.description).not.toContain("decrypt");
107
+ }
108
+ });
109
+ it("mobile → tunnel-qr (any network)", () => {
110
+ const p = planTransport("mobile");
111
+ expect(p.transport).toBe("tunnel-qr");
112
+ });
113
+ it("usb → wanderer pack/unpack flow", () => {
114
+ const p = planTransport("usb");
115
+ expect(p.transport).toBe("usb-wanderer");
116
+ });
117
+ it("unknown → menu with all options listed", () => {
118
+ const p = planTransport("unknown");
119
+ expect(p.transport).toBe("menu");
120
+ if (p.transport === "menu") {
121
+ expect(p.options.length).toBeGreaterThanOrEqual(6);
122
+ expect(p.options.map((o) => o.target)).toContain("this-pc");
123
+ expect(p.options.map((o) => o.target)).toContain("mobile");
124
+ expect(p.options.map((o) => o.target)).toContain("gemini");
125
+ }
126
+ });
127
+ it("return → boomerang-return path", () => {
128
+ const p = planTransport("return");
129
+ expect(p.transport).toBe("boomerang-return");
130
+ });
131
+ it("respects custom LAN port", () => {
132
+ const p = planTransport("this-pc", { lanPort: 8888 });
133
+ if (p.transport === "same-shell")
134
+ expect(p.openUrl).toContain("8888");
135
+ });
136
+ });
137
+ // ============================================================
138
+ // cloneTo top-level dispatcher
139
+ // ============================================================
140
+ describe("v1.97 CLONE-TO · cloneTo dispatcher", () => {
141
+ it("parses user text → opens browser → returns instruction", () => {
142
+ let openedCmd = "";
143
+ let openedArgs = [];
144
+ const r = cloneTo({
145
+ userText: "ส่งความจำของ mneme ไปใน gemini",
146
+ spawnOverride: (cmd, args) => { openedCmd = cmd; openedArgs = args; },
147
+ });
148
+ expect(r.resolvedTarget).toBe("gemini");
149
+ expect(r.browserOpen?.opened).toBe(true);
150
+ expect(openedCmd.length).toBeGreaterThan(0);
151
+ expect(openedArgs.some((a) => a.includes("gemini.google.com"))).toBe(true);
152
+ expect(r.userInstruction.toLowerCase()).toContain("clipboard");
153
+ });
154
+ it("accepts target directly (skips parsing)", () => {
155
+ const r = cloneTo({
156
+ target: "mobile",
157
+ openBrowser: false,
158
+ });
159
+ expect(r.resolvedTarget).toBe("mobile");
160
+ expect(r.intent).toBeNull();
161
+ });
162
+ it("openBrowser=false suppresses spawn", () => {
163
+ let opened = false;
164
+ const r = cloneTo({
165
+ target: "chatgpt",
166
+ openBrowser: false,
167
+ spawnOverride: () => { opened = true; },
168
+ });
169
+ expect(opened).toBe(false);
170
+ expect(r.browserOpen).toBeUndefined();
171
+ });
172
+ it("unknown target shows menu (no browser opened)", () => {
173
+ let opened = false;
174
+ const r = cloneTo({
175
+ userText: "ส่งหน่อย", // verb but no target
176
+ spawnOverride: () => { opened = true; },
177
+ });
178
+ expect(r.resolvedTarget).toBe("unknown");
179
+ expect(r.plan.transport).toBe("menu");
180
+ expect(opened).toBe(false);
181
+ expect(r.userInstruction).toMatch(/where to|pick one|menu/i);
182
+ });
183
+ it("formatCloneToPulseLine produces compact summary", () => {
184
+ const r = cloneTo({ userText: "clone to gemini", openBrowser: false });
185
+ const line = formatCloneToPulseLine(r);
186
+ expect(line).toContain("CLONE-TO");
187
+ expect(line).toContain("gemini");
188
+ expect(line).toContain("web-paste");
189
+ });
190
+ });
191
+ // ============================================================
192
+ // Cross-platform browser open
193
+ // ============================================================
194
+ describe("v1.97 CLONE-TO · openInBrowser", () => {
195
+ it("Windows → cmd /c start", () => {
196
+ let called = null;
197
+ openInBrowser("https://example.com", { spawnOverride: (cmd, args) => { called = { cmd, args }; } });
198
+ expect(called).toBeTruthy();
199
+ if (process.platform === "win32")
200
+ expect(called.cmd).toBe("cmd");
201
+ });
202
+ it("returns opened=true on success path", () => {
203
+ const r = openInBrowser("https://example.com", { spawnOverride: () => undefined });
204
+ expect(r.opened).toBe(true);
205
+ expect(r.command.length).toBeGreaterThan(0);
206
+ });
207
+ });
208
+ // ============================================================
209
+ // BUG-TRUTH (honest postmortem must ship in code)
210
+ // ============================================================
211
+ describe("v1.97 BUG-TRUTH · honest deprecation record", () => {
212
+ it("lists at least 3 deprecated relay paths with reason + replacement", () => {
213
+ expect(DEPRECATED_RELAY_PATHS.length).toBeGreaterThanOrEqual(3);
214
+ for (const w of DEPRECATED_RELAY_PATHS) {
215
+ expect(w.module).toBeTruthy();
216
+ expect(w.reason.length).toBeGreaterThan(20);
217
+ expect(w.replacement.length).toBeGreaterThan(10);
218
+ }
219
+ });
220
+ it("explicitly names the AES/PBKDF2 + URL fetch failures", () => {
221
+ const all = DEPRECATED_RELAY_PATHS.map((w) => w.reason).join(" ");
222
+ expect(all).toMatch(/AES|PBKDF2|crypto/i);
223
+ expect(all).toMatch(/fetch|web/i);
224
+ expect(all).toMatch(/deep.link|prefill|\?q=/i);
225
+ });
226
+ it("formatBugTruth produces a multi-line human-readable report", () => {
227
+ const s = formatBugTruth();
228
+ expect(s).toContain("🔴");
229
+ expect(s).toContain("why:");
230
+ expect(s).toContain("use:");
231
+ });
232
+ });
233
+ // ============================================================
234
+ // Full list of phrases that MUST work — regression suite
235
+ // ============================================================
236
+ describe("v1.97 CLONE-TO · regression suite of 'phrases that must work'", () => {
237
+ // Each entry: { phrase, expectedTarget }
238
+ const cases = [
239
+ { phrase: "ย้าย mneme ไปใส่ใน mobile หน่อย", expected: "mobile" },
240
+ { phrase: "ส่งความจำของ mneme ไปใน gemini", expected: "gemini" },
241
+ { phrase: "ส่งสมองไปมือถือ", expected: "mobile" },
242
+ { phrase: "ส่งสมองไป iphone", expected: "mobile" },
243
+ { phrase: "ส่งไป android", expected: "mobile" },
244
+ { phrase: "clone brain to ipad", expected: "ipad" },
245
+ { phrase: "send mneme to chat gpt", expected: "chatgpt" },
246
+ { phrase: "sync to claude.ai", expected: "claude" },
247
+ { phrase: "ส่ง mneme ไป copilot", expected: "copilot" },
248
+ { phrase: "give brain to perplexity", expected: "perplexity" },
249
+ { phrase: "ก๊อปไป tablet", expected: "ipad" },
250
+ { phrase: "send brain to my second laptop", expected: "another-pc" },
251
+ { phrase: "clone to localhost", expected: "this-pc" },
252
+ { phrase: "send mneme to browser on this pc", expected: "this-pc" },
253
+ { phrase: "pack mneme as a file", expected: "usb" },
254
+ { phrase: "send back to my pc", expected: "return" },
255
+ { phrase: "Mneme ส่งไป google ai หน่อย", expected: "gemini" },
256
+ { phrase: "share mneme กับ openai", expected: "chatgpt" },
257
+ ];
258
+ for (const { phrase, expected } of cases) {
259
+ it(`'${phrase}' → ${expected}`, () => {
260
+ const r = parseCloneIntent(phrase);
261
+ expect(r.target).toBe(expected);
262
+ expect(r.isCloneRequest).toBe(true);
263
+ });
264
+ }
265
+ });
266
+ //# sourceMappingURL=clone_to.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone_to.test.js","sourceRoot":"","sources":["../../src/rainbow/clone_to.test.ts"],"names":[],"mappings":"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"}
@@ -49,8 +49,5 @@ export interface RainbowInputs {
49
49
  /** Build the channel status report. UI layer (browser/CLI) renders the
50
50
  * actual QR codes; this module just decides which channels are LIVE. */
51
51
  export declare function probeChannels(soul: SoulPrompt, input: RainbowInputs): RainbowHandoff;
52
- /** Build the data: URL bridge -- the wild move. Tiny HTML page that
53
- * fetches soul from dpaste + renders Web Share button. Whole thing
54
- * fits in a QR because the soul is fetched, not embedded. */
55
52
  export declare function buildDataBridgeUrl(dpasteUrl: string): string;
56
53
  //# sourceMappingURL=handoff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/rainbow/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnG,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,sDAAsD;IACtD,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;yEACyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,cAAc,CAiDpF;AAED;;8DAE8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB5D"}
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/rainbow/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnG,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,sDAAsD;IACtD,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;yEACyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,cAAc,CAiDpF;AAUD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuB5D"}
@@ -67,10 +67,20 @@ export function probeChannels(soul, input) {
67
67
  const summary = `${liveCount}/3 channels live (v1.89). Recommended: ${recommended ?? "none"}.`;
68
68
  return { soul, channels, recommended, summary };
69
69
  }
70
- /** Build the data: URL bridge -- the wild move. Tiny HTML page that
71
- * fetches soul from dpaste + renders Web Share button. Whole thing
72
- * fits in a QR because the soul is fetched, not embedded. */
70
+ /** @deprecated v1.97 DO NOT USE. See bug_truth.ts for the 4 reasons
71
+ * this fails on every free-tier Web AI. Use rainbow.clone_to.cloneTo
72
+ * with target "chatgpt" / "gemini" / "claude" instead those rely on
73
+ * CLIPBOARD (which every Web AI supports) not WEB-FETCH (which most
74
+ * free-tier Web AIs lack).
75
+ * Kept as an export for backward compatibility; emits a console.warn
76
+ * on first call to alert any caller still depending on this. */
77
+ let _dataBridgeWarned = false;
73
78
  export function buildDataBridgeUrl(dpasteUrl) {
79
+ if (!_dataBridgeWarned) {
80
+ _dataBridgeWarned = true;
81
+ // eslint-disable-next-line no-console
82
+ console.warn("[mneme] buildDataBridgeUrl is DEPRECATED (v1.97). See rainbow.bug_truth + rainbow.clone_to for the working clipboard-based replacement.");
83
+ }
74
84
  const wrapper = `<!doctype html><html><head>` +
75
85
  `<meta name="viewport" content="width=device-width,initial-scale=1">` +
76
86
  `<title>Mneme</title>` +
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/rainbow/handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/rainbow/handoff.ts"],"names":[],"mappings":"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"}
@@ -19,4 +19,9 @@ export * from "./page_renderer.js";
19
19
  export * from "./same_shell.js";
20
20
  export * from "./phoenix.js";
21
21
  export * from "./boomerang.js";
22
+ export * from "./clone_to.js";
23
+ export * from "./bug_truth.js";
24
+ export * from "./vendor_strategy.js";
25
+ export * from "./vendor_probe.js";
26
+ export * from "./passport.js";
22
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rainbow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rainbow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAI/B,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAI/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,mBAAmB,CAAC;AAIlC,cAAc,eAAe,CAAC"}
@@ -19,4 +19,22 @@ export * from "./page_renderer.js";
19
19
  export * from "./same_shell.js";
20
20
  export * from "./phoenix.js";
21
21
  export * from "./boomerang.js";
22
+ // v1.97 — clone_to: universal Thai+English+mixed intent parser →
23
+ // transport plan → auto-open browser. The ONE function AI agents call
24
+ // when user says ANY phrase about sending/cloning/syncing brain.
25
+ export * from "./clone_to.js";
26
+ // v1.97 — bug_truth: honest postmortem on v1.85 RELAY (4 bugs the user
27
+ // caught us in). Replacement is clone_to.cloneTo with clipboard transport.
28
+ export * from "./bug_truth.js";
29
+ // v1.98 — vendor_strategy: explicit per-vendor strategy map (clipboard-first /
30
+ // plain-qr / mcp-direct / prefill-and-paste / app-deeplink-NA). Replaces the
31
+ // broken "one-size-fits-all RELAY" assumption.
32
+ export * from "./vendor_strategy.js";
33
+ // v1.98 — vendor_probe: HEAD-request probe that catches stale URLs in CI.
34
+ // Closes the "comment lies" gap (chat.openai.com was stale for 1+ year).
35
+ export * from "./vendor_probe.js";
36
+ // v1.98 — passport: portable HMAC-signed identity bundle for vendor-agnostic
37
+ // context portability. The disruption move — user owns the brain, vendor
38
+ // doesn't. ANY AI can READ + ANY holder of the secret can VERIFY.
39
+ export * from "./passport.js";
22
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rainbow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rainbow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,iEAAiE;AACjE,sEAAsE;AACtE,iEAAiE;AACjE,cAAc,eAAe,CAAC;AAC9B,uEAAuE;AACvE,2EAA2E;AAC3E,cAAc,gBAAgB,CAAC;AAC/B,+EAA+E;AAC/E,6EAA6E;AAC7E,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AACrC,0EAA0E;AAC1E,yEAAyE;AACzE,cAAc,mBAAmB,CAAC;AAClC,6EAA6E;AAC7E,yEAAyE;AACzE,kEAAkE;AAClE,cAAc,eAAe,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * v1.98.0 -- RAINBOW · MNEME PASSPORT (the disruption play).
3
+ *
4
+ * "Until today, every AI vendor was the warden of your context.
5
+ * Tomorrow, you hand the AI a passport and the warden disappears."
6
+ *
7
+ * The current state of AI vendor lock-in:
8
+ * - ChatGPT remembers YOUR conversation history — in their cloud.
9
+ * - Claude.ai remembers YOUR conversation history — in their cloud.
10
+ * - Gemini remembers — in theirs.
11
+ * - Switching vendors = losing your memory. You start over every time.
12
+ * - This is the lock-in. It's worth billions to vendors.
13
+ *
14
+ * Mneme PASSPORT inverts this:
15
+ * - The user (you) carries a small, signed, portable identity bundle.
16
+ * - It contains the LAST N decisions / regrets / wisdoms from your repo.
17
+ * - It's HMAC-chained — every entry is cryptographically tamper-evident.
18
+ * - It's PORTABLE — handed to ANY AI as a "here's who I am" capsule.
19
+ * - It's VERIFIABLE — the AI can mathematically check no entry was forged.
20
+ * - It's MINIMAL — ~2-4 KB, fits in a single chat message.
21
+ *
22
+ * The disruption thesis:
23
+ * - Today: AI vendor owns the user's context. Switching = losing.
24
+ * - Tomorrow: User owns the context. Switching = trivial.
25
+ * - The vendor that adopts PASSPORT first signals "we don't lock you in"
26
+ * and wins trust. The ones who refuse become walls.
27
+ *
28
+ * What this file ships:
29
+ * 1. PASSPORT data structure (JSON, ~2-4 KB typical)
30
+ * 2. HMAC chain over the entries (tamper-evident)
31
+ * 3. Signer (with the user's local secret)
32
+ * 4. Verifier (anyone with the public bundle metadata can check)
33
+ * 5. Serializer/parser (the wire format every AI can read)
34
+ * 6. Token-bounded "fits in one message" helper
35
+ *
36
+ * Honest scope: this is the v1.98 SEED of the disruption. The fuller
37
+ * play — vendor adoption, multi-user federation, an open standard —
38
+ * is community + market work that ships if/when vendors say yes. The
39
+ * code is here today.
40
+ */
41
+ export interface PassportEntry {
42
+ /** Stable id. */
43
+ id: string;
44
+ /** Wall-clock when the entry was recorded. */
45
+ ts: number;
46
+ /** Entry class — what kind of memory. */
47
+ kind: "decision" | "regret" | "wisdom" | "vaccine" | "preference";
48
+ /** Short narrative — 1-3 lines max. */
49
+ text: string;
50
+ /** Optional commit / file / scope context. */
51
+ scope?: string;
52
+ }
53
+ export interface PassportEnvelope {
54
+ /** Public identity (e.g. "Shinnapat @ mneme-ai", or just a hash if private). */
55
+ holder: string;
56
+ /** Issuance timestamp. */
57
+ issuedAt: number;
58
+ /** Expiration timestamp (default: issuedAt + 90 days). */
59
+ expiresAt: number;
60
+ /** Last N entries — order matters; newer first. */
61
+ entries: PassportEntry[];
62
+ /** SHA-256 fingerprint of the entries (for fast equality + linking). */
63
+ entriesHash: string;
64
+ /** HMAC-SHA256 over (holder || issuedAt || expiresAt || entriesHash). */
65
+ signature: string;
66
+ /** Algorithm + key id (so verifiers know which key to use). */
67
+ alg: "HMAC-SHA256";
68
+ /** Public key fingerprint (NOT the secret) — used as identity lookup. */
69
+ keyFingerprint: string;
70
+ }
71
+ /** Hash a list of entries deterministically for tamper-evidence. */
72
+ export declare function fingerprintEntries(entries: readonly PassportEntry[]): string;
73
+ export interface IssuePassportInput {
74
+ holder: string;
75
+ entries: readonly PassportEntry[];
76
+ /** User's local HMAC secret. Loaded from .mneme/passport.secret typically. */
77
+ secret: Buffer;
78
+ /** TTL in days. Default 90. */
79
+ ttlDays?: number;
80
+ /** Cap on entries included. Default 50. */
81
+ maxEntries?: number;
82
+ }
83
+ /** Issue a fresh passport. Trims to maxEntries (newest first). HMAC-signs. */
84
+ export declare function issuePassport(input: IssuePassportInput): PassportEnvelope;
85
+ export type VerificationVerdict = "VALID" | "EXPIRED" | "TAMPERED" | "WRONG_KEY";
86
+ export interface VerificationResult {
87
+ verdict: VerificationVerdict;
88
+ /** Why the verdict was reached (for the human / AI). */
89
+ reason: string;
90
+ /** True if verdict is VALID. Convenience. */
91
+ ok: boolean;
92
+ }
93
+ /** Verify a passport using the same secret it was signed with. */
94
+ export declare function verifyPassport(envelope: PassportEnvelope, secret: Buffer): VerificationResult;
95
+ /** Serialize to a compact JSON string suitable for pasting into ANY AI's
96
+ * chat box. Includes a header comment so the AI knows what it is. */
97
+ export declare function serializePassport(envelope: PassportEnvelope): string;
98
+ /** Parse a serialized passport string back into an envelope. */
99
+ export declare function parsePassport(text: string): PassportEnvelope | null;
100
+ /** Generate a fresh HMAC secret. Use ONCE per user; persist to .mneme/passport.secret. */
101
+ export declare function generatePassportSecret(): Buffer;
102
+ /** Rough token estimate for the serialized passport (so callers can ensure
103
+ * it fits in a single chat message). */
104
+ export declare function estimatePassportTokens(envelope: PassportEnvelope): number;
105
+ /** One-line summary suitable for the pulse. */
106
+ export declare function formatPassportPulseLine(envelope: PassportEnvelope, verification?: VerificationResult): string;
107
+ //# sourceMappingURL=passport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport.d.ts","sourceRoot":"","sources":["../../src/rainbow/passport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;IAClE,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,GAAG,EAAE,aAAa,CAAC;IACnB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAM5E;AAaD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,gBAAgB,CAkBzE;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,EAAE,EAAE,OAAO,CAAC;CACb;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAgB7F;AAED;sEACsE;AACtE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAYpE;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAYnE;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;yCACyC;AACzC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAK7G"}