@cstart/coldstart 2.2.8 → 2.2.10
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 +21 -0
- package/dist/kb/cli.d.ts.map +1 -1
- package/dist/kb/cli.js +9 -1
- package/dist/kb/cli.js.map +1 -1
- package/dist/kb/search.d.ts +15 -0
- package/dist/kb/search.d.ts.map +1 -1
- package/dist/kb/search.js +195 -18
- package/dist/kb/search.js.map +1 -1
- package/dist/kb/view-template.d.ts +4 -3
- package/dist/kb/view-template.d.ts.map +1 -1
- package/dist/kb/view-template.js +4 -3
- package/dist/kb/view-template.js.map +1 -1
- package/dist/kb/view.d.ts +4 -1
- package/dist/kb/view.d.ts.map +1 -1
- package/dist/kb/view.js +15 -2
- package/dist/kb/view.js.map +1 -1
- package/hooks/capture-payload.mjs +11 -4
- package/hooks/codex-kb-recall.mjs +19 -3
- package/hooks/cursor-kb-recall.mjs +15 -2
- package/hooks/elicit-core.mjs +4 -1
- package/hooks/kb-elicit.mjs +25 -7
- package/hooks/kb-recall.mjs +18 -2
- package/hooks/recall-query.mjs +83 -0
- package/hooks/recall-seen.mjs +76 -0
- package/hooks/trigger.mjs +14 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
<p>
|
|
20
20
|
<a href="https://akashgoenka.github.io/coldstart/"><b>Website</b></a> ·
|
|
21
21
|
<a href="https://akashgoenka.github.io/coldstart/docs.html"><b>Docs</b></a> ·
|
|
22
|
+
<a href="https://akashgoenka.github.io/coldstart/blog.html"><b>Blog</b></a> ·
|
|
22
23
|
<a href="./PHILOSOPHY.md"><b>Philosophy</b></a> ·
|
|
23
24
|
<a href="https://www.npmjs.com/package/@cstart/coldstart"><b>npm</b></a>
|
|
24
25
|
</p>
|
|
@@ -272,6 +273,26 @@ See [PHILOSOPHY.md](./PHILOSOPHY.md) for why coldstart computes no semantics of
|
|
|
272
273
|
5. The keeper is per-repo and per-machine — no sharing across projects or hosts. The notebook _does_ travel: its `.raw` logs are committed and union-merge across branches and machines.
|
|
273
274
|
6. Notebook quality is bounded by what writing agents actually read — notes are accurate about what they state, but a note is not a proof of completeness.
|
|
274
275
|
|
|
276
|
+
## Writing
|
|
277
|
+
|
|
278
|
+
Longer pieces on the problems behind this tool — what agent sessions actually cost, and what
|
|
279
|
+
happened to the design when the measurements disagreed with the plan.
|
|
280
|
+
|
|
281
|
+
- [Where the tokens go in an agent session](https://akashgoenka.github.io/coldstart/blog/where-the-tokens-go.html)
|
|
282
|
+
— session cost is roughly turns × resident context, and output is a rounding error. How to
|
|
283
|
+
decompose your own transcripts instead of trusting anyone's published numbers.
|
|
284
|
+
- [An index cannot answer the same question twice](https://akashgoenka.github.io/coldstart/blog/an-index-cannot-answer-twice.html)
|
|
285
|
+
— a code graph makes each hop cheaper without reducing how many hops you take, and ranking by
|
|
286
|
+
in-degree makes leaf files structurally unrankable.
|
|
287
|
+
- [The tool the agent doesn't call](https://akashgoenka.github.io/coldstart/blog/the-tool-the-agent-doesnt-call.html)
|
|
288
|
+
— availability, documentation, and an explicit instruction still don't add up to adoption.
|
|
289
|
+
Including the times our own agents bypassed our own command.
|
|
290
|
+
- [From four tools to two](https://akashgoenka.github.io/coldstart/blog/from-four-tools-to-two.html)
|
|
291
|
+
— which tools got deleted, which capability genuinely went with them, and why the surface
|
|
292
|
+
stayed small afterwards.
|
|
293
|
+
- [Notes about code should be written by whoever read the code](https://akashgoenka.github.io/coldstart/blog/notes-should-be-written-by-whoever-read-the-code.html)
|
|
294
|
+
— why the notebook captures in-session rather than summarizing transcripts later.
|
|
295
|
+
|
|
275
296
|
## License
|
|
276
297
|
|
|
277
298
|
MIT — see [LICENSE](./LICENSE).
|
package/dist/kb/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/kb/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/kb/cli.ts"],"names":[],"mappings":"AAyGA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C3D"}
|
package/dist/kb/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `coldstart kb <verb>` — the notebook's CLI surface. Same reader discipline
|
|
3
3
|
* as find/gs: stdout carries only the answer, diagnostics go to stderr.
|
|
4
4
|
*
|
|
5
|
-
* kb search <words...> [--max N] [--json] [--hook] [--no-index]
|
|
5
|
+
* kb search <words...> [--max N] [--json] [--hook] [--no-index] [--seen a,b]
|
|
6
6
|
* kb lookup <path> [symbol] [--json]
|
|
7
7
|
* kb write <spec.json | -> [--into ID] [--new] [--force] [--session S]
|
|
8
8
|
* kb status [--paths a,b,c] [--json]
|
|
@@ -57,6 +57,9 @@ function parseKbArgs(argv) {
|
|
|
57
57
|
case '--max':
|
|
58
58
|
flags.max = Number(argv[++i]) || undefined;
|
|
59
59
|
break;
|
|
60
|
+
case '--seen':
|
|
61
|
+
flags.seen = (argv[++i] ?? '').split(',').map((s) => s.trim()).filter(Boolean);
|
|
62
|
+
break;
|
|
60
63
|
case '--into':
|
|
61
64
|
flags.into = argv[++i];
|
|
62
65
|
break;
|
|
@@ -197,6 +200,7 @@ async function cmdSearch(words, flags) {
|
|
|
197
200
|
maxResults: flags.max ?? (flags.hook ? 3 : 8),
|
|
198
201
|
source: flags.hook ? 'hook' : 'tool',
|
|
199
202
|
strongOnly: flags.hook, // an arbitrary user sentence must not inject weak grazes
|
|
203
|
+
excludeIds: flags.seen?.length ? new Set(flags.seen) : undefined,
|
|
200
204
|
});
|
|
201
205
|
for (const w of result.warnings)
|
|
202
206
|
err(`[coldstart kb] ${w}`);
|
|
@@ -209,6 +213,10 @@ async function cmdSearch(words, flags) {
|
|
|
209
213
|
implant: shouldImplantTop(result),
|
|
210
214
|
convergence: result.hits[0].convergence,
|
|
211
215
|
strongTerms: result.hits[0].strongTerms,
|
|
216
|
+
// Which words carried the hit, and in which channel — not recoverable
|
|
217
|
+
// from the query string after the fact, and the input any later analysis
|
|
218
|
+
// of injection quality needs.
|
|
219
|
+
carriers: result.hits[0].carriers,
|
|
212
220
|
scores: result.hits.map((h) => Math.round(h.score * 100) / 100),
|
|
213
221
|
});
|
|
214
222
|
}
|
package/dist/kb/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/kb/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/kb/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/kb/search.d.ts
CHANGED
|
@@ -41,6 +41,16 @@ export interface KbSearchOptions {
|
|
|
41
41
|
* (the agent chose its terms).
|
|
42
42
|
*/
|
|
43
43
|
strongOnly?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Note ids already injected earlier in THIS session — dropped from the
|
|
46
|
+
* final page. Recall re-showed the same note inside one session on 61% of
|
|
47
|
+
* injections (worst: 12×), which is pure tax: the agent already has the
|
|
48
|
+
* title and gist in context. Applied AFTER ranking, so a suppressed repeat
|
|
49
|
+
* does NOT get backfilled by a lower-ranked note — the page just shrinks
|
|
50
|
+
* (and an all-seen page injects nothing). Hook-side bookkeeping, so tool
|
|
51
|
+
* `kb search` is unaffected.
|
|
52
|
+
*/
|
|
53
|
+
excludeIds?: ReadonlySet<string>;
|
|
44
54
|
}
|
|
45
55
|
export interface KbSearchHit {
|
|
46
56
|
note: FoldedNote;
|
|
@@ -65,6 +75,11 @@ export interface KbSearchHit {
|
|
|
65
75
|
* a scale-free convergence measure: a boilerplate graze shares ONE word
|
|
66
76
|
* with the top note; a task that names a mechanism lands several. */
|
|
67
77
|
strongTerms: number;
|
|
78
|
+
/** The eligible terms that actually carried this hit, with the channel each
|
|
79
|
+
* landed in (n=name, a=anchor, b=body) — e.g. "keeper:na". Recorded so the
|
|
80
|
+
* injection log can be analyzed after the fact: which words are doing the
|
|
81
|
+
* work is not recoverable from the query string alone. */
|
|
82
|
+
carriers: string[];
|
|
68
83
|
}
|
|
69
84
|
export interface KbSearchResult {
|
|
70
85
|
hits: KbSearchHit[];
|
package/dist/kb/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/kb/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOvE,MAAM,WAAW,eAAe;IAC9B;;8EAE0E;IAC1E,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/kb/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOvE,MAAM,WAAW,eAAe;IAC9B;;8EAE0E;IAC1E,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC;AAgBD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;sEACkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb;;sEAEkE;IAClE,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;uCAGmC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB;;;0EAGsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;+DAG2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;gDAE4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0CACsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsRD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwO/G;AASD;;;;;;;;;oEASoE;AACpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAKhE;AA8BD;;;;;;;;;wBASwB;AACxB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAO/E;AAED;;;;;2CAK2C;AAC3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAuC/E;AAeD;;gCAEgC;AAChC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAmB5F"}
|
package/dist/kb/search.js
CHANGED
|
@@ -78,6 +78,35 @@ const rarityMax = (n) => Math.ceil(n / HOOK_RARITY_DIVISOR);
|
|
|
78
78
|
* (2026-07-08): boilerplate max 2, known-graze 3, false suppressions 4–5.
|
|
79
79
|
* strongTerms is logged on every injection decision for re-calibration. */
|
|
80
80
|
const HOOK_CONVERGE_MIN = 4;
|
|
81
|
+
/**
|
|
82
|
+
* Hook mode: a hit carried by ONE PLAIN-ENGLISH term is a graze, not a match.
|
|
83
|
+
*
|
|
84
|
+
* Measured 2026-07-30 on 140 hand-labeled injections (two 70-query samples
|
|
85
|
+
* drawn from 563 logged prompts, the second held out). Single-carrier hits are
|
|
86
|
+
* 61% of all injections, but they are not one population — split by the same
|
|
87
|
+
* evidence distinction the eligibility gate above already makes:
|
|
88
|
+
*
|
|
89
|
+
* plain prose, no convergence 65 hits 3 good / 53 junk 5% precise
|
|
90
|
+
* code-shaped term 7 hits 4 good / 2 junk 67% precise
|
|
91
|
+
* converged term 15 hits 7 good / 8 junk 47% precise
|
|
92
|
+
*
|
|
93
|
+
* So the defect is not "one term", it is "one ORDINARY WORD": a prose word
|
|
94
|
+
* landing in one note's alias list is a homonym far more often than a topic
|
|
95
|
+
* match — "merge the PR" hits the fold note (whose aliases say "notebook merge
|
|
96
|
+
* conflict"), "status 403" hits the status note, "docker image" hits the site
|
|
97
|
+
* page. An identifier (max_files, AddAddress) or a term that converged on a
|
|
98
|
+
* declared symbol in the note's own anchor carries real evidence at n=1 and is
|
|
99
|
+
* kept; those match the multi-carrier population's precision (54%).
|
|
100
|
+
*
|
|
101
|
+
* Deliberately NOT a score threshold and NOT a stopword list: the best
|
|
102
|
+
* score-based rule won on one half and collapsed to 46% on the other, and a
|
|
103
|
+
* stoplist fitted on the first sample fell 72% → 38% held out. This counts
|
|
104
|
+
* evidence, so it stays scale-free as the notebook grows.
|
|
105
|
+
*
|
|
106
|
+
* A prompt that NAMES the note's path is exempt — an explicit request, not a
|
|
107
|
+
* graze.
|
|
108
|
+
*/
|
|
109
|
+
const HOOK_MIN_CARRIERS = 2;
|
|
81
110
|
/** Path-name override: when the raw prompt literally contains a note's anchor
|
|
82
111
|
* path (case/separator-insensitive), the user named that file — surface its
|
|
83
112
|
* note regardless of term rarity. parseTerms drops `/`-glued paths (the `/`
|
|
@@ -89,6 +118,23 @@ const HOOK_CONVERGE_MIN = 4;
|
|
|
89
118
|
const PATH_MATCH_MIN_SQUASH = 6;
|
|
90
119
|
const PATH_MATCH_BOOST = 100;
|
|
91
120
|
const tokenCount = (s) => (s ? s.split(/\s+/).filter(Boolean).length : 0);
|
|
121
|
+
/** Divisor applied to the hook-mode name channel so a note cannot buy rank with
|
|
122
|
+
* alias volume: a note's size RELATIVE to the corpus average, floored at 1.
|
|
123
|
+
* Only bloat is penalised — a median-length note scores exactly as it did
|
|
124
|
+
* before, and a terse note gets no windfall for being short (floor).
|
|
125
|
+
*
|
|
126
|
+
* Measured against the literal matches/identifiers form (divide by the raw
|
|
127
|
+
* count) on 563 logged queries, 2026-07-29:
|
|
128
|
+
* off 444 injected · magnet note 123 (28%) · top-5 share 58%
|
|
129
|
+
* rel 437 injected · magnet note 66 (15%) · top-5 share 48%
|
|
130
|
+
* abs 400 injected · magnet note 101 (25%) · top-5 share 54%
|
|
131
|
+
* The absolute form loses 57 injections and barely dents the magnet: dividing
|
|
132
|
+
* every name score by ~22 does not change name-vs-name ranking, it just sinks
|
|
133
|
+
* the whole name channel beneath the unnormalised anchor (2) and body (1)
|
|
134
|
+
* weights, so bloated notes keep winning through their other channels. */
|
|
135
|
+
function hookNameNorm(ids, avg) {
|
|
136
|
+
return Math.max(1, ids / avg);
|
|
137
|
+
}
|
|
92
138
|
/** Substring occurrence count in normalized text; a squash-only match counts 1. */
|
|
93
139
|
function countOcc(hay, haySquash, term) {
|
|
94
140
|
const t = norm(term);
|
|
@@ -117,9 +163,57 @@ function isCodeShaped(term) {
|
|
|
117
163
|
return true;
|
|
118
164
|
return false;
|
|
119
165
|
}
|
|
120
|
-
/**
|
|
166
|
+
/** Light Porter-style step-1 stem: plural and tense suffixes only, so that a
|
|
167
|
+
* prompt's "fires" reaches a note titled "…capture fire". Deliberately NOT a
|
|
168
|
+
* full stemmer — aggressive stemming collapses distinct identifiers, and this
|
|
169
|
+
* runs on the name channel where a false merge is a wrong injection. */
|
|
170
|
+
const STEM_CACHE = new Map();
|
|
171
|
+
function stem(word) {
|
|
172
|
+
const k = word.toLowerCase();
|
|
173
|
+
const cached = STEM_CACHE.get(k);
|
|
174
|
+
if (cached !== undefined)
|
|
175
|
+
return cached;
|
|
176
|
+
// A doubled final consonant is an artifact of the suffix ("stopping" →
|
|
177
|
+
// "stopp"); l/s/z double legitimately ("call", "pass", "buzz").
|
|
178
|
+
const dedouble = (s) => s.length > 2 && s[s.length - 1] === s[s.length - 2] && !'lsz'.includes(s[s.length - 1])
|
|
179
|
+
? s.slice(0, -1)
|
|
180
|
+
: s;
|
|
181
|
+
let s = k;
|
|
182
|
+
if (s.length > 4 && s.endsWith('ies'))
|
|
183
|
+
s = `${s.slice(0, -3)}y`;
|
|
184
|
+
else if (s.length > 4 && s.endsWith('ing'))
|
|
185
|
+
s = dedouble(s.slice(0, -3));
|
|
186
|
+
else if (s.length > 3 && s.endsWith('ed'))
|
|
187
|
+
s = dedouble(s.slice(0, -2));
|
|
188
|
+
// "boxes"/"matches" drop "es"; "fires"/"notes" drop only the "s", so the
|
|
189
|
+
// stem keeps its "e" and cannot collide with an unrelated short word.
|
|
190
|
+
else if (s.length > 3 && /(?:s|x|z|ch|sh)es$/.test(s))
|
|
191
|
+
s = s.slice(0, -2);
|
|
192
|
+
else if (s.length > 3 && s.endsWith('s') && !s.endsWith('ss'))
|
|
193
|
+
s = s.slice(0, -1);
|
|
194
|
+
STEM_CACHE.set(k, s);
|
|
195
|
+
return s;
|
|
196
|
+
}
|
|
197
|
+
/** Stems agree, allowing the silent "e" the suffix rules drop ("fire" → "fire",
|
|
198
|
+
* "firing" → "fir"). */
|
|
199
|
+
const sameStem = (a, b) => {
|
|
200
|
+
const sa = stem(a);
|
|
201
|
+
const sb = stem(b);
|
|
202
|
+
return sa === sb || sa === `${sb}e` || sb === `${sa}e`;
|
|
203
|
+
};
|
|
204
|
+
/** Whole-word, case-insensitive, stem-tolerant hit — "error" must not match
|
|
205
|
+
* "LoadErrors" (not a word boundary), but "fires" must match "fire". */
|
|
121
206
|
function wordHit(hay, term) {
|
|
122
|
-
|
|
207
|
+
const words = hay.match(/[A-Za-z0-9]+/g);
|
|
208
|
+
if (!words)
|
|
209
|
+
return false;
|
|
210
|
+
const t = norm(term);
|
|
211
|
+
for (const w of words) {
|
|
212
|
+
const lw = w.toLowerCase();
|
|
213
|
+
if (lw === t || sameStem(lw, t))
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
return false;
|
|
123
217
|
}
|
|
124
218
|
/** Case- and separator-insensitive containment (LoadStaging ≡ load_staging). */
|
|
125
219
|
function hits(hay, haySquash, term) {
|
|
@@ -144,12 +238,37 @@ function resolveTermToAnchors(kb, term) {
|
|
|
144
238
|
function resolveTermToSymbolFiles(kb, term) {
|
|
145
239
|
const out = new Set();
|
|
146
240
|
const t = norm(term);
|
|
241
|
+
// Same asymmetry the eligibility gate uses below: a code-shaped term may
|
|
242
|
+
// match a fragment of a symbol ("loadstaging" → LoadStagingFiles), but a
|
|
243
|
+
// plain English word must equal a WHOLE identifier token. Substring for
|
|
244
|
+
// English words is a lottery, measured on 236 logged queries: 164 terms
|
|
245
|
+
// resolved but only 8 were real symbol names — "but" matched
|
|
246
|
+
// ensureGitattri(but)es, "see" matched par(seE)xperience, "our" matched
|
|
247
|
+
// stripOurs. Token equality drops that class and keeps the real one.
|
|
248
|
+
const codeShaped = isCodeShaped(term);
|
|
147
249
|
for (const [path, symbols] of Object.entries(kb.anchors)) {
|
|
148
|
-
|
|
250
|
+
const hit = symbols.some((s) => (codeShaped ? norm(s).includes(t) : symbolTokens(s).includes(t)));
|
|
251
|
+
if (hit)
|
|
149
252
|
out.add(path);
|
|
150
253
|
}
|
|
151
254
|
return out;
|
|
152
255
|
}
|
|
256
|
+
/** Split an identifier into its lowercase word tokens: camelCase, PascalCase,
|
|
257
|
+
* ALLCAPS runs, snake_case, kebab-case, and dotted members. */
|
|
258
|
+
const TOKEN_CACHE = new Map();
|
|
259
|
+
function symbolTokens(symbol) {
|
|
260
|
+
const cached = TOKEN_CACHE.get(symbol);
|
|
261
|
+
if (cached)
|
|
262
|
+
return cached;
|
|
263
|
+
const tokens = symbol
|
|
264
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
265
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
266
|
+
.split(/[^A-Za-z0-9]+/)
|
|
267
|
+
.filter(Boolean)
|
|
268
|
+
.map((x) => x.toLowerCase());
|
|
269
|
+
TOKEN_CACHE.set(symbol, tokens);
|
|
270
|
+
return tokens;
|
|
271
|
+
}
|
|
153
272
|
/** An absence note's verdict comes from the keeper's stamp (it re-runs the
|
|
154
273
|
* stored search on every code/notebook change) — never from a live scan here. */
|
|
155
274
|
function absenceVerdict(note, kb) {
|
|
@@ -198,12 +317,31 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
198
317
|
// BM25 length normalization inputs (tool mode).
|
|
199
318
|
const lens = stacks.map(bm25Len);
|
|
200
319
|
const avgLen = Math.max(1, lens.reduce((a, b) => a + b, 0) / Math.max(1, lens.length));
|
|
320
|
+
// Hook-mode name-channel length normalization. Hook scoring is a flat
|
|
321
|
+
// presence·idf sum with NO length term, so a note's name channel (title +
|
|
322
|
+
// aliases) buys score by SURFACE AREA: aliases are natural-language symptom
|
|
323
|
+
// phrases, and every content word in them is another chance to match. Measured
|
|
324
|
+
// 2026-07-29 on 563 logged queries — hooks/kb-elicit.mjs carries 34 aliases
|
|
325
|
+
// (108 name tokens vs a 22-token median) and won 123/456 injections (27%),
|
|
326
|
+
// pulled in by "another", "first", "already", "resume" sitting inside phrases
|
|
327
|
+
// like "capture worklist has files from another directory". Across the corpus,
|
|
328
|
+
// name-channel size vs injections won: r = 0.71. Tool mode already divides by
|
|
329
|
+
// length (BM25 b·len/avgLen); this is the same correction for the mode where
|
|
330
|
+
// precision actually matters.
|
|
331
|
+
const nameIds = stacks.map((h) => Math.max(1, tokenCount(h.name)));
|
|
332
|
+
const avgNameIds = Math.max(1, nameIds.reduce((a, b) => a + b, 0) / Math.max(1, nameIds.length));
|
|
201
333
|
// Convergence channel: code-shaped term → files where it's a declared symbol.
|
|
202
334
|
const symFiles = new Map();
|
|
203
335
|
if (opts.notesIndex) {
|
|
336
|
+
// Every term gets the lookup, not just code-shaped ones. isCodeShaped is a
|
|
337
|
+
// SPELLING test (digits/underscore/hyphen/interior caps), not a "does this
|
|
338
|
+
// match the codebase" test — it rejects `keeper` though src/keeper.ts
|
|
339
|
+
// exists, so in a repo whose domain nouns are ordinary words the strongest
|
|
340
|
+
// channel we have was switched off: convergence fired on 1 of 236 logged
|
|
341
|
+
// queries. The shape asymmetry now lives inside the resolver, where it
|
|
342
|
+
// guards precision without gating access.
|
|
204
343
|
for (const t of terms)
|
|
205
|
-
|
|
206
|
-
symFiles.set(t, resolveTermToSymbolFiles(opts.notesIndex, t));
|
|
344
|
+
symFiles.set(t, resolveTermToSymbolFiles(opts.notesIndex, t));
|
|
207
345
|
}
|
|
208
346
|
const rareMax = rarityMax(notes.length);
|
|
209
347
|
const scored = [];
|
|
@@ -216,9 +354,11 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
216
354
|
let strongTerms = 0;
|
|
217
355
|
let convergence = false;
|
|
218
356
|
let rare = false;
|
|
357
|
+
let hardEvidence = false;
|
|
358
|
+
const carriers = [];
|
|
219
359
|
for (let k = 0; k < terms.length; k++) {
|
|
220
360
|
const t = terms[k];
|
|
221
|
-
|
|
361
|
+
let inName = hits(h.name, h.nameSquash, t);
|
|
222
362
|
let inAnchor = hits(h.anchor, h.anchorSquash, t);
|
|
223
363
|
// Lane-2 admission (term matches ONLY via the keeper's symbol inventory)
|
|
224
364
|
// stays off in strongOnly: an arbitrary sentence sharing one symbol with
|
|
@@ -231,8 +371,16 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
231
371
|
inAnchor = note.anchors.some((a) => files.has(a.path));
|
|
232
372
|
}
|
|
233
373
|
const inBody = h.body.includes(norm(t));
|
|
234
|
-
if (!inName && !inAnchor && !inBody)
|
|
235
|
-
|
|
374
|
+
if (!inName && !inAnchor && !inBody) {
|
|
375
|
+
// Presence above is substring containment, so "charging" misses a title
|
|
376
|
+
// that says "charge" and the term is dropped before the shape gate ever
|
|
377
|
+
// sees it — stemming in wordHit alone would be a no-op. Hook mode only:
|
|
378
|
+
// tool mode scores by countOcc, which would credit a stem hit with zero
|
|
379
|
+
// weight, so its behaviour stays byte-identical.
|
|
380
|
+
if (!(opts.strongOnly && !isCodeShaped(t) && wordHit(h.nameRaw, t)))
|
|
381
|
+
continue;
|
|
382
|
+
inName = true;
|
|
383
|
+
}
|
|
236
384
|
// Hook-mode term eligibility — the query is an arbitrary English
|
|
237
385
|
// sentence, so a term counts only when it (a) DISCRIMINATES (a word
|
|
238
386
|
// matching half the notebook — "save", "files" — identifies nothing)
|
|
@@ -254,12 +402,19 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
254
402
|
if (df[k] <= rareMax)
|
|
255
403
|
rare = true;
|
|
256
404
|
const files = symFiles.get(t);
|
|
257
|
-
|
|
405
|
+
const converged = !!files?.size && note.anchors.some((a) => files.has(a.path));
|
|
406
|
+
if (converged)
|
|
258
407
|
convergence = true;
|
|
408
|
+
// Evidence strong enough to stand alone: an identifier the user typed, or
|
|
409
|
+
// a term confirmed by the note's own anchor symbols. See HOOK_MIN_CARRIERS.
|
|
410
|
+
if (converged || isCodeShaped(t))
|
|
411
|
+
hardEvidence = true;
|
|
412
|
+
carriers.push(`${t}:${inName ? 'n' : ''}${inAnchor ? 'a' : ''}${inBody ? 'b' : ''}${converged ? 'c' : ''}`);
|
|
259
413
|
if (opts.strongOnly) {
|
|
260
|
-
//
|
|
261
|
-
//
|
|
262
|
-
|
|
414
|
+
// Presence·idf, with the name channel divided by how many identifiers
|
|
415
|
+
// that note put in the channel — a match on a 3-alias note outranks the
|
|
416
|
+
// same match on a 34-alias one. See nameIds above for the measurement.
|
|
417
|
+
boost += ((inName ? CHANNEL_W.name / hookNameNorm(nameIds[i], avgNameIds) : 0) + (inAnchor ? CHANNEL_W.anchor : 0) + (inBody ? CHANNEL_W.body : 0)) * idf(k);
|
|
263
418
|
}
|
|
264
419
|
else {
|
|
265
420
|
// BM25: term frequency across weighted channels, saturated by k1,
|
|
@@ -282,12 +437,18 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
282
437
|
rare = true;
|
|
283
438
|
strongTerms = Math.max(strongTerms, 1);
|
|
284
439
|
boost += PATH_MATCH_BOOST;
|
|
440
|
+
carriers.push('<path>');
|
|
285
441
|
}
|
|
286
442
|
if (!covered)
|
|
287
443
|
continue;
|
|
288
444
|
if (opts.strongOnly && !strong)
|
|
289
445
|
continue; // body-word coverage ≠ a hit on an arbitrary sentence
|
|
290
|
-
|
|
446
|
+
// One ORDINARY word is a graze — see HOOK_MIN_CARRIERS. Uniform on every
|
|
447
|
+
// candidate at every rank: a hit that clears the bar is eligible to rank
|
|
448
|
+
// first, whatever fell away above it.
|
|
449
|
+
if (opts.strongOnly && !pathNamedIds.has(note.id) && !hardEvidence && carriers.length < HOOK_MIN_CARRIERS)
|
|
450
|
+
continue;
|
|
451
|
+
scored.push({ note, score: boost, convergence, rare, strongTerms, carriers });
|
|
291
452
|
}
|
|
292
453
|
if (!scored.length) {
|
|
293
454
|
if (!opts.noMissLog)
|
|
@@ -296,7 +457,7 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
296
457
|
}
|
|
297
458
|
// Freshness NOW for everything scored, then hard-tier: fresh+active first.
|
|
298
459
|
const rareById = new Map(scored.map((s) => [s.note.id, s.rare]));
|
|
299
|
-
const withTier = scored.map(({ note, score, convergence, strongTerms }) => {
|
|
460
|
+
const withTier = scored.map(({ note, score, convergence, strongTerms, carriers }) => {
|
|
300
461
|
// The keeper's rename overlay lets a note whose file was renamed resolve to
|
|
301
462
|
// its new path ('moved', not 'missing'), so a byte-exact refactor doesn't
|
|
302
463
|
// send the note inactive. Live-re-verified inside stampAnchors.
|
|
@@ -306,7 +467,7 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
306
467
|
const inactive = note.type !== 'lesson' && anchorsAllMissing(stamped);
|
|
307
468
|
const stale = stamped.some((s) => s.state === 'changed' || s.state === 'missing');
|
|
308
469
|
const tier = inactive ? 3 : note.status !== 'active' ? 2 : stale ? 1 : 0;
|
|
309
|
-
return { note, score, tier, inactive, stamped, absence: absenceVerdict(note, opts.notesIndex), convergence, strongTerms };
|
|
470
|
+
return { note, score, tier, inactive, stamped, absence: absenceVerdict(note, opts.notesIndex), convergence, strongTerms, carriers };
|
|
310
471
|
});
|
|
311
472
|
// Recall (hook mode) must never inject a note whose subject doesn't exist on
|
|
312
473
|
// the current branch — a review/feature-branch note viewed from elsewhere.
|
|
@@ -322,10 +483,17 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
322
483
|
// corpus grows. Every suppression is metric-logged for re-calibration.
|
|
323
484
|
// The convergence override (HOOK_CONVERGE_MIN) rescues the one measured
|
|
324
485
|
// false-suppression mode: a real task named entirely in common words.
|
|
486
|
+
// Convergence is the strictest evidence in the system — the term matched the
|
|
487
|
+
// note's own authored text AND is a declared symbol in that note's anchor
|
|
488
|
+
// file, two independent channels agreeing (11/11 precise at rank 0 on the 27q
|
|
489
|
+
// corpus). It was computed and used for the implant tier but never consulted
|
|
490
|
+
// here, so an exact-symbol prompt could be suppressed purely because the
|
|
491
|
+
// symbol is common across sibling notes in a small notebook.
|
|
325
492
|
if (opts.strongOnly && notes.length >= HOOK_FLOOR_MIN_NOTES && surfaced.length &&
|
|
326
|
-
!rareById.get(surfaced[0].note.id) && surfaced[0].
|
|
493
|
+
!rareById.get(surfaced[0].note.id) && !surfaced[0].convergence &&
|
|
494
|
+
surfaced[0].strongTerms < HOOK_CONVERGE_MIN) {
|
|
327
495
|
if (!opts.noMissLog)
|
|
328
|
-
logMetric(root, 'inject-log', { query: query.slice(0, 200), suppressed: true, top: surfaced[0].note.id, score: Math.round(surfaced[0].score * 10) / 10, strongTerms: surfaced[0].strongTerms });
|
|
496
|
+
logMetric(root, 'inject-log', { query: query.slice(0, 200), suppressed: true, top: surfaced[0].note.id, score: Math.round(surfaced[0].score * 10) / 10, strongTerms: surfaced[0].strongTerms, carriers: surfaced[0].carriers });
|
|
329
497
|
return { hits: [], terms, warnings };
|
|
330
498
|
}
|
|
331
499
|
// Hook mode: hits far below the best are padding (a generic path segment
|
|
@@ -338,7 +506,16 @@ export async function kbSearch(root, query, opts = {}) {
|
|
|
338
506
|
// by the floor (not the cap) isn't worth widening for.
|
|
339
507
|
const top = trimmed[0]?.score ?? 0;
|
|
340
508
|
const omitted = trimmed.slice(max).filter((h) => h.score >= RESULTS_FLOOR * top).length;
|
|
341
|
-
|
|
509
|
+
// Session dedup runs LAST, on the page we would actually have shown, so a
|
|
510
|
+
// suppressed repeat frees no slot: the page shrinks (all-seen → inject
|
|
511
|
+
// nothing) instead of pulling up a note the cap had already rejected. That
|
|
512
|
+
// keeps this "don't repeat yourself" and not a second ranking pass. See
|
|
513
|
+
// excludeIds.
|
|
514
|
+
const page = trimmed.slice(0, max);
|
|
515
|
+
const deduped = opts.excludeIds?.size
|
|
516
|
+
? page.filter((h) => !opts.excludeIds.has(h.note.id))
|
|
517
|
+
: page;
|
|
518
|
+
return { hits: deduped, terms, warnings, omitted, maxUsed: max };
|
|
342
519
|
}
|
|
343
520
|
/** Body section of the rendered md (frontmatter stripped) for inlining. */
|
|
344
521
|
function noteBody(note) {
|