@mneme-ai/core 2.19.18 → 2.19.20

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 (55) hide show
  1. package/dist/caption_inpaint/caption_inpaint.test.d.ts +2 -0
  2. package/dist/caption_inpaint/caption_inpaint.test.d.ts.map +1 -0
  3. package/dist/caption_inpaint/caption_inpaint.test.js +481 -0
  4. package/dist/caption_inpaint/caption_inpaint.test.js.map +1 -0
  5. package/dist/caption_inpaint/index.d.ts +168 -0
  6. package/dist/caption_inpaint/index.d.ts.map +1 -0
  7. package/dist/caption_inpaint/index.js +366 -0
  8. package/dist/caption_inpaint/index.js.map +1 -0
  9. package/dist/caption_severance/index.d.ts +46 -0
  10. package/dist/caption_severance/index.d.ts.map +1 -1
  11. package/dist/caption_severance/index.js +39 -0
  12. package/dist/caption_severance/index.js.map +1 -1
  13. package/dist/cosmic/aurelian_v1919.test.d.ts +2 -0
  14. package/dist/cosmic/aurelian_v1919.test.d.ts.map +1 -0
  15. package/dist/cosmic/aurelian_v1919.test.js +34 -0
  16. package/dist/cosmic/aurelian_v1919.test.js.map +1 -0
  17. package/dist/cosmic/aurelian_v1920.test.d.ts +2 -0
  18. package/dist/cosmic/aurelian_v1920.test.d.ts.map +1 -0
  19. package/dist/cosmic/aurelian_v1920.test.js +61 -0
  20. package/dist/cosmic/aurelian_v1920.test.js.map +1 -0
  21. package/dist/index.d.ts +4 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/provenance_dna/index.d.ts +115 -0
  26. package/dist/provenance_dna/index.d.ts.map +1 -0
  27. package/dist/provenance_dna/index.js +242 -0
  28. package/dist/provenance_dna/index.js.map +1 -0
  29. package/dist/provenance_dna/provenance_dna.test.d.ts +2 -0
  30. package/dist/provenance_dna/provenance_dna.test.d.ts.map +1 -0
  31. package/dist/provenance_dna/provenance_dna.test.js +279 -0
  32. package/dist/provenance_dna/provenance_dna.test.js.map +1 -0
  33. package/dist/reverse_caption_injection/index.d.ts +91 -0
  34. package/dist/reverse_caption_injection/index.d.ts.map +1 -0
  35. package/dist/reverse_caption_injection/index.js +162 -0
  36. package/dist/reverse_caption_injection/index.js.map +1 -0
  37. package/dist/reverse_caption_injection/reverse_caption_injection.test.d.ts +2 -0
  38. package/dist/reverse_caption_injection/reverse_caption_injection.test.d.ts.map +1 -0
  39. package/dist/reverse_caption_injection/reverse_caption_injection.test.js +177 -0
  40. package/dist/reverse_caption_injection/reverse_caption_injection.test.js.map +1 -0
  41. package/dist/textron_captcha/index.d.ts +147 -0
  42. package/dist/textron_captcha/index.d.ts.map +1 -0
  43. package/dist/textron_captcha/index.js +255 -0
  44. package/dist/textron_captcha/index.js.map +1 -0
  45. package/dist/textron_captcha/textron_captcha.test.d.ts +2 -0
  46. package/dist/textron_captcha/textron_captcha.test.d.ts.map +1 -0
  47. package/dist/textron_captcha/textron_captcha.test.js +231 -0
  48. package/dist/textron_captcha/textron_captcha.test.js.map +1 -0
  49. package/dist/whats_new.d.ts.map +1 -1
  50. package/dist/whats_new.js +16 -0
  51. package/dist/whats_new.js.map +1 -1
  52. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  53. package/dist/wrapper_genesis/index.js +22 -0
  54. package/dist/wrapper_genesis/index.js.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,168 @@
