@getrift/rift 0.1.0-beta.12 → 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 (45) 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/status/friend-header.d.ts +8 -1
  6. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  7. package/dist/src/cli/status/friend-header.js +93 -12
  8. package/dist/src/cli/status/friend-header.js.map +1 -1
  9. package/dist/src/cli/ui.d.ts +47 -0
  10. package/dist/src/cli/ui.d.ts.map +1 -0
  11. package/dist/src/cli/ui.js +166 -0
  12. package/dist/src/cli/ui.js.map +1 -0
  13. package/dist/src/jobs/handlers/dedupe-conversations.d.ts +25 -2
  14. package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -1
  15. package/dist/src/jobs/handlers/dedupe-conversations.js +48 -9
  16. package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -1
  17. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  18. package/dist/src/jobs/handlers/ingest.js +8 -2
  19. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  20. package/dist/src/mcp/server.d.ts.map +1 -1
  21. package/dist/src/mcp/server.js +43 -3
  22. package/dist/src/mcp/server.js.map +1 -1
  23. package/dist/src/mcp/tools/context-pack.js +163 -25
  24. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  25. package/dist/src/observability/onboarding-metric.d.ts +115 -0
  26. package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
  27. package/dist/src/observability/onboarding-metric.js +344 -0
  28. package/dist/src/observability/onboarding-metric.js.map +1 -0
  29. package/dist/src/retrieval/context-pack.d.ts +37 -0
  30. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  31. package/dist/src/retrieval/context-pack.js +165 -1
  32. package/dist/src/retrieval/context-pack.js.map +1 -1
  33. package/dist/src/retrieval/current-truth.d.ts +326 -0
  34. package/dist/src/retrieval/current-truth.d.ts.map +1 -0
  35. package/dist/src/retrieval/current-truth.js +747 -0
  36. package/dist/src/retrieval/current-truth.js.map +1 -0
  37. package/dist/src/retrieval/git-state.d.ts +53 -0
  38. package/dist/src/retrieval/git-state.d.ts.map +1 -0
  39. package/dist/src/retrieval/git-state.js +174 -0
  40. package/dist/src/retrieval/git-state.js.map +1 -0
  41. package/dist/src/server/routes/friend-status.d.ts +63 -0
  42. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  43. package/dist/src/server/routes/friend-status.js +97 -0
  44. package/dist/src/server/routes/friend-status.js.map +1 -1
  45. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"context-pack.js","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-pack.js","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /** MCP retrieval tools that can satisfy the end-event condition. */
