repomemory 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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/dist/commands/analyze.d.ts +7 -0
  4. package/dist/commands/analyze.d.ts.map +1 -0
  5. package/dist/commands/analyze.js +360 -0
  6. package/dist/commands/analyze.js.map +1 -0
  7. package/dist/commands/init.d.ts +5 -0
  8. package/dist/commands/init.d.ts.map +1 -0
  9. package/dist/commands/init.js +86 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/serve.d.ts +4 -0
  12. package/dist/commands/serve.d.ts.map +1 -0
  13. package/dist/commands/serve.js +13 -0
  14. package/dist/commands/serve.js.map +1 -0
  15. package/dist/commands/setup.d.ts +4 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +134 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/sync.d.ts +5 -0
  20. package/dist/commands/sync.d.ts.map +1 -0
  21. package/dist/commands/sync.js +77 -0
  22. package/dist/commands/sync.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +109 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/ai-provider.d.ts +18 -0
  28. package/dist/lib/ai-provider.d.ts.map +1 -0
  29. package/dist/lib/ai-provider.js +164 -0
  30. package/dist/lib/ai-provider.js.map +1 -0
  31. package/dist/lib/config.d.ts +29 -0
  32. package/dist/lib/config.d.ts.map +1 -0
  33. package/dist/lib/config.js +103 -0
  34. package/dist/lib/config.js.map +1 -0
  35. package/dist/lib/context-store.d.ts +31 -0
  36. package/dist/lib/context-store.d.ts.map +1 -0
  37. package/dist/lib/context-store.js +150 -0
  38. package/dist/lib/context-store.js.map +1 -0
  39. package/dist/lib/git.d.ts +29 -0
  40. package/dist/lib/git.d.ts.map +1 -0
  41. package/dist/lib/git.js +139 -0
  42. package/dist/lib/git.js.map +1 -0
  43. package/dist/lib/repo-scanner.d.ts +26 -0
  44. package/dist/lib/repo-scanner.d.ts.map +1 -0
  45. package/dist/lib/repo-scanner.js +213 -0
  46. package/dist/lib/repo-scanner.js.map +1 -0
  47. package/dist/lib/search.d.ts +21 -0
  48. package/dist/lib/search.d.ts.map +1 -0
  49. package/dist/lib/search.js +147 -0
  50. package/dist/lib/search.js.map +1 -0
  51. package/dist/mcp/server.d.ts +3 -0
  52. package/dist/mcp/server.d.ts.map +1 -0
  53. package/dist/mcp/server.js +324 -0
  54. package/dist/mcp/server.js.map +1 -0
  55. package/package.json +67 -0
