git-memory 0.1.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 (51) hide show
  1. package/LICENSE +661 -0
  2. package/config/mcp_config_example.json +16 -0
  3. package/dist/chroma-index.d.ts +63 -0
  4. package/dist/chroma-index.d.ts.map +1 -0
  5. package/dist/chroma-index.js +166 -0
  6. package/dist/chroma-index.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +311 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/context-store.d.ts +54 -0
  12. package/dist/context-store.d.ts.map +1 -0
  13. package/dist/context-store.js +187 -0
  14. package/dist/context-store.js.map +1 -0
  15. package/dist/embeddings.d.ts +10 -0
  16. package/dist/embeddings.d.ts.map +1 -0
  17. package/dist/embeddings.js +42 -0
  18. package/dist/embeddings.js.map +1 -0
  19. package/dist/filters.d.ts +70 -0
  20. package/dist/filters.d.ts.map +1 -0
  21. package/dist/filters.js +131 -0
  22. package/dist/filters.js.map +1 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +14 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/indexer.d.ts +45 -0
  28. package/dist/indexer.d.ts.map +1 -0
  29. package/dist/indexer.js +242 -0
  30. package/dist/indexer.js.map +1 -0
  31. package/dist/mcp-server.d.ts +8 -0
  32. package/dist/mcp-server.d.ts.map +1 -0
  33. package/dist/mcp-server.js +373 -0
  34. package/dist/mcp-server.js.map +1 -0
  35. package/dist/store.d.ts +17 -0
  36. package/dist/store.d.ts.map +1 -0
  37. package/dist/store.js +47 -0
  38. package/dist/store.js.map +1 -0
  39. package/dist/types.d.ts +59 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +25 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/vector-store.d.ts +65 -0
  44. package/dist/vector-store.d.ts.map +1 -0
  45. package/dist/vector-store.js +152 -0
  46. package/dist/vector-store.js.map +1 -0
  47. package/package.json +52 -0
  48. package/skills/git-memory-debug/SKILL.md +99 -0
  49. package/skills/git-memory-index/SKILL.md +88 -0
  50. package/skills/git-memory-search/SKILL.md +92 -0
  51. package/skills/git-memory-status/SKILL.md +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Store a single commit into ChromaDB + ContextStore.