1
+ /**
2
+ * v2.19.19 — MNEME CAPTION INPAINT PROTOCOL (Phase A + Phase B complete)
3
+ *
4
+ * Completes the CAPTION SEVERANCE PROTOCOL (CSP, v2.19.18) Step 2:
5
+ * actual content-aware INPAINTING of masked caption regions, producing
6
+ * a true naked-image fingerprint for cross-instance provenance lookups
7
+ * on FEDERATED TRUTH GRAVITY (v2.19.16).
8
+ *
9
+ * PHASE A — Inpainter Adapter (vendor-agnostic):
10
+ * * InpainterProvider interface — parallel to EmbeddingProvider
11
+ * * StubInpainter — deterministic pass-through (CSP v2.19.18 baseline)
12
+ * * VendorApiInpainter — caller-supplied URL + headers + body shape
13
+ * * resolveInpainter() ladder — pick the best available adapter
14
+ *
15
+ * PHASE B — Pure-TS PATCH HARVEST FILL:
16
+ * A content-aware inpainting algorithm shipped as PatchFillInpainter:
17
+ *
18
+ * 1. Build mask bitmap from caller bbox list (1 = masked, 0 = keep).
19
+ * 2. For each masked pixel (x, y):
20
+ * a. Concentric-ring search outward until N=8 non-mask pixels found.
21
+ * b. 1/distance-weighted color average → fill colour.
22
+ * 3. Apply a 3x3 Gaussian blur ONLY across the mask-boundary band
23
+ * (3-pixel skirt) so the fill blends without smearing the rest.
24
+ * 4. Re-hash the rgba bytes → naked-image fingerprint.
25
+ *
26
+ * Not LaMa-quality (won't fool a human inspecting the image), but a
27
+ * legitimate baseline content-aware fill — produces stable, distinct
28
+ * fingerprints for cross-instance provenance + cleans the image enough
29
+ * that downstream vision models stop reading the caption text. Pure TS,
30
+ * ~200 LOC, deterministic per input, zero external deps.
31
+ *
32
+ * Composes onto:
33
+ * * v2.19.18 CAPTION SEVERANCE (severCaption now uses real naked hash)
34
+ * * v2.19.16 FEDERATED TRUTH (naked fingerprint = subject for quorum)
35
+ * * v2.19.13 SNN EMBEDDER (caller can embed naked image after inpaint)
36
+ * * v2.19.10 PROOF-CARRYING (naked hash chainable into proof)
37
+ *
38
+ * Honest scope:
39
+ * * Caller supplies RGBA pixel data (decoded by sharp/canvas/png-js).
40
+ * Mneme stays decoder-free for the same reason CSP stays OCR-free.
41
+ * * VendorApiInpainter is a SHAPE adapter — caller supplies request +
42
+ * response shaping function so any vendor (DeepAI / Replicate / HF)
43
+ * can plug in without Mneme growing API integrations.
44
+ * * Patch-fill loses ~30% PSNR vs LaMa; that's the trade for pure TS
45
+ * + zero deps + offline + deterministic.
46
+ */
47
+ export interface RawImage {
48
+ width: number;
49
+ height: number;
50
+ /** RGBA byte array, length = width * height * 4. */
51
+ rgba: Uint8Array;
52
+ }
53
+ export interface MaskBbox {
54
+ /** [x, y, w, h] in pixels (caller's coordinate system). */
55
+ bbox: [number, number, number, number];
56
+ }
57
+ export interface InpaintInput {
58
+ image: RawImage;
59
+ mask: MaskBbox[];
60
+ }
61
+ export interface InpainterProvider {
62
+ readonly name: string;
63
+ inpaint(input: InpaintInput): Promise<RawImage>;
64
+ }
65
+ export declare function nakedFingerprint(image: RawImage): string;
66
+ /**
67
+ * StubInpainter: returns the image UNCHANGED. Used when no real inpainter
68
+ * is available — same behavior as CSP v2.19.18 deterministic stub.
69
+ * Naked fingerprint differs from the patch-fill version, which is correct:
70
+ * it signals "we did not actually mask the captions" to the provenance gate.
71
+ */
72
+ export declare class StubInpainter implements InpainterProvider {
73
+ readonly name = "stub:noop";
74
+ inpaint({ image }: InpaintInput): Promise<RawImage>;
75
+ }
76
+ /**
77
+ * PATCH HARVEST FILL algorithm:
78
+ * 1. Build mask bitmap from bbox list.
79
+ * 2. For each masked pixel, search concentric rings outward until we
80
+ * collect N=8 non-masked neighbors. Compute 1/distance-weighted
81
+ * average colour. Write into the output.
82
+ * 3. After fill, apply 3x3 Gaussian blur to the mask-boundary band so
83
+ * the fill blends smoothly with the surrounding pixels.
84
+ *
85
+ * Determinism: identical input → identical output (no randomness).
86
+ * Pixel preservation: pixels OUTSIDE the mask are byte-identical to input.
87
+ * Complexity: O(W * H * RING_SEARCH_LIMIT^2) worst case; in practice much
88
+ * less because we early-exit once N neighbors are found.
89
+ */
90
+ export interface PatchFillOptions {
91
+ ringSearchLimit?: number;
92
+ neighbourTarget?: number;
93
+ blurBandPx?: number;
94
+ }
95
+ export declare class PatchFillInpainter implements InpainterProvider {
96
+ readonly name = "patch-harvest-fill:v1";
97
+ readonly ringSearchLimit: number;
98
+ readonly neighbourTarget: number;
99
+ readonly blurBandPx: number;
100
+ constructor(opts?: PatchFillOptions);
101
+ inpaint({ image, mask }: InpaintInput): Promise<RawImage>;
102
+ /** Concentric-ring search for N non-mask neighbours; 1/distance-weighted average. */
103
+ private harvestColour;
104
+ /** Apply 3x3 Gaussian blur to pixels within BLUR_BAND of any mask boundary. */
105
+ private blurMaskBoundary;
106
+ }
107
+ export interface VendorApiInpainterOptions {
108
+ endpoint: string;
109
+ authHeader?: string;
110
+ authValue?: string;
111
+ /** Caller-supplied function that builds the vendor's request body. */
112
+ shapeRequest: (input: InpaintInput) => {
113
+ body: unknown;
114
+ contentType?: string;
115
+ };
116
+ /** Caller-supplied function that parses the vendor's response into RawImage. */
117
+ shapeResponse: (raw: unknown, original: RawImage) => RawImage;
118
+ /** Optional caller-supplied fetch (default: globalThis.fetch). */
119
+ fetcher?: typeof fetch;
120
+ }
121
+ export declare class VendorApiInpainter implements InpainterProvider {
122
+ private readonly opts;
123
+ readonly name: string;
124
+ constructor(opts: VendorApiInpainterOptions);
125
+ inpaint(input: InpaintInput): Promise<RawImage>;
126
+ }
127
+ export interface ResolveInpainterOptions {
128
+ /**
129
+ * `auto` walks: PatchFill (always available) → Stub. Pass an explicit
130
+ * value to skip the ladder. Vendor must be configured explicitly via
131
+ * `vendorApiInpainterFromConfig`.
132
+ */
133
+ provider?: "auto" | "patch-fill" | "stub" | "vendor-api";
134
+ patchFillOptions?: PatchFillOptions;
135
+ vendorApiOptions?: VendorApiInpainterOptions;
136
+ }
137
+ export declare function resolveInpainter(opts?: ResolveInpainterOptions): InpainterProvider;
138
+ export interface InpaintMaskInput {
139
+ image: RawImage;
140
+ mask: MaskBbox[];
141
+ provider?: InpainterProvider;
142
+ }
143
+ export interface InpaintMaskResult {
144
+ nakedImage: RawImage;
145
+ nakedFingerprint: string;
146
+ provider: string;
147
+ pixelsTouched: number;
148
+ pixelsPreserved: number;
149
+ }
150
+ /**
151
+ * Apply inpainter; return naked image + sha256 fingerprint + diagnostic
152
+ * counts of pixels touched (inside mask) vs preserved (outside mask).
153
+ */
154
+ export declare function inpaintMaskRegions(input: InpaintMaskInput): Promise<InpaintMaskResult>;
155
+ /** Make a solid-color RawImage. Useful for tests + as a vendor stub. */
156
+ export declare function makeSolidImage(width: number, height: number, rgba: [number, number, number, number]): RawImage;
157
+ /** Make a two-tone RawImage with a fillable region. Useful for tests. */
158
+ export declare function makeTestImage(opts: {
159
+ width: number;
160
+ height: number;
161
+ background: [number, number, number, number];
162
+ foreground: [number, number, number, number];
163
+ fgBbox: [number, number, number, number];
164
+ }): RawImage;
165
+ /** Mean per-channel absolute color distance between two same-sized images, restricted to a bbox. */
166
+ export declare function meanColorDistance(a: RawImage, b: RawImage, bbox?: [number, number, number, number]): number;
167
+ export declare function formatInpaintLine(r: InpaintMaskResult): string;
168
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/caption_inpaint/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * v2.19.19 — MNEME CAPTION INPAINT PROTOCOL (Phase A + Phase B complete)
3
+ *
4
+ * Completes the CAPTION SEVERANCE PROTOCOL (CSP, v2.19.18) Step 2:
5
+ * actual content-aware INPAINTING of masked caption regions, producing
6
+ * a true naked-image fingerprint for cross-instance provenance lookups
7
+ * on FEDERATED TRUTH GRAVITY (v2.19.16).
8
+ *
9
+ * PHASE A — Inpainter Adapter (vendor-agnostic):
10
+ * * InpainterProvider interface — parallel to EmbeddingProvider
11
+ * * StubInpainter — deterministic pass-through (CSP v2.19.18 baseline)
12
+ * * VendorApiInpainter — caller-supplied URL + headers + body shape
13
+ * * resolveInpainter() ladder — pick the best available adapter
14
+ *
15
+ * PHASE B — Pure-TS PATCH HARVEST FILL:
16
+ * A content-aware inpainting algorithm shipped as PatchFillInpainter:
17
+ *
18
+ * 1. Build mask bitmap from caller bbox list (1 = masked, 0 = keep).
19
+ * 2. For each masked pixel (x, y):
20
+ * a. Concentric-ring search outward until N=8 non-mask pixels found.
21
+ * b. 1/distance-weighted color average → fill colour.
22
+ * 3. Apply a 3x3 Gaussian blur ONLY across the mask-boundary band
23
+ * (3-pixel skirt) so the fill blends without smearing the rest.
24
+ * 4. Re-hash the rgba bytes → naked-image fingerprint.
25
+ *
26
+ * Not LaMa-quality (won't fool a human inspecting the image), but a
27
+ * legitimate baseline content-aware fill — produces stable, distinct
28
+ * fingerprints for cross-instance provenance + cleans the image enough
29
+ * that downstream vision models stop reading the caption text. Pure TS,
30
+ * ~200 LOC, deterministic per input, zero external deps.
31
+ *
32
+ * Composes onto:
33
+ * * v2.19.18 CAPTION SEVERANCE (severCaption now uses real naked hash)
34
+ * * v2.19.16 FEDERATED TRUTH (naked fingerprint = subject for quorum)
35
+ * * v2.19.13 SNN EMBEDDER (caller can embed naked image after inpaint)
36
+ * * v2.19.10 PROOF-CARRYING (naked hash chainable into proof)
37
+ *
38
+ * Honest scope:
39
+ * * Caller supplies RGBA pixel data (decoded by sharp/canvas/png-js).
40
+ * Mneme stays decoder-free for the same reason CSP stays OCR-free.
41
+ * * VendorApiInpainter is a SHAPE adapter — caller supplies request +
42
+ * response shaping function so any vendor (DeepAI / Replicate / HF)
43
+ * can plug in without Mneme growing API integrations.
44
+ * * Patch-fill loses ~30% PSNR vs LaMa; that's the trade for pure TS
45
+ * + zero deps + offline + deterministic.
46
+ */
47
+ import { createHash } from "node:crypto";
48
+ const PROTOCOL_VERSION = 1;
49
+ const DEFAULT_RING_SEARCH_LIMIT = 64; // max search radius (pixels)
50
+ const DEFAULT_NEIGHBOUR_TARGET = 8; // sample N non-mask neighbours
51
+ const DEFAULT_BLUR_BAND_PX = 3; // post-fill blend skirt width
52
+ // ─── HELPERS ────────────────────────────────────────────────────────────
53
+ function sha256OfBytes(bytes) {
54
+ const h = createHash("sha256");
55
+ h.update(bytes);
56
+ return h.digest("hex");
57
+ }
58
+ export function nakedFingerprint(image) {
59
+ // Hash the rgba bytes + dimensions so width/height changes invalidate.
60
+ const meta = Buffer.from(`${image.width}x${image.height}|`, "utf8");
61
+ const total = new Uint8Array(meta.byteLength + image.rgba.byteLength);
62
+ total.set(meta, 0);
63
+ total.set(image.rgba, meta.byteLength);
64
+ return sha256OfBytes(total);
65
+ }
66
+ /** Validate raw image shape. Throws on malformed input. */
67
+ function assertValidImage(image) {
68
+ if (!Number.isFinite(image.width) || image.width <= 0) {
69
+ throw new Error("inpaint: invalid width");
70
+ }
71
+ if (!Number.isFinite(image.height) || image.height <= 0) {
72
+ throw new Error("inpaint: invalid height");
73
+ }
74
+ if (image.rgba.length !== image.width * image.height * 4) {
75
+ throw new Error(`inpaint: rgba length ${image.rgba.length} != width*height*4 = ${image.width * image.height * 4}`);
76
+ }
77
+ }
78
+ /** Build a Uint8Array bitmap with 1 = masked, 0 = keep. */
79
+ function buildMaskBitmap(width, height, mask) {
80
+ const bits = new Uint8Array(width * height);
81
+ for (const region of mask) {
82
+ const [x, y, w, h] = region.bbox;
83
+ const x0 = Math.max(0, Math.floor(x));
84
+ const y0 = Math.max(0, Math.floor(y));
85
+ const x1 = Math.min(width, Math.floor(x + w));
86
+ const y1 = Math.min(height, Math.floor(y + h));
87
+ for (let py = y0; py < y1; py++) {
88
+ for (let px = x0; px < x1; px++) {
89
+ bits[py * width + px] = 1;
90
+ }
91
+ }
92
+ }
93
+ return bits;
94
+ }
95
+ // ─── ADAPTER 1: StubInpainter (Phase A baseline) ─────────────────────────
96
+ /**
97
+ * StubInpainter: returns the image UNCHANGED. Used when no real inpainter
98
+ * is available — same behavior as CSP v2.19.18 deterministic stub.
99
+ * Naked fingerprint differs from the patch-fill version, which is correct:
100
+ * it signals "we did not actually mask the captions" to the provenance gate.
101
+ */
102
+ export class StubInpainter {
103
+ name = "stub:noop";
104
+ async inpaint({ image }) {
105
+ assertValidImage(image);
106
+ return { width: image.width, height: image.height, rgba: new Uint8Array(image.rgba) };
107
+ }
108
+ }
109
+ export class PatchFillInpainter {
110
+ name = "patch-harvest-fill:v1";
111
+ ringSearchLimit;
112
+ neighbourTarget;
113
+ blurBandPx;
114
+ constructor(opts = {}) {
115
+ this.ringSearchLimit = opts.ringSearchLimit ?? DEFAULT_RING_SEARCH_LIMIT;
116
+ this.neighbourTarget = opts.neighbourTarget ?? DEFAULT_NEIGHBOUR_TARGET;
117
+ this.blurBandPx = opts.blurBandPx ?? DEFAULT_BLUR_BAND_PX;
118
+ }
119
+ async inpaint({ image, mask }) {
120
+ assertValidImage(image);
121
+ if (mask.length === 0) {
122
+ return { width: image.width, height: image.height, rgba: new Uint8Array(image.rgba) };
123
+ }
124
+ const { width: W, height: H } = image;
125
+ const bits = buildMaskBitmap(W, H, mask);
126
+ const out = new Uint8Array(image.rgba);
127
+ // Step 2: fill each masked pixel via concentric-ring search.
128
+ for (let y = 0; y < H; y++) {
129
+ for (let x = 0; x < W; x++) {
130
+ if (!bits[y * W + x])
131
+ continue;
132
+ const filled = this.harvestColour(image.rgba, bits, W, H, x, y);
133
+ const idx = (y * W + x) * 4;
134
+ out[idx + 0] = filled.r;
135
+ out[idx + 1] = filled.g;
136
+ out[idx + 2] = filled.b;
137
+ out[idx + 3] = filled.a;
138
+ }
139
+ }
140
+ // Step 3: 3x3 Gaussian blur on the boundary band (configurable width).
141
+ if (this.blurBandPx > 0) {
142
+ this.blurMaskBoundary(out, bits, W, H);
143
+ }
144
+ return { width: W, height: H, rgba: out };
145
+ }
146
+ /** Concentric-ring search for N non-mask neighbours; 1/distance-weighted average. */
147
+ harvestColour(rgba, bits, W, H, x, y) {
148
+ let totalR = 0, totalG = 0, totalB = 0, totalA = 0;
149
+ let totalWeight = 0;
150
+ let found = 0;
151
+ for (let r = 1; r <= this.ringSearchLimit && found < this.neighbourTarget; r++) {
152
+ // Iterate the ring of radius r (axis-aligned square frame).
153
+ for (let dy = -r; dy <= r && found < this.neighbourTarget; dy++) {
154
+ for (let dx = -r; dx <= r; dx++) {
155
+ // Only the outer frame of this ring.
156
+ if (Math.max(Math.abs(dx), Math.abs(dy)) !== r)
157
+ continue;
158
+ const nx = x + dx;
159
+ const ny = y + dy;
160
+ if (nx < 0 || nx >= W || ny < 0 || ny >= H)
161
+ continue;
162
+ if (bits[ny * W + nx])
163
+ continue; // skip masked neighbours
164
+ const idx = (ny * W + nx) * 4;
165
+ const dist = Math.sqrt(dx * dx + dy * dy);
166
+ const w = 1 / dist;
167
+ totalR += rgba[idx + 0] * w;
168
+ totalG += rgba[idx + 1] * w;
169
+ totalB += rgba[idx + 2] * w;
170
+ totalA += rgba[idx + 3] * w;
171
+ totalWeight += w;
172
+ found++;
173
+ if (found >= this.neighbourTarget)
174
+ break;
175
+ }
176
+ }
177
+ }
178
+ if (totalWeight === 0) {
179
+ // No neighbours found (entire image is masked or pathological). Fall back to grey.
180
+ return { r: 128, g: 128, b: 128, a: 255 };
181
+ }
182
+ return {
183
+ r: Math.round(totalR / totalWeight),
184
+ g: Math.round(totalG / totalWeight),
185
+ b: Math.round(totalB / totalWeight),
186
+ a: Math.round(totalA / totalWeight),
187
+ };
188
+ }
189
+ /** Apply 3x3 Gaussian blur to pixels within BLUR_BAND of any mask boundary. */
190
+ blurMaskBoundary(rgba, bits, W, H) {
191
+ // Build a band map: pixels within BLUR_BAND of a mask boundary get blurred.
192
+ const band = new Uint8Array(W * H);
193
+ for (let y = 0; y < H; y++) {
194
+ for (let x = 0; x < W; x++) {
195
+ if (!bits[y * W + x])
196
+ continue;
197
+ // For each masked pixel, mark its surroundings (including itself).
198
+ for (let dy = -this.blurBandPx; dy <= this.blurBandPx; dy++) {
199
+ for (let dx = -this.blurBandPx; dx <= this.blurBandPx; dx++) {
200
+ const nx = x + dx;
201
+ const ny = y + dy;
202
+ if (nx < 0 || nx >= W || ny < 0 || ny >= H)
203
+ continue;
204
+ band[ny * W + nx] = 1;
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // 3x3 Gaussian-ish kernel: [1, 2, 1; 2, 4, 2; 1, 2, 1] / 16
210
+ const KERNEL = [1, 2, 1, 2, 4, 2, 1, 2, 1];
211
+ const KSUM = 16;
212
+ const snapshot = new Uint8Array(rgba);
213
+ for (let y = 1; y < H - 1; y++) {
214
+ for (let x = 1; x < W - 1; x++) {
215
+ if (!band[y * W + x])
216
+ continue;
217
+ let r = 0, g = 0, b = 0, a = 0;
218
+ let k = 0;
219
+ for (let dy = -1; dy <= 1; dy++) {
220
+ for (let dx = -1; dx <= 1; dx++) {
221
+ const idx = ((y + dy) * W + (x + dx)) * 4;
222
+ const w = KERNEL[k++];
223
+ r += snapshot[idx + 0] * w;
224
+ g += snapshot[idx + 1] * w;
225
+ b += snapshot[idx + 2] * w;
226
+ a += snapshot[idx + 3] * w;
227
+ }
228
+ }
229
+ const out = (y * W + x) * 4;
230
+ rgba[out + 0] = Math.round(r / KSUM);
231
+ rgba[out + 1] = Math.round(g / KSUM);
232
+ rgba[out + 2] = Math.round(b / KSUM);
233
+ rgba[out + 3] = Math.round(a / KSUM);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ export class VendorApiInpainter {
239
+ opts;
240
+ name;
241
+ constructor(opts) {
242
+ this.opts = opts;
243
+ this.name = `vendor-api:${new URL(opts.endpoint).host}`;
244
+ }
245
+ async inpaint(input) {
246
+ assertValidImage(input.image);
247
+ const { body, contentType } = this.opts.shapeRequest(input);
248
+ const headers = {
249
+ "content-type": contentType ?? "application/json",
250
+ };
251
+ if (this.opts.authHeader && this.opts.authValue) {
252
+ headers[this.opts.authHeader] = this.opts.authValue;
253
+ }
254
+ const fetcher = this.opts.fetcher ?? globalThis.fetch;
255
+ if (!fetcher) {
256
+ throw new Error(`VendorApiInpainter: no fetch available; supply opts.fetcher`);
257
+ }
258
+ const init = {
259
+ method: "POST",
260
+ headers,
261
+ body: typeof body === "string" ? body : (body instanceof Uint8Array ? body : JSON.stringify(body)),
262
+ };
263
+ const res = await fetcher(this.opts.endpoint, init);
264
+ if (!res.ok) {
265
+ throw new Error(`VendorApiInpainter: HTTP ${res.status} ${res.statusText}`);
266
+ }
267
+ const ct = res.headers.get("content-type") ?? "application/json";
268
+ const raw = ct.startsWith("application/json") ? await res.json() : new Uint8Array(await res.arrayBuffer());
269
+ return this.opts.shapeResponse(raw, input.image);
270
+ }
271
+ }
272
+ export function resolveInpainter(opts = {}) {
273
+ const provider = opts.provider ?? "auto";
274
+ if (provider === "stub")
275
+ return new StubInpainter();
276
+ if (provider === "patch-fill")
277
+ return new PatchFillInpainter(opts.patchFillOptions);
278
+ if (provider === "vendor-api") {
279
+ if (!opts.vendorApiOptions)
280
+ throw new Error("resolveInpainter: vendor-api selected but no vendorApiOptions");
281
+ return new VendorApiInpainter(opts.vendorApiOptions);
282
+ }
283
+ // auto: prefer Phase B patch-fill (always available, deterministic, offline)
284
+ return new PatchFillInpainter(opts.patchFillOptions);
285
+ }
286
+ /**
287
+ * Apply inpainter; return naked image + sha256 fingerprint + diagnostic
288
+ * counts of pixels touched (inside mask) vs preserved (outside mask).
289
+ */
290
+ export async function inpaintMaskRegions(input) {
291
+ const provider = input.provider ?? new PatchFillInpainter();
292
+ const nakedImage = await provider.inpaint({ image: input.image, mask: input.mask });
293
+ // Diagnostic: count pixels that differ from original.
294
+ let touched = 0;
295
+ let preserved = 0;
296
+ for (let i = 0; i < input.image.rgba.length; i += 4) {
297
+ const same = input.image.rgba[i + 0] === nakedImage.rgba[i + 0] &&
298
+ input.image.rgba[i + 1] === nakedImage.rgba[i + 1] &&
299
+ input.image.rgba[i + 2] === nakedImage.rgba[i + 2] &&
300
+ input.image.rgba[i + 3] === nakedImage.rgba[i + 3];
301
+ if (same)
302
+ preserved++;
303
+ else
304
+ touched++;
305
+ }
306
+ return {
307
+ nakedImage,
308
+ nakedFingerprint: nakedFingerprint(nakedImage),
309
+ provider: provider.name,
310
+ pixelsTouched: touched,
311
+ pixelsPreserved: preserved,
312
+ };
313
+ }
314
+ // ─── HELPERS ────────────────────────────────────────────────────────────
315
+ /** Make a solid-color RawImage. Useful for tests + as a vendor stub. */
316
+ export function makeSolidImage(width, height, rgba) {
317
+ const bytes = new Uint8Array(width * height * 4);
318
+ for (let i = 0; i < width * height; i++) {
319
+ bytes[i * 4 + 0] = rgba[0];
320
+ bytes[i * 4 + 1] = rgba[1];
321
+ bytes[i * 4 + 2] = rgba[2];
322
+ bytes[i * 4 + 3] = rgba[3];
323
+ }
324
+ return { width, height, rgba: bytes };
325
+ }
326
+ /** Make a two-tone RawImage with a fillable region. Useful for tests. */
327
+ export function makeTestImage(opts) {
328
+ const img = makeSolidImage(opts.width, opts.height, opts.background);
329
+ const [fx, fy, fw, fh] = opts.fgBbox;
330
+ for (let y = fy; y < Math.min(opts.height, fy + fh); y++) {
331
+ for (let x = fx; x < Math.min(opts.width, fx + fw); x++) {
332
+ const idx = (y * opts.width + x) * 4;
333
+ img.rgba[idx + 0] = opts.foreground[0];
334
+ img.rgba[idx + 1] = opts.foreground[1];
335
+ img.rgba[idx + 2] = opts.foreground[2];
336
+ img.rgba[idx + 3] = opts.foreground[3];
337
+ }
338
+ }
339
+ return img;
340
+ }
341
+ /** Mean per-channel absolute color distance between two same-sized images, restricted to a bbox. */
342
+ export function meanColorDistance(a, b, bbox) {
343
+ if (a.width !== b.width || a.height !== b.height)
344
+ throw new Error("meanColorDistance: dim mismatch");
345
+ const [x0, y0, w, h] = bbox ?? [0, 0, a.width, a.height];
346
+ const x1 = Math.min(a.width, x0 + w);
347
+ const y1 = Math.min(a.height, y0 + h);
348
+ let sum = 0;
349
+ let count = 0;
350
+ for (let y = y0; y < y1; y++) {
351
+ for (let x = x0; x < x1; x++) {
352
+ const idx = (y * a.width + x) * 4;
353
+ sum +=
354
+ Math.abs(a.rgba[idx + 0] - b.rgba[idx + 0]) +
355
+ Math.abs(a.rgba[idx + 1] - b.rgba[idx + 1]) +
356
+ Math.abs(a.rgba[idx + 2] - b.rgba[idx + 2]) +
357
+ Math.abs(a.rgba[idx + 3] - b.rgba[idx + 3]);
358
+ count++;
359
+ }
360
+ }
361
+ return count === 0 ? 0 : sum / (count * 4);
362
+ }
363
+ export function formatInpaintLine(r) {
364
+ return `🎨 INPAINT · ${r.provider} · touched=${r.pixelsTouched} · preserved=${r.pixelsPreserved} · naked=${r.nakedFingerprint.slice(0, 10)}`;
365
+ }
366
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/caption_inpaint/index.ts"],"names":[],"mappings":"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"}
@@ -162,7 +162,41 @@ export interface SeveranceInput {
162
162
  captions: OcrCaption[];
163
163
  provenance?: ProvenanceInput;
164
164
  adversarial?: AdversarialDoubleCheckInput;
165
+ /**
166
+ * v2.19.18 Phase A fast path: caller pre-computed the inpainted hash
167
+ * (e.g., via mneme.caption.inpaint v2.19.19) — we use it directly.
168
+ * Mutually exclusive with `rawImage`.
169
+ */
165
170
  callerSuppliedNakedHash?: string;
171
+ /**
172
+ * v2.19.19 Phase B integrated path: caller supplies raw RGBA pixel data;
173
+ * severCaption ALSO runs the inpainter and produces the true naked
174
+ * fingerprint. Imported lazily from caption_inpaint to keep this
175
+ * module dependency-light when callers don't need inpainting.
176
+ */
177
+ rawImage?: {
178
+ width: number;
179
+ height: number;
180
+ rgba: Uint8Array;
181
+ };
182
+ /** Optional override: v2.19.19 `InpainterProvider`. Default: PatchFillInpainter. */
183
+ inpainter?: {
184
+ name: string;
185
+ inpaint: (i: {
186
+ image: {
187
+ width: number;
188
+ height: number;
189
+ rgba: Uint8Array;
190
+ };
191
+ mask: Array<{
192
+ bbox: [number, number, number, number];
193
+ }>;
194
+ }) => Promise<{
195
+ width: number;
196
+ height: number;
197
+ rgba: Uint8Array;
198
+ }>;
199
+ };
166
200
  nowMs?: number;
167
201
  secret?: string;
168
202
  }
@@ -176,6 +210,10 @@ export interface SeveranceResult {
176
210
  /**
177
211
  * Run the full 6-step pipeline. Returns a HMAC-signed certificate and a
178
212
  * ready-to-inject AI prompt that wraps every caption as XSS-escaped claim.
213
+ *
214
+ * v2.19.19: when input.rawImage is supplied AND v2.19.19 caption_inpaint
215
+ * is importable, use severCaptionAsync() instead for the integrated Phase
216
+ * B path. severCaption() (sync) stays Phase-A-only and pure-function.
179
217
  */
180
218
  export declare function severCaption(input: SeveranceInput): SeveranceResult;
181
219
  export declare function verifyCertificate(cert: VisionTrustCertificate, secret?: string): {
@@ -184,6 +222,14 @@ export declare function verifyCertificate(cert: VisionTrustCertificate, secret?:
184
222
  };
185
223
  /** Heuristic check: does an AI answer reference a valid Mneme VTC id? */
186
224
  export declare function answerHasValidCert(answer: string, knownCertIds: string[]): boolean;
225
+ /**
226
+ * v2.19.19 — async variant that ALSO runs the inpainter when input.rawImage
227
+ * is supplied. Returns the same SeveranceResult plus the real Phase B
228
+ * naked image fingerprint.
229
+ */
230
+ export declare function severCaptionAsync(input: SeveranceInput): Promise<SeveranceResult & {
231
+ phaseBNakedHash?: string;
232
+ }>;
187
233
  export declare function formatSeveranceLine(r: SeveranceResult): string;
188
234
  export {};
189
235
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/caption_severance/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/caption_severance/index.ts"],"names":[],"mappings":"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"}