agent-working-memory 0.17.0 → 0.19.0

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 (165) hide show
  1. package/README.md +8 -5
  2. package/dist/adapters/common.d.ts +34 -0
  3. package/dist/adapters/common.d.ts.map +1 -1
  4. package/dist/adapters/common.js +528 -446
  5. package/dist/adapters/common.js.map +1 -1
  6. package/dist/api/routes.d.ts.map +1 -1
  7. package/dist/api/routes.js +19 -0
  8. package/dist/api/routes.js.map +1 -1
  9. package/dist/cli/migrate.d.ts.map +1 -1
  10. package/dist/cli/migrate.js +31 -29
  11. package/dist/cli/migrate.js.map +1 -1
  12. package/dist/core/asked-value.d.ts +37 -0
  13. package/dist/core/asked-value.d.ts.map +1 -0
  14. package/dist/core/asked-value.js +77 -0
  15. package/dist/core/asked-value.js.map +1 -0
  16. package/dist/core/conflicts.d.ts +89 -0
  17. package/dist/core/conflicts.d.ts.map +1 -0
  18. package/dist/core/conflicts.js +267 -0
  19. package/dist/core/conflicts.js.map +1 -0
  20. package/dist/core/embeddings.d.ts +14 -2
  21. package/dist/core/embeddings.d.ts.map +1 -1
  22. package/dist/core/embeddings.js +32 -10
  23. package/dist/core/embeddings.js.map +1 -1
  24. package/dist/core/format-recall.d.ts +21 -1
  25. package/dist/core/format-recall.d.ts.map +1 -1
  26. package/dist/core/format-recall.js +60 -5
  27. package/dist/core/format-recall.js.map +1 -1
  28. package/dist/core/ml-worker.d.ts +24 -1
  29. package/dist/core/ml-worker.d.ts.map +1 -1
  30. package/dist/core/ml-worker.js +165 -4
  31. package/dist/core/ml-worker.js.map +1 -1
  32. package/dist/core/model-daemon-client.d.ts +77 -0
  33. package/dist/core/model-daemon-client.d.ts.map +1 -0
  34. package/dist/core/model-daemon-client.js +383 -0
  35. package/dist/core/model-daemon-client.js.map +1 -0
  36. package/dist/core/model-daemon-server.d.ts +71 -0
  37. package/dist/core/model-daemon-server.d.ts.map +1 -0
  38. package/dist/core/model-daemon-server.js +363 -0
  39. package/dist/core/model-daemon-server.js.map +1 -0
  40. package/dist/core/model-daemon.d.ts +137 -0
  41. package/dist/core/model-daemon.d.ts.map +1 -0
  42. package/dist/core/model-daemon.js +231 -0
  43. package/dist/core/model-daemon.js.map +1 -0
  44. package/dist/core/query-expander.d.ts +5 -0
  45. package/dist/core/query-expander.d.ts.map +1 -1
  46. package/dist/core/query-expander.js +3 -2
  47. package/dist/core/query-expander.js.map +1 -1
  48. package/dist/core/recall-config.d.ts +1 -1
  49. package/dist/core/recall-config.d.ts.map +1 -1
  50. package/dist/core/recall-config.js +5 -0
  51. package/dist/core/recall-config.js.map +1 -1
  52. package/dist/core/rerank-window.d.ts +7 -2
  53. package/dist/core/rerank-window.d.ts.map +1 -1
  54. package/dist/core/rerank-window.js +9 -4
  55. package/dist/core/rerank-window.js.map +1 -1
  56. package/dist/core/rerank2.d.ts +52 -2
  57. package/dist/core/rerank2.d.ts.map +1 -1
  58. package/dist/core/rerank2.js +60 -3
  59. package/dist/core/rerank2.js.map +1 -1
  60. package/dist/core/reranker.d.ts +19 -0
  61. package/dist/core/reranker.d.ts.map +1 -1
  62. package/dist/core/reranker.js +90 -13
  63. package/dist/core/reranker.js.map +1 -1
  64. package/dist/core/trust.d.ts +32 -0
  65. package/dist/core/trust.d.ts.map +1 -0
  66. package/dist/core/trust.js +66 -0
  67. package/dist/core/trust.js.map +1 -0
  68. package/dist/core/validity.d.ts +21 -0
  69. package/dist/core/validity.d.ts.map +1 -0
  70. package/dist/core/validity.js +41 -0
  71. package/dist/core/validity.js.map +1 -0
  72. package/dist/core/whoami.d.ts +3 -0
  73. package/dist/core/whoami.d.ts.map +1 -1
  74. package/dist/core/whoami.js +14 -0
  75. package/dist/core/whoami.js.map +1 -1
  76. package/dist/core/write-pipeline.d.ts +48 -0
  77. package/dist/core/write-pipeline.d.ts.map +1 -1
  78. package/dist/core/write-pipeline.js +80 -3
  79. package/dist/core/write-pipeline.js.map +1 -1
  80. package/dist/engine/activation.d.ts.map +1 -1
  81. package/dist/engine/activation.js +27 -4
  82. package/dist/engine/activation.js.map +1 -1
  83. package/dist/engine/consolidation.d.ts.map +1 -1
  84. package/dist/engine/consolidation.js +53 -4
  85. package/dist/engine/consolidation.js.map +1 -1
  86. package/dist/hooks/prime-query.d.ts +57 -0
  87. package/dist/hooks/prime-query.d.ts.map +1 -0
  88. package/dist/hooks/prime-query.js +388 -0
  89. package/dist/hooks/prime-query.js.map +1 -0
  90. package/dist/hooks/prime.d.ts +8 -0
  91. package/dist/hooks/prime.d.ts.map +1 -1
  92. package/dist/hooks/prime.js +21 -2
  93. package/dist/hooks/prime.js.map +1 -1
  94. package/dist/hooks/sidecar.d.ts +18 -0
  95. package/dist/hooks/sidecar.d.ts.map +1 -1
  96. package/dist/hooks/sidecar.js +58 -2
  97. package/dist/hooks/sidecar.js.map +1 -1
  98. package/dist/index.js +15 -3
  99. package/dist/index.js.map +1 -1
  100. package/dist/mcp.js +157 -104
  101. package/dist/mcp.js.map +1 -1
  102. package/dist/model-daemon.d.ts +8 -0
  103. package/dist/model-daemon.d.ts.map +1 -0
  104. package/dist/model-daemon.js +45 -0
  105. package/dist/model-daemon.js.map +1 -0
  106. package/dist/storage/factory.d.ts.map +1 -1
  107. package/dist/storage/factory.js +5 -0
  108. package/dist/storage/factory.js.map +1 -1
  109. package/dist/storage/pglite-schema.d.ts.map +1 -1
  110. package/dist/storage/pglite-schema.js +176 -170
  111. package/dist/storage/pglite-schema.js.map +1 -1
  112. package/dist/storage/pglite.d.ts +5 -0
  113. package/dist/storage/pglite.d.ts.map +1 -1
  114. package/dist/storage/pglite.js +165 -153
  115. package/dist/storage/pglite.js.map +1 -1
  116. package/dist/storage/postgres.d.ts +5 -0
  117. package/dist/storage/postgres.d.ts.map +1 -1
  118. package/dist/storage/postgres.js +165 -153
  119. package/dist/storage/postgres.js.map +1 -1
  120. package/dist/storage/sqlite.d.ts +22 -0
  121. package/dist/storage/sqlite.d.ts.map +1 -1
  122. package/dist/storage/sqlite.js +415 -363
  123. package/dist/storage/sqlite.js.map +1 -1
  124. package/dist/types/engram.d.ts +33 -0
  125. package/dist/types/engram.d.ts.map +1 -1
  126. package/dist/types/engram.js.map +1 -1
  127. package/package.json +1 -1
  128. package/plugin/.claude-plugin/plugin.json +1 -1
  129. package/plugin/README.md +1 -1
  130. package/plugin/bin/awm-mcp-launcher.cjs +2 -2
  131. package/plugin/skills/awm-memory/SKILL.md +11 -2
  132. package/src/adapters/common.ts +881 -802
  133. package/src/api/routes.ts +20 -0
  134. package/src/cli/migrate.ts +309 -307
  135. package/src/core/asked-value.ts +74 -0
  136. package/src/core/conflicts.ts +280 -0
  137. package/src/core/embeddings.ts +35 -10
  138. package/src/core/format-recall.ts +83 -25
  139. package/src/core/ml-worker.ts +458 -281
  140. package/src/core/model-daemon-client.ts +374 -0
  141. package/src/core/model-daemon-server.ts +344 -0
  142. package/src/core/model-daemon.ts +243 -0
  143. package/src/core/query-expander.ts +127 -126
  144. package/src/core/recall-config.ts +5 -0
  145. package/src/core/rerank-window.ts +164 -159
  146. package/src/core/rerank2.ts +143 -82
  147. package/src/core/reranker.ts +92 -12
  148. package/src/core/trust.ts +65 -0
  149. package/src/core/validity.ts +47 -0
  150. package/src/core/whoami.ts +136 -120
  151. package/src/core/write-pipeline.ts +119 -3
  152. package/src/engine/activation.ts +27 -4
  153. package/src/engine/consolidation.ts +950 -899
  154. package/src/hooks/prime-query.ts +375 -0
  155. package/src/hooks/prime.ts +25 -2
  156. package/src/hooks/sidecar.ts +57 -3
  157. package/src/index.ts +258 -248
  158. package/src/mcp.ts +1529 -1475
  159. package/src/model-daemon.ts +48 -0
  160. package/src/storage/factory.ts +25 -19
  161. package/src/storage/pglite-schema.ts +199 -193
  162. package/src/storage/pglite.ts +1513 -1498
  163. package/src/storage/postgres.ts +1613 -1598
  164. package/src/storage/sqlite.ts +2069 -2019
  165. package/src/types/engram.ts +30 -0
