@getrift/rift 0.1.0-beta.16 → 0.1.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/src/capture/auto-capture.d.ts +7 -0
  2. package/dist/src/capture/auto-capture.d.ts.map +1 -1
  3. package/dist/src/capture/auto-capture.js +27 -11
  4. package/dist/src/capture/auto-capture.js.map +1 -1
  5. package/dist/src/capture/observability.d.ts +6 -0
  6. package/dist/src/capture/observability.d.ts.map +1 -1
  7. package/dist/src/capture/observability.js +3 -0
  8. package/dist/src/capture/observability.js.map +1 -1
  9. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  10. package/dist/src/cli/commands/capture.js +14 -1
  11. package/dist/src/cli/commands/capture.js.map +1 -1
  12. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  13. package/dist/src/cli/commands/onboard.js +8 -1
  14. package/dist/src/cli/commands/onboard.js.map +1 -1
  15. package/dist/src/jobs/handlers/reconcile.d.ts +17 -0
  16. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  17. package/dist/src/jobs/handlers/reconcile.js +85 -13
  18. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  19. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
  20. package/dist/src/jobs/handlers/reindex.js +1 -0
  21. package/dist/src/jobs/handlers/reindex.js.map +1 -1
  22. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  23. package/dist/src/jobs/handlers/save.js +32 -0
  24. package/dist/src/jobs/handlers/save.js.map +1 -1
  25. package/dist/src/jobs/queue.d.ts +40 -1
  26. package/dist/src/jobs/queue.d.ts.map +1 -1
  27. package/dist/src/jobs/queue.js +448 -26
  28. package/dist/src/jobs/queue.js.map +1 -1
  29. package/dist/src/providers/codex-cli-runner.d.ts +14 -0
  30. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  31. package/dist/src/providers/codex-cli-runner.js +120 -39
  32. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  33. package/dist/src/retrieval/locator-boost.d.ts +37 -0
  34. package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
  35. package/dist/src/retrieval/locator-boost.js +129 -0
  36. package/dist/src/retrieval/locator-boost.js.map +1 -0
  37. package/dist/src/retrieval/report-demotion.d.ts +17 -1
  38. package/dist/src/retrieval/report-demotion.d.ts.map +1 -1
  39. package/dist/src/retrieval/report-demotion.js +67 -5
  40. package/dist/src/retrieval/report-demotion.js.map +1 -1
  41. package/dist/src/server/routes/compact.d.ts.map +1 -1
  42. package/dist/src/server/routes/compact.js +4 -1
  43. package/dist/src/server/routes/compact.js.map +1 -1
  44. package/dist/src/server/routes/enqueue.d.ts +11 -0
  45. package/dist/src/server/routes/enqueue.d.ts.map +1 -0
  46. package/dist/src/server/routes/enqueue.js +17 -0
  47. package/dist/src/server/routes/enqueue.js.map +1 -0
  48. package/dist/src/server/routes/ingest.d.ts.map +1 -1
  49. package/dist/src/server/routes/ingest.js +4 -1
  50. package/dist/src/server/routes/ingest.js.map +1 -1
  51. package/dist/src/server/routes/reconcile.d.ts.map +1 -1
  52. package/dist/src/server/routes/reconcile.js +4 -1
  53. package/dist/src/server/routes/reconcile.js.map +1 -1
  54. package/dist/src/server/routes/reindex.d.ts.map +1 -1
  55. package/dist/src/server/routes/reindex.js +4 -1
  56. package/dist/src/server/routes/reindex.js.map +1 -1
  57. package/dist/src/server/routes/save.d.ts.map +1 -1
  58. package/dist/src/server/routes/save.js +4 -1
  59. package/dist/src/server/routes/save.js.map +1 -1
  60. package/dist/src/server/routes/search.d.ts.map +1 -1
  61. package/dist/src/server/routes/search.js +33 -3
  62. package/dist/src/server/routes/search.js.map +1 -1
  63. package/dist/src/server/routes/triage.d.ts.map +1 -1
  64. package/dist/src/server/routes/triage.js +4 -1
  65. package/dist/src/server/routes/triage.js.map +1 -1
  66. package/dist/src/storage/rebuild.d.ts +21 -0
  67. package/dist/src/storage/rebuild.d.ts.map +1 -1
  68. package/dist/src/storage/rebuild.js +135 -66
  69. package/dist/src/storage/rebuild.js.map +1 -1
  70. package/package.json +6 -3
