@mneme-ai/core 1.86.0 → 1.88.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 (54) 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 +6 -1
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/anchor/anchor.test.d.ts +2 -0
  6. package/dist/anchor/anchor.test.d.ts.map +1 -0
  7. package/dist/anchor/anchor.test.js +121 -0
  8. package/dist/anchor/anchor.test.js.map +1 -0
  9. package/dist/anchor/clipboard_handoff.d.ts +48 -0
  10. package/dist/anchor/clipboard_handoff.d.ts.map +1 -0
  11. package/dist/anchor/clipboard_handoff.js +137 -0
  12. package/dist/anchor/clipboard_handoff.js.map +1 -0
  13. package/dist/anchor/index.d.ts +16 -0
  14. package/dist/anchor/index.d.ts.map +1 -0
  15. package/dist/anchor/index.js +16 -0
  16. package/dist/anchor/index.js.map +1 -0
  17. package/dist/anchor/pole_id.d.ts +66 -0
  18. package/dist/anchor/pole_id.d.ts.map +1 -0
  19. package/dist/anchor/pole_id.js +115 -0
  20. package/dist/anchor/pole_id.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +6 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/lattice/intent_atoms.d.ts.map +1 -1
  26. package/dist/lattice/intent_atoms.js +66 -1
  27. package/dist/lattice/intent_atoms.js.map +1 -1
  28. package/dist/lineage/spore.test.js +11 -0
  29. package/dist/lineage/spore.test.js.map +1 -1
  30. package/dist/relay/deep_link.d.ts +41 -0
  31. package/dist/relay/deep_link.d.ts.map +1 -0
  32. package/dist/relay/deep_link.js +53 -0
  33. package/dist/relay/deep_link.js.map +1 -0
  34. package/dist/relay/handoff_artifact.d.ts +53 -0
  35. package/dist/relay/handoff_artifact.d.ts.map +1 -0
  36. package/dist/relay/handoff_artifact.js +38 -0
  37. package/dist/relay/handoff_artifact.js.map +1 -0
  38. package/dist/relay/index.d.ts +2 -0
  39. package/dist/relay/index.d.ts.map +1 -1
  40. package/dist/relay/index.js +2 -0
  41. package/dist/relay/index.js.map +1 -1
  42. package/dist/relay/mobile_recipe.d.ts +6 -0
  43. package/dist/relay/mobile_recipe.d.ts.map +1 -1
  44. package/dist/relay/mobile_recipe.js +6 -1
  45. package/dist/relay/mobile_recipe.js.map +1 -1
  46. package/dist/synapse/qr_real.d.ts +37 -0
  47. package/dist/synapse/qr_real.d.ts.map +1 -0
  48. package/dist/synapse/qr_real.js +397 -0
  49. package/dist/synapse/qr_real.js.map +1 -0
  50. package/dist/v1_87_regression.test.d.ts +5 -0
  51. package/dist/v1_87_regression.test.d.ts.map +1 -0
  52. package/dist/v1_87_regression.test.js +126 -0
  53. package/dist/v1_87_regression.test.js.map +1 -0
  54. package/package.json +1 -1
@@ -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: `Scan the QR code with your phone camera. 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,gIAAgI;YACxI,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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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * v1.87.0 -- regression suite covering the QR/handoff/NATURAL changes.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=v1_87_regression.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1_87_regression.test.d.ts","sourceRoot":"","sources":["../src/v1_87_regression.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}