chronicle-ai 0.0.1

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 (155) hide show
  1. package/README.md +132 -0
  2. package/package.json +86 -0
  3. package/packages/README.md +139 -0
  4. package/packages/cli/README.md +92 -0
  5. package/packages/cli/bin/chronicle.js +2 -0
  6. package/packages/cli/dist/commands/add.d.ts +2 -0
  7. package/packages/cli/dist/commands/add.d.ts.map +1 -0
  8. package/packages/cli/dist/commands/add.js +82 -0
  9. package/packages/cli/dist/commands/add.js.map +1 -0
  10. package/packages/cli/dist/commands/diff.d.ts +11 -0
  11. package/packages/cli/dist/commands/diff.d.ts.map +1 -0
  12. package/packages/cli/dist/commands/diff.js +164 -0
  13. package/packages/cli/dist/commands/diff.js.map +1 -0
  14. package/packages/cli/dist/commands/init.d.ts +2 -0
  15. package/packages/cli/dist/commands/init.d.ts.map +1 -0
  16. package/packages/cli/dist/commands/init.js +54 -0
  17. package/packages/cli/dist/commands/init.js.map +1 -0
  18. package/packages/cli/dist/commands/list.d.ts +2 -0
  19. package/packages/cli/dist/commands/list.d.ts.map +1 -0
  20. package/packages/cli/dist/commands/list.js +62 -0
  21. package/packages/cli/dist/commands/list.js.map +1 -0
  22. package/packages/cli/dist/commands/log.d.ts +4 -0
  23. package/packages/cli/dist/commands/log.d.ts.map +1 -0
  24. package/packages/cli/dist/commands/log.js +223 -0
  25. package/packages/cli/dist/commands/log.js.map +1 -0
  26. package/packages/cli/dist/commands/pause.d.ts +3 -0
  27. package/packages/cli/dist/commands/pause.d.ts.map +1 -0
  28. package/packages/cli/dist/commands/pause.js +49 -0
  29. package/packages/cli/dist/commands/pause.js.map +1 -0
  30. package/packages/cli/dist/commands/queue.d.ts +2 -0
  31. package/packages/cli/dist/commands/queue.d.ts.map +1 -0
  32. package/packages/cli/dist/commands/queue.js +96 -0
  33. package/packages/cli/dist/commands/queue.js.map +1 -0
  34. package/packages/cli/dist/commands/remove.d.ts +2 -0
  35. package/packages/cli/dist/commands/remove.d.ts.map +1 -0
  36. package/packages/cli/dist/commands/remove.js +80 -0
  37. package/packages/cli/dist/commands/remove.js.map +1 -0
  38. package/packages/cli/dist/commands/reset.d.ts +5 -0
  39. package/packages/cli/dist/commands/reset.d.ts.map +1 -0
  40. package/packages/cli/dist/commands/reset.js +90 -0
  41. package/packages/cli/dist/commands/reset.js.map +1 -0
  42. package/packages/cli/dist/commands/restart.d.ts +2 -0
  43. package/packages/cli/dist/commands/restart.d.ts.map +1 -0
  44. package/packages/cli/dist/commands/restart.js +72 -0
  45. package/packages/cli/dist/commands/restart.js.map +1 -0
  46. package/packages/cli/dist/commands/start.d.ts +2 -0
  47. package/packages/cli/dist/commands/start.d.ts.map +1 -0
  48. package/packages/cli/dist/commands/start.js +127 -0
  49. package/packages/cli/dist/commands/start.js.map +1 -0
  50. package/packages/cli/dist/commands/status.d.ts +2 -0
  51. package/packages/cli/dist/commands/status.d.ts.map +1 -0
  52. package/packages/cli/dist/commands/status.js +181 -0
  53. package/packages/cli/dist/commands/status.js.map +1 -0
  54. package/packages/cli/dist/commands/stop.d.ts +2 -0
  55. package/packages/cli/dist/commands/stop.d.ts.map +1 -0
  56. package/packages/cli/dist/commands/stop.js +64 -0
  57. package/packages/cli/dist/commands/stop.js.map +1 -0
  58. package/packages/cli/dist/index.d.ts +2 -0
  59. package/packages/cli/dist/index.d.ts.map +1 -0
  60. package/packages/cli/dist/index.js +85 -0
  61. package/packages/cli/dist/index.js.map +1 -0
  62. package/packages/cli/dist/utils/paths.d.ts +26 -0
  63. package/packages/cli/dist/utils/paths.d.ts.map +1 -0
  64. package/packages/cli/dist/utils/paths.js +183 -0
  65. package/packages/cli/dist/utils/paths.js.map +1 -0
  66. package/packages/cli/package.json +25 -0
  67. package/packages/daemon/README.md +83 -0
  68. package/packages/daemon/dist/ai_test.d.ts +2 -0
  69. package/packages/daemon/dist/ai_test.d.ts.map +1 -0
  70. package/packages/daemon/dist/ai_test.js +4 -0
  71. package/packages/daemon/dist/ai_test.js.map +1 -0
  72. package/packages/daemon/dist/index.d.ts +2 -0
  73. package/packages/daemon/dist/index.d.ts.map +1 -0
  74. package/packages/daemon/dist/index.js +147 -0
  75. package/packages/daemon/dist/index.js.map +1 -0
  76. package/packages/daemon/dist/jobs/AIProcessor.d.ts +6 -0
  77. package/packages/daemon/dist/jobs/AIProcessor.d.ts.map +1 -0
  78. package/packages/daemon/dist/jobs/AIProcessor.js +58 -0
  79. package/packages/daemon/dist/jobs/AIProcessor.js.map +1 -0
  80. package/packages/daemon/dist/jobs/DocProcessor.d.ts +8 -0
  81. package/packages/daemon/dist/jobs/DocProcessor.d.ts.map +1 -0
  82. package/packages/daemon/dist/jobs/DocProcessor.js +336 -0
  83. package/packages/daemon/dist/jobs/DocProcessor.js.map +1 -0
  84. package/packages/daemon/dist/jobs/FileProcessor.d.ts +7 -0
  85. package/packages/daemon/dist/jobs/FileProcessor.d.ts.map +1 -0
  86. package/packages/daemon/dist/jobs/FileProcessor.js +29 -0
  87. package/packages/daemon/dist/jobs/FileProcessor.js.map +1 -0
  88. package/packages/daemon/dist/jobs/SystemProcessor.d.ts +13 -0
  89. package/packages/daemon/dist/jobs/SystemProcessor.d.ts.map +1 -0
  90. package/packages/daemon/dist/jobs/SystemProcessor.js +38 -0
  91. package/packages/daemon/dist/jobs/SystemProcessor.js.map +1 -0
  92. package/packages/daemon/dist/jobs/UpdateProcessor.d.ts +21 -0
  93. package/packages/daemon/dist/jobs/UpdateProcessor.d.ts.map +1 -0
  94. package/packages/daemon/dist/jobs/UpdateProcessor.js +222 -0
  95. package/packages/daemon/dist/jobs/UpdateProcessor.js.map +1 -0
  96. package/packages/daemon/dist/services/AIService.d.ts +90 -0
  97. package/packages/daemon/dist/services/AIService.d.ts.map +1 -0
  98. package/packages/daemon/dist/services/AIService.js +451 -0
  99. package/packages/daemon/dist/services/AIService.js.map +1 -0
  100. package/packages/daemon/dist/services/ConfigService.d.ts +30 -0
  101. package/packages/daemon/dist/services/ConfigService.d.ts.map +1 -0
  102. package/packages/daemon/dist/services/ConfigService.js +69 -0
  103. package/packages/daemon/dist/services/ConfigService.js.map +1 -0
  104. package/packages/daemon/dist/services/DatabaseService.d.ts +204 -0
  105. package/packages/daemon/dist/services/DatabaseService.d.ts.map +1 -0
  106. package/packages/daemon/dist/services/DatabaseService.js +692 -0
  107. package/packages/daemon/dist/services/DatabaseService.js.map +1 -0
  108. package/packages/daemon/dist/services/GitService.d.ts +12 -0
  109. package/packages/daemon/dist/services/GitService.d.ts.map +1 -0
  110. package/packages/daemon/dist/services/GitService.js +68 -0
  111. package/packages/daemon/dist/services/GitService.js.map +1 -0
  112. package/packages/daemon/dist/services/QueueService.d.ts +16 -0
  113. package/packages/daemon/dist/services/QueueService.d.ts.map +1 -0
  114. package/packages/daemon/dist/services/QueueService.js +87 -0
  115. package/packages/daemon/dist/services/QueueService.js.map +1 -0
  116. package/packages/daemon/dist/services/TriggerService.d.ts +37 -0
  117. package/packages/daemon/dist/services/TriggerService.d.ts.map +1 -0
  118. package/packages/daemon/dist/services/TriggerService.js +150 -0
  119. package/packages/daemon/dist/services/TriggerService.js.map +1 -0
  120. package/packages/daemon/dist/services/WatcherService.d.ts +12 -0
  121. package/packages/daemon/dist/services/WatcherService.d.ts.map +1 -0
  122. package/packages/daemon/dist/services/WatcherService.js +77 -0
  123. package/packages/daemon/dist/services/WatcherService.js.map +1 -0
  124. package/packages/daemon/dist/services/index.d.ts +2 -0
  125. package/packages/daemon/dist/services/index.d.ts.map +1 -0
  126. package/packages/daemon/dist/services/index.js +18 -0
  127. package/packages/daemon/dist/services/index.js.map +1 -0
  128. package/packages/daemon/dist/test-ignore.js +0 -0
  129. package/packages/daemon/package.json +28 -0
  130. package/packages/ui/app/actions.ts +73 -0
  131. package/packages/ui/app/api/ai-activity/route.ts +14 -0
  132. package/packages/ui/app/globals.css +98 -0
  133. package/packages/ui/app/layout.tsx +29 -0
  134. package/packages/ui/app/page.tsx +109 -0
  135. package/packages/ui/components/AutoRefresh.tsx +18 -0
  136. package/packages/ui/components/DocumentationViewer.tsx +276 -0
  137. package/packages/ui/components/FileList.tsx +69 -0
  138. package/packages/ui/components/HeaderWithThinking.tsx +102 -0
  139. package/packages/ui/components/JobQueue.tsx +194 -0
  140. package/packages/ui/components/JobQueueWrapper.tsx +31 -0
  141. package/packages/ui/components/MermaidInit.tsx +24 -0
  142. package/packages/ui/components/ProjectContentArea.tsx +186 -0
  143. package/packages/ui/components/ProjectList.tsx +136 -0
  144. package/packages/ui/components/ThinkingDrawer.tsx +377 -0
  145. package/packages/ui/components/ThinkingPanel.tsx +63 -0
  146. package/packages/ui/components/TriggerSettings.tsx +185 -0
  147. package/packages/ui/components/VersionSelector.tsx +132 -0
  148. package/packages/ui/lib/db.ts +521 -0
  149. package/packages/ui/next-env.d.ts +5 -0
  150. package/packages/ui/next.config.js +4 -0
  151. package/packages/ui/package.json +32 -0
  152. package/packages/ui/postcss.config.js +6 -0
  153. package/packages/ui/public/logo.png +0 -0
  154. package/packages/ui/tailwind.config.ts +32 -0
  155. package/packages/ui/tsconfig.json +40 -0