@@ -13,45 +13,96 @@ const CODEX_EXECUTABLE_FALLBACK_DIRS = [
13
13
  "/opt/homebrew/bin",
14
14
  "/usr/local/bin",
15
15
  ];
16
+ /** One bounded retry on timeout/termination — see runCodexCliJson. */
17
+ const CODEX_TIMEOUT_RETRY_LIMIT = 1;
18
+ const CODEX_TIMEOUT_RETRY_BACKOFF_MS = 500;
19
+ /**
20
+ * Thrown ONLY when the runner's own timeout timer fires and kills the Codex
21
+ * CLI process (`code === null`, signal SIGTERM) — i.e. the "took too long"
22
+ * case. A signal termination we did NOT initiate (external SIGKILL, OOM,
23
+ * manual interrupt) is deliberately NOT this error; see `runCodexCommand`.
24
+ * Typed (and carrying `timeoutMs`/`signal`) so callers can apply a bounded
25
+ * retry to it specifically, and so the recorded message is diagnosable
26
+ * instead of the opaque "exit null".
27
+ */
28
+ export class CodexCliTimeoutError extends Error {
29
+ timeoutMs;
30
+ signal;
31
+ constructor(timeoutMs, signal, detail = "") {
32
+ const signalPart = signal ? ` by ${signal}` : "";
33
+ super(`Codex CLI timed out after ${timeoutMs}ms (process terminated${signalPart})${detail}`);
34
+ this.name = "CodexCliTimeoutError";
35
+ this.timeoutMs = timeoutMs;
36
+ this.signal = signal;
37
+ }
38
+ }
39
+ function delay(ms) {
40
+ return new Promise((resolve) => setTimeout(resolve, ms));
41
+ }
16
42
  export async function runCodexCliJson(options) {
17
43
  const schemaPath = ensureSchemaFile(options.schema);
18
- const outputPath = path.join(ensureRuntimeTempDir(), `codex-cli-output-${process.pid}-${crypto.randomUUID()}.json`);
19
44
  const timeoutMs = options.timeoutMs ?? 120_000;
20
- const { stdout } = await runCodexCommand([
21
- "exec",
22
- "-",
23
- "--sandbox",
24
- "read-only",
25
- "--color",
26
- "never",
27
- "--skip-git-repo-check",
28
- "--output-schema",
29
- schemaPath,
30
- "--output-last-message",
31
- outputPath,
32
- ], {
33
- cwd: options.cwd ?? process.cwd(),
34
- timeoutMs,
35
- stdinText: options.prompt,
36
- });
37
- const raw = fs.existsSync(outputPath)
38
- ? fs.readFileSync(outputPath, "utf-8").trim()
39
- : stdout.trim();
40
- if (raw.length === 0) {
41
- throw new Error("Codex CLI returned empty output");
42
- }
43
- try {
44
- return {
45
- output: JSON.parse(raw),
46
- cliTag: await resolveCodexCliTag(options.cwd ?? process.cwd()),
47
- };
48
- }
49
- catch (error) {
50
- throw new Error(`Codex CLI returned malformed JSON: ${raw.slice(0, 500)}`, { cause: error });
51
- }
52
- finally {
53
- fs.rmSync(outputPath, { force: true });
45
+ const cwd = options.cwd ?? process.cwd();
46
+ // One bounded retry, and ONLY for timeout/termination (the old "exit null").
47
+ // Triage/preflight calls that get SIGTERM'd are overwhelmingly transient
48
+ // (cold start, brief contention), so a single retry recovers them inside the
49
+ // same run instead of deferring to the next hourly pass. We deliberately do
50
+ // NOT retry malformed JSON, empty output, spawn/ENOENT, or non-zero exits
51
+ // (auth/runtime/oversized) — those are not transient and retrying would only
52
+ // hide the real failure. Raising the timeout is intentionally avoided: it
53
+ // raises cost and hang risk without addressing the transient-kill cause.
54
+ let lastTimeout = null;
55
+ for (let attempt = 0; attempt <= CODEX_TIMEOUT_RETRY_LIMIT; attempt++) {
56
+ const outputPath = path.join(ensureRuntimeTempDir(), `codex-cli-output-${process.pid}-${crypto.randomUUID()}.json`);
57
+ try {
58
+ const { stdout } = await runCodexCommand([
59
+ "exec",
60
+ "-",
61
+ "--sandbox",
62
+ "read-only",
63
+ "--color",
64
+ "never",
65
+ "--skip-git-repo-check",
66
+ "--output-schema",
67
+ schemaPath,
68
+ "--output-last-message",
69
+ outputPath,
70
+ ], {
71
+ cwd,
72
+ timeoutMs,
73
+ stdinText: options.prompt,
74
+ });
75
+ const raw = fs.existsSync(outputPath)
76
+ ? fs.readFileSync(outputPath, "utf-8").trim()
77
+ : stdout.trim();
78
+ if (raw.length === 0) {
79
+ throw new Error("Codex CLI returned empty output");
80
+ }
81
+ try {
82
+ return {
83
+ output: JSON.parse(raw),
84
+ cliTag: await resolveCodexCliTag(cwd),
85
+ };
86
+ }
87
+ catch (error) {
88
+ throw new Error(`Codex CLI returned malformed JSON: ${raw.slice(0, 500)}`, { cause: error });
89
+ }
90
+ }
91
+ catch (error) {
92
+ if (error instanceof CodexCliTimeoutError &&
93
+ attempt < CODEX_TIMEOUT_RETRY_LIMIT) {
94
+ lastTimeout = error;
95
+ await delay(CODEX_TIMEOUT_RETRY_BACKOFF_MS);
96
+ continue;
97
+ }
98
+ throw error;
99
+ }
100
+ finally {
101
+ fs.rmSync(outputPath, { force: true });
102
+ }
54
103
  }
104
+ // Unreachable: the loop either returns or throws on the final attempt.
105
+ throw lastTimeout ?? new Error("Codex CLI failed after retries");
55
106
  }
56
107
  export function resetCodexCliRunnerCacheForTests() {
57
108
  SCHEMA_CACHE.clear();
@@ -89,11 +140,18 @@ async function runCodexCommand(args, options) {
89
140
  let stdinError = null;
90
141
  let stdout = "";
91
142
  let stderr = "";
143
+ // We own the timeout here rather than via spawn's `timeout` option so we
144
+ // can tell a timeout-kill apart from any OTHER signal termination — an
145
+ // external SIGKILL, an OOM kill, or a manual interrupt. Only the timeout
146
+ // path is retryable upstream; misclassifying an external kill as a timeout
147
+ // would retry a non-transient failure and bury its real cause. spawn's own
148
+ // `timeout` would kill the child from libuv WITHOUT flipping this flag, so
149
+ // it is deliberately not used.
150
+ let timedOut = false;
92
151
  let child;
93
152
  try {
94
153
  child = spawnCodexProcess(args, {
95
154
  cwd: options.cwd,
96
- timeoutMs: options.timeoutMs,
97
155
  stdio: ["pipe", "pipe", "pipe"],
98
156
  env: codexCliEnv(),
99
157
  });
@@ -102,7 +160,13 @@ async function runCodexCommand(args, options) {
102
160
  reject(error);
103
161
  return;
104
162
  }
163
+ const timer = setTimeout(() => {
164
+ timedOut = true;
165
+ child.kill("SIGTERM");
166
+ }, options.timeoutMs);
167
+ timer.unref?.();
105
168
  child.on("error", (error) => {
169
+ clearTimeout(timer);
106
170
  reject(new Error(`Codex CLI failed to start: ${error.message}`));
107
171
  });
108
172
  child.stdout?.setEncoding("utf-8");
@@ -119,7 +183,26 @@ async function runCodexCommand(args, options) {
119
183
  });
120
184
  child.stdin.end(options.stdinText ?? "");
121
185
  }
122
- child.on("close", (code) => {
186
+ child.on("close", (code, signal) => {
187
+ clearTimeout(timer);
188
+ const detail = stderr
189
+ ? ` — ${stderr.slice(0, 500)}`
190
+ : stdout
191
+ ? ` — ${stdout.slice(0, 500)}`
192
+ : "";
193
+ if (code === null) {
194
+ // exit null = terminated by a signal, not a clean exit. If OUR timeout
195
+ // fired, it's the transient "took too long" case — typed + retryable,
196
+ // recorded as "timed out after Xms by SIGTERM" instead of the opaque
197
+ // "exit null". Any OTHER signal termination (external kill, OOM, manual
198
+ // interrupt) is NOT a timeout: surface it as-is so it is never retried.
199
+ if (timedOut) {
200
+ reject(new CodexCliTimeoutError(options.timeoutMs, signal, detail));
201
+ return;
202
+ }
203
+ reject(new Error(`Codex CLI was terminated by ${signal ?? "an unknown signal"} (not a timeout)${detail}`));
204
+ return;
205
+ }
123
206
  if (code !== 0) {
124
207
  reject(new Error(`Codex CLI failed (exit ${code})${stderr
125
208
  ? ` — ${stderr.slice(0, 500)}`
@@ -150,7 +233,6 @@ function spawnCodexProcess(args, options) {
150
233
  try {
151
234
  return spawn(launchSpec.command, launchArgs, {
152
235
  cwd: options.cwd,
153
- timeout: options.timeoutMs,
154
236
  stdio: options.stdio,
155
237
  env: options.env,
156
238
  });
@@ -166,7 +248,6 @@ function spawnCodexProcess(args, options) {
166
248
  try {
167
249
  return spawn("/bin/sh", ["-lc", shellCommand], {
168
250
  cwd: options.cwd,
169
- timeout: options.timeoutMs,
170
251
  stdio: options.stdio,
171
252
  env: options.env,
172
253
  });
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli-runner.js","sourceRoot":"","sources":["../../../src/providers/codex-cli-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-cli-runner.js","sourceRoot":"","sources":["../../../src/providers/codex-cli-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { RankedResult } from "./reranker.js";
2
+ /** Tokens >=4 chars, lowercased, stopwords dropped. */
3
+ export declare function tokens(s: string | undefined): string[];
4
+ /** Strip the extension and a leading `YYYY-MM-DD-` date prefix from a filename. */
5
+ export declare function slugFromPath(sourcePath: string | undefined): string;
6
+ /** Did the reference-lookup (locator) intent fire for this query? */
7
+ export declare function locatorIntentFired(query: string): boolean;
8
+ /** The matchable fields of a candidate (never its body). */
9
+ export interface LocatorFields {
10
+ source_path?: string;
11
+ title?: string;
12
+ }
13
+ /**
14
+ * Best per-field query-token overlap ratio across filename / slug / path /
15
+ * title. Range [0,1]. NEVER reads body or BM25 — see THE GUARD above. A row with
16
+ * no path/title (a conversation) scores 0 and is never boosted.
17
+ */
18
+ export declare function locatorFieldScore(query: string, fields: LocatorFields): number;
19
+ /** Default additive weight applied to a row's [0,1] locator field score. */
20
+ export declare const DEFAULT_LOCATOR_BOOST_WEIGHT = 0.5;
21
+ /**
22
+ * Stable, bounded locator reorder. Sorts `ranked` by an effective key of
23
+ * `score + weight * locatorFieldScore`, but PRESERVES each row's displayed
24
+ * score — mirroring `demoteReports`' "reorder, never rewrite scores" contract.
25
+ * Ties (and zero-boost rows) keep their incoming relative order. Returns a new
26
+ * array; the input is untouched.
27
+ */
28
+ export declare function applyLocatorBoost(query: string, ranked: readonly RankedResult[], fieldsById: ReadonlyMap<string, LocatorFields>, weight?: number): RankedResult[];
29
+ /** Minimum field score for a report to be treated as the asked-for target. */
30
+ export declare const DEFAULT_LOCATOR_TARGET_THRESHOLD = 0.5;
31
+ /**
32
+ * Whether a row is a strong-enough field match to be the locator's target — used
33
+ * by the demotion exception to exempt a field-matched report from being pushed
34
+ * behind non-report evidence (the asker explicitly wants that report).
35
+ */
36
+ export declare function isLocatorTarget(query: string, fields: LocatorFields, threshold?: number): boolean;
37
+ //# sourceMappingURL=locator-boost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator-boost.d.ts","sourceRoot":"","sources":["../../../src/retrieval/locator-boost.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAUlD,uDAAuD;AACvD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMtD;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKnE;AAaD,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAmB9E;AAED,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,MAAM,GAAE,MAAqC,GAC5C,YAAY,EAAE,CAShB;AAED,8EAA8E;AAC9E,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,MAAyC,GACnD,OAAO,CAET"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Locator-relevance boost for flat `rift_search` (POST /search), scope:"all".
3
+ *
4
+ * WHY
5
+ * ---
6
+ * The docs-vs-discussions eval (`--explain`) showed reference-lookup queries
7
+ * ("find the doc with the fresh-mac gate findings", "where is the onboard
8
+ * wizard defined") failing: the target file sits in the prod candidate pool by
9
+ * raw retrieval signal (fresh-mac-gate #1, onboard #3) with a maxed BM25, but
10
+ * the reranker discards BM25 magnitude for hybrid hits (`S_sim = raw_sim`), so
11
+ * the formula drops the target out of the top-10; for a report target, the
12
+ * post-rerank report-demotion then shoves it behind every non-report. Ranking +
13
+ * demotion are coupled in the shipped path, so the fix has two coupled levers.
14
+ *
15
+ * THE GUARD (load-bearing)
16
+ * ------------------------
17
+ * The boost is computed from FIELD hits only — filename / slug / path / title —
18
+ * and NEVER from body text or raw BM25. That is deliberate: the decoys the eval
19
+ * flagged (`.rift-rename-allowlist.txt`, `src/main.ts`) only matched the query
20
+ * in their BODY; their path/slug/title share zero tokens with the query, so a
21
+ * field-only boost scores them 0 and cannot promote them. Body BM25 is exactly
22
+ * what floated them, which is why it is excluded here.
23
+ *
24
+ * SAFETY
25
+ * ------
26
+ * Every lever fires ONLY when `locatorIntentFired(query)` is true. Discussion-
27
+ * intent queries (the set doc-intrusion is measured on) never trigger a marker,
28
+ * so these levers cannot regress doc-intrusion — they only reorder locator
29
+ * queries. Pure + dependency-light so the eval harness can ablate them directly.
30
+ */
31
+ import path from "node:path";
32
+ // Promoted from eval/retrieval/reorder-experiments.ts (same token rules) so the
33
+ // shipped scorer and the eval share one tokenizer rather than forking two.
34
+ const STOPWORDS = new Set([
35
+ "the", "and", "for", "with", "find", "doc", "docs", "document", "documents",
36
+ "file", "files", "report", "reports", "where", "what", "which", "did",
37
+ "write", "wrote", "about", "from", "that", "this", "our",
38
+ ]);
39
+ /** Tokens >=4 chars, lowercased, stopwords dropped. */
40
+ export function tokens(s) {
41
+ if (!s)
42
+ return [];
43
+ return s
44
+ .toLowerCase()
45
+ .split(/[^a-z0-9]+/)
46
+ .filter((t) => t.length >= 4 && !STOPWORDS.has(t));
47
+ }
48
+ /** Strip the extension and a leading `YYYY-MM-DD-` date prefix from a filename. */
49
+ export function slugFromPath(sourcePath) {
50
+ if (!sourcePath)
51
+ return "";
52
+ const base = path.basename(sourcePath);
53
+ const noExt = base.replace(/\.[a-z0-9]+$/i, "");
54
+ return noExt.replace(/^\d{4}-\d{2}-\d{2}-/, "");
55
+ }
56
+ /**
57
+ * Reference-lookup intent markers. Plain "find the doc/file/report where X is"
58
+ * phrasing. Conservative on purpose: a false negative just leaves a query on the
59
+ * current (already-shipped) path; a false positive only reorders that one query.
60
+ */
61
+ const LOCATOR_MARKERS = [
62
+ "find the doc", "find the report", "find the file", "the doc with",
63
+ "which file", "where is", "where did i write", "where did i put",
64
+ "write up", "write-up", "writeup", "findings", "ledger",
65
+ ];
66
+ /** Did the reference-lookup (locator) intent fire for this query? */
67
+ export function locatorIntentFired(query) {
68
+ const q = (query || "").toLowerCase();
69
+ return LOCATOR_MARKERS.some((m) => q.includes(m));
70
+ }
71
+ /**
72
+ * Best per-field query-token overlap ratio across filename / slug / path /
73
+ * title. Range [0,1]. NEVER reads body or BM25 — see THE GUARD above. A row with
74
+ * no path/title (a conversation) scores 0 and is never boosted.
75
+ */
76
+ export function locatorFieldScore(query, fields) {
77
+ const qt = tokens(query);
78
+ if (qt.length === 0)
79
+ return 0;
80
+ const filename = fields.source_path ? path.basename(fields.source_path) : "";
81
+ const haystacks = [
82
+ filename,
83
+ slugFromPath(fields.source_path),
84
+ fields.source_path ?? "",
85
+ fields.title ?? "",
86
+ ];
87
+ let best = 0;
88
+ for (const text of haystacks) {
89
+ const hay = new Set(tokens(text));
90
+ if (hay.size === 0)
91
+ continue;
92
+ let hits = 0;
93
+ for (const t of qt)
94
+ if (hay.has(t))
95
+ hits++;
96
+ best = Math.max(best, hits / qt.length);
97
+ }
98
+ return best;
99
+ }
100
+ /** Default additive weight applied to a row's [0,1] locator field score. */
101
+ export const DEFAULT_LOCATOR_BOOST_WEIGHT = 0.5;
102
+ /**
103
+ * Stable, bounded locator reorder. Sorts `ranked` by an effective key of
104
+ * `score + weight * locatorFieldScore`, but PRESERVES each row's displayed
105
+ * score — mirroring `demoteReports`' "reorder, never rewrite scores" contract.
106
+ * Ties (and zero-boost rows) keep their incoming relative order. Returns a new
107
+ * array; the input is untouched.
108
+ */
109
+ export function applyLocatorBoost(query, ranked, fieldsById, weight = DEFAULT_LOCATOR_BOOST_WEIGHT) {
110
+ return ranked
111
+ .map((r, i) => {
112
+ const f = fieldsById.get(r.id);
113
+ const fs = f ? locatorFieldScore(query, f) : 0;
114
+ return { r, i, key: r.score + weight * fs };
115
+ })
116
+ .sort((a, b) => b.key - a.key || a.i - b.i)
117
+ .map(({ r }) => r);
118
+ }
119
+ /** Minimum field score for a report to be treated as the asked-for target. */
120
+ export const DEFAULT_LOCATOR_TARGET_THRESHOLD = 0.5;
121
+ /**
122
+ * Whether a row is a strong-enough field match to be the locator's target — used
123
+ * by the demotion exception to exempt a field-matched report from being pushed
124
+ * behind non-report evidence (the asker explicitly wants that report).
125
+ */
126
+ export function isLocatorTarget(query, fields, threshold = DEFAULT_LOCATOR_TARGET_THRESHOLD) {
127
+ return locatorFieldScore(query, fields) >= threshold;
128
+ }
129
+ //# sourceMappingURL=locator-boost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator-boost.js","sourceRoot":"","sources":["../../../src/retrieval/locator-boost.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,26 @@ export declare function isReportHit(sourceTable: TableName, sourcePath: string |
21
21
  * simply absent and treated as non-reports by the caller.
22
22
  */
23
23
  export declare function fetchDocSourcePaths(ranked: readonly RankedResult[]): Promise<Map<string, string>>;
24
+ /**
25
+ * Like {@link fetchDocSourcePaths} but also pulls `metadata.title`. Used by the
26
+ * locator boost, which scores query overlap against path/slug/filename/title.
27
+ * Conversations and digests are skipped — a locator wants a file, not a
28
+ * conversation. Keep this projection narrow: the boost must never fetch or
29
+ * inspect document bodies.
30
+ */
31
+ export declare function fetchDocFields(ranked: readonly RankedResult[]): Promise<Map<string, {
32
+ source_path?: string;
33
+ title?: string;
34
+ }>>;
24
35
  /**
25
36
  * Stable-reorder `ranked` so report/snapshot docs sort after all non-report
26
37
  * hits, preserving relative order within each group. Applies to `scope:"all"`
27
38
  * only; every other scope is a no-op. Scores are carried through unchanged.
39
+ *
40
+ * `isExempt` (optional) is the locator demotion-exception hook: a report for
41
+ * which `isExempt(id)` returns true is treated as kept (NOT demoted), because
42
+ * the query explicitly asked to locate that report. Omitting it preserves the
43
+ * exact prior behaviour — every report is demoted.
28
44
  */
29
- export declare function demoteReports(ranked: readonly RankedResult[], sourcePathById: ReadonlyMap<string, string>, scope: SearchScope, selfReportsRoot?: string): RankedResult[];
45
+ export declare function demoteReports(ranked: readonly RankedResult[], sourcePathById: ReadonlyMap<string, string>, scope: SearchScope, selfReportsRoot?: string, isExempt?: (id: string) => boolean): RankedResult[];
30
46
  //# sourceMappingURL=report-demotion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-demotion.d.ts","sourceRoot":"","sources":["../../../src/retrieval/report-demotion.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyB9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,KAAK,EAAE,WAAW,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,YAAY,EAAE,CAYhB"}
1
+ {"version":3,"file":"report-demotion.d.ts","sourceRoot":"","sources":["../../../src/retrieval/report-demotion.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyB9B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAoChE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,KAAK,EAAE,WAAW,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GACjC,YAAY,EAAE,CAehB"}
@@ -22,9 +22,15 @@
22
22
  * `projects`) is a no-op: those are deliberate document searches where a
23
23
  * report (incl. a client's own `reports/` folder) may be exactly what the
24
24
  * asker wants, and we have no eval signal that demoting there is correct.
25
- * - No named-report exception, no discussion/doc tiebreak, no reference-
26
- * lookup gate: those were unproven (or, for the tiebreak, actively wrong
27
- * for locator queries) in the eval and are intentionally left out.
25
+ * - No named-report exception and no discussion/doc tiebreak: those were
26
+ * unproven (or, for the tiebreak, actively wrong for locator queries) in
27
+ * the eval and are intentionally left out.
28
+ *
29
+ * PR2 add-on: {@link demoteReports} takes an optional `isExempt(id)` hook that
30
+ * exempts a single field-matched report TARGET from demotion when a locator
31
+ * query explicitly asked to find it. The hook is supplied only by the flag-
32
+ * gated locator path in the route ({@link ../server/routes/search.ts}); omitted
33
+ * (the default), demotion behaves exactly as the proven slice above.
28
34
  */
29
35
  import { isSnapshotPath } from "./current-truth.js";
30
36
  import { getTable } from "../storage/tables.js";
@@ -83,18 +89,74 @@ export async function fetchDocSourcePaths(ranked) {
83
89
  }
84
90
  return out;
85
91
  }
92
+ /**
93
+ * Like {@link fetchDocSourcePaths} but also pulls `metadata.title`. Used by the
94
+ * locator boost, which scores query overlap against path/slug/filename/title.
95
+ * Conversations and digests are skipped — a locator wants a file, not a
96
+ * conversation. Keep this projection narrow: the boost must never fetch or
97
+ * inspect document bodies.
98
+ */
99
+ export async function fetchDocFields(ranked) {
100
+ const byTable = new Map();
101
+ for (const r of ranked) {
102
+ if (!isDocTable(r.source_table))
103
+ continue;
104
+ const arr = byTable.get(r.source_table) ?? [];
105
+ arr.push(r.id);
106
+ byTable.set(r.source_table, arr);
107
+ }
108
+ const out = new Map();
109
+ for (const [table, ids] of byTable) {
110
+ if (ids.length === 0)
111
+ continue;
112
+ const quoted = ids.map((i) => `'${i.replace(/'/g, "''")}'`).join(",");
113
+ const rows = (await getTable(table)
114
+ .query()
115
+ .where(`id IN (${quoted})`)
116
+ .select(["id", "source_path", "metadata"])
117
+ .limit(ids.length)
118
+ .toArray());
119
+ for (const row of rows) {
120
+ if (typeof row["id"] !== "string")
121
+ continue;
122
+ const entry = {};
123
+ if (typeof row["source_path"] === "string")
124
+ entry.source_path = row["source_path"];
125
+ let title;
126
+ const meta = row["metadata"];
127
+ if (typeof meta === "string") {
128
+ try {
129
+ title = JSON.parse(meta).title;
130
+ }
131
+ catch {
132
+ /* ignore malformed metadata */
133
+ }
134
+ }
135
+ if (title !== undefined)
136
+ entry.title = title;
137
+ out.set(row["id"], entry);
138
+ }
139
+ }
140
+ return out;
141
+ }
86
142
  /**
87
143
  * Stable-reorder `ranked` so report/snapshot docs sort after all non-report
88
144
  * hits, preserving relative order within each group. Applies to `scope:"all"`
89
145
  * only; every other scope is a no-op. Scores are carried through unchanged.
146
+ *
147
+ * `isExempt` (optional) is the locator demotion-exception hook: a report for
148
+ * which `isExempt(id)` returns true is treated as kept (NOT demoted), because
149
+ * the query explicitly asked to locate that report. Omitting it preserves the
150
+ * exact prior behaviour — every report is demoted.
90
151
  */
91
- export function demoteReports(ranked, sourcePathById, scope, selfReportsRoot) {
152
+ export function demoteReports(ranked, sourcePathById, scope, selfReportsRoot, isExempt) {
92
153
  if (scope !== "all")
93
154
  return [...ranked];
94
155
  const kept = [];
95
156
  const demoted = [];
96
157
  for (const r of ranked) {
97
- if (isReportHit(r.source_table, sourcePathById.get(r.id), selfReportsRoot))
158
+ if (isReportHit(r.source_table, sourcePathById.get(r.id), selfReportsRoot) &&
159
+ !isExempt?.(r.id))
98
160
  demoted.push(r);
99
161
  else
100
162
  kept.push(r);
@@ -1 +1 @@
1
- {"version":3,"file":"report-demotion.js","sourceRoot":"","sources":["../../../src/retrieval/report-demotion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-demotion.js","sourceRoot":"","sources":["../../../src/retrieval/report-demotion.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAMf,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CAuDN"}
1
+ {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../../src/server/routes/compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAMf,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CAwDN"}
@@ -18,6 +18,7 @@
18
18
  import { z } from "zod";
19
19
  import { toJobStatusView } from "../../jobs/types.js";
20
20
  import { hasEligibleRollback } from "../../jobs/handlers/compact.js";
21
+ import { enqueueJob } from "./enqueue.js";
21
22
  const CompactRequestSchema = z
22
23
  .object({
23
24
  rollback: z.boolean().default(false),
@@ -60,7 +61,9 @@ export function registerCompactRoute(server, queue, dataDir) {
60
61
  if (payload.idempotency_key !== undefined) {
61
62
  opts.idempotency_key = payload.idempotency_key;
62
63
  }
63
- const result = await queue.create("compact", opts);
64
+ const result = await enqueueJob(reply, queue, "compact", opts);
65
+ if (!result)
66
+ return;
64
67
  if ("conflict" in result) {
65
68
  return reply.code(409).send({ error: "conflict" });
66
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../../src/server/routes/compact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../../src/server/routes/compact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FastifyReply } from "fastify";
2
+ import type { JobQueue } from "../../jobs/queue.js";
3
+ import type { CreateJobResult, JobType } from "../../jobs/types.js";
4
+ export interface QueueCreateOptions {
5
+ idempotency_key?: string;
6
+ payload?: unknown;
7
+ }
8
+ export declare function enqueueJob(reply: FastifyReply, queue: JobQueue, type: JobType, opts?: QueueCreateOptions): Promise<CreateJobResult | {
9
+ conflict: true;
10
+ } | undefined>;
11
+ //# sourceMappingURL=enqueue.d.ts.map