@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.
- package/dist/src/capture/auto-capture.d.ts +7 -0
- package/dist/src/capture/auto-capture.d.ts.map +1 -1
- package/dist/src/capture/auto-capture.js +27 -11
- package/dist/src/capture/auto-capture.js.map +1 -1
- package/dist/src/capture/observability.d.ts +6 -0
- package/dist/src/capture/observability.d.ts.map +1 -1
- package/dist/src/capture/observability.js +3 -0
- package/dist/src/capture/observability.js.map +1 -1
- package/dist/src/cli/commands/capture.d.ts.map +1 -1
- package/dist/src/cli/commands/capture.js +14 -1
- package/dist/src/cli/commands/capture.js.map +1 -1
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +8 -1
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts +17 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +85 -13
- package/dist/src/jobs/handlers/reconcile.js.map +1 -1
- package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reindex.js +1 -0
- package/dist/src/jobs/handlers/reindex.js.map +1 -1
- package/dist/src/jobs/handlers/save.d.ts.map +1 -1
- package/dist/src/jobs/handlers/save.js +32 -0
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/jobs/queue.d.ts +40 -1
- package/dist/src/jobs/queue.d.ts.map +1 -1
- package/dist/src/jobs/queue.js +448 -26
- package/dist/src/jobs/queue.js.map +1 -1
- package/dist/src/providers/codex-cli-runner.d.ts +14 -0
- package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
- package/dist/src/providers/codex-cli-runner.js +120 -39
- package/dist/src/providers/codex-cli-runner.js.map +1 -1
- package/dist/src/retrieval/locator-boost.d.ts +37 -0
- package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
- package/dist/src/retrieval/locator-boost.js +129 -0
- package/dist/src/retrieval/locator-boost.js.map +1 -0
- package/dist/src/retrieval/report-demotion.d.ts +17 -1
- package/dist/src/retrieval/report-demotion.d.ts.map +1 -1
- package/dist/src/retrieval/report-demotion.js +67 -5
- package/dist/src/retrieval/report-demotion.js.map +1 -1
- package/dist/src/server/routes/compact.d.ts.map +1 -1
- package/dist/src/server/routes/compact.js +4 -1
- package/dist/src/server/routes/compact.js.map +1 -1
- package/dist/src/server/routes/enqueue.d.ts +11 -0
- package/dist/src/server/routes/enqueue.d.ts.map +1 -0
- package/dist/src/server/routes/enqueue.js +17 -0
- package/dist/src/server/routes/enqueue.js.map +1 -0
- package/dist/src/server/routes/ingest.d.ts.map +1 -1
- package/dist/src/server/routes/ingest.js +4 -1
- package/dist/src/server/routes/ingest.js.map +1 -1
- package/dist/src/server/routes/reconcile.d.ts.map +1 -1
- package/dist/src/server/routes/reconcile.js +4 -1
- package/dist/src/server/routes/reconcile.js.map +1 -1
- package/dist/src/server/routes/reindex.d.ts.map +1 -1
- package/dist/src/server/routes/reindex.js +4 -1
- package/dist/src/server/routes/reindex.js.map +1 -1
- package/dist/src/server/routes/save.d.ts.map +1 -1
- package/dist/src/server/routes/save.js +4 -1
- 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 +33 -3
- package/dist/src/server/routes/search.js.map +1 -1
- package/dist/src/server/routes/triage.d.ts.map +1 -1
- package/dist/src/server/routes/triage.js +4 -1
- package/dist/src/server/routes/triage.js.map +1 -1
- package/dist/src/storage/rebuild.d.ts +21 -0
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +135 -66
- package/dist/src/storage/rebuild.js.map +1 -1
- 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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
outputPath,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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":"
|
|
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
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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":"AAAA
|
|
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;
|
|
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
|
|
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;
|
|
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
|