@mneme-ai/core 1.84.0 → 1.86.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 (62) hide show
  1. package/dist/agent_manifest.d.ts +1 -1
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +9 -1
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/chameleon/chameleon.test.d.ts +2 -0
  6. package/dist/chameleon/chameleon.test.d.ts.map +1 -0
  7. package/dist/chameleon/chameleon.test.js +143 -0
  8. package/dist/chameleon/chameleon.test.js.map +1 -0
  9. package/dist/chameleon/env_probe.d.ts +50 -0
  10. package/dist/chameleon/env_probe.d.ts.map +1 -0
  11. package/dist/chameleon/env_probe.js +125 -0
  12. package/dist/chameleon/env_probe.js.map +1 -0
  13. package/dist/chameleon/index.d.ts +16 -0
  14. package/dist/chameleon/index.d.ts.map +1 -0
  15. package/dist/chameleon/index.js +16 -0
  16. package/dist/chameleon/index.js.map +1 -0
  17. package/dist/chameleon/spore_gate.d.ts +42 -0
  18. package/dist/chameleon/spore_gate.d.ts.map +1 -0
  19. package/dist/chameleon/spore_gate.js +86 -0
  20. package/dist/chameleon/spore_gate.js.map +1 -0
  21. package/dist/chameleon/transport_select.d.ts +19 -0
  22. package/dist/chameleon/transport_select.d.ts.map +1 -0
  23. package/dist/chameleon/transport_select.js +61 -0
  24. package/dist/chameleon/transport_select.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +10 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/lattice/intent_atoms.d.ts.map +1 -1
  30. package/dist/lattice/intent_atoms.js +79 -0
  31. package/dist/lattice/intent_atoms.js.map +1 -1
  32. package/dist/lineage/spore.d.ts +4 -1
  33. package/dist/lineage/spore.d.ts.map +1 -1
  34. package/dist/lineage/spore.js +14 -1
  35. package/dist/lineage/spore.js.map +1 -1
  36. package/dist/neuron/triage.d.ts.map +1 -1
  37. package/dist/neuron/triage.js +4 -1
  38. package/dist/neuron/triage.js.map +1 -1
  39. package/dist/relay/encrypted_payload.d.ts +33 -0
  40. package/dist/relay/encrypted_payload.d.ts.map +1 -0
  41. package/dist/relay/encrypted_payload.js +65 -0
  42. package/dist/relay/encrypted_payload.js.map +1 -0
  43. package/dist/relay/index.d.ts +16 -0
  44. package/dist/relay/index.d.ts.map +1 -0
  45. package/dist/relay/index.js +16 -0
  46. package/dist/relay/index.js.map +1 -0
  47. package/dist/relay/mobile_recipe.d.ts +35 -0
  48. package/dist/relay/mobile_recipe.d.ts.map +1 -0
  49. package/dist/relay/mobile_recipe.js +35 -0
  50. package/dist/relay/mobile_recipe.js.map +1 -0
  51. package/dist/relay/paste_backend.d.ts +47 -0
  52. package/dist/relay/paste_backend.d.ts.map +1 -0
  53. package/dist/relay/paste_backend.js +94 -0
  54. package/dist/relay/paste_backend.js.map +1 -0
  55. package/dist/relay/relay.test.d.ts +2 -0
  56. package/dist/relay/relay.test.d.ts.map +1 -0
  57. package/dist/relay/relay.test.js +108 -0
  58. package/dist/relay/relay.test.js.map +1 -0
  59. package/dist/synapse/token_compression.d.ts.map +1 -1
  60. package/dist/synapse/token_compression.js +27 -0
  61. package/dist/synapse/token_compression.js.map +1 -1
  62. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: symmetric encryption using NEXUS code as key.
