@reposkein/mcp 0.7.0 → 0.9.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 (67) hide show
  1. package/README.md +1 -0
  2. package/binary-digests.json +4 -4
  3. package/dist/SKILL.md +22 -0
  4. package/dist/cli/doctor.d.ts +2 -2
  5. package/dist/cli/doctor.js +8 -4
  6. package/dist/cli/doctor.js.map +1 -1
  7. package/dist/cli/doctorFreshness.d.ts +6 -0
  8. package/dist/cli/doctorFreshness.js +23 -0
  9. package/dist/cli/doctorFreshness.js.map +1 -1
  10. package/dist/cli/migrate.d.ts +26 -0
  11. package/dist/cli/migrate.js +208 -0
  12. package/dist/cli/migrate.js.map +1 -0
  13. package/dist/embed/batch.d.ts +47 -0
  14. package/dist/embed/batch.js +92 -0
  15. package/dist/embed/batch.js.map +1 -0
  16. package/dist/embed/cache.d.ts +22 -48
  17. package/dist/embed/cache.js +44 -164
  18. package/dist/embed/cache.js.map +1 -1
  19. package/dist/embed/corpusVectors.d.ts +20 -0
  20. package/dist/embed/corpusVectors.js +60 -0
  21. package/dist/embed/corpusVectors.js.map +1 -0
  22. package/dist/embed/provider.d.ts +21 -2
  23. package/dist/embed/provider.js.map +1 -1
  24. package/dist/embed/providers/http.d.ts +3 -2
  25. package/dist/embed/providers/http.js +14 -1
  26. package/dist/embed/providers/http.js.map +1 -1
  27. package/dist/embed/providers/voyage.d.ts +3 -2
  28. package/dist/embed/providers/voyage.js +50 -54
  29. package/dist/embed/providers/voyage.js.map +1 -1
  30. package/dist/embed/vectorStore.d.ts +89 -0
  31. package/dist/embed/vectorStore.js +267 -0
  32. package/dist/embed/vectorStore.js.map +1 -0
  33. package/dist/guard/caps.d.ts +3 -0
  34. package/dist/guard/caps.js +4 -1
  35. package/dist/guard/caps.js.map +1 -1
  36. package/dist/index.js +16 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/search/bm25f.d.ts +17 -1
  39. package/dist/search/bm25f.js +89 -53
  40. package/dist/search/bm25f.js.map +1 -1
  41. package/dist/store/GraphStore.d.ts +6 -1
  42. package/dist/store/JsonlGraphStore.d.ts +47 -10
  43. package/dist/store/JsonlGraphStore.js +129 -50
  44. package/dist/store/JsonlGraphStore.js.map +1 -1
  45. package/dist/store/Neo4jGraphStore.d.ts +11 -0
  46. package/dist/store/Neo4jGraphStore.js +29 -2
  47. package/dist/store/Neo4jGraphStore.js.map +1 -1
  48. package/dist/store/instrumentTool.d.ts +9 -1
  49. package/dist/store/instrumentTool.js +33 -2
  50. package/dist/store/instrumentTool.js.map +1 -1
  51. package/dist/store/jsonlGraph.d.ts +22 -0
  52. package/dist/store/jsonlGraph.js +75 -18
  53. package/dist/store/jsonlGraph.js.map +1 -1
  54. package/dist/store/jsonlLines.d.ts +21 -0
  55. package/dist/store/jsonlLines.js +64 -0
  56. package/dist/store/jsonlLines.js.map +1 -0
  57. package/dist/store/repoSession.d.ts +19 -0
  58. package/dist/store/repoSession.js +25 -0
  59. package/dist/store/repoSession.js.map +1 -1
  60. package/dist/store/trackedGraph.d.ts +14 -0
  61. package/dist/store/trackedGraph.js +39 -0
  62. package/dist/store/trackedGraph.js.map +1 -0
  63. package/dist/tools/readCypher.js +9 -2
  64. package/dist/tools/readCypher.js.map +1 -1
  65. package/dist/tools/semanticFind.js +9 -6
  66. package/dist/tools/semanticFind.js.map +1 -1
  67. package/package.json +1 -1
@@ -21,8 +21,10 @@
21
21
  const VOYAGE_ENDPOINT = "https://api.voyageai.com/v1/embeddings";
22
22
  const DEFAULT_MODEL = "voyage-code-3";
23
23
  const DEFAULT_DIMS = 1024;
