@aligndottech/cli 0.60.0 → 0.61.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 (56) hide show
  1. package/dist/commands/capture.d.ts.map +1 -1
  2. package/dist/commands/capture.js +8 -0
  3. package/dist/commands/capture.js.map +1 -1
  4. package/dist/commands/import.d.ts.map +1 -1
  5. package/dist/commands/import.js +26 -9
  6. package/dist/commands/import.js.map +1 -1
  7. package/dist/lib/approve-suggestions.d.ts +26 -0
  8. package/dist/lib/approve-suggestions.d.ts.map +1 -0
  9. package/dist/lib/approve-suggestions.js +39 -0
  10. package/dist/lib/approve-suggestions.js.map +1 -0
  11. package/dist/lib/gateway-client.d.ts.map +1 -1
  12. package/dist/lib/gateway-client.js +15 -6
  13. package/dist/lib/gateway-client.js.map +1 -1
  14. package/dist/lib/hybrid-rank.d.ts +20 -0
  15. package/dist/lib/hybrid-rank.d.ts.map +1 -0
  16. package/dist/lib/hybrid-rank.js +30 -0
  17. package/dist/lib/hybrid-rank.js.map +1 -0
  18. package/dist/lib/lexical-store.d.ts +29 -0
  19. package/dist/lib/lexical-store.d.ts.map +1 -0
  20. package/dist/lib/lexical-store.js +143 -0
  21. package/dist/lib/lexical-store.js.map +1 -0
  22. package/dist/lib/lexical-terms.d.ts +28 -0
  23. package/dist/lib/lexical-terms.d.ts.map +1 -0
  24. package/dist/lib/lexical-terms.js +89 -0
  25. package/dist/lib/lexical-terms.js.map +1 -0
  26. package/dist/lib/lexical-text.d.ts +19 -0
  27. package/dist/lib/lexical-text.d.ts.map +1 -0
  28. package/dist/lib/lexical-text.js +40 -0
  29. package/dist/lib/lexical-text.js.map +1 -0
  30. package/dist/lib/llm-trace.d.ts +15 -0
  31. package/dist/lib/llm-trace.d.ts.map +1 -0
  32. package/dist/lib/llm-trace.js +37 -0
  33. package/dist/lib/llm-trace.js.map +1 -0
  34. package/dist/lib/local-db-migrate.d.ts.map +1 -1
  35. package/dist/lib/local-db-migrate.js +7 -0
  36. package/dist/lib/local-db-migrate.js.map +1 -1
  37. package/dist/lib/local-db.d.ts +3 -0
  38. package/dist/lib/local-db.d.ts.map +1 -1
  39. package/dist/lib/local-db.js +6 -0
  40. package/dist/lib/local-db.js.map +1 -1
  41. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  42. package/dist/lib/local-gateway-client.js +28 -6
  43. package/dist/lib/local-gateway-client.js.map +1 -1
  44. package/dist/lib/local-llm.d.ts +4 -13
  45. package/dist/lib/local-llm.d.ts.map +1 -1
  46. package/dist/lib/local-llm.js +30 -1
  47. package/dist/lib/local-llm.js.map +1 -1
  48. package/dist/lib/local-thresholds.d.ts +8 -0
  49. package/dist/lib/local-thresholds.d.ts.map +1 -1
  50. package/dist/lib/local-thresholds.js +8 -0
  51. package/dist/lib/local-thresholds.js.map +1 -1
  52. package/dist/lib/query-expand.d.ts +13 -0
  53. package/dist/lib/query-expand.d.ts.map +1 -0
  54. package/dist/lib/query-expand.js +21 -0
  55. package/dist/lib/query-expand.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,143 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { indexBodyFor } from './lexical-text.js';
