agent-recall-core 3.4.30 → 3.4.35
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 +52 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -9
- 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/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 +32 -0
- package/dist/storage/classification.d.ts.map +1 -0
- package/dist/storage/classification.js +74 -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 +246 -21
- package/dist/storage/corrections.d.ts.map +1 -1
- package/dist/storage/corrections.js +605 -56
- 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 +8 -0
- package/dist/supabase/config.d.ts.map +1 -1
- package/dist/supabase/config.js +5 -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.map +1 -1
- package/dist/supabase/sync.js +30 -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 +31 -2
- 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/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 +57 -0
- package/dist/tools-logic/prior-builder.js.map +1 -0
- package/dist/tools-logic/recognition-builder.d.ts +116 -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 +68 -29
- package/dist/tools-logic/session-end-reflect.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts +9 -0
- package/dist/tools-logic/session-end.d.ts.map +1 -1
- package/dist/tools-logic/session-end.js +111 -13
- 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 +10 -0
- package/dist/tools-logic/session-start-lite.js.map +1 -1
- package/dist/tools-logic/session-start.d.ts +46 -0
- package/dist/tools-logic/session-start.d.ts.map +1 -1
- package/dist/tools-logic/session-start.js +96 -3
- 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/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/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 +9 -1
- 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,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* brief.ts — compact LLM-free re-orientation briefing (≤200 tokens).
|
|
3
|
+
*
|
|
4
|
+
* Designed for:
|
|
5
|
+
* - Hook-less hosts (no session_start auto-fire) that need a lightweight
|
|
6
|
+
* mid-session reminder of lifecycle rules and current project state.
|
|
7
|
+
* - Tier-B fallback when a client does not want the full session_start payload.
|
|
8
|
+
*
|
|
9
|
+
* Contract:
|
|
10
|
+
* - READ-ONLY: no session_start side-effects (no recordPolicyLoad, no
|
|
11
|
+
* recordOutcome, no autoBackfill). Does NOT replace session_start.
|
|
12
|
+
* - DETERMINISTIC: same on-disk state → byte-identical JSON output across
|
|
13
|
+
* runs. No Date.now() in output, no timestamps, no random values.
|
|
14
|
+
* - LLM-FREE: only synchronous fs reads + keyword matching.
|
|
15
|
+
* - ≤200 tokens output budget (enforced by field limits; caller may verify).
|
|
16
|
+
* - NEVER call recordPolicyLoad or any write-side function here.
|
|
17
|
+
*
|
|
18
|
+
* Spec ref: cross-surface-adapter-spec.md §5 "brief tool design"
|
|
19
|
+
* --full only: registered inside the `if (fullMode)` block in index.ts.
|
|
20
|
+
*/
|
|
21
|
+
import { resolveProject } from "../storage/project.js";
|
|
22
|
+
import { readIdentity } from "../palace/identity.js";
|
|
23
|
+
import { readActiveCorrections } from "../storage/corrections.js";
|
|
24
|
+
import { readAlignmentLog, extractWatchPatterns } from "../helpers/alignment-patterns.js";
|
|
25
|
+
import { readBehaviorPolicies } from "../storage/behavior-policies.js";
|
|
26
|
+
import { listMilestones } from "../palace/pipeline.js";
|
|
27
|
+
import { runStoreDoctor, storeDoctorBanner } from "./store-doctor.js";
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Constants
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* The 3-rule lifecycle verbatim — must match server.ts instructions.
|
|
33
|
+
* Single source of truth here; server.ts REFERENCES this exported constant.
|
|
34
|
+
*/
|
|
35
|
+
export const LIFECYCLE_TEXT = "AgentRecall lifecycle (this host has NO auto-hooks — you drive it):\n" +
|
|
36
|
+
"(1) ENTRY: call session_start FIRST, before acting.\n" +
|
|
37
|
+
"(2) DURABLE INTENT: when you or the user says save/remember/checkpoint/记住, call session_end (or remember for a single fact). Saying it ≠ saving it.\n" +
|
|
38
|
+
"(3) EXIT: call session_end before the session ends.";
|
|
39
|
+
/** Save-trigger vocabulary rendered as human-readable strings. */
|
|
40
|
+
const TRIGGER_VOCAB_DISPLAY = [
|
|
41
|
+
"save", "save this", "save the session",
|
|
42
|
+
"checkpoint", "retain this",
|
|
43
|
+
"don't forget this", "remember this", "write this down",
|
|
44
|
+
"记住", "保存", "存档",
|
|
45
|
+
];
|
|
46
|
+
const HOST_HINT = "Hook-less host? call brief() once for lifecycle rules. session_start is still required at entry.";
|
|
47
|
+
/**
|
|
48
|
+
* ≤200-token budget enforced as a conservative char-count proxy.
|
|
49
|
+
* JSON overhead ≈ 20%; 1200 chars ≈ 200 tokens at ~6 chars/token.
|
|
50
|
+
* enforceTokenBudget() truncates per-section so the invariant holds on a
|
|
51
|
+
* fully-populated store, not just an empty one.
|
|
52
|
+
*/
|
|
53
|
+
const BUDGET_CHARS = 1200;
|
|
54
|
+
/** Per-section field limits (chars) sized so the total stays under BUDGET_CHARS.
|
|
55
|
+
*
|
|
56
|
+
* Fixed overhead analysis (measured):
|
|
57
|
+
* lifecycle_text ~319, host_hint ~96, trigger_vocab ~135, project ~30 → ~580 fixed.
|
|
58
|
+
* JSON structural overhead (keys, brackets, commas) → ~120.
|
|
59
|
+
* Budget for dynamic fields: 1200 - 580 - 120 = 500 chars.
|
|
60
|
+
* Slots: identity(1) + corrections_top(3) + watch_for_top(2) + rules_top(3).
|
|
61
|
+
* Budget allocation per slot type:
|
|
62
|
+
* identity: 1 × 40 = 40
|
|
63
|
+
* correction: 3 × (id≤12 + rule≤30) ≈ 3×50 = 150 (id truncated to date-part)
|
|
64
|
+
* watch: 2 × (pattern≤30 + suggestion≤30) = 120
|
|
65
|
+
* rule: 3 × (name≤20 + when≤25 + do≤25) = 210
|
|
66
|
+
* Total dynamic: 40 + 150 + 120 + 210 = 520 (tight, within budget with ~80 margin)
|
|
67
|
+
*/
|
|
68
|
+
const LIMITS = {
|
|
69
|
+
identity: 40,
|
|
70
|
+
correction_id: 10, // keep only date "2026-06-14" — strip slug suffix
|
|
71
|
+
correction_rule: 20,
|
|
72
|
+
watch_pattern: 28,
|
|
73
|
+
watch_suggestion: 28,
|
|
74
|
+
rule_name: 15,
|
|
75
|
+
rule_when: 18,
|
|
76
|
+
rule_do: 18,
|
|
77
|
+
};
|
|
78
|
+
function enforceTokenBudget(r) {
|
|
79
|
+
return {
|
|
80
|
+
...r,
|
|
81
|
+
identity: r.identity.slice(0, LIMITS.identity),
|
|
82
|
+
corrections_top: r.corrections_top.map((c) => ({
|
|
83
|
+
...c,
|
|
84
|
+
id: c.id.slice(0, LIMITS.correction_id),
|
|
85
|
+
rule: c.rule.slice(0, LIMITS.correction_rule),
|
|
86
|
+
})),
|
|
87
|
+
watch_for_top: r.watch_for_top.map((w) => ({
|
|
88
|
+
...w,
|
|
89
|
+
pattern: w.pattern.slice(0, LIMITS.watch_pattern),
|
|
90
|
+
suggestion: w.suggestion.slice(0, LIMITS.watch_suggestion),
|
|
91
|
+
})),
|
|
92
|
+
rules_top: r.rules_top.map((rule) => ({
|
|
93
|
+
...rule,
|
|
94
|
+
name: rule.name.slice(0, LIMITS.rule_name),
|
|
95
|
+
when: rule.when.slice(0, LIMITS.rule_when),
|
|
96
|
+
do: rule.do.slice(0, LIMITS.rule_do),
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// brief()
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
export async function brief(input) {
|
|
104
|
+
const slug = await resolveProject(input.project);
|
|
105
|
+
// --- identity (≤140 chars) ---
|
|
106
|
+
const rawIdentity = readIdentity(slug);
|
|
107
|
+
const firstMeaningful = rawIdentity.split("\n").find((l) => {
|
|
108
|
+
const t = l.trim();
|
|
109
|
+
return t && !t.startsWith("---") && !t.startsWith(">") && !/^[a-z_]+:\s/.test(t) && !t.startsWith("_(");
|
|
110
|
+
});
|
|
111
|
+
const identity = (firstMeaningful ?? slug).replace(/^#+\s*/, "").trim().slice(0, 140);
|
|
112
|
+
// --- active pipeline phase (deterministic, null if none) ---
|
|
113
|
+
let active_phase = null;
|
|
114
|
+
try {
|
|
115
|
+
const milestones = listMilestones(slug);
|
|
116
|
+
const active = milestones.find((m) => m.meta.status === "active");
|
|
117
|
+
active_phase = active?.meta.phase ?? null;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
active_phase = null;
|
|
121
|
+
}
|
|
122
|
+
// --- top P0 corrections (≤3, date-descending) ---
|
|
123
|
+
let corrections_top = [];
|
|
124
|
+
try {
|
|
125
|
+
const corrections = readActiveCorrections(slug);
|
|
126
|
+
// Sort deterministically: P0 first, then by id (date-stamped ids are
|
|
127
|
+
// lexicographically ordered newest-first after the date prefix).
|
|
128
|
+
const sorted = corrections
|
|
129
|
+
.filter((c) => c.severity === "p0")
|
|
130
|
+
.sort((a, b) => b.id.localeCompare(a.id))
|
|
131
|
+
.slice(0, 3);
|
|
132
|
+
corrections_top = sorted.map((c) => ({
|
|
133
|
+
id: c.id,
|
|
134
|
+
rule: c.rule.slice(0, 120),
|
|
135
|
+
severity: c.severity,
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
corrections_top = [];
|
|
140
|
+
}
|
|
141
|
+
// --- watch_for (≤2) ---
|
|
142
|
+
let watch_for_top = [];
|
|
143
|
+
try {
|
|
144
|
+
const alignLog = readAlignmentLog(slug);
|
|
145
|
+
const patterns = extractWatchPatterns(alignLog, 2);
|
|
146
|
+
watch_for_top = patterns.map((p) => ({
|
|
147
|
+
pattern: p.pattern.slice(0, 80),
|
|
148
|
+
suggestion: p.suggestion.slice(0, 80),
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
watch_for_top = [];
|
|
153
|
+
}
|
|
154
|
+
// --- top behavior rules (≤3) ---
|
|
155
|
+
let rules_top = [];
|
|
156
|
+
try {
|
|
157
|
+
// NOTE: brief intentionally does NOT call recordPolicyLoad() — read-only.
|
|
158
|
+
const policies = readBehaviorPolicies(slug);
|
|
159
|
+
const topRules = policies.rules
|
|
160
|
+
.sort((a, b) => b.created.localeCompare(a.created))
|
|
161
|
+
.slice(0, 3);
|
|
162
|
+
rules_top = topRules.map((r) => ({
|
|
163
|
+
name: r.name.slice(0, 60),
|
|
164
|
+
when: r.when.slice(0, 80),
|
|
165
|
+
do: r.do.slice(0, 80),
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
rules_top = [];
|
|
170
|
+
}
|
|
171
|
+
// --- store health (best-effort, silent on healthy) ---
|
|
172
|
+
let store_health = null;
|
|
173
|
+
try {
|
|
174
|
+
store_health = storeDoctorBanner(runStoreDoctor());
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
store_health = null;
|
|
178
|
+
}
|
|
179
|
+
const raw = {
|
|
180
|
+
project: slug,
|
|
181
|
+
identity,
|
|
182
|
+
active_phase,
|
|
183
|
+
corrections_top,
|
|
184
|
+
watch_for_top,
|
|
185
|
+
rules_top,
|
|
186
|
+
lifecycle_text: LIFECYCLE_TEXT,
|
|
187
|
+
trigger_vocab: [...TRIGGER_VOCAB_DISPLAY],
|
|
188
|
+
store_health,
|
|
189
|
+
host_hint: HOST_HINT,
|
|
190
|
+
};
|
|
191
|
+
return enforceTokenBudget(raw);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=brief.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/tools-logic/brief.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,15 @@ export interface CheckActionResult {
|
|
|
50
50
|
matching_insights: InsightMatch[];
|
|
51
51
|
/** Ready-to-paste warning string for the agent to read before acting. */
|
|
52
52
|
warning: string | null;
|
|
53
|
+
/**
|
|
54
|
+
* Wave 5 — corrections are ground truth that can OVERRIDE a plan. `blocked`
|
|
55
|
+
* fires ONLY when a matched correction is authoritative (`authoritative!==false`),
|
|
56
|
+
* P0, and NOT a noise-candidate (`precision<0.3 && retrieved>=3`) — otherwise
|
|
57
|
+
* stale/low-signal P0s would veto legitimate plans. Default `advisory`.
|
|
58
|
+
*/
|
|
59
|
+
verdict: "advisory" | "blocked";
|
|
53
60
|
}
|
|
61
|
+
export declare function tokenize(s: string): Set<string>;
|
|
62
|
+
export declare function overlap(a: Set<string>, b: Set<string>): string[];
|
|
54
63
|
export declare function checkAction(input: CheckActionInput): Promise<CheckActionResult>;
|
|
55
64
|
//# sourceMappingURL=check-action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-action.d.ts","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,oBAAoB,EAAE,eAAe,EAAE,CAAC;IACxC,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"check-action.d.ts","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,oBAAoB,EAAE,eAAe,EAAE,CAAC;IACxC,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;CACjC;AAkBD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAS/C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAIhE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuIrF"}
|
|
@@ -31,7 +31,9 @@ const STOPWORDS = new Set([
|
|
|
31
31
|
"they", "them", "their", "what", "which", "who", "whom", "whose", "as", "if",
|
|
32
32
|
"my", "your", "our", "let", "lets", "going", "make", "made", "go", "want", "need",
|
|
33
33
|
]);
|
|
34
|
-
|
|
34
|
+
// Exported (Wave 4) so the prior-builder and predict-correction (Wave 5) reuse
|
|
35
|
+
// the SAME tokenizer/overlap grammar instead of forking it.
|
|
36
|
+
export function tokenize(s) {
|
|
35
37
|
return new Set(s
|
|
36
38
|
.toLowerCase()
|
|
37
39
|
.normalize("NFKD")
|
|
@@ -39,7 +41,7 @@ function tokenize(s) {
|
|
|
39
41
|
.split(/\s+/)
|
|
40
42
|
.filter((w) => w.length >= 3 && !STOPWORDS.has(w)));
|
|
41
43
|
}
|
|
42
|
-
function overlap(a, b) {
|
|
44
|
+
export function overlap(a, b) {
|
|
43
45
|
const hits = [];
|
|
44
46
|
for (const t of a)
|
|
45
47
|
if (b.has(t))
|
|
@@ -58,6 +60,7 @@ export async function checkAction(input) {
|
|
|
58
60
|
matching_corrections: [],
|
|
59
61
|
matching_insights: [],
|
|
60
62
|
warning: null,
|
|
63
|
+
verdict: "advisory",
|
|
61
64
|
};
|
|
62
65
|
}
|
|
63
66
|
// Default min_overlap=2 — with a populated awareness store, 1-token matches
|
|
@@ -78,6 +81,9 @@ export async function checkAction(input) {
|
|
|
78
81
|
}
|
|
79
82
|
// 2. Corrections — match on rule + context
|
|
80
83
|
const correctionMatches = [];
|
|
84
|
+
// Wave 5: keep the full matched records (authoritative + precision/retrieved)
|
|
85
|
+
// so the override gate can decide `blocked` vs `advisory` without re-reading.
|
|
86
|
+
const matchedRecords = new Map();
|
|
81
87
|
const corrections = readActiveCorrections(slug);
|
|
82
88
|
for (const c of corrections) {
|
|
83
89
|
const cTokens = tokenize(`${c.rule} ${c.context} ${(c.tags ?? []).join(" ")}`);
|
|
@@ -90,6 +96,7 @@ export async function checkAction(input) {
|
|
|
90
96
|
date: c.date,
|
|
91
97
|
matched_tokens: matched,
|
|
92
98
|
});
|
|
99
|
+
matchedRecords.set(c.id, c);
|
|
93
100
|
}
|
|
94
101
|
}
|
|
95
102
|
// 3. Insights — match on insight.title
|
|
@@ -124,6 +131,23 @@ export async function checkAction(input) {
|
|
|
124
131
|
const topRules = ruleMatches.slice(0, 5);
|
|
125
132
|
const topCorrections = correctionMatches.slice(0, 5);
|
|
126
133
|
const topInsights = insightMatches.slice(0, 3);
|
|
134
|
+
// Wave 5: authoritative override. A matched correction `blocks` the plan ONLY
|
|
135
|
+
// when it is authoritative (authoritative!==false), P0, and NOT a noise
|
|
136
|
+
// candidate. Noise = the existing getCorrectionKPIs signal: precision<0.3 with
|
|
137
|
+
// retrieved>=3 (a low-signal P0 that keeps firing without being heeded). Gating
|
|
138
|
+
// on noise prevents stale P0s from vetoing legitimate plans (Risk #6).
|
|
139
|
+
const isNoiseCandidate = (rec) => {
|
|
140
|
+
const ret = rec.retrieved_count ?? 0;
|
|
141
|
+
const p = rec.precision;
|
|
142
|
+
return p !== undefined && p !== null && ret >= 3 && p < 0.3;
|
|
143
|
+
};
|
|
144
|
+
const authoritativeP0 = topCorrections.find((c) => {
|
|
145
|
+
const rec = matchedRecords.get(c.id);
|
|
146
|
+
if (!rec)
|
|
147
|
+
return false;
|
|
148
|
+
return rec.authoritative !== false && rec.severity === "p0" && !isNoiseCandidate(rec);
|
|
149
|
+
});
|
|
150
|
+
const verdict = authoritativeP0 ? "blocked" : "advisory";
|
|
127
151
|
// Build human-readable warning if anything matched
|
|
128
152
|
let warning = null;
|
|
129
153
|
if (topRules.length + topCorrections.length + topInsights.length > 0) {
|
|
@@ -138,6 +162,10 @@ export async function checkAction(input) {
|
|
|
138
162
|
parts.push(` 💡 [${i.confirmations}×] ${i.title}`);
|
|
139
163
|
}
|
|
140
164
|
warning = parts.join("\n");
|
|
165
|
+
// A blocked plan leads with the override banner — corrections OVERRIDE the model.
|
|
166
|
+
if (verdict === "blocked") {
|
|
167
|
+
warning = `⛔ CONFLICT: a human correction OVERRIDES this plan — reconcile before proceeding.\n${warning}`;
|
|
168
|
+
}
|
|
141
169
|
}
|
|
142
170
|
return {
|
|
143
171
|
success: true,
|
|
@@ -147,6 +175,7 @@ export async function checkAction(input) {
|
|
|
147
175
|
matching_corrections: topCorrections,
|
|
148
176
|
matching_insights: topInsights,
|
|
149
177
|
warning,
|
|
178
|
+
verdict,
|
|
150
179
|
};
|
|
151
180
|
}
|
|
152
181
|
//# sourceMappingURL=check-action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-action.js","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAyB,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAqB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-action.js","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Replaces: alignment_check (enhanced with past-delta analysis)
|
|
5
5
|
* Phase 5: auto-promotes strong correction patterns (3+) to awareness.
|
|
6
6
|
*/
|
|
7
|
+
import { type PredictCorrectionResult } from "./predict-correction.js";
|
|
7
8
|
export interface EvidenceFactor {
|
|
8
9
|
factor: string;
|
|
9
10
|
direction: "supports" | "weakens";
|
|
@@ -47,6 +48,12 @@ export interface CheckResult {
|
|
|
47
48
|
* caller should rephrase as an actionable rule and retry.
|
|
48
49
|
*/
|
|
49
50
|
correction_gate_rejected?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Wave 5 — forward anticipation: does this goal resemble a tendency the user
|
|
53
|
+
* has been corrected on? Pushed as an early prior, not a fact pulled late.
|
|
54
|
+
* Absent when prediction could not run or no blind-spots profile exists.
|
|
55
|
+
*/
|
|
56
|
+
prediction?: PredictCorrectionResult;
|
|
50
57
|
}
|
|
51
58
|
export declare function check(input: CheckInput): Promise<CheckResult>;
|
|
52
59
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/tools-logic/check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/tools-logic/check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,mBAAmB,EAAE,SAAS,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC;AAgBD,wBAAsB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAmPnE"}
|
|
@@ -11,12 +11,13 @@ import { getRoot } from "../types.js";
|
|
|
11
11
|
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
12
12
|
import { extractKeywords, generateSlug } from "../helpers/auto-name.js";
|
|
13
13
|
import { generateTags } from "../helpers/tag-generator.js";
|
|
14
|
-
import { writeCorrection } from "../storage/corrections.js";
|
|
14
|
+
import { writeCorrection, splitSentences } from "../storage/corrections.js";
|
|
15
15
|
import { readAlignmentLog as readLog, extractWatchPatterns, } from "../helpers/alignment-patterns.js";
|
|
16
16
|
import { awarenessUpdate } from "./awareness-update.js";
|
|
17
17
|
import { palaceDir } from "../storage/paths.js";
|
|
18
18
|
import { listRooms } from "../palace/rooms.js";
|
|
19
19
|
import { palaceWrite } from "./palace-write.js";
|
|
20
|
+
import { predictCorrection } from "./predict-correction.js";
|
|
20
21
|
function alignmentLogPath(project) {
|
|
21
22
|
const safe = project.replace(/[^a-zA-Z0-9_\-]/g, "-");
|
|
22
23
|
const root = getRoot();
|
|
@@ -54,7 +55,11 @@ export async function check(input) {
|
|
|
54
55
|
const corrText = input.human_correction;
|
|
55
56
|
const corrTags = generateTags(corrText);
|
|
56
57
|
const corrDate = todayISO();
|
|
57
|
-
|
|
58
|
+
// v3 (Loop 8): derive the rule TITLE with the decimal-safe splitter so a
|
|
59
|
+
// version/model token ("Opus 4.7", "v3.4.32") is not chopped mid-token.
|
|
60
|
+
// This is only the human-readable title; the capture GATE in
|
|
61
|
+
// writeCorrection now scores the full `context`, not this slice.
|
|
62
|
+
const corrRule = (splitSentences(corrText)[0] ?? corrText).slice(0, 100);
|
|
58
63
|
// Auto-detect severity based on correction language.
|
|
59
64
|
// "no" alone is NOT a P0 trigger — it's too broad ("no, use the blue button" ≠ rule).
|
|
60
65
|
// P0 requires explicit prohibition/mandate language.
|
|
@@ -223,6 +228,22 @@ export async function check(input) {
|
|
|
223
228
|
// Best effort — never block the check flow
|
|
224
229
|
}
|
|
225
230
|
}
|
|
231
|
+
// 6. Wave 5: forward anticipation — predict whether this goal is likely to be
|
|
232
|
+
// corrected, based on the corrections-derived Blind-Spots profile. Pushed as
|
|
233
|
+
// an early prior. Best-effort: prediction must never break the check flow.
|
|
234
|
+
let prediction;
|
|
235
|
+
try {
|
|
236
|
+
prediction = await predictCorrection({ plan: input.goal, project: slug });
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
prediction = undefined;
|
|
240
|
+
}
|
|
241
|
+
// Over-confidence guard: a high-likelihood prediction against a high-confidence
|
|
242
|
+
// self-assessment is exactly the mismatch worth flagging before acting.
|
|
243
|
+
if (prediction && prediction.likelihood === "high" && input.confidence === "high") {
|
|
244
|
+
const guardLine = "OVER-CONFIDENCE GUARD: a prior correction predicts this plan is likely to be corrected — reconcile first.";
|
|
245
|
+
calibrationNote = calibrationNote ? `${calibrationNote} ${guardLine}` : guardLine;
|
|
246
|
+
}
|
|
226
247
|
return {
|
|
227
248
|
recorded: true,
|
|
228
249
|
project: slug,
|
|
@@ -233,6 +254,7 @@ export async function check(input) {
|
|
|
233
254
|
decision_trail_saved: decisionTrailSaved || undefined,
|
|
234
255
|
calibration_note: calibrationNote,
|
|
235
256
|
correction_gate_rejected: gateRejection,
|
|
257
|
+
...(prediction ? { prediction } : {}),
|
|
236
258
|
};
|
|
237
259
|
}
|
|
238
260
|
//# sourceMappingURL=check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/tools-logic/check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/tools-logic/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
export type ConfidenceLabel = "high" | "medium" | "low" | "weak";
|
|
22
|
+
/**
|
|
23
|
+
* The native score scale a call site feeds in:
|
|
24
|
+
* - "cosine" — already 0..1 (semantic similarity, internalScore, 1/(idx+1))
|
|
25
|
+
* - "rrf-local" — local RRF score, theoretical max ≈ 3/(60+1) ≈ 0.049 per list,
|
|
26
|
+
* summed across 3 lists ≈ 0.12 best case
|
|
27
|
+
* - "rrf-supabase" — supabase RRF score, single-list top ≈ 1/61 ≈ 0.016,
|
|
28
|
+
* 3-list best ≈ 0.049
|
|
29
|
+
*/
|
|
30
|
+
export type ConfidenceScale = "cosine" | "rrf-local" | "rrf-supabase";
|
|
31
|
+
/**
|
|
32
|
+
* Calibrated floors on the shared 0..1 axis. ONE source of truth.
|
|
33
|
+
* Monotonic: high > medium > low > 0.
|
|
34
|
+
*/
|
|
35
|
+
export declare const CONFIDENCE_FLOOR: {
|
|
36
|
+
readonly high: 0.66;
|
|
37
|
+
readonly medium: 0.4;
|
|
38
|
+
readonly low: 0.2;
|
|
39
|
+
};
|
|
40
|
+
export interface CalibratedConfidence {
|
|
41
|
+
label: ConfidenceLabel;
|
|
42
|
+
/** Normalized score on the shared 0..1 axis. */
|
|
43
|
+
calibrated: number;
|
|
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 declare function calibratedConfidence(score: number, scale: ConfidenceScale): CalibratedConfidence;
|
|
50
|
+
//# sourceMappingURL=confidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.d.ts","sourceRoot":"","sources":["../../src/tools-logic/confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAgBX,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,oBAAoB,CAmBhG"}
|
|
@@ -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"}
|