2
+ export declare const RETRIEVAL_TOOLS: Set<string>;
3
+ export type RetrievalTool = "rift_search" | "rift_conversations_search" | "rift_context_pack";
4
+ export interface OnboardingMetric {
5
+ install_id: string;
6
+ useful_state_reached_at: string | null;
7
+ first_useful_recall_at: string | null;
8
+ first_useful_recall_tool: RetrievalTool | null;
9
+ }
10
+ export type OnboardingState = {
11
+ state: "hidden";
12
+ } | {
13
+ state: "pending";
14
+ useful_state_reached_at: string;
15
+ } | {
16
+ state: "completed";
17
+ useful_state_reached_at: string;
18
+ first_useful_recall_at: string;
19
+ first_useful_recall_tool: RetrievalTool;
20
+ duration_seconds: number;
21
+ };
22
+ export declare function onboardingMetricPath(dataDir: string): string;
23
+ /**
24
+ * Read-or-bootstrap. A missing/corrupt file is replaced with a fresh
25
+ * record whose `install_id` is a new UUID. Unknown fields in an existing
26
+ * file are dropped on the next write (sanitizer drops everything outside
27
+ * the fixed key set).
28
+ */
29
+ export declare function readOnboardingMetric(dataDir: string): OnboardingMetric;
30
+ export interface ReadinessSignals {
31
+ daemonHealthy: boolean;
32
+ voyageKeyValid: boolean;
33
+ indexedCount: number;
34
+ }
35
+ export declare function isUsefulStateReached(signals: ReadinessSignals): boolean;
36
+ /**
37
+ * Stamp `useful_state_reached_at` if (a) readiness is observed and
38
+ * (b) the field is still null. No-op otherwise. Returns the (possibly
39
+ * updated) record.
40
+ */
41
+ export declare function stampUsefulStateIfReady(dataDir: string, opts: {
42
+ ready: boolean;
43
+ now: string;
44
+ }): OnboardingMetric;
45
+ /**
46
+ * Stamp `first_useful_recall_*` if eligible. Eligibility:
47
+ * 1. tool is one of `RETRIEVAL_TOOLS`
48
+ * 2. response was not degraded
49
+ * 3. response had at least one hit
50
+ * 4. `first_useful_recall_at` is still null (write-once)
51
+ * 5. `useful_state_reached_at` was already observed (non-null)
52
+ *
53
+ * The metric measures "first MCP retrieval *after* start." If start
54
+ * has not been observed yet, end stamping is skipped — recording an
55
+ * end alongside a synthesised start would report a near-zero duration
56
+ * that doesn't reflect a real "from readiness to first useful recall"
57
+ * measurement. Callers that want to avoid dropping the first real
58
+ * recall should evaluate readiness via the shared helper
59
+ * (`stampOnboardingStartIfReady` on the daemon, exposed through
60
+ * `/status/friend`) before invoking this function.
61
+ */
62
+ export declare function stampFirstUsefulRecallIfEligible(dataDir: string, opts: {
63
+ tool: string;
64
+ isDegraded: boolean;
65
+ hitCount: number;
66
+ now: string;
67
+ }): OnboardingMetric;
68
+ /**
69
+ * Project the persisted metric to the three rendering states the
70
+ * status surface needs. Hidden = no start yet (don't show the line at
71
+ * all). Pending = start, no end. Completed = both, with a derived
72
+ * `duration_seconds`.
73
+ */
74
+ export declare function computeOnboardingState(metric: OnboardingMetric): OnboardingState;
75
+ /**
76
+ * MCP-side bridge between a finished retrieval-tool call and the
77
+ * end-event stamper. Mirrors the extractor logic in
78
+ * `observability/tool-usage.ts` for `result_count` and `degraded`, but
79
+ * stays self-contained so this module has no dependency on the logger.
80
+ *
81
+ * Readiness handshake: end stamping requires `useful_state_reached_at`
82
+ * to already be set (the metric is "first MCP retrieval *after*
83
+ * start", per the v1 spec). When the recorder finds start still null
84
+ * but the response is otherwise eligible, it invokes the optional
85
+ * `pingReadiness` callback (the MCP wrapper passes one that GETs
86
+ * `/status/friend` on the daemon, which evaluates readiness signals
87
+ * and stamps start lazily). After the ping returns, the metric is
88
+ * re-read and end is stamped only if start has now landed. When no
89
+ * callback is provided, or readiness still cannot be observed, the
90
+ * end event is silently dropped — that matches the contract that
91
+ * end-without-start would otherwise misreport as a near-zero duration.
92
+ *
93
+ * Never throws: persistence errors and ping errors are swallowed so
94
+ * onboarding telemetry can never break a tool call. CLI callers do not
95
+ * invoke this helper (it lives behind the MCP server's tool
96
+ * registration), so the "MCP-only end" constraint is enforced by
97
+ * construction.
98
+ */
99
+ export declare function recordMcpRetrievalForOnboarding(dataDir: string, tool: string, mcpResult: {
100
+ content?: Array<{
101
+ type: string;
102
+ text: string;
103
+ }>;
104
+ isError?: boolean;
105
+ structuredContent?: Record<string, unknown>;
106
+ }, opts?: {
107
+ now?: string;
108
+ pingReadiness?: () => Promise<void>;
109
+ }): Promise<void>;
110
+ /**
111
+ * Render a duration like `7m 42s` / `1h 03m 17s` / `12s`. Used by the
112
+ * friend-status header so the value reads in human time, not seconds.
113
+ */
114
+ export declare function formatOnboardingDuration(totalSeconds: number): string;
115
+ //# sourceMappingURL=onboarding-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-metric.d.ts","sourceRoot":"","sources":["../../../src/observability/onboarding-metric.ts"],"names":[],"mappings":"AA4BA,oEAAoE;AACpE,eAAO,MAAM,eAAe,aAI1B,CAAC;AAEH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,2BAA2B,GAC3B,mBAAmB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,wBAAwB,EAAE,aAAa,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,GACnB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,uBAAuB,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,KAAK,EAAE,WAAW,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,aAAa,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAwCtE;AAuBD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAMvE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpC,gBAAgB,CAUlB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,GACA,gBAAgB,CAclB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,GACvB,eAAe,CAwBjB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE;IACT,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C,EACD,IAAI,GAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC,GACL,OAAO,CAAC,IAAI,CAAC,CA+Df;AAuDD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAYrE"}
@@ -0,0 +1,344 @@
1
+ /**
2
+ * `time_to_first_useful_recall` v1 instrumentation.
3
+ *
4
+ * Persists exactly four fields under `<data_dir>/metrics/onboarding.json`:
5
+ * - install_id (random UUID, minted on first read)
6
+ * - useful_state_reached_at (ISO timestamp or null)
7
+ * - first_useful_recall_at (ISO timestamp or null)
8
+ * - first_useful_recall_tool (one of the three retrieval tools)
9
+ *
10
+ * Privacy contract: query text, response text, hit IDs, source paths and
11
+ * client identifiers MUST NEVER land in this file. Writes go through a
12
+ * fixed-key sanitizer so an upstream caller that hands in extra fields
13
+ * cannot leak them by accident. Tests assert the persisted shape.
14
+ *
15
+ * Write-once: once a field is set, it is never overwritten. End
16
+ * stamping (`first_useful_recall_*`) requires `useful_state_reached_at`
17
+ * to have already been observed by a real readiness check — the metric's
18
+ * definition is "first MCP retrieval *after start*", so a recorded end
19
+ * without a prior recorded start would lie about the latency. If start
20
+ * is null when end fires, the end is dropped. To avoid losing the first
21
+ * real recall, callers should evaluate readiness via
22
+ * `stampOnboardingStartIfReady` (the shared helper used by
23
+ * `/status/friend`) before invoking the end-event recorder.
24
+ */
25
+ import fs from "node:fs";
26
+ import path from "node:path";
27
+ import { randomUUID } from "node:crypto";
28
+ /** MCP retrieval tools that can satisfy the end-event condition. */
29
+ export const RETRIEVAL_TOOLS = new Set([
30
+ "rift_search",
31
+ "rift_conversations_search",
32
+ "rift_context_pack",
33
+ ]);
34
+ export function onboardingMetricPath(dataDir) {
35
+ return path.join(dataDir, "metrics", "onboarding.json");
36
+ }
37
+ function isRetrievalTool(v) {
38
+ return typeof v === "string" && RETRIEVAL_TOOLS.has(v);
39
+ }
40
+ /**
41
+ * Read-or-bootstrap. A missing/corrupt file is replaced with a fresh
42
+ * record whose `install_id` is a new UUID. Unknown fields in an existing
43
+ * file are dropped on the next write (sanitizer drops everything outside
44
+ * the fixed key set).
45
+ */
46
+ export function readOnboardingMetric(dataDir) {
47
+ const file = onboardingMetricPath(dataDir);
48
+ let parsed;
49
+ try {
50
+ const raw = fs.readFileSync(file, "utf8");
51
+ const obj = JSON.parse(raw);
52
+ if (obj && typeof obj === "object") {
53
+ parsed = obj;
54
+ }
55
+ }
56
+ catch {
57
+ // missing or unreadable — fall through to bootstrap
58
+ }
59
+ if (!parsed ||
60
+ typeof parsed["install_id"] !== "string" ||
61
+ parsed["install_id"].length === 0) {
62
+ const fresh = {
63
+ install_id: randomUUID(),
64
+ useful_state_reached_at: null,
65
+ first_useful_recall_at: null,
66
+ first_useful_recall_tool: null,
67
+ };
68
+ writeOnboardingMetric(dataDir, fresh);
69
+ return fresh;
70
+ }
71
+ return {
72
+ install_id: parsed["install_id"],
73
+ useful_state_reached_at: typeof parsed["useful_state_reached_at"] === "string"
74
+ ? parsed["useful_state_reached_at"]
75
+ : null,
76
+ first_useful_recall_at: typeof parsed["first_useful_recall_at"] === "string"
77
+ ? parsed["first_useful_recall_at"]
78
+ : null,
79
+ first_useful_recall_tool: isRetrievalTool(parsed["first_useful_recall_tool"])
80
+ ? parsed["first_useful_recall_tool"]
81
+ : null,
82
+ };
83
+ }
84
+ /**
85
+ * Persist the metric. The sanitizer copies exactly four named fields —
86
+ * anything else a caller might have spliced onto the object is discarded
87
+ * before it touches disk. This is the privacy guard that the schema
88
+ * test pins.
89
+ */
90
+ function writeOnboardingMetric(dataDir, metric) {
91
+ const file = onboardingMetricPath(dataDir);
92
+ fs.mkdirSync(path.dirname(file), { recursive: true });
93
+ const sanitized = {
94
+ install_id: metric.install_id,
95
+ useful_state_reached_at: metric.useful_state_reached_at,
96
+ first_useful_recall_at: metric.first_useful_recall_at,
97
+ first_useful_recall_tool: metric.first_useful_recall_tool,
98
+ };
99
+ fs.writeFileSync(file, JSON.stringify(sanitized, null, 2));
100
+ }
101
+ export function isUsefulStateReached(signals) {
102
+ return (signals.daemonHealthy &&
103
+ signals.voyageKeyValid &&
104
+ signals.indexedCount >= 1);
105
+ }
106
+ /**
107
+ * Stamp `useful_state_reached_at` if (a) readiness is observed and
108
+ * (b) the field is still null. No-op otherwise. Returns the (possibly
109
+ * updated) record.
110
+ */
111
+ export function stampUsefulStateIfReady(dataDir, opts) {
112
+ const current = readOnboardingMetric(dataDir);
113
+ if (current.useful_state_reached_at !== null)
114
+ return current;
115
+ if (!opts.ready)
116
+ return current;
117
+ const next = {
118
+ ...current,
119
+ useful_state_reached_at: opts.now,
120
+ };
121
+ writeOnboardingMetric(dataDir, next);
122
+ return next;
123
+ }
124
+ /**
125
+ * Stamp `first_useful_recall_*` if eligible. Eligibility:
126
+ * 1. tool is one of `RETRIEVAL_TOOLS`
127
+ * 2. response was not degraded
128
+ * 3. response had at least one hit
129
+ * 4. `first_useful_recall_at` is still null (write-once)
130
+ * 5. `useful_state_reached_at` was already observed (non-null)
131
+ *
132
+ * The metric measures "first MCP retrieval *after* start." If start
133
+ * has not been observed yet, end stamping is skipped — recording an
134
+ * end alongside a synthesised start would report a near-zero duration
135
+ * that doesn't reflect a real "from readiness to first useful recall"
136
+ * measurement. Callers that want to avoid dropping the first real
137
+ * recall should evaluate readiness via the shared helper
138
+ * (`stampOnboardingStartIfReady` on the daemon, exposed through
139
+ * `/status/friend`) before invoking this function.
140
+ */
141
+ export function stampFirstUsefulRecallIfEligible(dataDir, opts) {
142
+ const current = readOnboardingMetric(dataDir);
143
+ if (!RETRIEVAL_TOOLS.has(opts.tool))
144
+ return current;
145
+ if (opts.isDegraded)
146
+ return current;
147
+ if (opts.hitCount < 1)
148
+ return current;
149
+ if (current.first_useful_recall_at !== null)
150
+ return current;
151
+ if (current.useful_state_reached_at === null)
152
+ return current;
153
+ const next = {
154
+ ...current,
155
+ first_useful_recall_at: opts.now,
156
+ first_useful_recall_tool: opts.tool,
157
+ };
158
+ writeOnboardingMetric(dataDir, next);
159
+ return next;
160
+ }
161
+ /**
162
+ * Project the persisted metric to the three rendering states the
163
+ * status surface needs. Hidden = no start yet (don't show the line at
164
+ * all). Pending = start, no end. Completed = both, with a derived
165
+ * `duration_seconds`.
166
+ */
167
+ export function computeOnboardingState(metric) {
168
+ if (!metric.useful_state_reached_at)
169
+ return { state: "hidden" };
170
+ if (!metric.first_useful_recall_at ||
171
+ !metric.first_useful_recall_tool) {
172
+ return {
173
+ state: "pending",
174
+ useful_state_reached_at: metric.useful_state_reached_at,
175
+ };
176
+ }
177
+ const startMs = Date.parse(metric.useful_state_reached_at);
178
+ const endMs = Date.parse(metric.first_useful_recall_at);
179
+ const duration_seconds = Number.isNaN(startMs) || Number.isNaN(endMs)
180
+ ? 0
181
+ : Math.max(0, Math.round((endMs - startMs) / 1000));
182
+ return {
183
+ state: "completed",
184
+ useful_state_reached_at: metric.useful_state_reached_at,
185
+ first_useful_recall_at: metric.first_useful_recall_at,
186
+ first_useful_recall_tool: metric.first_useful_recall_tool,
187
+ duration_seconds,
188
+ };
189
+ }
190
+ /**
191
+ * MCP-side bridge between a finished retrieval-tool call and the
192
+ * end-event stamper. Mirrors the extractor logic in
193
+ * `observability/tool-usage.ts` for `result_count` and `degraded`, but
194
+ * stays self-contained so this module has no dependency on the logger.
195
+ *
196
+ * Readiness handshake: end stamping requires `useful_state_reached_at`
197
+ * to already be set (the metric is "first MCP retrieval *after*
198
+ * start", per the v1 spec). When the recorder finds start still null
199
+ * but the response is otherwise eligible, it invokes the optional
200
+ * `pingReadiness` callback (the MCP wrapper passes one that GETs
201
+ * `/status/friend` on the daemon, which evaluates readiness signals
202
+ * and stamps start lazily). After the ping returns, the metric is
203
+ * re-read and end is stamped only if start has now landed. When no
204
+ * callback is provided, or readiness still cannot be observed, the
205
+ * end event is silently dropped — that matches the contract that
206
+ * end-without-start would otherwise misreport as a near-zero duration.
207
+ *
208
+ * Never throws: persistence errors and ping errors are swallowed so
209
+ * onboarding telemetry can never break a tool call. CLI callers do not
210
+ * invoke this helper (it lives behind the MCP server's tool
211
+ * registration), so the "MCP-only end" constraint is enforced by
212
+ * construction.
213
+ */
214
+ export async function recordMcpRetrievalForOnboarding(dataDir, tool, mcpResult, opts = {}) {
215
+ if (!RETRIEVAL_TOOLS.has(tool))
216
+ return;
217
+ if (mcpResult.isError)
218
+ return;
219
+ const initialNow = opts.now ?? new Date().toISOString();
220
+ try {
221
+ const signal = extractRetrievalSignal(tool, mcpResult);
222
+ if (signal.count === undefined)
223
+ return;
224
+ if (signal.degraded === true)
225
+ return;
226
+ if (signal.count < 1)
227
+ return;
228
+ // Cheap pre-check: if end is already stamped, skip everything
229
+ // (write-once means stampFirstUsefulRecallIfEligible would no-op
230
+ // anyway, but bailing here avoids a needless readiness ping).
231
+ let current = readOnboardingMetric(dataDir);
232
+ if (current.first_useful_recall_at !== null)
233
+ return;
234
+ // Readiness handshake: only when start is missing AND a ping is
235
+ // available. The end-condition (non-degraded, ≥ 1 hit) strictly
236
+ // implies the start-conditions hold in the wider system, but we
237
+ // still want the daemon to do the formal readiness observation
238
+ // (env present + last_embed_at + capability counts) before
239
+ // recording an end timestamp — otherwise the metric would lie
240
+ // about its own definition.
241
+ if (current.useful_state_reached_at === null && opts.pingReadiness) {
242
+ try {
243
+ await opts.pingReadiness();
244
+ }
245
+ catch {
246
+ // Ping failures degrade to "skip end this time" rather than
247
+ // breaking the tool call. The next eligible retrieval will
248
+ // re-attempt the ping.
249
+ }
250
+ // Re-read so the ordering clamp below sees the freshly stamped
251
+ // start (if any) before we record end.
252
+ current = readOnboardingMetric(dataDir);
253
+ }
254
+ // Ordering clamp: the metric measures "first MCP retrieval *after*
255
+ // start", so `first_useful_recall_at` must never be earlier than
256
+ // `useful_state_reached_at`. When the readiness ping above lazily
257
+ // stamps start during this same call, the retrieval `now` captured
258
+ // before the ping can be older than the freshly written start —
259
+ // recording the older `now` as end would produce an inverted pair
260
+ // that the duration projection then silently clamps to 0s, hiding
261
+ // the bug. Take the max so the persisted end is always >= start.
262
+ let now = initialNow;
263
+ if (current.useful_state_reached_at !== null &&
264
+ now < current.useful_state_reached_at) {
265
+ now = current.useful_state_reached_at;
266
+ }
267
+ stampFirstUsefulRecallIfEligible(dataDir, {
268
+ tool,
269
+ isDegraded: false,
270
+ hitCount: signal.count,
271
+ now,
272
+ });
273
+ }
274
+ catch {
275
+ // Telemetry must never break tool execution.
276
+ }
277
+ }
278
+ /**
279
+ * Per-tool `(count, degraded)` extraction. Duplicated from
280
+ * `tool-usage.ts` rather than imported to avoid circular dependency
281
+ * risk and to keep this module's contract narrow.
282
+ */
283
+ function extractRetrievalSignal(tool, mcpResult) {
284
+ const sc = mcpResult.structuredContent;
285
+ if (tool === "rift_context_pack") {
286
+ if (!sc)
287
+ return {};
288
+ const sum = (key) => {
289
+ const v = sc[key];
290
+ return Array.isArray(v) ? v.length : 0;
291
+ };
292
+ const count = sum("decisions") + sum("constraints") + sum("examples") + sum("rules");
293
+ const out = { count };
294
+ if (typeof sc["degraded"] === "boolean")
295
+ out.degraded = sc["degraded"];
296
+ return out;
297
+ }
298
+ // search-style tools: prefer structuredContent.results, fall back to JSON-in-text.
299
+ const fromStructured = sc?.["results"];
300
+ if (Array.isArray(fromStructured)) {
301
+ const out = {
302
+ count: fromStructured.length,
303
+ };
304
+ if (typeof sc?.["degraded"] === "boolean") {
305
+ out.degraded = sc["degraded"];
306
+ }
307
+ return out;
308
+ }
309
+ try {
310
+ const text = mcpResult.content?.[0]?.text;
311
+ if (!text)
312
+ return {};
313
+ const parsed = JSON.parse(text);
314
+ const out = {};
315
+ if (Array.isArray(parsed["results"])) {
316
+ out.count = parsed["results"].length;
317
+ }
318
+ if (typeof parsed["degraded"] === "boolean") {
319
+ out.degraded = parsed["degraded"];
320
+ }
321
+ return out;
322
+ }
323
+ catch {
324
+ return {};
325
+ }
326
+ }
327
+ /**
328
+ * Render a duration like `7m 42s` / `1h 03m 17s` / `12s`. Used by the
329
+ * friend-status header so the value reads in human time, not seconds.
330
+ */
331
+ export function formatOnboardingDuration(totalSeconds) {
332
+ const s = Math.max(0, Math.floor(totalSeconds));
333
+ const hours = Math.floor(s / 3600);
334
+ const minutes = Math.floor((s % 3600) / 60);
335
+ const seconds = s % 60;
336
+ if (hours > 0) {
337
+ return `${hours}h ${String(minutes).padStart(2, "0")}m ${String(seconds).padStart(2, "0")}s`;
338
+ }
339
+ if (minutes > 0) {
340
+ return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
341
+ }
342
+ return `${seconds}s`;
343
+ }
344
+ //# sourceMappingURL=onboarding-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-metric.js","sourceRoot":"","sources":["../../../src/observability/onboarding-metric.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@
22
22
  import type { EmbeddingProvider } from "../providers/types.js";
