@getrift/rift 0.1.0-beta.20 → 0.1.0-beta.22
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 +7 -3
- package/dist/src/capture/auto-capture.d.ts +105 -4
- package/dist/src/capture/auto-capture.d.ts.map +1 -1
- package/dist/src/capture/auto-capture.js +313 -34
- package/dist/src/capture/auto-capture.js.map +1 -1
- package/dist/src/capture/claude-cli-triage-provider.d.ts +28 -0
- package/dist/src/capture/claude-cli-triage-provider.d.ts.map +1 -0
- package/dist/src/capture/claude-cli-triage-provider.js +88 -0
- package/dist/src/capture/claude-cli-triage-provider.js.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -1
- package/dist/src/capture/codex-cli-triage-provider.js +1 -33
- package/dist/src/capture/codex-cli-triage-provider.js.map +1 -1
- package/dist/src/capture/cursor-capture.d.ts +89 -0
- package/dist/src/capture/cursor-capture.d.ts.map +1 -0
- package/dist/src/capture/cursor-capture.js +121 -0
- package/dist/src/capture/cursor-capture.js.map +1 -0
- package/dist/src/capture/observability.d.ts +30 -0
- package/dist/src/capture/observability.d.ts.map +1 -1
- package/dist/src/capture/observability.js +29 -0
- package/dist/src/capture/observability.js.map +1 -1
- package/dist/src/capture/sources.d.ts +41 -3
- package/dist/src/capture/sources.d.ts.map +1 -1
- package/dist/src/capture/sources.js +43 -1
- package/dist/src/capture/sources.js.map +1 -1
- package/dist/src/capture/triage-classification.d.ts +69 -0
- package/dist/src/capture/triage-classification.d.ts.map +1 -0
- package/dist/src/capture/triage-classification.js +62 -0
- package/dist/src/capture/triage-classification.js.map +1 -0
- package/dist/src/capture/triage-provider-factory.d.ts +36 -0
- package/dist/src/capture/triage-provider-factory.d.ts.map +1 -0
- package/dist/src/capture/triage-provider-factory.js +55 -0
- package/dist/src/capture/triage-provider-factory.js.map +1 -0
- package/dist/src/capture/triage.d.ts +1 -1
- package/dist/src/capture/triage.d.ts.map +1 -1
- package/dist/src/capture/triage.js +8 -6
- package/dist/src/capture/triage.js.map +1 -1
- package/dist/src/cli/commands/capture.d.ts.map +1 -1
- package/dist/src/cli/commands/capture.js +72 -17
- package/dist/src/cli/commands/capture.js.map +1 -1
- package/dist/src/cli/commands/chunk-backfill.d.ts +13 -0
- package/dist/src/cli/commands/chunk-backfill.d.ts.map +1 -0
- package/dist/src/cli/commands/chunk-backfill.js +157 -0
- package/dist/src/cli/commands/chunk-backfill.js.map +1 -0
- package/dist/src/cli/commands/cursor-probe.d.ts +20 -0
- package/dist/src/cli/commands/cursor-probe.d.ts.map +1 -0
- package/dist/src/cli/commands/cursor-probe.js +162 -0
- package/dist/src/cli/commands/cursor-probe.js.map +1 -0
- package/dist/src/cli/commands/menubar.d.ts +50 -0
- package/dist/src/cli/commands/menubar.d.ts.map +1 -1
- package/dist/src/cli/commands/menubar.js +224 -16
- package/dist/src/cli/commands/menubar.js.map +1 -1
- package/dist/src/cli/commands/onboard.d.ts +36 -7
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +256 -53
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/status.d.ts.map +1 -1
- package/dist/src/cli/commands/status.js +16 -0
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/commands/update.d.ts +34 -1
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +179 -2
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +4 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/postinstall-menubar.d.ts.map +1 -1
- package/dist/src/cli/postinstall-menubar.js +14 -0
- package/dist/src/cli/postinstall-menubar.js.map +1 -1
- package/dist/src/cli/status/friend-header.d.ts +18 -0
- package/dist/src/cli/status/friend-header.d.ts.map +1 -1
- package/dist/src/cli/status/friend-header.js +137 -0
- package/dist/src/cli/status/friend-header.js.map +1 -1
- package/dist/src/cli/status/local-signals.d.ts +41 -0
- package/dist/src/cli/status/local-signals.d.ts.map +1 -1
- package/dist/src/cli/status/local-signals.js +48 -0
- package/dist/src/cli/status/local-signals.js.map +1 -1
- package/dist/src/config/schema.d.ts +220 -14
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +82 -7
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/diagnostics/claude-preflight.d.ts +34 -0
- package/dist/src/diagnostics/claude-preflight.d.ts.map +1 -0
- package/dist/src/diagnostics/claude-preflight.js +89 -0
- package/dist/src/diagnostics/claude-preflight.js.map +1 -0
- package/dist/src/diagnostics/codex-preflight.d.ts +1 -1
- package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -1
- package/dist/src/diagnostics/codex-preflight.js +14 -0
- package/dist/src/diagnostics/codex-preflight.js.map +1 -1
- package/dist/src/diagnostics/doctor.d.ts +9 -1
- package/dist/src/diagnostics/doctor.d.ts.map +1 -1
- package/dist/src/diagnostics/doctor.js +57 -2
- package/dist/src/diagnostics/doctor.js.map +1 -1
- package/dist/src/ingestion/chunk-meta.d.ts +85 -0
- package/dist/src/ingestion/chunk-meta.d.ts.map +1 -0
- package/dist/src/ingestion/chunk-meta.js +167 -0
- package/dist/src/ingestion/chunk-meta.js.map +1 -0
- package/dist/src/ingestion/chunk-text.d.ts +39 -0
- package/dist/src/ingestion/chunk-text.d.ts.map +1 -0
- package/dist/src/ingestion/chunk-text.js +114 -0
- package/dist/src/ingestion/chunk-text.js.map +1 -0
- package/dist/src/ingestion/cursor/cursor-store.d.ts +177 -0
- package/dist/src/ingestion/cursor/cursor-store.d.ts.map +1 -0
- package/dist/src/ingestion/cursor/cursor-store.js +243 -0
- package/dist/src/ingestion/cursor/cursor-store.js.map +1 -0
- package/dist/src/ingestion/cursor/enrich-roots.d.ts +16 -0
- package/dist/src/ingestion/cursor/enrich-roots.d.ts.map +1 -0
- package/dist/src/ingestion/cursor/enrich-roots.js +22 -0
- package/dist/src/ingestion/cursor/enrich-roots.js.map +1 -0
- package/dist/src/ingestion/cursor/vscdb-reader.d.ts +32 -0
- package/dist/src/ingestion/cursor/vscdb-reader.d.ts.map +1 -0
- package/dist/src/ingestion/cursor/vscdb-reader.js +113 -0
- package/dist/src/ingestion/cursor/vscdb-reader.js.map +1 -0
- package/dist/src/ingestion/cursor/workspace-root.d.ts +96 -0
- package/dist/src/ingestion/cursor/workspace-root.d.ts.map +1 -0
- package/dist/src/ingestion/cursor/workspace-root.js +187 -0
- package/dist/src/ingestion/cursor/workspace-root.js.map +1 -0
- package/dist/src/ingestion/indexer.d.ts.map +1 -1
- package/dist/src/ingestion/indexer.js +41 -32
- package/dist/src/ingestion/indexer.js.map +1 -1
- package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
- package/dist/src/jobs/handlers/compact.js +9 -4
- package/dist/src/jobs/handlers/compact.js.map +1 -1
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
- package/dist/src/jobs/handlers/ingest.js +60 -30
- package/dist/src/jobs/handlers/ingest.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +128 -45
- 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 +122 -72
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/jobs/types.d.ts +1 -1
- package/dist/src/main.js +26 -15
- package/dist/src/main.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +10 -3
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
- package/dist/src/mcp/tools/context-pack.js +7 -1
- package/dist/src/mcp/tools/context-pack.js.map +1 -1
- package/dist/src/mcp/tools/conversations-search.d.ts +1 -1
- package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -1
- package/dist/src/mcp/tools/conversations-search.js +7 -1
- package/dist/src/mcp/tools/conversations-search.js.map +1 -1
- package/dist/src/mcp/tools/evidence-feedback.d.ts +60 -0
- package/dist/src/mcp/tools/evidence-feedback.d.ts.map +1 -0
- package/dist/src/mcp/tools/evidence-feedback.js +62 -0
- package/dist/src/mcp/tools/evidence-feedback.js.map +1 -0
- package/dist/src/mcp/tools/log-outcome.d.ts +72 -0
- package/dist/src/mcp/tools/log-outcome.d.ts.map +1 -0
- package/dist/src/mcp/tools/log-outcome.js +59 -0
- package/dist/src/mcp/tools/log-outcome.js.map +1 -0
- package/dist/src/mcp/tools/open-evidence.d.ts +37 -0
- package/dist/src/mcp/tools/open-evidence.d.ts.map +1 -0
- package/dist/src/mcp/tools/open-evidence.js +72 -0
- package/dist/src/mcp/tools/open-evidence.js.map +1 -0
- package/dist/src/mcp/tools/save.d.ts +7 -2
- package/dist/src/mcp/tools/save.d.ts.map +1 -1
- package/dist/src/mcp/tools/save.js +7 -2
- package/dist/src/mcp/tools/save.js.map +1 -1
- package/dist/src/mcp/tools/search.d.ts.map +1 -1
- package/dist/src/mcp/tools/search.js +7 -1
- package/dist/src/mcp/tools/search.js.map +1 -1
- package/dist/src/observability/retrieval-feedback.d.ts +82 -0
- package/dist/src/observability/retrieval-feedback.d.ts.map +1 -0
- package/dist/src/observability/retrieval-feedback.js +231 -0
- package/dist/src/observability/retrieval-feedback.js.map +1 -0
- package/dist/src/observability/rift-context.d.ts.map +1 -1
- package/dist/src/observability/rift-context.js +3 -0
- package/dist/src/observability/rift-context.js.map +1 -1
- package/dist/src/observability/tool-usage-stats.d.ts +13 -0
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
- package/dist/src/observability/tool-usage-stats.js +15 -0
- package/dist/src/observability/tool-usage-stats.js.map +1 -1
- package/dist/src/observability/tool-usage.d.ts +56 -0
- package/dist/src/observability/tool-usage.d.ts.map +1 -1
- package/dist/src/observability/tool-usage.js +86 -0
- package/dist/src/observability/tool-usage.js.map +1 -1
- package/dist/src/providers/claude-cli-metadata-extraction.d.ts +47 -0
- package/dist/src/providers/claude-cli-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/claude-cli-metadata-extraction.js +120 -0
- package/dist/src/providers/claude-cli-metadata-extraction.js.map +1 -0
- package/dist/src/providers/claude-cli-runner.d.ts +92 -0
- package/dist/src/providers/claude-cli-runner.d.ts.map +1 -0
- package/dist/src/providers/claude-cli-runner.js +598 -0
- package/dist/src/providers/claude-cli-runner.js.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
- package/dist/src/providers/codex-cli-metadata-extraction.js +1 -40
- package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
- package/dist/src/providers/codex-cli-runner.d.ts +7 -0
- package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
- package/dist/src/providers/codex-cli-runner.js +131 -5
- package/dist/src/providers/codex-cli-runner.js.map +1 -1
- package/dist/src/providers/conversation-generation.d.ts +10 -0
- package/dist/src/providers/conversation-generation.d.ts.map +1 -1
- package/dist/src/providers/conversation-generation.js +54 -13
- package/dist/src/providers/conversation-generation.js.map +1 -1
- package/dist/src/providers/openai-metadata-extraction.d.ts +48 -1
- package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
- package/dist/src/providers/openai-metadata-extraction.js +51 -2
- package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
- package/dist/src/providers/types.d.ts +1 -1
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/providers/types.js +4 -0
- package/dist/src/providers/types.js.map +1 -1
- package/dist/src/retrieval/compact.d.ts +81 -0
- package/dist/src/retrieval/compact.d.ts.map +1 -1
- package/dist/src/retrieval/compact.js +248 -8
- package/dist/src/retrieval/compact.js.map +1 -1
- package/dist/src/retrieval/context-pack.d.ts.map +1 -1
- package/dist/src/retrieval/context-pack.js +28 -14
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/retrieval/evidence-key.d.ts +48 -0
- package/dist/src/retrieval/evidence-key.d.ts.map +1 -0
- package/dist/src/retrieval/evidence-key.js +131 -0
- package/dist/src/retrieval/evidence-key.js.map +1 -0
- package/dist/src/retrieval/group-by-parent.d.ts +38 -0
- package/dist/src/retrieval/group-by-parent.d.ts.map +1 -0
- package/dist/src/retrieval/group-by-parent.js +40 -0
- package/dist/src/retrieval/group-by-parent.js.map +1 -0
- package/dist/src/retrieval/lexical.d.ts.map +1 -1
- package/dist/src/retrieval/lexical.js +1 -3
- package/dist/src/retrieval/lexical.js.map +1 -1
- package/dist/src/retrieval/receipt.d.ts +57 -0
- package/dist/src/retrieval/receipt.d.ts.map +1 -0
- package/dist/src/retrieval/receipt.js +119 -0
- package/dist/src/retrieval/receipt.js.map +1 -0
- package/dist/src/retrieval/reranker.d.ts +12 -2
- package/dist/src/retrieval/reranker.d.ts.map +1 -1
- package/dist/src/retrieval/reranker.js +11 -4
- package/dist/src/retrieval/reranker.js.map +1 -1
- package/dist/src/retrieval/stitch-chunks.d.ts +73 -0
- package/dist/src/retrieval/stitch-chunks.d.ts.map +1 -0
- package/dist/src/retrieval/stitch-chunks.js +106 -0
- package/dist/src/retrieval/stitch-chunks.js.map +1 -0
- package/dist/src/server/app.d.ts.map +1 -1
- package/dist/src/server/app.js +17 -1
- package/dist/src/server/app.js.map +1 -1
- package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
- package/dist/src/server/routes/conversations-search.js +12 -3
- package/dist/src/server/routes/conversations-search.js.map +1 -1
- package/dist/src/server/routes/friend-status.d.ts +44 -5
- package/dist/src/server/routes/friend-status.d.ts.map +1 -1
- package/dist/src/server/routes/friend-status.js +74 -6
- package/dist/src/server/routes/friend-status.js.map +1 -1
- package/dist/src/server/routes/mcp-usage.d.ts +9 -6
- 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/retrieval-feedback.d.ts +3 -0
- package/dist/src/server/routes/retrieval-feedback.d.ts.map +1 -0
- package/dist/src/server/routes/retrieval-feedback.js +290 -0
- package/dist/src/server/routes/retrieval-feedback.js.map +1 -0
- package/dist/src/server/routes/save.d.ts +3 -3
- package/dist/src/server/routes/save.d.ts.map +1 -1
- package/dist/src/server/routes/save.js +6 -2
- package/dist/src/server/routes/save.js.map +1 -1
- package/dist/src/server/routes/search.d.ts.map +1 -1
- package/dist/src/server/routes/search.js +19 -7
- package/dist/src/server/routes/search.js.map +1 -1
- package/dist/src/server/serving-marker.d.ts +85 -0
- package/dist/src/server/serving-marker.d.ts.map +1 -0
- package/dist/src/server/serving-marker.js +226 -0
- package/dist/src/server/serving-marker.js.map +1 -0
- package/dist/src/storage/chunk-backfill.d.ts +39 -0
- package/dist/src/storage/chunk-backfill.d.ts.map +1 -0
- package/dist/src/storage/chunk-backfill.js +295 -0
- package/dist/src/storage/chunk-backfill.js.map +1 -0
- package/dist/src/storage/filter.d.ts +42 -0
- package/dist/src/storage/filter.d.ts.map +1 -0
- package/dist/src/storage/filter.js +70 -0
- package/dist/src/storage/filter.js.map +1 -0
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +44 -27
- package/dist/src/storage/rebuild.js.map +1 -1
- package/dist/src/storage/tables.d.ts +41 -0
- package/dist/src/storage/tables.d.ts.map +1 -1
- package/dist/src/storage/tables.js +64 -1
- package/dist/src/storage/tables.js.map +1 -1
- package/operator/swiftbar/render-menu.py +57 -15
- package/package.json +5 -3
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Point-of-use receipt (Slice 1 of the value-visibility thread).
|
|
3
|
+
*
|
|
4
|
+
* A receipt is the ONE human-facing line a retrieval response leads with:
|
|
5
|
+
* a humble, plain-language summary of what Rift recalled, so the client
|
|
6
|
+
* agent (Claude Code / Codex / Cursor) can relay it at the moment of use.
|
|
7
|
+
* The menu-bar scoreboard is too late for attribution — this is.
|
|
8
|
+
*
|
|
9
|
+
* Design rules (see TODO.md "Value visibility" slice):
|
|
10
|
+
* - Human audience, not machine: NO scores, tiers, `source` codes,
|
|
11
|
+
* retrieval methods, or byte/token counts. Those stay in the hit list,
|
|
12
|
+
* which is the agent's working data.
|
|
13
|
+
* - Name the specific sources, capped at {@link NAMED_MAX}; the tail is a
|
|
14
|
+
* plain count (`+N more`), NEVER a token volume — we must not imply Rift
|
|
15
|
+
* literally read every token of every source.
|
|
16
|
+
* - Humble verb: "recalled", never "improved your answer".
|
|
17
|
+
* - Agent-mediated: Rift can pre-format and instruct, but cannot see
|
|
18
|
+
* whether the client rendered it. So this is best-effort text, not
|
|
19
|
+
* telemetry — omitted entirely when there is nothing honest to say.
|
|
20
|
+
*/
|
|
21
|
+
import type { CompactHit } from "./compact.js";
|
|
22
|
+
import type { ContextPack } from "./context-pack.js";
|
|
23
|
+
/** Maximum number of named sources before collapsing the rest into `+N more`. */
|
|
24
|
+
export declare const NAMED_MAX = 3;
|
|
25
|
+
/**
|
|
26
|
+
* Receipts default ON; opt out with RIFT_RECEIPT=false|0|off|no. Default-on
|
|
27
|
+
* is deliberate: the whole point is visibility, and an off-by-default flag
|
|
28
|
+
* would mean it never shows during dogfood (the only signal we get on which
|
|
29
|
+
* clients actually relay it).
|
|
30
|
+
*/
|
|
31
|
+
export declare function receiptEnabled(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Build the receipt for rift_search / rift_conversations_search.
|
|
34
|
+
*
|
|
35
|
+
* Plain search mixes kinds, so naming the things is enough — no kind label.
|
|
36
|
+
* Prefers each hit's `summary` (reads like English) over `title` (often
|
|
37
|
+
* tag-salad like "rift, cli-tool, typescript").
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildSearchReceipt(hits: CompactHit[] | undefined): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Build the receipt for rift_context_pack.
|
|
42
|
+
*
|
|
43
|
+
* Here the buckets ARE trustworthy kinds, so we lead with the kind
|
|
44
|
+
* ("a prior decision", "the current state") — that is exactly the signal
|
|
45
|
+
* the slice calls for. We draw from durable/current buckets first and
|
|
46
|
+
* deliberately EXCLUDE `discounted` (stale by definition — claiming we
|
|
47
|
+
* "recalled" it would be dishonest) and `recommended_live_files` (Rift
|
|
48
|
+
* points at those, it did not recall their contents).
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildContextPackReceipt(pack: ContextPack | undefined): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Prepend a receipt as the leading line of a response body (leading, because
|
|
53
|
+
* agents relay what they read first and drop trailing content). No-op when
|
|
54
|
+
* the receipt is null.
|
|
55
|
+
*/
|
|
56
|
+
export declare function withReceipt(receipt: string | null, body: string): string;
|
|
57
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/retrieval/receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,iFAAiF;AACjF,eAAO,MAAM,SAAS,IAAI,CAAC;AAa3B;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAgCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAShF;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAsBpF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAExE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/** Maximum number of named sources before collapsing the rest into `+N more`. */
|
|
2
|
+
export const NAMED_MAX = 3;
|
|
3
|
+
/** Word budget per named phrase before eliding with `…`. */
|
|
4
|
+
const PHRASE_MAX_WORDS = 9;
|
|
5
|
+
/**
|
|
6
|
+
* Hard character budget per phrase, applied AFTER the word cap. The word cap
|
|
7
|
+
* alone can't bound a single long unbroken token (a URL, a path, or a
|
|
8
|
+
* comma-less tag blob counts as one "word"), and this is the exact line agents
|
|
9
|
+
* are most likely to quote — so it must stay short no matter the input shape.
|
|
10
|
+
*/
|
|
11
|
+
const PHRASE_MAX_CHARS = 64;
|
|
12
|
+
/**
|
|
13
|
+
* Receipts default ON; opt out with RIFT_RECEIPT=false|0|off|no. Default-on
|
|
14
|
+
* is deliberate: the whole point is visibility, and an off-by-default flag
|
|
15
|
+
* would mean it never shows during dogfood (the only signal we get on which
|
|
16
|
+
* clients actually relay it).
|
|
17
|
+
*/
|
|
18
|
+
export function receiptEnabled() {
|
|
19
|
+
const v = process.env["RIFT_RECEIPT"];
|
|
20
|
+
if (v == null)
|
|
21
|
+
return true;
|
|
22
|
+
return !/^(false|0|off|no)$/i.test(v.trim());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Reduce a raw title/summary/decision to a short, single-line, italics-safe
|
|
26
|
+
* phrase. Collapses whitespace, word-caps with an ellipsis, then ESCAPES
|
|
27
|
+
* markdown emphasis (`\_`, `\*`) so an embedded underscore can't prematurely
|
|
28
|
+
* close the wrapping italics — escaping rather than stripping keeps real
|
|
29
|
+
* filenames like `PROJECT_STATE.md` intact. Returns null for empty input so
|
|
30
|
+
* callers can skip it.
|
|
31
|
+
*/
|
|
32
|
+
function phrase(raw, maxWords = PHRASE_MAX_WORDS) {
|
|
33
|
+
if (!raw)
|
|
34
|
+
return null;
|
|
35
|
+
const full = raw.replace(/\s+/g, " ").trim();
|
|
36
|
+
if (!full)
|
|
37
|
+
return null;
|
|
38
|
+
let s = full.split(" ").slice(0, maxWords).join(" ");
|
|
39
|
+
if (s.length > PHRASE_MAX_CHARS)
|
|
40
|
+
s = s.slice(0, PHRASE_MAX_CHARS).trimEnd();
|
|
41
|
+
// `s` is a prefix of `full`, so a shorter length means we elided something
|
|
42
|
+
// (by word OR by char) and owe the reader an ellipsis.
|
|
43
|
+
if (s.length < full.length)
|
|
44
|
+
s += "…";
|
|
45
|
+
// Backticks aren't reliably escapable inside italics, so drop them; escape
|
|
46
|
+
// emphasis markers that would otherwise toggle the wrapping `_..._`.
|
|
47
|
+
return s.replace(/`/g, "").replace(/([_*])/g, "\\$1");
|
|
48
|
+
}
|
|
49
|
+
/** Wrap named phrases + tail count into the final italic receipt line. */
|
|
50
|
+
function render(named, total) {
|
|
51
|
+
if (named.length === 0)
|
|
52
|
+
return null;
|
|
53
|
+
const more = Math.max(0, total - named.length);
|
|
54
|
+
const tail = more > 0 ? ` — +${more} more` : "";
|
|
55
|
+
return `_Rift recalled ${named.join(", ")}${tail}._`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build the receipt for rift_search / rift_conversations_search.
|
|
59
|
+
*
|
|
60
|
+
* Plain search mixes kinds, so naming the things is enough — no kind label.
|
|
61
|
+
* Prefers each hit's `summary` (reads like English) over `title` (often
|
|
62
|
+
* tag-salad like "rift, cli-tool, typescript").
|
|
63
|
+
*/
|
|
64
|
+
export function buildSearchReceipt(hits) {
|
|
65
|
+
if (!receiptEnabled() || !hits?.length)
|
|
66
|
+
return null;
|
|
67
|
+
const named = [];
|
|
68
|
+
for (const h of hits) {
|
|
69
|
+
if (named.length >= NAMED_MAX)
|
|
70
|
+
break;
|
|
71
|
+
const p = phrase(h.summary || h.title);
|
|
72
|
+
if (p)
|
|
73
|
+
named.push(p);
|
|
74
|
+
}
|
|
75
|
+
return render(named, hits.length);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build the receipt for rift_context_pack.
|
|
79
|
+
*
|
|
80
|
+
* Here the buckets ARE trustworthy kinds, so we lead with the kind
|
|
81
|
+
* ("a prior decision", "the current state") — that is exactly the signal
|
|
82
|
+
* the slice calls for. We draw from durable/current buckets first and
|
|
83
|
+
* deliberately EXCLUDE `discounted` (stale by definition — claiming we
|
|
84
|
+
* "recalled" it would be dishonest) and `recommended_live_files` (Rift
|
|
85
|
+
* points at those, it did not recall their contents).
|
|
86
|
+
*/
|
|
87
|
+
export function buildContextPackReceipt(pack) {
|
|
88
|
+
if (!receiptEnabled() || !pack)
|
|
89
|
+
return null;
|
|
90
|
+
// Ordered by durability/currency: a decision is worth surfacing before a
|
|
91
|
+
// passing discussion. Each entry is [kind label, raw phrase source].
|
|
92
|
+
const candidates = [
|
|
93
|
+
...(pack.decisions ?? []).map((d) => ["a prior decision", d.text]),
|
|
94
|
+
...(pack.current_truth ?? []).map((e) => ["the current state", e.title]),
|
|
95
|
+
...(pack.constraints ?? []).map((c) => ["a constraint", c.text]),
|
|
96
|
+
...(pack.rules ?? []).map((r) => ["a rule", r.title]),
|
|
97
|
+
...(pack.past_reasoning ?? []).map((e) => ["a past discussion", e.title]),
|
|
98
|
+
...(pack.examples ?? []).map((e) => ["a past discussion", e.summary || e.title]),
|
|
99
|
+
...(pack.older_memory ?? []).map((e) => ["older memory", e.title]),
|
|
100
|
+
];
|
|
101
|
+
const named = [];
|
|
102
|
+
for (const [label, raw] of candidates) {
|
|
103
|
+
if (named.length >= NAMED_MAX)
|
|
104
|
+
break;
|
|
105
|
+
const p = phrase(raw);
|
|
106
|
+
if (p)
|
|
107
|
+
named.push(`${label} (${p})`);
|
|
108
|
+
}
|
|
109
|
+
return render(named, candidates.length);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Prepend a receipt as the leading line of a response body (leading, because
|
|
113
|
+
* agents relay what they read first and drop trailing content). No-op when
|
|
114
|
+
* the receipt is null.
|
|
115
|
+
*/
|
|
116
|
+
export function withReceipt(receipt, body) {
|
|
117
|
+
return receipt ? `${receipt}\n\n${body}` : body;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/retrieval/receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Deterministic reranking — PRD Section 6.2, plus a small freshness boost.
|
|
3
3
|
*
|
|
4
4
|
* score = (S_sim * 0.55) + (S_rec * 0.10) + (S_qual * 0.10)
|
|
5
|
-
* + (B_tier * 0.10) + (B_feed * 0.10)
|
|
6
|
-
* + (B_fresh * 0.05)
|
|
5
|
+
* + (B_tier * 0.10) + (fixed neutral B_feed * 0.10)
|
|
6
|
+
* + (B_hyb * 0.05) + (B_fresh * 0.05)
|
|
7
7
|
*
|
|
8
8
|
* B_fresh is a short-horizon exponential decay (half-life ~14d) on top of
|
|
9
9
|
* S_rec's gentle long-horizon decay. Added after Slice 5 daily-use
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { TableName } from "../storage/tables.js";
|
|
19
19
|
import type { RetrievalMethod } from "./hybrid.js";
|
|
20
|
+
/** Half-life (in days) of the short-horizon freshness decay. 14d so a row
|
|
21
|
+
* indexed within a week still carries most of the bump; past ~2 months
|
|
22
|
+
* B_fresh collapses to near-zero and effectively disappears. */
|
|
23
|
+
export declare const FRESH_HALF_LIFE_DAYS = 14;
|
|
20
24
|
export interface RerankCandidate {
|
|
21
25
|
id: string;
|
|
22
26
|
content: string;
|
|
@@ -34,6 +38,12 @@ export interface RerankCandidate {
|
|
|
34
38
|
topics?: string;
|
|
35
39
|
/** Raw JSON-encoded decisions array. Used by pre-rerank post-filter. */
|
|
36
40
|
decisions?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Shadow retrieval-feedback boost. Positive-only v0: 1.0 is neutral, values
|
|
43
|
+
* above 1.0 are computed from opened/cited evidence. Slice 15 exposes this
|
|
44
|
+
* factor for `rift why`; ranking integration is deferred to Slice 16.
|
|
45
|
+
*/
|
|
46
|
+
feedback_boost?: number;
|
|
37
47
|
}
|
|
38
48
|
export interface RankedResult {
|
|
39
49
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../../src/retrieval/reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../../src/retrieval/reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWnD;;iEAEiE;AACjE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAqBvC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC;IACxB,gBAAgB,EAAE,eAAe,CAAC;IAClC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,eAAe,CAAC;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,sEAAsE;IACtE,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;8BAK0B;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,UAAU,EAAE,eAAe,EAAE,EAC7B,GAAG,GAAE,MAAmB,GACvB,YAAY,EAAE,CA+BhB"}
|
|
@@ -10,7 +10,9 @@ const W_FRESH = 0.05;
|
|
|
10
10
|
/** Half-life (in days) of the short-horizon freshness decay. 14d so a row
|
|
11
11
|
* indexed within a week still carries most of the bump; past ~2 months
|
|
12
12
|
* B_fresh collapses to near-zero and effectively disappears. */
|
|
13
|
-
const FRESH_HALF_LIFE_DAYS = 14;
|
|
13
|
+
export const FRESH_HALF_LIFE_DAYS = 14;
|
|
14
|
+
const FEEDBACK_MIN = 1.0;
|
|
15
|
+
const FEEDBACK_MAX = 1.25;
|
|
14
16
|
// --- Tier boosts (PRD 6.2 + assumptions A2) ---
|
|
15
17
|
const TIER_BOOST = {
|
|
16
18
|
conversations_hot: 1.0,
|
|
@@ -42,7 +44,7 @@ export function rerank(candidates, now = Date.now()) {
|
|
|
42
44
|
factors.S_rec * W_REC +
|
|
43
45
|
factors.S_qual * W_QUAL +
|
|
44
46
|
factors.B_tier * W_TIER +
|
|
45
|
-
|
|
47
|
+
W_FEED + // neutral baseline, preserving the historical fixed B_feed=1.0 term
|
|
46
48
|
factors.B_hyb * W_HYB +
|
|
47
49
|
factors.B_fresh * W_FRESH;
|
|
48
50
|
const bm25_normalized = maxBm25 > 0 ? Math.min(1, c.raw_bm25 / maxBm25) : 0;
|
|
@@ -76,14 +78,19 @@ function computeFactors(c, now, maxBm25) {
|
|
|
76
78
|
const S_qual = computeQuality(c.quality, c.source_table);
|
|
77
79
|
// B_tier: tier boost based on source table
|
|
78
80
|
const B_tier = TIER_BOOST[c.source_table] ?? 1.0;
|
|
79
|
-
// B_feed: feedback
|
|
80
|
-
const B_feed =
|
|
81
|
+
// B_feed: positive-only retrieval feedback. Cold start is exactly neutral.
|
|
82
|
+
const B_feed = clampFeedbackBoost(c.feedback_boost);
|
|
81
83
|
// B_hyb: 1.3 if found in both vector and lexical paths
|
|
82
84
|
const B_hyb = c.retrieval_method === "hybrid" ? 1.3 : 1.0;
|
|
83
85
|
// B_fresh: short-horizon additive freshness boost; see top-of-file doc.
|
|
84
86
|
const B_fresh = computeFreshness(c.indexed_at, now);
|
|
85
87
|
return { S_sim, S_rec, S_qual, B_tier, B_feed, B_hyb, B_fresh };
|
|
86
88
|
}
|
|
89
|
+
function clampFeedbackBoost(boost) {
|
|
90
|
+
if (typeof boost !== "number" || Number.isNaN(boost))
|
|
91
|
+
return 1.0;
|
|
92
|
+
return Math.max(FEEDBACK_MIN, Math.min(FEEDBACK_MAX, boost));
|
|
93
|
+
}
|
|
87
94
|
/**
|
|
88
95
|
* B_fresh = exp(-daysSince / FRESH_HALF_LIFE_DAYS).
|
|
89
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../../src/retrieval/reranker.ts"],"names":[],"mappings":"AAoBA,sDAAsD;AACtD,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,yEAAyE;AACzE,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB;;iEAEiE;AACjE,MAAM,oBAAoB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../../src/retrieval/reranker.ts"],"names":[],"mappings":"AAoBA,sDAAsD;AACtD,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,yEAAyE;AACzE,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB;;iEAEiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,iDAAiD;AACjD,MAAM,UAAU,GAA2B;IACzC,iBAAiB,EAAE,GAAG;IACtB,OAAO,EAAE,GAAG;IACZ,kBAAkB,EAAE,GAAG;IACvB,eAAe,EAAE,GAAG,EAAE,kBAAkB;CACzC,CAAC;AAEF,0BAA0B;AAC1B,MAAM,aAAa,GAA2B;IAC5C,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACT,CAAC;AAyDF;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,UAA6B,EAC7B,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,kEAAkE;IAClE,+DAA+D;IAC/D,0DAA0D;IAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,GAAG,KAAK;YACrB,OAAO,CAAC,KAAK,GAAG,KAAK;YACrB,OAAO,CAAC,MAAM,GAAG,MAAM;YACvB,OAAO,CAAC,MAAM,GAAG,MAAM;YACvB,MAAM,GAAG,oEAAoE;YAC7E,OAAO,CAAC,KAAK,GAAG,KAAK;YACrB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAE5B,MAAM,eAAe,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK;YACL,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,OAAO;YACP,eAAe;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,CAAkB,EAAE,GAAW,EAAE,OAAe;IACtE,2EAA2E;IAC3E,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,6DAA6D;IAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAEhD,yEAAyE;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IAEzD,2CAA2C;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;IAEjD,2EAA2E;IAC3E,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAEpD,uDAAuD;IACvD,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1D,wEAAwE;IACxE,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAEpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,SAA6B,EAAE,GAAW;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,oBAAoB,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,SAA6B,EAAE,GAAW;IAChE,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAE3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC;IAExC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,OAA2B,EAC3B,WAAsB;IAEtB,IAAI,WAAW,KAAK,iBAAiB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-side reassembly of chunk siblings for the `expand` path.
|
|
3
|
+
*
|
|
4
|
+
* Index-time chunking seeds every chunk N+1 with an overlap tail copied from the
|
|
5
|
+
* end of chunk N (see `overlapTail` in `../ingestion/chunk-text.ts`): the start of
|
|
6
|
+
* one chunk literally duplicates a suffix of the previous one. Naively
|
|
7
|
+
* concatenating adjacent chunks would print that shared region twice and read as
|
|
8
|
+
* broken. `stitchChunkContents` joins an ordered run of chunks back together,
|
|
9
|
+
* removing the duplicated seam so each overlap region appears exactly once.
|
|
10
|
+
*
|
|
11
|
+
* Only contiguous index ranges are stitched (the `middle`/`full` expand windows
|
|
12
|
+
* are both contiguous). A genuine gap (a missing index — e.g. a partially-written
|
|
13
|
+
* set) is rendered with an explicit boundary marker rather than de-overlapped
|
|
14
|
+
* across, since non-adjacent chunks share no seam.
|
|
15
|
+
*
|
|
16
|
+
* Interior gaps fall out naturally (a missing index between two present ones).
|
|
17
|
+
* Edge gaps do not: chunks present for [1,2] of an expected [0,2] range have no
|
|
18
|
+
* absent index *between* siblings, so a caller that knows the expected range
|
|
19
|
+
* passes it via `expectedStart`/`expectedEnd` to render the missing leading or
|
|
20
|
+
* trailing section explicitly, instead of returning a partial body that reads as
|
|
21
|
+
* a whole one.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Maximum seam length searched when de-overlapping. The index-time overlap tail
|
|
25
|
+
* is bounded by `DEFAULT_CHUNK_OPTIONS.overlapChars` (216), so a real seam is
|
|
26
|
+
* always well under this; the cap is generous slack against future chunker
|
|
27
|
+
* tuning while keeping the longest-common-overlap scan cheap (≤ cap² char
|
|
28
|
+
* comparisons per seam). We take the LONGEST matching suffix/prefix so a real
|
|
29
|
+
* 216-char seam is removed in full; a coincidental longer match in prose is
|
|
30
|
+
* vanishingly unlikely and would only ever drop genuinely duplicated text.
|
|
31
|
+
*/
|
|
32
|
+
export declare const MAX_SEAM_OVERLAP_CHARS = 512;
|
|
33
|
+
export interface StitchChunk {
|
|
34
|
+
/** 0-based chunk ordinal within the parent set. */
|
|
35
|
+
index: number;
|
|
36
|
+
/** The chunk's stored content. */
|
|
37
|
+
content: string;
|
|
38
|
+
}
|
|
39
|
+
export interface StitchResult {
|
|
40
|
+
/** Reassembled, de-overlapped content. */
|
|
41
|
+
text: string;
|
|
42
|
+
/** How many chunk rows were combined into {@link text}. */
|
|
43
|
+
sectionsUsed: number;
|
|
44
|
+
/** True when one or more index gaps were bridged with a boundary marker. */
|
|
45
|
+
hasGaps: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface StitchOptions {
|
|
48
|
+
/** Longest seam searched when de-overlapping adjacent chunks. */
|
|
49
|
+
maxSeam?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Lowest chunk index the caller expected in this run. When the lowest present
|
|
52
|
+
* index is greater, the leading section(s) are rendered as an explicit
|
|
53
|
+
* omission marker (an edge gap a between-siblings scan can't detect).
|
|
54
|
+
*/
|
|
55
|
+
expectedStart?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Highest chunk index the caller expected in this run. When the highest
|
|
58
|
+
* present index is lower, the trailing section(s) are rendered as an explicit
|
|
59
|
+
* omission marker.
|
|
60
|
+
*/
|
|
61
|
+
expectedEnd?: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Stitch an ordered run of chunk siblings into one body, removing the duplicated
|
|
65
|
+
* overlap at each adjacent seam. Input need not be pre-sorted; duplicate indices
|
|
66
|
+
* keep the first occurrence. Returns the empty string for an empty input.
|
|
67
|
+
*
|
|
68
|
+
* Pass `expectedStart`/`expectedEnd` to also surface missing leading/trailing
|
|
69
|
+
* sections (edge gaps) as omission markers; without them only interior gaps are
|
|
70
|
+
* marked.
|
|
71
|
+
*/
|
|
72
|
+
export declare function stitchChunkContents(chunks: StitchChunk[], opts?: StitchOptions): StitchResult;
|
|
73
|
+
//# sourceMappingURL=stitch-chunks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitch-chunks.d.ts","sourceRoot":"","sources":["../../../src/retrieval/stitch-chunks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,GAAE,aAAkB,GACvB,YAAY,CA8Cd"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-side reassembly of chunk siblings for the `expand` path.
|
|
3
|
+
*
|
|
4
|
+
* Index-time chunking seeds every chunk N+1 with an overlap tail copied from the
|
|
5
|
+
* end of chunk N (see `overlapTail` in `../ingestion/chunk-text.ts`): the start of
|
|
6
|
+
* one chunk literally duplicates a suffix of the previous one. Naively
|
|
7
|
+
* concatenating adjacent chunks would print that shared region twice and read as
|
|
8
|
+
* broken. `stitchChunkContents` joins an ordered run of chunks back together,
|
|
9
|
+
* removing the duplicated seam so each overlap region appears exactly once.
|
|
10
|
+
*
|
|
11
|
+
* Only contiguous index ranges are stitched (the `middle`/`full` expand windows
|
|
12
|
+
* are both contiguous). A genuine gap (a missing index — e.g. a partially-written
|
|
13
|
+
* set) is rendered with an explicit boundary marker rather than de-overlapped
|
|
14
|
+
* across, since non-adjacent chunks share no seam.
|
|
15
|
+
*
|
|
16
|
+
* Interior gaps fall out naturally (a missing index between two present ones).
|
|
17
|
+
* Edge gaps do not: chunks present for [1,2] of an expected [0,2] range have no
|
|
18
|
+
* absent index *between* siblings, so a caller that knows the expected range
|
|
19
|
+
* passes it via `expectedStart`/`expectedEnd` to render the missing leading or
|
|
20
|
+
* trailing section explicitly, instead of returning a partial body that reads as
|
|
21
|
+
* a whole one.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Maximum seam length searched when de-overlapping. The index-time overlap tail
|
|
25
|
+
* is bounded by `DEFAULT_CHUNK_OPTIONS.overlapChars` (216), so a real seam is
|
|
26
|
+
* always well under this; the cap is generous slack against future chunker
|
|
27
|
+
* tuning while keeping the longest-common-overlap scan cheap (≤ cap² char
|
|
28
|
+
* comparisons per seam). We take the LONGEST matching suffix/prefix so a real
|
|
29
|
+
* 216-char seam is removed in full; a coincidental longer match in prose is
|
|
30
|
+
* vanishingly unlikely and would only ever drop genuinely duplicated text.
|
|
31
|
+
*/
|
|
32
|
+
export const MAX_SEAM_OVERLAP_CHARS = 512;
|
|
33
|
+
/** Render an "N section(s) omitted" boundary marker. */
|
|
34
|
+
function omissionMarker(missing) {
|
|
35
|
+
return `[… ${missing} section${missing === 1 ? "" : "s"} omitted …]`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Stitch an ordered run of chunk siblings into one body, removing the duplicated
|
|
39
|
+
* overlap at each adjacent seam. Input need not be pre-sorted; duplicate indices
|
|
40
|
+
* keep the first occurrence. Returns the empty string for an empty input.
|
|
41
|
+
*
|
|
42
|
+
* Pass `expectedStart`/`expectedEnd` to also surface missing leading/trailing
|
|
43
|
+
* sections (edge gaps) as omission markers; without them only interior gaps are
|
|
44
|
+
* marked.
|
|
45
|
+
*/
|
|
46
|
+
export function stitchChunkContents(chunks, opts = {}) {
|
|
47
|
+
const maxSeam = opts.maxSeam ?? MAX_SEAM_OVERLAP_CHARS;
|
|
48
|
+
const byIndex = new Map();
|
|
49
|
+
for (const c of chunks) {
|
|
50
|
+
if (!byIndex.has(c.index))
|
|
51
|
+
byIndex.set(c.index, c.content);
|
|
52
|
+
}
|
|
53
|
+
const sorted = [...byIndex.entries()]
|
|
54
|
+
.map(([index, content]) => ({ index, content }))
|
|
55
|
+
.sort((a, b) => a.index - b.index);
|
|
56
|
+
if (sorted.length === 0)
|
|
57
|
+
return { text: "", sectionsUsed: 0, hasGaps: false };
|
|
58
|
+
let text = sorted[0].content;
|
|
59
|
+
let prevIndex = sorted[0].index;
|
|
60
|
+
let hasGaps = false;
|
|
61
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
62
|
+
const { index, content } = sorted[i];
|
|
63
|
+
if (index === prevIndex + 1) {
|
|
64
|
+
text = joinDeoverlap(text, content, maxSeam);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// A gap: chunks aren't adjacent, so they share no overlap seam. Mark the
|
|
68
|
+
// omission honestly instead of silently butting the pieces together.
|
|
69
|
+
const missing = index - prevIndex - 1;
|
|
70
|
+
text = `${text}\n\n${omissionMarker(missing)}\n\n${content}`;
|
|
71
|
+
hasGaps = true;
|
|
72
|
+
}
|
|
73
|
+
prevIndex = index;
|
|
74
|
+
}
|
|
75
|
+
// Edge gaps: sections expected before the first / after the last present
|
|
76
|
+
// chunk. A between-siblings scan can't see these, so a partial run looks whole
|
|
77
|
+
// without them. Only flagged when the caller supplied the expected range.
|
|
78
|
+
const firstIndex = sorted[0].index;
|
|
79
|
+
if (opts.expectedStart !== undefined && firstIndex > opts.expectedStart) {
|
|
80
|
+
const missing = firstIndex - opts.expectedStart;
|
|
81
|
+
text = `${omissionMarker(missing)}\n\n${text}`;
|
|
82
|
+
hasGaps = true;
|
|
83
|
+
}
|
|
84
|
+
if (opts.expectedEnd !== undefined && prevIndex < opts.expectedEnd) {
|
|
85
|
+
const missing = opts.expectedEnd - prevIndex;
|
|
86
|
+
text = `${text}\n\n${omissionMarker(missing)}`;
|
|
87
|
+
hasGaps = true;
|
|
88
|
+
}
|
|
89
|
+
return { text, sectionsUsed: sorted.length, hasGaps };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Join two adjacent chunks, dropping the longest suffix of `prev` that is also a
|
|
93
|
+
* prefix of `next` (the duplicated overlap). When no overlap is found the chunks
|
|
94
|
+
* were paragraph-separated in the source, so rejoin with a paragraph break rather
|
|
95
|
+
* than fusing the boundary words together.
|
|
96
|
+
*/
|
|
97
|
+
function joinDeoverlap(prev, next, maxSeam) {
|
|
98
|
+
const cap = Math.min(prev.length, next.length, maxSeam);
|
|
99
|
+
for (let k = cap; k > 0; k--) {
|
|
100
|
+
if (prev.slice(prev.length - k) === next.slice(0, k)) {
|
|
101
|
+
return prev + next.slice(k);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return `${prev}\n\n${next}`;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=stitch-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitch-chunks.js","sourceRoot":"","sources":["../../../src/retrieval/stitch-chunks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAyB/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAKvD,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,YAAY,EAC3B,QAAQ,CAAC,EAAE,QAAQ,EACnB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,EACxB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,sBAAsB,CAAC,EAAE,iBAAiB,GACzC,OAAO,CAAC,GAAG,CAAC,CA2Vd"}
|
package/dist/src/server/app.js
CHANGED
|
@@ -17,6 +17,7 @@ import { registerMcpUsageRoute } from "./routes/mcp-usage.js";
|
|
|
17
17
|
import { registerIngestRoute } from "./routes/ingest.js";
|
|
18
18
|
import { registerTriageRoute } from "./routes/triage.js";
|
|
19
19
|
import { registerContextRoute } from "./routes/context.js";
|
|
20
|
+
import { registerRetrievalFeedbackRoutes } from "./routes/retrieval-feedback.js";
|
|
20
21
|
import { registerMultipart } from "./middleware/multipart.js";
|
|
21
22
|
import { createSaveHandler } from "../jobs/handlers/save.js";
|
|
22
23
|
import { createReconcileHandler } from "../jobs/handlers/reconcile.js";
|
|
@@ -89,10 +90,20 @@ export async function buildApp(config, tokenManager, jobQueue, embeddingProvider
|
|
|
89
90
|
// (the live digest summarizer is Codex CLI by default, or Ollama
|
|
90
91
|
// when `local_generation.enabled = true`), and saying "set
|
|
91
92
|
// VOYAGE_API_KEY" when the queue itself is down is misdirection.
|
|
93
|
+
//
|
|
94
|
+
// The digest hint is config-aware: when Claude metadata is selected, the
|
|
95
|
+
// digest summarizer is absent BY DESIGN (no Claude digest worker yet — see
|
|
96
|
+
// createCloudProviders), so "authenticate Codex CLI" would be wrong advice.
|
|
97
|
+
// Tell that user the real story instead.
|
|
98
|
+
const claudeMetadataSelected = config.enrichment?.ai_metadata === true &&
|
|
99
|
+
config.enrichment?.metadata?.provider === "claude_code";
|
|
100
|
+
const digestSummarizerHint = claudeMetadataSelected
|
|
101
|
+
? "Claude Code metadata is selected, which has no digest worker yet; digests/compaction stay off until Claude digest support ships — switch metadata to Codex (`rift onboard --enable-codex-enrichment`) or set `local_generation.enabled: true` for Ollama to enable compaction"
|
|
102
|
+
: "authenticate Codex CLI (`codex login`) or set `local_generation.enabled: true` for Ollama";
|
|
92
103
|
const MISSING_DEP_HINTS = {
|
|
93
104
|
job_queue: "daemon job queue is not initialized; restart the daemon",
|
|
94
105
|
embedding_provider: "set VOYAGE_API_KEY and re-run `rift onboard`",
|
|
95
|
-
digest_summarizer:
|
|
106
|
+
digest_summarizer: digestSummarizerHint,
|
|
96
107
|
};
|
|
97
108
|
const registerUnavailable = (path, missing) => {
|
|
98
109
|
const hint = missing.map((m) => MISSING_DEP_HINTS[m]).join("; ");
|
|
@@ -257,6 +268,11 @@ export async function buildApp(config, tokenManager, jobQueue, embeddingProvider
|
|
|
257
268
|
else {
|
|
258
269
|
registerUnavailable("/context/pack", ["embedding_provider"]);
|
|
259
270
|
}
|
|
271
|
+
// --- Retrieval feedback rails (authenticated) ---
|
|
272
|
+
// These routes write append-only learning events and expose shadow scoring.
|
|
273
|
+
// They are available even when embeddings are unavailable: exact evidence
|
|
274
|
+
// opens and outcome logs are local ledger operations.
|
|
275
|
+
registerRetrievalFeedbackRoutes(server, config.data_paths.data_dir);
|
|
260
276
|
// --- Observability deps ---
|
|
261
277
|
const obsDeps = {
|
|
262
278
|
config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAiC,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,YAA2B,EAC3B,QAAmB,EACnB,iBAAqC,EACrC,QAAoB,EACpB,OAAwB,EACxB,gBAAmC,EACnC,iBAAqC,EACrC,sBAA0C;IAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,MAAM,MAAM,GAAG,OAAO,CAAC;QACrB,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,qBAAqB;QACtD,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,eAAe;KACtD,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,WAAW,GAAG,IAAI,WAAW,CACjC,MAAM,CAAC,UAAU,CAAC,SAAS,EAC3B,MAAM,CAAC,UAAU,CAAC,YAAY,CAC/B,CAAC;IACF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;IAEhE,sDAAsD;IACtD,mEAAmE;IACnE,iEAAiE;IACjE,mEAAmE;IACnE,oDAAoD;IACpD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,IAAa;YACrB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YAC3D,kBAAkB,EAAE,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;SAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qCAAqC;IACrC,uEAAuE;IACvE,uEAAuE;IACvE,aAAa;IACb,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;QAChD,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,EAAE;IACF,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,2DAA2D;IAC3D,iEAAiE;IACjE,MAAM,iBAAiB,GAAG;QACxB,SAAS,EAAE,yDAAyD;QACpE,kBAAkB,EAChB,8CAA8C;QAChD,iBAAiB,EACf,2FAA2F;KACrF,CAAC;IAEX,MAAM,mBAAmB,GAAG,CAC1B,IAAY,EACZ,OAAkC,EAC5B,EAAE;QACR,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;YACrB,OAAO,EAAE,QAAQ,IAAI,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,GAAG;SACpF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEvD,IAAI,QAAQ,EAAE,CAAC;QACb,kCAAkC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,yEAAyE;IACzE,gEAAgE;IAChE,8DAA8D;IAC9D,EAAE;IACF,2EAA2E;IAC3E,6EAA6E;IAC7E,wEAAwE;IACxE,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,6DAA6D;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,eAAe,CACtB,MAAM,EACN,iBAAiB,CAAC;gBAChB,iBAAiB,EACf,iBAAiB,IAAI,IAAI,4BAA4B,EAAE;gBACzD,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,KAAK,EAAE,QAAQ;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACpC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,mBAAmB,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,+EAA+E;IAC/E,IAAI,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QAClC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,eAAe,CACtB,WAAW,EACX,sBAAsB,CAAC;gBACrB,MAAM;gBACN,iBAAiB;gBACjB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,QAAQ,EAAE,QAAQ,IAAI,EAAE;gBACxB,OAAO,EAAE,OAAO,IAAI,IAAI;gBACxB,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAiB;YAC5B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAoB,CAAC,CAAC;YAC3C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAA6B,CAAC,CAAC;SAC9D,CAAC;QACF,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,wFAAwF;IACxF,IAAI,QAAQ,IAAI,iBAAiB,IAAI,gBAAgB,EAAE,CAAC;QACtD,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,eAAe,CACtB,SAAS,EACT,oBAAoB,CAAC;gBACnB,iBAAiB;gBACjB,gBAAgB;gBAChB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,kBAAkB;gBACtD,QAAQ,EAAE,QAAQ,IAAI,EAAE;gBACxB,OAAO,EAAE,OAAO,IAAI,IAAI;aACzB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAiB;YAC5B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAoB,CAAC,CAAC;YAC3C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAA6B,CAAC,CAAC;YAC7D,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAA4B,CAAC,CAAC;SAC5D,CAAC;QACF,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,IAAI,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,eAAe,CACtB,SAAS,EACT,oBAAoB,CAAC;gBACnB,MAAM;gBACN,iBAAiB;gBACjB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,QAAQ,EAAE,QAAQ,IAAI,EAAE;gBACxB,OAAO,EAAE,OAAO,IAAI,IAAI;gBACxB,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAiB;YAC5B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAoB,CAAC,CAAC;YAC3C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAA6B,CAAC,CAAC;SAC9D,CAAC;QACF,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,sEAAsE;IACtE,6EAA6E;IAC7E,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,mBAAmB,CACjB,MAAM,EACN,QAAQ,EACR,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAC3C,CAAC,CAAC,iBAAiB,EACnB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAC3B,CAAC;QACF,IAAI,iBAAiB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,QAAQ,CAAC,eAAe,CACtB,QAAQ,EACR,mBAAmB,CAAC;gBAClB,iBAAiB,EAAE,iBAAiB,IAAI,IAAI,4BAA4B,EAAE;gBAC1E,iBAAiB;gBACjB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,KAAK,EAAE,QAAQ;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,sDAAsD;IACtD,mEAAmE;IACnE,uEAAuE;IACvE,wEAAwE;IACxE,IAAI,QAAQ,EAAE,CAAC;QACb,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,eAAe,CACtB,QAAQ,EACR,mBAAmB,CAAC;gBAClB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACnC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAClC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAC1B,IAAI,EACJ,SAAS,CACV,CAAC;IACF,yEAAyE;IACzE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,sDAAsD;IACtD,mBAAmB,CACjB,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,CAAC,OAAO,EACd,eAAe,CAChB,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,+BAA+B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,mBAAmB,CAAC,uBAAuB,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,iBAAiB,IAAI,sBAAsB,EAAE,CAAC;QAChD,oBAAoB,CAClB,MAAM,EACN,iBAAiB,IAAI,sBAAuB,EAC5C,MAAM,CAAC,OAAO,EACd,eAAe,CAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,mBAAmB,CAAC,eAAe,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAsB;QACjC,MAAM;QACN,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,YAAY,EAAE;YACZ,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;YAC5D,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;YACpE,gBAAgB;YAChB,YAAY,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;SACzD;QACD,mBAAmB,EAAE,GAAG,EAAE;YACxB,MAAM,GAAG,GAAG,QAAQ,EAAE,sBAAsB,EAAE,IAAI,IAAI,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,GAAG,KAAK,IAAI;gBACpB,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;aACjD,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,sCAAsC;IACtC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,uCAAuC;IACvC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,0DAA0D;IAC1D,yBAAyB,CAAC,MAAM,EAAE;QAChC,MAAM;QACN,SAAS;QACT,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,SAAS,EAAE,GAAG,EAAE;YACd,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations-search.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/conversations-search.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"conversations-search.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/conversations-search.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAsFlE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,iBAAiB,GAC3B,IAAI,CAmON"}
|
|
@@ -18,7 +18,8 @@ import { isRiftBasicMetadata, RIFT_BASIC_METADATA_EXCLUSION_CLAUSE, } from "../.
|
|
|
18
18
|
import { RIFT_NONE_VECTOR_EXCLUSION_CLAUSE } from "../../providers/placeholder-embed.js";
|
|
19
19
|
import { applyPostFilters } from "../../retrieval/post-filter.js";
|
|
20
20
|
import { getTable } from "../../storage/tables.js";
|
|
21
|
-
import { buildCompactHit, fetchRawRowsForRanked, } from "../../retrieval/compact.js";
|
|
21
|
+
import { buildCompactHit, fetchParentKeysForRanked, fetchRawRowsForRanked, } from "../../retrieval/compact.js";
|
|
22
|
+
import { groupByParent, rankedKey } from "../../retrieval/group-by-parent.js";
|
|
22
23
|
// --- Request schema ---
|
|
23
24
|
const ConversationSearchRequestSchema = z.object({
|
|
24
25
|
query: z.string().min(1),
|
|
@@ -244,17 +245,25 @@ export function registerConversationSearchRoute(server, embedding) {
|
|
|
244
245
|
});
|
|
245
246
|
// --- Rerank filtered candidates ---
|
|
246
247
|
const ranked = rerank(filtered);
|
|
247
|
-
|
|
248
|
+
// Collapse chunk siblings so one long conversation yields a single
|
|
249
|
+
// representative hit (+section count) instead of flooding top-k. No-op for
|
|
250
|
+
// unchunked/legacy rows (parentKeyForRow returns null). Key the whole deep
|
|
251
|
+
// pool with a projection-only query (no content/embedding); full rows are
|
|
252
|
+
// fetched only for the surviving representatives below.
|
|
253
|
+
const parentKeyById = await fetchParentKeysForRanked(ranked);
|
|
254
|
+
const grouped = groupByParent(ranked, (r) => parentKeyById.get(rankedKey(r)) ?? null);
|
|
255
|
+
const topRanked = grouped.ranked.slice(0, top_k);
|
|
248
256
|
const rawRows = await fetchRawRowsForRanked(topRanked);
|
|
249
257
|
// Detail maps directly to the compact contract: "full" includes raw
|
|
250
258
|
// content (and already routes to the cold tier above); "summary" emits
|
|
251
259
|
// only the compact DTO fields. `expand.route` is the unified /search
|
|
252
260
|
// endpoint per the Slice 1 locked contract, so hot/digest hits can be
|
|
253
261
|
// expanded round-trip without re-searching conversations_cold only.
|
|
254
|
-
const topResults = topRanked.map((r) => buildCompactHit(r, rawRows.get(r
|
|
262
|
+
const topResults = topRanked.map((r) => buildCompactHit(r, rawRows.get(rankedKey(r)), {
|
|
255
263
|
query,
|
|
256
264
|
detail,
|
|
257
265
|
expandRoute: "/search",
|
|
266
|
+
siblingCount: grouped.siblingCountById.get(rankedKey(r)),
|
|
258
267
|
}));
|
|
259
268
|
const response = {
|
|
260
269
|
results: topResults,
|