3
+ * Called by CLI `git-memory store [commit-ref]`.
4
+ *
5
+ * Matches Python store.py exactly:
6
+ * - Accepts a commit ref (default: HEAD)
7
+ * - Quick relevance check before creating full indexer
8
+ * - Returns true if stored, false if skipped
9
+ *
10
+ * Exit codes are handled by the CLI (0 = stored, 1 = skipped).
11
+ */
12
+ export declare function storeCommit(commitRef?: string, opts?: {
13
+ repoPath?: string;
14
+ userId?: string;
15
+ force?: boolean;
16
+ }): Promise<boolean>;
17
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,SAAS,SAAS,EAClB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACjE,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
package/dist/store.js ADDED
@@ -0,0 +1,47 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { GitMemoryIndexer } from './indexer.js';
3
+ import { isRelevant } from './filters.js';
4
+ import { configFromEnv } from './types.js';
5
+ /**
6
+ * Store a single commit into ChromaDB + ContextStore.
7
+ * Called by CLI `git-memory store [commit-ref]`.
8
+ *
9
+ * Matches Python store.py exactly:
10
+ * - Accepts a commit ref (default: HEAD)
11
+ * - Quick relevance check before creating full indexer
12
+ * - Returns true if stored, false if skipped
13
+ *
14
+ * Exit codes are handled by the CLI (0 = stored, 1 = skipped).
15
+ */
16
+ export async function storeCommit(commitRef = 'HEAD', opts = {}) {
17
+ const config = configFromEnv();
18
+ if (opts.repoPath)
19
+ config.repoPath = opts.repoPath;
20
+ if (opts.userId)
21
+ config.userId = opts.userId;
22
+ const git = simpleGit(config.repoPath);
23
+ // Resolve ref to full hash
24
+ let hash;
25
+ try {
26
+ hash = (await git.revparse([commitRef])).trim();
27
+ }
28
+ catch (e) {
29
+ process.stderr.write(`store: failed to resolve ref '${commitRef}': ${e}\n`);
30
+ return false;
31
+ }
32
+ // Quick relevance check before creating the full indexer (matches Python store.py:22-23)
33
+ if (!opts.force) {
34
+ try {
35
+ const log = await git.log({ from: `${hash}~1`, to: hash, maxCount: 1 });
36
+ const msg = log.latest?.message ?? '';
37
+ if (!isRelevant(msg))
38
+ return false;
39
+ }
40
+ catch {
41
+ // Root commit or shallow clone — skip check, let indexer decide
42
+ }
43
+ }
44
+ const indexer = await GitMemoryIndexer.create(config);
45
+ return indexer.indexCommit(hash, opts.force);
46
+ }
47
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAS,GAAG,MAAM,EAClB,OAAgE,EAAE;IAElE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM;QAAI,MAAM,CAAC,MAAM,GAAK,IAAI,CAAC,MAAM,CAAC;IAEjD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yFAAyF;IACzF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,59 @@
1
+ /** Metadata stored per-commit in ChromaDB. Matches Python version field-for-field. */
2
+ export interface CommitMetadata {
3
+ short_hash: string;
4
+ author_name: string;
5
+ author_email: string;
6
+ committed_date: string;
7
+ category: CommitCategory;
8
+ repo: string;
9
+ files_str: string;
10
+ date_str: string;
11
+ }
12
+ /** Metadata used during indexing (superset of CommitMetadata). Matches Python build_metadata(). */
13
+ export interface IndexMetadata extends CommitMetadata {
14
+ type: 'git_commit';
15
+ commit_hash: string;
16
+ files_changed: string[];
17
+ }
18
+ export type CommitCategory = 'fix' | 'feat' | 'refactor' | 'arch' | 'perf' | 'security' | 'migration' | 'general';
19
+ /**
20
+ * A commit record returned by all 5 MCP tools.
21
+ * Field names match Python MCP response shape exactly:
22
+ * - "author" (not "author_name")
23
+ * - "date" (not "committed_date")
24
+ */
25
+ export interface CommitRecord {
26
+ commit_hash: string;
27
+ short_hash: string;
28
+ author: string;
29
+ date: string;
30
+ category: CommitCategory | string;
31
+ files_changed: string[];
32
+ summary: string;
33
+ relevance_score: number;
34
+ source?: string;
35
+ learned_context?: string[];
36
+ in_chroma_index?: boolean;
37
+ }
38
+ export interface IndexStats {
39
+ total_evaluated: number;
40
+ stored: number;
41
+ skipped_irrelevant: number;
42
+ skipped_duplicate: number;
43
+ errors: number;
44
+ }
45
+ export type EmbedProvider = 'ollama' | 'openai' | 'fastembed';
46
+ export interface GitMemoryConfig {
47
+ repoPath: string;
48
+ userId: string;
49
+ chromaDir: string;
50
+ contextDir: string;
51
+ embedProvider: EmbedProvider;
52
+ embedModel: string;
53
+ ollamaUrl: string;
54
+ llmModel: string;
55
+ openaiApiKey?: string;
56
+ }
57
+ /** Build config from environment variables with sensible defaults. */
58
+ export declare function configFromEnv(): GitMemoryConfig;
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mGAAmG;AACnG,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,UAAU,GACV,WAAW,GACX,SAAS,CAAC;AAEd;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,wBAAgB,aAAa,IAAI,eAAe,CAoB/C"}
package/dist/types.js ADDED
@@ -0,0 +1,25 @@
1
+ import { homedir } from 'os';
2
+ import { join } from 'path';
3
+ /** Build config from environment variables with sensible defaults. */
4
+ export function configFromEnv() {
5
+ const home = homedir();
6
+ const provider = (process.env.GIT_MEMORY_EMBED_PROVIDER || 'ollama');
7
+ // Default model differs per provider — matches Python behaviour
8
+ let defaultEmbedModel = 'nomic-embed-text';
9
+ if (provider === 'openai')
10
+ defaultEmbedModel = 'text-embedding-3-small';
11
+ if (provider === 'fastembed')
12
+ defaultEmbedModel = 'BAAI/bge-small-en-v1.5';
13
+ return {
14
+ repoPath: process.env.GIT_MEMORY_REPO_PATH || process.cwd(),
15
+ userId: process.env.GIT_MEMORY_USER_ID || 'git_memory_system',
16
+ chromaDir: process.env.GIT_MEMORY_CHROMA_DIR || join(home, '.cache', 'git_memory', 'chroma_commits'),
17
+ contextDir: process.env.GIT_MEMORY_CONTEXT_DIR || join(home, '.cache', 'git_memory', 'chroma_context'),
18
+ embedProvider: provider,
19
+ embedModel: process.env.GIT_MEMORY_EMBED_MODEL || defaultEmbedModel,
20
+ ollamaUrl: process.env.OLLAMA_URL || 'http://localhost:11434',
21
+ llmModel: process.env.GIT_MEMORY_LLM_MODEL || 'qwen2.5',
22
+ openaiApiKey: process.env.OPENAI_API_KEY,
23
+ };
24
+ }
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAyE5B,sEAAsE;AACtE,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,QAAQ,CAAkB,CAAC;IAEtF,gEAAgE;IAChE,IAAI,iBAAiB,GAAG,kBAAkB,CAAC;IAC3C,IAAI,QAAQ,KAAK,QAAQ;QAAE,iBAAiB,GAAG,wBAAwB,CAAC;IACxE,IAAI,QAAQ,KAAK,WAAW;QAAE,iBAAiB,GAAG,wBAAwB,CAAC;IAE3E,OAAO;QACL,QAAQ,EAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAO,OAAO,CAAC,GAAG,EAAE;QACnE,MAAM,EAAS,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAU,mBAAmB;QAC1E,SAAS,EAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC;QAC3G,UAAU,EAAK,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAM,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC;QAC3G,aAAa,EAAE,QAAQ;QACvB,UAAU,EAAK,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAM,iBAAiB;QACxE,SAAS,EAAM,OAAO,CAAC,GAAG,CAAC,UAAU,IAAkB,wBAAwB;QAC/E,QAAQ,EAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAQ,SAAS;QAChE,YAAY,EAAG,OAAO,CAAC,GAAG,CAAC,cAAc;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Local SQLite-backed vector store.
3
+ * Replaces ChromaDB (JS client only supports HTTP servers, not local embedded).
4
+ * Stores embeddings as JSON blobs, performs cosine similarity in JS.
5
+ *
6
+ * API surface mirrors Python ChromaDB PersistentClient to keep the rest
7
+ * of the codebase consistent with the plan.
8
+ */
9
+ import type { IEmbeddingFunction } from './embeddings.js';
10
+ export interface VectorRecord {
11
+ id: string;
12
+ document: string;
13
+ metadata: Record<string, string | number>;
14
+ embedding: number[];
15
+ }
16
+ export interface SearchResult {
17
+ id: string;
18
+ document: string;
19
+ metadata: Record<string, string | number>;
20
+ distance: number;
21
+ }
22
+ export declare class VectorCollection {
23
+ private db;
24
+ private embedFn;
25
+ private name;
26
+ private constructor();
27
+ /** Create or open a collection backed by a SQLite file at dbPath. */
28
+ static open(dbPath: string, name: string, embedFn: IEmbeddingFunction): VectorCollection;
29
+ private init;
30
+ /** Check if an id already exists. */
31
+ has(id: string): boolean;
32
+ /** Add a document. Does nothing if id already exists (explicit dedup gate). */
33
+ add(params: {
34
+ id: string;
35
+ document: string;
36
+ metadata: Record<string, string | number>;
37
+ }): Promise<void>;
38
+ count(): number;
39
+ /** Get records by ids or all records if no ids specified. */
40
+ get(params?: {
41
+ ids?: string[];
42
+ where?: Record<string, unknown>;
43
+ limit?: number;
44
+ }): {
45
+ ids: string[];
46
+ documents: string[];
47
+ metadatas: Record<string, string | number>[];
48
+ };
49
+ /**
50
+ * Semantic search — cosine similarity between query embedding and all stored vectors.
51
+ * Returns top nResults sorted by ascending distance (0 = identical, 1 = opposite).
52
+ */
53
+ query(params: {
54
+ queryTexts: string[];
55
+ nResults: number;
56
+ where?: Record<string, unknown>;
57
+ include?: string[];
58
+ }): Promise<{
59
+ ids: string[][];
60
+ documents: string[][];
61
+ metadatas: Record<string, string | number>[][];
62
+ distances: number[][];
63
+ }>;
64
+ }
65
+ //# sourceMappingURL=vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../src/vector-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO;IAOP,qEAAqE;IACrE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,gBAAgB;IAOxF,OAAO,CAAC,IAAI;IAcZ,qCAAqC;IACrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAKxB,+EAA+E;IACzE,GAAG,CAAC,MAAM,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;KAC3C,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjB,KAAK,IAAI,MAAM;IAKf,6DAA6D;IAC7D,GAAG,CAAC,MAAM,GAAE;QACV,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE;IA4B7F;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GAAG,OAAO,CAAC;QACV,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;QAChB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;QAC/C,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;KACvB,CAAC;CAoCH"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Local SQLite-backed vector store.
3
+ * Replaces ChromaDB (JS client only supports HTTP servers, not local embedded).
4
+ * Stores embeddings as JSON blobs, performs cosine similarity in JS.
5
+ *
6
+ * API surface mirrors Python ChromaDB PersistentClient to keep the rest
7
+ * of the codebase consistent with the plan.
8
+ */
9
+ import Database from 'better-sqlite3';
10
+ import { mkdirSync } from 'fs';
11
+ import { dirname } from 'path';
12
+ export class VectorCollection {
13
+ db;
14
+ embedFn;
15
+ name;
16
+ constructor(db, name, embedFn) {
17
+ this.db = db;
18
+ this.name = name;
19
+ this.embedFn = embedFn;
20
+ this.init();
21
+ }
22
+ /** Create or open a collection backed by a SQLite file at dbPath. */
23
+ static open(dbPath, name, embedFn) {
24
+ mkdirSync(dirname(dbPath), { recursive: true });
25
+ const db = new Database(dbPath);
26
+ db.pragma('journal_mode = WAL');
27
+ return new VectorCollection(db, name, embedFn);
28
+ }
29
+ init() {
30
+ this.db.exec(`
31
+ CREATE TABLE IF NOT EXISTS vectors (
32
+ id TEXT PRIMARY KEY,
33
+ document TEXT NOT NULL,
34
+ embedding TEXT NOT NULL,
35
+ metadata TEXT NOT NULL DEFAULT '{}'
36
+ );
37
+ CREATE INDEX IF NOT EXISTS idx_metadata ON vectors(metadata);
38
+ `);
39
+ }
40
+ // ── Write ──────────────────────────────────────────────────────────────────
41
+ /** Check if an id already exists. */
42
+ has(id) {
43
+ const row = this.db.prepare('SELECT 1 FROM vectors WHERE id = ?').get(id);
44
+ return row !== undefined;
45
+ }
46
+ /** Add a document. Does nothing if id already exists (explicit dedup gate). */
47
+ async add(params) {
48
+ if (this.has(params.id))
49
+ return;
50
+ const [embedding] = await this.embedFn.generate([params.document]);
51
+ this.db.prepare(`
52
+ INSERT OR IGNORE INTO vectors (id, document, embedding, metadata)
53
+ VALUES (?, ?, ?, ?)
54
+ `).run(params.id, params.document, JSON.stringify(embedding), JSON.stringify(params.metadata));
55
+ }
56
+ // ── Read ───────────────────────────────────────────────────────────────────
57
+ count() {
58
+ const row = this.db.prepare('SELECT COUNT(*) as n FROM vectors').get();
59
+ return row.n;
60
+ }
61
+ /** Get records by ids or all records if no ids specified. */
62
+ get(params = {}) {
63
+ let rows;
64
+ if (params.ids && params.ids.length > 0) {
65
+ const placeholders = params.ids.map(() => '?').join(',');
66
+ rows = this.db.prepare(`SELECT id, document, metadata FROM vectors WHERE id IN (${placeholders})`).all(...params.ids);
67
+ }
68
+ else if (params.limit) {
69
+ rows = this.db.prepare('SELECT id, document, metadata FROM vectors LIMIT ?').all(params.limit);
70
+ }
71
+ else {
72
+ rows = this.db.prepare('SELECT id, document, metadata FROM vectors').all();
73
+ }
74
+ // Apply where filter in JS (mirrors Python chromadb behaviour for simple equality)
75
+ let filtered = rows;
76
+ if (params.where) {
77
+ filtered = rows.filter(row => {
78
+ const meta = JSON.parse(row.metadata);
79
+ return matchesWhere(meta, params.where);
80
+ });
81
+ }
82
+ return {
83
+ ids: filtered.map(r => r.id),
84
+ documents: filtered.map(r => r.document),
85
+ metadatas: filtered.map(r => JSON.parse(r.metadata)),
86
+ };
87
+ }
88
+ /**
89
+ * Semantic search — cosine similarity between query embedding and all stored vectors.
90
+ * Returns top nResults sorted by ascending distance (0 = identical, 1 = opposite).
91
+ */
92
+ async query(params) {
93
+ const [queryEmbedding] = await this.embedFn.generate(params.queryTexts);
94
+ const all = this.db.prepare('SELECT id, document, embedding, metadata FROM vectors').all();
95
+ let candidates = all;
96
+ // JS-side where filter
97
+ if (params.where) {
98
+ candidates = all.filter(row => {
99
+ const meta = JSON.parse(row.metadata);
100
+ return matchesWhere(meta, params.where);
101
+ });
102
+ }
103
+ // Compute cosine distances
104
+ const scored = candidates.map(row => {
105
+ const embedding = JSON.parse(row.embedding);
106
+ const distance = cosineDistance(queryEmbedding, embedding);
107
+ const metadata = JSON.parse(row.metadata);
108
+ return { id: row.id, document: row.document, metadata, distance };
109
+ });
110
+ // Sort ascending by distance, take top N
111
+ scored.sort((a, b) => a.distance - b.distance);
112
+ const top = scored.slice(0, params.nResults);
113
+ return {
114
+ ids: [top.map(r => r.id)],
115
+ documents: [top.map(r => r.document)],
116
+ metadatas: [top.map(r => r.metadata)],
117
+ distances: [top.map(r => r.distance)],
118
+ };
119
+ }
120
+ }
121
+ // ── Helpers ───────────────────────────────────────────────────────────────────
122
+ function cosineDistance(a, b) {
123
+ if (a.length !== b.length || a.length === 0)
124
+ return 1;
125
+ let dot = 0, normA = 0, normB = 0;
126
+ for (let i = 0; i < a.length; i++) {
127
+ dot += a[i] * b[i];
128
+ normA += a[i] * a[i];
129
+ normB += b[i] * b[i];
130
+ }
131
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
132
+ if (denom === 0)
133
+ return 1;
134
+ return 1 - dot / denom;
135
+ }
136
+ /**
137
+ * Matches a metadata record against a chromadb-style where clause.
138
+ * Supports: { field: { $eq: val } }, { $and: [...] }
139
+ */
140
+ function matchesWhere(meta, where) {
141
+ if ('$and' in where) {
142
+ return where.$and.every(c => matchesWhere(meta, c));
143
+ }
144
+ for (const [key, cond] of Object.entries(where)) {
145
+ if (typeof cond === 'object' && cond !== null && '$eq' in cond) {
146
+ if (meta[key] !== cond.$eq)
147
+ return false;
148
+ }
149
+ }
150
+ return true;
151
+ }
152
+ //# sourceMappingURL=vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../src/vector-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAQ,OAAO,EAAE,MAAM,MAAM,CAAC;AAiBrC,MAAM,OAAO,gBAAgB;IACnB,EAAE,CAAoB;IACtB,OAAO,CAAqB;IAC5B,IAAI,CAAS;IAErB,YAAoB,EAAqB,EAAE,IAAY,EAAE,OAA2B;QAClF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,MAAM,CAAC,IAAI,CAAC,MAAc,EAAE,IAAY,EAAE,OAA2B;QACnE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChC,OAAO,IAAI,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;KAQZ,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAE9E,qCAAqC;IACrC,GAAG,CAAC,EAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,KAAK,SAAS,CAAC;IAC3B,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,GAAG,CAAC,MAIT;QACC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO;QAEhC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CACJ,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,QAAQ,EACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAE9E,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAAmB,CAAC;QACxF,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,GAAG,CAAC,SAIA,EAAE;QACJ,IAAI,IAA0D,CAAC;QAE/D,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2DAA2D,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAgB,CAAC;QACvI,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAgB,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAiB,CAAC;QAC5F,CAAC;QAED,mFAAmF;QACnF,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAoC,CAAC;gBACzE,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAM,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,GAAG,EAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAoC,CAAC;SACxF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,MAKX;QAMC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAExE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,EAErF,CAAC;QAEJ,IAAI,UAAU,GAAG,GAAG,CAAC;QAErB,uBAAuB;QACvB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAoC,CAAC;gBACzE,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAM,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAa,CAAC;YACxD,MAAM,QAAQ,GAAI,cAAc,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAoC,CAAC;YAC9E,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7C,OAAO;YACL,GAAG,EAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;SACtC,CAAC;IACJ,CAAC;CACF;AAED,iFAAiF;AAEjF,SAAS,cAAc,CAAC,CAAW,EAAE,CAAW;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtD,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAqC,EAAE,KAA8B;IACzF,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAQ,KAAK,CAAC,IAAkC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAM,IAAyB,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "git-memory",
3
+ "version": "0.1.0",
4
+ "description": "Semantic Git history index for Claude Code — Node.js port of claude-memory",
5
+ "type": "module",
6
+ "bin": {
7
+ "git-memory": "./dist/cli.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "files": [
12
+ "dist/",
13
+ "skills/",
14
+ "config/"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "prepublishOnly": "npm run build",
19
+ "dev": "tsx src/cli.ts",
20
+ "serve:dev": "tsx src/mcp-server.ts"
21
+ },
22
+ "keywords": [
23
+ "claude-code",
24
+ "mcp",
25
+ "git",
26
+ "memory",
27
+ "chromadb",
28
+ "ai",
29
+ "git-memory"
30
+ ],
31
+ "license": "AGPL-3.0-or-later",
32
+ "dependencies": {
33
+ "@modelcontextprotocol/sdk": "^1.12.0",
34
+ "@types/better-sqlite3": "^7.6.13",
35
+ "better-sqlite3": "^12.8.0",
36
+ "chromadb": "^1.10.0",
37
+ "commander": "^12.0.0",
38
+ "fastembed": "^1.14.0",
39
+ "ollama": "^0.5.0",
40
+ "openai": "^4.0.0",
41
+ "simple-git": "^3.27.0",
42
+ "zod": "^3.23.0"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^22.0.0",
46
+ "tsx": "^4.19.0",
47
+ "typescript": "^5.5.0"
48
+ },
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ }
52
+ }
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: git-memory-debug
3
+ description: "Use when the user is debugging a regression, investigating unexpected behaviour, or wants to know the full change history of a component. Examples: \"why did this break after the last deploy?\", \"what changed in the auth module recently?\", \"trace all changes to OrderService\""
4
+ ---
5
+
6
+ # Debug with git-memory
7
+
8
+ ## When to Use
9
+
10
+ - Investigating a regression (something that worked before)
11
+ - Tracing all changes to a file or component over time
12
+ - Understanding what a recent commit actually changed
13
+ - Checking if a bug was introduced or fixed before
14
+ - Pre-flight check before a risky refactor
15
+
16
+ ## Workflow
17
+
18
+ ```
19
+ 1. Identify the component or file the bug is in
20
+ 2. Call commits_touching_file(filename) to get full change timeline
21
+ 3. Call bug_fix_history(component) to find prior fixes in the same area
22
+ 4. Call latest_commits(10) if the regression is recent
23
+ 5. Cross-reference with GitNexus impact(symbol) if available
24
+ 6. Synthesise: timeline + prior bugs + recent changes → root cause hypothesis
25
+ ```
26
+
27
+ ## Checklist
28
+
29
+ ```
30
+ - [ ] Called commits_touching_file for the broken file
31
+ - [ ] Called bug_fix_history to find related prior regressions
32
+ - [ ] Checked latest_commits for recent changes in the area
33
+ - [ ] Noted commit hashes for the user to inspect with git show / git diff
34
+ - [ ] Cross-referenced with GitNexus if available (callers, blast radius)
35
+ ```
36
+
37
+ ## Tool Details
38
+
39
+ ### Full file history
40
+ ```
41
+ commits_touching_file("OrderService.ts", limit=20)
42
+ // Returns all commits touching the file, newest first
43
+ // in_chroma_index=true means the commit is in semantic memory
44
+ ```
45
+
46
+ ### Prior bugs in same area
47
+ ```
48
+ bug_fix_history("orders", include_security=true, limit=10)
49
+ // Returns all fix/bug/security commits for the component
50
+ // Use this to find: "has this broken before?"
51
+ ```
52
+
53
+ ### What changed since last deploy
54
+ ```
55
+ latest_commits(20)
56
+ // Returns 20 most recent indexed commits, newest first
57
+ // Look for commits touching the same files as the regression
58
+ ```
59
+
60
+ ### Pinpoint a topic
61
+ ```
62
+ search_git_history("discount code removal case sensitive", category="fix")
63
+ // Finds the exact fix commit for a known bug pattern
64
+ ```
65
+
66
+ ## Example: Tracing a Regression
67
+
68
+ **User:** "The discount removal is broken again — it was working last week."
69
+
70
+ ```
71
+ Step 1 — File history
72
+ commits_touching_file("DiscountService.ts")
73
+ → [5e495155] 2026-03-06 fix(cart): fix discount code removal failing with case mismatch
74
+ → [780ec1a9] 2026-03-05 feat(discounts): add cart discount code apply and remove feature
75
+
76
+ Step 2 — Prior bugs
77
+ bug_fix_history("discount")
78
+ → [5e495155] fix(cart): fix discount code removal failing with case mismatch score=0.717
79
+
80
+ Step 3 — Recent commits
81
+ latest_commits(10)
82
+ → [08690c6a] 2026-03-07 chore(postman): fix cascading test failures...
83
+ → [5e495155] 2026-03-06 fix(cart): fix discount code removal...
84
+
85
+ Conclusion: Check whether a subsequent commit reverted the .toLowerCase() call
86
+ Run: git show 5e495155 -- src/services/DiscountService.ts
87
+ ```
88
+
89
+ ## Combined with GitNexus
90
+
91
+ ```
92
+ git-memory: bug_fix_history("payments")
93
+ → tells you WHAT has broken here before
94
+
95
+ GitNexus: impact("PaymentService::handleCallback")
96
+ → tells you WHAT ELSE will break if you touch it now
97
+ ```
98
+
99
+ Together: full temporal + structural picture before making a change.