@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.
Files changed (74) hide show
  1. package/dist/src/cli/commands/onboard.d.ts +38 -0
  2. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  3. package/dist/src/cli/commands/onboard.js +176 -101
  4. package/dist/src/cli/commands/onboard.js.map +1 -1
  5. package/dist/src/cli/commands/reconcile.d.ts.map +1 -1
  6. package/dist/src/cli/commands/reconcile.js +12 -0
  7. package/dist/src/cli/commands/reconcile.js.map +1 -1
  8. package/dist/src/cli/status/friend-header.d.ts +8 -1
  9. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  10. package/dist/src/cli/status/friend-header.js +93 -12
  11. package/dist/src/cli/status/friend-header.js.map +1 -1
  12. package/dist/src/cli/ui.d.ts +47 -0
  13. package/dist/src/cli/ui.d.ts.map +1 -0
  14. package/dist/src/cli/ui.js +166 -0
  15. package/dist/src/cli/ui.js.map +1 -0
  16. package/dist/src/jobs/handlers/compact.js +1 -0
  17. package/dist/src/jobs/handlers/compact.js.map +1 -1
  18. package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
  19. package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
  20. package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
  21. package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
  22. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  23. package/dist/src/jobs/handlers/ingest.js +44 -18
  24. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  25. package/dist/src/jobs/handlers/reconcile.d.ts +11 -0
  26. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  27. package/dist/src/jobs/handlers/reconcile.js +25 -0
  28. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  29. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  30. package/dist/src/jobs/handlers/save.js +6 -1
  31. package/dist/src/jobs/handlers/save.js.map +1 -1
  32. package/dist/src/mcp/server.d.ts.map +1 -1
  33. package/dist/src/mcp/server.js +43 -3
  34. package/dist/src/mcp/server.js.map +1 -1
  35. package/dist/src/mcp/tools/context-pack.js +163 -25
  36. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  37. package/dist/src/observability/onboarding-metric.d.ts +115 -0
  38. package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
  39. package/dist/src/observability/onboarding-metric.js +344 -0
  40. package/dist/src/observability/onboarding-metric.js.map +1 -0
  41. package/dist/src/observability/tool-usage-stats.d.ts +8 -0
  42. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  43. package/dist/src/observability/tool-usage-stats.js +11 -1
  44. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  45. package/dist/src/retrieval/context-pack.d.ts +100 -0
  46. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  47. package/dist/src/retrieval/context-pack.js +274 -6
  48. package/dist/src/retrieval/context-pack.js.map +1 -1
  49. package/dist/src/retrieval/current-truth.d.ts +326 -0
  50. package/dist/src/retrieval/current-truth.d.ts.map +1 -0
  51. package/dist/src/retrieval/current-truth.js +747 -0
  52. package/dist/src/retrieval/current-truth.js.map +1 -0
  53. package/dist/src/retrieval/git-state.d.ts +53 -0
  54. package/dist/src/retrieval/git-state.d.ts.map +1 -0
  55. package/dist/src/retrieval/git-state.js +174 -0
  56. package/dist/src/retrieval/git-state.js.map +1 -0
  57. package/dist/src/server/routes/friend-status.d.ts +63 -0
  58. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  59. package/dist/src/server/routes/friend-status.js +97 -0
  60. package/dist/src/server/routes/friend-status.js.map +1 -1
  61. package/dist/src/server/routes/mcp-usage.d.ts +4 -3
  62. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
  63. package/dist/src/server/routes/mcp-usage.js.map +1 -1
  64. package/dist/src/server/routes/reconcile.d.ts.map +1 -1
  65. package/dist/src/server/routes/reconcile.js +16 -0
  66. package/dist/src/server/routes/reconcile.js.map +1 -1
  67. package/dist/src/storage/rebuild.d.ts.map +1 -1
  68. package/dist/src/storage/rebuild.js +24 -2
  69. package/dist/src/storage/rebuild.js.map +1 -1
  70. package/dist/src/storage/tables.d.ts +9 -0
  71. package/dist/src/storage/tables.d.ts.map +1 -1
  72. package/dist/src/storage/tables.js +22 -1
  73. package/dist/src/storage/tables.js.map +1 -1
  74. 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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"}