23
23
  import type { SourceDir } from "../config/schema.js";
24
24
  import { type RankedResult } from "./reranker.js";
25
+ import { type ConflictCard, type DiscountedCard, type EvidenceCard, type EvidenceIntent, type RecommendedLiveFile } from "./current-truth.js";
25
26
  export declare const ITEM_TEXT_MAX = 200;
26
27
  export declare const SNIPPET_MAX = 200;
27
28
  export declare const DEFAULT_MAX_PER_BUCKET = 3;
@@ -99,10 +100,46 @@ export interface RuleCard {
99
100
  }
100
101
  export interface ContextPack {
101
102
  task: string;
103
+ /**
104
+ * Current Truth Mode v0 — intent the packager resolved from `task`.
105
+ * Drives which evidence sections are populated below.
106
+ */
107
+ intent: EvidenceIntent;
102
108
  decisions: DecisionCard[];
103
109
  constraints: ConstraintCard[];
104
110
  examples: ExampleCard[];
105
111
  rules: RuleCard[];
112
+ /**
113
+ * Evidence partitioned by current-truth-vs-reasoning. Sections are
114
+ * optional and only emitted when populated — the renderer must not
115
+ * print "(none)" placeholders.
116
+ *
117
+ * - `current_truth` — tracker / source / recent evidence.
118
+ * - `past_reasoning` — conversation-derived evidence (taste, rationale,
119
+ * historical framing). Not demoted in `reasoning_archive` mode.
120
+ * - `older_memory` — older / non-canonical evidence kept for reference.
121
+ * - `discounted` — evidence the packager believes is stale or
122
+ * snapshot-shaped, with a short reason.
123
+ * - `recommended_live_files` — concrete paths the asker should read
124
+ * live before trusting the answer; populated when `current_truth` is
125
+ * empty or thin and the intent is current-truth/blended.
126
+ */
127
+ current_truth?: EvidenceCard[];
128
+ past_reasoning?: EvidenceCard[];
129
+ older_memory?: EvidenceCard[];
130
+ discounted?: DiscountedCard[];
131
+ recommended_live_files?: RecommendedLiveFile[];
132
+ /**
133
+ * v2 surfaced conflicts (hard rule 4) — a discounted current-state
134
+ * source competing with higher-tier evidence. Optional; only emitted
135
+ * when populated.
136
+ */
137
+ conflicts?: ConflictCard[];
138
+ /**
139
+ * v2 caveat (hard rule 3) — "tracker-backed, not live-verified" when
140
+ * `current_truth` has no `live_state`-tier evidence. Optional.
141
+ */
142
+ current_truth_caveat?: string;
106
143
  total_bytes: number;
107
144
  truncated: boolean;
108
145
  degraded: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAO1D,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,qHAAqH;AACrH,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAQ1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAgItB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EAAE,EACtB,KAAK,EAAE,MAAM,GACZ,YAAY,EAAE,CAIhB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,GAAE,MAA8B,GACtC,YAAY,EAAE,CAWhB;AAmMD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAYhE;AA2OD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEzD;AA6CD,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAG7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEnE"}
1
+ {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"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"}