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,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mirror.ts — "The Mirror" (Loop 9): a VISIBLE, CORRECTABLE self-model.
|
|
3
|
+
*
|
|
4
|
+
* For nine loops the system has accumulated a one-sided, HIDDEN model of the
|
|
5
|
+
* user (corrections, blind-spots, awareness insights). Loop 3 proved that model
|
|
6
|
+
* is weak at PREDICTION (0/13 keyword recall on a strict LOO). The Mirror flips
|
|
7
|
+
* the hidden model into a first-person reflection the human can READ and CORRECT:
|
|
8
|
+
*
|
|
9
|
+
* "You've corrected me 8 times about X."
|
|
10
|
+
* "I've noticed you tend to …" (with the corrections it's derived from)
|
|
11
|
+
*
|
|
12
|
+
* Each correction-OF-the-mirror is itself a high-value correction — the human
|
|
13
|
+
* pointing at the line and saying "no, that's not why" is exactly the signal the
|
|
14
|
+
* predict-the-correction loop needs.
|
|
15
|
+
*
|
|
16
|
+
* HARD RULES (enforced here and asserted in test/mirror.test.mjs):
|
|
17
|
+
* 1. NEVER fabricate a trait. Every rendered observation traces to ≥1 real
|
|
18
|
+
* stored record — its `cites` array is non-empty and lists real ids.
|
|
19
|
+
* 2. Carry an explicit fallibility caveat on every reflection (Loop 3: this
|
|
20
|
+
* model is NOT yet predictive — "what I've noticed", not "what's true").
|
|
21
|
+
* 3. Personal-tier, LOCAL-ONLY. Reads the same personal/ + awareness artifacts
|
|
22
|
+
* the rest of Wave 5 reads. No network, no LLM, fully deterministic.
|
|
23
|
+
*
|
|
24
|
+
* Pure assembly: this module reads stored data via injected readers (so tests
|
|
25
|
+
* can feed a known store) and renders. It performs NO IO of its own beyond the
|
|
26
|
+
* default readers, which are the existing disk-backed functions.
|
|
27
|
+
*/
|
|
28
|
+
import { readActiveCorrections, } from "../storage/corrections.js";
|
|
29
|
+
import { readBlindSpots } from "../storage/blind-spots-store.js";
|
|
30
|
+
import { deriveBlindSpots } from "../helpers/blind-spots.js";
|
|
31
|
+
import { readAwarenessState } from "../palace/awareness.js";
|
|
32
|
+
import { listAllProjects } from "../storage/project.js";
|
|
33
|
+
import { tokenize, overlap } from "./check-action.js";
|
|
34
|
+
const CAVEAT = "This is what I've NOTICED from what you've corrected and told me — not a verified " +
|
|
35
|
+
"model of who you are, and (Loop 3) not yet predictive: on a strict leave-one-out " +
|
|
36
|
+
"test the keyword model anticipated 0/13 corrections. Treat every line as a guess " +
|
|
37
|
+
"you can correct. Correcting the mirror is itself a high-value correction.";
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Derivation helpers (pure)
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/** Trim a rule to a single readable clause for prose, collapsing whitespace. */
|
|
42
|
+
function shorten(rule, max = 80) {
|
|
43
|
+
const oneLine = rule.replace(/\s+/g, " ").trim();
|
|
44
|
+
if (oneLine.length <= max)
|
|
45
|
+
return oneLine;
|
|
46
|
+
return oneLine.slice(0, max - 1).trimEnd() + "…";
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Which active corrections back a blind spot — by trigger-keyword overlap
|
|
50
|
+
* against each correction's rule+tags. Returns real correction ids only. This
|
|
51
|
+
* is the join that lets every "I've noticed you tend to…" line cite the actual
|
|
52
|
+
* corrections it was clustered from (the no-fabrication anchor for tendencies).
|
|
53
|
+
*/
|
|
54
|
+
function correctionsBehindTendency(bs, corrections) {
|
|
55
|
+
const triggers = new Set([...bs.trigger_keywords, ...tokenize(bs.tendency)].map((k) => k.toLowerCase()));
|
|
56
|
+
const ids = [];
|
|
57
|
+
for (const c of corrections) {
|
|
58
|
+
if (c.active === false)
|
|
59
|
+
continue;
|
|
60
|
+
const sig = tokenize(`${c.rule} ${(c.tags ?? []).join(" ")}`);
|
|
61
|
+
if (overlap(sig, triggers).length >= 1)
|
|
62
|
+
ids.push(c.id);
|
|
63
|
+
}
|
|
64
|
+
return ids;
|
|
65
|
+
}
|
|
66
|
+
const P0_RE = /\bnever\b|\balways\b|\bdon'?t\b|\bdo not\b|\bmust not\b|\bforbid\b|\bprohibit\b/i;
|
|
67
|
+
/**
|
|
68
|
+
* Theme a single correction into a short topic phrase for the "corrected me
|
|
69
|
+
* about X" line. We never invent the topic — it is the cleaned rule itself,
|
|
70
|
+
* shortened. Returns null when the rule is empty (nothing to cite about).
|
|
71
|
+
*/
|
|
72
|
+
function correctionTopic(c) {
|
|
73
|
+
const rule = (c.rule ?? "").trim();
|
|
74
|
+
if (!rule)
|
|
75
|
+
return null;
|
|
76
|
+
return shorten(rule);
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Assembly
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Assemble the mirror for a project (or "_global" when project is omitted).
|
|
83
|
+
*
|
|
84
|
+
* DETERMINISTIC: given the same stored data the output is byte-identical except
|
|
85
|
+
* `generated_at`. Ordering is fully specified (evidence desc, then severity,
|
|
86
|
+
* then a stable text tiebreak) so there is no Set/Map iteration nondeterminism.
|
|
87
|
+
*
|
|
88
|
+
* @param project — project slug; when omitted, assembles a cross-project mirror
|
|
89
|
+
* keyed "_global" that also surfaces patterns recurring across ≥2 projects.
|
|
90
|
+
* @param readers — injectable for tests; defaults to the real disk-backed store.
|
|
91
|
+
*/
|
|
92
|
+
export function buildMirror(project, readers) {
|
|
93
|
+
const r = {
|
|
94
|
+
corrections: readers?.corrections ?? ((p) => readActiveCorrections(p)),
|
|
95
|
+
// READ-ONLY by default: `ar mirror` must not write the personal tier as a
|
|
96
|
+
// side effect of reading. When no profile is stored yet we derive it
|
|
97
|
+
// in-memory from the active corrections (deriveBlindSpots is pure, no IO) —
|
|
98
|
+
// so the mirror still reflects tendencies without persisting anything.
|
|
99
|
+
blindSpots: readers?.blindSpots ?? ((p) => readBlindSpots(p) ?? deriveInMemory(p)),
|
|
100
|
+
awareness: readers?.awareness ?? (() => readAwarenessState()),
|
|
101
|
+
allProjectCorrections: readers?.allProjectCorrections ?? defaultAllProjectCorrections,
|
|
102
|
+
};
|
|
103
|
+
const slug = project && project.trim() ? project.trim() : "_global";
|
|
104
|
+
const observations = [];
|
|
105
|
+
// ── 1. Tendencies (blind-spots profile) — "I've noticed you tend to…" ──────
|
|
106
|
+
// These are the richest signal: a clustered tendency backed by N corrections.
|
|
107
|
+
// We render the tendency ONLY when we can cite the real corrections behind it.
|
|
108
|
+
let tendencyCount = 0;
|
|
109
|
+
const corrections = project ? r.corrections(slug) : [];
|
|
110
|
+
const profile = project ? r.blindSpots(slug) : null;
|
|
111
|
+
if (profile) {
|
|
112
|
+
for (const bs of profile.blind_spots) {
|
|
113
|
+
const cites = correctionsBehindTendency(bs, corrections);
|
|
114
|
+
if (cites.length === 0)
|
|
115
|
+
continue; // no backing data ⇒ never render
|
|
116
|
+
tendencyCount++;
|
|
117
|
+
const verb = bs.severity === "p0" ? "tend to insist" : "tend";
|
|
118
|
+
observations.push({
|
|
119
|
+
kind: "tendency",
|
|
120
|
+
text: `I've noticed you ${verb}: ${shorten(bs.tendency)} ` +
|
|
121
|
+
`(seen across ${bs.evidence_count} corrections, last ${bs.last_seen}).`,
|
|
122
|
+
cites,
|
|
123
|
+
evidence_count: bs.evidence_count,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── 2. Standalone corrections not already folded into a tendency ───────────
|
|
128
|
+
// "You've corrected me about X." Each line cites exactly its own record id, so
|
|
129
|
+
// it can never be a fabrication. We skip corrections already covered by a
|
|
130
|
+
// rendered tendency to avoid double-counting the same intent.
|
|
131
|
+
const citedByTendency = new Set();
|
|
132
|
+
for (const o of observations)
|
|
133
|
+
for (const id of o.cites)
|
|
134
|
+
citedByTendency.add(id);
|
|
135
|
+
// Group remaining corrections by topic so repeated intents read as a count.
|
|
136
|
+
const remaining = corrections.filter((c) => c.active !== false && !citedByTendency.has(c.id));
|
|
137
|
+
for (const c of remaining) {
|
|
138
|
+
const topic = correctionTopic(c);
|
|
139
|
+
if (!topic)
|
|
140
|
+
continue; // empty rule ⇒ nothing real to cite
|
|
141
|
+
const sev = P0_RE.test(c.rule) || c.severity === "p0" ? "p0" : "p1";
|
|
142
|
+
observations.push({
|
|
143
|
+
kind: "correction",
|
|
144
|
+
text: sev === "p0"
|
|
145
|
+
? `You've drawn a hard line with me: ${topic}.`
|
|
146
|
+
: `You've corrected me on: ${topic}.`,
|
|
147
|
+
cites: [c.id],
|
|
148
|
+
evidence_count: Math.max(1, c.recurrence_count ?? 0) + 1,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const correctionLineCount = remaining.length;
|
|
152
|
+
// ── 3. Awareness insights — "I've learned…" (cite the insight id) ──────────
|
|
153
|
+
let insightCount = 0;
|
|
154
|
+
const awareness = r.awareness();
|
|
155
|
+
if (awareness) {
|
|
156
|
+
const relevant = (awareness.topInsights ?? []).filter((ins) => project ? insightAppliesToProject(ins, slug) : true);
|
|
157
|
+
for (const ins of relevant) {
|
|
158
|
+
if (!ins.id || !ins.title)
|
|
159
|
+
continue; // no real anchor ⇒ skip
|
|
160
|
+
insightCount++;
|
|
161
|
+
observations.push({
|
|
162
|
+
kind: "insight",
|
|
163
|
+
text: `I've learned: ${shorten(ins.title)} ` +
|
|
164
|
+
`(confirmed ${ins.confirmations}×, last ${ins.lastConfirmed?.slice(0, 10) ?? "?"}).`,
|
|
165
|
+
cites: [ins.id],
|
|
166
|
+
evidence_count: Math.max(1, ins.confirmations ?? 1),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// ── 4. Cross-project patterns (only for the _global mirror) ────────────────
|
|
171
|
+
// A pattern that recurs across ≥2 projects is the strongest "how you think"
|
|
172
|
+
// signal — it's not tied to one codebase. Cite the correction ids from each
|
|
173
|
+
// project that share the cluster. Pure: derived from the same tokenizer.
|
|
174
|
+
let crossProjectProjects = 0;
|
|
175
|
+
if (!project) {
|
|
176
|
+
const cp = deriveCrossProjectPatterns(r.allProjectCorrections());
|
|
177
|
+
crossProjectProjects = cp.projectCount;
|
|
178
|
+
for (const pat of cp.patterns) {
|
|
179
|
+
observations.push({
|
|
180
|
+
kind: "cross_project",
|
|
181
|
+
text: `Across ${pat.projects.length} projects (${pat.projects.join(", ")}) ` +
|
|
182
|
+
`you keep returning to: ${shorten(pat.topic)} ` +
|
|
183
|
+
`(${pat.cites.length} corrections).`,
|
|
184
|
+
cites: pat.cites,
|
|
185
|
+
evidence_count: pat.cites.length,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// ── Order: evidence desc, then tendency>cross_project>correction>insight, ──
|
|
190
|
+
// then stable text tiebreak. Fully deterministic.
|
|
191
|
+
const kindRank = {
|
|
192
|
+
tendency: 0,
|
|
193
|
+
cross_project: 1,
|
|
194
|
+
correction: 2,
|
|
195
|
+
insight: 3,
|
|
196
|
+
};
|
|
197
|
+
observations.sort((a, b) => {
|
|
198
|
+
if (b.evidence_count !== a.evidence_count)
|
|
199
|
+
return b.evidence_count - a.evidence_count;
|
|
200
|
+
if (kindRank[a.kind] !== kindRank[b.kind])
|
|
201
|
+
return kindRank[a.kind] - kindRank[b.kind];
|
|
202
|
+
return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
|
|
203
|
+
});
|
|
204
|
+
return {
|
|
205
|
+
generated_at: new Date().toISOString(),
|
|
206
|
+
project: slug,
|
|
207
|
+
observations,
|
|
208
|
+
caveat: CAVEAT,
|
|
209
|
+
empty: observations.length === 0,
|
|
210
|
+
basis: {
|
|
211
|
+
corrections: correctionLineCount,
|
|
212
|
+
tendencies: tendencyCount,
|
|
213
|
+
insights: insightCount,
|
|
214
|
+
cross_project_projects: crossProjectProjects,
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Default disk-backed helpers
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
/**
|
|
222
|
+
* Derive a blind-spots profile in memory from the project's active corrections,
|
|
223
|
+
* WITHOUT persisting (read-only `ar mirror`). Pure: deriveBlindSpots does no IO;
|
|
224
|
+
* the only IO is the corrections read, which is wrapped so a failure ⇒ null.
|
|
225
|
+
*/
|
|
226
|
+
function deriveInMemory(project) {
|
|
227
|
+
try {
|
|
228
|
+
return deriveBlindSpots(readActiveCorrections(project), []);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function defaultAllProjectCorrections() {
|
|
235
|
+
const out = [];
|
|
236
|
+
let projects = [];
|
|
237
|
+
try {
|
|
238
|
+
projects = listAllProjects();
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
for (const p of projects) {
|
|
244
|
+
try {
|
|
245
|
+
const corr = readActiveCorrections(p.slug);
|
|
246
|
+
if (corr.length > 0)
|
|
247
|
+
out.push({ slug: p.slug, corrections: corr });
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// skip unreadable project
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return out;
|
|
254
|
+
}
|
|
255
|
+
/** An insight applies to a project when it has no project scope or names it. */
|
|
256
|
+
function insightAppliesToProject(ins, slug) {
|
|
257
|
+
const sp = ins.source_project;
|
|
258
|
+
if (!sp || sp === "_global")
|
|
259
|
+
return true;
|
|
260
|
+
return sp === slug;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Find correction clusters that recur across ≥2 projects. We tokenize each
|
|
264
|
+
* correction, greedily cluster by ≥2 shared content tokens, and keep clusters
|
|
265
|
+
* whose members span ≥2 distinct projects. Deterministic: corrections are
|
|
266
|
+
* pre-sorted by (date, id) before clustering.
|
|
267
|
+
*/
|
|
268
|
+
export function deriveCrossProjectPatterns(perProject) {
|
|
269
|
+
const items = [];
|
|
270
|
+
for (const { slug, corrections } of perProject) {
|
|
271
|
+
for (const c of corrections) {
|
|
272
|
+
if (c.active === false)
|
|
273
|
+
continue;
|
|
274
|
+
const rule = (c.rule ?? "").trim();
|
|
275
|
+
if (!rule)
|
|
276
|
+
continue;
|
|
277
|
+
const tokens = tokenize(`${rule} ${(c.tags ?? []).join(" ")}`);
|
|
278
|
+
if (tokens.size === 0)
|
|
279
|
+
continue;
|
|
280
|
+
items.push({ id: c.id, project: slug, rule, tokens, date: c.date ?? "" });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Deterministic order.
|
|
284
|
+
items.sort((a, b) => a.date !== b.date ? (a.date < b.date ? -1 : 1) : a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
|
|
285
|
+
const MIN_SHARED = 2;
|
|
286
|
+
const used = new Set();
|
|
287
|
+
const patterns = [];
|
|
288
|
+
for (let i = 0; i < items.length; i++) {
|
|
289
|
+
if (used.has(i))
|
|
290
|
+
continue;
|
|
291
|
+
const seed = items[i];
|
|
292
|
+
const members = [seed];
|
|
293
|
+
used.add(i);
|
|
294
|
+
for (let j = i + 1; j < items.length; j++) {
|
|
295
|
+
if (used.has(j))
|
|
296
|
+
continue;
|
|
297
|
+
if (overlap(items[j].tokens, seed.tokens).length >= MIN_SHARED) {
|
|
298
|
+
members.push(items[j]);
|
|
299
|
+
used.add(j);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const projects = [...new Set(members.map((m) => m.project))].sort();
|
|
303
|
+
if (projects.length < 2)
|
|
304
|
+
continue; // not cross-project ⇒ skip
|
|
305
|
+
patterns.push({
|
|
306
|
+
topic: seed.rule,
|
|
307
|
+
projects,
|
|
308
|
+
cites: members.map((m) => m.id),
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
patterns.sort((a, b) => b.cites.length - a.cites.length);
|
|
312
|
+
const allProjects = new Set();
|
|
313
|
+
for (const p of patterns)
|
|
314
|
+
for (const pr of p.projects)
|
|
315
|
+
allProjects.add(pr);
|
|
316
|
+
return { patterns, projectCount: allProjects.size };
|
|
317
|
+
}
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
// Rendering (human-readable)
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
/** Render a reflection as first-person human-readable text (for `ar mirror`). */
|
|
322
|
+
export function renderMirror(m) {
|
|
323
|
+
const lines = [];
|
|
324
|
+
const scope = m.project === "_global" ? "across all your projects" : `for ${m.project}`;
|
|
325
|
+
lines.push(`# The Mirror — what I've learned about how you think (${scope})`);
|
|
326
|
+
lines.push("");
|
|
327
|
+
if (m.empty) {
|
|
328
|
+
lines.push("I don't have enough of your corrections or insights yet to reflect anything " +
|
|
329
|
+
"back. The mirror stays empty until there's real stored data — I won't invent " +
|
|
330
|
+
"a persona for you.");
|
|
331
|
+
lines.push("");
|
|
332
|
+
lines.push(`> ${m.caveat}`);
|
|
333
|
+
return lines.join("\n");
|
|
334
|
+
}
|
|
335
|
+
for (const o of m.observations) {
|
|
336
|
+
lines.push(`- ${o.text}`);
|
|
337
|
+
lines.push(` ↳ from: ${o.cites.join(", ")}`);
|
|
338
|
+
}
|
|
339
|
+
lines.push("");
|
|
340
|
+
lines.push(`(${m.basis.tendencies} tendencies · ${m.basis.corrections} corrections · ` +
|
|
341
|
+
`${m.basis.insights} insights` +
|
|
342
|
+
(m.project === "_global" ? ` · ${m.basis.cross_project_projects} cross-project` : "") +
|
|
343
|
+
`)`);
|
|
344
|
+
lines.push("");
|
|
345
|
+
lines.push(`> ${m.caveat}`);
|
|
346
|
+
return lines.join("\n");
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=mirror-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mirror-builder.js","sourceRoot":"","sources":["../../src/tools-logic/mirror-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palace-write.d.ts","sourceRoot":"","sources":["../../src/tools-logic/palace-write.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"palace-write.d.ts","sourceRoot":"","sources":["../../src/tools-logic/palace-write.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;CACjB;AASD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgGrF"}
|
|
@@ -10,6 +10,7 @@ import { generateFrontmatter } from "../palace/obsidian.js";
|
|
|
10
10
|
import { appendToLog } from "../palace/log.js";
|
|
11
11
|
import { generateSlug } from "../helpers/auto-name.js";
|
|
12
12
|
import { syncToSupabase } from "../supabase/sync.js";
|
|
13
|
+
import { scrubForCloud } from "../storage/content-guard.js";
|
|
13
14
|
function stripFrontmatterFromContent(rawContent) {
|
|
14
15
|
// Match: --- followed by key: value lines followed by ---
|
|
15
16
|
const match = rawContent.match(/^---\s*\n[\s\S]*?\n---\s*\n([\s\S]*)$/);
|
|
@@ -83,9 +84,9 @@ export async function palaceWrite(input) {
|
|
|
83
84
|
// Propagate the real importance of this write into the salience formula so
|
|
84
85
|
// --importance high measurably raises the room's salience (not always medium).
|
|
85
86
|
recordAccess(slug, safeRoom, importance);
|
|
86
|
-
// Async sync to Supabase (non-blocking)
|
|
87
|
+
// Async sync to Supabase (non-blocking) — scrub injection and secrets before egress.
|
|
87
88
|
const writtenContent = fs.readFileSync(targetFile, "utf-8");
|
|
88
|
-
syncToSupabase(targetFile, writtenContent, slug, "palace", safeRoom);
|
|
89
|
+
syncToSupabase(targetFile, scrubForCloud(writtenContent), slug, "palace", safeRoom);
|
|
89
90
|
const fanOutResult = fanOut(slug, safeRoom, targetTopic, content, input.connections ?? [], importance);
|
|
90
91
|
updatePalaceIndex(slug);
|
|
91
92
|
appendToLog(slug, "palace_write", { room: safeRoom, topic: targetTopic, importance, fan_out_rooms: fanOutResult.updatedRooms });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palace-write.js","sourceRoot":"","sources":["../../src/tools-logic/palace-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,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"palace-write.js","sourceRoot":"","sources":["../../src/tools-logic/palace-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-close.d.ts","sourceRoot":"","sources":["../../src/tools-logic/pipeline-close.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline-close.d.ts","sourceRoot":"","sources":["../../src/tools-logic/pipeline-close.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAW9F,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuD3F"}
|
|
@@ -2,11 +2,12 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import { resolveProject } from "../storage/project.js";
|
|
3
3
|
import { withLock } from "../storage/filelock.js";
|
|
4
4
|
import { syncToSupabase } from "../supabase/sync.js";
|
|
5
|
+
import { scrubForCloud } from "../storage/content-guard.js";
|
|
5
6
|
import { findActiveMilestone, writeMilestone } from "../palace/pipeline.js";
|
|
6
7
|
function syncPipelineFile(filePath, project) {
|
|
7
8
|
try {
|
|
8
9
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
9
|
-
syncToSupabase(filePath, content, project, "palace", "pipeline");
|
|
10
|
+
syncToSupabase(filePath, scrubForCloud(content), project, "palace", "pipeline");
|
|
10
11
|
}
|
|
11
12
|
catch {
|
|
12
13
|
// Best-effort — Supabase sync failures must never break a write.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-close.js","sourceRoot":"","sources":["../../src/tools-logic/pipeline-close.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAC;AAE9F,SAAS,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline-close.js","sourceRoot":"","sources":["../../src/tools-logic/pipeline-close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-open.d.ts","sourceRoot":"","sources":["../../src/tools-logic/pipeline-open.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline-open.d.ts","sourceRoot":"","sources":["../../src/tools-logic/pipeline-open.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0BD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyExF"}
|
|
@@ -2,6 +2,7 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import { resolveProject } from "../storage/project.js";
|
|
3
3
|
import { withLock } from "../storage/filelock.js";
|
|
4
4
|
import { syncToSupabase } from "../supabase/sync.js";
|
|
5
|
+
import { scrubForCloud } from "../storage/content-guard.js";
|
|
5
6
|
import { findActiveMilestone, nextOrder, writeMilestone, PLACEHOLDER, } from "../palace/pipeline.js";
|
|
6
7
|
/**
|
|
7
8
|
* Fire-and-forget Supabase sync. Reads the just-written file back inside the
|
|
@@ -11,7 +12,7 @@ import { findActiveMilestone, nextOrder, writeMilestone, PLACEHOLDER, } from "..
|
|
|
11
12
|
function syncPipelineFile(filePath, project) {
|
|
12
13
|
try {
|
|
13
14
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
14
|
-
syncToSupabase(filePath, content, project, "palace", "pipeline");
|
|
15
|
+
syncToSupabase(filePath, scrubForCloud(content), project, "palace", "pipeline");
|
|
15
16
|
}
|
|
16
17
|
catch {
|
|
17
18
|
// Best-effort — Supabase sync failures must never break a write.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-open.js","sourceRoot":"","sources":["../../src/tools-logic/pipeline-open.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,WAAW,GAEZ,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline-open.js","sourceRoot":"","sources":["../../src/tools-logic/pipeline-open.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,WAAW,GAEZ,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAqBD,SAAS,eAAe,CACtB,OAAe,EACf,MAAiB,EACjB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpF,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;QAC1B,aAAa,EACX,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,KAAK,WAAW;YAC5E,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa;YAC/B,CAAC,CAAC,yBAAyB;QAC/B,UAAU,EACR,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,WAAW;YACtE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU;YAC5B,CAAC,CAAC,yBAAyB;QAC/B,SAAS;KACV,CAAC;IACF,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAClF,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACzD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,gDAAgD;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,GAAuB,EAAE;QAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,UAA2E,CAAC;QAEhF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,6BAA6B,IAAI,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtF,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBACxB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBACxB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,KAAK,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,uGAAuG;iBAC/J,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,SAAS;YAChB,KAAK;YACL,MAAM,EAAE,QAAiB;YACzB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;SAC1B,CAAC;QACF,MAAM,QAAQ,GAAG;YACf,IAAI;YACJ,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,WAAW;YACvB,SAAS,EAAE,WAAW;SACvB,CAAC;QACF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtD,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAuB;YACjC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,KAAK;YACL,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,QAAQ;SACpB,CAAC;QACF,IAAI,UAAU;YAAE,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* predict-correction.ts — the north-star: anticipate a correction BEFORE the
|
|
3
|
+
* user makes it (Wave 5, Decision #8).
|
|
4
|
+
*
|
|
5
|
+
* Given a plan, overlap its tokens against the corrections-derived Blind-Spots
|
|
6
|
+
* profile. A fired risk means "this plan resembles a tendency you have been
|
|
7
|
+
* corrected on" — pushed as an EARLY prior at session_start / check(), not a
|
|
8
|
+
* RAG fact pulled late. Synchronous (Decision #3 — retrieval is a function, no
|
|
9
|
+
* spawned per-call agent). Reuses the exported tokenize/overlap grammar from
|
|
10
|
+
* check-action (Wave 4) — does NOT fork it.
|
|
11
|
+
*/
|
|
12
|
+
export interface PredictCorrectionInput {
|
|
13
|
+
/** The plan / action / goal text to evaluate. */
|
|
14
|
+
plan: string;
|
|
15
|
+
project?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PredictedRisk {
|
|
18
|
+
/** The tendency this plan resembles. */
|
|
19
|
+
tendency: string;
|
|
20
|
+
/** Normalized risk score for this single tendency (0–1). */
|
|
21
|
+
score: number;
|
|
22
|
+
/** The plan tokens that matched the tendency's trigger keywords. */
|
|
23
|
+
matched: string[];
|
|
24
|
+
/** Correction id this risk is anchored to (for outcome instrumentation). */
|
|
25
|
+
correction_id?: string;
|
|
26
|
+
severity: "p0" | "p1";
|
|
27
|
+
}
|
|
28
|
+
export interface PredictCorrectionResult {
|
|
29
|
+
/** High-threshold-first likelihood band. */
|
|
30
|
+
likelihood: "high" | "medium" | "low";
|
|
31
|
+
/** Top fired risks (capped). */
|
|
32
|
+
top_risks: PredictedRisk[];
|
|
33
|
+
/** Blind-spot tendencies that matched (for orientation display). */
|
|
34
|
+
matched_blind_spots: string[];
|
|
35
|
+
/** A single actionable guard line the agent can act on, or null. */
|
|
36
|
+
suggested_guard: string | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* LOCAL semantic-similarity floor for a risk to fire when the keyword path does
|
|
40
|
+
* NOT (Loop 5). Re-exported from blind-spots.ts (the single matching grammar) so
|
|
41
|
+
* production and the LOO eval share ONE threshold. Tuned on the real corpus to
|
|
42
|
+
* balance recall against false positives on unrelated pairs. No API key, no
|
|
43
|
+
* network — pure stemming + concept map + char-trigram cosine.
|
|
44
|
+
*/
|
|
45
|
+
export declare const SEMANTIC_THRESHOLD = 0.2;
|
|
46
|
+
export declare function predictCorrection(input: PredictCorrectionInput): Promise<PredictCorrectionResult>;
|
|
47
|
+
//# sourceMappingURL=predict-correction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predict-correction.d.ts","sourceRoot":"","sources":["../../src/tools-logic/predict-correction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,gCAAgC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,oEAAoE;IACpE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,oEAAoE;IACpE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAID;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,MAAgC,CAAC;AAyBhE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAgGlC"}
|