24
- /** Max texts per request (Voyage API limit). */
25
- const BATCH_SIZE = 1000;
24
+ /** Max texts per request (Voyage API limit). Enforced by the shared batcher. */
25
+ const MAX_BATCH_ITEMS = 1000;
26
+ /** Max tokens per request (Voyage API limit). Enforced by the shared batcher. */
27
+ const MAX_BATCH_TOKENS = 120000;
26
28
  /** Default embedding request timeout in ms. Override with REPOSKEIN_EMBED_TIMEOUT_MS. */
27
29
  const DEFAULT_TIMEOUT_MS = 30000;
28
30
  export class VoyageEmbeddingProvider {
@@ -59,62 +61,56 @@ export class VoyageEmbeddingProvider {
59
61
  id() { return this._id; }
60
62
  modelId() { return this._modelId; }
61
63
  dims() { return this._dims; }
62
- async embed(texts, kind) {
64
+ limits() {
65
+ return { maxItems: MAX_BATCH_ITEMS, maxTokens: MAX_BATCH_TOKENS };
66
+ }
67
+ async embedBatch(texts, kind) {
63
68
  if (texts.length === 0)
64
69
  return [];
65
- const results = [];
66
- // Batch up to BATCH_SIZE texts per request
67
- for (let i = 0; i < texts.length; i += BATCH_SIZE) {
68
- const batch = texts.slice(i, i + BATCH_SIZE);
69
- const body = {
70
- input: batch,
71
- model: this._modelId,
72
- input_type: kind,
73
- };
74
- // Only send output_dimension when the user explicitly configured it.
75
- // Voyage defaults to the model's native dimensionality when omitted.
76
- if (this._dimsExplicit) {
77
- body["output_dimension"] = this._dims;
78
- }
79
- const controller = new AbortController();
80
- const timer = setTimeout(() => controller.abort(), this._timeoutMs);
81
- let res;
82
- try {
83
- res = await fetch(VOYAGE_ENDPOINT, {
84
- method: "POST",
85
- headers: {
86
- "Content-Type": "application/json",
87
- "Authorization": `Bearer ${this._apiKey}`,
88
- },
89
- body: JSON.stringify(body),
90
- signal: controller.signal,
91
- });
92
- }
93
- finally {
94
- clearTimeout(timer);
95
- }
96
- if (!res.ok) {
97
- const text = await res.text().catch(() => "(no body)");
98
- throw new Error(`Voyage API error ${res.status}: ${text}`);
99
- }
100
- const contentType = res.headers.get("content-type") ?? "";
101
- if (!contentType.includes("application/json")) {
102
- const text = await res.text().catch(() => "(unreadable body)");
103
- throw new Error(`Voyage API returned non-JSON response (${contentType}): ${text.slice(0, 200)}`);
104
- }
105
- const json = (await res.json());
106
- if (!Array.isArray(json.embeddings)) {
107
- throw new Error(`Voyage API response missing embeddings array: ${JSON.stringify(json)}`);
108
- }
109
- if (json.embeddings.length !== batch.length) {
110
- throw new Error(`Voyage API returned ${json.embeddings.length} embeddings for batch of ${batch.length} texts — batch count mismatch`);
111
- }
112
- results.push(...json.embeddings);
70
+ const body = {
71
+ input: texts,
72
+ model: this._modelId,
73
+ input_type: kind,
74
+ };
75
+ // Only send output_dimension when the user explicitly configured it.
76
+ // Voyage defaults to the model's native dimensionality when omitted.
77
+ if (this._dimsExplicit) {
78
+ body["output_dimension"] = this._dims;
79
+ }
80
+ const controller = new AbortController();
81
+ const timer = setTimeout(() => controller.abort(), this._timeoutMs);
82
+ let res;
83
+ try {
84
+ res = await fetch(VOYAGE_ENDPOINT, {
85
+ method: "POST",
86
+ headers: {
87
+ "Content-Type": "application/json",
88
+ "Authorization": `Bearer ${this._apiKey}`,
89
+ },
90
+ body: JSON.stringify(body),
91
+ signal: controller.signal,
92
+ });
93
+ }
94
+ finally {
95
+ clearTimeout(timer);
96
+ }
97
+ if (!res.ok) {
98
+ const text = await res.text().catch(() => "(no body)");
99
+ throw new Error(`Voyage API error ${res.status}: ${text}`);
100
+ }
101
+ const contentType = res.headers.get("content-type") ?? "";
102
+ if (!contentType.includes("application/json")) {
103
+ const text = await res.text().catch(() => "(unreadable body)");
104
+ throw new Error(`Voyage API returned non-JSON response (${contentType}): ${text.slice(0, 200)}`);
105
+ }
106
+ const json = (await res.json());
107
+ if (!Array.isArray(json.embeddings)) {
108
+ throw new Error(`Voyage API response missing embeddings array: ${JSON.stringify(json)}`);
113
109
  }
114
- if (results.length !== texts.length) {
115
- throw new Error(`Voyage API returned ${results.length} total embeddings for ${texts.length} input texts — total count mismatch`);
110
+ if (json.embeddings.length !== texts.length) {
111
+ throw new Error(`Voyage API returned ${json.embeddings.length} embeddings for batch of ${texts.length} texts — batch count mismatch`);
116
112
  }
117
- return results;
113
+ return json.embeddings;
118
114
  }
119
115
  }
120
116
  //# sourceMappingURL=voyage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../../src/embed/providers/voyage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,gDAAgD;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAOjC,MAAM,OAAO,uBAAuB;IACjB,GAAG,GAAG,QAAQ,CAAC;IACf,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,UAAU,CAAS;IACpC,mEAAmE;IAClD,aAAa,CAAU;IAExC,YAAY,MAAyB,OAAO,CAAC,GAAG;QAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,uBAAuB,CAAC,IAAI,aAAa,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,4DAA4D,CACrG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACvF,CAAC;IAED,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,KAAK,CAAC,KAAe,EAAE,IAAe;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,2CAA2C;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;YAC7C,MAAM,IAAI,GAA4B;gBACpC,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI,CAAC,QAAQ;gBACpB,UAAU,EAAE,IAAI;aACjB,CAAC;YACF,qEAAqE;YACrE,qEAAqE;YACrE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACxC,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,GAAa,CAAC;YAClB,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;oBACjC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;qBAC1C;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,0CAA0C,WAAW,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,CAAC,UAAU,CAAC,MAAM,4BAA4B,KAAK,CAAC,MAAM,+BAA+B,CACrH,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,MAAM,yBAAyB,KAAK,CAAC,MAAM,qCAAqC,CAChH,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../../src/embed/providers/voyage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,gFAAgF;AAChF,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,iFAAiF;AACjF,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAOjC,MAAM,OAAO,uBAAuB;IACjB,GAAG,GAAG,QAAQ,CAAC;IACf,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,UAAU,CAAS;IACpC,mEAAmE;IAClD,aAAa,CAAU;IAExC,YAAY,MAAyB,OAAO,CAAC,GAAG;QAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,uBAAuB,CAAC,IAAI,aAAa,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,4DAA4D,CACrG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACvF,CAAC;IAED,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,MAAM;QACJ,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe,EAAE,IAAe;QAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,qEAAqE;QACrE,qEAAqE;QACrE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;gBACjC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;iBAC1C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,0CAA0C,WAAW,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,CAAC,UAAU,CAAC,MAAM,4BAA4B,KAAK,CAAC,MAAM,+BAA+B,CACrH,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Fixed-stride binary vector store for the optional hybrid `semantic_find` tier.
3
+ *
4
+ * Two files beside each other under `.reposkein/local/embeddings/` — gitignored,
5
+ * never committed, never required:
6
+ *
7
+ * <name>.vec dims * 4 bytes per slot, little-endian float32
8
+ * <name>.idx.jsonl one {id, doc_hash} per line; the line number IS the slot
9
+ *
10
+ * Both are append-only in the steady state, which is what lets an interrupted
11
+ * cold run resume: an OOM-kill does not unwind the stack, so anything that only
12
+ * persisted at the end would persist nothing.
13
+ *
14
+ * ## Why not the JSON cache this replaces
15
+ *
16
+ * It stored vectors as JSON text — 21,865 bytes per 1024-dim vector against
17
+ * 4,096 for the floats — and handed them back as `number[]`, 8,252 bytes each
18
+ * and all of it ON the V8 heap, whose limit in this process is about 4.19 GB.
19
+ * At 200k nodes that was ~6 GB to load and ~14.8 GB to save; it OOMed around
20
+ * 140k. And because ranking lived in the caller, every query re-read the lot.
21
+ *
22
+ * A `Float32Array` view over a `Buffer` is 4 bytes per dimension and lives
23
+ * OUTSIDE the heap limit, so the change is worth roughly 10x of headroom rather
24
+ * than 2x. Ranking moved in here for the same reason: `topK` allocates k
25
+ * results, not one object per corpus node.
26
+ */
27
+ export interface VectorRecord {
28
+ id: string;
29
+ /** Hash of the document string this vector was built from (invalidation key). */
30
+ docHash: string;
31
+ vector: number[] | Float32Array;
32
+ }
33
+ export interface ScoredId {
34
+ id: string;
35
+ score: number;
36
+ }
37
+ export interface VectorStorePaths {
38
+ vectors: string;
39
+ index: string;
40
+ }
41
+ /** The two files for a store, given its base path (no extension). */
42
+ export declare function vectorStorePaths(base: string): VectorStorePaths;
43
+ export declare class VectorStore {
44
+ private readonly paths;
45
+ private readonly dims;
46
+ /** id -> slot. Small: two short strings and a number per embedded node. */
47
+ private readonly slots;
48
+ /** Every vector, contiguous, off-heap. */
49
+ private buf;
50
+ /** Cached L2 norms, one float per slot — computed at load, not per query. */
51
+ private norms;
52
+ /** Slots appended since the last flush, still only in `buf`. */
53
+ private pending;
54
+ constructor(base: string, dims: number);
55
+ get size(): number;
56
+ private stride;
57
+ private load;
58
+ private recomputeNorms;
59
+ /** A view, not a copy: no per-call allocation of the vector itself. */
60
+ private vectorAt;
61
+ get(id: string): Float32Array | undefined;
62
+ docHash(id: string): string | undefined;
63
+ /** Add or replace vectors. Held in memory until `flush`. */
64
+ upsertMany(records: VectorRecord[]): void;
65
+ /** Append everything since the last flush. Best-effort: a failed flush costs
66
+ * re-embedding, never correctness. */
67
+ flush(): void;
68
+ /**
69
+ * The k most similar ids by cosine, best first.
70
+ *
71
+ * Ranking lives here rather than in the caller so that the caller never has
72
+ * to hold the corpus: this allocates k results, not one object per node.
73
+ * `candidates`, when given, restricts scoring to that set.
74
+ */
75
+ topK(query: number[] | Float32Array, k: number, candidates?: Set<string>): ScoredId[];
76
+ /**
77
+ * Rewrite both files with one slot per live id.
78
+ *
79
+ * Appending means a re-embedded node leaves its old slot behind. Worth doing
80
+ * when the dead weight is material; pointless otherwise.
81
+ */
82
+ compact(): void;
83
+ /** How much of the file is dead slots, 0..1. */
84
+ wastedFraction(): number;
85
+ }
86
+ export declare function openVectorStore(base: string, dims: number): VectorStore;
87
+ /** Remove a legacy JSON vector cache, which the binary store supersedes.
88
+ * At 200k nodes that file was over 4 GB; leaving it costs real disk. */
89
+ export declare function removeLegacyJsonCache(base: string): void;
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Fixed-stride binary vector store for the optional hybrid `semantic_find` tier.
3
+ *
4
+ * Two files beside each other under `.reposkein/local/embeddings/` — gitignored,
5
+ * never committed, never required:
6
+ *
7
+ * <name>.vec dims * 4 bytes per slot, little-endian float32
8
+ * <name>.idx.jsonl one {id, doc_hash} per line; the line number IS the slot
9
+ *
10
+ * Both are append-only in the steady state, which is what lets an interrupted
11
+ * cold run resume: an OOM-kill does not unwind the stack, so anything that only
12
+ * persisted at the end would persist nothing.
13
+ *
14
+ * ## Why not the JSON cache this replaces
15
+ *
16
+ * It stored vectors as JSON text — 21,865 bytes per 1024-dim vector against
17
+ * 4,096 for the floats — and handed them back as `number[]`, 8,252 bytes each
18
+ * and all of it ON the V8 heap, whose limit in this process is about 4.19 GB.
19
+ * At 200k nodes that was ~6 GB to load and ~14.8 GB to save; it OOMed around
20
+ * 140k. And because ranking lived in the caller, every query re-read the lot.
21
+ *
22
+ * A `Float32Array` view over a `Buffer` is 4 bytes per dimension and lives
23
+ * OUTSIDE the heap limit, so the change is worth roughly 10x of headroom rather
24
+ * than 2x. Ranking moved in here for the same reason: `topK` allocates k
25
+ * results, not one object per corpus node.
26
+ */
27
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
28
+ import { dirname } from "node:path";
29
+ /** The two files for a store, given its base path (no extension). */
30
+ export function vectorStorePaths(base) {
31
+ return { vectors: `${base}.vec`, index: `${base}.idx.jsonl` };
32
+ }
33
+ export class VectorStore {
34
+ paths;
35
+ dims;
36
+ /** id -> slot. Small: two short strings and a number per embedded node. */
37
+ slots = new Map();
38
+ /** Every vector, contiguous, off-heap. */
39
+ buf;
40
+ /** Cached L2 norms, one float per slot — computed at load, not per query. */
41
+ norms;
42
+ /** Slots appended since the last flush, still only in `buf`. */
43
+ pending = [];
44
+ constructor(base, dims) {
45
+ this.paths = vectorStorePaths(base);
46
+ this.dims = dims;
47
+ this.buf = Buffer.alloc(0);
48
+ this.norms = new Float64Array(0);
49
+ this.load();
50
+ }
51
+ get size() {
52
+ return this.slots.size;
53
+ }
54
+ stride() {
55
+ return this.dims * 4;
56
+ }
57
+ load() {
58
+ if (!existsSync(this.paths.index) || !existsSync(this.paths.vectors))
59
+ return;
60
+ let raw;
61
+ let indexText;
62
+ try {
63
+ raw = readFileSync(this.paths.vectors);
64
+ indexText = readFileSync(this.paths.index, "utf8");
65
+ }
66
+ catch {
67
+ return; // unreadable store is a cold start, never an error
68
+ }
69
+ // A store written at a different dimensionality is not a store we can read:
70
+ // the same bytes mean something else, and scoring them would be silently
71
+ // wrong. Treat it as absent so everything is re-embedded.
72
+ if (raw.length % this.stride() !== 0)
73
+ return;
74
+ const capacity = raw.length / this.stride();
75
+ let slot = 0;
76
+ for (const line of indexText.split("\n")) {
77
+ if (line.trim() === "")
78
+ continue;
79
+ let parsed;
80
+ try {
81
+ parsed = JSON.parse(line);
82
+ }
83
+ catch {
84
+ continue; // a torn or malformed line costs one re-embed, not the query
85
+ }
86
+ const o = parsed;
87
+ const id = o["id"];
88
+ const docHash = o["doc_hash"];
89
+ if (typeof id !== "string" || typeof docHash !== "string")
90
+ continue;
91
+ // An index row with no vector behind it is a torn write: the line landed,
92
+ // the bytes did not.
93
+ if (slot >= capacity)
94
+ break;
95
+ // Last write for an id wins, exactly as the append-only file implies.
96
+ this.slots.set(id, { slot, docHash });
97
+ slot++;
98
+ }
99
+ this.buf = raw;
100
+ this.recomputeNorms(capacity);
101
+ }
102
+ recomputeNorms(capacity) {
103
+ this.norms = new Float64Array(capacity);
104
+ for (let s = 0; s < capacity; s++) {
105
+ const v = this.vectorAt(s);
106
+ let sum = 0;
107
+ for (let i = 0; i < this.dims; i++)
108
+ sum += v[i] * v[i];
109
+ this.norms[s] = Math.sqrt(sum);
110
+ }
111
+ }
112
+ /** A view, not a copy: no per-call allocation of the vector itself. */
113
+ vectorAt(slot) {
114
+ const start = slot * this.stride();
115
+ return new Float32Array(this.buf.buffer, this.buf.byteOffset + start, this.dims);
116
+ }
117
+ get(id) {
118
+ const s = this.slots.get(id);
119
+ return s === undefined ? undefined : this.vectorAt(s.slot);
120
+ }
121
+ docHash(id) {
122
+ return this.slots.get(id)?.docHash;
123
+ }
124
+ /** Add or replace vectors. Held in memory until `flush`. */
125
+ upsertMany(records) {
126
+ if (records.length === 0)
127
+ return;
128
+ const chunks = [this.buf];
129
+ let slot = this.buf.length / this.stride();
130
+ for (const r of records) {
131
+ const b = Buffer.allocUnsafe(this.stride());
132
+ for (let i = 0; i < this.dims; i++)
133
+ b.writeFloatLE(Number(r.vector[i] ?? 0), i * 4);
134
+ chunks.push(b);
135
+ this.slots.set(r.id, { slot, docHash: r.docHash });
136
+ this.pending.push({ id: r.id, docHash: r.docHash });
137
+ slot++;
138
+ }
139
+ this.buf = Buffer.concat(chunks);
140
+ this.recomputeNorms(this.buf.length / this.stride());
141
+ }
142
+ /** Append everything since the last flush. Best-effort: a failed flush costs
143
+ * re-embedding, never correctness. */
144
+ flush() {
145
+ if (this.pending.length === 0)
146
+ return;
147
+ const pending = this.pending;
148
+ this.pending = [];
149
+ try {
150
+ mkdirSync(dirname(this.paths.vectors), { recursive: true });
151
+ const start = (this.buf.length / this.stride() - pending.length) * this.stride();
152
+ appendFileSync(this.paths.vectors, this.buf.subarray(start));
153
+ appendFileSync(this.paths.index, pending.map((p) => JSON.stringify({ id: p.id, doc_hash: p.docHash })).join("\n") + "\n");
154
+ }
155
+ catch {
156
+ // best-effort
157
+ }
158
+ }
159
+ /**
160
+ * The k most similar ids by cosine, best first.
161
+ *
162
+ * Ranking lives here rather than in the caller so that the caller never has
163
+ * to hold the corpus: this allocates k results, not one object per node.
164
+ * `candidates`, when given, restricts scoring to that set.
165
+ */
166
+ topK(query, k, candidates) {
167
+ if (k <= 0 || this.slots.size === 0)
168
+ return [];
169
+ let qNorm = 0;
170
+ for (let i = 0; i < this.dims; i++)
171
+ qNorm += Number(query[i] ?? 0) ** 2;
172
+ qNorm = Math.sqrt(qNorm);
173
+ if (qNorm === 0)
174
+ return [];
175
+ // A bounded insertion list: k is small (tens), so this beats a heap in
176
+ // practice and keeps the allocation proportional to k.
177
+ const best = [];
178
+ for (const [id, { slot }] of this.slots) {
179
+ if (candidates !== undefined && !candidates.has(id))
180
+ continue;
181
+ const norm = this.norms[slot];
182
+ if (norm === 0)
183
+ continue; // a zero vector has no direction to compare
184
+ const v = this.vectorAt(slot);
185
+ let dot = 0;
186
+ for (let i = 0; i < this.dims; i++)
187
+ dot += v[i] * Number(query[i] ?? 0);
188
+ const score = dot / (norm * qNorm);
189
+ if (best.length < k) {
190
+ best.push({ id, score });
191
+ best.sort(byScoreThenId);
192
+ }
193
+ else if (score > best[best.length - 1].score) {
194
+ best[best.length - 1] = { id, score };
195
+ best.sort(byScoreThenId);
196
+ }
197
+ }
198
+ return best;
199
+ }
200
+ /**
201
+ * Rewrite both files with one slot per live id.
202
+ *
203
+ * Appending means a re-embedded node leaves its old slot behind. Worth doing
204
+ * when the dead weight is material; pointless otherwise.
205
+ */
206
+ compact() {
207
+ const live = [...this.slots.entries()];
208
+ const capacity = this.buf.length / this.stride();
209
+ if (live.length === capacity)
210
+ return;
211
+ try {
212
+ mkdirSync(dirname(this.paths.vectors), { recursive: true });
213
+ const out = Buffer.allocUnsafe(live.length * this.stride());
214
+ const lines = [];
215
+ live.forEach(([id, s], i) => {
216
+ this.buf.copy(out, i * this.stride(), s.slot * this.stride(), (s.slot + 1) * this.stride());
217
+ lines.push(JSON.stringify({ id, doc_hash: s.docHash }));
218
+ });
219
+ // Unique per process: concurrent compactions must not rename through a
220
+ // shared temp path, where the loser would publish a stale snapshot.
221
+ const uniq = `${process.pid}.${Math.random().toString(36).slice(2, 10)}`;
222
+ const tmpVec = `${this.paths.vectors}.${uniq}.tmp`;
223
+ const tmpIdx = `${this.paths.index}.${uniq}.tmp`;
224
+ writeFileSync(tmpVec, out);
225
+ writeFileSync(tmpIdx, lines.length ? lines.join("\n") + "\n" : "");
226
+ renameSync(tmpVec, this.paths.vectors);
227
+ renameSync(tmpIdx, this.paths.index);
228
+ this.buf = out;
229
+ live.forEach(([id, s], i) => this.slots.set(id, { slot: i, docHash: s.docHash }));
230
+ this.recomputeNorms(live.length);
231
+ }
232
+ catch {
233
+ // best-effort; a failed compaction leaves a correct, larger store
234
+ }
235
+ }
236
+ /** How much of the file is dead slots, 0..1. */
237
+ wastedFraction() {
238
+ const capacity = this.buf.length / this.stride();
239
+ if (capacity === 0)
240
+ return 0;
241
+ return (capacity - this.slots.size) / capacity;
242
+ }
243
+ }
244
+ /** Descending score, ties broken by ascending id.
245
+ * Ranking feeds a tool result, so equal scores must not reorder run to run. */
246
+ function byScoreThenId(a, b) {
247
+ const d = b.score - a.score;
248
+ if (d !== 0)
249
+ return d;
250
+ return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
251
+ }
252
+ export function openVectorStore(base, dims) {
253
+ return new VectorStore(base, dims);
254
+ }
255
+ /** Remove a legacy JSON vector cache, which the binary store supersedes.
256
+ * At 200k nodes that file was over 4 GB; leaving it costs real disk. */
257
+ export function removeLegacyJsonCache(base) {
258
+ const legacy = `${base}.jsonl`;
259
+ try {
260
+ if (existsSync(legacy) && statSync(legacy).isFile())
261
+ unlinkSync(legacy);
262
+ }
263
+ catch {
264
+ // best-effort
265
+ }
266
+ }
267
+ //# sourceMappingURL=vectorStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorStore.js","sourceRoot":"","sources":["../../src/embed/vectorStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,qEAAqE;AACrE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;AAChE,CAAC;AAOD,MAAM,OAAO,WAAW;IACL,KAAK,CAAmB;IACxB,IAAI,CAAS;IAC9B,2EAA2E;IAC1D,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACjD,0CAA0C;IAClC,GAAG,CAAS;IACpB,6EAA6E;IACrE,KAAK,CAAe;IAC5B,gEAAgE;IACxD,OAAO,GAA2C,EAAE,CAAC;IAE7D,YAAY,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAEO,MAAM;QACZ,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACvB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO;QAC7E,IAAI,GAAW,CAAC;QAChB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,mDAAmD;QAC7D,CAAC;QAED,4EAA4E;QAC5E,yEAAyE;QACzE,0DAA0D;QAC1D,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACjC,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,6DAA6D;YACzE,CAAC;YACD,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YACpE,0EAA0E;YAC1E,qBAAqB;YACrB,IAAI,IAAI,IAAI,QAAQ;gBAAE,MAAM;YAC5B,sEAAsE;YACtE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC;QACT,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uEAAuE;IAC/D,QAAQ,CAAC,IAAY;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,OAAuB;QAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,MAAM,GAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;gBAAE,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,CAAC;QACT,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;2CACuC;IACvC,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACjF,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,cAAc,CACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACxF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,KAA8B,EAAE,CAAS,EAAE,UAAwB;QACtE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3B,uEAAuE;QACvE,uDAAuD;QACvD,MAAM,IAAI,GAAe,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;YAC/B,IAAI,IAAI,KAAK,CAAC;gBAAE,SAAS,CAAC,4CAA4C;YACtE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC;iBAAM,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QACrC,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YACH,uEAAuE;YACvE,oEAAoE;YACpE,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzE,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,MAAM,CAAC;YACnD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC;YACjD,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACjD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IACjD,CAAC;CACF;AAED;gFACgF;AAChF,SAAS,aAAa,CAAC,CAAW,EAAE,CAAW;IAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
@@ -2,6 +2,9 @@ export interface CapResult {
2
2
  rows: unknown[];
3
3
  truncated: boolean;
4
4
  }
5
+ /** The row cap for tool results. Exported so callers can ask the store to
6
+ * stop streaming there instead of capping after the fact. */
7
+ export declare const MAX_ROWS = 200;
5
8
  /** Bounds a result set to at most `maxRows` and `maxBytes` of serialized JSON
6
9
  * (PRD §7.2 / §3.7 layer 3). Sets `truncated` when anything was dropped. */
7
10
  export declare function applyCaps(rows: unknown[], maxRows?: number, maxBytes?: number): CapResult;
@@ -1,6 +1,9 @@
1
+ /** The row cap for tool results. Exported so callers can ask the store to
2
+ * stop streaming there instead of capping after the fact. */
3
+ export const MAX_ROWS = 200;
1
4
  /** Bounds a result set to at most `maxRows` and `maxBytes` of serialized JSON
2
5
  * (PRD §7.2 / §3.7 layer 3). Sets `truncated` when anything was dropped. */
3
- export function applyCaps(rows, maxRows = 200, maxBytes = 64 * 1024) {
6
+ export function applyCaps(rows, maxRows = MAX_ROWS, maxBytes = 64 * 1024) {
4
7
  const out = [];
5
8
  let bytes = 0;
6
9
  let truncated = false;
@@ -1 +1 @@
1
- {"version":3,"file":"caps.js","sourceRoot":"","sources":["../../src/guard/caps.ts"],"names":[],"mappings":"AAKA;6EAC6E;AAC7E,MAAM,UAAU,SAAS,CACvB,IAAe,EACf,OAAO,GAAG,GAAG,EACb,QAAQ,GAAG,EAAE,GAAG,IAAI;IAEpB,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,KAAK,GAAG,IAAI,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"caps.js","sourceRoot":"","sources":["../../src/guard/caps.ts"],"names":[],"mappings":"AAKA;8DAC8D;AAC9D,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B;6EAC6E;AAC7E,MAAM,UAAU,SAAS,CACvB,IAAe,EACf,OAAO,GAAG,QAAQ,EAClB,QAAQ,GAAG,EAAE,GAAG,IAAI;IAEpB,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,KAAK,GAAG,IAAI,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { pathToFileURL } from "node:url";
3
3
  import { runInit, runIndex } from "./cli/init.js";
4
4
  import { parseAgentsFlag } from "./cli/agentAdapters.js";
5
5
  import { runDoctor, resolveDoctorRepoPath } from "./cli/doctor.js";
6
+ import { runMigrate } from "./cli/migrate.js";
6
7
  import { runAdr } from "./cli/adr.js";
7
8
  import { runAdrReanchor } from "./cli/adrReanchor.js";
8
9
  import { runView, runExport, parseViewArgs } from "./cli/view.js";
@@ -24,7 +25,8 @@ Usage:
24
25
  reposkein-mcp start the MCP server (stdio transport)
25
26
  reposkein-mcp init [path] set up a repo (indexer, git hooks, skill, graph); --no-index skips the initial index, --ci also writes a GitHub Pages publish workflow (see docs/HOSTING.md). On a repo joined from a committed .reposkein/meta.json, also auto-writes local agent MCP config (--agents claude,opencode,cursor to override detection, --dry-run to preview)
26
27
  reposkein-mcp index [path] (re)build the committed graph
27
- reposkein-mcp doctor [path] health check (indexer binary, index, repo id, hooks, graph freshness); --json for machine output, --ci additionally fails on stale graph / missing hooks / unsplit legacy summaries
28
+ reposkein-mcp doctor [path] health check (indexer binary, index, repo id, hooks, graph freshness); --json for machine output, --ci additionally fails on stale graph / missing hooks / unsplit legacy summaries / a tracked derived graph (graph_tracked)
29
+ reposkein-mcp migrate [path] [--dry-run] untrack a still-committed derived graph (pre-0.2.7 repos), refresh hooks + .gitignore/.gitattributes
28
30
  reposkein-mcp adr <sub> ... decision-log utilities (export|import|reanchor)
29
31
  reposkein-mcp stats [path] session usage report (calls, tokens saved vs grep)
30
32
  reposkein-mcp support <token> install a supporter token (verified locally, stored at ~/.config/reposkein/supporter.jwt, mode 600); pass \`-\` to read it from stdin instead of argv (keeps it out of shell history and \`ps\`); --status to show tier/expiry, --remove to delete it. Offline: no network call, ever
@@ -111,6 +113,19 @@ if (invokedAsBin()) {
111
113
  .then((code) => process.exit(code))
112
114
  .catch((err) => { console.error(err); process.exit(1); });
113
115
  }
116
+ else if (sub === "migrate") {
117
+ const rest = process.argv.slice(3);
118
+ const dryRun = rest.includes("--dry-run");
119
+ const explicitPath = rest.find((a) => !a.startsWith("-"));
120
+ const { path, error } = resolveDoctorRepoPath(explicitPath, process.cwd(), process.env.REPOSKEIN_REPO_PATH);
121
+ if (error) {
122
+ console.error(`reposkein migrate: ${error}`);
123
+ process.exit(1);
124
+ }
125
+ runMigrate(path, { dryRun })
126
+ .then((code) => process.exit(code))
127
+ .catch((err) => { console.error(err); process.exit(1); });
128
+ }
114
129
  else if (sub === "stats") {
115
130
  process.exit(runStats(process.argv.slice(3), process.cwd(), process.env.REPOSKEIN_REPO_PATH));
116
131
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}