3
+ import { termCounts } from './lexical-terms.js';
4
+ /**
5
+ * The persisted lexical index of a local graph (ALI-1749).
6
+ *
7
+ * Why persisted: building an in-memory index per process cost +53 ms on a 1,415-row graph and +298 ms on a
8
+ * 2,000-row one, on every `align ask` and every advisory hook. Here each git decision's term counts live in
9
+ * the graph's own SQLite file, built lazily on the first search and refreshed only for rows that changed, so a
10
+ * later process reads a few postings lists and tokenises nothing.
11
+ *
12
+ * Only git decisions are indexed. Every other platform keeps exactly the ranking it had before, because it
13
+ * has no lexical list to fuse (hybrid-rank.ts), and the tables stay empty for a graph with no commits.
14
+ *
15
+ * Tables are created lazily here, not in the schema migrations: an older CLI opening the same file ignores
16
+ * them, and a graph that never searches never grows them.
17
+ *
18
+ * LEXICAL_RECIPE is the version of how a row becomes terms (tokeniser, stemmer, title weight, body length).
19
+ * A row stored under another recipe is stale and is rebuilt on the next search. Dense vectors are NOT part
20
+ * of it and are never touched.
21
+ */
22
+ export const LEXICAL_RECIPE = 1;
23
+ const K1 = 1.2;
24
+ const B = 0.75;
25
+ // Terms are keyed by a small integer, not the decision's UUID: a UUID in the b-tree made the index larger
26
+ // than the graph's own text for a 2,000-commit repo, and an integer is a quarter of the size.
27
+ const DDL = `
28
+ CREATE TABLE IF NOT EXISTS lex_doc (num INTEGER PRIMARY KEY, decision_id TEXT NOT NULL UNIQUE, sig TEXT NOT NULL, len REAL NOT NULL);
29
+ CREATE TABLE IF NOT EXISTS lex_term (term TEXT NOT NULL, num INTEGER NOT NULL, tf INTEGER NOT NULL, PRIMARY KEY (term, num)) WITHOUT ROWID;
30
+ `;
31
+ function signature(title, summary) {
32
+ const h = createHash('sha1').update(title).update('\0').update(summary).digest('base64').slice(0, 16);
33
+ return `${LEXICAL_RECIPE}:${h}`;
34
+ }
35
+ export function createLexicalStore(db) {
36
+ let state;
37
+ const stamp = () => {
38
+ const version = db.prepare('PRAGMA data_version').get().data_version;
39
+ const changes = db.prepare('SELECT total_changes() AS n').get().n;
40
+ return `${version}:${changes}`;
41
+ };
42
+ /** What differs between the git rows and the stored index. Read-only. */
43
+ function plan() {
44
+ const rows = db.prepare(`SELECT id, title, summary FROM decisions WHERE platform = 'git'`).all();
45
+ const stored = new Map(db.prepare('SELECT num, decision_id, sig, len FROM lex_doc').all()
46
+ .map(r => [r.decision_id, r]));
47
+ const live = new Set(rows.map(r => r.id));
48
+ const gone = [...stored.values()].filter(d => !live.has(d.decision_id));
49
+ const fresh = rows.map(r => ({ r, sig: signature(r.title, r.summary) })).filter(x => stored.get(x.r.id)?.sig !== x.sig);
50
+ const docs = new Map();
51
+ for (const d of stored.values())
52
+ if (live.has(d.decision_id))
53
+ docs.set(d.num, { id: d.decision_id, len: d.len });
54
+ return { gone, fresh, stored, docs };
55
+ }
56
+ /** Bring lex_doc and lex_term in line with the git rows. Only rows whose signature moved are tokenised. */
57
+ function refresh() {
58
+ // A search must not sit behind an import's write lock for the graph's 30 s (the DDL below needs that lock
59
+ // too): wait briefly, then the caller falls back to the dense order. Put back to 30 s afterwards.
60
+ db.exec('PRAGMA busy_timeout = 2000');
61
+ try {
62
+ return refreshLocked();
63
+ }
64
+ finally {
65
+ db.exec('PRAGMA busy_timeout = 30000');
66
+ }
67
+ }
68
+ function refreshLocked() {
69
+ db.exec(DDL);
70
+ // Stamped BEFORE reading, so a commit that lands while we read makes the next call refresh again
71
+ // instead of being hidden behind a stamp taken after it.
72
+ let key = stamp();
73
+ let p = plan();
74
+ if (p.gone.length || p.fresh.length) {
75
+ const upsert = db.prepare(`INSERT INTO lex_doc (decision_id, sig, len) VALUES (?, ?, 0)
76
+ ON CONFLICT(decision_id) DO UPDATE SET sig = excluded.sig RETURNING num`);
77
+ const setLen = db.prepare('UPDATE lex_doc SET len = ? WHERE num = ?');
78
+ const putTerm = db.prepare('INSERT INTO lex_term (term, num, tf) VALUES (?, ?, ?)');
79
+ db.exec('BEGIN IMMEDIATE');
80
+ try {
81
+ // Planned again under the write lock: another process may have refreshed the same rows while we waited.
82
+ p = plan();
83
+ const stale = [...p.gone.map(d => d.num), ...p.fresh.flatMap(x => (p.stored.get(x.r.id) ? [p.stored.get(x.r.id).num] : []))];
84
+ // One scan per 500 numbers: removing by number without an index on it costs a scan, and an index would cost more space.
85
+ for (let i = 0; i < stale.length; i += 500) {
86
+ const chunk = stale.slice(i, i + 500);
87
+ db.prepare(`DELETE FROM lex_term WHERE num IN (${chunk.map(() => '?').join(',')})`).run(...chunk);
88
+ }
89
+ for (const d of p.gone)
90
+ db.prepare('DELETE FROM lex_doc WHERE num = ?').run(d.num);
91
+ for (const { r, sig } of p.fresh) {
92
+ const { num } = upsert.get(r.id, sig);
93
+ const counts = termCounts(r.title, indexBodyFor(r.title, r.summary));
94
+ let len = 0;
95
+ for (const [term, tf] of counts) {
96
+ putTerm.run(term, num, tf);
97
+ len += tf;
98
+ }
99
+ setLen.run(len, num);
100
+ p.docs.set(num, { id: r.id, len });
101
+ }
102
+ // Inside the write lock no other process can commit, so this stamp covers exactly what we read and wrote.
103
+ key = stamp();
104
+ db.exec('COMMIT');
105
+ }
106
+ catch (err) {
107
+ db.exec('ROLLBACK');
108
+ throw err;
109
+ }
110
+ }
111
+ let total = 0;
112
+ for (const d of p.docs.values())
113
+ total += d.len;
114
+ return { key, n: p.docs.size, avgLen: p.docs.size ? total / p.docs.size : 0, docs: p.docs };
115
+ }
116
+ return {
117
+ search(terms, limit) {
118
+ if (!state || state.key !== stamp())
119
+ state = refresh();
120
+ const { n, avgLen, docs } = state;
121
+ if (!n)
122
+ return [];
123
+ const postings = db.prepare('SELECT num, tf FROM lex_term WHERE term = ?');
124
+ const scores = new Map();
125
+ for (const [term, weight] of terms) {
126
+ const rows = postings.all(term);
127
+ if (!rows.length)
128
+ continue;
129
+ const idf = Math.log(1 + (n - rows.length + 0.5) / (rows.length + 0.5));
130
+ for (const { num, tf } of rows) {
131
+ const doc = docs.get(num);
132
+ if (!doc)
133
+ continue;
134
+ scores.set(doc.id, (scores.get(doc.id) ?? 0) + weight * idf * ((tf * (K1 + 1)) / (tf + K1 * (1 - B + B * (doc.len / avgLen)))));
135
+ }
136
+ }
137
+ return [...scores].map(([id, score]) => ({ id, score }))
138
+ .sort((a, b) => b.score - a.score || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
139
+ .slice(0, limit);
140
+ },
141
+ };
142
+ }
143
+ //# sourceMappingURL=lexical-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical-store.js","sourceRoot":"","sources":["../../src/lib/lexical-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Terms for the lexical half of local search (ALI-1749). Pure, no I/O.
3
+ *
4
+ * Why a lexical ranking exists: a dense embedding of a whole commit message blurs a rare identifier
5
+ * ("find-my-way", "pino", "node18") into the surrounding prose, so the one commit that names it can sit
6
+ * far down the dense order. A lexical score does the opposite: a rare term that appears in a document is
7
+ * worth a lot, and a common one is worth nothing.
8
+ *
9
+ * Tokens are identifier-aware: `find-my-way` yields `find-my-way`, `find`, `my`, `way`; `getUserName`
10
+ * yields `getusername`, `get`, `user`, `name`; `lib/route.js` yields `lib/route.js`, `lib`, `route`, `js`;
11
+ * `node18` yields `node18`, `node`, `18`. The whole identifier stays a token so a query that quotes it
12
+ * matches exactly, and the parts let a plain question ("why do we use find my way") still find it.
13
+ */
14
+ /** A term in the title counts this many times in the document, so a title hit outweighs a body hit. */
15
+ export declare const TITLE_TERM_WEIGHT = 3;
16
+ /**
17
+ * One deterministic light stemmer, used for the index AND the query, so the two cannot disagree: plural,
18
+ * then -ed/-ing, then a final -e. "process" and "processes" meet, and so do "remove", "removed", "removes"
19
+ * and "removing". Not a linguistic stemmer: it only has to give both sides the same answer.
20
+ */
21
+ export declare function stem(token: string): string;
22
+ /** The tokens of a text, lowercased and stemmed, with each identifier kept whole AND in parts. */
23
+ export declare function tokenize(text: string): string[];
24
+ /** Term frequencies of one document: a title term counts TITLE_TERM_WEIGHT times, a body term once. */
25
+ export declare function termCounts(title: string, body: string): Map<string, number>;
26
+ /** Query terms with weight 1 each (a repeated word counts once). */
27
+ export declare function queryTerms(query: string): Map<string, number>;
28
+ //# sourceMappingURL=lexical-terms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical-terms.d.ts","sourceRoot":"","sources":["../../src/lib/lexical-terms.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,uGAAuG;AACvG,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAInC;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW1C;AAaD,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAc/C;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAK3E;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAI7D"}
@@ -0,0 +1,89 @@
1
+ import { SCAFFOLDING } from './search-query.js';
2
+ /**
3
+ * Terms for the lexical half of local search (ALI-1749). Pure, no I/O.
4
+ *
5
+ * Why a lexical ranking exists: a dense embedding of a whole commit message blurs a rare identifier
6
+ * ("find-my-way", "pino", "node18") into the surrounding prose, so the one commit that names it can sit
7
+ * far down the dense order. A lexical score does the opposite: a rare term that appears in a document is
8
+ * worth a lot, and a common one is worth nothing.
9
+ *
10
+ * Tokens are identifier-aware: `find-my-way` yields `find-my-way`, `find`, `my`, `way`; `getUserName`
11
+ * yields `getusername`, `get`, `user`, `name`; `lib/route.js` yields `lib/route.js`, `lib`, `route`, `js`;
12
+ * `node18` yields `node18`, `node`, `18`. The whole identifier stays a token so a query that quotes it
13
+ * matches exactly, and the parts let a plain question ("why do we use find my way") still find it.
14
+ */
15
+ /** A term in the title counts this many times in the document, so a title hit outweighs a body hit. */
16
+ export const TITLE_TERM_WEIGHT = 3;
17
+ const STOP = new Set([...SCAFFOLDING, 'we', 'with', 'from', 'by', 'as', 'not', 'no', 'but', 'if', 'so', 'than', 'then', 'into', 'out', 'up', 'all', 'any', 'has', 'have', 'had', 'will', 'also', 'use', 'used', 'using']);
18
+ /**
19
+ * One deterministic light stemmer, used for the index AND the query, so the two cannot disagree: plural,
20
+ * then -ed/-ing, then a final -e. "process" and "processes" meet, and so do "remove", "removed", "removes"
21
+ * and "removing". Not a linguistic stemmer: it only has to give both sides the same answer.
22
+ */
23
+ export function stem(token) {
24
+ let t = token.toLowerCase();
25
+ if (t.length <= 3)
26
+ return t;
27
+ if (t.endsWith('ies') && t.length > 4)
28
+ t = `${t.slice(0, -3)}y`;
29
+ else if (/(ss|x|z|ch|sh)es$/.test(t))
30
+ t = t.slice(0, -2);
31
+ else if (t.endsWith('s') && !/(ss|us|is)$/.test(t))
32
+ t = t.slice(0, -1);
33
+ if (t.length > 5 && t.endsWith('ing'))
34
+ t = t.slice(0, -3);
35
+ else if (t.length > 4 && t.endsWith('ed'))
36
+ t = t.slice(0, -2);
37
+ if (/([^aeiou\d])\1$/.test(t) && !/(ss|ll|zz)$/.test(t))
38
+ t = t.slice(0, -1);
39
+ if (t.length > 4 && t.endsWith('e'))
40
+ t = t.slice(0, -1);
41
+ return t;
42
+ }
43
+ /** Split an identifier-ish chunk into its parts: camelCase, snake_case, digits against letters. */
44
+ function parts(chunk) {
45
+ return chunk
46
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
47
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
48
+ .replace(/([a-zA-Z])(\d)/g, '$1 $2')
49
+ .replace(/(\d)([a-zA-Z])/g, '$1 $2')
50
+ .split(/[^\p{L}\p{N}]+/u)
51
+ .filter(Boolean);
52
+ }
53
+ /** The tokens of a text, lowercased and stemmed, with each identifier kept whole AND in parts. */
54
+ export function tokenize(text) {
55
+ const out = [];
56
+ for (const raw of text.split(/\s+/)) {
57
+ const chunk = raw.replace(/^[^\p{L}\p{N}@]+/u, '').replace(/[^\p{L}\p{N}]+$/u, '');
58
+ if (!chunk)
59
+ continue;
60
+ const whole = chunk.toLowerCase();
61
+ const pieces = parts(chunk).map(p => p.toLowerCase());
62
+ // The whole token is kept only when it is a compound (it has a separator or a case/digit
63
+ // boundary); a plain word would otherwise count twice, once whole and once as its own part.
64
+ const compound = pieces.length > 1 || /[^\p{L}\p{N}]/u.test(chunk);
65
+ if (compound)
66
+ out.push(whole);
67
+ for (const piece of pieces)
68
+ if (!STOP.has(piece) && piece.length > 1)
69
+ out.push(stem(piece));
70
+ }
71
+ return out;
72
+ }
73
+ /** Term frequencies of one document: a title term counts TITLE_TERM_WEIGHT times, a body term once. */
74
+ export function termCounts(title, body) {
75
+ const counts = new Map();
76
+ for (const t of tokenize(title))
77
+ counts.set(t, (counts.get(t) ?? 0) + TITLE_TERM_WEIGHT);
78
+ for (const t of tokenize(body))
79
+ counts.set(t, (counts.get(t) ?? 0) + 1);
80
+ return counts;
81
+ }
82
+ /** Query terms with weight 1 each (a repeated word counts once). */
83
+ export function queryTerms(query) {
84
+ const out = new Map();
85
+ for (const t of tokenize(query))
86
+ out.set(t, 1);
87
+ return out;
88
+ }
89
+ //# sourceMappingURL=lexical-terms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical-terms.js","sourceRoot":"","sources":["../../src/lib/lexical-terms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * What text of a git decision the lexical index reads (ALI-1749).
3
+ *
4
+ * A git decision's stored summary is `formatCommitAsText`: subject, body, then `Author:`, `Date:`,
5
+ * `Files changed:` and `URL:` blocks. The reason a commit exists lives in the first lines of the body, so
6
+ * the index reads the start of that body, with trailers and metadata dropped. The stored summary and the
7
+ * embedding text are never changed, only what the lexical index derives from them.
8
+ *
9
+ * Pure.
10
+ */
11
+ /** How much of the cleaned body the index reads. Measured on eval v2 (ALI-1749): 500, 1000 and 2000 chars
12
+ * scored the same (recall@8 95.7%) and none at all scored 79.9%, so the body matters and its length does
13
+ * not; 500 keeps the persisted index small. */
14
+ export declare const INDEX_BODY_CHARS = 500;
15
+ /** The prose of a git decision's body: no subject echo, no trailers, no Author/Date/Files/URL block. */
16
+ export declare function commitBodyOf(title: string, summary: string): string;
17
+ /** The body the lexical index reads for a git decision. */
18
+ export declare function indexBodyFor(title: string, summary: string): string;
19
+ //# sourceMappingURL=lexical-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical-text.d.ts","sourceRoot":"","sources":["../../src/lib/lexical-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;gDAEgD;AAChD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAKpC,wGAAwG;AACxG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CASnE;AASD,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * What text of a git decision the lexical index reads (ALI-1749).
3
+ *
4
+ * A git decision's stored summary is `formatCommitAsText`: subject, body, then `Author:`, `Date:`,
5
+ * `Files changed:` and `URL:` blocks. The reason a commit exists lives in the first lines of the body, so
6
+ * the index reads the start of that body, with trailers and metadata dropped. The stored summary and the
7
+ * embedding text are never changed, only what the lexical index derives from them.
8
+ *
9
+ * Pure.
10
+ */
11
+ /** How much of the cleaned body the index reads. Measured on eval v2 (ALI-1749): 500, 1000 and 2000 chars
12
+ * scored the same (recall@8 95.7%) and none at all scored 79.9%, so the body matters and its length does
13
+ * not; 500 keeps the persisted index small. */
14
+ export const INDEX_BODY_CHARS = 500;
15
+ const TRAILER_LINE = /^(co-authored-by|signed-off-by|reviewed-by|acked-by|helped-by|cc|refs?|closes?|fixes?|resolves?)\s*:\s*\S/i;
16
+ const GENERATED_WITH = /^(?:🤖\s*)?generated (with|by)\b/i;
17
+ /** The prose of a git decision's body: no subject echo, no trailers, no Author/Date/Files/URL block. */
18
+ export function commitBodyOf(title, summary) {
19
+ const metaAt = summary.lastIndexOf('\n\nAuthor: ');
20
+ let text = metaAt === -1 ? summary : summary.slice(0, metaAt);
21
+ if (text.startsWith(title))
22
+ text = text.slice(title.length);
23
+ return text
24
+ .split('\n')
25
+ .map(l => l.trim())
26
+ .filter(l => l && !TRAILER_LINE.test(l) && !GENERATED_WITH.test(l) && l !== '---------')
27
+ .join(' ');
28
+ }
29
+ function clip(text, max) {
30
+ if (text.length <= max)
31
+ return text;
32
+ const cut = text.slice(0, max);
33
+ const space = cut.lastIndexOf(' ');
34
+ return space > max * 0.6 ? cut.slice(0, space) : cut;
35
+ }
36
+ /** The body the lexical index reads for a git decision. */
37
+ export function indexBodyFor(title, summary) {
38
+ return clip(commitBodyOf(title, summary), INDEX_BODY_CHARS);
39
+ }
40
+ //# sourceMappingURL=lexical-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical-text.js","sourceRoot":"","sources":["../../src/lib/lexical-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;gDAEgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAM,YAAY,GAAG,4GAA4G,CAAC;AAClI,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D,wGAAwG;AACxG,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC;SACvF,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,GAAW;IACrC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACvD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IACzD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const TRACE_FILE_ENV = "ALIGN_LLM_TRACE_FILE";
2
+ export declare function traceFilePath(env?: Record<string, string | undefined>): string | null;
3
+ export interface ChatTraceRow {
4
+ kind: 'chat';
5
+ system: string;
6
+ user: string | null;
7
+ ok: boolean;
8
+ text?: string;
9
+ failure?: {
10
+ kind: string;
11
+ };
12
+ durationMs: number;
13
+ }
14
+ export declare function appendChatTrace(row: ChatTraceRow, env?: Record<string, string | undefined>): void;
15
+ //# sourceMappingURL=llm-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-trace.d.ts","sourceRoot":"","sources":["../../src/lib/llm-trace.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,MAAM,GAAG,IAAI,CAGlG;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,IAAI,CAc9G"}
@@ -0,0 +1,37 @@
1
+ // ALI-1494: an opt-in LOCAL trace of the chat calls align makes.
2
+ //
3
+ // Off unless ALIGN_LLM_TRACE_FILE names a file. When on, `callChatDetailed` appends one JSON
4
+ // line per call to that file: the system prompt, the user prompt as built, how long it took and
5
+ // the answer or the failure kind. It is written to that file and nowhere else, never sent, and
6
+ // adds no network call - the promise in docs/telemetry.md (no queries or content leave the
7
+ // machine) is unchanged. API keys are never part of a row: a row is built from fixed fields,
8
+ // not from the request.
9
+ //
10
+ // The file holds prompts, which can hold the text of the user's decisions, so it is readable by
11
+ // its owner only (0600): set when the file is created and enforced again on every write.
12
+ //
13
+ // A failed write never breaks the call it describes: it prints one line to stderr and moves on.
14
+ import { appendFileSync, chmodSync } from 'node:fs';
15
+ export const TRACE_FILE_ENV = 'ALIGN_LLM_TRACE_FILE';
16
+ export function traceFilePath(env = process.env) {
17
+ const configured = env[TRACE_FILE_ENV]?.trim();
18
+ return configured ? configured : null;
19
+ }
20
+ export function appendChatTrace(row, env = process.env) {
21
+ const path = traceFilePath(env);
22
+ if (path === null)
23
+ return;
24
+ try {
25
+ appendFileSync(path, `${JSON.stringify({ ts: new Date().toISOString(), ...row })}\n`, {
26
+ encoding: 'utf8',
27
+ mode: 0o600,
28
+ });
29
+ // `mode` only applies when the file is created, so an existing file (made earlier, or by
30
+ // hand with a looser mode) is tightened on every write. A failure here is caught below.
31
+ chmodSync(path, 0o600);
32
+ }
33
+ catch (err) {
34
+ console.error(`align: could not write ${TRACE_FILE_ENV} (${path}): ${err.message}`);
35
+ }
36
+ }
37
+ //# sourceMappingURL=llm-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-trace.js","sourceRoot":"","sources":["../../src/lib/llm-trace.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,6FAA6F;AAC7F,gGAAgG;AAChG,+FAA+F;AAC/F,2FAA2F;AAC3F,6FAA6F;AAC7F,wBAAwB;AACxB,EAAE;AACF,gGAAgG;AAChG,yFAAyF;AACzF,EAAE;AACF,gGAAgG;AAEhG,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,MAA0C,OAAO,CAAC,GAAG;IACjF,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC/C,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,GAAiB,EAAE,MAA0C,OAAO,CAAC,GAAG;IACtG,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE;YACpF,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,yFAAyF;QACzF,wFAAwF;QACxF,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,cAAc,KAAK,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjG,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-db-migrate.d.ts","sourceRoot":"","sources":["../../src/lib/local-db-migrate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,eAAO,MAAM,MAAM,oyCA+ClB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;4EAE4E;AAC5E,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAoBjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAO/E;AAED,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAS9E;AAsBD,wBAAgB,OAAO,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmT9C"}
1
+ {"version":3,"file":"local-db-migrate.d.ts","sourceRoot":"","sources":["../../src/lib/local-db-migrate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,eAAO,MAAM,MAAM,oyCA+ClB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;4EAE4E;AAC5E,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAoBjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAa/E;AAED,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAS9E;AAsBD,wBAAgB,OAAO,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmT9C"}
@@ -160,6 +160,13 @@ export function deleteDecisionWithDependents(db, id) {
160
160
  db.prepare('DELETE FROM decision_embeddings WHERE decision_id = ?').run(id);
161
161
  db.prepare('DELETE FROM decision_audit WHERE decision_id = ?').run(id);
162
162
  db.prepare('DELETE FROM decisions WHERE id = ?').run(id);
163
+ // The lexical index (lexical-store.ts) holds terms derived from this decision's text. Its tables exist
164
+ // only after a first search, so their absence is normal.
165
+ try {
166
+ db.prepare('DELETE FROM lex_term WHERE num IN (SELECT num FROM lex_doc WHERE decision_id = ?)').run(id);
167
+ db.prepare('DELETE FROM lex_doc WHERE decision_id = ?').run(id);
168
+ }
169
+ catch { /* no lexical tables yet */ }
163
170
  }
164
171
  /** The one downgrade guard: migrate() and every other writer of this file (the sync state, purge) call it. */
165
172
  export function assertSchemaSupported(version, db) {
@@ -1 +1 @@
1
- {"version":3,"file":"local-db-migrate.js","sourceRoot":"","sources":["../../src/lib/local-db-migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-db-migrate.js","sourceRoot":"","sources":["../../src/lib/local-db-migrate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { DeciderKind } from './decider-kind.js';
2
+ import { type LexicalStore } from './lexical-store.js';
2
3
  export interface DecisionRow {
3
4
  id: string;
4
5
  title: string;
@@ -455,6 +456,8 @@ export declare function createLocalDb(dbPath: string): {
455
456
  /** Stored embeddings of every model: an upper bound on what a matrix would hold, read
456
457
  * before building one so a huge graph is never loaded just to be refused. */
457
458
  countEmbeddings(): number;
459
+ /** ALI-1749: the persisted lexical index of this graph's git decisions (lexical-store.ts), built on first use. */
460
+ lexicalStore(): LexicalStore;
458
461
  close(): void;
459
462
  };
460
463
  export type LocalDb = ReturnType<typeof createLocalDb>;
@@ -1 +1 @@
1
- {"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/lib/local-db.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { mkdirSync } from 'node:fs';
4
4
  import { dirname, resolve } from 'node:path';
5
5
  import { deleteDecisionWithDependents, migrate, SCHEMA, SLACK_TOMBSTONE_TITLE } from './local-db-migrate.js';
6
6
  import { bumpRowSetEpoch, rowSetEpoch } from './local-db-epoch.js';
7
+ import { createLexicalStore } from './lexical-store.js';
7
8
  import { foldKeylessTwin } from './local-db-v7.js';
8
9
  import { discussionStart } from './github-text.js';
9
10
  import { connectorItemKey, KEYED_PLATFORMS } from './source-key.js';
@@ -133,6 +134,7 @@ export function createLocalDb(dbPath) {
133
134
  DO UPDATE SET confidence = MAX(confidence, excluded.confidence)`).run(link.id ?? randomUUID(), link.sourceId, link.targetId, link.relation, link.confidence, link.detectorVersion ?? 'v0');
134
135
  }
135
136
  let dataVersionStmt;
137
+ let lexical;
136
138
  const api = {
137
139
  /**
138
140
  * Insert, or refresh the decision that already carries this `source_url`, returning the id
@@ -736,6 +738,10 @@ export function createLocalDb(dbPath) {
736
738
  countEmbeddings() {
737
739
  return db.prepare('SELECT COUNT(*) AS n FROM decision_embeddings').get().n;
738
740
  },
741
+ /** ALI-1749: the persisted lexical index of this graph's git decisions (lexical-store.ts), built on first use. */
742
+ lexicalStore() {
743
+ return (lexical ??= createLexicalStore(db));
744
+ },
739
745
  close() {
740
746
  db.close();
741
747
  },