@@ -0,0 +1,83 @@
1
+ # ai-git-processor
2
+
3
+ ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
4
+ ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)
5
+ ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white)
6
+ ![AI-Powered](https://img.shields.io/badge/AI-Powered-FF69B4?style=for-the-badge)
7
+
8
+ An event-driven backend service designed to orchestrate complex workflows involving file systems and Git repositories. This system leverages a robust job queue to handle asynchronous tasks such as file analysis, document parsing, and AI-driven content generation.
9
+
10
+ ## 🚀 Tech Stack
11
+
12
+ * **Language:** TypeScript / Node.js
13
+ * **Version Control:** Git Integration
14
+ * **Architecture:** Event-Driven, Job Queue
15
+ * **AI Integration:** LLM-based processing (AI Service)
16
+
17
+ ## 📂 Project Structure
18
+
19
+ The project is modularized into specialized services and job processors to ensure separation of concerns and scalability.
20
+
21
+ ### Core Services (`src/services/`)
22
+ * **WatcherService**: Monitors file systems or repositories for changes.
23
+ * **TriggerService**: Initiates workflows based on detected events.
24
+ * **QueueService**: Manages the asynchronous job queue.
25
+ * **GitService**: Handles Git operations (clone, pull, commit).
26
+ * **AIService**: Interface for Large Language Model (LLM) interactions.
27
+ * **DatabaseService**: Persists application state and results.
28
+ * **ConfigService**: Manages environment configuration and settings.
29
+
30
+ ### Job Processors (`src/jobs/`)
31
+ * **FileProcessor**: Handles general file manipulation and analysis.
32
+ * **DocProcessor**: Specialized parsing for documentation files.
33
+ * **AIProcessor**: Executes AI-driven tasks on content.
34
+ * **SystemProcessor**: Handles system-level maintenance tasks.
35
+
36
+ ## 🛠 Getting Started
37
+
38
+ ### Prerequisites
39
+ * Node.js (v18+ recommended)
40
+ * npm or yarn
41
+
42
+ ### Installation
43
+
44
+ 1. Clone the repository:
45
+ ```bash
46
+ git clone https://github.com/yourusername/ai-git-processor.git
47
+ cd ai-git-processor
48
+ ```
49
+
50
+ 2. Install dependencies:
51
+ ```bash
52
+ npm install
53
+ ```
54
+
55
+ 3. Configure environment variables:
56
+ * Create a `.env` file based on your configuration requirements (API keys for AI services, database credentials, etc.).
57
+
58
+ ### Running the Application
59
+
60
+ **Development Mode:**
61
+ ```bash
62
+ npm run dev
63
+ # or usually
64
+ ts-node src/index.ts
65
+ ```
66
+
67
+ **Build & Run:**
68
+ ```bash
69
+ npm run build
70
+ npm start
71
+ ```
72
+
73
+ ### Testing
74
+
75
+ You can run specific test scripts included in the root directory:
76
+
77
+ ```bash
78
+ # Test AI Key configuration
79
+ ts-node test_ai_key.ts
80
+
81
+ # Test Job Queue functionality
82
+ node check-plainjob.js
83
+ ```
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ai_test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai_test.d.ts","sourceRoot":"","sources":["../src/ai_test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // AI Test File
4
+ //# sourceMappingURL=ai_test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai_test.js","sourceRoot":"","sources":["../src/ai_test.ts"],"names":[],"mappings":";;AAAA,eAAe"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dotenv_1 = __importDefault(require("dotenv"));
7
+ dotenv_1.default.config();
8
+ const WatcherService_1 = require("./services/WatcherService");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const DatabaseService_1 = require("./services/DatabaseService");
12
+ const GitService_1 = require("./services/GitService");
13
+ const QueueService_1 = require("./services/QueueService");
14
+ const FileProcessor_1 = require("./jobs/FileProcessor");
15
+ const SystemProcessor_1 = require("./jobs/SystemProcessor");
16
+ const AIProcessor_1 = require("./jobs/AIProcessor");
17
+ const DocProcessor_1 = require("./jobs/DocProcessor");
18
+ const UpdateProcessor_1 = require("./jobs/UpdateProcessor");
19
+ const AIService_1 = require("./services/AIService");
20
+ const ConfigService_1 = require("./services/ConfigService");
21
+ const TriggerService_1 = require("./services/TriggerService");
22
+ console.log('🦁 Chronicle Daemon Starting...');
23
+ async function main() {
24
+ const apiKey = loadGeminiApiKey();
25
+ if (!apiKey) {
26
+ console.error('❌ Gemini API key not found.');
27
+ console.error(` Add your key to: ${path_1.default.join(process.cwd(), '.chronicle', '.gemini-key')}`);
28
+ process.exit(1);
29
+ }
30
+ const watcher = new WatcherService_1.WatcherService(process.cwd());
31
+ const db = new DatabaseService_1.DatabaseService();
32
+ // Use CWD for git service default, feature per-project git service pending
33
+ const git = new GitService_1.GitService(process.cwd());
34
+ const queue = new QueueService_1.QueueService(db);
35
+ const configService = new ConfigService_1.ConfigService();
36
+ const triggerService = new TriggerService_1.TriggerService(queue);
37
+ const ai = new AIService_1.AIService(apiKey);
38
+ // Register Jobs
39
+ queue.register('file:change', (0, FileProcessor_1.createFileProcessor)(git, db));
40
+ queue.register('ai:embed', (0, AIProcessor_1.createAIProcessor)(db, ai));
41
+ queue.register('doc:initialize', (0, DocProcessor_1.createDocProcessor)(db, ai, configService, git));
42
+ queue.register('doc:update', (0, UpdateProcessor_1.createUpdateProcessor)(db, ai, configService, git));
43
+ console.log('🧠 AI Service registered');
44
+ // Register System Jobs
45
+ const systemProcessor = (0, SystemProcessor_1.createSystemProcessor)(db, watcher, configService, queue, triggerService);
46
+ queue.register('system:project_add', systemProcessor);
47
+ queue.register('system:project_remove', systemProcessor);
48
+ // Wire Watcher -> Queue (for file indexing)
49
+ watcher.on('file:change', (filePath) => {
50
+ const projects = db.getProjects();
51
+ for (const project of projects) {
52
+ if (filePath.startsWith(project.path)) {
53
+ if (project.is_paused)
54
+ return;
55
+ queue.add('file:change', { filePath, event: 'change' });
56
+ return;
57
+ }
58
+ }
59
+ // If not matched to any project, ignore? Or index anyway?
60
+ // Current logic might have indexed everything. Let's strictly index only monitored projects.
61
+ });
62
+ watcher.on('file:add', (filePath) => {
63
+ const projects = db.getProjects();
64
+ for (const project of projects) {
65
+ if (filePath.startsWith(project.path)) {
66
+ if (project.is_paused)
67
+ return;
68
+ queue.add('file:change', { filePath, event: 'add' });
69
+ return;
70
+ }
71
+ }
72
+ });
73
+ // Wire Watcher -> TriggerService (for doc regeneration)
74
+ watcher.on('file:change', (filePath) => {
75
+ // Determine which project this file belongs to
76
+ const projects = db.getProjects();
77
+ for (const project of projects) {
78
+ if (filePath.startsWith(project.path)) {
79
+ if (project.is_paused) {
80
+ // console.log(`⏸️ Project paused, ignoring change: ${filePath}`);
81
+ break;
82
+ }
83
+ triggerService.onFileChange(project.path, filePath);
84
+ break;
85
+ }
86
+ }
87
+ });
88
+ watcher.on('file:add', (filePath) => {
89
+ const projects = db.getProjects();
90
+ for (const project of projects) {
91
+ if (filePath.startsWith(project.path)) {
92
+ if (project.is_paused) {
93
+ break;
94
+ }
95
+ triggerService.onFileChange(project.path, filePath);
96
+ break;
97
+ }
98
+ }
99
+ });
100
+ console.log('✅ Daemon Initialized');
101
+ // Load projects from DB
102
+ const projects = db.getProjects();
103
+ if (projects.length > 0) {
104
+ const projectPaths = projects.map(p => p.path);
105
+ // Load config for each project and register with TriggerService
106
+ for (const project of projects) {
107
+ const config = configService.loadConfig(project.path);
108
+ triggerService.registerProject(project.path, config);
109
+ }
110
+ // Use first project's config for watcher ignore patterns (or aggregate)
111
+ const rootConfig = configService.loadConfig(process.cwd());
112
+ await watcher.start(projectPaths, rootConfig.ignore);
113
+ }
114
+ else {
115
+ console.log('⚠️ No projects monitored. Add one with "chronicle add"');
116
+ await watcher.start([]); // Start watcher but with no paths
117
+ }
118
+ // Keep process alive and handle shutdown
119
+ const shutdown = async () => {
120
+ console.log('Stopping daemon...');
121
+ queue.stop();
122
+ triggerService.stop();
123
+ await watcher.stop();
124
+ process.exit(0);
125
+ };
126
+ process.on('SIGINT', shutdown);
127
+ process.on('SIGTERM', shutdown);
128
+ // Keep process alive
129
+ setInterval(() => {
130
+ // Heartbeat
131
+ }, 1000 * 60);
132
+ }
133
+ main().catch(console.error);
134
+ function loadGeminiApiKey() {
135
+ const keyFromEnv = (process.env.GOOGLE_API_KEY || '').trim();
136
+ if (keyFromEnv)
137
+ return keyFromEnv;
138
+ const keyFilePath = path_1.default.join(process.cwd(), '.chronicle', '.gemini-key');
139
+ if (!fs_1.default.existsSync(keyFilePath))
140
+ return '';
141
+ const lines = fs_1.default.readFileSync(keyFilePath, 'utf-8')
142
+ .split(/\r?\n/)
143
+ .map(line => line.trim())
144
+ .filter(line => line.length > 0 && !line.startsWith('#'));
145
+ return lines[0] || '';
146
+ }
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { DatabaseService } from '../services/DatabaseService';
2
+ import { AIService } from '../services/AIService';
3
+ export declare const createAIProcessor: (db: DatabaseService, ai: AIService) => (data: {
4
+ filePath: string;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=AIProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIProcessor.d.ts","sourceRoot":"","sources":["../../src/jobs/AIProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,eAAO,MAAM,iBAAiB,GAAI,IAAI,eAAe,EAAE,IAAI,SAAS,MAClD,MAAM;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,kBAwD3C,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAIProcessor = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const createAIProcessor = (db, ai) => {
10
+ return async (data) => {
11
+ const { filePath } = data;
12
+ // 1. Read file content
13
+ const absolutePath = path_1.default.resolve(process.cwd(), filePath);
14
+ if (!fs_1.default.existsSync(absolutePath)) {
15
+ console.warn(`⚠️ File not found for embedding: ${filePath}`);
16
+ return;
17
+ }
18
+ const content = fs_1.default.readFileSync(absolutePath, 'utf-8');
19
+ if (!content.trim())
20
+ return;
21
+ console.log(`🧠 Generating embedding for: ${filePath} (${content.length} bytes)`);
22
+ try {
23
+ // 2. Generate Embedding
24
+ // TODO: Chunk large files. For now, we truncate to first ~8000 tokens (Gemini limit is huge but let's be safe)
25
+ // Ideally we split by functions or paragraphs.
26
+ const vector = await ai.generateEmbedding(content.slice(0, 30000));
27
+ // 3. Store in Vector DB
28
+ // First get the file_id
29
+ let fileRecord = db.getFile(filePath);
30
+ if (!fileRecord) {
31
+ // Should exist if FileProcessor ran, but just in case
32
+ db.upsertFile(filePath, '', Date.now());
33
+ fileRecord = db.getFile(filePath);
34
+ }
35
+ const fileId = fileRecord?.id;
36
+ if (fileId) {
37
+ // Delete old embeddings for this file
38
+ db.raw().exec(`DELETE FROM embeddings WHERE file_id = ${fileId}`);
39
+ // Insert new embedding
40
+ // vec0 expects a float array. better-sqlite3 handles arrays automatically for some extensions,
41
+ // but sqlite-vec usually needs a specific serialization or parameter binding.
42
+ // Use a Float32Array for the embedding
43
+ const floatArray = new Float32Array(vector);
44
+ const stmt = db.raw().prepare('INSERT INTO embeddings(file_id, chunk_index, embedding) VALUES (?, ?, ?)');
45
+ // sqlite-vec requires strict integer types for metadata columns, JS numbers are passed as doubles/floats by default.
46
+ // Using BigInt enforces integer binding in better-sqlite3.
47
+ stmt.run(BigInt(fileId), BigInt(0), floatArray);
48
+ console.log(`✅ Embedding stored for: ${filePath}`);
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.error(`❌ AI Processing failed for ${filePath}:`, error);
53
+ // Don't throw, just log. We don't want to retry infinitely if it's a model error.
54
+ }
55
+ };
56
+ };
57
+ exports.createAIProcessor = createAIProcessor;
58
+ //# sourceMappingURL=AIProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIProcessor.js","sourceRoot":"","sources":["../../src/jobs/AIProcessor.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAIjB,MAAM,iBAAiB,GAAG,CAAC,EAAmB,EAAE,EAAa,EAAE,EAAE;IACpE,OAAO,KAAK,EAAE,IAA0B,EAAE,EAAE;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,uBAAuB;QACvB,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO;QAE5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;QAElF,IAAI,CAAC;YACD,wBAAwB;YACxB,+GAA+G;YAC/G,+CAA+C;YAC/C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAEnE,wBAAwB;YACxB,wBAAwB;YACxB,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAQ,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,sDAAsD;gBACtD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAQ,CAAC;YAC7C,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,EAAE,EAAE,CAAC;YAE9B,IAAI,MAAM,EAAE,CAAC;gBACT,sCAAsC;gBACtC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;gBAElE,uBAAuB;gBACvB,gGAAgG;gBAChG,8EAA8E;gBAE9E,uCAAuC;gBACvC,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE5C,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,0EAA0E,CAAC,CAAC;gBAC1G,qHAAqH;gBACrH,2DAA2D;gBAC3D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAEhD,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YAChE,kFAAkF;QACtF,CAAC;IACL,CAAC,CAAC;AACN,CAAC,CAAC;AAzDW,QAAA,iBAAiB,qBAyD5B"}
@@ -0,0 +1,8 @@
1
+ import { DatabaseService } from '../services/DatabaseService';
2
+ import { AIService } from '../services/AIService';
3
+ import { ConfigService } from '../services/ConfigService';
4
+ import { GitService } from '../services/GitService';
5
+ export declare const createDocProcessor: (db: DatabaseService, ai: AIService, configService: ConfigService, git: GitService) => (data: {
6
+ projectPath: string;
7
+ }) => Promise<void>;
8
+ //# sourceMappingURL=DocProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocProcessor.d.ts","sourceRoot":"","sources":["../../src/jobs/DocProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUpD,eAAO,MAAM,kBAAkB,GAAI,IAAI,eAAe,EAAE,IAAI,SAAS,EAAE,eAAe,aAAa,EAAE,KAAK,UAAU,MAClG,MAAM;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,kBAoW9C,CAAC"}