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,336 @@
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.createDocProcessor = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const createDocProcessor = (db, ai, configService, git) => {
10
+ return async (data) => {
11
+ const { projectPath } = data;
12
+ const config = configService.loadConfig(projectPath);
13
+ const docsFolder = config.documentation.modules_folder || 'docs';
14
+ const docsDir = path_1.default.join(projectPath, docsFolder);
15
+ console.log(`🕵️‍♀️ Starting Multi-Stage Documentation for: ${projectPath}`);
16
+ // Get project ID
17
+ let project = db.getProjectByPath(projectPath);
18
+ if (!project) {
19
+ // Try finding parent project
20
+ const projects = db.getProjects();
21
+ project = projects.find(p => projectPath.startsWith(p.path)) || null;
22
+ }
23
+ if (!project) {
24
+ console.error('❌ Project not found in database');
25
+ return;
26
+ }
27
+ // ===== Create Doc Version =====
28
+ const commitHash = await git.getHeadCommit(projectPath).catch(() => null);
29
+ const versionId = db.createDocVersion(project.id, 'init', commitHash || undefined);
30
+ console.log(`📦 Created doc version #${versionId}`);
31
+ // 1. Scan Project Structure
32
+ const files = await git.listFiles(projectPath);
33
+ // 2. Structural Analysis
34
+ console.log('🧠 Analyzing project structure...');
35
+ const analysis = await ai.analyzeProjectStructure(files);
36
+ const projectType = await ai.detectProjectType(files);
37
+ console.log(`📊 Project type: ${JSON.stringify(projectType)}`);
38
+ // 3. Generate/Update README with thought capture
39
+ const readmePath = path_1.default.join(projectPath, 'README.md');
40
+ console.log('📝 Generating README.md...');
41
+ const readmeResult = await ai.generateWithThoughts(`
42
+ CRITICAL: Output ONLY the raw markdown content. No preamble.
43
+ Generate a professional README.md for this project based on the analysis below.
44
+ Include: Title, Description, Tech Stack, Structure, Getting Started.
45
+
46
+ Analysis: ${analysis}
47
+ File List Sample: ${files.slice(0, 50).join('\\n')}
48
+
49
+ Start directly with the markdown heading.
50
+ `, { db, projectId: project.id, versionId, activityType: 'analyze' });
51
+ const readme = readmeResult.content;
52
+ fs_1.default.writeFileSync(readmePath, readme);
53
+ // Store in version
54
+ const readmeFileId = db.addDocFile(versionId, 'README.md', readme);
55
+ if (readmeResult.thoughts.length > 0) {
56
+ db.addThoughtLog(versionId, 'README.md', readmeResult.thoughts.join('\n\n'));
57
+ }
58
+ db.logEvent('doc:readme_generated', { projectPath, versionId });
59
+ // 4. Create docs folder if needed
60
+ if (!fs_1.default.existsSync(docsDir)) {
61
+ fs_1.default.mkdirSync(docsDir, { recursive: true });
62
+ }
63
+ // ===== STAGE 1: Coverage Planning =====
64
+ console.log('📋 Stage 1: Creating documentation coverage plan...');
65
+ const coveragePlan = await ai.planDocumentation(analysis, files, projectType);
66
+ // Save coverage plan to database
67
+ db.setDocStage(project.id, JSON.stringify(coveragePlan), coveragePlan.stages.length);
68
+ db.updateDocStage(project.id, 1);
69
+ // Write coverage plan to docs (will be removed at end)
70
+ const coveragePlanPath = path_1.default.join(docsDir, '.coverage-plan.md');
71
+ fs_1.default.writeFileSync(coveragePlanPath, formatCoveragePlan(coveragePlan));
72
+ console.log(` 📄 Created ${coveragePlan.folders.length} folders, planned ${coveragePlan.files.length} files`);
73
+ // ===== STAGE 2: Create Folder Structure & Index =====
74
+ console.log('📂 Stage 2: Creating folder structure...');
75
+ for (const folder of coveragePlan.folders) {
76
+ const folderPath = path_1.default.join(projectPath, folder.path);
77
+ if (!fs_1.default.existsSync(folderPath)) {
78
+ fs_1.default.mkdirSync(folderPath, { recursive: true });
79
+ console.log(` 📁 Created: ${folder.path} `);
80
+ }
81
+ }
82
+ db.updateDocStage(project.id, 2);
83
+ // ===== STAGES 3-4: Generate Documentation Files =====
84
+ for (const stage of coveragePlan.stages.slice(1)) { // Skip stage 1 (planning)
85
+ console.log(`📝 Stage ${stage.stage}: ${stage.focus}...`);
86
+ for (const filePath of stage.files) {
87
+ // Find file details from plan
88
+ const fileInfo = coveragePlan.files.find(f => f.path === filePath || filePath.includes('*') && f.path.startsWith(filePath.replace('/*', '')));
89
+ if (!fileInfo) {
90
+ // If it's a wildcard pattern, generate for matching paths
91
+ if (filePath.includes('*')) {
92
+ const matchingFiles = coveragePlan.files.filter(f => f.path.startsWith(filePath.replace('/*', '').replace('/index.md', '')));
93
+ for (const matchedFile of matchingFiles) {
94
+ await generateDocFile(matchedFile, stage.stage >= 4);
95
+ }
96
+ }
97
+ continue;
98
+ }
99
+ await generateDocFile(fileInfo, stage.stage >= 4);
100
+ }
101
+ db.updateDocStage(project.id, stage.stage);
102
+ }
103
+ async function generateDocFile(fileInfo, includeMermaid) {
104
+ const fullPath = path_1.default.join(projectPath, fileInfo.path);
105
+ const dir = path_1.default.dirname(fullPath);
106
+ // Ensure directory exists
107
+ if (!fs_1.default.existsSync(dir)) {
108
+ fs_1.default.mkdirSync(dir, { recursive: true });
109
+ }
110
+ // Generate content with thought capture
111
+ console.log(` 📄 Generating: ${fileInfo.path} `);
112
+ const result = await ai.generateWithThoughts(`
113
+ CRITICAL: Output ONLY the raw markdown content. No preamble.
114
+
115
+ Generate documentation file: ${fileInfo.path}
116
+ Title: ${fileInfo.title}
117
+ Purpose: ${fileInfo.description}
118
+
119
+ Context:
120
+ ${analysis}
121
+
122
+ Relevant Files:
123
+ ${files.slice(0, 100).join('\\n')}
124
+
125
+ ${includeMermaid ? 'Include mermaid diagrams where appropriate for architecture visualization.' : ''}
126
+
127
+ IMPORTANT: If you make any assumptions about the codebase, explicitly state them as:
128
+ [ASSUMPTION: your assumption here]
129
+
130
+ Start directly with the markdown content.
131
+ `, { db, projectId: project.id, versionId, activityType: 'generate' });
132
+ const content = result.content;
133
+ fs_1.default.writeFileSync(fullPath, content);
134
+ // Store in version database
135
+ const docFileId = db.addDocFile(versionId, fileInfo.path, content);
136
+ // Store thoughts
137
+ if (result.thoughts.length > 0) {
138
+ db.addThoughtLog(versionId, fileInfo.path, result.thoughts.join('\n\n'));
139
+ }
140
+ // Extract and store assumptions
141
+ const assumptionMatches = content.match(/\[ASSUMPTION:\s*([^\]]+)\]/g);
142
+ if (assumptionMatches) {
143
+ for (const match of assumptionMatches) {
144
+ const claim = match.replace('[ASSUMPTION:', '').replace(']', '').trim();
145
+ db.addAssumption(docFileId, claim);
146
+ }
147
+ }
148
+ db.logEvent('doc:file_generated', { projectPath, file: fileInfo.path, versionId });
149
+ }
150
+ // ===== FINAL: Clean up coverage plan =====
151
+ console.log('🧹 Cleaning up coverage plan...');
152
+ if (fs_1.default.existsSync(coveragePlanPath)) {
153
+ fs_1.default.unlinkSync(coveragePlanPath);
154
+ }
155
+ // ===== Update Chronicle =====
156
+ const chroniclePath = path_1.default.join(projectPath, 'chronicle.md');
157
+ const generatedFiles = coveragePlan.files.map(f => f.path).join(', ');
158
+ if (!fs_1.default.existsSync(chroniclePath)) {
159
+ console.log('📜 Creating chronicle.md...');
160
+ const chronicleInit = await ai.generateChronicleInit(analysis);
161
+ fs_1.default.writeFileSync(chroniclePath, chronicleInit);
162
+ }
163
+ else {
164
+ console.log('📜 Updating chronicle.md...');
165
+ const entry = await ai.generateChronicleEntry('Documentation Updated', `Multi - stage docs generated: ${coveragePlan.files.length} files across ${coveragePlan.folders.length} folders`);
166
+ const existing = fs_1.default.readFileSync(chroniclePath, 'utf-8');
167
+ fs_1.default.writeFileSync(chroniclePath, existing + '\n\n' + entry);
168
+ }
169
+ db.logEvent('doc:chronicle_updated', { projectPath });
170
+ // ===== Phase 1.6: Verification Stage =====
171
+ console.log('🕵️ Starting verification stage...');
172
+ const unverifiedAssumptions = db.getUnverifiedAssumptions(versionId);
173
+ if (unverifiedAssumptions.length > 0) {
174
+ console.log(`Found ${unverifiedAssumptions.length} assumptions to verify.`);
175
+ for (const assumption of unverifiedAssumptions) {
176
+ // Log verification attempt
177
+ const verifyActivityId = db.logAIActivity({
178
+ projectId: project.id,
179
+ versionId,
180
+ activityType: 'plan', // Using plan/verify
181
+ promptSummary: `Verifying: ${assumption.claim} `,
182
+ status: 'running',
183
+ thinkingSummary: `Locating relevant code for: "${assumption.claim}"...`
184
+ });
185
+ try {
186
+ // 1. Locate relevant files
187
+ // Simple heuristic: Ask AI which files from the file list are relevant
188
+ const locationResult = await ai.generateWithThoughts(`
189
+ I need to verify this claim about the codebase: "${assumption.claim}"
190
+
191
+ Based on the file list below, which 3 files are most likely to contain the evidence ?
192
+ Respond with ONLY the file paths, one per line.
193
+
194
+ Files:
195
+ ${files.slice(0, 500).join('\n')}
196
+ `, { db, projectId: project.id, versionId, activityType: 'plan' });
197
+ const relevantFiles = locationResult.content.split('\n').map(l => l.trim()).filter(l => files.includes(l));
198
+ // 2. Read file contents
199
+ let evidenceContext = '';
200
+ for (const file of relevantFiles) {
201
+ try {
202
+ const content = fs_1.default.readFileSync(path_1.default.join(projectPath, file), 'utf-8');
203
+ evidenceContext += `-- - ${file} ---\n${content.slice(0, 5000)} \n\n`; // Limit context
204
+ }
205
+ catch (e) {
206
+ // Ignore missing files
207
+ }
208
+ }
209
+ // 3. Verify
210
+ const verificationResult = await ai.generateWithThoughts(`
211
+ Verify this assumption: "${assumption.claim}"
212
+
213
+ Evidence from Code:
214
+ ${evidenceContext}
215
+
216
+ Task:
217
+ 1. Determine if the assumption is TRUE, FALSE, or UNVERIFIABLE.
218
+ 2. If FALSE, provide the correct fact.
219
+
220
+ Respond in JSON:
221
+ {
222
+ "status": "TRUE" | "FALSE" | "UNVERIFIABLE",
223
+ "reason": "explanation...",
224
+ "correction": "correct fact if false"
225
+ }
226
+ `, { db, projectId: project.id, versionId, activityType: 'analyze' });
227
+ const verification = JSON.parse(verificationResult.content.replace(/```json/g, '').replace(/```/g, '').trim());
228
+ // 4. Update DB
229
+ if (verification.status === 'TRUE') {
230
+ db.updateAssumptionStatus(assumption.id, 1, verification.reason); // 1 = verified
231
+ console.log(`✅ Verified: ${assumption.claim}`);
232
+ }
233
+ else if (verification.status === 'FALSE') {
234
+ db.updateAssumptionStatus(assumption.id, -1, verification.reason); // -1 = rejected
235
+ console.log(`❌ Rejected: ${assumption.claim} -> ${verification.correction}`);
236
+ // 5. Update Doc Content (Correction)
237
+ // Load the doc file
238
+ const docFileId = db.getDocFileId(versionId, assumption.doc_path); // Need this method
239
+ if (docFileId) {
240
+ const currentContent = fs_1.default.readFileSync(path_1.default.join(projectPath, assumption.doc_path), 'utf-8'); // wait, doc_path is full path? DB doc_path is relative?
241
+ // Check DB schema. doc_files.path is relative usually.
242
+ // Actually, in generateDocFile: fileInfo.path is generated from full path.
243
+ // Let's assume relative path to project root.
244
+ // Actually, extracting matching doc file is tricky without docFileId in assumption.
245
+ // Assumptions table has doc_file_id.
246
+ // db.getUnverifiedAssumptions returns { id, claim, doc_path }.
247
+ // We need to read the generated doc file.
248
+ // The generated doc file is at `fullPath` which is `docsDir + / + fileInfo.path`.
249
+ // Wait, `process` method defines `docsDir`.
250
+ const docsDir = path_1.default.join(projectPath, '.chronicle', 'docs');
251
+ const docFullPath = path_1.default.join(docsDir, assumption.doc_path);
252
+ if (fs_1.default.existsSync(docFullPath)) {
253
+ const docContent = fs_1.default.readFileSync(docFullPath, 'utf-8');
254
+ const correctedContent = docContent.replace(`[ASSUMPTION: ${assumption.claim}]`, `> **Correction**: ${verification.correction} (Verified: ${verification.reason})`);
255
+ fs_1.default.writeFileSync(docFullPath, correctedContent);
256
+ // Update DB content too
257
+ db.updateDocFileContent(docFileId, correctedContent); // Need this method
258
+ // 6. Log Action for Thinking Platform
259
+ db.logAIActivity({
260
+ projectId: project.id,
261
+ versionId,
262
+ activityType: 'action',
263
+ promptSummary: `📝 Corrected Assumption in ${assumption.doc_path}`,
264
+ status: 'completed',
265
+ thinkingSummary: `**Assumption Corrected**
266
+
267
+ ❌ **Before:** ${assumption.claim}
268
+
269
+ ✅ **After:** ${verification.correction}
270
+
271
+ **Reason:** ${verification.reason}
272
+
273
+ **File:** ${assumption.doc_path}`
274
+ });
275
+ }
276
+ }
277
+ }
278
+ // Update activity log
279
+ db.updateAIActivity(verifyActivityId, {
280
+ status: 'completed',
281
+ thinkingSummary: `Verification Step: ${verification.status}\n\nReasoning: ${verification.reason}`
282
+ });
283
+ }
284
+ catch (error) {
285
+ console.error('Verification failed:', error);
286
+ db.updateAIActivity(verifyActivityId, {
287
+ status: 'error',
288
+ responsePreview: `Verification failed: ${error.message}`
289
+ });
290
+ }
291
+ }
292
+ }
293
+ // ===== Finalize Version =====
294
+ // Re-check unverified (some might remain unverified)
295
+ const remainingUnverified = db.getUnverifiedAssumptions(versionId);
296
+ if (unverifiedAssumptions.length > 0) {
297
+ // Mark as pending review if there are unverified assumptions
298
+ db.updateDocVersionStatus(versionId, 'pending_review');
299
+ console.log(`⚠️ Version has ${unverifiedAssumptions.length} unverified assumptions - marked for review`);
300
+ }
301
+ else {
302
+ // Activate the version (archives previous active)
303
+ db.activateDocVersion(versionId, project.id);
304
+ console.log(`✅ Version activated`);
305
+ }
306
+ // Reset stage counter (job is complete)
307
+ db.resetDocStage(project.id);
308
+ console.log(`✅ Multi-stage documentation complete for ${projectPath}`);
309
+ console.log(` 📦 Version: #${versionId}`);
310
+ console.log(` 📁 Created: ${coveragePlan.folders.length} folders`);
311
+ console.log(` 📄 Generated: ${coveragePlan.files.length} files`);
312
+ };
313
+ };
314
+ exports.createDocProcessor = createDocProcessor;
315
+ function formatCoveragePlan(plan) {
316
+ let md = '# Documentation Coverage Plan\n\n';
317
+ md += '> This file is temporary and will be removed after documentation is complete.\n\n';
318
+ md += '## Folders\n\n';
319
+ for (const folder of plan.folders) {
320
+ md += `- \`${folder.path}\` - ${folder.purpose}\n`;
321
+ }
322
+ md += '\n## Files\n\n';
323
+ for (const file of plan.files) {
324
+ md += `- \`${file.path}\` - **${file.title}**: ${file.description}\n`;
325
+ }
326
+ md += '\n## Stages\n\n';
327
+ for (const stage of plan.stages) {
328
+ md += `### Stage ${stage.stage}: ${stage.focus}\n`;
329
+ for (const file of stage.files) {
330
+ md += `- ${file}\n`;
331
+ }
332
+ md += '\n';
333
+ }
334
+ return md;
335
+ }
336
+ //# sourceMappingURL=DocProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocProcessor.js","sourceRoot":"","sources":["../../src/jobs/DocProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { GitService } from '../services/GitService';
2
+ import { DatabaseService } from '../services/DatabaseService';
3
+ export declare const createFileProcessor: (git: GitService, db: DatabaseService) => (data: {
4
+ filePath: string;
5
+ event: string;
6
+ }) => Promise<void>;
7
+ //# sourceMappingURL=FileProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileProcessor.d.ts","sourceRoot":"","sources":["../../src/jobs/FileProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,eAAO,MAAM,mBAAmB,GAAI,KAAK,UAAU,EAAE,IAAI,eAAe,MACtD,MAAM;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,kBAuB1D,CAAC"}
@@ -0,0 +1,29 @@
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.createFileProcessor = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const createFileProcessor = (git, db) => {
9
+ return async (data) => {
10
+ const { filePath, event } = data;
11
+ // Resolve to absolute path for consistent storage and querying
12
+ const absolutePath = path_1.default.isAbsolute(filePath)
13
+ ? filePath
14
+ : path_1.default.resolve(process.cwd(), filePath);
15
+ console.log(`🧠 AI Agent processing change in: ${absolutePath} (${event})`);
16
+ // Log to structural memory
17
+ db.upsertFile(absolutePath, '', Date.now());
18
+ db.logEvent('file:processed', { filePath: absolutePath, event });
19
+ // Trigger AI Embedding Job if it's a valid code file
20
+ // Simple filter: ignore non-text files
21
+ const isEmbeddable = /\.(ts|tsx|js|jsx|md|json|css|html)$/.test(absolutePath);
22
+ if (isEmbeddable) {
23
+ console.log(`✨ Enqueuing AI Embedding for: ${absolutePath}`);
24
+ db.enqueueJob('ai:embed', { filePath: absolutePath });
25
+ }
26
+ };
27
+ };
28
+ exports.createFileProcessor = createFileProcessor;
29
+ //# sourceMappingURL=FileProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileProcessor.js","sourceRoot":"","sources":["../../src/jobs/FileProcessor.ts"],"names":[],"mappings":";;;;;;AAEA,gDAAwB;AAEjB,MAAM,mBAAmB,GAAG,CAAC,GAAe,EAAE,EAAmB,EAAE,EAAE;IACxE,OAAO,KAAK,EAAE,IAAyC,EAAE,EAAE;QACvD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEjC,+DAA+D;QAC/D,MAAM,YAAY,GAAG,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,CAAC,GAAG,CAAC,qCAAqC,YAAY,KAAK,KAAK,GAAG,CAAC,CAAC;QAE5E,2BAA2B;QAC3B,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,qDAAqD;QACrD,uCAAuC;QACvC,MAAM,YAAY,GAAG,qCAAqC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9E,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;YAC7D,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,CAAC;AACN,CAAC,CAAC;AAxBW,QAAA,mBAAmB,uBAwB9B"}
@@ -0,0 +1,13 @@
1
+ import { DatabaseService } from '../services/DatabaseService';
2
+ import { WatcherService } from '../services/WatcherService';
3
+ import { ConfigService } from '../services/ConfigService';
4
+ import { QueueService } from '../services/QueueService';
5
+ import { TriggerService } from '../services/TriggerService';
6
+ interface ProjectPayload {
7
+ path: string;
8
+ }
9
+ export declare const createSystemProcessor: (db: DatabaseService, watcher: WatcherService, configService: ConfigService, queue: QueueService, triggerService: TriggerService) => (data: ProjectPayload & {
10
+ action: "add" | "remove";
11
+ }) => Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=SystemProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemProcessor.d.ts","sourceRoot":"","sources":["../../src/jobs/SystemProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,GAC9B,IAAI,eAAe,EACnB,SAAS,cAAc,EACvB,eAAe,aAAa,EAC5B,OAAO,YAAY,EACnB,gBAAgB,cAAc,MAEhB,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;CAAE,kBAoCpE,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSystemProcessor = void 0;
4
+ const createSystemProcessor = (db, watcher, configService, queue, triggerService) => {
5
+ return async (data) => {
6
+ const { path, action } = data;
7
+ if (action === 'add') {
8
+ console.log(`➕ Adding project: ${path}`);
9
+ db.addProject(path);
10
+ // Generate default config if missing
11
+ configService.generateDefaultConfigFile(path);
12
+ // Load config and register triggers
13
+ const config = configService.loadConfig(path);
14
+ triggerService.registerProject(path, config);
15
+ watcher.addPath(path);
16
+ db.logEvent('project:added', { path });
17
+ // Trigger Documentation Recon
18
+ queue.add('doc:initialize', { projectPath: path });
19
+ console.log(`🚀 Triggered Doc Recon for: ${path}`);
20
+ }
21
+ else if (action === 'remove') {
22
+ console.log(`➖ Removing project: ${path}`);
23
+ const result = db.removeProject(path);
24
+ if (result.changes > 0) {
25
+ watcher.removePath(path);
26
+ triggerService.unregisterProject(path);
27
+ db.logEvent('project:removed', { path });
28
+ console.log(`✅ Project removed successfully: ${path}`);
29
+ }
30
+ else {
31
+ console.warn(`⚠️ Project not found in database: ${path}`);
32
+ console.warn(` It may have already been removed or the path doesn't match.`);
33
+ }
34
+ }
35
+ };
36
+ };
37
+ exports.createSystemProcessor = createSystemProcessor;
38
+ //# sourceMappingURL=SystemProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemProcessor.js","sourceRoot":"","sources":["../../src/jobs/SystemProcessor.ts"],"names":[],"mappings":";;;AAUO,MAAM,qBAAqB,GAAG,CACjC,EAAmB,EACnB,OAAuB,EACvB,aAA4B,EAC5B,KAAmB,EACnB,cAA8B,EAChC,EAAE;IACA,OAAO,KAAK,EAAE,IAAmD,EAAE,EAAE;QACjE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAE9B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;YACzC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpB,qCAAqC;YACrC,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAE9C,oCAAoC;YACpC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9C,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAE7C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvC,8BAA8B;YAC9B,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAEvD,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACzB,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACvC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YACnF,CAAC;QACL,CAAC;IACL,CAAC,CAAC;AACN,CAAC,CAAC;AA3CW,QAAA,qBAAqB,yBA2ChC"}
@@ -0,0 +1,21 @@
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
+ interface UpdateJobData {
6
+ projectPath: string;
7
+ triggerType: 'manual' | 'on_change' | 'on_commit' | 'schedule';
8
+ incremental: boolean;
9
+ changedFiles?: string[];
10
+ }
11
+ /**
12
+ * Creates an incremental doc update processor.
13
+ * Unlike doc:initialize which regenerates everything, this:
14
+ * 1. Analyzes what files changed since last doc version
15
+ * 2. Determines which docs are affected
16
+ * 3. Updates only those docs
17
+ * 4. Creates a new version with the changes
18
+ */
19
+ export declare const createUpdateProcessor: (db: DatabaseService, ai: AIService, configService: ConfigService, git: GitService) => (data: UpdateJobData) => Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=UpdateProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateProcessor.d.ts","sourceRoot":"","sources":["../../src/jobs/UpdateProcessor.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;AAKpD,UAAU,aAAa;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAC9B,IAAI,eAAe,EACnB,IAAI,SAAS,EACb,eAAe,aAAa,EAC5B,KAAK,UAAU,MAED,MAAM,aAAa,kBA0JpC,CAAC"}