3
+ *
4
+ * Strangers fetching a paste URL get garbage. Only the user (who knows
5
+ * the 6-char NEXUS code, shared out-of-band) can decrypt.
6
+ *
7
+ * Crypto: AES-256-GCM (auth-encrypt) with PBKDF2-SHA256 key derivation
8
+ * from (NEXUS code + salt). Salt is embedded in the ciphertext header
9
+ * so the destination only needs the code.
10
+ *
11
+ * NEXUS code is 6 chars over a 31-char alphabet -> ~30 bits of entropy.
12
+ * This is intentionally LOW so the user can type it on a phone -- not
13
+ * a password. PBKDF2 with 200k iterations adds compute cost so brute
14
+ * force against a captured ciphertext requires real work. Combined
15
+ * with the URL being short-lived (7-30 days on paste services), this
16
+ * is appropriate threat-model security for AI conversation snippets.
17
+ */
18
+ import { randomBytes, createCipheriv, createDecipheriv, pbkdf2Sync } from "node:crypto";
19
+ const KDF_ITERATIONS = 200_000;
20
+ const SALT_BYTES = 16;
21
+ const IV_BYTES = 12;
22
+ const TAG_BYTES = 16;
23
+ const ENVELOPE_PREFIX = "MNEME-NEXUS-ENC-1\n";
24
+ function deriveKey(code, salt) {
25
+ return pbkdf2Sync(code, salt, KDF_ITERATIONS, 32, "sha256");
26
+ }
27
+ export function encryptWithCode(plaintext, nexusCode) {
28
+ const salt = randomBytes(SALT_BYTES);
29
+ const iv = randomBytes(IV_BYTES);
30
+ const key = deriveKey(nexusCode, salt);
31
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
32
+ const ct = Buffer.concat([cipher.update(plaintext, "utf8"), cipher.final()]);
33
+ const tag = cipher.getAuthTag();
34
+ const combined = Buffer.concat([salt, iv, tag, ct]);
35
+ return {
36
+ text: ENVELOPE_PREFIX + combined.toString("base64url"),
37
+ algorithm: "aes-256-gcm",
38
+ iterations: KDF_ITERATIONS,
39
+ };
40
+ }
41
+ export function decryptWithCode(envelope, nexusCode) {
42
+ if (!envelope.startsWith(ENVELOPE_PREFIX)) {
43
+ return { ok: false, reason: "not-envelope" };
44
+ }
45
+ try {
46
+ const body = envelope.slice(ENVELOPE_PREFIX.length).trim();
47
+ const combined = Buffer.from(body, "base64url");
48
+ if (combined.length < SALT_BYTES + IV_BYTES + TAG_BYTES + 1) {
49
+ return { ok: false, reason: "malformed" };
50
+ }
51
+ const salt = combined.subarray(0, SALT_BYTES);
52
+ const iv = combined.subarray(SALT_BYTES, SALT_BYTES + IV_BYTES);
53
+ const tag = combined.subarray(SALT_BYTES + IV_BYTES, SALT_BYTES + IV_BYTES + TAG_BYTES);
54
+ const ct = combined.subarray(SALT_BYTES + IV_BYTES + TAG_BYTES);
55
+ const key = deriveKey(nexusCode, salt);
56
+ const decipher = createDecipheriv("aes-256-gcm", key, iv);
57
+ decipher.setAuthTag(tag);
58
+ const pt = Buffer.concat([decipher.update(ct), decipher.final()]);
59
+ return { ok: true, plaintext: pt.toString("utf8") };
60
+ }
61
+ catch {
62
+ return { ok: false, reason: "wrong-code-or-tampered" };
63
+ }
64
+ }
65
+ //# sourceMappingURL=encrypted_payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypted_payload.js","sourceRoot":"","sources":["../../src/relay/encrypted_payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: paste-backed cross-vendor brain transport.
3
+ *
4
+ * paste_backend -- upload soul to public anonymous paste services
5
+ * encrypted_payload -- AES-256-GCM with NEXUS code as derived key
6
+ * mobile_recipe -- single-line prompt + QR for mobile AI apps
7
+ *
8
+ * Net effect: PC mints NEXUS code + encrypts soul + uploads to a public
9
+ * paste service. Mobile user gets ONE LINE to paste in Gemini/Claude/
10
+ * ChatGPT. The AI fetches, decrypts, resumes. No cloud deploy on our
11
+ * side; no Mneme install on destination.
12
+ */
13
+ export * from "./paste_backend.js";
14
+ export * from "./encrypted_payload.js";
15
+ export * from "./mobile_recipe.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: paste-backed cross-vendor brain transport.
3
+ *
4
+ * paste_backend -- upload soul to public anonymous paste services
5
+ * encrypted_payload -- AES-256-GCM with NEXUS code as derived key
6
+ * mobile_recipe -- single-line prompt + QR for mobile AI apps
7
+ *
8
+ * Net effect: PC mints NEXUS code + encrypts soul + uploads to a public
9
+ * paste service. Mobile user gets ONE LINE to paste in Gemini/Claude/
10
+ * ChatGPT. The AI fetches, decrypts, resumes. No cloud deploy on our
11
+ * side; no Mneme install on destination.
12
+ */
13
+ export * from "./paste_backend.js";
14
+ export * from "./encrypted_payload.js";
15
+ export * from "./mobile_recipe.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: render a mobile-friendly recipe for the destination.
3
+ *
4
+ * Given a paste URL + NEXUS code, generate a single short instruction
5
+ * the source AI can read aloud (or print) to the user. Covers the
6
+ * three realistic destination kinds:
7
+ *
8
+ * 1. Mobile AI app (Gemini / Claude / ChatGPT mobile): user pastes
9
+ * a one-line prompt: "Fetch <URL>. Decryption code: <code>.
10
+ * Resume the conversation."
11
+ * 2. Mneme-aware editor (Cursor / Continue / Cline on second laptop):
12
+ * "Run mneme.synapse.resolve_code with code=<code>".
13
+ * 3. Web AI (chatgpt.com / gemini.google.com in browser): user pastes
14
+ * the same one-liner; AI fetches + decrypts.
15
+ *
16
+ * Returns the recipe + a QR-friendly payload combining URL + code.
17
+ */
18
+ export interface MobileRecipe {
19
+ /** The URL the receiving AI fetches. */
20
+ url: string;
21
+ /** The 6-char NEXUS decryption code. */
22
+ code: string;
23
+ /** Optimal single-line prompt the user pastes into a mobile AI app. */
24
+ mobilePrompt: string;
25
+ /** QR-friendly combined payload: `mneme:<code>|<url>` */
26
+ qrPayload: string;
27
+ /** Three rendered instructions, one per destination kind. */
28
+ instructions: {
29
+ mobileAiApp: string;
30
+ mnemeAwareEditor: string;
31
+ webAi: string;
32
+ };
33
+ }
34
+ export declare function renderMobileRecipe(url: string, code: string): MobileRecipe;
35
+ //# sourceMappingURL=mobile_recipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile_recipe.d.ts","sourceRoot":"","sources":["../../src/relay/mobile_recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAoB1E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: render a mobile-friendly recipe for the destination.
3
+ *
4
+ * Given a paste URL + NEXUS code, generate a single short instruction
5
+ * the source AI can read aloud (or print) to the user. Covers the
6
+ * three realistic destination kinds:
7
+ *
8
+ * 1. Mobile AI app (Gemini / Claude / ChatGPT mobile): user pastes
9
+ * a one-line prompt: "Fetch <URL>. Decryption code: <code>.
10
+ * Resume the conversation."
11
+ * 2. Mneme-aware editor (Cursor / Continue / Cline on second laptop):
12
+ * "Run mneme.synapse.resolve_code with code=<code>".
13
+ * 3. Web AI (chatgpt.com / gemini.google.com in browser): user pastes
14
+ * the same one-liner; AI fetches + decrypts.
15
+ *
16
+ * Returns the recipe + a QR-friendly payload combining URL + code.
17
+ */
18
+ export function renderMobileRecipe(url, code) {
19
+ const mobilePrompt = `Fetch the URL ${url}. The text is encrypted with this NEXUS code: ${code}. ` +
20
+ `Decrypt it (AES-256-GCM with PBKDF2-SHA256 200k iterations, salt+iv+tag prefixed). ` +
21
+ `The plaintext is a Mneme soul prompt -- resume the conversation from there.`;
22
+ const qrPayload = `mneme:${code}|${url}`;
23
+ return {
24
+ url,
25
+ code,
26
+ mobilePrompt,
27
+ qrPayload,
28
+ instructions: {
29
+ mobileAiApp: `Open your AI app (Claude / Gemini / ChatGPT) and paste this single line:\n\n ${mobilePrompt}\n\nThe AI will fetch the URL, decrypt with the code, and resume.`,
30
+ mnemeAwareEditor: `On the destination machine (with Mneme installed), say to the AI:\n\n "resolve nexus code ${code} from ${url}"\n\nThe AI will call mneme.synapse.resolve_code and decrypt locally.`,
31
+ webAi: `In any web AI (chatgpt.com / gemini.google.com / claude.ai), paste:\n\n ${mobilePrompt}\n\nThe AI will use its web-fetch ability + decrypt.`,
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=mobile_recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile_recipe.js","sourceRoot":"","sources":["../../src/relay/mobile_recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmBH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,IAAY;IAC1D,MAAM,YAAY,GAChB,iBAAiB,GAAG,iDAAiD,IAAI,IAAI;QAC7E,qFAAqF;QACrF,6EAA6E,CAAC;IAChF,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;IACzC,OAAO;QACL,GAAG;QACH,IAAI;QACJ,YAAY;QACZ,SAAS;QACT,YAAY,EAAE;YACZ,WAAW,EACT,iFAAiF,YAAY,mEAAmE;YAClK,gBAAgB,EACd,8FAA8F,IAAI,SAAS,GAAG,uEAAuE;YACvL,KAAK,EACH,4EAA4E,YAAY,sDAAsD;SACjJ;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: anonymous public paste backends.
3
+ *
4
+ * The pain user surfaced: NEXUS code 6 ตัว ทำงานเฉพาะ PC↔PC ที่มี Mneme
5
+ * ทั้งสองข้าง. Mobile AI apps (Gemini/Claude/ChatGPT) ไม่มี Mneme +
6
+ * resolve code ไม่ได้ → hallucinate.
7
+ *
8
+ * RELAY fixes this WITHOUT deploying any cloud infrastructure: upload
9
+ * the soul prompt to a PUBLIC ANONYMOUS paste service, return the
10
+ * short URL. Mobile AI apps can fetch URLs (they have web access).
11
+ *
12
+ * PC: AI mints soul → uploads to dpaste.com/<id> → returns URL
13
+ * PC: shows QR with the URL embedded
14
+ * Mobile: scans QR (or types URL) → AI fetches → reads soul → resumes
15
+ *
16
+ * Multiple backends so user has fallback:
17
+ * - dpaste.com (anonymous, 7-day default expiry, raw URL)
18
+ * - paste.rs (anonymous, 30-day, ultra-minimal)
19
+ * - 0x0.st (anonymous, expires by size, raw)
20
+ *
21
+ * Privacy: combine with encrypted_payload.ts -- the URL serves the
22
+ * ciphertext; only the user's NEXUS code (out-of-band) can decrypt.
23
+ * Strangers fetching the URL get garbage bytes.
24
+ */
25
+ export type RelayBackendId = "dpaste" | "pasters" | "zero-x-zero";
26
+ export interface RelayUploadResult {
27
+ ok: boolean;
28
+ url: string | null;
29
+ backend: RelayBackendId;
30
+ reason?: string;
31
+ expiresIn: string;
32
+ }
33
+ export interface UploadInput {
34
+ content: string;
35
+ /** Test seam -- inject a stub fetcher for unit tests. */
36
+ fetchImpl?: typeof fetch;
37
+ }
38
+ /** Upload to dpaste.com. */
39
+ export declare function uploadToDpaste(input: UploadInput): Promise<RelayUploadResult>;
40
+ /** Upload to paste.rs (ultra-minimal, anonymous). */
41
+ export declare function uploadToPasteRs(input: UploadInput): Promise<RelayUploadResult>;
42
+ /** Upload to 0x0.st (anonymous file drop). */
43
+ export declare function uploadToZeroXZero(input: UploadInput): Promise<RelayUploadResult>;
44
+ /** Try backends in order; return first success. Lets the user have a
45
+ * graceful fallback if any service is rate-limited or down. */
46
+ export declare function uploadWithFallback(input: UploadInput, order?: RelayBackendId[]): Promise<RelayUploadResult>;
47
+ //# sourceMappingURL=paste_backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste_backend.d.ts","sourceRoot":"","sources":["../../src/relay/paste_backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,4BAA4B;AAC5B,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkBnF;AAED,qDAAqD;AACrD,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAcpF;AAED,8CAA8C;AAC9C,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYtF;AAED;gEACgE;AAChE,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,GAAE,cAAc,EAAyC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASvJ"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * v1.85.0 -- RELAY: anonymous public paste backends.
3
+ *
4
+ * The pain user surfaced: NEXUS code 6 ตัว ทำงานเฉพาะ PC↔PC ที่มี Mneme
5
+ * ทั้งสองข้าง. Mobile AI apps (Gemini/Claude/ChatGPT) ไม่มี Mneme +
6
+ * resolve code ไม่ได้ → hallucinate.
7
+ *
8
+ * RELAY fixes this WITHOUT deploying any cloud infrastructure: upload
9
+ * the soul prompt to a PUBLIC ANONYMOUS paste service, return the
10
+ * short URL. Mobile AI apps can fetch URLs (they have web access).
11
+ *
12
+ * PC: AI mints soul → uploads to dpaste.com/<id> → returns URL
13
+ * PC: shows QR with the URL embedded
14
+ * Mobile: scans QR (or types URL) → AI fetches → reads soul → resumes
15
+ *
16
+ * Multiple backends so user has fallback:
17
+ * - dpaste.com (anonymous, 7-day default expiry, raw URL)
18
+ * - paste.rs (anonymous, 30-day, ultra-minimal)
19
+ * - 0x0.st (anonymous, expires by size, raw)
20
+ *
21
+ * Privacy: combine with encrypted_payload.ts -- the URL serves the
22
+ * ciphertext; only the user's NEXUS code (out-of-band) can decrypt.
23
+ * Strangers fetching the URL get garbage bytes.
24
+ */
25
+ /** Upload to dpaste.com. */
26
+ export async function uploadToDpaste(input) {
27
+ const fetchImpl = input.fetchImpl ?? fetch;
28
+ try {
29
+ const form = new URLSearchParams();
30
+ form.set("content", input.content);
31
+ form.set("syntax", "text");
32
+ form.set("expiry_days", "7");
33
+ const res = await fetchImpl("https://dpaste.com/api/v2/", {
34
+ method: "POST",
35
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
36
+ body: form.toString(),
37
+ });
38
+ if (!res.ok)
39
+ return { ok: false, url: null, backend: "dpaste", reason: `HTTP ${res.status}`, expiresIn: "7d" };
40
+ const url = (await res.text()).trim();
41
+ return { ok: true, url: url.endsWith(".txt") ? url : url + ".txt", backend: "dpaste", expiresIn: "7d" };
42
+ }
43
+ catch (e) {
44
+ return { ok: false, url: null, backend: "dpaste", reason: e.message, expiresIn: "7d" };
45
+ }
46
+ }
47
+ /** Upload to paste.rs (ultra-minimal, anonymous). */
48
+ export async function uploadToPasteRs(input) {
49
+ const fetchImpl = input.fetchImpl ?? fetch;
50
+ try {
51
+ const res = await fetchImpl("https://paste.rs/", {
52
+ method: "POST",
53
+ headers: { "Content-Type": "text/plain" },
54
+ body: input.content,
55
+ });
56
+ if (!res.ok)
57
+ return { ok: false, url: null, backend: "pasters", reason: `HTTP ${res.status}`, expiresIn: "30d" };
58
+ const url = (await res.text()).trim();
59
+ return { ok: true, url, backend: "pasters", expiresIn: "30d" };
60
+ }
61
+ catch (e) {
62
+ return { ok: false, url: null, backend: "pasters", reason: e.message, expiresIn: "30d" };
63
+ }
64
+ }
65
+ /** Upload to 0x0.st (anonymous file drop). */
66
+ export async function uploadToZeroXZero(input) {
67
+ const fetchImpl = input.fetchImpl ?? fetch;
68
+ try {
69
+ const form = new FormData();
70
+ form.set("file", new Blob([input.content], { type: "text/plain" }), "soul.txt");
71
+ const res = await fetchImpl("https://0x0.st/", { method: "POST", body: form });
72
+ if (!res.ok)
73
+ return { ok: false, url: null, backend: "zero-x-zero", reason: `HTTP ${res.status}`, expiresIn: "size-based" };
74
+ const url = (await res.text()).trim();
75
+ return { ok: true, url, backend: "zero-x-zero", expiresIn: "size-based" };
76
+ }
77
+ catch (e) {
78
+ return { ok: false, url: null, backend: "zero-x-zero", reason: e.message, expiresIn: "size-based" };
79
+ }
80
+ }
81
+ /** Try backends in order; return first success. Lets the user have a
82
+ * graceful fallback if any service is rate-limited or down. */
83
+ export async function uploadWithFallback(input, order = ["dpaste", "pasters", "zero-x-zero"]) {
84
+ const errors = [];
85
+ for (const id of order) {
86
+ const fn = id === "dpaste" ? uploadToDpaste : id === "pasters" ? uploadToPasteRs : uploadToZeroXZero;
87
+ const r = await fn(input);
88
+ if (r.ok)
89
+ return r;
90
+ errors.push(`${id}: ${r.reason ?? "unknown"}`);
91
+ }
92
+ return { ok: false, url: null, backend: order[order.length - 1], reason: `all backends failed: ${errors.join(" | ")}`, expiresIn: "n/a" };
93
+ }
94
+ //# sourceMappingURL=paste_backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste_backend.js","sourceRoot":"","sources":["../../src/relay/paste_backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=relay.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.test.d.ts","sourceRoot":"","sources":["../../src/relay/relay.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { uploadToDpaste, uploadToPasteRs, uploadToZeroXZero, uploadWithFallback } from "./paste_backend.js";
3
+ import { encryptWithCode, decryptWithCode } from "./encrypted_payload.js";
4
+ import { renderMobileRecipe } from "./mobile_recipe.js";
5
+ function mockFetch(status, body) {
6
+ return (async () => new Response(body, { status }));
7
+ }
8
+ describe("v1.85 RELAY · paste backends (mocked)", () => {
9
+ it("dpaste upload returns URL on 200", async () => {
10
+ const r = await uploadToDpaste({ content: "soul", fetchImpl: mockFetch(200, "https://dpaste.com/AB12CD") });
11
+ expect(r.ok).toBe(true);
12
+ expect(r.url).toContain("dpaste.com");
13
+ expect(r.backend).toBe("dpaste");
14
+ });
15
+ it("dpaste failure returns ok=false with reason", async () => {
16
+ const r = await uploadToDpaste({ content: "soul", fetchImpl: mockFetch(500, "internal error") });
17
+ expect(r.ok).toBe(false);
18
+ expect(r.reason).toContain("500");
19
+ });
20
+ it("paste.rs upload returns URL on 200", async () => {
21
+ const r = await uploadToPasteRs({ content: "soul", fetchImpl: mockFetch(200, "https://paste.rs/aBcD") });
22
+ expect(r.ok).toBe(true);
23
+ expect(r.url).toBe("https://paste.rs/aBcD");
24
+ expect(r.backend).toBe("pasters");
25
+ });
26
+ it("0x0.st upload returns URL on 200", async () => {
27
+ const r = await uploadToZeroXZero({ content: "soul", fetchImpl: mockFetch(200, "https://0x0.st/abcd.txt") });
28
+ expect(r.ok).toBe(true);
29
+ expect(r.url).toContain("0x0.st");
30
+ });
31
+ it("uploadWithFallback tries each backend in order", async () => {
32
+ // First backend fails, second succeeds.
33
+ let attempt = 0;
34
+ const fetchImpl = (async () => {
35
+ attempt += 1;
36
+ if (attempt === 1)
37
+ return new Response("rate-limit", { status: 429 });
38
+ return new Response("https://paste.rs/AB", { status: 200 });
39
+ });
40
+ const r = await uploadWithFallback({ content: "soul", fetchImpl }, ["dpaste", "pasters"]);
41
+ expect(r.ok).toBe(true);
42
+ expect(r.backend).toBe("pasters");
43
+ });
44
+ it("uploadWithFallback returns combined errors when all fail", async () => {
45
+ const r = await uploadWithFallback({ content: "soul", fetchImpl: mockFetch(500, "err") }, ["dpaste", "pasters"]);
46
+ expect(r.ok).toBe(false);
47
+ expect(r.reason).toContain("all backends failed");
48
+ expect(r.reason).toContain("dpaste");
49
+ expect(r.reason).toContain("pasters");
50
+ });
51
+ });
52
+ describe("v1.85 RELAY · encrypted payload", () => {
53
+ it("encrypt + decrypt round-trip recovers the plaintext", () => {
54
+ const env = encryptWithCode("# SOUL\nbody body body", "K7M9X2");
55
+ const r = decryptWithCode(env.text, "K7M9X2");
56
+ expect(r.ok).toBe(true);
57
+ if (r.ok)
58
+ expect(r.plaintext).toBe("# SOUL\nbody body body");
59
+ });
60
+ it("wrong code fails decryption (auth tag mismatch)", () => {
61
+ const env = encryptWithCode("secret", "K7M9X2");
62
+ const r = decryptWithCode(env.text, "WRONGC");
63
+ expect(r.ok).toBe(false);
64
+ if (!r.ok)
65
+ expect(r.reason).toBe("wrong-code-or-tampered");
66
+ });
67
+ it("garbage envelope returns not-envelope", () => {
68
+ const r = decryptWithCode("not a real envelope", "ANY123");
69
+ expect(r.ok).toBe(false);
70
+ if (!r.ok)
71
+ expect(r.reason).toBe("not-envelope");
72
+ });
73
+ it("tampered ciphertext is detected by auth tag", () => {
74
+ const env = encryptWithCode("secret", "K7M9X2");
75
+ // Mutate one char in the base64url body
76
+ const head = env.text.slice(0, 30);
77
+ const tail = env.text.slice(31);
78
+ const tampered = head + (env.text[30] === "A" ? "B" : "A") + tail;
79
+ const r = decryptWithCode(tampered, "K7M9X2");
80
+ expect(r.ok).toBe(false);
81
+ });
82
+ it("envelope header is stable across encryptions", () => {
83
+ const a = encryptWithCode("x", "AAA111");
84
+ const b = encryptWithCode("x", "AAA111");
85
+ // Same prefix, different bodies (random salt+iv).
86
+ expect(a.text.split("\n")[0]).toBe(b.text.split("\n")[0]);
87
+ expect(a.text).not.toBe(b.text);
88
+ });
89
+ it("algorithm metadata is exposed for audit", () => {
90
+ const env = encryptWithCode("x", "Y");
91
+ expect(env.algorithm).toBe("aes-256-gcm");
92
+ expect(env.iterations).toBe(200_000);
93
+ });
94
+ });
95
+ describe("v1.85 RELAY · mobile recipe", () => {
96
+ it("renderMobileRecipe produces a one-line mobile prompt + 3 instructions", () => {
97
+ const r = renderMobileRecipe("https://paste.rs/aB", "K7M9X2");
98
+ expect(r.url).toBe("https://paste.rs/aB");
99
+ expect(r.code).toBe("K7M9X2");
100
+ expect(r.mobilePrompt).toContain("Fetch the URL https://paste.rs/aB");
101
+ expect(r.mobilePrompt).toContain("K7M9X2");
102
+ expect(r.qrPayload).toBe("mneme:K7M9X2|https://paste.rs/aB");
103
+ expect(r.instructions.mobileAiApp).toContain("Claude / Gemini / ChatGPT");
104
+ expect(r.instructions.mnemeAwareEditor).toContain("mneme.synapse.resolve_code");
105
+ expect(r.instructions.webAi).toContain("chatgpt.com / gemini.google.com");
106
+ });
107
+ });
108
+ //# sourceMappingURL=relay.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.test.js","sourceRoot":"","sources":["../../src/relay/relay.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"token_compression.d.ts","sourceRoot":"","sources":["../../src/synapse/token_compression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,wBAAwB,EA6CnE,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;sEAEsE;AACtE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,iBAAiB,CAoBpG;AAED;;0CAE0C;AAC1C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYnD"}
1
+ {"version":3,"file":"token_compression.d.ts","sourceRoot":"","sources":["../../src/synapse/token_compression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,wBAAwB,EAyEnE,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;sEAEsE;AACtE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,iBAAiB,CAoBpG;AAED;;0CAE0C;AAC1C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYnD"}
@@ -65,6 +65,33 @@ export const COMPRESSION_CODEBOOK = [
65
65
  { code: "@gx", expansion: "Gist URL" },
66
66
  { code: "@lb", expansion: "LAN bridge" },
67
67
  { code: "@vd", expansion: "voice directive" },
68
+ // v1.86 R4-2 follow-up: phenotype + cross-vendor keywords that show up
69
+ // frequently in real Gemini/ChatGPT/Claude soul prompts. Each save
70
+ // 5-20 chars per occurrence; together they push real-world ratios
71
+ // back into the 25-40% range.
72
+ { code: "@@pv", expansion: "vendor-specific" },
73
+ { code: "@@pc", expansion: "context window" },
74
+ { code: "@@pr", expansion: "Reply style:" },
75
+ { code: "@@ph", expansion: "hedge accordingly" },
76
+ { code: "@@pi", expansion: "phenotype instructions" },
77
+ { code: "@@pb", expansion: "Be aware that as a" },
78
+ { code: "@@po", expansion: "overconfidence calibration" },
79
+ { code: "@@pt", expansion: "tend to default to long answers" },
80
+ { code: "@@pe", expansion: "vendor=" },
81
+ { code: "@@pf", expansion: "fingerprint=" },
82
+ { code: "@@pca", expansion: "capsule=" },
83
+ { code: "@@pd", expansion: "createdAt=" },
84
+ { code: "@@pca2", expansion: "claude-opus-4-7" },
85
+ { code: "@@pg", expansion: "gpt-" },
86
+ { code: "@@pgm", expansion: "gemini-pro" },
87
+ { code: "@@pcl", expansion: "claude-" },
88
+ { code: "@@pn", expansion: "INSTRUCTIONS-TO-RECEIVING-AI:" },
89
+ { code: "@@pmt", expansion: "MNEME-FORMAT-VERSION: 1" },
90
+ { code: "@@pl1", expansion: "local_version:" },
91
+ { code: "@@pl2", expansion: "npm_latest:" },
92
+ { code: "@@pl3", expansion: "sync_status:" },
93
+ { code: "@@pl4", expansion: "checked_at:" },
94
+ { code: "@@pl5", expansion: "repo_fingerprint:" },
68
95
  ];
69
96
  /** Render a one-line codebook header that decompressors can parse. */
70
97
  export function renderCodebookHeader() {
@@ -1 +1 @@
1
- {"version":3,"file":"token_compression.js","sourceRoot":"","sources":["../../src/synapse/token_compression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token_compression.js","sourceRoot":"","sources":["../../src/synapse/token_compression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,MAAM,CAAC,MAAM,oBAAoB,GAAwC;IACvE,qCAAqC;IACrC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,oEAAoE,EAAE;IAChG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,uEAAuE,EAAE;IACnG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,gEAAgE,EAAE;IAC5F,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,wCAAwC,EAAE;IACpE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,wCAAwC,EAAE;IACpE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE;IACvC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE;IACxC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAC/C,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAC7C,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,sCAAsC,EAAE;IAElE,8EAA8E;IAC9E,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,sCAAsC,EAAE;IACnE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAChD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE;IAClD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gCAAgC,EAAE;IAC7D,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE;IACvD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iCAAiC,EAAE;IAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kDAAkD,EAAE;IAC/E,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,wCAAwC,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE;IAC/C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,4CAA4C,EAAE;IACzE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAChD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE;IAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE;IACxC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE;IAClD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,4BAA4B,EAAE;IACzD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE;IAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE;IAE7C,oCAAoC;IACpC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;IACrC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;IACnC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE;IACxC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;IAClC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;IACrC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;IACvC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE;IACxC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;IACtC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE;IACxC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAE7C,uEAAuE;IACvE,mEAAmE;IACnE,kEAAkE;IAClE,8BAA8B;IAC9B,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAC7C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE;IAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAChD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAwB,EAAE;IACrD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE;IACjD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,4BAA4B,EAAE;IACzD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iCAAiC,EAAE;IAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IACtC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE;IAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IACxC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE;IACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IAChD,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;IACnC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE;IAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,+BAA+B,EAAE;IAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAC9C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE;IAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE;IAC5C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE;IAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE;CAClD,CAAC;AAaF,sEAAsE;AACtE,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrG,OAAO,0BAA0B,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED;;sEAEsE;AACtE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAoC,EAAE;IAC/E,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,0DAA0D;IAC1D,MAAM,MAAM,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjG,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,yBAAyB;QACzB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1E,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,UAAU;QACV,aAAa,EAAE,IAAI,CAAC,MAAM;QAC1B,eAAe,EAAE,UAAU,CAAC,MAAM;QAClC,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAC9D,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QAC3C,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;0CAE0C;AAC1C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,2EAA2E;IAC3E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IACtD,sEAAsE;IACtE,sEAAsE;IACtE,MAAM,MAAM,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "1.84.0",
3
+ "version": "1.86.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",