@shrkcrft/embeddings 0.1.0-alpha.17 → 0.1.0-alpha.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"focused-context.d.ts","sourceRoot":"","sources":["../src/focused-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,eAAe,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,aAAa,CAAC;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqHhG;AAsBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuC1E"}
1
+ {"version":3,"file":"focused-context.d.ts","sourceRoot":"","sources":["../src/focused-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAGvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,eAAe,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,aAAa,CAAC;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuHhG;AAsBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuC1E"}
@@ -1,4 +1,5 @@
1
1
  import { extractDeclarations, } from "./declaration-extractor.js";
2
+ import { pruneDeletedHits } from "./prune-deleted-hits.js";
2
3
  /**
3
4
  * Build a small, dense, task-specific context bundle using *multiple*
4
5
  * BGE embedding cycles. The free tiny model does more work so the
@@ -26,7 +27,9 @@ export async function buildFocusedContext(opts) {
26
27
  // When --since is in play we ask for a wider initial pool so the
27
28
  // allowlist post-filter has more material to work with.
28
29
  const initialPool = opts.pathAllowlist ? fileCandidates * 8 : fileCandidates;
29
- let fileHits = await opts.index.searchFiles(opts.task, initialPool);
30
+ // Drop deleted-file hits BEFORE extracting declarations — a stale index must
31
+ // not surface a file that no longer exists.
32
+ let fileHits = pruneDeletedHits(await opts.index.searchFiles(opts.task, initialPool), opts.cwd).hits;
30
33
  if (opts.pathAllowlist) {
31
34
  const allow = new Set(opts.pathAllowlist);
32
35
  fileHits = fileHits.filter((h) => allow.has(h.path)).slice(0, fileCandidates);
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './semantic-index.js';
2
+ export * from './prune-deleted-hits.js';
2
3
  export * from './declaration-extractor.js';
3
4
  export * from './focused-context.js';
4
5
  export * from './plan-cache.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./semantic-index.js";
2
+ export * from "./prune-deleted-hits.js";
2
3
  export * from "./declaration-extractor.js";
3
4
  export * from "./focused-context.js";
4
5
  export * from "./plan-cache.js";
@@ -0,0 +1,13 @@
1
+ import type { ISemanticHit } from './semantic-index.js';
2
+ /**
3
+ * Drop semantic hits whose file is gone from disk — a stale embedding index must
4
+ * never suggest a deleted file (the freshness-in-the-moment guarantee for
5
+ * semantic retrieval, mirroring the code graph's deleted-result prune). Score
6
+ * order is preserved; when `k` is given the live result is capped at `k` (so an
7
+ * over-fetch can backfill the holes left by deleted files).
8
+ */
9
+ export declare function pruneDeletedHits(hits: readonly ISemanticHit[], cwd: string, k?: number): {
10
+ hits: ISemanticHit[];
11
+ prunedDeleted: number;
12
+ };
13
+ //# sourceMappingURL=prune-deleted-hits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune-deleted-hits.d.ts","sourceRoot":"","sources":["../src/prune-deleted-hits.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,CAAC,CAAC,EAAE,MAAM,GACT;IAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAYjD"}
@@ -0,0 +1,24 @@
1
+ import { existsSync } from 'node:fs';
2
+ import * as nodePath from 'node:path';
3
+ /**
4
+ * Drop semantic hits whose file is gone from disk — a stale embedding index must
5
+ * never suggest a deleted file (the freshness-in-the-moment guarantee for
6
+ * semantic retrieval, mirroring the code graph's deleted-result prune). Score
7
+ * order is preserved; when `k` is given the live result is capped at `k` (so an
8
+ * over-fetch can backfill the holes left by deleted files).
9
+ */
10
+ export function pruneDeletedHits(hits, cwd, k) {
11
+ const live = [];
12
+ let prunedDeleted = 0;
13
+ for (const h of hits) {
14
+ const abs = nodePath.isAbsolute(h.path) ? h.path : nodePath.join(cwd, h.path);
15
+ if (existsSync(abs)) {
16
+ if (k === undefined || live.length < k)
17
+ live.push(h);
18
+ }
19
+ else {
20
+ prunedDeleted += 1;
21
+ }
22
+ }
23
+ return { hits: live, prunedDeleted };
24
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-index.d.ts","sourceRoot":"","sources":["../src/semantic-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-index.d.ts","sourceRoot":"","sources":["../src/semantic-index.ts"],"names":[],"mappings":"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"}
@@ -318,7 +318,25 @@ export class SemanticIndex {
318
318
  hits.push({ path: this.meta.paths[i], score: dot });
319
319
  }
320
320
  hits.sort((a, b) => b.score - a.score);
321
- return hits.slice(0, k);
321
+ // Query-time prune: a stale index can still hold vectors for files that
322
+ // were deleted on disk; returning them would feed dead paths into
323
+ // callers (e.g. the smart-context LLM seed). Skip any hit whose file no
324
+ // longer exists, walking only as far down the ranked list as needed to
325
+ // fill `k` survivors — so this stays O(k) stats in the common case, not
326
+ // O(n). A genuinely-changed (but present) file still scores on its old
327
+ // vector and is still served; `freshnessReport` remains the staleness
328
+ // signal that nags for a rebuild.
329
+ const out = [];
330
+ for (const hit of hits) {
331
+ if (out.length >= k)
332
+ break;
333
+ const abs = nodePath.isAbsolute(hit.path)
334
+ ? hit.path
335
+ : nodePath.join(this.cwd, hit.path);
336
+ if (existsSync(abs))
337
+ out.push(hit);
338
+ }
339
+ return out;
322
340
  }
323
341
  async embed(text) {
324
342
  if (SemanticIndex._embedderForTests) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shrkcrft/embeddings",
3
- "version": "0.1.0-alpha.17",
3
+ "version": "0.1.0-alpha.18",
4
4
  "description": "SharkCraft local-first semantic retrieval, plan cache, declaration extractor, and task classifier.",
5
5
  "license": "MIT",
6
6
  "author": "SharkCraft contributors",