@codemem/core 0.29.1 → 0.29.3
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.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3083 -2561
- package/dist/index.js.map +1 -1
- package/dist/maintenance/ai-structured.d.ts +8 -0
- package/dist/maintenance/ai-structured.d.ts.map +1 -1
- package/dist/maintenance/backfill-narrative.d.ts +7 -0
- package/dist/maintenance/backfill-narrative.d.ts.map +1 -1
- package/dist/maintenance/backfill-tags.d.ts +11 -0
- package/dist/maintenance/backfill-tags.d.ts.map +1 -1
- package/dist/maintenance/scan-secrets.d.ts +59 -0
- package/dist/maintenance/scan-secrets.d.ts.map +1 -0
- package/dist/maintenance.d.ts +2 -0
- package/dist/maintenance.d.ts.map +1 -1
- package/dist/secret-scanner.d.ts +151 -0
- package/dist/secret-scanner.d.ts.map +1 -0
- package/dist/store.d.ts +32 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/sync-bootstrap.d.ts +2 -1
- package/dist/sync-bootstrap.d.ts.map +1 -1
- package/dist/sync-daemon.d.ts +2 -1
- package/dist/sync-daemon.d.ts.map +1 -1
- package/dist/sync-pass.d.ts +8 -0
- package/dist/sync-pass.d.ts.map +1 -1
- package/dist/sync-replication.d.ts +2 -1
- package/dist/sync-replication.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Database } from "../db.js";
|
|
2
2
|
import { ObserverClient } from "../observer-client.js";
|
|
3
|
+
import { SecretScanner } from "../secret-scanner.js";
|
|
3
4
|
type StructuredBackfillObserver = Pick<ObserverClient, "observe" | "observeStructuredJson" | "getStatus">;
|
|
4
5
|
export interface AIBackfillStructuredContentResult {
|
|
5
6
|
checked: number;
|
|
@@ -21,6 +22,13 @@ export interface AIBackfillStructuredContentOptions {
|
|
|
21
22
|
dryRun?: boolean;
|
|
22
23
|
overwrite?: boolean;
|
|
23
24
|
observer?: StructuredBackfillObserver;
|
|
25
|
+
/**
|
|
26
|
+
* Secret scanner used to redact AI-generated narrative/facts/concepts
|
|
27
|
+
* before they are written back to memory_items. The summarizer can launder
|
|
28
|
+
* a secret past pattern-based detection on the source or invent new
|
|
29
|
+
* secret-shaped strings, so output must be re-scanned independent of input.
|
|
30
|
+
*/
|
|
31
|
+
scanner?: SecretScanner;
|
|
24
32
|
}
|
|
25
33
|
/**
|
|
26
34
|
* AI-powered backfill for older non-session-summary memories that still lack
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-structured.d.ts","sourceRoot":"","sources":["../../src/maintenance/ai-structured.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOzC,OAAO,EAAsB,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-structured.d.ts","sourceRoot":"","sources":["../../src/maintenance/ai-structured.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOzC,OAAO,EAAsB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqCrD,KAAK,0BAA0B,GAAG,IAAI,CACrC,cAAc,EACd,SAAS,GAAG,uBAAuB,GAAG,WAAW,CACjD,CAAC;AAEF,MAAM,WAAW,iCAAiC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB;AAyLD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAChD,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,kCAAuC,GAC3C,OAAO,CAAC,iCAAiC,CAAC,CA4K5C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Database } from "../db.js";
|
|
2
|
+
import { SecretScanner } from "../secret-scanner.js";
|
|
2
3
|
export interface BackfillNarrativeResult {
|
|
3
4
|
checked: number;
|
|
4
5
|
updated: number;
|
|
@@ -7,6 +8,12 @@ export interface BackfillNarrativeResult {
|
|
|
7
8
|
export interface BackfillNarrativeOptions {
|
|
8
9
|
limit?: number | null;
|
|
9
10
|
dryRun?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Secret scanner used to redact extracted narrative before persistence.
|
|
13
|
+
* Source body_text on legacy rows pre-dates the scanner, so the extracted
|
|
14
|
+
* narrative cannot be assumed redaction-derivative.
|
|
15
|
+
*/
|
|
16
|
+
scanner?: SecretScanner;
|
|
10
17
|
}
|
|
11
18
|
/**
|
|
12
19
|
* Backfill narrative for session_summary memories that have structured
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-narrative.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-narrative.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"backfill-narrative.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-narrative.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,wBAA6B,GACjC,uBAAuB,CAgDzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Database } from "../db.js";
|
|
2
|
+
import { SecretScanner } from "../secret-scanner.js";
|
|
2
3
|
export interface BackfillTagsTextOptions {
|
|
3
4
|
limit?: number | null;
|
|
4
5
|
since?: string | null;
|
|
@@ -6,6 +7,16 @@ export interface BackfillTagsTextOptions {
|
|
|
6
7
|
activeOnly?: boolean;
|
|
7
8
|
dryRun?: boolean;
|
|
8
9
|
memoryIds?: number[] | null;
|
|
10
|
+
/**
|
|
11
|
+
* Secret scanner used to redact derived tag values before persistence.
|
|
12
|
+
* Tags derive from kind/title/concepts/files which are persisted columns —
|
|
13
|
+
* but legacy rows pre-date the scanner so we cannot trust those columns to
|
|
14
|
+
* be redacted-derivative. Caveat: `deriveTags` lowercases tags before this
|
|
15
|
+
* scan runs, so case-sensitive rules (AWS AKIA*, Google AIza*, JWT eyJ*)
|
|
16
|
+
* won't fire on legacy-derived tags. Catching the long tail there is the
|
|
17
|
+
* job of the retroactive sweep (codemem-vb2s).
|
|
18
|
+
*/
|
|
19
|
+
scanner?: SecretScanner;
|
|
9
20
|
}
|
|
10
21
|
export interface BackfillTagsTextResult {
|
|
11
22
|
checked: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-tags.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-tags.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"backfill-tags.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-tags.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAW,uBAAuB;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,uBAA4B,GAChC,sBAAsB,CA0FxB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retroactive secret-scan sweep over already-stored memories.
|
|
3
|
+
*
|
|
4
|
+
* Day-one users of the scanner have an unscanned backlog: memories written
|
|
5
|
+
* before the scanner shipped retain whatever secret-shaped content was in
|
|
6
|
+
* their bodies, titles, narratives, etc. This sweep walks `memory_items`,
|
|
7
|
+
* scans every content-bearing column, writes redacted versions back, and
|
|
8
|
+
* refreshes junction tables (`memory_concept_refs`, `memory_file_refs`)
|
|
9
|
+
* derived from the redacted columns so they cannot retain stale unredacted
|
|
10
|
+
* concept strings.
|
|
11
|
+
*
|
|
12
|
+
* Idempotent — scanning an already-redacted string yields the same string
|
|
13
|
+
* (the `[REDACTED:<kind>]` markers do not match any default rule), so a
|
|
14
|
+
* second run is a no-op except for the work of reading rows.
|
|
15
|
+
*
|
|
16
|
+
* Concurrency — each row is updated in its own transaction with a
|
|
17
|
+
* `WHERE rev = ?` guard so a concurrent legitimate write that bumped `rev`
|
|
18
|
+
* is not silently clobbered. The local-only sweep does not bump `rev` or
|
|
19
|
+
* record a replication op; peers redact their own copies via the
|
|
20
|
+
* sync-receive scanner.
|
|
21
|
+
*/
|
|
22
|
+
import type { Database } from "../db.js";
|
|
23
|
+
import { type ScanDetection, SecretScanner } from "../secret-scanner.js";
|
|
24
|
+
export interface ScanSecretsRetroactiveOptions {
|
|
25
|
+
/** Max rows to scan in this run. Omit (or pass null/0) for "everything". */
|
|
26
|
+
limit?: number | null;
|
|
27
|
+
/** Preview redactions without writing. */
|
|
28
|
+
dryRun?: boolean;
|
|
29
|
+
/** Custom scanner. Defaults to a fresh `SecretScanner` with built-in rules. */
|
|
30
|
+
scanner?: SecretScanner;
|
|
31
|
+
/**
|
|
32
|
+
* Per-row content length above which we skip and count rather than spend
|
|
33
|
+
* scanner CPU on a single huge body. Default 1 MiB. Note: this is a CPU
|
|
34
|
+
* cap, not a memory cap — the row's columns are already loaded into Node
|
|
35
|
+
* before this check.
|
|
36
|
+
*/
|
|
37
|
+
maxRowBytes?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Per-row summary of what got redacted. The redacted title is safe to display
|
|
41
|
+
* (markers, not the original value) and lets a caller manually look the
|
|
42
|
+
* memory up in the DB to confirm a hit was a real secret vs. a false positive
|
|
43
|
+
* before committing to a non-dry-run sweep.
|
|
44
|
+
*/
|
|
45
|
+
export interface ScanSecretsRetroactiveSample {
|
|
46
|
+
id: number;
|
|
47
|
+
redactedTitle: string | null;
|
|
48
|
+
detections: ScanDetection[];
|
|
49
|
+
}
|
|
50
|
+
export interface ScanSecretsRetroactiveResult {
|
|
51
|
+
checked: number;
|
|
52
|
+
updated: number;
|
|
53
|
+
skippedOversized: number;
|
|
54
|
+
staleWrites: number;
|
|
55
|
+
detections: ScanDetection[];
|
|
56
|
+
samples: ScanSecretsRetroactiveSample[];
|
|
57
|
+
}
|
|
58
|
+
export declare function scanSecretsRetroactive(db: Database, opts?: ScanSecretsRetroactiveOptions): ScanSecretsRetroactiveResult;
|
|
59
|
+
//# sourceMappingURL=scan-secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-secrets.d.ts","sourceRoot":"","sources":["../../src/maintenance/scan-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAmB,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1F,MAAM,WAAW,6BAA6B;IAC7C,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,4BAA4B,EAAE,CAAC;CACxC;AA2JD,wBAAgB,sBAAsB,CACrC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,6BAAkC,GACtC,4BAA4B,CAkM9B"}
|
package/dist/maintenance.d.ts
CHANGED
|
@@ -18,4 +18,6 @@ export { applyMemoryDedupKeyUpdates, backfillMemoryDedupKeys, planMemoryDedupKey
|
|
|
18
18
|
export { extractNarrativeFromBody } from "./maintenance/narrative-extract.js";
|
|
19
19
|
export type { AIBackfillStructuredContentOptions, AIBackfillStructuredContentResult, } from "./maintenance/ai-structured.js";
|
|
20
20
|
export { aiBackfillStructuredContent } from "./maintenance/ai-structured.js";
|
|
21
|
+
export type { ScanSecretsRetroactiveOptions, ScanSecretsRetroactiveResult, } from "./maintenance/scan-secrets.js";
|
|
22
|
+
export { scanSecretsRetroactive } from "./maintenance/scan-secrets.js";
|
|
21
23
|
//# sourceMappingURL=maintenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../src/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACN,wBAAwB,EACxB,mBAAmB,GACnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACN,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EACX,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMpF,YAAY,EACX,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,YAAY,EACX,kCAAkC,EAClC,yBAAyB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,2BAA2B,EAC3B,+BAA+B,GAC/B,MAAM,6BAA6B,CAAC;AAMrC,YAAY,EACX,0BAA0B,EAC1B,yBAAyB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAMpE,YAAY,EACX,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACX,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAM9E,YAAY,EACX,kCAAkC,EAClC,iCAAiC,GACjC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../src/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACN,wBAAwB,EACxB,mBAAmB,GACnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACN,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EACX,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMpF,YAAY,EACX,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,YAAY,EACX,kCAAkC,EAClC,yBAAyB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,2BAA2B,EAC3B,+BAA+B,GAC/B,MAAM,6BAA6B,CAAC;AAMrC,YAAY,EACX,0BAA0B,EAC1B,yBAAyB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAMpE,YAAY,EACX,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACX,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAM9E,YAAY,EACX,kCAAkC,EAClC,iCAAiC,GACjC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,YAAY,EACX,6BAA6B,EAC7B,4BAA4B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-time secret scanner for the codemem store.
|
|
3
|
+
*
|
|
4
|
+
* Detects common secrets in memory write payloads (titles, bodies, narratives,
|
|
5
|
+
* structured fields, and free-form metadata) and replaces them with
|
|
6
|
+
* `[REDACTED:<kind>]` markers before persistence. There is no override flag:
|
|
7
|
+
* codemem has no legitimate use case for storing live secrets, so any escape
|
|
8
|
+
* hatch becomes the bypass that makes scanning theater.
|
|
9
|
+
*
|
|
10
|
+
* Scope of this foundation: the local-write chokepoint inside `MemoryStore.remember`.
|
|
11
|
+
* Other writers into `memory_items` (sync-replication apply, sync-bootstrap
|
|
12
|
+
* snapshot apply, AI/maintenance backfills of narrative/facts/concepts/tags)
|
|
13
|
+
* are NOT scanned by this module yet — they are addressed by dependent bd
|
|
14
|
+
* issues (codemem-hflk for sync-receive, codemem-tzrn for compaction/AI output,
|
|
15
|
+
* codemem-vb2s for retroactive sweep over already-stored content). Workspace-level
|
|
16
|
+
* rule overrides (codemem-ben8) and the test-fixture allowlist (codemem-jasn)
|
|
17
|
+
* plug in via `ScannerOptions` without changing this module's shape.
|
|
18
|
+
*/
|
|
19
|
+
export interface SecretRule {
|
|
20
|
+
/** Stable identifier surfaced in the redaction marker and detection log. */
|
|
21
|
+
kind: string;
|
|
22
|
+
/** Regex used to find candidate matches. Must be a global regex. */
|
|
23
|
+
pattern: RegExp;
|
|
24
|
+
/**
|
|
25
|
+
* Optional minimum Shannon entropy (bits/char) the matched substring must
|
|
26
|
+
* meet to be redacted. Filters out low-entropy false positives like
|
|
27
|
+
* common words that happen to look like a secret.
|
|
28
|
+
*/
|
|
29
|
+
minEntropy?: number;
|
|
30
|
+
/**
|
|
31
|
+
* If set, only the indicated capture group (1-based) is replaced. Useful
|
|
32
|
+
* for context-aware rules where the match includes a known prefix that
|
|
33
|
+
* should be preserved.
|
|
34
|
+
*/
|
|
35
|
+
redactGroup?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ScanDetection {
|
|
38
|
+
kind: string;
|
|
39
|
+
count: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ScanResult {
|
|
42
|
+
redacted: string;
|
|
43
|
+
detections: ScanDetection[];
|
|
44
|
+
}
|
|
45
|
+
export interface ScannerOptions {
|
|
46
|
+
/** Additional rules merged with `DEFAULT_RULES`. */
|
|
47
|
+
rules?: SecretRule[];
|
|
48
|
+
/**
|
|
49
|
+
* Strings or regexes that bypass redaction even when matched. NOTE: string
|
|
50
|
+
* entries match by exact equality against the matched substring; regex
|
|
51
|
+
* entries are tested with `RegExp.test()` (partial match by default; use
|
|
52
|
+
* anchors for exact match).
|
|
53
|
+
*/
|
|
54
|
+
allowlist?: Array<string | RegExp>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Built-in default rules. Conservative: prefer well-known prefixes and
|
|
58
|
+
* structural patterns over raw entropy to keep the false-positive rate low.
|
|
59
|
+
*
|
|
60
|
+
* Rule precedence is order-dependent. More-specific rules MUST come before
|
|
61
|
+
* more-general ones — see the OpenAI rule, which uses a negative lookahead to
|
|
62
|
+
* avoid swallowing Anthropic keys regardless of order.
|
|
63
|
+
*/
|
|
64
|
+
export declare const DEFAULT_RULES: SecretRule[];
|
|
65
|
+
export declare class SecretScanner {
|
|
66
|
+
private readonly rules;
|
|
67
|
+
private readonly allowlist;
|
|
68
|
+
constructor(opts?: ScannerOptions);
|
|
69
|
+
/** Scan a single string. Returns the redacted form and per-kind detection counts. */
|
|
70
|
+
scan(text: string): ScanResult;
|
|
71
|
+
/**
|
|
72
|
+
* Recursively walk a value, scanning every string. String values whose
|
|
73
|
+
* containing key name matches a secret-bearing field are redacted whole if
|
|
74
|
+
* non-trivial. Non-plain objects (Date, Map, Set, RegExp, Buffer, typed
|
|
75
|
+
* arrays, class instances) are returned as-is to avoid silent corruption.
|
|
76
|
+
* Cycles are detected via a `seen` set so misbehaving callers cannot
|
|
77
|
+
* stack-overflow the scanner.
|
|
78
|
+
*/
|
|
79
|
+
redactValue(value: unknown, parentKey?: string): {
|
|
80
|
+
value: unknown;
|
|
81
|
+
detections: ScanDetection[];
|
|
82
|
+
};
|
|
83
|
+
private redactValueInternal;
|
|
84
|
+
private looksLikeSecretValue;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Build `ScannerOptions` from a parsed codemem config object's
|
|
88
|
+
* `secret_scanner` block. Workspace-scoped rule overrides and an allowlist
|
|
89
|
+
* for known-safe matches are accepted under a single config key so a team
|
|
90
|
+
* can tighten or loosen the default policy without forking codemem.
|
|
91
|
+
*
|
|
92
|
+
* Expected shape (all keys optional):
|
|
93
|
+
* ```jsonc
|
|
94
|
+
* {
|
|
95
|
+
* "secret_scanner": {
|
|
96
|
+
* "rules": [
|
|
97
|
+
* { "kind": "internal_token", "pattern": "\\bACME-[A-Z0-9]{10}\\b", "flags": "g", "minEntropy": 3.0 }
|
|
98
|
+
* ],
|
|
99
|
+
* "allowlist": [
|
|
100
|
+
* "AKIAFAKEFIXTURE0001", // string entries match by exact equality
|
|
101
|
+
* "/^test-fixture-.*$/i" // strings of the form /pattern/flags become regexes
|
|
102
|
+
* ]
|
|
103
|
+
* }
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* Malformed entries are silently dropped — config errors should never block
|
|
108
|
+
* a workspace from opening.
|
|
109
|
+
*/
|
|
110
|
+
export declare function loadScannerOptionsFromConfig(config: Record<string, unknown> | null | undefined): ScannerOptions;
|
|
111
|
+
/** Merge multiple detection lists into a single per-kind summary. */
|
|
112
|
+
export declare function mergeDetections(...lists: ScanDetection[][]): ScanDetection[];
|
|
113
|
+
/**
|
|
114
|
+
* Shape of a parsed inbound memory payload (sync-replication or sync-bootstrap).
|
|
115
|
+
* Any field that is `undefined` is left untouched. The struct is mutated in
|
|
116
|
+
* place by `redactMemoryFields` so callers can redact-then-insert without
|
|
117
|
+
* cloning.
|
|
118
|
+
*/
|
|
119
|
+
export interface MemoryFieldRedactionTarget {
|
|
120
|
+
title?: string | null;
|
|
121
|
+
subtitle?: string | null;
|
|
122
|
+
body_text?: string | null;
|
|
123
|
+
tags_text?: string | null;
|
|
124
|
+
narrative?: string | null;
|
|
125
|
+
facts?: unknown;
|
|
126
|
+
concepts?: unknown;
|
|
127
|
+
files_read?: unknown;
|
|
128
|
+
files_modified?: unknown;
|
|
129
|
+
metadata_json?: unknown;
|
|
130
|
+
/**
|
|
131
|
+
* Peer-controlled identity strings persisted alongside content. They show
|
|
132
|
+
* up in the viewer and exports verbatim, so a malicious peer could smuggle
|
|
133
|
+
* a secret in a display name. Scanned for the same well-known patterns as
|
|
134
|
+
* everything else; not subject to context_secret heuristics since they
|
|
135
|
+
* legitimately contain free-form text.
|
|
136
|
+
*/
|
|
137
|
+
actor_display_name?: string | null;
|
|
138
|
+
origin_source?: string | null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Redact secrets from a parsed inbound memory payload before persistence.
|
|
142
|
+
* Used by sync-receive (sync-replication.ts) and bootstrap-snapshot apply
|
|
143
|
+
* (sync-bootstrap.ts) so peer-shipped content goes through the same scanner
|
|
144
|
+
* as locally-authored writes. Mutates the target in place; returns the merged
|
|
145
|
+
* detection summary across all scanned fields.
|
|
146
|
+
*/
|
|
147
|
+
export declare function redactMemoryFields<T extends MemoryFieldRedactionTarget>(target: T, scanner: SecretScanner): {
|
|
148
|
+
target: T;
|
|
149
|
+
detections: ScanDetection[];
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=secret-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scanner.d.ts","sourceRoot":"","sources":["../src/secret-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,UAAU;IAC1B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC9B,oDAAoD;IACpD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACnC;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,UAAU,EAsDrC,CAAC;AA+CF,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAEvC,IAAI,GAAE,cAAmB;IAKrC,qFAAqF;IACrF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IA0B9B;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,aAAa,EAAE,CAAA;KAAE;IAIhG,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,oBAAoB;CAU5B;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAChD,cAAc,CAoDhB;AAqBD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,CAM5E;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IAC1C,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,0BAA0B,EACtE,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,aAAa,GACpB;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,aAAa,EAAE,CAAA;CAAE,CAyD5C"}
|
package/dist/store.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import type { Database } from "./db.js";
|
|
12
12
|
import type { RefQueryOptions, RefQueryResult } from "./ref-queries.js";
|
|
13
13
|
import { type ExplainOptions } from "./search.js";
|
|
14
|
+
import { SecretScanner } from "./secret-scanner.js";
|
|
14
15
|
import type { ExplainResponse, MemoryFilters, MemoryItem, MemoryItemResponse, MemoryResult, PackRenderOptions, PackResponse, PackTrace, StoreStats, TimelineItemResponse } from "./types.js";
|
|
15
16
|
export declare class MemoryStore {
|
|
16
17
|
readonly db: Database;
|
|
@@ -19,7 +20,16 @@ export declare class MemoryStore {
|
|
|
19
20
|
readonly actorId: string;
|
|
20
21
|
readonly actorDisplayName: string;
|
|
21
22
|
readonly crossSessionDedupWindowMs: number;
|
|
23
|
+
/**
|
|
24
|
+
* Per-store secret scanner. Lives on the instance (not as a module global)
|
|
25
|
+
* so workspace-level rule overrides and allowlists can be wired without
|
|
26
|
+
* coupling between stores in the same process. Mutable so tests and
|
|
27
|
+
* follow-on issues (codemem-ben8, codemem-jasn) can swap it.
|
|
28
|
+
*/
|
|
29
|
+
scanner: SecretScanner;
|
|
22
30
|
private readonly pendingVectorWrites;
|
|
31
|
+
private _ownershipCache;
|
|
32
|
+
private static readonly OWNERSHIP_CACHE_TTL_MS;
|
|
23
33
|
/** Lazy Drizzle ORM wrapper — shares the same better-sqlite3 connection. */
|
|
24
34
|
private _drizzle;
|
|
25
35
|
private get d();
|
|
@@ -79,6 +89,13 @@ export declare class MemoryStore {
|
|
|
79
89
|
* _resolve_memory_provenance logic.
|
|
80
90
|
*/
|
|
81
91
|
remember(sessionId: number, kind: string, title: string, bodyText: string, confidence?: number, tags?: string[], metadata?: Record<string, unknown>): number;
|
|
92
|
+
/**
|
|
93
|
+
* Log secret-redaction events for observability. Records the kind and
|
|
94
|
+
* count only — never the matched value. Gated on CODEMEM_DEBUG so normal
|
|
95
|
+
* use stays quiet, but the call site always runs so test coverage and
|
|
96
|
+
* future structured-logging hooks have a single chokepoint to grow into.
|
|
97
|
+
*/
|
|
98
|
+
private logSecretRedactions;
|
|
82
99
|
/**
|
|
83
100
|
* Resolve provenance fields for a new memory, matching Python's
|
|
84
101
|
* _resolve_memory_provenance. Uses metadata overrides when present,
|
|
@@ -95,6 +112,21 @@ export declare class MemoryStore {
|
|
|
95
112
|
* 3. actor_id in legacy sync actor ids → owned
|
|
96
113
|
*/
|
|
97
114
|
memoryOwnedBySelf(item: MemoryItem | MemoryResult | Record<string, unknown>): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Return the (cached) sets of peer device ids and legacy actor ids this
|
|
117
|
+
* store treats as "owned by self" for memory ranking. Recomputed every
|
|
118
|
+
* OWNERSHIP_CACHE_TTL_MS to bound staleness on peer rename/identity
|
|
119
|
+
* changes without forcing every UI mutation site to plumb invalidation
|
|
120
|
+
* hooks.
|
|
121
|
+
*/
|
|
122
|
+
private ownershipSets;
|
|
123
|
+
/**
|
|
124
|
+
* Drop the ownership cache. Callers that just mutated sync_peers in a
|
|
125
|
+
* way that affects ownership (claim, identity change, rename, delete)
|
|
126
|
+
* can call this to force the next memoryOwnedBySelf check to refresh.
|
|
127
|
+
* Optional — the cache also expires on its own TTL.
|
|
128
|
+
*/
|
|
129
|
+
invalidateOwnershipCache(): void;
|
|
98
130
|
/**
|
|
99
131
|
* Soft-delete a memory item (set active = 0, record deleted_at).
|
|
100
132
|
* Updates metadata_json with clock_device_id for replication tracing.
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyBxC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EACN,KAAK,cAAc,EAInB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/sync-bootstrap.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* update replication cursor to baseline_cursor, bump generation
|
|
11
11
|
*/
|
|
12
12
|
import type { Database } from "./db.js";
|
|
13
|
+
import { SecretScanner } from "./secret-scanner.js";
|
|
13
14
|
import type { SyncMemorySnapshotItem, SyncResetRequired } from "./types.js";
|
|
14
15
|
export interface BootstrapResult {
|
|
15
16
|
ok: boolean;
|
|
@@ -47,5 +48,5 @@ export declare function fetchAllSnapshotPages(baseUrl: string, resetInfo: SyncRe
|
|
|
47
48
|
* 3. Update the replication cursor to baseline_cursor
|
|
48
49
|
* 4. Bump the local generation + snapshot_id to match the peer
|
|
49
50
|
*/
|
|
50
|
-
export declare function applyBootstrapSnapshot(db: Database, peerDeviceId: string, items: SyncMemorySnapshotItem[], resetInfo: SyncResetRequired): BootstrapResult;
|
|
51
|
+
export declare function applyBootstrapSnapshot(db: Database, peerDeviceId: string, items: SyncMemorySnapshotItem[], resetInfo: SyncResetRequired, scanner?: SecretScanner): BootstrapResult;
|
|
51
52
|
//# sourceMappingURL=sync-bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-bootstrap.d.ts","sourceRoot":"","sources":["../src/sync-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-bootstrap.d.ts","sourceRoot":"","sources":["../src/sync-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAsB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO5E,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAgBD;;;GAGG;AACH,wBAAsB,qBAAqB,CAC1C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;IACV,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC,CAsED;AAkED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACrC,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,sBAAsB,EAAE,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,aAAa,GACrB,eAAe,CAyHjB"}
|
package/dist/sync-daemon.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* to the viewer-server Hono routes.
|
|
7
7
|
*/
|
|
8
8
|
import type { Database } from "./db.js";
|
|
9
|
+
import type { SecretScanner } from "./secret-scanner.js";
|
|
9
10
|
export interface SyncDaemonOptions {
|
|
10
11
|
host?: string;
|
|
11
12
|
port?: number;
|
|
@@ -49,7 +50,7 @@ export declare function refreshCoordinatorPresenceForDaemon(db: Database, dbPath
|
|
|
49
50
|
* Returns per-peer results. Peers in backoff or with expired coordinator
|
|
50
51
|
* presence are skipped.
|
|
51
52
|
*/
|
|
52
|
-
export declare function syncDaemonTick(db: Database, keysDir?: string, stalePeers?: Set<string
|
|
53
|
+
export declare function syncDaemonTick(db: Database, keysDir?: string, stalePeers?: Set<string>, scanner?: SecretScanner): Promise<SyncTickResult[]>;
|
|
53
54
|
/**
|
|
54
55
|
* Run the sync daemon loop.
|
|
55
56
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-daemon.d.ts","sourceRoot":"","sources":["../src/sync-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-daemon.d.ts","sourceRoot":"","sources":["../src/sync-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAUlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBxF;AAED,gEAAgE;AAChE,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,eAAe,CAUhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAS7E;AAED,wBAAsB,mCAAmC,CACxD,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAKlB;AAMD;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,EAAE,EAAE,QAAQ,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,EAAE,CAAC,CAiD3B;AAMD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE9E;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BjF"}
|
package/dist/sync-pass.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Ported from codemem/sync/sync_pass.py.
|
|
7
7
|
*/
|
|
8
8
|
import type { Database } from "./db.js";
|
|
9
|
+
import type { SecretScanner } from "./secret-scanner.js";
|
|
9
10
|
import type { SyncResetRequired } from "./types.js";
|
|
10
11
|
export interface SyncResult {
|
|
11
12
|
ok: boolean;
|
|
@@ -22,6 +23,13 @@ export interface SyncResult {
|
|
|
22
23
|
export interface SyncPassOptions {
|
|
23
24
|
limit?: number;
|
|
24
25
|
keysDir?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Secret scanner used to redact peer-shipped content on apply. Callers that
|
|
28
|
+
* own a `MemoryStore` should pass `store.scanner` so workspace-level rule
|
|
29
|
+
* overrides apply uniformly to local writes and sync-receive. Omitting it
|
|
30
|
+
* falls back to default rules only and prints a one-time warning.
|
|
31
|
+
*/
|
|
32
|
+
scanner?: SecretScanner;
|
|
25
33
|
}
|
|
26
34
|
/**
|
|
27
35
|
* Check if a cursor candidate advances beyond the current position.
|
package/dist/sync-pass.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-pass.d.ts","sourceRoot":"","sources":["../src/sync-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-pass.d.ts","sourceRoot":"","sources":["../src/sync-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBzD,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAqCnE,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAKxF;AA2JD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AA4DD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAMD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC7B,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CAkXrB;AAMD;;;;GAIG;AACH,wBAAsB,WAAW,CAChC,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAuBD,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAIjE;AAED,sEAAsE;AACtE,wBAAgB,+BAA+B,CAC9C,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,SAAK,GACR,MAAM,CAoBR;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAwBjF"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* a raw Database handle. Ported from codemem/sync/replication.py.
|
|
9
9
|
*/
|
|
10
10
|
import type { Database } from "./db.js";
|
|
11
|
+
import { SecretScanner } from "./secret-scanner.js";
|
|
11
12
|
import type { ReplicationOp, ReplicationOpsAgePrunePlan, ReplicationOpsPruneResult, SyncDirtyLocalState, SyncMemorySnapshotItem } from "./types.js";
|
|
12
13
|
export interface SyncResetBoundary {
|
|
13
14
|
generation: number;
|
|
@@ -216,5 +217,5 @@ export declare function backfillReplicationOps(db: Database, limit?: number): nu
|
|
|
216
217
|
* - For delete: soft-deletes (active=0, deleted_at) by import_key
|
|
217
218
|
* - Records the applied op in replication_ops
|
|
218
219
|
*/
|
|
219
|
-
export declare function applyReplicationOps(db: Database, ops: ReplicationOp[], localDeviceId: string): ApplyResult;
|
|
220
|
+
export declare function applyReplicationOps(db: Database, ops: ReplicationOp[], localDeviceId: string, scanner?: SecretScanner): ApplyResult;
|
|
220
221
|
//# sourceMappingURL=sync-replication.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-replication.d.ts","sourceRoot":"","sources":["../src/sync-replication.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-replication.d.ts","sourceRoot":"","sources":["../src/sync-replication.ts"],"names":[],"mappings":"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"}
|