@getrift/rift 0.1.0-beta.21 → 0.1.0-beta.23
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/recover-quarantine.d.ts +4 -4
- 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 +79 -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 +3 -1
- package/dist/src/cli/commands/menubar.d.ts.map +1 -1
- package/dist/src/cli/commands/menubar.js +36 -12
- package/dist/src/cli/commands/menubar.js.map +1 -1
- package/dist/src/cli/commands/onboard.d.ts +22 -2
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +160 -32
- 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 +12 -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 +166 -1
- 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 +20 -13
- package/dist/src/cli/postinstall-menubar.d.ts.map +1 -1
- package/dist/src/cli/postinstall-menubar.js +56 -1
- package/dist/src/cli/postinstall-menubar.js.map +1 -1
- package/dist/src/cli/status/friend-header.d.ts +16 -3
- package/dist/src/cli/status/friend-header.d.ts.map +1 -1
- package/dist/src/cli/status/friend-header.js +186 -10
- package/dist/src/cli/status/friend-header.js.map +1 -1
- package/dist/src/cli/status/local-signals.d.ts +42 -4
- package/dist/src/cli/status/local-signals.d.ts.map +1 -1
- package/dist/src/cli/status/local-signals.js +52 -1
- 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 +35 -0
- package/dist/src/diagnostics/claude-preflight.d.ts.map +1 -0
- package/dist/src/diagnostics/claude-preflight.js +90 -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 +24 -0
- package/dist/src/diagnostics/codex-preflight.js.map +1 -1
- package/dist/src/diagnostics/doctor.d.ts +7 -4
- package/dist/src/diagnostics/doctor.d.ts.map +1 -1
- package/dist/src/diagnostics/doctor.js +70 -11
- package/dist/src/diagnostics/doctor.js.map +1 -1
- package/dist/src/diagnostics/memory-coverage.d.ts +54 -0
- package/dist/src/diagnostics/memory-coverage.d.ts.map +1 -0
- package/dist/src/diagnostics/memory-coverage.js +272 -0
- package/dist/src/diagnostics/memory-coverage.js.map +1 -0
- package/dist/src/diagnostics/notify.d.ts +20 -3
- package/dist/src/diagnostics/notify.d.ts.map +1 -1
- package/dist/src/diagnostics/notify.js +54 -14
- package/dist/src/diagnostics/notify.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 +27 -16
- package/dist/src/main.js.map +1 -1
- package/dist/src/mcp/capture-diagnostics.d.ts +51 -0
- package/dist/src/mcp/capture-diagnostics.d.ts.map +1 -0
- package/dist/src/mcp/capture-diagnostics.js +127 -0
- package/dist/src/mcp/capture-diagnostics.js.map +1 -0
- package/dist/src/mcp/memory-diagnostics.d.ts +6 -0
- package/dist/src/mcp/memory-diagnostics.d.ts.map +1 -0
- package/dist/src/mcp/memory-diagnostics.js +51 -0
- package/dist/src/mcp/memory-diagnostics.js.map +1 -0
- 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/mcp/tools/status.d.ts +15 -1
- package/dist/src/mcp/tools/status.d.ts.map +1 -1
- package/dist/src/mcp/tools/status.js +53 -2
- package/dist/src/mcp/tools/status.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/canonical-files.d.ts +48 -0
- package/dist/src/retrieval/canonical-files.d.ts.map +1 -0
- package/dist/src/retrieval/canonical-files.js +210 -0
- package/dist/src/retrieval/canonical-files.js.map +1 -0
- package/dist/src/retrieval/compact.d.ts +95 -0
- package/dist/src/retrieval/compact.d.ts.map +1 -1
- package/dist/src/retrieval/compact.js +254 -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 +65 -15
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/retrieval/conversation-dedup.d.ts +40 -0
- package/dist/src/retrieval/conversation-dedup.d.ts.map +1 -0
- package/dist/src/retrieval/conversation-dedup.js +141 -0
- package/dist/src/retrieval/conversation-dedup.js.map +1 -0
- 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/feedback-ranking.d.ts +49 -0
- package/dist/src/retrieval/feedback-ranking.d.ts.map +1 -0
- package/dist/src/retrieval/feedback-ranking.js +138 -0
- package/dist/src/retrieval/feedback-ranking.js.map +1 -0
- package/dist/src/retrieval/git-state.d.ts +9 -0
- package/dist/src/retrieval/git-state.d.ts.map +1 -1
- package/dist/src/retrieval/git-state.js +18 -0
- package/dist/src/retrieval/git-state.js.map +1 -1
- 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 +49 -2
- package/dist/src/retrieval/reranker.d.ts.map +1 -1
- package/dist/src/retrieval/reranker.js +64 -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 +1 -1
- package/dist/src/server/app.d.ts.map +1 -1
- package/dist/src/server/app.js +20 -3
- 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 +22 -3
- package/dist/src/server/routes/conversations-search.js.map +1 -1
- package/dist/src/server/routes/friend-status.d.ts +64 -6
- package/dist/src/server/routes/friend-status.d.ts.map +1 -1
- package/dist/src/server/routes/friend-status.js +114 -18
- 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 +1 -1
- package/dist/src/server/routes/search.d.ts.map +1 -1
- package/dist/src/server/routes/search.js +55 -8
- 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 +60 -18
- package/package.json +6 -4
|
@@ -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,17 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { TableName } from "../storage/tables.js";
|
|
19
19
|
import type { RetrievalMethod } from "./hybrid.js";
|
|
20
|
+
/**
|
|
21
|
+
* Weight of the B_feed term. Exported so the flag-gated retrieval-feedback
|
|
22
|
+
* post-pass ({@link applyFeedbackBoost}) can re-score by the SAME weight the
|
|
23
|
+
* composite uses — keeping "apply feedback as a post-pass" mathematically
|
|
24
|
+
* identical to "rerank with that B_feed".
|
|
25
|
+
*/
|
|
26
|
+
export declare const W_FEED_WEIGHT = 0.1;
|
|
27
|
+
/** Half-life (in days) of the short-horizon freshness decay. 14d so a row
|
|
28
|
+
* indexed within a week still carries most of the bump; past ~2 months
|
|
29
|
+
* B_fresh collapses to near-zero and effectively disappears. */
|
|
30
|
+
export declare const FRESH_HALF_LIFE_DAYS = 14;
|
|
20
31
|
export interface RerankCandidate {
|
|
21
32
|
id: string;
|
|
22
33
|
content: string;
|
|
@@ -34,6 +45,12 @@ export interface RerankCandidate {
|
|
|
34
45
|
topics?: string;
|
|
35
46
|
/** Raw JSON-encoded decisions array. Used by pre-rerank post-filter. */
|
|
36
47
|
decisions?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Shadow retrieval-feedback boost. Positive-only v0: 1.0 is neutral, values
|
|
50
|
+
* above 1.0 are computed from opened/cited evidence. Slice 15 exposes this
|
|
51
|
+
* factor for `rift why`; ranking integration is deferred to Slice 16.
|
|
52
|
+
*/
|
|
53
|
+
feedback_boost?: number;
|
|
37
54
|
}
|
|
38
55
|
export interface RankedResult {
|
|
39
56
|
id: string;
|
|
@@ -69,4 +86,34 @@ export interface ScoreFactors {
|
|
|
69
86
|
* @returns results sorted by final score descending
|
|
70
87
|
*/
|
|
71
88
|
export declare function rerank(candidates: RerankCandidate[], now?: number): RankedResult[];
|
|
89
|
+
export declare function clampFeedbackBoost(boost: number | undefined): number;
|
|
90
|
+
/**
|
|
91
|
+
* Apply retrieval-feedback boosts to an already-reranked set (Slice 16).
|
|
92
|
+
*
|
|
93
|
+
* `rerank()` deliberately uses a FIXED neutral B_feed term (`+ W_FEED`) so the
|
|
94
|
+
* shadow ledger never moves live ranking. This post-pass is how the gated
|
|
95
|
+
* feedback flag actually applies the learned boost — kept as a separate,
|
|
96
|
+
* flag-gated step so `rerank()` and its golden tests stay byte-for-byte the
|
|
97
|
+
* current behaviour.
|
|
98
|
+
*
|
|
99
|
+
* Why a post-pass is exact: the composite score is a SUM and B_feed appears in
|
|
100
|
+
* exactly one term (`B_feed * W_FEED`). Replacing the old factor `B_old` with a
|
|
101
|
+
* new `B_new` shifts the score by exactly `(B_new - B_old) * W_FEED` — identical
|
|
102
|
+
* to having reranked with `B_new` from the start. `B_old` is whatever the prior
|
|
103
|
+
* pass recorded in `factors.B_feed` (1.0 on the live search path, which never
|
|
104
|
+
* populates `feedback_boost`), so a neutral boost is a guaranteed no-op.
|
|
105
|
+
*
|
|
106
|
+
* Determinism / no-op safety: when no candidate's boost differs from its current
|
|
107
|
+
* factor (the cold-start / empty-ledger case), the input order is returned
|
|
108
|
+
* UNCHANGED — no re-score, no re-sort — so "feedback ranking on, no learned
|
|
109
|
+
* signal yet" is provably indistinguishable from "off".
|
|
110
|
+
*
|
|
111
|
+
* @param ranked - results from {@link rerank}, already sorted by score desc
|
|
112
|
+
* @param boostOf - the learned B_feed for a result, or undefined for neutral
|
|
113
|
+
* @returns the (possibly reordered) results + how many were actually boosted
|
|
114
|
+
*/
|
|
115
|
+
export declare function applyFeedbackBoost(ranked: readonly RankedResult[], boostOf: (r: Pick<RankedResult, "id" | "source_table">) => number | undefined): {
|
|
116
|
+
ranked: RankedResult[];
|
|
117
|
+
appliedCount: number;
|
|
118
|
+
};
|
|
72
119
|
//# sourceMappingURL=reranker.d.ts.map
|
|
@@ -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;AASnD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,MAAS,CAAC;AAGpC;;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;AAkCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,cAAc,CAAC,KAAK,MAAM,GAAG,SAAS,GAC5E;IAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAkBlD"}
|
|
@@ -5,12 +5,21 @@ const W_QUAL = 0.10;
|
|
|
5
5
|
const W_TIER = 0.10;
|
|
6
6
|
const W_FEED = 0.10;
|
|
7
7
|
const W_HYB = 0.05;
|
|
8
|
+
/**
|
|
9
|
+
* Weight of the B_feed term. Exported so the flag-gated retrieval-feedback
|
|
10
|
+
* post-pass ({@link applyFeedbackBoost}) can re-score by the SAME weight the
|
|
11
|
+
* composite uses — keeping "apply feedback as a post-pass" mathematically
|
|
12
|
+
* identical to "rerank with that B_feed".
|
|
13
|
+
*/
|
|
14
|
+
export const W_FEED_WEIGHT = W_FEED;
|
|
8
15
|
/** Small additive boost for just-indexed rows; see B_fresh doc below. */
|
|
9
16
|
const W_FRESH = 0.05;
|
|
10
17
|
/** Half-life (in days) of the short-horizon freshness decay. 14d so a row
|
|
11
18
|
* indexed within a week still carries most of the bump; past ~2 months
|
|
12
19
|
* B_fresh collapses to near-zero and effectively disappears. */
|
|
13
|
-
const FRESH_HALF_LIFE_DAYS = 14;
|
|
20
|
+
export const FRESH_HALF_LIFE_DAYS = 14;
|
|
21
|
+
const FEEDBACK_MIN = 1.0;
|
|
22
|
+
const FEEDBACK_MAX = 1.25;
|
|
14
23
|
// --- Tier boosts (PRD 6.2 + assumptions A2) ---
|
|
15
24
|
const TIER_BOOST = {
|
|
16
25
|
conversations_hot: 1.0,
|
|
@@ -42,7 +51,7 @@ export function rerank(candidates, now = Date.now()) {
|
|
|
42
51
|
factors.S_rec * W_REC +
|
|
43
52
|
factors.S_qual * W_QUAL +
|
|
44
53
|
factors.B_tier * W_TIER +
|
|
45
|
-
|
|
54
|
+
W_FEED + // neutral baseline, preserving the historical fixed B_feed=1.0 term
|
|
46
55
|
factors.B_hyb * W_HYB +
|
|
47
56
|
factors.B_fresh * W_FRESH;
|
|
48
57
|
const bm25_normalized = maxBm25 > 0 ? Math.min(1, c.raw_bm25 / maxBm25) : 0;
|
|
@@ -76,14 +85,65 @@ function computeFactors(c, now, maxBm25) {
|
|
|
76
85
|
const S_qual = computeQuality(c.quality, c.source_table);
|
|
77
86
|
// B_tier: tier boost based on source table
|
|
78
87
|
const B_tier = TIER_BOOST[c.source_table] ?? 1.0;
|
|
79
|
-
// B_feed: feedback
|
|
80
|
-
const B_feed =
|
|
88
|
+
// B_feed: positive-only retrieval feedback. Cold start is exactly neutral.
|
|
89
|
+
const B_feed = clampFeedbackBoost(c.feedback_boost);
|
|
81
90
|
// B_hyb: 1.3 if found in both vector and lexical paths
|
|
82
91
|
const B_hyb = c.retrieval_method === "hybrid" ? 1.3 : 1.0;
|
|
83
92
|
// B_fresh: short-horizon additive freshness boost; see top-of-file doc.
|
|
84
93
|
const B_fresh = computeFreshness(c.indexed_at, now);
|
|
85
94
|
return { S_sim, S_rec, S_qual, B_tier, B_feed, B_hyb, B_fresh };
|
|
86
95
|
}
|
|
96
|
+
export function clampFeedbackBoost(boost) {
|
|
97
|
+
if (typeof boost !== "number" || Number.isNaN(boost))
|
|
98
|
+
return 1.0;
|
|
99
|
+
return Math.max(FEEDBACK_MIN, Math.min(FEEDBACK_MAX, boost));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply retrieval-feedback boosts to an already-reranked set (Slice 16).
|
|
103
|
+
*
|
|
104
|
+
* `rerank()` deliberately uses a FIXED neutral B_feed term (`+ W_FEED`) so the
|
|
105
|
+
* shadow ledger never moves live ranking. This post-pass is how the gated
|
|
106
|
+
* feedback flag actually applies the learned boost — kept as a separate,
|
|
107
|
+
* flag-gated step so `rerank()` and its golden tests stay byte-for-byte the
|
|
108
|
+
* current behaviour.
|
|
109
|
+
*
|
|
110
|
+
* Why a post-pass is exact: the composite score is a SUM and B_feed appears in
|
|
111
|
+
* exactly one term (`B_feed * W_FEED`). Replacing the old factor `B_old` with a
|
|
112
|
+
* new `B_new` shifts the score by exactly `(B_new - B_old) * W_FEED` — identical
|
|
113
|
+
* to having reranked with `B_new` from the start. `B_old` is whatever the prior
|
|
114
|
+
* pass recorded in `factors.B_feed` (1.0 on the live search path, which never
|
|
115
|
+
* populates `feedback_boost`), so a neutral boost is a guaranteed no-op.
|
|
116
|
+
*
|
|
117
|
+
* Determinism / no-op safety: when no candidate's boost differs from its current
|
|
118
|
+
* factor (the cold-start / empty-ledger case), the input order is returned
|
|
119
|
+
* UNCHANGED — no re-score, no re-sort — so "feedback ranking on, no learned
|
|
120
|
+
* signal yet" is provably indistinguishable from "off".
|
|
121
|
+
*
|
|
122
|
+
* @param ranked - results from {@link rerank}, already sorted by score desc
|
|
123
|
+
* @param boostOf - the learned B_feed for a result, or undefined for neutral
|
|
124
|
+
* @returns the (possibly reordered) results + how many were actually boosted
|
|
125
|
+
*/
|
|
126
|
+
export function applyFeedbackBoost(ranked, boostOf) {
|
|
127
|
+
let appliedCount = 0;
|
|
128
|
+
const rescored = ranked.map((r) => {
|
|
129
|
+
const B_new = clampFeedbackBoost(boostOf(r));
|
|
130
|
+
const B_old = r.factors.B_feed;
|
|
131
|
+
if (B_new === B_old)
|
|
132
|
+
return r;
|
|
133
|
+
appliedCount += 1;
|
|
134
|
+
return {
|
|
135
|
+
...r,
|
|
136
|
+
score: r.score + (B_new - B_old) * W_FEED,
|
|
137
|
+
factors: { ...r.factors, B_feed: B_new },
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
// No effective boost → preserve the exact input order (no re-sort), so an
|
|
141
|
+
// empty/neutral ledger can never perturb ranking.
|
|
142
|
+
if (appliedCount === 0)
|
|
143
|
+
return { ranked: rescored, appliedCount };
|
|
144
|
+
rescored.sort((a, b) => b.score - a.score);
|
|
145
|
+
return { ranked: rescored, appliedCount };
|
|
146
|
+
}
|
|
87
147
|
/**
|
|
88
148
|
* B_fresh = exp(-daysSince / FRESH_HALF_LIFE_DAYS).
|
|
89
149
|
*
|
|
@@ -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":"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"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAmC1C,wDAAwD;AACxD,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,MAAM,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AACvE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAqB,EACrB,OAAsB,EAAE;IAExB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE9E,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,qEAAqE;YACrE,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;YACtC,IAAI,GAAG,GAAG,IAAI,OAAO,cAAc,CAAC,OAAO,CAAC,OAAO,OAAO,EAAE,CAAC;YAC7D,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,+EAA+E;IAC/E,0EAA0E;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;IACpC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,IAAI,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7C,IAAI,GAAG,GAAG,IAAI,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,IAAI,OAAO,IAAI,EAAE,CAAC;AAC9B,CAAC"}
|
package/dist/src/server/app.d.ts
CHANGED
|
@@ -25,5 +25,5 @@ export interface App {
|
|
|
25
25
|
* If omitted (e.g. in non-auth tests), only the test_token bypass
|
|
26
26
|
* works for authenticated routes; all other tokens are rejected.
|
|
27
27
|
*/
|
|
28
|
-
export declare function buildApp(config: Config, tokenManager?: TokenManager, jobQueue?: JobQueue, embeddingProvider?: EmbeddingProvider, watchers?: Watcher[], scanner?: Scanner | null, digestSummarizer?: DigestSummarizer, metadataExtractor?: MetadataExtractor, localEmbeddingProvider?: EmbeddingProvider): Promise<App>;
|
|
28
|
+
export declare function buildApp(config: Config, tokenManager?: TokenManager, jobQueue?: JobQueue, embeddingProvider?: EmbeddingProvider, watchers?: Watcher[], scanner?: Scanner | null, digestSummarizer?: DigestSummarizer, metadataExtractor?: MetadataExtractor, localEmbeddingProvider?: EmbeddingProvider, configPath?: string): Promise<App>;
|
|
29
29
|
//# sourceMappingURL=app.d.ts.map
|
|
@@ -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,EAC1C,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC,CA6Vd"}
|
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";
|
|
@@ -40,7 +41,7 @@ import { getBuildInfo } from "./build-info.js";
|
|
|
40
41
|
* If omitted (e.g. in non-auth tests), only the test_token bypass
|
|
41
42
|
* works for authenticated routes; all other tokens are rejected.
|
|
42
43
|
*/
|
|
43
|
-
export async function buildApp(config, tokenManager, jobQueue, embeddingProvider, watchers, scanner, digestSummarizer, metadataExtractor, localEmbeddingProvider) {
|
|
44
|
+
export async function buildApp(config, tokenManager, jobQueue, embeddingProvider, watchers, scanner, digestSummarizer, metadataExtractor, localEmbeddingProvider, configPath) {
|
|
44
45
|
const startTime = Date.now();
|
|
45
46
|
let ready = false;
|
|
46
47
|
const server = Fastify({
|
|
@@ -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("; ");
|
|
@@ -244,7 +255,7 @@ export async function buildApp(config, tokenManager, jobQueue, embeddingProvider
|
|
|
244
255
|
// mode (mode:"lexical", degraded:false) so a no-key install can search its
|
|
245
256
|
// imported archive immediately. This is a first-class mode, not the degraded
|
|
246
257
|
// fallback that a mid-search vector failure produces.
|
|
247
|
-
registerSearchRoute(server, embeddingProvider, localEmbeddingProvider, config.sources, selfReportsRoot);
|
|
258
|
+
registerSearchRoute(server, embeddingProvider, localEmbeddingProvider, config.sources, selfReportsRoot, config.data_paths.data_dir);
|
|
248
259
|
if (embeddingProvider) {
|
|
249
260
|
registerConversationSearchRoute(server, embeddingProvider);
|
|
250
261
|
}
|
|
@@ -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,
|
|
@@ -284,6 +300,7 @@ export async function buildApp(config, tokenManager, jobQueue, embeddingProvider
|
|
|
284
300
|
registerFriendStatusRoute(server, {
|
|
285
301
|
config,
|
|
286
302
|
startTime,
|
|
303
|
+
configPath: configPath ?? null,
|
|
287
304
|
...(jobQueue ? { jobQueue } : {}),
|
|
288
305
|
});
|
|
289
306
|
// --- MCP usage telemetry (unauthenticated; SwiftBar polls every 10s) ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"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"}
|
|
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;AA2FlE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,iBAAiB,GAC3B,IAAI,CA8ON"}
|
|
@@ -18,7 +18,9 @@ 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";
|
|
23
|
+
import { collapseConversationDuplicates, convDedupEnabled, poolHasChunkMarkers, } from "../../retrieval/conversation-dedup.js";
|
|
22
24
|
// --- Request schema ---
|
|
23
25
|
const ConversationSearchRequestSchema = z.object({
|
|
24
26
|
query: z.string().min(1),
|
|
@@ -244,17 +246,34 @@ export function registerConversationSearchRoute(server, embedding) {
|
|
|
244
246
|
});
|
|
245
247
|
// --- Rerank filtered candidates ---
|
|
246
248
|
const ranked = rerank(filtered);
|
|
247
|
-
|
|
249
|
+
// Collapse chunk siblings so one long conversation yields a single
|
|
250
|
+
// representative hit (+section count) instead of flooding top-k. No-op for
|
|
251
|
+
// unchunked/legacy rows (parentKeyForRow returns null). Key the whole deep
|
|
252
|
+
// pool with a projection-only query (no content/embedding); full rows are
|
|
253
|
+
// fetched only for the surviving representatives below.
|
|
254
|
+
const parentKeyById = await fetchParentKeysForRanked(ranked);
|
|
255
|
+
const grouped = groupByParent(ranked, (r) => parentKeyById.get(rankedKey(r)) ?? null);
|
|
256
|
+
// Collapse near-duplicate conversation captures (same task re-captured across
|
|
257
|
+
// sessions = distinct rows groupByParent can't merge) into one representative
|
|
258
|
+
// + a duplicate count. Flag-gated (RIFT_CONV_DEDUP), provable no-op when off.
|
|
259
|
+
// Skipped when the pool has chunk markers (best-chunk text would false-merge).
|
|
260
|
+
const convDedup = convDedupEnabled() && !poolHasChunkMarkers(grouped)
|
|
261
|
+
? collapseConversationDuplicates(grouped.ranked)
|
|
262
|
+
: null;
|
|
263
|
+
const dedupRanked = convDedup?.ranked ?? grouped.ranked;
|
|
264
|
+
const topRanked = dedupRanked.slice(0, top_k);
|
|
248
265
|
const rawRows = await fetchRawRowsForRanked(topRanked);
|
|
249
266
|
// Detail maps directly to the compact contract: "full" includes raw
|
|
250
267
|
// content (and already routes to the cold tier above); "summary" emits
|
|
251
268
|
// only the compact DTO fields. `expand.route` is the unified /search
|
|
252
269
|
// endpoint per the Slice 1 locked contract, so hot/digest hits can be
|
|
253
270
|
// expanded round-trip without re-searching conversations_cold only.
|
|
254
|
-
const topResults = topRanked.map((r) => buildCompactHit(r, rawRows.get(r
|
|
271
|
+
const topResults = topRanked.map((r) => buildCompactHit(r, rawRows.get(rankedKey(r)), {
|
|
255
272
|
query,
|
|
256
273
|
detail,
|
|
257
274
|
expandRoute: "/search",
|
|
275
|
+
siblingCount: grouped.siblingCountById.get(rankedKey(r)),
|
|
276
|
+
duplicateCount: convDedup?.duplicateCountById.get(rankedKey(r)),
|
|
258
277
|
}));
|
|
259
278
|
const response = {
|
|
260
279
|
results: topResults,
|