agent-working-memory 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +321 -319
- package/dist/adapters/common.d.ts +34 -0
- package/dist/adapters/common.d.ts.map +1 -1
- package/dist/adapters/common.js +528 -446
- package/dist/adapters/common.js.map +1 -1
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +19 -0
- package/dist/api/routes.js.map +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +31 -29
- package/dist/cli/migrate.js.map +1 -1
- package/dist/core/asked-value.d.ts +37 -0
- package/dist/core/asked-value.d.ts.map +1 -0
- package/dist/core/asked-value.js +77 -0
- package/dist/core/asked-value.js.map +1 -0
- package/dist/core/conflicts.d.ts +89 -0
- package/dist/core/conflicts.d.ts.map +1 -0
- package/dist/core/conflicts.js +267 -0
- package/dist/core/conflicts.js.map +1 -0
- package/dist/core/embeddings.d.ts +14 -2
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +32 -10
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/format-recall.d.ts +21 -1
- package/dist/core/format-recall.d.ts.map +1 -1
- package/dist/core/format-recall.js +60 -5
- package/dist/core/format-recall.js.map +1 -1
- package/dist/core/ml-worker.d.ts +24 -1
- package/dist/core/ml-worker.d.ts.map +1 -1
- package/dist/core/ml-worker.js +165 -4
- package/dist/core/ml-worker.js.map +1 -1
- package/dist/core/model-daemon-client.d.ts +77 -0
- package/dist/core/model-daemon-client.d.ts.map +1 -0
- package/dist/core/model-daemon-client.js +383 -0
- package/dist/core/model-daemon-client.js.map +1 -0
- package/dist/core/model-daemon-server.d.ts +71 -0
- package/dist/core/model-daemon-server.d.ts.map +1 -0
- package/dist/core/model-daemon-server.js +363 -0
- package/dist/core/model-daemon-server.js.map +1 -0
- package/dist/core/model-daemon.d.ts +137 -0
- package/dist/core/model-daemon.d.ts.map +1 -0
- package/dist/core/model-daemon.js +231 -0
- package/dist/core/model-daemon.js.map +1 -0
- package/dist/core/query-expander.d.ts +5 -0
- package/dist/core/query-expander.d.ts.map +1 -1
- package/dist/core/query-expander.js +3 -2
- package/dist/core/query-expander.js.map +1 -1
- package/dist/core/recall-config.d.ts +1 -1
- package/dist/core/recall-config.d.ts.map +1 -1
- package/dist/core/recall-config.js +5 -0
- package/dist/core/recall-config.js.map +1 -1
- package/dist/core/rerank-window.d.ts +7 -2
- package/dist/core/rerank-window.d.ts.map +1 -1
- package/dist/core/rerank-window.js +9 -4
- package/dist/core/rerank-window.js.map +1 -1
- package/dist/core/rerank2.d.ts +52 -2
- package/dist/core/rerank2.d.ts.map +1 -1
- package/dist/core/rerank2.js +60 -3
- package/dist/core/rerank2.js.map +1 -1
- package/dist/core/reranker.d.ts +19 -0
- package/dist/core/reranker.d.ts.map +1 -1
- package/dist/core/reranker.js +76 -12
- package/dist/core/reranker.js.map +1 -1
- package/dist/core/trust.d.ts +32 -0
- package/dist/core/trust.d.ts.map +1 -0
- package/dist/core/trust.js +66 -0
- package/dist/core/trust.js.map +1 -0
- package/dist/core/validity.d.ts +21 -0
- package/dist/core/validity.d.ts.map +1 -0
- package/dist/core/validity.js +41 -0
- package/dist/core/validity.js.map +1 -0
- package/dist/core/whoami.d.ts +3 -0
- package/dist/core/whoami.d.ts.map +1 -1
- package/dist/core/whoami.js +14 -0
- package/dist/core/whoami.js.map +1 -1
- package/dist/core/write-pipeline.d.ts +48 -0
- package/dist/core/write-pipeline.d.ts.map +1 -1
- package/dist/core/write-pipeline.js +80 -3
- package/dist/core/write-pipeline.js.map +1 -1
- package/dist/engine/activation.d.ts.map +1 -1
- package/dist/engine/activation.js +27 -4
- package/dist/engine/activation.js.map +1 -1
- package/dist/engine/consolidation.d.ts.map +1 -1
- package/dist/engine/consolidation.js +53 -4
- package/dist/engine/consolidation.js.map +1 -1
- package/dist/hooks/prime-query.d.ts +57 -0
- package/dist/hooks/prime-query.d.ts.map +1 -0
- package/dist/hooks/prime-query.js +388 -0
- package/dist/hooks/prime-query.js.map +1 -0
- package/dist/hooks/prime.d.ts +8 -0
- package/dist/hooks/prime.d.ts.map +1 -1
- package/dist/hooks/prime.js +21 -2
- package/dist/hooks/prime.js.map +1 -1
- package/dist/hooks/sidecar.d.ts +7 -0
- package/dist/hooks/sidecar.d.ts.map +1 -1
- package/dist/hooks/sidecar.js +10 -2
- package/dist/hooks/sidecar.js.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +148 -103
- package/dist/mcp.js.map +1 -1
- package/dist/model-daemon.d.ts +8 -0
- package/dist/model-daemon.d.ts.map +1 -0
- package/dist/model-daemon.js +45 -0
- package/dist/model-daemon.js.map +1 -0
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/factory.js +5 -0
- package/dist/storage/factory.js.map +1 -1
- package/dist/storage/pglite-schema.d.ts.map +1 -1
- package/dist/storage/pglite-schema.js +176 -170
- package/dist/storage/pglite-schema.js.map +1 -1
- package/dist/storage/pglite.d.ts +5 -0
- package/dist/storage/pglite.d.ts.map +1 -1
- package/dist/storage/pglite.js +165 -153
- package/dist/storage/pglite.js.map +1 -1
- package/dist/storage/postgres.d.ts +5 -0
- package/dist/storage/postgres.d.ts.map +1 -1
- package/dist/storage/postgres.js +165 -153
- package/dist/storage/postgres.js.map +1 -1
- package/dist/storage/sqlite.d.ts +22 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +400 -363
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/types/engram.d.ts +33 -0
- package/dist/types/engram.d.ts.map +1 -1
- package/dist/types/engram.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/README.md +1 -1
- package/plugin/bin/awm-mcp-launcher.cjs +2 -2
- package/plugin/skills/awm-memory/SKILL.md +11 -2
- package/src/adapters/common.ts +881 -802
- package/src/api/routes.ts +20 -0
- package/src/cli/migrate.ts +309 -307
- package/src/core/asked-value.ts +74 -0
- package/src/core/conflicts.ts +280 -0
- package/src/core/embeddings.ts +35 -10
- package/src/core/format-recall.ts +83 -25
- package/src/core/ml-worker.ts +458 -281
- package/src/core/model-daemon-client.ts +374 -0
- package/src/core/model-daemon-server.ts +344 -0
- package/src/core/model-daemon.ts +243 -0
- package/src/core/query-expander.ts +127 -126
- package/src/core/recall-config.ts +5 -0
- package/src/core/rerank-window.ts +164 -159
- package/src/core/rerank2.ts +143 -82
- package/src/core/reranker.ts +78 -11
- package/src/core/trust.ts +65 -0
- package/src/core/validity.ts +47 -0
- package/src/core/whoami.ts +136 -120
- package/src/core/write-pipeline.ts +119 -3
- package/src/engine/activation.ts +27 -4
- package/src/engine/consolidation.ts +950 -899
- package/src/hooks/prime-query.ts +375 -0
- package/src/hooks/prime.ts +25 -2
- package/src/hooks/sidecar.ts +13 -3
- package/src/index.ts +255 -248
- package/src/mcp.ts +1521 -1475
- package/src/model-daemon.ts +48 -0
- package/src/storage/factory.ts +25 -19
- package/src/storage/pglite-schema.ts +199 -193
- package/src/storage/pglite.ts +1513 -1498
- package/src/storage/postgres.ts +1613 -1598
- package/src/storage/sqlite.ts +2056 -2019
- 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":"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"}
|
|
@@ -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;
|
|
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":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAoC,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,
|
|
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
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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 `
|
|
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 === '
|
|
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":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,iEAAiE;AACjE,SAAS,KAAK,CAAC,KAAa;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;QACnB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;QAC5E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC1E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;KAClE,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc;IAC1E,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC;IAE7C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM;YACjB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3B,gFAAgF;IAChF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,KAAK,EAAE,CAAC;QAC1E,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YAAC,SAAS,GAAG,KAAK,CAAC;YAAC,SAAS,GAAG,KAAK,CAAC;QAAC,CAAC;IAClE,CAAC;IAED,4EAA4E;IAC5E,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE;YAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,OAAe,EACf,KAAa,EACb,MAAc,EACd,IAAwB,EACxB,IAAe;IAEf,MAAM,IAAI,GAAG,IAAI,KAAK,OAAO;QAC3B,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QACvC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnE,0EAA0E;IAC1E,8EAA8E;IAC9E,uEAAuE;IACvE,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC;AACxE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"rerank-window.js","sourceRoot":"","sources":["../../src/core/rerank-window.ts"],"names":[],"mappings":"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"}
|
package/dist/core/rerank2.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
|
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"}
|
package/dist/core/rerank2.js
CHANGED
|
@@ -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
|
|
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
|
-
/**
|
|
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
|
|
130
|
+
return process.env.AWM_RERANK2 !== '0';
|
|
74
131
|
}
|
|
75
132
|
//# sourceMappingURL=rerank2.js.map
|
package/dist/core/rerank2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rerank2.js","sourceRoot":"","sources":["../../src/core/rerank2.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;
|
|
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"}
|