@@ -0,0 +1,231 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Shared model daemon: what the client and the daemon agree on.
5
+ *
6
+ * Every AWM MCP process used to load its own three ONNX models (embedder, cross-encoder,
7
+ * query expander): about 1.1 GB per process even with the input-shape caps, so six
8
+ * Claude Code sessions held 6+ GB of identical weights and arenas. With
9
+ * AWM_MODEL_DAEMON=1, one per-user process holds the models and every AWM process on the
10
+ * machine sends inference to it over a local socket. Store, engine and recall stay in
11
+ * each process; only the three dispatch calls in ml-worker.ts cross the socket.
12
+ *
13
+ * This module has no model imports, so a client that only talks to the daemon never
14
+ * loads @huggingface/transformers' models itself.
15
+ *
16
+ * - The daemon is keyed by a FINGERPRINT of the inference config the model modules
17
+ * actually captured (model ids, dtype, dimensions, pooling, shape caps), the model
18
+ * cache dir, the AWM version and package root, the user and the run dir. Two installs,
19
+ * two versions or two configs get separate daemons and can never mix vectors. The
20
+ * spawned daemon is given the client's captured config as env, so a value applied
21
+ * after the modules loaded (a .env file) cannot make the two disagree; the handshake
22
+ * checks the fingerprint again.
23
+ * - Transport: a named pipe on Windows, a unix socket in ~/.awm/run (0700) elsewhere.
24
+ * - Authentication is mutual, by HMAC over two nonces with the token the daemon wrote to
25
+ * the run dir (0600). The token itself never crosses the socket, so a process that
26
+ * took the pipe name first learns nothing and is refused by the client.
27
+ * - Frames are newline-delimited JSON. JSON.stringify escapes every newline inside a
28
+ * value, so a newline only ever ends a frame. Before authentication a connection may
29
+ * send HELLO_MAX_BYTES; after it, MAX_FRAME_BYTES.
30
+ */
31
+ import { createHash, createHmac, timingSafeEqual } from 'node:crypto';
32
+ import { statSync } from 'node:fs';
33
+ import { createRequire } from 'node:module';
34
+ import { homedir, userInfo } from 'node:os';
35
+ import { dirname, join, relative, resolve, isAbsolute } from 'node:path';
36
+ import { fileURLToPath } from 'node:url';
37
+ import { VERSION } from '../version.js';
38
+ export const PROTOCOL_VERSION = 2;
39
+ export const MAX_FRAME_BYTES = 64 * 1024 * 1024;
40
+ export const HELLO_MAX_BYTES = 4 * 1024;
41
+ /** A step must finish within this (client run timer and daemon watchdog both). */
42
+ export const REQUEST_TIMEOUT_MS = 120_000;
43
+ /** The first warm can include a first-run model download (client and daemon both). */
44
+ export const WARM_TIMEOUT_MS = 10 * 60_000;
45
+ /** Exit code of a daemon whose own fingerprint is not the one its spawner expected. */
46
+ export const EXIT_FINGERPRINT_DRIFT = 3;
47
+ /** Longest unix socket path every platform accepts (macOS: 104 bytes with the NUL). */
48
+ const UNIX_SOCKET_MAX = 103;
49
+ /** Env names the config is passed to a spawned daemon as. */
50
+ const CONFIG_ENV = {
51
+ embedModel: 'AWM_EMBED_MODEL', embedDims: 'AWM_EMBED_DIMS', embedPooling: 'AWM_EMBED_POOLING',
52
+ embedBatch: 'AWM_EMBED_BATCH', rerankModel: 'AWM_RERANKER_MODEL', rerankDtype: 'AWM_RERANKER_DTYPE',
53
+ rerankBatch: 'AWM_RERANK_BATCH', rerankQueryTokens: 'AWM_RERANK_QUERY_TOKENS',
54
+ };
55
+ export function configEnv(config) {
56
+ const env = {};
57
+ for (const [k, name] of Object.entries(CONFIG_ENV))
58
+ if (config[k] !== undefined)
59
+ env[name] = String(config[k]);
60
+ return env;
61
+ }
62
+ function safeUser() {
63
+ try {
64
+ return userInfo().username;
65
+ }
66
+ catch {
67
+ return process.env.USERNAME ?? process.env.USER ?? '';
68
+ }
69
+ }
70
+ export function packageRoot() {
71
+ // src/core/model-daemon.ts (dev) and dist/core/model-daemon.js (build): two levels up.
72
+ return resolve(join(dirname(fileURLToPath(import.meta.url)), '..', '..'));
73
+ }
74
+ export function defaultRunDir(env = process.env) {
75
+ return env.AWM_RUN_DIR || join(homedir(), '.awm', 'run');
76
+ }
77
+ /**
78
+ * Size and mtime of the modules whose code decides what inference returns. A rebuild or
79
+ * a dev edit without a version bump is a different daemon, not the old one serving old
80
+ * code to new clients. The client and the daemon run from the same files, so they agree.
81
+ */
82
+ export function codeStamp() {
83
+ const here = dirname(fileURLToPath(import.meta.url));
84
+ const ext = import.meta.url.endsWith('.ts') ? '.ts' : '.js';
85
+ const files = ['embeddings', 'reranker', 'query-expander', 'model-daemon', 'model-daemon-server', 'ml-worker', 'rerank-window']
86
+ .map(m => { try {
87
+ const s = statSync(join(here, m + ext));
88
+ return `${m}:${s.size}:${Math.floor(s.mtimeMs)}`;
89
+ }
90
+ catch {
91
+ return `${m}:-`;
92
+ } });
93
+ // An `npm update` of the inference libraries changes results without an AWM version bump.
94
+ const req = createRequire(import.meta.url);
95
+ const libs = ['@huggingface/transformers', 'onnxruntime-node'].map(name => {
96
+ // Not `${name}/package.json`: a package's "exports" may not expose it.
97
+ try {
98
+ for (let dir = dirname(req.resolve(name)); dir !== dirname(dir); dir = dirname(dir)) {
99
+ try {
100
+ const pkg = req(join(dir, 'package.json'));
101
+ if (pkg.name === name)
102
+ return `${name}@${pkg.version}`;
103
+ }
104
+ catch { /* keep walking up */ }
105
+ }
106
+ }
107
+ catch { /* not installed */ }
108
+ return `${name}@-`;
109
+ });
110
+ return [...files, ...libs].join(',');
111
+ }
112
+ /** 16 hex chars. Everything is a parameter so tests can compare configs in one process. */
113
+ export function modelDaemonFingerprint(config, o = {}) {
114
+ const env = o.env ?? process.env;
115
+ const parts = [
116
+ `protocol=${PROTOCOL_VERSION}`, `version=${o.version ?? VERSION}`, `root=${o.root ?? packageRoot()}`,
117
+ `code=${o.code ?? codeStamp()}`,
118
+ `user=${safeUser()}`, `home=${homedir()}`, `run=${defaultRunDir(env)}`,
119
+ // Read lazily by model-cache.ts, so the env at this point is the env it would use.
120
+ `cache=${env.AWM_CACHE_DIR || env.HF_HOME || ''}`,
121
+ ...Object.keys(config).sort().map(k => `${k}=${config[k]}`),
122
+ ];
123
+ return createHash('sha256').update(parts.join('\n')).digest('hex').slice(0, 16);
124
+ }
125
+ export function modelDaemonPaths(fingerprint, runDir = defaultRunDir()) {
126
+ const base = join(runDir, `models-${fingerprint}`);
127
+ return {
128
+ runDir,
129
+ // Windows pipe names are one machine-wide namespace; the fingerprint includes the
130
+ // user, home and run dir, so two users never share a name by accident.
131
+ address: process.platform === 'win32' ? `\\\\.\\pipe\\awm-models-${fingerprint}` : `${base}.sock`,
132
+ token: `${base}.token`,
133
+ lock: `${base}.lock`,
134
+ log: `${base}.log`,
135
+ };
136
+ }
137
+ /** A unix socket path the OS will refuse, or null. */
138
+ export function addressProblem(paths) {
139
+ if (process.platform === 'win32')
140
+ return null;
141
+ return Buffer.byteLength(paths.address) > UNIX_SOCKET_MAX
142
+ ? `socket path is ${Buffer.byteLength(paths.address)} bytes (max ${UNIX_SOCKET_MAX}); set AWM_RUN_DIR to a shorter directory you own (not a shared one like /tmp)`
143
+ : null;
144
+ }
145
+ /**
146
+ * A run dir another user can write to, or that this user does not own, is refused off
147
+ * Windows: the token and the log are written there, and another user could plant a
148
+ * symlink in their place. (On Windows the dir sits under the user's profile, whose ACL
149
+ * already excludes other users.)
150
+ */
151
+ export function runDirProblem(runDir) {
152
+ if (process.platform === 'win32') {
153
+ // No uid to compare. The profile's ACL excludes other users; a dir outside it
154
+ // (C:\Users\Public, a shared drive) may not.
155
+ const rel = relative(homedir(), resolve(runDir));
156
+ return rel && (rel.startsWith('..') || isAbsolute(rel)) ? `run dir ${runDir} is outside your user profile` : null;
157
+ }
158
+ if (typeof process.getuid !== 'function')
159
+ return null;
160
+ try {
161
+ const s = statSync(runDir);
162
+ if (s.uid !== process.getuid())
163
+ return `run dir ${runDir} is not owned by this user`;
164
+ if (s.mode & 0o022)
165
+ return `run dir ${runDir} is writable by other users`;
166
+ return null;
167
+ }
168
+ catch (err) {
169
+ return `run dir ${runDir}: ${err.message}`;
170
+ }
171
+ }
172
+ export function proof(token, role, clientNonce, daemonNonce, fingerprint) {
173
+ return createHmac('sha256', token).update(`${role}|${clientNonce}|${daemonNonce}|${fingerprint}`).digest('hex');
174
+ }
175
+ export function proofMatches(expected, got) {
176
+ if (typeof got !== 'string' || got.length !== expected.length)
177
+ return false;
178
+ return timingSafeEqual(Buffer.from(expected), Buffer.from(got));
179
+ }
180
+ /**
181
+ * Splits a byte stream into frames. push() returns false when the unterminated tail is
182
+ * over `limit`. Chunks without a newline are kept as a list and only the new chunk is
183
+ * searched, so a long frame arriving in many chunks costs linear time: appending to one
184
+ * string and searching it again would copy the whole buffer on every chunk.
185
+ */
186
+ export class FrameReader {
187
+ onFrame;
188
+ limit;
189
+ parts = [];
190
+ size = 0;
191
+ constructor(onFrame, limit = MAX_FRAME_BYTES) {
192
+ this.onFrame = onFrame;
193
+ this.limit = limit;
194
+ }
195
+ push(chunk) {
196
+ let nl;
197
+ while ((nl = chunk.indexOf('\n')) >= 0) {
198
+ const line = this.parts.length ? this.parts.join('') + chunk.slice(0, nl) : chunk.slice(0, nl);
199
+ this.parts = [];
200
+ this.size = 0;
201
+ chunk = chunk.slice(nl + 1);
202
+ if (!line)
203
+ continue;
204
+ let frame;
205
+ try {
206
+ frame = JSON.parse(line);
207
+ }
208
+ catch {
209
+ return false;
210
+ }
211
+ this.onFrame(frame);
212
+ }
213
+ if (chunk) {
214
+ this.parts.push(chunk);
215
+ this.size += chunk.length;
216
+ }
217
+ return this.size <= this.limit;
218
+ }
219
+ }
220
+ export function encodeFrame(frame) {
221
+ return `${JSON.stringify(frame)}\n`;
222
+ }
223
+ export function isModelDaemonEnabled() {
224
+ return process.env.AWM_MODEL_DAEMON === '1';
225
+ }
226
+ /** Non-negative integer env var; anything else falls back (an explicit 0 is kept). */
227
+ export function envInt(name, fallback) {
228
+ const v = Number(process.env[name]?.trim() || NaN);
229
+ return Number.isInteger(v) && v >= 0 ? v : fallback;
230
+ }
231
+ //# sourceMappingURL=model-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-daemon.js","sourceRoot":"","sources":["../../src/core/model-daemon.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC;AACxC,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,sFAAsF;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC;AAC3C,uFAAuF;AACvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,uFAAuF;AACvF,MAAM,eAAe,GAAG,GAAG,CAAC;AAoB5B,6DAA6D;AAC7D,MAAM,UAAU,GAA2B;IACzC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB;IAC7F,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB;IACnG,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,yBAAyB;CAC9E,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,MAAuB;IAC/C,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ;IACf,IAAI,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,uFAAuF;IACvF,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,OAAO,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,CAAC;SAC5H,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,GAAG,CAAC,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/I,0FAA0F;IAC1F,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,2BAA2B,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACxE,uEAAuE;QACvE,IAAI,CAAC;YACH,KAAK,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpF,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;oBAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;wBAAE,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC/B,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,sBAAsB,CACpC,MAAuB,EACvB,IAAiF,EAAE;IAEnF,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG;QACZ,YAAY,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE,EAAE;QACpG,QAAQ,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE;QAC/B,QAAQ,QAAQ,EAAE,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,EAAE,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE;QACtE,mFAAmF;QACnF,SAAS,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE;QACjD,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,SAAiB,aAAa,EAAE;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO;QACL,MAAM;QACN,kFAAkF;QAClF,uEAAuE;QACvE,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO;QACjG,KAAK,EAAE,GAAG,IAAI,QAAQ;QACtB,IAAI,EAAE,GAAG,IAAI,OAAO;QACpB,GAAG,EAAE,GAAG,IAAI,MAAM;KACnB,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe;QACvD,CAAC,CAAC,kBAAkB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,eAAe,gFAAgF;QAClK,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,8EAA8E;QAC9E,6CAA6C;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC;IACpH,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE;YAAE,OAAO,WAAW,MAAM,4BAA4B,CAAC;QACrF,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK;YAAE,OAAO,WAAW,MAAM,6BAA6B,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,MAAM,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,IAAyB,EAAE,WAAmB,EAAE,WAAmB,EAAE,WAAmB;IAC3H,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,GAAY;IACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5E,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IAGO;IAA0C;IAF/D,KAAK,GAAa,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,CAAC;IACjB,YAA6B,OAAiC,EAAS,QAAQ,eAAe;QAAjE,YAAO,GAAP,OAAO,CAA0B;QAAS,UAAK,GAAL,KAAK,CAAkB;IAAG,CAAC;IAElG,IAAI,CAAC,KAAa;QAChB,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/F,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAAC,CAAC;QACjE,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG,CAAC;AAC9C,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,QAAgB;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtD,CAAC"}
@@ -15,6 +15,11 @@
15
15
  * filter/lookup logic that shouldn't pay IPC cost.
