agent-recall-core 3.4.31 → 3.4.36
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/README.md +121 -441
- package/dist/digest/store.d.ts.map +1 -1
- package/dist/digest/store.js +4 -3
- package/dist/digest/store.js.map +1 -1
- package/dist/display/board-render.d.ts +61 -0
- package/dist/display/board-render.d.ts.map +1 -0
- package/dist/display/board-render.js +223 -0
- package/dist/display/board-render.js.map +1 -0
- package/dist/helpers/alignment-patterns.d.ts +10 -0
- package/dist/helpers/alignment-patterns.d.ts.map +1 -1
- package/dist/helpers/alignment-patterns.js +5 -1
- package/dist/helpers/alignment-patterns.js.map +1 -1
- package/dist/helpers/blind-spots.d.ts +86 -0
- package/dist/helpers/blind-spots.d.ts.map +1 -0
- package/dist/helpers/blind-spots.js +205 -0
- package/dist/helpers/blind-spots.js.map +1 -0
- package/dist/helpers/conflict-scan.d.ts +10 -0
- package/dist/helpers/conflict-scan.d.ts.map +1 -1
- package/dist/helpers/conflict-scan.js +3 -3
- package/dist/helpers/conflict-scan.js.map +1 -1
- package/dist/helpers/semantic-match.d.ts +82 -0
- package/dist/helpers/semantic-match.d.ts.map +1 -0
- package/dist/helpers/semantic-match.js +229 -0
- package/dist/helpers/semantic-match.js.map +1 -0
- package/dist/index.d.ts +57 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -14
- package/dist/index.js.map +1 -1
- package/dist/palace/awareness.d.ts +30 -0
- package/dist/palace/awareness.d.ts.map +1 -1
- package/dist/palace/awareness.js +65 -2
- package/dist/palace/awareness.js.map +1 -1
- package/dist/palace/consolidate.d.ts.map +1 -1
- package/dist/palace/consolidate.js +17 -0
- package/dist/palace/consolidate.js.map +1 -1
- package/dist/palace/decay-pass.d.ts +46 -0
- package/dist/palace/decay-pass.d.ts.map +1 -0
- package/dist/palace/decay-pass.js +87 -0
- package/dist/palace/decay-pass.js.map +1 -0
- package/dist/palace/insights-index.d.ts.map +1 -1
- package/dist/palace/insights-index.js +4 -2
- package/dist/palace/insights-index.js.map +1 -1
- package/dist/palace/skills.d.ts +41 -2
- package/dist/palace/skills.d.ts.map +1 -1
- package/dist/palace/skills.js +106 -4
- package/dist/palace/skills.js.map +1 -1
- package/dist/prompts/consolidation-prompt.d.ts +25 -0
- package/dist/prompts/consolidation-prompt.d.ts.map +1 -0
- package/dist/prompts/consolidation-prompt.js +91 -0
- package/dist/prompts/consolidation-prompt.js.map +1 -0
- package/dist/storage/ab-experiment.d.ts +184 -0
- package/dist/storage/ab-experiment.d.ts.map +1 -0
- package/dist/storage/ab-experiment.js +294 -0
- package/dist/storage/ab-experiment.js.map +1 -0
- package/dist/storage/archive-prune.d.ts +56 -0
- package/dist/storage/archive-prune.d.ts.map +1 -0
- package/dist/storage/archive-prune.js +118 -0
- package/dist/storage/archive-prune.js.map +1 -0
- package/dist/storage/archive-write.d.ts +38 -0
- package/dist/storage/archive-write.d.ts.map +1 -0
- package/dist/storage/archive-write.js +98 -0
- package/dist/storage/archive-write.js.map +1 -0
- package/dist/storage/blind-spots-store.d.ts +30 -0
- package/dist/storage/blind-spots-store.d.ts.map +1 -0
- package/dist/storage/blind-spots-store.js +91 -0
- package/dist/storage/blind-spots-store.js.map +1 -0
- package/dist/storage/capture-router.d.ts +60 -0
- package/dist/storage/capture-router.d.ts.map +1 -0
- package/dist/storage/capture-router.js +133 -0
- package/dist/storage/capture-router.js.map +1 -0
- package/dist/storage/classification.d.ts +36 -0
- package/dist/storage/classification.d.ts.map +1 -0
- package/dist/storage/classification.js +78 -0
- package/dist/storage/classification.js.map +1 -0
- package/dist/storage/consolidation-queue.d.ts +39 -0
- package/dist/storage/consolidation-queue.d.ts.map +1 -0
- package/dist/storage/consolidation-queue.js +120 -0
- package/dist/storage/consolidation-queue.js.map +1 -0
- package/dist/storage/content-guard.d.ts +74 -0
- package/dist/storage/content-guard.d.ts.map +1 -0
- package/dist/storage/content-guard.js +179 -0
- package/dist/storage/content-guard.js.map +1 -0
- package/dist/storage/corrections.d.ts +329 -22
- package/dist/storage/corrections.d.ts.map +1 -1
- package/dist/storage/corrections.js +788 -58
- package/dist/storage/corrections.js.map +1 -1
- package/dist/storage/durable-intent.d.ts +49 -0
- package/dist/storage/durable-intent.d.ts.map +1 -0
- package/dist/storage/durable-intent.js +124 -0
- package/dist/storage/durable-intent.js.map +1 -0
- package/dist/storage/filelock.d.ts +6 -0
- package/dist/storage/filelock.d.ts.map +1 -1
- package/dist/storage/filelock.js +6 -1
- package/dist/storage/filelock.js.map +1 -1
- package/dist/storage/memory-protocol.d.ts +19 -0
- package/dist/storage/memory-protocol.d.ts.map +1 -0
- package/dist/storage/memory-protocol.js +101 -0
- package/dist/storage/memory-protocol.js.map +1 -0
- package/dist/storage/paths.d.ts +23 -0
- package/dist/storage/paths.d.ts.map +1 -1
- package/dist/storage/paths.js +39 -0
- package/dist/storage/paths.js.map +1 -1
- package/dist/storage/retention.d.ts +23 -0
- package/dist/storage/retention.d.ts.map +1 -0
- package/dist/storage/retention.js +48 -0
- package/dist/storage/retention.js.map +1 -0
- package/dist/storage/session.d.ts +2 -2
- package/dist/storage/session.d.ts.map +1 -1
- package/dist/storage/session.js +11 -1
- package/dist/storage/session.js.map +1 -1
- package/dist/supabase/config.d.ts +26 -0
- package/dist/supabase/config.d.ts.map +1 -1
- package/dist/supabase/config.js +11 -0
- package/dist/supabase/config.js.map +1 -1
- package/dist/supabase/recall-backend.d.ts +1 -0
- package/dist/supabase/recall-backend.d.ts.map +1 -1
- package/dist/supabase/recall-backend.js +13 -13
- package/dist/supabase/recall-backend.js.map +1 -1
- package/dist/supabase/sync.d.ts +1 -1
- package/dist/supabase/sync.d.ts.map +1 -1
- package/dist/supabase/sync.js +85 -3
- package/dist/supabase/sync.js.map +1 -1
- package/dist/tools-logic/bootstrap.d.ts +15 -0
- package/dist/tools-logic/bootstrap.d.ts.map +1 -1
- package/dist/tools-logic/bootstrap.js +238 -47
- package/dist/tools-logic/bootstrap.js.map +1 -1
- package/dist/tools-logic/brief.d.ts +84 -0
- package/dist/tools-logic/brief.d.ts.map +1 -0
- package/dist/tools-logic/brief.js +193 -0
- package/dist/tools-logic/brief.js.map +1 -0
- package/dist/tools-logic/check-action.d.ts +9 -0
- package/dist/tools-logic/check-action.d.ts.map +1 -1
- package/dist/tools-logic/check-action.js +61 -3
- package/dist/tools-logic/check-action.js.map +1 -1
- package/dist/tools-logic/check.d.ts +7 -0
- package/dist/tools-logic/check.d.ts.map +1 -1
- package/dist/tools-logic/check.js +24 -2
- package/dist/tools-logic/check.js.map +1 -1
- package/dist/tools-logic/confidence.d.ts +50 -0
- package/dist/tools-logic/confidence.d.ts.map +1 -0
- package/dist/tools-logic/confidence.js +70 -0
- package/dist/tools-logic/confidence.js.map +1 -0
- package/dist/tools-logic/drill-down.d.ts +37 -0
- package/dist/tools-logic/drill-down.d.ts.map +1 -0
- package/dist/tools-logic/drill-down.js +63 -0
- package/dist/tools-logic/drill-down.js.map +1 -0
- package/dist/tools-logic/export-corrections.d.ts +63 -0
- package/dist/tools-logic/export-corrections.d.ts.map +1 -0
- package/dist/tools-logic/export-corrections.js +124 -0
- package/dist/tools-logic/export-corrections.js.map +1 -0
- package/dist/tools-logic/journal-capture.d.ts.map +1 -1
- package/dist/tools-logic/journal-capture.js +4 -1
- package/dist/tools-logic/journal-capture.js.map +1 -1
- package/dist/tools-logic/journal-write.d.ts.map +1 -1
- package/dist/tools-logic/journal-write.js +3 -2
- package/dist/tools-logic/journal-write.js.map +1 -1
- package/dist/tools-logic/local-archive-backend.d.ts +33 -0
- package/dist/tools-logic/local-archive-backend.d.ts.map +1 -0
- package/dist/tools-logic/local-archive-backend.js +124 -0
- package/dist/tools-logic/local-archive-backend.js.map +1 -0
- package/dist/tools-logic/memory-backend.d.ts +74 -0
- package/dist/tools-logic/memory-backend.d.ts.map +1 -0
- package/dist/tools-logic/memory-backend.js +172 -0
- package/dist/tools-logic/memory-backend.js.map +1 -0
- package/dist/tools-logic/memory-query.d.ts +10 -3
- package/dist/tools-logic/memory-query.d.ts.map +1 -1
- package/dist/tools-logic/memory-query.js +31 -7
- package/dist/tools-logic/memory-query.js.map +1 -1
- package/dist/tools-logic/mirror-builder.d.ts +115 -0
- package/dist/tools-logic/mirror-builder.d.ts.map +1 -0
- package/dist/tools-logic/mirror-builder.js +348 -0
- package/dist/tools-logic/mirror-builder.js.map +1 -0
- package/dist/tools-logic/palace-write.d.ts.map +1 -1
- package/dist/tools-logic/palace-write.js +3 -2
- package/dist/tools-logic/palace-write.js.map +1 -1
- package/dist/tools-logic/pipeline-close.d.ts.map +1 -1
- package/dist/tools-logic/pipeline-close.js +2 -1
- package/dist/tools-logic/pipeline-close.js.map +1 -1
- package/dist/tools-logic/pipeline-open.d.ts.map +1 -1
- package/dist/tools-logic/pipeline-open.js +2 -1
- package/dist/tools-logic/pipeline-open.js.map +1 -1
- package/dist/tools-logic/predict-correction.d.ts +47 -0
- package/dist/tools-logic/predict-correction.d.ts.map +1 -0
- package/dist/tools-logic/predict-correction.js +137 -0
- package/dist/tools-logic/predict-correction.js.map +1 -0
- package/dist/tools-logic/prior-builder.d.ts +27 -0
- package/dist/tools-logic/prior-builder.d.ts.map +1 -0
- package/dist/tools-logic/prior-builder.js +90 -0
- package/dist/tools-logic/prior-builder.js.map +1 -0
- package/dist/tools-logic/recognition-builder.d.ts +122 -0
- package/dist/tools-logic/recognition-builder.d.ts.map +1 -0
- package/dist/tools-logic/recognition-builder.js +289 -0
- package/dist/tools-logic/recognition-builder.js.map +1 -0
- package/dist/tools-logic/safety-consolidation.d.ts +104 -0
- package/dist/tools-logic/safety-consolidation.d.ts.map +1 -0
- package/dist/tools-logic/safety-consolidation.js +256 -0
- package/dist/tools-logic/safety-consolidation.js.map +1 -0
- package/dist/tools-logic/session-end-reflect.d.ts +18 -0
- package/dist/tools-logic/session-end-reflect.d.ts.map +1 -1
- package/dist/tools-logic/session-end-reflect.js +69 -30
- package/dist/tools-logic/session-end-reflect.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts +18 -0
- package/dist/tools-logic/session-end.d.ts.map +1 -1
- package/dist/tools-logic/session-end.js +189 -34
- package/dist/tools-logic/session-end.js.map +1 -1
- package/dist/tools-logic/session-start-lite.d.ts +2 -0
- package/dist/tools-logic/session-start-lite.d.ts.map +1 -1
- package/dist/tools-logic/session-start-lite.js +11 -2
- package/dist/tools-logic/session-start-lite.js.map +1 -1
- package/dist/tools-logic/session-start.d.ts +81 -2
- package/dist/tools-logic/session-start.d.ts.map +1 -1
- package/dist/tools-logic/session-start.js +357 -40
- package/dist/tools-logic/session-start.js.map +1 -1
- package/dist/tools-logic/skill-propose.d.ts +27 -0
- package/dist/tools-logic/skill-propose.d.ts.map +1 -0
- package/dist/tools-logic/skill-propose.js +66 -0
- package/dist/tools-logic/skill-propose.js.map +1 -0
- package/dist/tools-logic/skill-recall.d.ts +5 -0
- package/dist/tools-logic/skill-recall.d.ts.map +1 -1
- package/dist/tools-logic/skill-recall.js +14 -1
- package/dist/tools-logic/skill-recall.js.map +1 -1
- package/dist/tools-logic/smart-recall.d.ts +17 -0
- package/dist/tools-logic/smart-recall.d.ts.map +1 -1
- package/dist/tools-logic/smart-recall.js +51 -16
- package/dist/tools-logic/smart-recall.js.map +1 -1
- package/dist/tools-logic/smart-remember.js +8 -9
- package/dist/tools-logic/smart-remember.js.map +1 -1
- package/dist/tools-logic/store-doctor.d.ts +71 -0
- package/dist/tools-logic/store-doctor.d.ts.map +1 -0
- package/dist/tools-logic/store-doctor.js +387 -0
- package/dist/tools-logic/store-doctor.js.map +1 -0
- package/dist/tools-logic/store-repair.d.ts +64 -0
- package/dist/tools-logic/store-repair.d.ts.map +1 -0
- package/dist/tools-logic/store-repair.js +243 -0
- package/dist/tools-logic/store-repair.js.map +1 -0
- package/dist/tools-logic/supersession.d.ts +34 -0
- package/dist/tools-logic/supersession.d.ts.map +1 -0
- package/dist/tools-logic/supersession.js +103 -0
- package/dist/tools-logic/supersession.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/vector/embedding.d.ts +8 -0
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +9 -1
- package/dist/vector/embedding.js.map +1 -1
- package/dist/vector/local-vector-backend.d.ts.map +1 -1
- package/dist/vector/local-vector-backend.js +14 -17
- package/dist/vector/local-vector-backend.js.map +1 -1
- package/package.json +2 -2
- package/dist/relevance/injector.d.ts +0 -51
- package/dist/relevance/injector.d.ts.map +0 -1
- package/dist/relevance/injector.js +0 -121
- package/dist/relevance/injector.js.map +0 -1
- package/dist/relevance/precision.d.ts +0 -109
- package/dist/relevance/precision.d.ts.map +0 -1
- package/dist/relevance/precision.js +0 -279
- package/dist/relevance/precision.js.map +0 -1
- package/dist/relevance/promoter.d.ts +0 -60
- package/dist/relevance/promoter.d.ts.map +0 -1
- package/dist/relevance/promoter.js +0 -336
- package/dist/relevance/promoter.js.map +0 -1
- package/dist/relevance/stager.d.ts +0 -61
- package/dist/relevance/stager.d.ts.map +0 -1
- package/dist/relevance/stager.js +0 -251
- package/dist/relevance/stager.js.map +0 -1
- package/dist/relevance/surfacer.d.ts +0 -34
- package/dist/relevance/surfacer.d.ts.map +0 -1
- package/dist/relevance/surfacer.js +0 -333
- package/dist/relevance/surfacer.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* confidence.ts — ONE calibrated confidence scale (Wave 4, the Bridge).
|
|
3
|
+
*
|
|
4
|
+
* Before this module, `scoreLabel` was duplicated in three files with divergent
|
|
5
|
+
* thresholds on different native scales:
|
|
6
|
+
* - smart-recall.ts (internalScore ~0..1 AND post-RRF score ~0..0.12)
|
|
7
|
+
* - supabase/recall-backend.ts (cosine, reciprocal-rank, RRF ~0..0.049)
|
|
8
|
+
* - vector/local-vector-backend.ts (cosine 0..1)
|
|
9
|
+
*
|
|
10
|
+
* Comparing a 0.12-max RRF score against a 0.80 cosine threshold is meaningless.
|
|
11
|
+
* `calibratedConfidence(score, scale)` normalizes each backend's NATIVE score
|
|
12
|
+
* onto a shared 0..1 axis, then bins it with ONE set of floors.
|
|
13
|
+
*
|
|
14
|
+
* IMPORTANT (Risk #8): the local post-RRF score is mutated by hot-window boosts
|
|
15
|
+
* (×3 / ×2 / ×1.3) and a Beta feedback multiplier (×up to 2) AFTER RRF. So the
|
|
16
|
+
* 0.12 divisor is the *theoretical* max of an UNBOOSTED RRF score. The Bridge
|
|
17
|
+
* gate must read the `calibrated` value STORED at scoring time, NOT re-derive it
|
|
18
|
+
* from the final boosted score. The divisors here are tunable constants, not
|
|
19
|
+
* trusted gates against the mutated score.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Calibrated floors on the shared 0..1 axis. ONE source of truth.
|
|
23
|
+
* Monotonic: high > medium > low > 0.
|
|
24
|
+
*/
|
|
25
|
+
export const CONFIDENCE_FLOOR = {
|
|
26
|
+
high: 0.66,
|
|
27
|
+
medium: 0.4,
|
|
28
|
+
low: 0.2,
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Theoretical native-score maxima used to rescale RRF scores onto 0..1.
|
|
32
|
+
* Tunable constants — NOT trusted gates (see module header / Risk #8).
|
|
33
|
+
*/
|
|
34
|
+
const RRF_LOCAL_MAX = 0.12;
|
|
35
|
+
const RRF_SUPABASE_MAX = 0.049;
|
|
36
|
+
function clamp01(n) {
|
|
37
|
+
if (Number.isNaN(n))
|
|
38
|
+
return 0;
|
|
39
|
+
if (n < 0)
|
|
40
|
+
return 0;
|
|
41
|
+
if (n > 1)
|
|
42
|
+
return 1;
|
|
43
|
+
return n;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Map a backend's native score onto the shared 0..1 axis and bin it.
|
|
47
|
+
* High-threshold-first ternary (Done-Definition #3).
|
|
48
|
+
*/
|
|
49
|
+
export function calibratedConfidence(score, scale) {
|
|
50
|
+
let norm;
|
|
51
|
+
if (scale === "rrf-local") {
|
|
52
|
+
norm = score / RRF_LOCAL_MAX;
|
|
53
|
+
}
|
|
54
|
+
else if (scale === "rrf-supabase") {
|
|
55
|
+
norm = score / RRF_SUPABASE_MAX;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
norm = score; // cosine / internalScore / reciprocal-rank are already 0..1
|
|
59
|
+
}
|
|
60
|
+
const calibrated = clamp01(norm);
|
|
61
|
+
const label = calibrated >= CONFIDENCE_FLOOR.high
|
|
62
|
+
? "high"
|
|
63
|
+
: calibrated >= CONFIDENCE_FLOOR.medium
|
|
64
|
+
? "medium"
|
|
65
|
+
: calibrated >= CONFIDENCE_FLOOR.low
|
|
66
|
+
? "low"
|
|
67
|
+
: "weak";
|
|
68
|
+
return { label, calibrated };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=confidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.js","sourceRoot":"","sources":["../../src/tools-logic/confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACA,CAAC;AAEX;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC;AACX,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,KAAsB;IACxE,IAAI,IAAY,CAAC;IACjB,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,GAAG,aAAa,CAAC;IAC/B,CAAC;SAAM,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,CAAC,4DAA4D;IAC5E,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GACT,UAAU,IAAI,gBAAgB,CAAC,IAAI;QACjC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,IAAI,gBAAgB,CAAC,MAAM;YACrC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,UAAU,IAAI,gBAAgB,CAAC,GAAG;gBAClC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drill-down.ts — the lossless fallback half of the Bridge (Wave 4).
|
|
3
|
+
*
|
|
4
|
+
* When the model tier (compressed recall) is not confident, the bridge drills
|
|
5
|
+
* DOWN into the lossless archive and attaches a verbatim source instead of
|
|
6
|
+
* answering thinly. `fetchVerbatim(project, key)` resolves a result item's
|
|
7
|
+
* `verbatimKey` to its raw text.
|
|
8
|
+
*
|
|
9
|
+
* Local-only this wave: the Supabase backend maps no `date` field and folds the
|
|
10
|
+
* slug into `title`, so remote drill-down is unsound until the remote query is
|
|
11
|
+
* extended (see plan §Wave 4 verified facts). Journal + palace local reads only.
|
|
12
|
+
*
|
|
13
|
+
* NEVER throws into recall — returns null on any error or path-escape attempt.
|
|
14
|
+
*/
|
|
15
|
+
/** Locator stamped onto a recall result so the bridge can fetch its raw source. */
|
|
16
|
+
export interface VerbatimKey {
|
|
17
|
+
kind: "journal" | "palace";
|
|
18
|
+
/** journal: YYYY-MM-DD (validated before any path use). */
|
|
19
|
+
date?: string;
|
|
20
|
+
/** palace: room slug + file slug (sanitized before path.join). */
|
|
21
|
+
room?: string;
|
|
22
|
+
file?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface VerbatimSource {
|
|
25
|
+
found: true;
|
|
26
|
+
/** Human-readable provenance, e.g. "journal/2026-06-01" or "palace/decisions/ranking". */
|
|
27
|
+
source: string;
|
|
28
|
+
/** Verbatim text, capped to ~1200 chars. */
|
|
29
|
+
text: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a verbatimKey to its raw source text. Never throws.
|
|
33
|
+
* Returns null when the date is malformed, the file is absent, or a path
|
|
34
|
+
* escape is detected.
|
|
35
|
+
*/
|
|
36
|
+
export declare function fetchVerbatim(project: string, key: VerbatimKey | undefined): VerbatimSource | null;
|
|
37
|
+
//# sourceMappingURL=drill-down.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drill-down.d.ts","sourceRoot":"","sources":["../../src/tools-logic/drill-down.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,IAAI,CAAC;IACZ,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAQD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CA6BlG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drill-down.ts — the lossless fallback half of the Bridge (Wave 4).
|
|
3
|
+
*
|
|
4
|
+
* When the model tier (compressed recall) is not confident, the bridge drills
|
|
5
|
+
* DOWN into the lossless archive and attaches a verbatim source instead of
|
|
6
|
+
* answering thinly. `fetchVerbatim(project, key)` resolves a result item's
|
|
7
|
+
* `verbatimKey` to its raw text.
|
|
8
|
+
*
|
|
9
|
+
* Local-only this wave: the Supabase backend maps no `date` field and folds the
|
|
10
|
+
* slug into `title`, so remote drill-down is unsound until the remote query is
|
|
11
|
+
* extended (see plan §Wave 4 verified facts). Journal + palace local reads only.
|
|
12
|
+
*
|
|
13
|
+
* NEVER throws into recall — returns null on any error or path-escape attempt.
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from "node:fs";
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
import { readJournalFile } from "../helpers/journal-files.js";
|
|
18
|
+
import { palaceDir, sanitizeSlug } from "../storage/paths.js";
|
|
19
|
+
import { getRoot } from "../types.js";
|
|
20
|
+
/** Cap to n chars (no ellipsis — this is verbatim source, not a summary). */
|
|
21
|
+
const VERBATIM_CAP = 1200;
|
|
22
|
+
function cap(s) {
|
|
23
|
+
return s.length <= VERBATIM_CAP ? s : s.slice(0, VERBATIM_CAP);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a verbatimKey to its raw source text. Never throws.
|
|
27
|
+
* Returns null when the date is malformed, the file is absent, or a path
|
|
28
|
+
* escape is detected.
|
|
29
|
+
*/
|
|
30
|
+
export function fetchVerbatim(project, key) {
|
|
31
|
+
if (!key)
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
if (key.kind === "journal") {
|
|
35
|
+
if (!key.date || !/^\d{4}-\d{2}-\d{2}$/.test(key.date))
|
|
36
|
+
return null;
|
|
37
|
+
const text = readJournalFile(project, key.date);
|
|
38
|
+
if (!text)
|
|
39
|
+
return null;
|
|
40
|
+
return { found: true, source: `journal/${key.date}`, text: cap(text) };
|
|
41
|
+
}
|
|
42
|
+
// palace
|
|
43
|
+
if (!key.room || !key.file)
|
|
44
|
+
return null;
|
|
45
|
+
const safeRoom = sanitizeSlug(key.room);
|
|
46
|
+
const safeFile = sanitizeSlug(key.file);
|
|
47
|
+
const p = path.join(palaceDir(project), "rooms", safeRoom, `${safeFile}.md`);
|
|
48
|
+
// Defense-in-depth path-escape assertion (mirror compress.ts 169-173).
|
|
49
|
+
const root = getRoot();
|
|
50
|
+
const rootWithSep = root.endsWith(path.sep) ? root : root + path.sep;
|
|
51
|
+
if (!p.startsWith(rootWithSep) && p !== root) {
|
|
52
|
+
throw new Error(`Path escape blocked: room=${key.room} file=${key.file}`);
|
|
53
|
+
}
|
|
54
|
+
if (!fs.existsSync(p))
|
|
55
|
+
return null;
|
|
56
|
+
const text = fs.readFileSync(p, "utf-8");
|
|
57
|
+
return { found: true, source: `palace/${key.room}/${key.file}`, text: cap(text) };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null; // never throw into recall
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=drill-down.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drill-down.js","sourceRoot":"","sources":["../../src/tools-logic/drill-down.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAoBtC,6EAA6E;AAC7E,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAA4B;IACzE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC;QAED,SAAS;QACT,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;QAE7E,uEAAuE;QACvE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QACrE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,0BAA0B;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* export-corrections.ts — the vendor-neutral, fail-closed-scrubbed export of
|
|
3
|
+
* corrections (backlog #1, revealed by the Hindsight integration).
|
|
4
|
+
*
|
|
5
|
+
* WHY: before this, the only way to get active corrections out of AgentRecall was
|
|
6
|
+
* to glob the on-disk JSON directly (schema-coupled, re-implements the scrub that
|
|
7
|
+
* WILL drift) or `ar recall` (drops severity/weight/recurrence). Every external
|
|
8
|
+
* memory backend (Hindsight, Mem0, Zep) had to re-port the egress scrub. This is
|
|
9
|
+
* the ONE supported export contract: a stable versioned schema, scrubbed through
|
|
10
|
+
* the FAIL-CLOSED scrubForExport (a surviving secret aborts the export, never
|
|
11
|
+
* leaks), active-only by default (never teach an external store a retracted
|
|
12
|
+
* belief).
|
|
13
|
+
*
|
|
14
|
+
* DELIBERATELY VENDOR-NEUTRAL: this emits the generic CorrectionExport shape, NOT
|
|
15
|
+
* a Hindsight/Mem0-specific payload — the vendor mapping belongs in the adapter,
|
|
16
|
+
* not in AgentRecall core.
|
|
17
|
+
*/
|
|
18
|
+
/** Bump when the export shape changes — consumers pin/diff against this. */
|
|
19
|
+
export declare const CORRECTION_EXPORT_SCHEMA_VERSION = "corrections-export/v1";
|
|
20
|
+
/**
|
|
21
|
+
* One exported correction. A stable, vendor-neutral projection of CorrectionRecord
|
|
22
|
+
* with every free-text field already scrubbed. `confidence_basis` is explicit so a
|
|
23
|
+
* downstream store never mistakes `weight` for retrieval relevance or a truth
|
|
24
|
+
* probability — it is correction AUTHORITY (pre-empts the three-way `confidence`
|
|
25
|
+
* ambiguity, backlog #2).
|
|
26
|
+
*/
|
|
27
|
+
export interface CorrectionExport {
|
|
28
|
+
schema_version: string;
|
|
29
|
+
id: string;
|
|
30
|
+
date: string;
|
|
31
|
+
project: string;
|
|
32
|
+
severity: "p0" | "p1";
|
|
33
|
+
kind: string;
|
|
34
|
+
rule: string;
|
|
35
|
+
context: string;
|
|
36
|
+
tags: string[];
|
|
37
|
+
weight: number | null;
|
|
38
|
+
confidence_basis: "authority-weight";
|
|
39
|
+
active: boolean;
|
|
40
|
+
authoritative: boolean | null;
|
|
41
|
+
retrieved_count: number;
|
|
42
|
+
heeded_count: number;
|
|
43
|
+
recurrence_count: number;
|
|
44
|
+
last_outcome: string | null;
|
|
45
|
+
}
|
|
46
|
+
export interface ExportCorrectionsOptions {
|
|
47
|
+
/** A specific project slug. Omit to export across ALL projects. */
|
|
48
|
+
project?: string;
|
|
49
|
+
/** Include retracted (active:false) records. Default false — active-only. */
|
|
50
|
+
includeRetracted?: boolean;
|
|
51
|
+
/** Inclusive lower bound on the correction date (YYYY-MM-DD). */
|
|
52
|
+
since?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Export corrections as a stable, scrubbed, vendor-neutral array.
|
|
56
|
+
*
|
|
57
|
+
* Active-only by default (never teach an external store a retracted belief).
|
|
58
|
+
* Fail-closed: if any record holds a secret that cannot be redacted, the entire
|
|
59
|
+
* export throws SecretScanError naming the offending correction id — it never
|
|
60
|
+
* emits a partial set that silently omits the leaky record.
|
|
61
|
+
*/
|
|
62
|
+
export declare function exportCorrections(opts?: ExportCorrectionsOptions): CorrectionExport[];
|
|
63
|
+
//# sourceMappingURL=export-corrections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-corrections.d.ts","sourceRoot":"","sources":["../../src/tools-logic/export-corrections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,4EAA4E;AAC5E,eAAO,MAAM,gCAAgC,0BAA0B,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,GAAG,gBAAgB,EAAE,CA6BzF"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* export-corrections.ts — the vendor-neutral, fail-closed-scrubbed export of
|
|
3
|
+
* corrections (backlog #1, revealed by the Hindsight integration).
|
|
4
|
+
*
|
|
5
|
+
* WHY: before this, the only way to get active corrections out of AgentRecall was
|
|
6
|
+
* to glob the on-disk JSON directly (schema-coupled, re-implements the scrub that
|
|
7
|
+
* WILL drift) or `ar recall` (drops severity/weight/recurrence). Every external
|
|
8
|
+
* memory backend (Hindsight, Mem0, Zep) had to re-port the egress scrub. This is
|
|
9
|
+
* the ONE supported export contract: a stable versioned schema, scrubbed through
|
|
10
|
+
* the FAIL-CLOSED scrubForExport (a surviving secret aborts the export, never
|
|
11
|
+
* leaks), active-only by default (never teach an external store a retracted
|
|
12
|
+
* belief).
|
|
13
|
+
*
|
|
14
|
+
* DELIBERATELY VENDOR-NEUTRAL: this emits the generic CorrectionExport shape, NOT
|
|
15
|
+
* a Hindsight/Mem0-specific payload — the vendor mapping belongs in the adapter,
|
|
16
|
+
* not in AgentRecall core.
|
|
17
|
+
*/
|
|
18
|
+
import * as fs from "node:fs";
|
|
19
|
+
import * as path from "node:path";
|
|
20
|
+
import { getRoot } from "../types.js";
|
|
21
|
+
import { readCorrections } from "../storage/corrections.js";
|
|
22
|
+
import { scrubForExport, SecretScanError } from "../storage/content-guard.js";
|
|
23
|
+
/** Bump when the export shape changes — consumers pin/diff against this. */
|
|
24
|
+
export const CORRECTION_EXPORT_SCHEMA_VERSION = "corrections-export/v1";
|
|
25
|
+
function toExport(rec) {
|
|
26
|
+
// scrubForExport throws SecretScanError if a secret survives — let it propagate
|
|
27
|
+
// so the whole export aborts loudly rather than emitting a partial/leaky set.
|
|
28
|
+
// EVERY free-text string field is scrubbed — not just rule/context/tags. A
|
|
29
|
+
// corrupt or hand-edited record could carry a secret in project, kind, or
|
|
30
|
+
// last_outcome too; defense-in-depth scrubs them all. (id/date are structurally
|
|
31
|
+
// constrained auto-generated values and carry no free text.)
|
|
32
|
+
return {
|
|
33
|
+
schema_version: CORRECTION_EXPORT_SCHEMA_VERSION,
|
|
34
|
+
id: rec.id,
|
|
35
|
+
date: rec.date,
|
|
36
|
+
project: scrubForExport(rec.project ?? ""),
|
|
37
|
+
severity: rec.severity,
|
|
38
|
+
kind: scrubForExport(String(rec.kind ?? "correction")),
|
|
39
|
+
rule: scrubForExport(rec.rule ?? ""),
|
|
40
|
+
context: scrubForExport(rec.context ?? ""),
|
|
41
|
+
tags: (rec.tags ?? []).map((t) => scrubForExport(String(t))),
|
|
42
|
+
weight: typeof rec.weight === "number" ? rec.weight : null,
|
|
43
|
+
confidence_basis: "authority-weight",
|
|
44
|
+
active: rec.active !== false,
|
|
45
|
+
authoritative: typeof rec.authoritative === "boolean" ? rec.authoritative : null,
|
|
46
|
+
retrieved_count: rec.retrieved_count ?? 0,
|
|
47
|
+
heeded_count: rec.heeded_count ?? 0,
|
|
48
|
+
recurrence_count: rec.recurrence_count ?? 0,
|
|
49
|
+
last_outcome: rec.last_outcome != null ? scrubForExport(rec.last_outcome) : null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Project slugs that actually have a corrections directory with ≥1 record.
|
|
54
|
+
* Deliberately NOT listAllProjects() (which enumerates by journal presence) — a
|
|
55
|
+
* project can have corrections without a journal, and a security export must not
|
|
56
|
+
* silently skip it.
|
|
57
|
+
*/
|
|
58
|
+
function projectsWithCorrections() {
|
|
59
|
+
const dir = path.join(getRoot(), "projects");
|
|
60
|
+
const out = [];
|
|
61
|
+
let slugs = [];
|
|
62
|
+
try {
|
|
63
|
+
slugs = fs.readdirSync(dir);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return []; // no projects dir (or unreadable) — nothing to export
|
|
67
|
+
}
|
|
68
|
+
for (const slug of slugs) {
|
|
69
|
+
const cdir = path.join(dir, slug, "corrections");
|
|
70
|
+
try {
|
|
71
|
+
// readdirSync throws ENOENT for a missing corrections dir — the catch makes
|
|
72
|
+
// existsSync redundant and closes the existsSync→readdirSync TOCTOU window.
|
|
73
|
+
if (fs.readdirSync(cdir).some((f) => f.endsWith(".json"))) {
|
|
74
|
+
out.push(slug);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// no corrections dir, or unreadable — skip, never throw
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Export corrections as a stable, scrubbed, vendor-neutral array.
|
|
85
|
+
*
|
|
86
|
+
* Active-only by default (never teach an external store a retracted belief).
|
|
87
|
+
* Fail-closed: if any record holds a secret that cannot be redacted, the entire
|
|
88
|
+
* export throws SecretScanError naming the offending correction id — it never
|
|
89
|
+
* emits a partial set that silently omits the leaky record.
|
|
90
|
+
*/
|
|
91
|
+
export function exportCorrections(opts = {}) {
|
|
92
|
+
const slugs = opts.project ? [opts.project] : projectsWithCorrections();
|
|
93
|
+
const out = [];
|
|
94
|
+
for (const slug of slugs) {
|
|
95
|
+
let records;
|
|
96
|
+
try {
|
|
97
|
+
records = readCorrections(slug);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// A project dir that became unreadable between enumeration and read — skip,
|
|
101
|
+
// consistent with projectsWithCorrections()'s never-throw posture.
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
for (const rec of records) {
|
|
105
|
+
if (!opts.includeRetracted && rec.active === false)
|
|
106
|
+
continue;
|
|
107
|
+
if (opts.since && rec.date < opts.since)
|
|
108
|
+
continue;
|
|
109
|
+
try {
|
|
110
|
+
out.push(toExport(rec));
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
if (e instanceof SecretScanError) {
|
|
114
|
+
// Re-throw with the offending id so the operator knows exactly which
|
|
115
|
+
// correction to redact or retract before re-running.
|
|
116
|
+
throw new SecretScanError(`${e.label} (in correction ${rec.id})`);
|
|
117
|
+
}
|
|
118
|
+
throw e;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=export-corrections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-corrections.js","sourceRoot":"","sources":["../../src/tools-logic/export-corrections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-capture.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"journal-capture.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoF9F"}
|
|
@@ -32,11 +32,14 @@ export async function journalCapture(input) {
|
|
|
32
32
|
const logFileName = captureLogFileName(date, fs.existsSync(baseLogPath), {
|
|
33
33
|
saveType: "capture",
|
|
34
34
|
content: combined,
|
|
35
|
-
});
|
|
35
|
+
}, dir);
|
|
36
36
|
const logPath = path.join(dir, logFileName);
|
|
37
37
|
const entryNum = countLogEntries(logPath) + 1;
|
|
38
38
|
const tagStr = input.tags && input.tags.length > 0 ? ` [${input.tags.join(", ")}]` : "";
|
|
39
39
|
const timestamp = new Date().toISOString().slice(11, 19);
|
|
40
|
+
// Wave 2 note: capture is the CURATED stream — these 2000/5000 caps are
|
|
41
|
+
// intentional. The lossless tier is journal/archive/raw (verbatim, uncapped);
|
|
42
|
+
// do not remove these caps to "preserve everything" — that is the raw tier's job.
|
|
40
43
|
const question = input.question.length > 2000 ? input.question.slice(0, 2000) + "..." : input.question;
|
|
41
44
|
const answer = input.answer.length > 5000 ? input.answer.slice(0, 5000) + "..." : input.answer;
|
|
42
45
|
let entry = `### Q${entryNum} (${timestamp})${tagStr}\n\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-capture.js","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAmB5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,0DAA0D;IAC1D,IAAI,QAA8B,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;QAC5B,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,4FAA4F;IAC5F,mEAAmE;IACnE,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACvE,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"journal-capture.js","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-write.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-write.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"journal-write.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-write.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAIjF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAClE,YAAY,CAAC,EAAE;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;CACV;AAoCD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuFxF"}
|
|
@@ -11,6 +11,7 @@ import { generateFrontmatter } from "../palace/obsidian.js";
|
|
|
11
11
|
import { updatePalaceIndex } from "../palace/index-manager.js";
|
|
12
12
|
import { journalFileName } from "../storage/session.js";
|
|
13
13
|
import { syncToSupabase } from "../supabase/sync.js";
|
|
14
|
+
import { scrubForCloud } from "../storage/content-guard.js";
|
|
14
15
|
/** Lightweight content → palace room classifier. Returns null if unclear. */
|
|
15
16
|
function classifyContent(content) {
|
|
16
17
|
const lower = content.toLowerCase();
|
|
@@ -98,8 +99,8 @@ export async function journalWrite(input) {
|
|
|
98
99
|
updatePalaceIndex(slug);
|
|
99
100
|
palaceResult = { room: input.palace_room, topic: topicFile, fan_out: fanOutResult.updatedRooms };
|
|
100
101
|
}
|
|
101
|
-
// Async sync to Supabase (non-blocking)
|
|
102
|
-
syncToSupabase(filePath, updated, slug, "journal");
|
|
102
|
+
// Async sync to Supabase (non-blocking) — scrub injection and secrets before egress.
|
|
103
|
+
syncToSupabase(filePath, scrubForCloud(updated), slug, "journal");
|
|
103
104
|
// Advisory routing hint — only when no palace_room was already specified
|
|
104
105
|
let routingHint = null;
|
|
105
106
|
if (!input.palace_room) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-write.js","sourceRoot":"","sources":["../../src/tools-logic/journal-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAiB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"journal-write.js","sourceRoot":"","sources":["../../src/tools-logic/journal-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MemoryBackend, RetainResult } from "./memory-backend.js";
|
|
2
|
+
import type { CorrectionExport } from "./export-corrections.js";
|
|
3
|
+
/**
|
|
4
|
+
* Date string for today (YYYY-MM-DD) in the LOCAL timezone — injectable in
|
|
5
|
+
* tests via the fn arg.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: uses local time, not UTC, so the archive file matches the operator's
|
|
8
|
+
* calendar day. toISOString() returns UTC and would produce the wrong date for
|
|
9
|
+
* operators running past midnight UTC in a positive-offset timezone.
|
|
10
|
+
*/
|
|
11
|
+
export declare function todayDateString(): string;
|
|
12
|
+
/**
|
|
13
|
+
* LocalArchiveMemoryBackend — writes scrubbed CorrectionExport arrays to
|
|
14
|
+
* <root>/exports/local-archive/YYYY-MM-DD.json.
|
|
15
|
+
*
|
|
16
|
+
* CONTRACT:
|
|
17
|
+
* - Assumes records are already scrubbed (exportCorrections() upstream).
|
|
18
|
+
* - Idempotent: re-running with the same IDs does not duplicate entries.
|
|
19
|
+
* - Never throws into session flow — errors map to rejected entries.
|
|
20
|
+
*/
|
|
21
|
+
export declare class LocalArchiveMemoryBackend implements MemoryBackend {
|
|
22
|
+
/** Override in tests via the constructor to pin the date. */
|
|
23
|
+
private readonly _dateFn;
|
|
24
|
+
constructor(opts?: {
|
|
25
|
+
dateFn?: () => string;
|
|
26
|
+
});
|
|
27
|
+
name(): string;
|
|
28
|
+
available(): Promise<boolean>;
|
|
29
|
+
retain(records: CorrectionExport[]): Promise<RetainResult>;
|
|
30
|
+
/** Absolute path of the archive directory for this backend. */
|
|
31
|
+
private _archiveDir;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=local-archive-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-archive-backend.d.ts","sourceRoot":"","sources":["../../src/tools-logic/local-archive-backend.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,aAAa;IAC7D,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAIhD,IAAI,IAAI,MAAM;IAIR,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAY7B,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAyDhE,+DAA+D;IAC/D,OAAO,CAAC,WAAW;CAGpB"}
|