@getrift/rift 0.1.0-beta.11 → 0.1.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/commands/onboard.d.ts +38 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +176 -101
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/reconcile.d.ts.map +1 -1
- package/dist/src/cli/commands/reconcile.js +12 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -1
- package/dist/src/cli/status/friend-header.d.ts +8 -1
- package/dist/src/cli/status/friend-header.d.ts.map +1 -1
- package/dist/src/cli/status/friend-header.js +93 -12
- package/dist/src/cli/status/friend-header.js.map +1 -1
- package/dist/src/cli/ui.d.ts +47 -0
- package/dist/src/cli/ui.d.ts.map +1 -0
- package/dist/src/cli/ui.js +166 -0
- package/dist/src/cli/ui.js.map +1 -0
- package/dist/src/jobs/handlers/compact.js +1 -0
- package/dist/src/jobs/handlers/compact.js.map +1 -1
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
- package/dist/src/jobs/handlers/ingest.js +44 -18
- package/dist/src/jobs/handlers/ingest.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts +11 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +25 -0
- package/dist/src/jobs/handlers/reconcile.js.map +1 -1
- package/dist/src/jobs/handlers/save.d.ts.map +1 -1
- package/dist/src/jobs/handlers/save.js +6 -1
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +43 -3
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/context-pack.js +163 -25
- package/dist/src/mcp/tools/context-pack.js.map +1 -1
- package/dist/src/observability/onboarding-metric.d.ts +115 -0
- package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
- package/dist/src/observability/onboarding-metric.js +344 -0
- package/dist/src/observability/onboarding-metric.js.map +1 -0
- package/dist/src/observability/tool-usage-stats.d.ts +8 -0
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
- package/dist/src/observability/tool-usage-stats.js +11 -1
- package/dist/src/observability/tool-usage-stats.js.map +1 -1
- package/dist/src/retrieval/context-pack.d.ts +100 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -1
- package/dist/src/retrieval/context-pack.js +274 -6
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/retrieval/current-truth.d.ts +326 -0
- package/dist/src/retrieval/current-truth.d.ts.map +1 -0
- package/dist/src/retrieval/current-truth.js +747 -0
- package/dist/src/retrieval/current-truth.js.map +1 -0
- package/dist/src/retrieval/git-state.d.ts +53 -0
- package/dist/src/retrieval/git-state.d.ts.map +1 -0
- package/dist/src/retrieval/git-state.js +174 -0
- package/dist/src/retrieval/git-state.js.map +1 -0
- package/dist/src/server/routes/friend-status.d.ts +63 -0
- package/dist/src/server/routes/friend-status.d.ts.map +1 -1
- package/dist/src/server/routes/friend-status.js +97 -0
- package/dist/src/server/routes/friend-status.js.map +1 -1
- package/dist/src/server/routes/mcp-usage.d.ts +4 -3
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
- package/dist/src/server/routes/mcp-usage.js.map +1 -1
- package/dist/src/server/routes/reconcile.d.ts.map +1 -1
- package/dist/src/server/routes/reconcile.js +16 -0
- package/dist/src/server/routes/reconcile.js.map +1 -1
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +24 -2
- package/dist/src/storage/rebuild.js.map +1 -1
- package/dist/src/storage/tables.d.ts +9 -0
- package/dist/src/storage/tables.d.ts.map +1 -1
- package/dist/src/storage/tables.js +22 -1
- package/dist/src/storage/tables.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current Truth Mode — intent-aware, trust-tiered evidence packaging for
|
|
3
|
+
* ContextPack. Layered: v0 = intent classifier + bucket partition; v1 =
|
|
4
|
+
* git-state discounting (untracked/deleted/newer-on-disk); v2 = trust
|
|
5
|
+
* tiers, claim-type labels, surfaced conflicts, tracker-only caveat, and
|
|
6
|
+
* staleness demotion.
|
|
7
|
+
*
|
|
8
|
+
* Pure, deterministic helpers that classify a query's evidence intent and
|
|
9
|
+
* partition already-retrieved hits into "current truth" / "past reasoning"
|
|
10
|
+
* / "older memory" / "discounted" buckets, plus a "recommended live files
|
|
11
|
+
* to check" hint when the top evidence is mostly old snapshots and the
|
|
12
|
+
* intent is current-truth.
|
|
13
|
+
*
|
|
14
|
+
* v2 load-bearing rule: a conversation can never be sole authority for
|
|
15
|
+
* current truth — recent conversations route to "Recent discussion", not
|
|
16
|
+
* `current_truth` — which closes the self-corroboration loop (Rift's own
|
|
17
|
+
* captured answer can't re-promote itself as current state).
|
|
18
|
+
*
|
|
19
|
+
* This module reads metadata that's already on hits (source_path,
|
|
20
|
+
* indexed_at, source) and a tracker's self-declared `Last touched:` date —
|
|
21
|
+
* it does NOT invent confidence, run any new retrieval, or change
|
|
22
|
+
* `rift_search` ranking. It only re-shapes the answer surface of
|
|
23
|
+
* `rift_context_pack`.
|
|
24
|
+
*
|
|
25
|
+
* See docs/evals/current-truth-mode-q1-q8.md (Q1–Q9) for the frozen
|
|
26
|
+
* regression set this module is targeting.
|
|
27
|
+
*/
|
|
28
|
+
import type { RankedResult } from "./reranker.js";
|
|
29
|
+
import type { GitState } from "./git-state.js";
|
|
30
|
+
export type { GitState } from "./git-state.js";
|
|
31
|
+
export type EvidenceIntent = "current_truth" | "reasoning_archive" | "blended";
|
|
32
|
+
/**
|
|
33
|
+
* Classify a query's evidence intent. Deterministic and transparent so
|
|
34
|
+
* v0 can be debugged by eye. Algorithm:
|
|
35
|
+
*
|
|
36
|
+
* 1. Lower-case the query.
|
|
37
|
+
* 2. Check phrase triggers (multi-word) for each intent.
|
|
38
|
+
* 3. Check single-word triggers (matched as whole words via word
|
|
39
|
+
* boundaries — no partial matches like "currently" → "current").
|
|
40
|
+
* 4. If exactly one intent matches → that intent.
|
|
41
|
+
* 5. If both match → return `blended` (the asker is conflating
|
|
42
|
+
* "what's my taste on the current X").
|
|
43
|
+
* 6. If neither matches → `blended`.
|
|
44
|
+
*
|
|
45
|
+
* Note on Q7 ("difference between second brain and Rift"): only
|
|
46
|
+
* `relationship between` is in the reasoning-archive trigger list, not
|
|
47
|
+
* `difference between`. Q7 fires no trigger and falls to `blended`,
|
|
48
|
+
* which is the deliberate v0 outcome — disambiguation questions surface
|
|
49
|
+
* both the current product framing and the historical context without
|
|
50
|
+
* forcing an order.
|
|
51
|
+
*/
|
|
52
|
+
export declare function classifyEvidenceIntent(query: string): EvidenceIntent;
|
|
53
|
+
/**
|
|
54
|
+
* Coarse claim-type groups (Current Truth Mode v2). Distinct from
|
|
55
|
+
* {@link EvidenceIntent}: intent drives *section routing*, claim-type
|
|
56
|
+
* labels *what kind of assertion the asker is after* so the answer can
|
|
57
|
+
* say which facts are allowed to mean what.
|
|
58
|
+
*
|
|
59
|
+
* - `current_state` — present-tense state. launch/status/version/
|
|
60
|
+
* install/customer/current/now. Live state + trackers win; a doc's
|
|
61
|
+
* self-declared authority does not.
|
|
62
|
+
* - `framing` — how something is/was positioned. pricing/brand/
|
|
63
|
+
* framing/history/positioning/narrative. Committed docs are good
|
|
64
|
+
* here; a stale framing doc is weak-for-current-state but legitimate
|
|
65
|
+
* for "what was the framing".
|
|
66
|
+
* - `reasoning` — taste / rationale / relationships. why/decision/
|
|
67
|
+
* taste/relationship/philosophy. Conversations are primary.
|
|
68
|
+
*
|
|
69
|
+
* Deliberately coarse and keyword-driven (the v2 "implementation
|
|
70
|
+
* restraint": no semantic claim matcher yet). Used to *label* a surfaced
|
|
71
|
+
* conflict ("competes for current state"), not to re-route sections —
|
|
72
|
+
* that stays {@link classifyEvidenceIntent}'s job.
|
|
73
|
+
*/
|
|
74
|
+
export type ClaimType = "current_state" | "framing" | "reasoning";
|
|
75
|
+
/**
|
|
76
|
+
* Classify the claim-type of a query. Precedence: rationale phrases →
|
|
77
|
+
* strong reasoning words → ambiguous decision-without-current-qualifier →
|
|
78
|
+
* current_state → framing → default current_state. A "why did we decide X"
|
|
79
|
+
* question is reasoning even if it mentions a current-state noun; "latest
|
|
80
|
+
* decision about X" is a current-state question (P2 fix). An ambiguous
|
|
81
|
+
* query defaults to the strictest tier discipline (current_state) so we
|
|
82
|
+
* never under-apply the trust gating.
|
|
83
|
+
*/
|
|
84
|
+
export declare function classifyClaimType(query: string): ClaimType;
|
|
85
|
+
/**
|
|
86
|
+
* Default freshness cutoff: a hit indexed within `RECENT_WINDOW_DAYS` of
|
|
87
|
+
* "now" counts as recent. 21 days is wide enough that a paused-but-
|
|
88
|
+
* active project's tracker still reads as current, and narrow enough
|
|
89
|
+
* that an April-26 LAUNCH.md (now ~3 weeks old by 2026-05-19) starts
|
|
90
|
+
* looking stale relative to a 2026-05-19 PROJECT_STATE.md edit.
|
|
91
|
+
*/
|
|
92
|
+
export declare const RECENT_WINDOW_DAYS = 21;
|
|
93
|
+
export declare function isTrackerPath(p: unknown): boolean;
|
|
94
|
+
export declare function isSnapshotPath(p: unknown): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Trust tier of a single piece of evidence (Current Truth Mode v2).
|
|
97
|
+
* Ordered highest → lowest authority:
|
|
98
|
+
*
|
|
99
|
+
* - `live_state` — executable/observable truth: source code,
|
|
100
|
+
* install scripts, the package manifest, config.
|
|
101
|
+
* The closest retrieval analogue to `git status` /
|
|
102
|
+
* a running daemon's `/version`.
|
|
103
|
+
* - `tracker` — intentional state trackers: PROJECT_STATE.md,
|
|
104
|
+
* TODO.md, dated decision docs. Useful, not
|
|
105
|
+
* absolute — can be stale (see staleness demotion).
|
|
106
|
+
* - `committed_doc` — durable committed framing: README, PRD, CLAUDE.md,
|
|
107
|
+
* AGENTS.md. Good for framing, lower for current state.
|
|
108
|
+
* - `discussion` — conversations / agent reasoning. Useful context,
|
|
109
|
+
* never sole authority for current state (hard rule 1).
|
|
110
|
+
* - `discounted` — untracked / deleted / snapshot / generated reports.
|
|
111
|
+
* Historical or provisional unless reaffirmed.
|
|
112
|
+
*
|
|
113
|
+
* The tier is a property of the *source*, computed structurally from
|
|
114
|
+
* kind + git-state + path. Which tier *leads the answer* depends on the
|
|
115
|
+
* claim — that routing stays with {@link partitionEvidence}. So the same
|
|
116
|
+
* card can be `committed_doc` and still be superseded by a `tracker` for
|
|
117
|
+
* a current-state claim: tier labels authority, intent decides order.
|
|
118
|
+
*/
|
|
119
|
+
export type TrustTier = "live_state" | "tracker" | "committed_doc" | "discussion" | "discounted";
|
|
120
|
+
/**
|
|
121
|
+
* Assign a {@link TrustTier} to one evidence input. Pure, structural,
|
|
122
|
+
* claim-type-independent: git-state is the strongest signal (an untracked
|
|
123
|
+
* or deleted document is `discounted` no matter how it's named — the v1
|
|
124
|
+
* generalization of the LAUNCH.md hack), then snapshot paths, then the
|
|
125
|
+
* path-pattern ladder. Conversations are always `discussion`.
|
|
126
|
+
*
|
|
127
|
+
* Defaults to `committed_doc` for a tracked/unknown document that matches
|
|
128
|
+
* none of the specific ladders — it's a durable file we just can't place
|
|
129
|
+
* more precisely, which is a safer default than claiming it's live state.
|
|
130
|
+
*/
|
|
131
|
+
export declare function assignTrustTier(kind: "conversation" | "document", gitState: GitState | undefined, sourcePath: string | undefined): TrustTier;
|
|
132
|
+
/**
|
|
133
|
+
* Parse a row's `indexed_at` and return whether it falls within the
|
|
134
|
+
* recency window. Robust to missing / unparseable timestamps — we'd
|
|
135
|
+
* rather call a row "unknown-age" (treated as not-recent) than blow up
|
|
136
|
+
* the answer packaging.
|
|
137
|
+
*/
|
|
138
|
+
export declare function isRecent(indexedAt: string | undefined, now?: Date, windowDays?: number): boolean;
|
|
139
|
+
export interface EvidenceCard {
|
|
140
|
+
id: string;
|
|
141
|
+
title: string;
|
|
142
|
+
source: string;
|
|
143
|
+
snippet: string;
|
|
144
|
+
timestamp?: string;
|
|
145
|
+
source_path?: string;
|
|
146
|
+
/**
|
|
147
|
+
* v1 git-state classification of `source_path` at the time the pack
|
|
148
|
+
* was assembled. Surfaced on the card so downstream consumers can
|
|
149
|
+
* render a "(untracked)" / "(newer on disk)" hint next to the
|
|
150
|
+
* evidence without re-probing. Absent when no probe was run
|
|
151
|
+
* (conversation hit, missing source_path, no projectRoot).
|
|
152
|
+
*/
|
|
153
|
+
git_state?: GitState;
|
|
154
|
+
/**
|
|
155
|
+
* v2 trust tier — the authority level of this source (see
|
|
156
|
+
* {@link TrustTier}). Always set. Lets the answer say which facts are
|
|
157
|
+
* allowed to mean what (`live_state` outranks `tracker` outranks
|
|
158
|
+
* `committed_doc` outranks `discussion`).
|
|
159
|
+
*/
|
|
160
|
+
tier?: TrustTier;
|
|
161
|
+
/**
|
|
162
|
+
* v2 staleness anchor (P1 fix): a tracker's *self-declared* freshness,
|
|
163
|
+
* parsed from its content (`Last touched:` in PROJECT_STATE.md), as an
|
|
164
|
+
* ISO date. This is "when the tracker says it was last touched", which
|
|
165
|
+
* is the honest staleness signal — `timestamp` (indexed_at) only says
|
|
166
|
+
* "when Rift last reindexed the file", so a reindexed-but-stale tracker
|
|
167
|
+
* would otherwise look fresh and dodge {@link applyStalenessDemotion}.
|
|
168
|
+
* Absent when the content carries no parseable marker.
|
|
169
|
+
*/
|
|
170
|
+
tracker_date?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface DiscountedCard extends EvidenceCard {
|
|
173
|
+
reason: string;
|
|
174
|
+
}
|
|
175
|
+
export interface RecommendedLiveFile {
|
|
176
|
+
/** Display path — relative if we have it, absolute otherwise. */
|
|
177
|
+
path: string;
|
|
178
|
+
/** One-line "why" — e.g. "current project state". Short, no period. */
|
|
179
|
+
why: string;
|
|
180
|
+
/**
|
|
181
|
+
* v1 git-state of the recommended file, when known. Lets the asker
|
|
182
|
+
* see at a glance whether the suggested live file is itself
|
|
183
|
+
* canonical (`tracked`) or in an evolving state (`modified` /
|
|
184
|
+
* `newer_on_disk`). Untracked / deleted paths are never recommended.
|
|
185
|
+
*/
|
|
186
|
+
git_state?: GitState;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* A surfaced disagreement between sources for the same claim (hard rule
|
|
190
|
+
* 4: surface conflicts, don't pretend to resolve them). The canonical
|
|
191
|
+
* case is a high-ranking discounted document (e.g. an untracked
|
|
192
|
+
* `LAUNCH.md` that self-declares authority) competing with higher-tier
|
|
193
|
+
* tracker / live-state / live-file evidence for a current-state claim.
|
|
194
|
+
* We name the tension and attach the tiers; we do not adjudicate the
|
|
195
|
+
* underlying facts.
|
|
196
|
+
*/
|
|
197
|
+
export interface ConflictCard {
|
|
198
|
+
/** Coarse claim-type the conflict is about (e.g. `current_state`). */
|
|
199
|
+
claim: ClaimType;
|
|
200
|
+
/** The lower-trust source competing to be the answer. */
|
|
201
|
+
discounted: {
|
|
202
|
+
title: string;
|
|
203
|
+
reason: string;
|
|
204
|
+
source_path?: string;
|
|
205
|
+
};
|
|
206
|
+
/** The higher-trust evidence that supersedes it. */
|
|
207
|
+
superseded_by: {
|
|
208
|
+
title: string;
|
|
209
|
+
tier: TrustTier;
|
|
210
|
+
source_path?: string;
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
export interface EvidencePartition {
|
|
214
|
+
current_truth: EvidenceCard[];
|
|
215
|
+
past_reasoning: EvidenceCard[];
|
|
216
|
+
older_memory: EvidenceCard[];
|
|
217
|
+
discounted: DiscountedCard[];
|
|
218
|
+
recommended_live_files: RecommendedLiveFile[];
|
|
219
|
+
/**
|
|
220
|
+
* v2 conflicts (hard rule 4). Empty unless a discounted current-state
|
|
221
|
+
* source is competing with higher-tier evidence.
|
|
222
|
+
*/
|
|
223
|
+
conflicts: ConflictCard[];
|
|
224
|
+
/**
|
|
225
|
+
* v2 caveat (hard rule 3). Set to "tracker-backed, not live-verified"
|
|
226
|
+
* when `current_truth` is populated but contains no `live_state`-tier
|
|
227
|
+
* evidence — i.e. the best we have is an intentional tracker, not
|
|
228
|
+
* executable/observable state. Absent otherwise.
|
|
229
|
+
*/
|
|
230
|
+
current_truth_caveat?: string;
|
|
231
|
+
}
|
|
232
|
+
/** Hard rule 3 caveat string — single source so renderer + DTO agree. */
|
|
233
|
+
export declare const TRACKER_ONLY_CAVEAT = "tracker-backed, not live-verified";
|
|
234
|
+
/**
|
|
235
|
+
* Input to {@link partitionEvidence}. Lets the partitioner consume both
|
|
236
|
+
* conversation hits and document hits in a uniform shape without
|
|
237
|
+
* re-implementing row lookup — the caller already has rows in hand from
|
|
238
|
+
* `fetchRowsById`.
|
|
239
|
+
*/
|
|
240
|
+
export interface EvidenceInput {
|
|
241
|
+
ranked: RankedResult;
|
|
242
|
+
row: Record<string, unknown> | undefined;
|
|
243
|
+
kind: "conversation" | "document";
|
|
244
|
+
/**
|
|
245
|
+
* v1: pre-probed git state for `row.source_path`. Optional — when
|
|
246
|
+
* absent, the partitioner falls back to v0 path-pattern heuristics.
|
|
247
|
+
* Populated by the caller (typically buildContextPack) via
|
|
248
|
+
* {@link import("./git-state.js").probeGitStates}.
|
|
249
|
+
*/
|
|
250
|
+
gitState?: GitState;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Partition retrieved hits according to the resolved evidence intent.
|
|
254
|
+
*
|
|
255
|
+
* Rules (v2, transparent and deterministic):
|
|
256
|
+
*
|
|
257
|
+
* - `current_truth` mode:
|
|
258
|
+
* - Conversations → `past_reasoning` (recent) / `older_memory` (old),
|
|
259
|
+
* NEVER `current_truth` (v2 hard rule 1: no conversation is sole
|
|
260
|
+
* authority for current state; closes self-corroboration).
|
|
261
|
+
* - Documents with `gitState === "untracked"` → `discounted`
|
|
262
|
+
* ("untracked in git"). Catches files like a project-local
|
|
263
|
+
* `LAUNCH.md` that exists on disk but hasn't been committed —
|
|
264
|
+
* not canonical state.
|
|
265
|
+
* - Documents with `gitState === "deleted"` → `discounted`
|
|
266
|
+
* ("deleted from disk"). The asker can't open it to verify.
|
|
267
|
+
* - Tracker-path docs and recent (<{@link RECENT_WINDOW_DAYS}d) docs
|
|
268
|
+
* → `current_truth`.
|
|
269
|
+
* - Snapshot/report-style docs and older docs → `discounted`
|
|
270
|
+
* (with reason).
|
|
271
|
+
* - Post-passes: stale trackers (older than fresher live-state by the
|
|
272
|
+
* recency window) demoted to `older_memory`; `tracker-backed, not
|
|
273
|
+
* live-verified` caveat set when `current_truth` has no live-state
|
|
274
|
+
* card; at most one `## Conflicts` entry pairing the top discounted
|
|
275
|
+
* doc against the top higher-tier card.
|
|
276
|
+
* - If `current_truth` is empty or dominated by snapshot/older
|
|
277
|
+
* evidence → populate `recommended_live_files` with tracker paths
|
|
278
|
+
* we already saw in hits (filtered to live git states), or
|
|
279
|
+
* canonical defaults.
|
|
280
|
+
*
|
|
281
|
+
* - `reasoning_archive` mode:
|
|
282
|
+
* - Conversations (regardless of age) → `past_reasoning` (lead).
|
|
283
|
+
* - Tracker-path docs → `current_truth` (background, kept short).
|
|
284
|
+
* - Snapshot docs → `older_memory`.
|
|
285
|
+
* - No demotion-by-age for conversations. No `discounted`.
|
|
286
|
+
* - No `recommended_live_files` — the asker doesn't want trackers.
|
|
287
|
+
* - Git-state rules do NOT apply here: the asker is after framing,
|
|
288
|
+
* not canonicalness.
|
|
289
|
+
*
|
|
290
|
+
* - `blended` mode:
|
|
291
|
+
* - Same git-state discount rules as `current_truth` for documents.
|
|
292
|
+
* - Tracker-path docs and recent hits → `current_truth`.
|
|
293
|
+
* - Conversations (regardless of age) → `past_reasoning`.
|
|
294
|
+
* - Snapshot docs that are clearly stale relative to a tracker →
|
|
295
|
+
* `discounted`. Other older docs → `older_memory`.
|
|
296
|
+
* - `recommended_live_files` only if `current_truth` is empty.
|
|
297
|
+
*
|
|
298
|
+
* Caps per section are derived from {@link maxPerSection} so the caller
|
|
299
|
+
* controls the overall budget.
|
|
300
|
+
*/
|
|
301
|
+
export interface PartitionOptions {
|
|
302
|
+
intent: EvidenceIntent;
|
|
303
|
+
/** Per-section cap (parallels existing maxPerBucket). */
|
|
304
|
+
maxPerSection: number;
|
|
305
|
+
/** Injectable for tests. Defaults to `new Date()`. */
|
|
306
|
+
now?: Date;
|
|
307
|
+
/** Project-root absolute path used to display paths relatively when possible. */
|
|
308
|
+
projectRoot?: string;
|
|
309
|
+
/**
|
|
310
|
+
* v2 claim-type (see {@link classifyClaimType}). Used to label surfaced
|
|
311
|
+
* conflicts. Defaults to `current_state` when omitted — the strictest
|
|
312
|
+
* gating, so callers that forget it never under-apply trust discipline.
|
|
313
|
+
*/
|
|
314
|
+
claimType?: ClaimType;
|
|
315
|
+
}
|
|
316
|
+
export declare function partitionEvidence(inputs: readonly EvidenceInput[], opts: PartitionOptions): EvidencePartition;
|
|
317
|
+
/**
|
|
318
|
+
* Best-effort parse of a tracker's self-declared freshness from its
|
|
319
|
+
* content. Currently the `Last touched: YYYY-MM-DD` line that
|
|
320
|
+
* PROJECT_STATE.md carries near the top. Returns the matched ISO date
|
|
321
|
+
* string, or undefined when the chunk doesn't contain the marker (the
|
|
322
|
+
* caller falls back to `indexed_at`). Tolerates optional markdown
|
|
323
|
+
* bold/list decoration around the label.
|
|
324
|
+
*/
|
|
325
|
+
export declare function parseTrackerDate(content: string | undefined): string | undefined;
|
|
326
|
+
//# sourceMappingURL=current-truth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-truth.d.ts","sourceRoot":"","sources":["../../../src/retrieval/current-truth.ts"],"names":[],"mappings":"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"}
|