16
16
  */
17
17
  import { type Text2TextGenerationPipeline } from '@huggingface/transformers';
18
+ export declare function inProcessExpand(args: {
19
+ prompt: string;
20
+ maxNewTokens: number;
21
+ noRepeatNgramSize: number;
22
+ }): Promise<string>;
18
23
  /** Kept for backwards compat. */
19
24
  export declare function getExpander(): Promise<Text2TextGenerationPipeline>;
20
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"query-expander.d.ts","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAY,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAqCvF,iCAAiC;AACjC,wBAAsB,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAExE;AAmBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCxE;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
1
+ {"version":3,"file":"query-expander.d.ts","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAY,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAuBvF,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhI;AAOD,iCAAiC;AACjC,wBAAsB,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAExE;AAmBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCxE;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -17,7 +17,7 @@
17
17
  * filter/lookup logic that shouldn't pay IPC cost.
18
18
  */
19
19
  import { pipeline } from '@huggingface/transformers';
20
- import { dispatchExpand, registerInProcessHandlers } from './ml-worker.js';
20
+ import { dispatchExpand, registerInferenceConfig, registerInProcessHandlers } from './ml-worker.js';
21
21
  import { ensureModelCacheDir } from './model-cache.js';
22
22
  const MODEL_ID = 'Xenova/flan-t5-small';
23
23
  // --- In-process fallback ---
@@ -36,7 +36,7 @@ async function loadInProcess() {
36
36
  });
