@mneme-ai/core 1.86.0 → 1.87.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.
@@ -1 +1 @@
1
- {"version":3,"file":"intent_atoms.d.ts","sourceRoot":"","sources":["../../src/lattice/intent_atoms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB;uDACmD;IACnD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,EAAE,cAAc,CAAC;IACzB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EA0S7C,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAUD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA8BhE"}
1
+ {"version":3,"file":"intent_atoms.d.ts","sourceRoot":"","sources":["../../src/lattice/intent_atoms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB;uDACmD;IACnD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,EAAE,cAAc,CAAC;IACzB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EA2W7C,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAUD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA8BhE"}
@@ -144,24 +144,89 @@ export const INTENT_ATOMS = [
144
144
  intent: "pack the brain as a signed .mwt file for USB / offline transfer",
145
145
  },
146
146
  // ─── v1.85 NATURAL gap fills ────────────────────────────────────────
147
- // Troubleshooting / "my code isn't working"
147
+ // Troubleshooting / "my code isn't working" — v1.87 expanded
148
148
  {
149
149
  triggers: [
150
150
  "code ใช้ไม่ได้",
151
151
  "code ไม่ work",
152
+ "code ไม่ขึ้น",
153
+ "code ไม่ทำงาน",
154
+ "code broken",
155
+ "nexus broken",
152
156
  "nexus ไม่ทำงาน",
153
157
  "ทำไม code error",
154
158
  "code doesn't work",
159
+ "code doesnt work",
155
160
  "code not working",
156
161
  "code expired",
157
162
  "code unknown",
163
+ "code is wrong",
164
+ "wrong code",
165
+ "นี่ใช้ไม่ได้",
158
166
  "พิมพ์ code แล้วไม่ขึ้น",
167
+ "พิมพ์โค้ดแล้วไม่ขึ้น",
168
+ "พิมพ์ทางมือถือไม่ได้",
169
+ "พิมพ์ทาง phone ไม่ได้",
159
170
  ],
160
171
  tool: "mneme.synapse.resolve_code",
161
172
  priority: "absolute",
162
173
  intent: "diagnose a NEXUS code that failed to resolve (expired / wrong / different machine)",
163
174
  promise: "เช็คโค้ดให้ — ถ้าหมดอายุจะมินต์ใหม่ + แจ้งทาง relay สำรองให้.",
164
175
  },
176
+ // Brand-specific mobile app destinations (Gemini / ChatGPT / Claude)
177
+ {
178
+ triggers: [
179
+ "send to gemini app",
180
+ "ส่งไป gemini app",
181
+ "ส่งให้ gemini",
182
+ "to my gemini app",
183
+ "gemini handover",
184
+ "share with gemini mobile",
185
+ ],
186
+ tool: "mneme.relay.upload",
187
+ priority: "absolute",
188
+ intent: "publish encrypted soul + render Gemini deep link + QR for Gemini mobile",
189
+ },
190
+ {
191
+ triggers: [
192
+ "send to chatgpt app",
193
+ "ส่งไป chatgpt",
194
+ "share with chatgpt",
195
+ "chatgpt mobile",
196
+ "to chatgpt app",
197
+ ],
198
+ tool: "mneme.relay.upload",
199
+ priority: "absolute",
200
+ intent: "publish encrypted soul + render ChatGPT deep link + QR for ChatGPT mobile",
201
+ },
202
+ {
203
+ triggers: [
204
+ "send to claude app",
205
+ "ส่งให้ claude app",
206
+ "claude mobile",
207
+ "claude.ai mobile",
208
+ ],
209
+ tool: "mneme.relay.upload",
210
+ priority: "absolute",
211
+ intent: "publish encrypted soul + render Claude deep link + QR for Claude mobile",
212
+ },
213
+ // Bare "mobile handover" / "phone handover" keyword
214
+ {
215
+ triggers: [
216
+ "mobile handover",
217
+ "phone handover",
218
+ "ส่งสมองมือถือ",
219
+ "handover to mobile",
220
+ "พิมพ์มือถือไม่ได้",
221
+ "scan qr",
222
+ "ขอ qr",
223
+ "give me qr",
224
+ "show qr code",
225
+ ],
226
+ tool: "mneme.relay.upload",
227
+ priority: "absolute",
228
+ intent: "QR-based handover artifact for the mobile destination",
229
+ },
165
230
  // Mac / macOS / iPad / Apple-specific
166
231
  {
167
232
  triggers: [
@@ -1 +1 @@
1
- {"version":3,"file":"intent_atoms.js","sourceRoot":"","sources":["../../src/lattice/intent_atoms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent_atoms.js","sourceRoot":"","sources":["../../src/lattice/intent_atoms.ts"],"names":[],"mappings":"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"}
@@ -81,12 +81,23 @@ describe("Spore push/pull (dry-run when no real remote)", () => {
81
81
  });
82
82
  it("sporePush returns dry-run when remote unreachable", () => {
83
83
  sporeInit(repo, { remote: "https://invalid-host-that-does-not-exist.localhost/x.git" });
84
+ // v1.86: spore is default-off until OPT_IN is written. Test the
85
+ // dry-run-when-unreachable path with opt-in granted.
86
+ require("node:fs").mkdirSync(`${repo}/.mneme/spore`, { recursive: true });
87
+ require("node:fs").writeFileSync(`${repo}/.mneme/spore/OPT_IN`, "test-ack");
84
88
  const r = sporePush(repo, "machineA");
85
89
  expect(r.dryRun).toBe(true);
86
90
  expect(r.ok).toBe(false);
87
91
  // Vector clock incremented even on dry-run (so we can resync later).
88
92
  expect(readVectorClock(repo)["machineA"]).toBeGreaterThan(0);
89
93
  });
94
+ it("v1.86 -- sporePush REFUSES without OPT_IN marker", () => {
95
+ sporeInit(repo, { remote: "https://example.com/x.git" });
96
+ const r = sporePush(repo, "machineA");
97
+ expect(r.ok).toBe(false);
98
+ expect(r.dryRun).toBe(true);
99
+ expect(r.message).toContain("OPT_IN");
100
+ });
90
101
  it("sporePull returns dry-run when no remote configured", () => {
91
102
  const r = sporePull(repo);
92
103
  expect(r.dryRun).toBe(true);
@@ -1 +1 @@
1
- {"version":3,"file":"spore.test.js","sourceRoot":"","sources":["../../src/lineage/spore.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spore.test.js","sourceRoot":"","sources":["../../src/lineage/spore.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * v1.87.0 -- RELAY: vendor-specific deep links.
3
+ *
4
+ * Modern AI apps + web AIs accept a query parameter that pre-fills
5
+ * the chat input. Combine that with a paste URL + decryption code
6
+ * → user scans QR → AI app opens with the full instruction ready
7
+ * to send. ONE TAP cross-device handover.
8
+ *
9
+ * Verified URL params (May 2026):
10
+ * - Gemini web: gemini.google.com/?q=<urlenc>
11
+ * - ChatGPT web: chat.openai.com/?q=<urlenc>
12
+ * - Claude web: claude.ai/new?q=<urlenc>
13
+ * - Generic fallback: any text the user copies manually
14
+ *
15
+ * QR encoding limit: ~250 bytes for v10. We keep the URL compact:
16
+ * `https://gemini.google.com/?q=Fetch%20<URL>%20with%20code%20<CODE>%20and%20resume`
17
+ * ~ 150 chars → fits in v6 QR easily.
18
+ */
19
+ export type DeepLinkVendor = "gemini" | "chatgpt" | "claude" | "any";
20
+ export interface DeepLinkInput {
21
+ pasteUrl: string;
22
+ nexusCode: string;
23
+ vendor?: DeepLinkVendor;
24
+ }
25
+ /** Compose a single-line instruction the destination AI will receive
26
+ * as its first message. Kept SHORT so URL+query fits in a QR. */
27
+ export declare function composePrompt(pasteUrl: string, nexusCode: string): string;
28
+ export interface DeepLink {
29
+ vendor: DeepLinkVendor;
30
+ /** Final URL the user opens (or QR scans into). */
31
+ url: string;
32
+ /** Just the prompt portion, in case the URL is too long. */
33
+ prompt: string;
34
+ /** Whether the URL fits in a typical v10 QR payload (< 270 bytes). */
35
+ fitsInQR: boolean;
36
+ }
37
+ export declare function buildDeepLink(input: DeepLinkInput): DeepLink;
38
+ /** Pick the deep link with the SHORTEST URL that still fits in a QR.
39
+ * Best for "I don't know which AI app the user has" scenarios. */
40
+ export declare function bestDeepLink(input: DeepLinkInput): DeepLink;
41
+ //# sourceMappingURL=deep_link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep_link.d.ts","sourceRoot":"","sources":["../../src/relay/deep_link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AASD;kEACkE;AAClE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAM5D;AAED;mEACmE;AACnE,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAS3D"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * v1.87.0 -- RELAY: vendor-specific deep links.
3
+ *
4
+ * Modern AI apps + web AIs accept a query parameter that pre-fills
5
+ * the chat input. Combine that with a paste URL + decryption code
6
+ * → user scans QR → AI app opens with the full instruction ready
7
+ * to send. ONE TAP cross-device handover.
8
+ *
9
+ * Verified URL params (May 2026):
10
+ * - Gemini web: gemini.google.com/?q=<urlenc>
11
+ * - ChatGPT web: chat.openai.com/?q=<urlenc>
12
+ * - Claude web: claude.ai/new?q=<urlenc>
13
+ * - Generic fallback: any text the user copies manually
14
+ *
15
+ * QR encoding limit: ~250 bytes for v10. We keep the URL compact:
16
+ * `https://gemini.google.com/?q=Fetch%20<URL>%20with%20code%20<CODE>%20and%20resume`
17
+ * ~ 150 chars → fits in v6 QR easily.
18
+ */
19
+ const TEMPLATES = {
20
+ gemini: "https://gemini.google.com/?q=",
21
+ chatgpt: "https://chat.openai.com/?q=",
22
+ claude: "https://claude.ai/new?q=",
23
+ any: "", // copy-only fallback
24
+ };
25
+ /** Compose a single-line instruction the destination AI will receive
26
+ * as its first message. Kept SHORT so URL+query fits in a QR. */
27
+ export function composePrompt(pasteUrl, nexusCode) {
28
+ return `Fetch ${pasteUrl} . AES-256-GCM decrypt with PBKDF2-SHA256 (200k iters, salt+iv+tag prefixed) using NEXUS code ${nexusCode}. The plaintext is a Mneme soul prompt -- resume the conversation.`;
29
+ }
30
+ export function buildDeepLink(input) {
31
+ const vendor = input.vendor ?? "any";
32
+ const prompt = composePrompt(input.pasteUrl, input.nexusCode);
33
+ const tmpl = TEMPLATES[vendor];
34
+ const url = tmpl ? `${tmpl}${encodeURIComponent(prompt)}` : prompt;
35
+ return { vendor, url, prompt, fitsInQR: new TextEncoder().encode(url).length < 270 };
36
+ }
37
+ /** Pick the deep link with the SHORTEST URL that still fits in a QR.
38
+ * Best for "I don't know which AI app the user has" scenarios. */
39
+ export function bestDeepLink(input) {
40
+ const candidates = ["gemini", "chatgpt", "claude", "any"];
41
+ let best = null;
42
+ for (const vendor of candidates) {
43
+ const dl = buildDeepLink({ ...input, vendor });
44
+ if (!dl.fitsInQR)
45
+ continue;
46
+ if (!best || dl.url.length < best.url.length)
47
+ best = dl;
48
+ }
49
+ return best ?? buildDeepLink({ ...input, vendor: "any" });
50
+ }
51
+ //# sourceMappingURL=deep_link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep_link.js","sourceRoot":"","sources":["../../src/relay/deep_link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,MAAM,SAAS,GAAmC;IAChD,MAAM,EAAE,+BAA+B;IACvC,OAAO,EAAE,6BAA6B;IACtC,MAAM,EAAE,0BAA0B;IAClC,GAAG,EAAE,EAAE,EAAE,qBAAqB;CAC/B,CAAC;AAEF;kEACkE;AAClE,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,SAAiB;IAC/D,OAAO,SAAS,QAAQ,iGAAiG,SAAS,oEAAoE,CAAC;AACzM,CAAC;AAYD,MAAM,UAAU,aAAa,CAAC,KAAoB;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;AACvF,CAAC;AAED;mEACmE;AACnE,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,MAAM,UAAU,GAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5E,IAAI,IAAI,GAAoB,IAAI,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,QAAQ;YAAE,SAAS;QAC3B,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,IAAI,GAAG,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,IAAI,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * v1.87.0 -- RELAY: HANDOFF ARTIFACT.
3
+ *
4
+ * Combines (paste URL + NEXUS code + deep link + REAL scannable QR)
5
+ * into one bundle the source AI hands to the user. The user has
6
+ * THREE ways to use it -- any one works:
7
+ *
8
+ * 1. Scan the QR with phone camera → AI app opens with the
9
+ * prompt pre-filled → tap send → resume. ZERO typing.
10
+ * 2. Tap the deep link on a clickable device → same flow.
11
+ * 3. Copy the long prompt manually (fallback for cases without
12
+ * camera / clickable link).
13
+ *
14
+ * This closes the UX gap user surfaced: previously the only path was
15
+ * "copy 200 chars from PC to phone" which is hostile across devices.
16
+ * Now phone-camera-scan is the canonical path.
17
+ */
18
+ import { type DeepLinkVendor } from "./deep_link.js";
19
+ export interface HandoffInput {
20
+ pasteUrl: string;
21
+ nexusCode: string;
22
+ /** Optional vendor hint. When omitted, AI picks the shortest fit. */
23
+ vendor?: DeepLinkVendor;
24
+ /** SVG module size (pixels). Default 8. */
25
+ moduleSize?: number;
26
+ }
27
+ export interface HandoffArtifact {
28
+ pasteUrl: string;
29
+ nexusCode: string;
30
+ /** The deep link that gets QR-encoded. */
31
+ deepLink: {
32
+ vendor: DeepLinkVendor;
33
+ url: string;
34
+ prompt: string;
35
+ };
36
+ /** Real scannable QR (zero-dep encoder). */
37
+ qr: {
38
+ svg: string;
39
+ size: number;
40
+ version: number;
41
+ mask: number;
42
+ };
43
+ /** Plain-text fallback the user can copy if QR/deep-link unavailable. */
44
+ copyFallback: string;
45
+ /** One-line instructions per surface. */
46
+ instructions: {
47
+ qrScan: string;
48
+ tapLink: string;
49
+ manualCopy: string;
50
+ };
51
+ }
52
+ export declare function renderHandoff(input: HandoffInput): HandoffArtifact;
53
+ //# sourceMappingURL=handoff_artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff_artifact.d.ts","sourceRoot":"","sources":["../../src/relay/handoff_artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAElF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,EAAE;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,4CAA4C;IAC5C,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAiBlE"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * v1.87.0 -- RELAY: HANDOFF ARTIFACT.
3
+ *
4
+ * Combines (paste URL + NEXUS code + deep link + REAL scannable QR)
5
+ * into one bundle the source AI hands to the user. The user has
6
+ * THREE ways to use it -- any one works:
7
+ *
8
+ * 1. Scan the QR with phone camera → AI app opens with the
9
+ * prompt pre-filled → tap send → resume. ZERO typing.
10
+ * 2. Tap the deep link on a clickable device → same flow.
11
+ * 3. Copy the long prompt manually (fallback for cases without
12
+ * camera / clickable link).
13
+ *
14
+ * This closes the UX gap user surfaced: previously the only path was
15
+ * "copy 200 chars from PC to phone" which is hostile across devices.
16
+ * Now phone-camera-scan is the canonical path.
17
+ */
18
+ import { encodeQRReal } from "../synapse/qr_real.js";
19
+ import { bestDeepLink, buildDeepLink } from "./deep_link.js";
20
+ export function renderHandoff(input) {
21
+ const link = input.vendor
22
+ ? buildDeepLink({ pasteUrl: input.pasteUrl, nexusCode: input.nexusCode, vendor: input.vendor })
23
+ : bestDeepLink({ pasteUrl: input.pasteUrl, nexusCode: input.nexusCode });
24
+ const qr = encodeQRReal(link.url, { moduleSize: input.moduleSize ?? 8 });
25
+ return {
26
+ pasteUrl: input.pasteUrl,
27
+ nexusCode: input.nexusCode,
28
+ deepLink: { vendor: link.vendor, url: link.url, prompt: link.prompt },
29
+ qr: { svg: qr.svg, size: qr.size, version: qr.version, mask: qr.mask },
30
+ copyFallback: link.prompt,
31
+ instructions: {
32
+ qrScan: `Point your phone camera at the QR code. The AI app opens with the prompt pre-filled -- tap send and the conversation resumes.`,
33
+ tapLink: `Tap (or paste into your browser) this link: ${link.url}`,
34
+ manualCopy: `If neither scan nor tap works, copy this single line into any AI:\n\n${link.prompt}`,
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=handoff_artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff_artifact.js","sourceRoot":"","sources":["../../src/relay/handoff_artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAuB,MAAM,gBAAgB,CAAC;AA4BlF,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM;QACvB,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/F,CAAC,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QACrE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;QACtE,YAAY,EAAE,IAAI,CAAC,MAAM;QACzB,YAAY,EAAE;YACZ,MAAM,EAAE,+HAA+H;YACvI,OAAO,EAAE,+CAA+C,IAAI,CAAC,GAAG,EAAE;YAClE,UAAU,EAAE,wEAAwE,IAAI,CAAC,MAAM,EAAE;SAClG;KACF,CAAC;AACJ,CAAC"}
@@ -13,4 +13,6 @@
13
13
  export * from "./paste_backend.js";
14
14
  export * from "./encrypted_payload.js";
15
15
  export * from "./mobile_recipe.js";
16
+ export * from "./deep_link.js";
17
+ export * from "./handoff_artifact.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -13,4 +13,6 @@
13
13
  export * from "./paste_backend.js";
14
14
  export * from "./encrypted_payload.js";
15
15
  export * from "./mobile_recipe.js";
16
+ export * from "./deep_link.js";
17
+ export * from "./handoff_artifact.js";
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -31,5 +31,11 @@ export interface MobileRecipe {
31
31
  webAi: string;
32
32
  };
33
33
  }
34
+ /** v1.87 API fix: accept object args (consistent with mintNexusCode).
35
+ * Positional form is kept as an overload for backwards compatibility. */
36
+ export declare function renderMobileRecipe(args: {
37
+ url: string;
38
+ code: string;
39
+ }): MobileRecipe;
34
40
  export declare function renderMobileRecipe(url: string, code: string): MobileRecipe;
35
41
  //# sourceMappingURL=mobile_recipe.d.ts.map
@@ -1 +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"}
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;0EAC0E;AAC1E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAAC;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC"}
@@ -15,7 +15,12 @@
15
15
  *
16
16
  * Returns the recipe + a QR-friendly payload combining URL + code.
17
17
  */
18
- export function renderMobileRecipe(url, code) {
18
+ export function renderMobileRecipe(a, b) {
19
+ const url = typeof a === "string" ? a : a.url;
20
+ const code = typeof a === "string" ? (b ?? "") : a.code;
21
+ return renderMobileRecipeImpl(url, code);
22
+ }
23
+ function renderMobileRecipeImpl(url, code) {
19
24
  const mobilePrompt = `Fetch the URL ${url}. The text is encrypted with this NEXUS code: ${code}. ` +
20
25
  `Decrypt it (AES-256-GCM with PBKDF2-SHA256 200k iterations, salt+iv+tag prefixed). ` +
21
26
  `The plaintext is a Mneme soul prompt -- resume the conversation from there.`;
@@ -1 +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"}
1
+ {"version":3,"file":"mobile_recipe.js","sourceRoot":"","sources":["../../src/relay/mobile_recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAuBH,MAAM,UAAU,kBAAkB,CAAC,CAAyC,EAAE,CAAU;IACtF,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,OAAO,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW,EAAE,IAAY;IACvD,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,37 @@
1
+ /**
2
+ * v1.87.0 -- SYNAPSE: REAL QR code encoder (zero dependencies).
3
+ *
4
+ * Pure TypeScript / pure ESM implementation of QR Code Model 2 in
5
+ * byte mode at error-correction level L (low). Auto-selects version
6
+ * 1..10 based on payload size (max ~270 bytes). Output is an SVG
7
+ * that's actually scannable by any phone camera.
8
+ *
9
+ * No npm dependency. No remote QR-rendering service. No cloud.
10
+ *
11
+ * Algorithm reference: ISO/IEC 18004:2015 + Project Nayuki's
12
+ * public-domain reference (re-implemented from spec, not copied).
13
+ *
14
+ * Why this matters: the previous `qr_anchor.ts` was a deterministic
15
+ * stipple-art that LOOKED like a QR but wasn't scannable. User
16
+ * surfaced the bug directly: "นึกว่าจะมี qr code ที่ใช้ได้ 100%
17
+ * ถูกต้องให้สแกนแทน". v1.87 fixes that with REAL QR.
18
+ */
19
+ export interface QRRealResult {
20
+ /** Final dark/light matrix. */
21
+ matrix: Uint8Array[];
22
+ /** Module dimension. */
23
+ size: number;
24
+ /** QR version (1..10). */
25
+ version: number;
26
+ /** Mask index 0..7 chosen. */
27
+ mask: number;
28
+ /** SVG render. */
29
+ svg: string;
30
+ }
31
+ /** Encode `payload` (a string -- UTF-8 encoded internally) as a real
32
+ * QR code. Returns the matrix + an SVG render. */
33
+ export declare function encodeQRReal(payload: string, opts?: {
34
+ moduleSize?: number;
35
+ quietZone?: number;
36
+ }): QRRealResult;
37
+ //# sourceMappingURL=qr_real.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr_real.d.ts","sourceRoot":"","sources":["../../src/synapse/qr_real.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA2UH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;mDACmD;AACnD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,YAAY,CA8ClH"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * v1.87.0 -- SYNAPSE: REAL QR code encoder (zero dependencies).
3
+ *
4
+ * Pure TypeScript / pure ESM implementation of QR Code Model 2 in
5
+ * byte mode at error-correction level L (low). Auto-selects version
6
+ * 1..10 based on payload size (max ~270 bytes). Output is an SVG
7
+ * that's actually scannable by any phone camera.
8
+ *
9
+ * No npm dependency. No remote QR-rendering service. No cloud.
10
+ *
11
+ * Algorithm reference: ISO/IEC 18004:2015 + Project Nayuki's
12
+ * public-domain reference (re-implemented from spec, not copied).
13
+ *
14
+ * Why this matters: the previous `qr_anchor.ts` was a deterministic
15
+ * stipple-art that LOOKED like a QR but wasn't scannable. User
16
+ * surfaced the bug directly: "นึกว่าจะมี qr code ที่ใช้ได้ 100%
17
+ * ถูกต้องให้สแกนแทน". v1.87 fixes that with REAL QR.
18
+ */
19
+ // ─── Galois Field GF(2^8) ──────────────────────────────────────────────
20
+ // Primitive polynomial 0x11d. EXP/LOG tables for fast multiplication.
21
+ const GF_EXP = new Uint8Array(512);
22
+ const GF_LOG = new Uint8Array(256);
23
+ (() => {
24
+ let x = 1;
25
+ for (let i = 0; i < 255; i++) {
26
+ GF_EXP[i] = x;
27
+ GF_LOG[x] = i;
28
+ x <<= 1;
29
+ if (x & 0x100)
30
+ x ^= 0x11d;
31
+ }
32
+ for (let i = 255; i < 512; i++)
33
+ GF_EXP[i] = GF_EXP[i - 255];
34
+ })();
35
+ function gfMul(a, b) {
36
+ if (a === 0 || b === 0)
37
+ return 0;
38
+ return GF_EXP[(GF_LOG[a] + GF_LOG[b]) % 255];
39
+ }
40
+ /** Reed-Solomon generator polynomial of given degree. */
41
+ function rsGenPoly(deg) {
42
+ let poly = new Uint8Array([1]);
43
+ for (let i = 0; i < deg; i++) {
44
+ const next = new Uint8Array(poly.length + 1);
45
+ for (let j = 0; j < poly.length; j++) {
46
+ next[j] ^= poly[j];
47
+ next[j + 1] ^= gfMul(poly[j], GF_EXP[i]);
48
+ }
49
+ poly = next;
50
+ }
51
+ return poly;
52
+ }
53
+ /** Append RS error-correction codewords to data. */
54
+ function rsEncode(data, ecLen) {
55
+ const gen = rsGenPoly(ecLen);
56
+ const buf = new Uint8Array(data.length + ecLen);
57
+ buf.set(data);
58
+ for (let i = 0; i < data.length; i++) {
59
+ const coef = buf[i];
60
+ if (coef === 0)
61
+ continue;
62
+ for (let j = 1; j <= ecLen; j++) {
63
+ buf[i + j] ^= gfMul(coef, gen[j]);
64
+ }
65
+ }
66
+ return buf.slice(data.length);
67
+ }
68
+ const VERSIONS_L = [
69
+ { version: 1, size: 21, totalData: 19, ecPerBlock: 7, blocks: 1, alignmentCenters: [] },
70
+ { version: 2, size: 25, totalData: 34, ecPerBlock: 10, blocks: 1, alignmentCenters: [6, 18] },
71
+ { version: 3, size: 29, totalData: 55, ecPerBlock: 15, blocks: 1, alignmentCenters: [6, 22] },
72
+ { version: 4, size: 33, totalData: 80, ecPerBlock: 20, blocks: 1, alignmentCenters: [6, 26] },
73
+ { version: 5, size: 37, totalData: 108, ecPerBlock: 26, blocks: 1, alignmentCenters: [6, 30] },
74
+ { version: 6, size: 41, totalData: 136, ecPerBlock: 18, blocks: 2, alignmentCenters: [6, 34] },
75
+ { version: 7, size: 45, totalData: 156, ecPerBlock: 20, blocks: 2, alignmentCenters: [6, 22, 38] },
76
+ { version: 8, size: 49, totalData: 194, ecPerBlock: 24, blocks: 2, alignmentCenters: [6, 24, 42] },
77
+ { version: 9, size: 53, totalData: 232, ecPerBlock: 30, blocks: 2, alignmentCenters: [6, 26, 46] },
78
+ { version: 10, size: 57, totalData: 274, ecPerBlock: 18, blocks: 4, alignmentCenters: [6, 28, 50] },
79
+ ];
80
+ function pickVersion(payloadByteLen) {
81
+ // Need 2 bytes for mode+length header overhead.
82
+ const overhead = 2;
83
+ for (const v of VERSIONS_L) {
84
+ if (v.totalData >= payloadByteLen + overhead)
85
+ return v;
86
+ }
87
+ throw new Error(`payload too large for v1-10 QR (need ${payloadByteLen} bytes)`);
88
+ }
89
+ // ─── Bit buffer ────────────────────────────────────────────────────────
90
+ class BitBuf {
91
+ bits = [];
92
+ push(value, len) {
93
+ for (let i = len - 1; i >= 0; i--)
94
+ this.bits.push((value >> i) & 1);
95
+ }
96
+ pushByte(b) { this.push(b, 8); }
97
+ length() { return this.bits.length; }
98
+ toBytes() {
99
+ const out = new Uint8Array(Math.ceil(this.bits.length / 8));
100
+ for (let i = 0; i < this.bits.length; i++) {
101
+ if (this.bits[i])
102
+ out[i >> 3] |= 0x80 >> (i & 7);
103
+ }
104
+ return out;
105
+ }
106
+ }
107
+ // ─── Encode data into codewords ────────────────────────────────────────
108
+ function encodeData(payload, v) {
109
+ const buf = new BitBuf();
110
+ // Mode indicator: 0100 (byte mode)
111
+ buf.push(0b0100, 4);
112
+ // Char count: 8 bits for v1-9, 16 bits for v10+
113
+ const ccLen = v.version <= 9 ? 8 : 16;
114
+ buf.push(payload.length, ccLen);
115
+ // Payload
116
+ for (const b of payload)
117
+ buf.pushByte(b);
118
+ // Terminator (up to 4 zero bits) + byte-align
119
+ const totalBits = v.totalData * 8;
120
+ const remaining = totalBits - buf.length();
121
+ buf.push(0, Math.min(4, remaining));
122
+ while (buf.length() % 8 !== 0)
123
+ buf.push(0, 1);
124
+ // Pad bytes: alternating 0xEC, 0x11
125
+ const padBytes = [0xec, 0x11];
126
+ let pi = 0;
127
+ while (buf.length() < totalBits) {
128
+ buf.pushByte(padBytes[pi]);
129
+ pi = 1 - pi;
130
+ }
131
+ const data = buf.toBytes();
132
+ // Split into blocks + append RS EC codewords.
133
+ const ecPerBlock = v.ecPerBlock;
134
+ const blocks = [];
135
+ const baseSize = Math.floor(v.totalData / v.blocks);
136
+ const extra = v.totalData % v.blocks;
137
+ let offset = 0;
138
+ for (let i = 0; i < v.blocks; i++) {
139
+ const sz = baseSize + (i >= v.blocks - extra ? 1 : 0);
140
+ const blk = data.slice(offset, offset + sz);
141
+ offset += sz;
142
+ const ec = rsEncode(blk, ecPerBlock);
143
+ blocks.push({ data: blk, ec });
144
+ }
145
+ // Interleave: data cols then EC cols.
146
+ const totalLen = v.totalData + ecPerBlock * v.blocks;
147
+ const out = new Uint8Array(totalLen);
148
+ const maxDataLen = Math.max(...blocks.map((b) => b.data.length));
149
+ let outIdx = 0;
150
+ for (let col = 0; col < maxDataLen; col++) {
151
+ for (const blk of blocks) {
152
+ if (col < blk.data.length)
153
+ out[outIdx++] = blk.data[col];
154
+ }
155
+ }
156
+ for (let col = 0; col < ecPerBlock; col++) {
157
+ for (const blk of blocks) {
158
+ out[outIdx++] = blk.ec[col];
159
+ }
160
+ }
161
+ return out;
162
+ }
163
+ function emptyMatrix(size) {
164
+ return Array.from({ length: size }, () => new Uint8Array(size));
165
+ }
166
+ function placeFinder(m, r, c) {
167
+ for (let dr = -1; dr <= 7; dr++) {
168
+ for (let dc = -1; dc <= 7; dc++) {
169
+ const rr = r + dr;
170
+ const cc = c + dc;
171
+ if (rr < 0 || rr >= m.length || cc < 0 || cc >= m.length)
172
+ continue;
173
+ const inFinder = (dr >= 0 && dr <= 6 && dc >= 0 && dc <= 6) &&
174
+ ((dr === 0 || dr === 6 || dc === 0 || dc === 6) ||
175
+ (dr >= 2 && dr <= 4 && dc >= 2 && dc <= 4));
176
+ m[rr][cc] = inFinder ? 1 : 0;
177
+ }
178
+ }
179
+ }
180
+ function placeAlignment(m, r, c) {
181
+ for (let dr = -2; dr <= 2; dr++) {
182
+ for (let dc = -2; dc <= 2; dc++) {
183
+ const rr = r + dr;
184
+ const cc = c + dc;
185
+ m[rr][cc] =
186
+ Math.abs(dr) === 2 || Math.abs(dc) === 2 || (dr === 0 && dc === 0) ? 1 : 0;
187
+ }
188
+ }
189
+ }
190
+ function isFunctional(m, r, c, v) {
191
+ const size = v.size;
192
+ // Finder patterns + separators (3 corners, 8x8 each).
193
+ if (r < 9 && c < 9)
194
+ return true;
195
+ if (r < 9 && c >= size - 8)
196
+ return true;
197
+ if (r >= size - 8 && c < 9)
198
+ return true;
199
+ // Timing patterns.
200
+ if (r === 6 || c === 6)
201
+ return true;
202
+ // Alignment patterns.
203
+ for (const cr of v.alignmentCenters) {
204
+ for (const cc of v.alignmentCenters) {
205
+ // Skip ones overlapping with finder corners.
206
+ if ((cr === v.alignmentCenters[0] && cc === v.alignmentCenters[0]) ||
207
+ (cr === v.alignmentCenters[0] && cc === v.alignmentCenters[v.alignmentCenters.length - 1]) ||
208
+ (cr === v.alignmentCenters[v.alignmentCenters.length - 1] && cc === v.alignmentCenters[0])) {
209
+ continue;
210
+ }
211
+ if (Math.abs(r - cr) <= 2 && Math.abs(c - cc) <= 2)
212
+ return true;
213
+ }
214
+ }
215
+ return false;
216
+ }
217
+ function buildBaseMatrix(v) {
218
+ const m = emptyMatrix(v.size);
219
+ // Finder patterns.
220
+ placeFinder(m, 0, 0);
221
+ placeFinder(m, 0, v.size - 7);
222
+ placeFinder(m, v.size - 7, 0);
223
+ // Timing patterns.
224
+ for (let i = 8; i < v.size - 8; i++) {
225
+ m[6][i] = i % 2 === 0 ? 1 : 0;
226
+ m[i][6] = i % 2 === 0 ? 1 : 0;
227
+ }
228
+ // Alignment patterns.
229
+ for (const r of v.alignmentCenters) {
230
+ for (const c of v.alignmentCenters) {
231
+ if ((r === v.alignmentCenters[0] && c === v.alignmentCenters[0]) ||
232
+ (r === v.alignmentCenters[0] && c === v.alignmentCenters[v.alignmentCenters.length - 1]) ||
233
+ (r === v.alignmentCenters[v.alignmentCenters.length - 1] && c === v.alignmentCenters[0])) {
234
+ continue;
235
+ }
236
+ placeAlignment(m, r, c);
237
+ }
238
+ }
239
+ // Dark module.
240
+ m[v.size - 8][8] = 1;
241
+ return m;
242
+ }
243
+ // Mask functions (0..7) per QR spec.
244
+ const MASKS = [
245
+ (r, c) => (r + c) % 2 === 0,
246
+ (r) => r % 2 === 0,
247
+ (_r, c) => c % 3 === 0,
248
+ (r, c) => (r + c) % 3 === 0,
249
+ (r, c) => (Math.floor(r / 2) + Math.floor(c / 3)) % 2 === 0,
250
+ (r, c) => ((r * c) % 2) + ((r * c) % 3) === 0,
251
+ (r, c) => (((r * c) % 2) + ((r * c) % 3)) % 2 === 0,
252
+ (r, c) => (((r + c) % 2) + ((r * c) % 3)) % 2 === 0,
253
+ ];
254
+ function placeData(m, codewords, v, maskIdx) {
255
+ let bitIdx = 0;
256
+ const totalBits = codewords.length * 8;
257
+ let upward = true;
258
+ for (let col = v.size - 1; col >= 1; col -= 2) {
259
+ if (col === 6)
260
+ col = 5; // skip vertical timing column
261
+ for (let i = 0; i < v.size; i++) {
262
+ const r = upward ? v.size - 1 - i : i;
263
+ for (let dc = 0; dc < 2; dc++) {
264
+ const c = col - dc;
265
+ if (isFunctional(m, r, c, v))
266
+ continue;
267
+ let bit = 0;
268
+ if (bitIdx < totalBits) {
269
+ const byte = codewords[bitIdx >> 3];
270
+ bit = (byte >> (7 - (bitIdx & 7))) & 1;
271
+ bitIdx++;
272
+ }
273
+ const maskBit = MASKS[maskIdx](r, c) ? 1 : 0;
274
+ m[r][c] = (bit ^ maskBit);
275
+ }
276
+ }
277
+ upward = !upward;
278
+ }
279
+ }
280
+ // Format-info bits (15 bits) for EC level L + mask index.
281
+ // Pre-computed from ISO/IEC 18004 Table C.1.
282
+ const FORMAT_BITS_L = [
283
+ 0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976,
284
+ ];
285
+ function placeFormatInfo(m, maskIdx, v) {
286
+ const bits = FORMAT_BITS_L[maskIdx];
287
+ // 15 bits placed in two locations.
288
+ // Around top-left finder + along edges of top-right and bottom-left finders.
289
+ const set = (r, c, bit) => { m[r][c] = bit; };
290
+ // Top-left vertical 8 bits (rows 0-7, col 8) + horizontal 8 bits (row 8, cols 0-7)
291
+ for (let i = 0; i < 6; i++)
292
+ set(i, 8, (bits >> i) & 1);
293
+ set(7, 8, (bits >> 6) & 1);
294
+ set(8, 8, (bits >> 7) & 1);
295
+ set(8, 7, (bits >> 8) & 1);
296
+ for (let i = 9; i < 15; i++)
297
+ set(8, 14 - i, (bits >> i) & 1);
298
+ // Bottom-left vertical 7 bits (rows size-7..size-1, col 8)
299
+ for (let i = 0; i < 7; i++)
300
+ set(v.size - 1 - i, 8, (bits >> i) & 1);
301
+ // Top-right horizontal 8 bits (row 8, cols size-8..size-1)
302
+ for (let i = 0; i < 8; i++)
303
+ set(8, v.size - 8 + i, (bits >> (7 + i)) & 1);
304
+ }
305
+ function maskPenalty(m) {
306
+ const size = m.length;
307
+ let penalty = 0;
308
+ // Rule 1: runs of 5+ same-colored modules in a row/col.
309
+ for (let r = 0; r < size; r++) {
310
+ let run = 1;
311
+ for (let c = 1; c < size; c++) {
312
+ if (m[r][c] === m[r][c - 1]) {
313
+ run++;
314
+ if (run === 5)
315
+ penalty += 3;
316
+ else if (run > 5)
317
+ penalty += 1;
318
+ }
319
+ else
320
+ run = 1;
321
+ }
322
+ }
323
+ for (let c = 0; c < size; c++) {
324
+ let run = 1;
325
+ for (let r = 1; r < size; r++) {
326
+ if (m[r][c] === m[r - 1][c]) {
327
+ run++;
328
+ if (run === 5)
329
+ penalty += 3;
330
+ else if (run > 5)
331
+ penalty += 1;
332
+ }
333
+ else
334
+ run = 1;
335
+ }
336
+ }
337
+ // Rule 2: 2x2 blocks of same color.
338
+ for (let r = 0; r < size - 1; r++) {
339
+ for (let c = 0; c < size - 1; c++) {
340
+ const v = m[r][c];
341
+ if (m[r][c + 1] === v && m[r + 1][c] === v && m[r + 1][c + 1] === v)
342
+ penalty += 3;
343
+ }
344
+ }
345
+ return penalty;
346
+ }
347
+ function clone(m) {
348
+ return m.map((r) => new Uint8Array(r));
349
+ }
350
+ /** Encode `payload` (a string -- UTF-8 encoded internally) as a real
351
+ * QR code. Returns the matrix + an SVG render. */
352
+ export function encodeQRReal(payload, opts = {}) {
353
+ const moduleSize = opts.moduleSize ?? 8;
354
+ const quietZone = opts.quietZone ?? 4;
355
+ const bytes = new TextEncoder().encode(payload);
356
+ const v = pickVersion(bytes.length);
357
+ const codewords = encodeData(bytes, v);
358
+ let best = null;
359
+ for (let mask = 0; mask < 8; mask++) {
360
+ const m = buildBaseMatrix(v);
361
+ placeData(m, codewords, v, mask);
362
+ placeFormatInfo(m, mask, v);
363
+ const penalty = maskPenalty(m);
364
+ if (!best || penalty < best.penalty)
365
+ best = { mask, matrix: m, penalty };
366
+ }
367
+ const final = best.matrix;
368
+ const dim = (v.size + quietZone * 2) * moduleSize;
369
+ const cells = [];
370
+ for (let r = 0; r < v.size; r++) {
371
+ for (let c = 0; c < v.size; c++) {
372
+ if (final[r][c] === 1) {
373
+ const x = (c + quietZone) * moduleSize;
374
+ const y = (r + quietZone) * moduleSize;
375
+ cells.push(`<rect x="${x}" y="${y}" width="${moduleSize}" height="${moduleSize}"/>`);
376
+ }
377
+ }
378
+ }
379
+ const svg = [
380
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${dim}" height="${dim}" viewBox="0 0 ${dim} ${dim}" shape-rendering="crispEdges">`,
381
+ `<rect width="${dim}" height="${dim}" fill="#ffffff"/>`,
382
+ `<g fill="#000000">`,
383
+ ...cells,
384
+ `</g>`,
385
+ `</svg>`,
386
+ ].join("");
387
+ return {
388
+ matrix: final,
389
+ size: v.size,
390
+ version: v.version,
391
+ mask: best.mask,
392
+ svg,
393
+ };
394
+ // Cleanup: clone reference to silence unused-import warning.
395
+ void clone;
396
+ }
397
+ //# sourceMappingURL=qr_real.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr_real.js","sourceRoot":"","sources":["../../src/synapse/qr_real.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "1.86.0",
3
+ "version": "1.87.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",