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.
- package/LICENSE +661 -0
- package/config/mcp_config_example.json +16 -0
- package/dist/chroma-index.d.ts +63 -0
- package/dist/chroma-index.d.ts.map +1 -0
- package/dist/chroma-index.js +166 -0
- package/dist/chroma-index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +311 -0
- package/dist/cli.js.map +1 -0
- package/dist/context-store.d.ts +54 -0
- package/dist/context-store.d.ts.map +1 -0
- package/dist/context-store.js +187 -0
- package/dist/context-store.js.map +1 -0
- package/dist/embeddings.d.ts +10 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +42 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/filters.d.ts +70 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +131 -0
- package/dist/filters.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +45 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +242 -0
- package/dist/indexer.js.map +1 -0
- package/dist/mcp-server.d.ts +8 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +373 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/store.d.ts +17 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +47 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/vector-store.d.ts +65 -0
- package/dist/vector-store.d.ts.map +1 -0
- package/dist/vector-store.js +152 -0
- package/dist/vector-store.js.map +1 -0
- package/package.json +52 -0
- package/skills/git-memory-debug/SKILL.md +99 -0
- package/skills/git-memory-index/SKILL.md +88 -0
- package/skills/git-memory-search/SKILL.md +92 -0
- 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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"}
|
package/dist/store.d.ts
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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":"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"}
|
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.
|