@@ -0,0 +1,164 @@
1
+ export async function createProvider(config) {
2
+ const apiKey = resolveApiKeyForProvider(config);
3
+ switch (config.provider) {
4
+ case "anthropic":
5
+ return createAnthropicProvider(apiKey, config.model);
6
+ case "openai":
7
+ return createOpenAIProvider(apiKey, config.model);
8
+ case "gemini":
9
+ return createGeminiProvider(apiKey, config.model);
10
+ case "grok":
11
+ return createGrokProvider(apiKey, config.model);
12
+ default:
13
+ throw new Error(`Unknown provider: ${config.provider}. Supported: anthropic, openai, gemini, grok`);
14
+ }
15
+ }
16
+ function resolveApiKeyForProvider(config) {
17
+ if (config.apiKey)
18
+ return config.apiKey;
19
+ const envMap = {
20
+ anthropic: "ANTHROPIC_API_KEY",
21
+ openai: "OPENAI_API_KEY",
22
+ gemini: "GEMINI_API_KEY",
23
+ grok: "GROK_API_KEY",
24
+ };
25
+ // Also check alternate env var names
26
+ const altEnvMap = {
27
+ gemini: ["GOOGLE_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
28
+ grok: ["XAI_API_KEY"],
29
+ };
30
+ const envVar = envMap[config.provider];
31
+ if (envVar && process.env[envVar]) {
32
+ return process.env[envVar];
33
+ }
34
+ const altVars = altEnvMap[config.provider] || [];
35
+ for (const alt of altVars) {
36
+ if (process.env[alt])
37
+ return process.env[alt];
38
+ }
39
+ throw new Error(`No API key found for ${config.provider}. Set ${envVar} environment variable or add apiKey to .repomemory.json`);
40
+ }
41
+ // --- Anthropic (streaming for large outputs) ---
42
+ async function createAnthropicProvider(apiKey, model) {
43
+ const { default: Anthropic } = await import("@anthropic-ai/sdk");
44
+ const client = new Anthropic({ apiKey });
45
+ return {
46
+ name: "anthropic",
47
+ async generate(messages, options = {}) {
48
+ const { maxTokens = 16000, temperature = 0.3 } = options;
49
+ const systemMsg = messages.find((m) => m.role === "system");
50
+ const conversationMsgs = messages
51
+ .filter((m) => m.role !== "system")
52
+ .map((m) => ({
53
+ role: m.role,
54
+ content: m.content,
55
+ }));
56
+ // Use streaming to handle large outputs (required for >10min responses)
57
+ const stream = client.messages.stream({
58
+ model: model || "claude-sonnet-4-5-20250929",
59
+ max_tokens: maxTokens,
60
+ temperature,
61
+ system: systemMsg?.content || "",
62
+ messages: conversationMsgs,
63
+ });
64
+ // Show progress dots while streaming
65
+ let dotCount = 0;
66
+ stream.on("text", () => {
67
+ dotCount++;
68
+ if (dotCount % 200 === 0) {
69
+ process.stderr.write(".");
70
+ }
71
+ });
72
+ const finalMessage = await stream.finalMessage();
73
+ process.stderr.write("\n");
74
+ const content = finalMessage.content
75
+ .filter((block) => block.type === "text")
76
+ .map((block) => ("text" in block ? block.text : ""))
77
+ .join("");
78
+ return {
79
+ content,
80
+ tokensUsed: finalMessage.usage.input_tokens + finalMessage.usage.output_tokens,
81
+ };
82
+ },
83
+ };
84
+ }
85
+ // --- OpenAI ---
86
+ async function createOpenAIProvider(apiKey, model) {
87
+ const { default: OpenAI } = await import("openai");
88
+ const client = new OpenAI({ apiKey });
89
+ return {
90
+ name: "openai",
91
+ async generate(messages, options = {}) {
92
+ const { maxTokens = 16000, temperature = 0.3 } = options;
93
+ const response = await client.chat.completions.create({
94
+ model: model || "gpt-4o",
95
+ max_tokens: maxTokens,
96
+ temperature,
97
+ messages: messages.map((m) => ({
98
+ role: m.role,
99
+ content: m.content,
100
+ })),
101
+ });
102
+ return {
103
+ content: response.choices[0]?.message?.content || "",
104
+ tokensUsed: response.usage?.total_tokens,
105
+ };
106
+ },
107
+ };
108
+ }
109
+ // --- Gemini ---
110
+ async function createGeminiProvider(apiKey, model) {
111
+ const { GoogleGenerativeAI } = await import("@google/generative-ai");
112
+ const genAI = new GoogleGenerativeAI(apiKey);
113
+ const genModel = genAI.getGenerativeModel({ model: model || "gemini-2.0-flash" });
114
+ return {
115
+ name: "gemini",
116
+ async generate(messages, options = {}) {
117
+ const { temperature = 0.3 } = options;
118
+ // Combine system + user messages for Gemini
119
+ const systemMsg = messages.find((m) => m.role === "system");
120
+ const userMsgs = messages.filter((m) => m.role !== "system");
121
+ const prompt = [
122
+ systemMsg ? `<system>\n${systemMsg.content}\n</system>\n\n` : "",
123
+ ...userMsgs.map((m) => m.content),
124
+ ].join("\n");
125
+ const result = await genModel.generateContent({
126
+ contents: [{ role: "user", parts: [{ text: prompt }] }],
127
+ generationConfig: { temperature },
128
+ });
129
+ const response = result.response;
130
+ return {
131
+ content: response.text(),
132
+ tokensUsed: response.usageMetadata?.totalTokenCount,
133
+ };
134
+ },
135
+ };
136
+ }
137
+ // --- Grok (xAI) - Uses OpenAI-compatible API ---
138
+ async function createGrokProvider(apiKey, model) {
139
+ const { default: OpenAI } = await import("openai");
140
+ const client = new OpenAI({
141
+ apiKey,
142
+ baseURL: "https://api.x.ai/v1",
143
+ });
144
+ return {
145
+ name: "grok",
146
+ async generate(messages, options = {}) {
147
+ const { maxTokens = 16000, temperature = 0.3 } = options;
148
+ const response = await client.chat.completions.create({
149
+ model: model || "grok-3",
150
+ max_tokens: maxTokens,
151
+ temperature,
152
+ messages: messages.map((m) => ({
153
+ role: m.role,
154
+ content: m.content,
155
+ })),
156
+ });
157
+ return {
158
+ content: response.choices[0]?.message?.content || "",
159
+ tokensUsed: response.usage?.total_tokens,
160
+ };
161
+ },
162
+ };
163
+ }
164
+ //# sourceMappingURL=ai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-provider.js","sourceRoot":"","sources":["../../src/lib/ai-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface RepoContextConfig {
2
+ /** AI provider for analysis */
3
+ provider: "anthropic" | "openai" | "gemini" | "grok";
4
+ /** Model to use for analysis */
5
+ model: string;
6
+ /** API key (reads from env if not set) */
7
+ apiKey?: string;
8
+ /** Directory patterns to ignore during scanning */
9
+ ignorePatterns: string[];
10
+ /** File patterns to always read during analysis */
11
+ keyFilePatterns: string[];
12
+ /** Max file size to read (bytes) */
13
+ maxFileSize: number;
14
+ /** Max files to include in analysis */
15
+ maxFilesForAnalysis: number;
16
+ /** Max git commits to analyze */
17
+ maxGitCommits: number;
18
+ /** Categories for organizing knowledge */
19
+ categories: string[];
20
+ /** Whether to auto-index on write */
21
+ autoIndex: boolean;
22
+ /** Context directory name */
23
+ contextDir: string;
24
+ }
25
+ declare const DEFAULT_CONFIG: RepoContextConfig;
26
+ export declare function loadConfig(repoRoot: string): RepoContextConfig;
27
+ export declare function resolveApiKey(config: RepoContextConfig): string;
28
+ export { DEFAULT_CONFIG };
29
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,cAAc,EAAE,iBAwDrB,CAAC;AAEF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAyB9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAoB/D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ const DEFAULT_CONFIG = {
4
+ provider: "anthropic",
5
+ model: "claude-sonnet-4-5-20250929",
6
+ ignorePatterns: [
7
+ "node_modules",
8
+ ".git",
9
+ "dist",
10
+ "build",
11
+ ".next",
12
+ ".nuxt",
13
+ ".output",
14
+ "coverage",
15
+ "__pycache__",
16
+ ".venv",
17
+ "venv",
18
+ "vendor",
19
+ ".cache",
20
+ ".turbo",
21
+ ".vercel",
22
+ ".netlify",
23
+ "*.min.js",
24
+ "*.min.css",
25
+ "*.map",
26
+ "*.lock",
27
+ "package-lock.json",
28
+ "pnpm-lock.yaml",
29
+ "yarn.lock",
30
+ "bun.lockb",
31
+ ],
32
+ keyFilePatterns: [
33
+ "package.json",
34
+ "README.md",
35
+ "CLAUDE.md",
36
+ ".cursorrules",
37
+ ".cursor/rules/*.mdc",
38
+ "tsconfig.json",
39
+ "Dockerfile",
40
+ "docker-compose.yml",
41
+ "docker-compose.yaml",
42
+ ".env.example",
43
+ "wrangler.toml",
44
+ "vercel.json",
45
+ "railway.json",
46
+ "Makefile",
47
+ "justfile",
48
+ "**/schema.ts",
49
+ "**/schema.prisma",
50
+ "drizzle.config.ts",
51
+ ".github/workflows/*.yml",
52
+ ],
53
+ maxFileSize: 100_000, // 100KB
54
+ maxFilesForAnalysis: 80,
55
+ maxGitCommits: 100,
56
+ categories: ["facts", "decisions", "regressions", "sessions", "changelog"],
57
+ autoIndex: true,
58
+ contextDir: ".context",
59
+ };
60
+ export function loadConfig(repoRoot) {
61
+ const configPath = join(repoRoot, ".repomemory.json");
62
+ if (!existsSync(configPath)) {
63
+ return { ...DEFAULT_CONFIG };
64
+ }
65
+ try {
66
+ const userConfig = JSON.parse(readFileSync(configPath, "utf-8"));
67
+ return {
68
+ ...DEFAULT_CONFIG,
69
+ ...userConfig,
70
+ ignorePatterns: [
71
+ ...DEFAULT_CONFIG.ignorePatterns,
72
+ ...(userConfig.ignorePatterns || []),
73
+ ],
74
+ keyFilePatterns: [
75
+ ...DEFAULT_CONFIG.keyFilePatterns,
76
+ ...(userConfig.keyFilePatterns || []),
77
+ ],
78
+ categories: userConfig.categories || DEFAULT_CONFIG.categories,
79
+ };
80
+ }
81
+ catch {
82
+ return { ...DEFAULT_CONFIG };
83
+ }
84
+ }
85
+ export function resolveApiKey(config) {
86
+ if (config.apiKey)
87
+ return config.apiKey;
88
+ if (config.provider === "anthropic") {
89
+ const key = process.env.ANTHROPIC_API_KEY;
90
+ if (key)
91
+ return key;
92
+ throw new Error("No API key found. Set ANTHROPIC_API_KEY environment variable or add apiKey to .repomemory.json");
93
+ }
94
+ if (config.provider === "openai") {
95
+ const key = process.env.OPENAI_API_KEY;
96
+ if (key)
97
+ return key;
98
+ throw new Error("No API key found. Set OPENAI_API_KEY environment variable or add apiKey to .repomemory.json");
99
+ }
100
+ throw new Error(`Unknown provider: ${config.provider}`);
101
+ }
102
+ export { DEFAULT_CONFIG };
103
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { RepoContextConfig } from "./config.js";
2
+ export interface ContextEntry {
3
+ category: string;
4
+ filename: string;
5
+ title: string;
6
+ content: string;
7
+ relativePath: string;
8
+ lastModified: Date;
9
+ sizeBytes: number;
10
+ }
11
+ export declare class ContextStore {
12
+ private root;
13
+ private contextDir;
14
+ constructor(repoRoot: string, config: RepoContextConfig);
15
+ get path(): string;
16
+ exists(): boolean;
17
+ scaffold(): void;
18
+ writeIndex(content: string): void;
19
+ readIndex(): string;
20
+ writeEntry(category: string, filename: string, content: string): string;
21
+ appendEntry(category: string, filename: string, content: string): string;
22
+ readEntry(category: string, filename: string): string | null;
23
+ listEntries(category?: string): ContextEntry[];
24
+ getAllContent(): string;
25
+ getStats(): {
26
+ totalFiles: number;
27
+ totalSize: number;
28
+ categories: Record<string, number>;
29
+ };
30
+ }
31
+ //# sourceMappingURL=context-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-store.d.ts","sourceRoot":"","sources":["../../src/lib/context-store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAS;gBAEf,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IAKvD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,OAAO;IAIjB,QAAQ,IAAI,IAAI;IAqBhB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,SAAS,IAAI,MAAM;IAMnB,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM;IAqBT,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM;IAkBT,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM5D,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IA8D9C,aAAa,IAAI,MAAM;IAUvB,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC;CAcF"}
@@ -0,0 +1,150 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, } from "fs";
2
+ import { join, relative, basename } from "path";
3
+ export class ContextStore {
4
+ root;
5
+ contextDir;
6
+ constructor(repoRoot, config) {
7
+ this.root = repoRoot;
8
+ this.contextDir = join(repoRoot, config.contextDir);
9
+ }
10
+ get path() {
11
+ return this.contextDir;
12
+ }
13
+ exists() {
14
+ return existsSync(this.contextDir);
15
+ }
16
+ scaffold() {
17
+ const dirs = [
18
+ this.contextDir,
19
+ join(this.contextDir, "facts"),
20
+ join(this.contextDir, "decisions"),
21
+ join(this.contextDir, "regressions"),
22
+ join(this.contextDir, "sessions"),
23
+ join(this.contextDir, "changelog"),
24
+ ];
25
+ for (const dir of dirs) {
26
+ mkdirSync(dir, { recursive: true });
27
+ }
28
+ // Create .gitignore for search index
29
+ const gitignorePath = join(this.contextDir, ".gitignore");
30
+ if (!existsSync(gitignorePath)) {
31
+ writeFileSync(gitignorePath, ".search.db\n.search.db-*\n");
32
+ }
33
+ }
34
+ writeIndex(content) {
35
+ writeFileSync(join(this.contextDir, "index.md"), content);
36
+ }
37
+ readIndex() {
38
+ const indexPath = join(this.contextDir, "index.md");
39
+ if (!existsSync(indexPath))
40
+ return "";
41
+ return readFileSync(indexPath, "utf-8");
42
+ }
43
+ writeEntry(category, filename, content) {
44
+ const dir = join(this.contextDir, category);
45
+ mkdirSync(dir, { recursive: true });
46
+ // Ensure .md extension
47
+ if (!filename.endsWith(".md")) {
48
+ filename = filename + ".md";
49
+ }
50
+ // Sanitize filename
51
+ filename = filename
52
+ .toLowerCase()
53
+ .replace(/[^a-z0-9._-]/g, "-")
54
+ .replace(/-+/g, "-");
55
+ const filePath = join(dir, filename);
56
+ writeFileSync(filePath, content);
57
+ return relative(this.root, filePath);
58
+ }
59
+ appendEntry(category, filename, content) {
60
+ const dir = join(this.contextDir, category);
61
+ mkdirSync(dir, { recursive: true });
62
+ if (!filename.endsWith(".md")) {
63
+ filename = filename + ".md";
64
+ }
65
+ const filePath = join(dir, filename);
66
+ let existing = "";
67
+ if (existsSync(filePath)) {
68
+ existing = readFileSync(filePath, "utf-8");
69
+ }
70
+ writeFileSync(filePath, existing + "\n\n" + content);
71
+ return relative(this.root, filePath);
72
+ }
73
+ readEntry(category, filename) {
74
+ const filePath = join(this.contextDir, category, filename);
75
+ if (!existsSync(filePath))
76
+ return null;
77
+ return readFileSync(filePath, "utf-8");
78
+ }
79
+ listEntries(category) {
80
+ const entries = [];
81
+ const dirsToScan = category
82
+ ? [join(this.contextDir, category)]
83
+ : readdirSync(this.contextDir)
84
+ .filter((d) => {
85
+ const fullPath = join(this.contextDir, d);
86
+ return statSync(fullPath).isDirectory() && !d.startsWith(".");
87
+ })
88
+ .map((d) => join(this.contextDir, d));
89
+ for (const dir of dirsToScan) {
90
+ if (!existsSync(dir))
91
+ continue;
92
+ const cat = basename(dir);
93
+ const files = readdirSync(dir).filter((f) => f.endsWith(".md") && !f.startsWith("."));
94
+ for (const file of files) {
95
+ const filePath = join(dir, file);
96
+ const stat = statSync(filePath);
97
+ const content = readFileSync(filePath, "utf-8");
98
+ // Extract title from first heading or filename
99
+ const titleMatch = content.match(/^#\s+(.+)$/m);
100
+ const title = titleMatch
101
+ ? titleMatch[1]
102
+ : basename(file, ".md").replace(/-/g, " ");
103
+ entries.push({
104
+ category: cat,
105
+ filename: file,
106
+ title,
107
+ content,
108
+ relativePath: relative(this.root, filePath),
109
+ lastModified: stat.mtime,
110
+ sizeBytes: stat.size,
111
+ });
112
+ }
113
+ }
114
+ // Also include index.md
115
+ const indexPath = join(this.contextDir, "index.md");
116
+ if (existsSync(indexPath) && !category) {
117
+ const stat = statSync(indexPath);
118
+ const content = readFileSync(indexPath, "utf-8");
119
+ entries.push({
120
+ category: "root",
121
+ filename: "index.md",
122
+ title: "Index",
123
+ content,
124
+ relativePath: relative(this.root, indexPath),
125
+ lastModified: stat.mtime,
126
+ sizeBytes: stat.size,
127
+ });
128
+ }
129
+ return entries;
130
+ }
131
+ getAllContent() {
132
+ const entries = this.listEntries();
133
+ return entries
134
+ .map((e) => `--- ${e.category}/${e.filename} ---\n${e.content}`)
135
+ .join("\n\n");
136
+ }
137
+ getStats() {
138
+ const entries = this.listEntries();
139
+ const categories = {};
140
+ for (const entry of entries) {
141
+ categories[entry.category] = (categories[entry.category] || 0) + 1;
142
+ }
143
+ return {
144
+ totalFiles: entries.length,
145
+ totalSize: entries.reduce((sum, e) => sum + e.sizeBytes, 0),
146
+ categories,
147
+ };
148
+ }
149
+ }
150
+ //# sourceMappingURL=context-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-store.js","sourceRoot":"","sources":["../../src/lib/context-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface GitCommit {
2
+ hash: string;
3
+ shortHash: string;
4
+ author: string;
5
+ date: string;
6
+ message: string;
7
+ filesChanged: number;
8
+ insertions: number;
9
+ deletions: number;
10
+ }
11
+ export interface GitInfo {
12
+ isGitRepo: boolean;
13
+ currentBranch: string;
14
+ defaultBranch: string;
15
+ remoteUrl: string;
16
+ totalCommits: number;
17
+ contributors: {
18
+ name: string;
19
+ commits: number;
20
+ }[];
21
+ recentCommits: GitCommit[];
22
+ activeBranches: string[];
23
+ lastTagOrRelease: string;
24
+ commitFrequency: string;
25
+ }
26
+ export declare function getGitInfo(repoRoot: string, maxCommits: number): GitInfo;
27
+ export declare function getGitDiffSummary(repoRoot: string, since: string): string;
28
+ export declare function getRecentDiffs(repoRoot: string, count: number): string;
29
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClD,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA8IxE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtE"}