37
37
  return inProcessInitPromise;
38
38
  }
39
- async function inProcessExpand(args) {
39
+ export async function inProcessExpand(args) {
40
40
  const expander = await loadInProcess();
41
41
  const result = await expander(args.prompt, {
42
42
  max_new_tokens: args.maxNewTokens,
@@ -46,6 +46,7 @@ async function inProcessExpand(args) {
46
46
  return String(text).trim();
47
47
  }
48
48
  registerInProcessHandlers({ expand: inProcessExpand });
49
+ registerInferenceConfig({ expandModel: MODEL_ID });
49
50
  // --- Public API ---
50
51
  /** Kept for backwards compat. */
51
52
  export async function getExpander() {
@@ -1 +1 @@
1
- {"version":3,"file":"query-expander.js","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-expander.js","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@
28
28
  * Every environment flag that can change what `activate()` returns.
29
29
  * Keep this list current — an unlisted flag is an invisible experiment.
30
30
  */
31
- export declare const RECALL_FLAGS: readonly ["AWM_RERANK2", "AWM_RERANK2_K", "AWM_RERANK_WINDOW", "AWM_RERANK_TRUNC", "AWM_RERANK_POOL", "AWM_RERANK_TAGS", "AWM_RERANK_TAGS_LEN", "AWM_RERANKER_DTYPE", "AWM_RETRIEVAL_TEXT", "AWM_ALIASES", "AWM_ALIAS_QUERY_CAP", "AWM_EMBED_MODEL", "AWM_EMBED_DIMS", "AWM_FEEDBACK_BM25", "AWM_SPREAD", "AWM_SPREAD_INJECT", "AWM_SPREAD_INHIBIT", "AWM_SPREAD_ITERS", "AWM_SPREAD_DAMPING", "AWM_SPREAD_BUDGET", "AWM_SPREAD_BOOST", "AWM_TOPN_MULT", "AWM_BROAD_EDGES", "AWM_ENTITY_FETCH", "AWM_ENTITY_INDEX_FETCH", "AWM_QUERY_BRIDGE", "AWM_AUTOTAG", "AWM_DISABLE_POOL_FILTER", "AWM_DISABLE_EXPANSION_CACHE", "AWM_DISABLE_SLIM_CACHE", "AWM_ABSTAIN_GATE_K"];
31
+ export declare const RECALL_FLAGS: readonly ["AWM_RERANK2", "AWM_RERANK2_K", "AWM_RERANK_WINDOW", "AWM_RERANK_TRUNC", "AWM_RERANK_POOL", "AWM_RERANK_TAGS", "AWM_RERANK_TAGS_LEN", "AWM_RERANKER_DTYPE", "AWM_RERANK_QUERY_TOKENS", "AWM_RERANK_BATCH", "AWM_EMBED_BATCH", "AWM_RETRIEVAL_TEXT", "AWM_ALIASES", "AWM_ALIAS_QUERY_CAP", "AWM_EMBED_MODEL", "AWM_EMBED_DIMS", "AWM_FEEDBACK_BM25", "AWM_SPREAD", "AWM_SPREAD_INJECT", "AWM_SPREAD_INHIBIT", "AWM_SPREAD_ITERS", "AWM_SPREAD_DAMPING", "AWM_SPREAD_BUDGET", "AWM_SPREAD_BOOST", "AWM_TOPN_MULT", "AWM_BROAD_EDGES", "AWM_ENTITY_FETCH", "AWM_ENTITY_INDEX_FETCH", "AWM_QUERY_BRIDGE", "AWM_AUTOTAG", "AWM_DISABLE_POOL_FILTER", "AWM_DISABLE_EXPANSION_CACHE", "AWM_DISABLE_SLIM_CACHE", "AWM_ABSTAIN_GATE_K"];
32
32
  export type RecallFlag = (typeof RECALL_FLAGS)[number];
33
33
  /** Only the flags actually set, in declaration order. */
34
34
  export declare function activeRecallConfig(env?: NodeJS.ProcessEnv): Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"recall-config.d.ts","sourceRoot":"","sources":["../../src/core/recall-config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,woBA4Cf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO/F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAKpF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAOvE"}
1
+ {"version":3,"file":"recall-config.d.ts","sourceRoot":"","sources":["../../src/core/recall-config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,0sBAiDf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO/F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAKpF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAOvE"}
@@ -44,6 +44,11 @@ export const RECALL_FLAGS = [
44
44
  // Omitted until 2026-10-09, during which both arms of a dtype sweep printed the
45
45
  // SAME arm= label; the whole point of this list is that that cannot happen.
46
46
  'AWM_RERANKER_DTYPE',
47
+ // ONNX input caps (2026-10-16). The query cap changes scores for queries over the
48
+ // cap; the batch sizes should not, but they are listed so an arm says them.
49
+ 'AWM_RERANK_QUERY_TOKENS',
50
+ 'AWM_RERANK_BATCH',
51
+ 'AWM_EMBED_BATCH',
47
52
  // Derived retrieval text (embedding side)
48
53
  'AWM_RETRIEVAL_TEXT',
49
54
  // Project-dialect alias expansion
@@ -1 +1 @@
1
- {"version":3,"file":"recall-config.js","sourceRoot":"","sources":["../../src/core/recall-config.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kCAAkC;IAClC,aAAa;IACb,eAAe;IACf,kCAAkC;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;IACrB,+EAA+E;IAC/E,gFAAgF;IAChF,4EAA4E;IAC5E,oBAAoB;IACpB,0CAA0C;IAC1C,oBAAoB;IACpB,kCAAkC;IAClC,aAAa;IACb,qBAAqB;IACrB,oEAAoE;IACpE,iBAAiB;IACjB,gBAAgB;IAChB,gDAAgD;IAChD,mBAAmB;IACnB,sCAAsC;IACtC,YAAY;IACZ,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,kBAAkB;IAClB,qCAAqC;IACrC,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,aAAa;IACb,+CAA+C;IAC/C,yBAAyB;IACzB,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;CACZ,CAAC;AAIX,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgC,EAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAA0E,EAAE,CAAC;IACtF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"recall-config.js","sourceRoot":"","sources":["../../src/core/recall-config.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kCAAkC;IAClC,aAAa;IACb,eAAe;IACf,kCAAkC;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;IACrB,+EAA+E;IAC/E,gFAAgF;IAChF,4EAA4E;IAC5E,oBAAoB;IACpB,kFAAkF;IAClF,4EAA4E;IAC5E,yBAAyB;IACzB,kBAAkB;IAClB,iBAAiB;IACjB,0CAA0C;IAC1C,oBAAoB;IACpB,kCAAkC;IAClC,aAAa;IACb,qBAAqB;IACrB,oEAAoE;IACpE,iBAAiB;IACjB,gBAAgB;IAChB,gDAAgD;IAChD,mBAAmB;IACnB,sCAAsC;IACtC,YAAY;IACZ,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,kBAAkB;IAClB,qCAAqC;IACrC,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,aAAa;IACb,+CAA+C;IAC/C,yBAAyB;IACzB,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;CACZ,CAAC;AAIX,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgC,EAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAA0E,EAAE,CAAC;IACtF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -44,7 +44,10 @@ export declare function densestWindow(content: string, query: string, budget: nu
44
44
  * - `'query'` — the `budget`-char window densest in query terms.
45
45
  */
46
46
  export declare function buildRerankPassage(concept: string, content: string, query: string, budget: number, mode: 'prefix' | 'query', tags?: string[]): string;
47
- /** Whether topical tags are appended to the rerank passage. Default OFF. */
47
+ /** Whether topical tags are appended to the rerank passage. Default ON since
48
+ * 2026-10-19 (+7.4pp s@1 measured 2026-08-24); `AWM_RERANK_TAGS=0` disables.
49
+ * See rerank2.ts `rerank2Enabled` for why the measured-good settings became
50
+ * code defaults rather than config strings. */
48
51
  export declare function rerankTagsEnabled(): boolean;
49
52
  /** Character budget for the appended tag text. */
50
53
  export declare function rerankTagBudget(): number;
@@ -57,6 +60,8 @@ export declare function rerankTagBudget(): number;
57
60
  export declare function rerankTagText(tags?: string[]): string;
58
61
  /** Character budget for a rerank passage. */
59
62
  export declare function rerankTruncation(): number;
60
- /** Passage selection mode. Default `prefix` preserves shipped behavior. */
63
+ /** Passage selection mode. Default `query` since 2026-10-19 (long-memory s@1
64
+ * 25% → 87.5%, measured 2026-08-24); `AWM_RERANK_WINDOW=prefix` restores the
65
+ * first-N-chars passage. Must ship with rerank2 on, which it now does. */
61
66
  export declare function rerankWindowMode(): 'prefix' | 'query';
62
67
  //# sourceMappingURL=rerank-window.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rerank-window.d.ts","sourceRoot":"","sources":["../../src/core/rerank-window.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsCpF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,MAAM,CAWR;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYrD;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,IAAI,QAAQ,GAAG,OAAO,CAErD"}
1
+ {"version":3,"file":"rerank-window.d.ts","sourceRoot":"","sources":["../../src/core/rerank-window.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsCpF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,MAAM,CAWR;AAED;;;gDAGgD;AAChD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYrD;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AAED;;2EAE2E;AAC3E,wBAAgB,gBAAgB,IAAI,QAAQ,GAAG,OAAO,CAErD"}
@@ -110,9 +110,12 @@ export function buildRerankPassage(concept, content, query, budget, mode, tags)
110
110
  const extra = rerankTagText(tags);
111
111
  return extra ? `${concept}: ${body} ${extra}` : `${concept}: ${body}`;
112
112
  }
113
- /** Whether topical tags are appended to the rerank passage. Default OFF. */
113
+ /** Whether topical tags are appended to the rerank passage. Default ON since
114
+ * 2026-10-19 (+7.4pp s@1 measured 2026-08-24); `AWM_RERANK_TAGS=0` disables.
115
+ * See rerank2.ts `rerank2Enabled` for why the measured-good settings became
116
+ * code defaults rather than config strings. */
114
117
  export function rerankTagsEnabled() {
115
- return process.env.AWM_RERANK_TAGS === '1';
118
+ return process.env.AWM_RERANK_TAGS !== '0';
116
119
  }
117
120
  /** Character budget for the appended tag text. */
118
121
  export function rerankTagBudget() {
@@ -147,8 +150,10 @@ export function rerankTruncation() {
147
150
  const v = Number(process.env.AWM_RERANK_TRUNC ?? 400);
148
151
  return Number.isFinite(v) && v > 0 ? v : 400;
149
152
  }
150
- /** Passage selection mode. Default `prefix` preserves shipped behavior. */
153
+ /** Passage selection mode. Default `query` since 2026-10-19 (long-memory s@1
154
+ * 25% → 87.5%, measured 2026-08-24); `AWM_RERANK_WINDOW=prefix` restores the
155
+ * first-N-chars passage. Must ship with rerank2 on, which it now does. */
151
156
  export function rerankWindowMode() {
152
- return process.env.AWM_RERANK_WINDOW === 'query' ? 'query' : 'prefix';
157
+ return process.env.AWM_RERANK_WINDOW === 'prefix' ? 'prefix' : 'query';
153
158
  }
154
159
  //# sourceMappingURL=rerank-window.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rerank-window.js","sourceRoot":"","sources":["../../src/core/rerank-window.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rerank-window.js","sourceRoot":"","sources":["../../src/core/rerank-window.ts"],"names":[],"mappings":"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"}
@@ -36,12 +36,54 @@
36
36
  * Margin-guarded variants were simulated and are strictly worse: gating on a
37
37
  * >0.15 reranker margin cuts breakage 12->1 but also cuts fixes 61->17.
38
38
  */
39
- /** Minimal shape this needs — anything carrying a cross-encoder score. */
39
+ /** Minimal shape this needs — anything carrying a cross-encoder score, and
40
+ * optionally the stale penalty Phase 8c applied to it (see below). */
40
41
  export interface RerankScored {
41
42
  phaseScores: {
42
43
  rerankerScore: number;
44
+ stalePenalty?: number;
43
45
  };
46
+ /** The Phase 7 blended score (composite + reranker). Carries decay, so recency. */
47
+ score?: number;
44
48
  }
49
+ /**
50
+ * NEAR-TIES (0.18.1, found by MWA when it moved to rerank2-on defaults)
51
+ * -----------------------------------------------------------------------
52
+ * The cross-encoder judges relevance to the query and nothing else. Three
53
+ * same-topic facts written in October, December and March ("the book club
54
+ * chose a fantasy novel / science fiction / a mystery") score within a few
55
+ * hundredths of each other for "what did the book club most recently
56
+ * choose", and a sort by reranker score alone put the newest LAST. The blend
57
+ * carries decay, so it knows which is newest; replacing it outright threw
58
+ * that away exactly where the cross-encoder has nothing to say.
59
+ *
60
+ * The first fix tried was a score epsilon: within `AWM_RERANK2_TIE_EPS` the
61
+ * blended score decides. MEASURED at 0.03 on the private snapshot (2026-10-19):
62
+ * identifier s@1 93.0% -> 78.7%, topic 92.2% -> 84.4%. The cross-encoder's
63
+ * scores saturate near 1.0 for the top candidates, so hundredths separate most
64
+ * top-2 pairs and are informative there; the blend loses to it 77% of the time
65
+ * on disagreements. So the epsilon DEFAULTS TO 0 (off) and exists only for
66
+ * experiments. The recency rule lives where it belongs instead: among results
67
+ * the conflict detector marks as two versions of one fact, the newest goes
68
+ * first (conflicts.ts `newestFirstAmongConflicts`, applied in activation.ts).
69
+ * That cannot touch a suite whose golds are single facts.
70
+ */
71
+ export declare function rerank2TieEpsilon(): number;
72
+ /**
73
+ * THE STALE-SUPPRESSION HOLE (found 2026-10-19, MWA evaluation probe)
74
+ * --------------------------------------------------------------------
75
+ * Phase 8c multiplies a superseded (or, since 2026-10-19, expired) memory's
76
+ * `score` by 0.15 so its successor dominates. This stage sorted the window by
77
+ * raw `rerankerScore`, which never carried that penalty — so with
78
+ * `AWM_RERANK2=1` (what `awm setup` writes into every Claude Code install) a
79
+ * superseded memory came back at rank 1 ABOVE its replacement whenever the
80
+ * cross-encoder liked its wording better. The supersession test ran with the
81
+ * reranker off, so nothing caught it. `tests/core/rerank2.test.ts` now pins the
82
+ * corrected behaviour: the sort key is `rerankerScore × stalePenalty`, the same
83
+ * factor Phase 8c used, so stale rows sort below current ones here exactly as
84
+ * they do in the blend. The soundness guards below are unchanged.
85
+ */
86
+ export declare function rerankSortKey(r: RerankScored): number;
45
87
  /**
46
88
  * Re-sort the first `k` entries of `ranked` by descending `rerankerScore`,
47
89
  * leaving the tail untouched. Returns a new array; never mutates the input.
@@ -57,6 +99,14 @@ export interface RerankScored {
57
99
  export declare function reorderByReranker<T extends RerankScored>(ranked: T[], k: number): T[];
58
100
  /** Window size for the second stage. */
59
101
  export declare function rerank2WindowSize(): number;
60
- /** Whether the second stage is enabled. Default OFF pending the tracer verdict. */
102
+ /**
103
+ * Whether the second stage is enabled. Default ON since 2026-10-19; set
104
+ * `AWM_RERANK2=0` to disable. It was opt-in (`=1`) from 2026-08-24, injected
105
+ * into every config `awm setup` wrote — and a config that did not carry the
106
+ * three strings ran degraded for 47 days without anyone noticing, because
107
+ * degraded recall looks exactly like working recall. The measured-good
108
+ * configuration is now what the code does when nothing is set; the env var
109
+ * is the escape hatch, like the other diagnostics knobs.
110
+ */
61
111
  export declare function rerank2Enabled(): boolean;
62
112
  //# sourceMappingURL=rerank2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rerank2.d.ts","sourceRoot":"","sources":["../../src/core/rerank2.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAarF;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,mFAAmF;AACnF,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
1
+ {"version":3,"file":"rerank2.d.ts","sourceRoot":"","sources":["../../src/core/rerank2.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;uEACuE;AACvE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAErD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAkBrF;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
@@ -38,6 +38,49 @@
38
38
  * Margin-guarded variants were simulated and are strictly worse: gating on a
39
39
  * >0.15 reranker margin cuts breakage 12->1 but also cuts fixes 61->17.
40
40
  */
41
+ /**
42
+ * NEAR-TIES (0.18.1, found by MWA when it moved to rerank2-on defaults)
43
+ * -----------------------------------------------------------------------
44
+ * The cross-encoder judges relevance to the query and nothing else. Three
45
+ * same-topic facts written in October, December and March ("the book club
46
+ * chose a fantasy novel / science fiction / a mystery") score within a few
47
+ * hundredths of each other for "what did the book club most recently
48
+ * choose", and a sort by reranker score alone put the newest LAST. The blend
49
+ * carries decay, so it knows which is newest; replacing it outright threw
50
+ * that away exactly where the cross-encoder has nothing to say.
51
+ *
52
+ * The first fix tried was a score epsilon: within `AWM_RERANK2_TIE_EPS` the
53
+ * blended score decides. MEASURED at 0.03 on the private snapshot (2026-10-19):
54
+ * identifier s@1 93.0% -> 78.7%, topic 92.2% -> 84.4%. The cross-encoder's
55
+ * scores saturate near 1.0 for the top candidates, so hundredths separate most
56
+ * top-2 pairs and are informative there; the blend loses to it 77% of the time
57
+ * on disagreements. So the epsilon DEFAULTS TO 0 (off) and exists only for
58
+ * experiments. The recency rule lives where it belongs instead: among results
59
+ * the conflict detector marks as two versions of one fact, the newest goes
60
+ * first (conflicts.ts `newestFirstAmongConflicts`, applied in activation.ts).
61
+ * That cannot touch a suite whose golds are single facts.
62
+ */
63
+ export function rerank2TieEpsilon() {
64
+ const v = Number(process.env.AWM_RERANK2_TIE_EPS ?? 0);
65
+ return Number.isFinite(v) && v >= 0 ? v : 0;
66
+ }
67
+ /**
68
+ * THE STALE-SUPPRESSION HOLE (found 2026-10-19, MWA evaluation probe)
69
+ * --------------------------------------------------------------------
70
+ * Phase 8c multiplies a superseded (or, since 2026-10-19, expired) memory's
71
+ * `score` by 0.15 so its successor dominates. This stage sorted the window by
72
+ * raw `rerankerScore`, which never carried that penalty — so with
73
+ * `AWM_RERANK2=1` (what `awm setup` writes into every Claude Code install) a
74
+ * superseded memory came back at rank 1 ABOVE its replacement whenever the
75
+ * cross-encoder liked its wording better. The supersession test ran with the
76
+ * reranker off, so nothing caught it. `tests/core/rerank2.test.ts` now pins the
77
+ * corrected behaviour: the sort key is `rerankerScore × stalePenalty`, the same
78
+ * factor Phase 8c used, so stale rows sort below current ones here exactly as
79
+ * they do in the blend. The soundness guards below are unchanged.
80
+ */
81
+ export function rerankSortKey(r) {
82
+ return r.phaseScores.rerankerScore * (r.phaseScores.stalePenalty ?? 1);
83
+ }
41
84
  /**
42
85
  * Re-sort the first `k` entries of `ranked` by descending `rerankerScore`,
43
86
  * leaving the tail untouched. Returns a new array; never mutates the input.
@@ -61,15 +104,29 @@ export function reorderByReranker(ranked, k) {
61
104
  if (!(r.phaseScores.rerankerScore > 0))
62
105
  return ranked; // also catches NaN
63
106
  }
64
- const sorted = head.slice().sort((a, b) => b.phaseScores.rerankerScore - a.phaseScores.rerankerScore);
107
+ const eps = rerank2TieEpsilon();
108
+ const sorted = head.slice().sort((a, b) => {
109
+ const d = rerankSortKey(b) - rerankSortKey(a);
110
+ if (eps > 0 && Math.abs(d) < eps)
111
+ return (b.score ?? 0) - (a.score ?? 0); // experiment only; see above
112
+ return d;
113
+ });
65
114
  return sorted.concat(ranked.slice(window));
66
115
  }
67
116
  /** Window size for the second stage. */
68
117
  export function rerank2WindowSize() {
69
118
  return Number(process.env.AWM_RERANK2_K ?? 10);
70
119
  }
71
- /** Whether the second stage is enabled. Default OFF pending the tracer verdict. */
120
+ /**
121
+ * Whether the second stage is enabled. Default ON since 2026-10-19; set
122
+ * `AWM_RERANK2=0` to disable. It was opt-in (`=1`) from 2026-08-24, injected
123
+ * into every config `awm setup` wrote — and a config that did not carry the
124
+ * three strings ran degraded for 47 days without anyone noticing, because
125
+ * degraded recall looks exactly like working recall. The measured-good
126
+ * configuration is now what the code does when nothing is set; the env var
127
+ * is the escape hatch, like the other diagnostics knobs.
128
+ */
72
129
  export function rerank2Enabled() {
73
- return process.env.AWM_RERANK2 === '1';
130
+ return process.env.AWM_RERANK2 !== '0';
74
131
  }
75
132
  //# sourceMappingURL=rerank2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rerank2.js","sourceRoot":"","sources":["../../src/core/rerank2.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAyB,MAAW,EAAE,CAAS;IAC9E,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,CAAE,mBAAmB;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACtG,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"rerank2.js","sourceRoot":"","sources":["../../src/core/rerank2.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAUH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,CAAe;IAC3C,OAAO,CAAC,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAyB,MAAW,EAAE,CAAS;IAC9E,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,CAAE,mBAAmB;IAC7E,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,6BAA6B;QACxG,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;AACzC,CAAC"}