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.
- package/README.md +132 -0
- package/package.json +86 -0
- package/packages/README.md +139 -0
- package/packages/cli/README.md +92 -0
- package/packages/cli/bin/chronicle.js +2 -0
- package/packages/cli/dist/commands/add.d.ts +2 -0
- package/packages/cli/dist/commands/add.d.ts.map +1 -0
- package/packages/cli/dist/commands/add.js +82 -0
- package/packages/cli/dist/commands/add.js.map +1 -0
- package/packages/cli/dist/commands/diff.d.ts +11 -0
- package/packages/cli/dist/commands/diff.d.ts.map +1 -0
- package/packages/cli/dist/commands/diff.js +164 -0
- package/packages/cli/dist/commands/diff.js.map +1 -0
- package/packages/cli/dist/commands/init.d.ts +2 -0
- package/packages/cli/dist/commands/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/init.js +54 -0
- package/packages/cli/dist/commands/init.js.map +1 -0
- package/packages/cli/dist/commands/list.d.ts +2 -0
- package/packages/cli/dist/commands/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/list.js +62 -0
- package/packages/cli/dist/commands/list.js.map +1 -0
- package/packages/cli/dist/commands/log.d.ts +4 -0
- package/packages/cli/dist/commands/log.d.ts.map +1 -0
- package/packages/cli/dist/commands/log.js +223 -0
- package/packages/cli/dist/commands/log.js.map +1 -0
- package/packages/cli/dist/commands/pause.d.ts +3 -0
- package/packages/cli/dist/commands/pause.d.ts.map +1 -0
- package/packages/cli/dist/commands/pause.js +49 -0
- package/packages/cli/dist/commands/pause.js.map +1 -0
- package/packages/cli/dist/commands/queue.d.ts +2 -0
- package/packages/cli/dist/commands/queue.d.ts.map +1 -0
- package/packages/cli/dist/commands/queue.js +96 -0
- package/packages/cli/dist/commands/queue.js.map +1 -0
- package/packages/cli/dist/commands/remove.d.ts +2 -0
- package/packages/cli/dist/commands/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/remove.js +80 -0
- package/packages/cli/dist/commands/remove.js.map +1 -0
- package/packages/cli/dist/commands/reset.d.ts +5 -0
- package/packages/cli/dist/commands/reset.d.ts.map +1 -0
- package/packages/cli/dist/commands/reset.js +90 -0
- package/packages/cli/dist/commands/reset.js.map +1 -0
- package/packages/cli/dist/commands/restart.d.ts +2 -0
- package/packages/cli/dist/commands/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/restart.js +72 -0
- package/packages/cli/dist/commands/restart.js.map +1 -0
- package/packages/cli/dist/commands/start.d.ts +2 -0
- package/packages/cli/dist/commands/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/start.js +127 -0
- package/packages/cli/dist/commands/start.js.map +1 -0
- package/packages/cli/dist/commands/status.d.ts +2 -0
- package/packages/cli/dist/commands/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/status.js +181 -0
- package/packages/cli/dist/commands/status.js.map +1 -0
- package/packages/cli/dist/commands/stop.d.ts +2 -0
- package/packages/cli/dist/commands/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/stop.js +64 -0
- package/packages/cli/dist/commands/stop.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +85 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/utils/paths.d.ts +26 -0
- package/packages/cli/dist/utils/paths.d.ts.map +1 -0
- package/packages/cli/dist/utils/paths.js +183 -0
- package/packages/cli/dist/utils/paths.js.map +1 -0
- package/packages/cli/package.json +25 -0
- package/packages/daemon/README.md +83 -0
- package/packages/daemon/dist/ai_test.d.ts +2 -0
- package/packages/daemon/dist/ai_test.d.ts.map +1 -0
- package/packages/daemon/dist/ai_test.js +4 -0
- package/packages/daemon/dist/ai_test.js.map +1 -0
- package/packages/daemon/dist/index.d.ts +2 -0
- package/packages/daemon/dist/index.d.ts.map +1 -0
- package/packages/daemon/dist/index.js +147 -0
- package/packages/daemon/dist/index.js.map +1 -0
- package/packages/daemon/dist/jobs/AIProcessor.d.ts +6 -0
- package/packages/daemon/dist/jobs/AIProcessor.d.ts.map +1 -0
- package/packages/daemon/dist/jobs/AIProcessor.js +58 -0
- package/packages/daemon/dist/jobs/AIProcessor.js.map +1 -0
- package/packages/daemon/dist/jobs/DocProcessor.d.ts +8 -0
- package/packages/daemon/dist/jobs/DocProcessor.d.ts.map +1 -0
- package/packages/daemon/dist/jobs/DocProcessor.js +336 -0
- package/packages/daemon/dist/jobs/DocProcessor.js.map +1 -0
- package/packages/daemon/dist/jobs/FileProcessor.d.ts +7 -0
- package/packages/daemon/dist/jobs/FileProcessor.d.ts.map +1 -0
- package/packages/daemon/dist/jobs/FileProcessor.js +29 -0
- package/packages/daemon/dist/jobs/FileProcessor.js.map +1 -0
- package/packages/daemon/dist/jobs/SystemProcessor.d.ts +13 -0
- package/packages/daemon/dist/jobs/SystemProcessor.d.ts.map +1 -0
- package/packages/daemon/dist/jobs/SystemProcessor.js +38 -0
- package/packages/daemon/dist/jobs/SystemProcessor.js.map +1 -0
- package/packages/daemon/dist/jobs/UpdateProcessor.d.ts +21 -0
- package/packages/daemon/dist/jobs/UpdateProcessor.d.ts.map +1 -0
- package/packages/daemon/dist/jobs/UpdateProcessor.js +222 -0
- package/packages/daemon/dist/jobs/UpdateProcessor.js.map +1 -0
- package/packages/daemon/dist/services/AIService.d.ts +90 -0
- package/packages/daemon/dist/services/AIService.d.ts.map +1 -0
- package/packages/daemon/dist/services/AIService.js +451 -0
- package/packages/daemon/dist/services/AIService.js.map +1 -0
- package/packages/daemon/dist/services/ConfigService.d.ts +30 -0
- package/packages/daemon/dist/services/ConfigService.d.ts.map +1 -0
- package/packages/daemon/dist/services/ConfigService.js +69 -0
- package/packages/daemon/dist/services/ConfigService.js.map +1 -0
- package/packages/daemon/dist/services/DatabaseService.d.ts +204 -0
- package/packages/daemon/dist/services/DatabaseService.d.ts.map +1 -0
- package/packages/daemon/dist/services/DatabaseService.js +692 -0
- package/packages/daemon/dist/services/DatabaseService.js.map +1 -0
- package/packages/daemon/dist/services/GitService.d.ts +12 -0
- package/packages/daemon/dist/services/GitService.d.ts.map +1 -0
- package/packages/daemon/dist/services/GitService.js +68 -0
- package/packages/daemon/dist/services/GitService.js.map +1 -0
- package/packages/daemon/dist/services/QueueService.d.ts +16 -0
- package/packages/daemon/dist/services/QueueService.d.ts.map +1 -0
- package/packages/daemon/dist/services/QueueService.js +87 -0
- package/packages/daemon/dist/services/QueueService.js.map +1 -0
- package/packages/daemon/dist/services/TriggerService.d.ts +37 -0
- package/packages/daemon/dist/services/TriggerService.d.ts.map +1 -0
- package/packages/daemon/dist/services/TriggerService.js +150 -0
- package/packages/daemon/dist/services/TriggerService.js.map +1 -0
- package/packages/daemon/dist/services/WatcherService.d.ts +12 -0
- package/packages/daemon/dist/services/WatcherService.d.ts.map +1 -0
- package/packages/daemon/dist/services/WatcherService.js +77 -0
- package/packages/daemon/dist/services/WatcherService.js.map +1 -0
- package/packages/daemon/dist/services/index.d.ts +2 -0
- package/packages/daemon/dist/services/index.d.ts.map +1 -0
- package/packages/daemon/dist/services/index.js +18 -0
- package/packages/daemon/dist/services/index.js.map +1 -0
- package/packages/daemon/dist/test-ignore.js +0 -0
- package/packages/daemon/package.json +28 -0
- package/packages/ui/app/actions.ts +73 -0
- package/packages/ui/app/api/ai-activity/route.ts +14 -0
- package/packages/ui/app/globals.css +98 -0
- package/packages/ui/app/layout.tsx +29 -0
- package/packages/ui/app/page.tsx +109 -0
- package/packages/ui/components/AutoRefresh.tsx +18 -0
- package/packages/ui/components/DocumentationViewer.tsx +276 -0
- package/packages/ui/components/FileList.tsx +69 -0
- package/packages/ui/components/HeaderWithThinking.tsx +102 -0
- package/packages/ui/components/JobQueue.tsx +194 -0
- package/packages/ui/components/JobQueueWrapper.tsx +31 -0
- package/packages/ui/components/MermaidInit.tsx +24 -0
- package/packages/ui/components/ProjectContentArea.tsx +186 -0
- package/packages/ui/components/ProjectList.tsx +136 -0
- package/packages/ui/components/ThinkingDrawer.tsx +377 -0
- package/packages/ui/components/ThinkingPanel.tsx +63 -0
- package/packages/ui/components/TriggerSettings.tsx +185 -0
- package/packages/ui/components/VersionSelector.tsx +132 -0
- package/packages/ui/lib/db.ts +521 -0
- package/packages/ui/next-env.d.ts +5 -0
- package/packages/ui/next.config.js +4 -0
- package/packages/ui/package.json +32 -0
- package/packages/ui/postcss.config.js +6 -0
- package/packages/ui/public/logo.png +0 -0
- package/packages/ui/tailwind.config.ts +32 -0
- package/packages/ui/tsconfig.json +40 -0
|
@@ -0,0 +1,222 @@
|
|
|
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.createUpdateProcessor = void 0;
|
|
7
|
+
const GitService_1 = require("../services/GitService");
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
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
|
+
const createUpdateProcessor = (db, ai, configService, git) => {
|
|
20
|
+
return async (data) => {
|
|
21
|
+
const { projectPath, triggerType } = data;
|
|
22
|
+
const config = configService.loadConfig(projectPath);
|
|
23
|
+
const docsFolder = config.documentation.modules_folder || 'docs';
|
|
24
|
+
const docsDir = path_1.default.join(projectPath, docsFolder);
|
|
25
|
+
console.log(`🔄 Incremental Doc Update for: ${projectPath} (trigger: ${triggerType})`);
|
|
26
|
+
// Get project - must be exact match or verified parent
|
|
27
|
+
let project = db.getProjectByPath(projectPath);
|
|
28
|
+
if (!project) {
|
|
29
|
+
// Only check parent projects if exact match fails
|
|
30
|
+
const projects = db.getProjects();
|
|
31
|
+
const parentProject = projects.find(p => projectPath.startsWith(p.path));
|
|
32
|
+
// Verify it's actually a monitored project, not just a path match
|
|
33
|
+
if (parentProject) {
|
|
34
|
+
// Double-check: is this file actually within the monitored project?
|
|
35
|
+
const normalizedProjectPath = path_1.default.resolve(parentProject.path);
|
|
36
|
+
const normalizedFilePath = path_1.default.resolve(projectPath);
|
|
37
|
+
if (normalizedFilePath.startsWith(normalizedProjectPath)) {
|
|
38
|
+
project = parentProject;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!project) {
|
|
43
|
+
console.warn(`⚠️ Project not found in database: ${projectPath}`);
|
|
44
|
+
console.warn(` Skipping doc update. Run "chronicle add" to monitor this project.`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Get active version
|
|
48
|
+
const activeVersion = db.getActiveDocVersion(project.id);
|
|
49
|
+
if (!activeVersion) {
|
|
50
|
+
const errorMsg = '❌ No active doc version found. Run "chronicle init" first to generate initial documentation.';
|
|
51
|
+
console.error(errorMsg);
|
|
52
|
+
db.logEvent('doc:update_error', { projectPath, error: 'No active version - run chronicle init first' });
|
|
53
|
+
throw new Error(errorMsg);
|
|
54
|
+
}
|
|
55
|
+
// Get files from last version
|
|
56
|
+
const lastDocFiles = db.getDocFiles(activeVersion.id);
|
|
57
|
+
const lastDocHashes = new Map(lastDocFiles.map(f => [f.path, crypto_1.default.createHash('md5').update(f.content).digest('hex')]));
|
|
58
|
+
// Get current project files
|
|
59
|
+
const currentFiles = await git.listFiles(projectPath);
|
|
60
|
+
const commitHash = await git.getHeadCommit(projectPath);
|
|
61
|
+
// Analyze what changed in the codebase
|
|
62
|
+
console.log('🔍 Analyzing changes...');
|
|
63
|
+
const changedSourceFiles = await detectChangedFiles(projectPath, db, project.id);
|
|
64
|
+
if (changedSourceFiles.length === 0) {
|
|
65
|
+
console.log('✅ No significant changes detected. Docs are up to date.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
console.log(` Found ${changedSourceFiles.length} changed source files`);
|
|
69
|
+
// Create new version
|
|
70
|
+
const versionId = db.createDocVersion(project.id, triggerType, commitHash || undefined);
|
|
71
|
+
console.log(`📦 Created doc version #${versionId}`);
|
|
72
|
+
// Determine which docs need updating based on changed files
|
|
73
|
+
const affectedDocs = await determineAffectedDocs(changedSourceFiles, lastDocFiles, ai);
|
|
74
|
+
console.log(`📝 Updating ${affectedDocs.length} affected doc files...`);
|
|
75
|
+
// Get project analysis for context
|
|
76
|
+
const analysis = await ai.analyzeProjectStructure(currentFiles);
|
|
77
|
+
// Update affected docs
|
|
78
|
+
for (const docPath of affectedDocs) {
|
|
79
|
+
const existingDoc = lastDocFiles.find(f => f.path === docPath);
|
|
80
|
+
console.log(` 📄 Updating: ${docPath}`);
|
|
81
|
+
const result = await ai.generateWithThoughts(`
|
|
82
|
+
CRITICAL: Output ONLY the raw markdown content. No preamble.
|
|
83
|
+
|
|
84
|
+
You are updating an existing documentation file based on code changes.
|
|
85
|
+
|
|
86
|
+
File: ${docPath}
|
|
87
|
+
|
|
88
|
+
${existingDoc ? `Current Content:\n${existingDoc.content.slice(0, 2000)}...\n` : ''}
|
|
89
|
+
|
|
90
|
+
Changed source files:
|
|
91
|
+
${changedSourceFiles.slice(0, 20).join('\\n')}
|
|
92
|
+
|
|
93
|
+
Project context:
|
|
94
|
+
${analysis}
|
|
95
|
+
|
|
96
|
+
Update the documentation to reflect any changes. Keep the same structure and style.
|
|
97
|
+
If you make assumptions, mark them as: [ASSUMPTION: your assumption]
|
|
98
|
+
|
|
99
|
+
Start directly with the markdown content.
|
|
100
|
+
`);
|
|
101
|
+
const content = result.content;
|
|
102
|
+
const fullPath = path_1.default.join(projectPath, docPath);
|
|
103
|
+
// Ensure directory exists
|
|
104
|
+
const dir = path_1.default.dirname(fullPath);
|
|
105
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
106
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
107
|
+
}
|
|
108
|
+
fs_1.default.writeFileSync(fullPath, content);
|
|
109
|
+
// Store in version
|
|
110
|
+
const docFileId = db.addDocFile(versionId, docPath, content);
|
|
111
|
+
// Store thoughts
|
|
112
|
+
if (result.thoughts.length > 0) {
|
|
113
|
+
db.addThoughtLog(versionId, docPath, result.thoughts.join('\n\n'));
|
|
114
|
+
}
|
|
115
|
+
// Extract assumptions
|
|
116
|
+
const assumptionMatches = content.match(/\[ASSUMPTION:\s*([^\]]+)\]/g);
|
|
117
|
+
if (assumptionMatches) {
|
|
118
|
+
for (const match of assumptionMatches) {
|
|
119
|
+
const claim = match.replace('[ASSUMPTION:', '').replace(']', '').trim();
|
|
120
|
+
db.addAssumption(docFileId, claim);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
db.logEvent('doc:file_updated', { projectPath, file: docPath, versionId });
|
|
124
|
+
}
|
|
125
|
+
// Copy unchanged docs to new version
|
|
126
|
+
for (const doc of lastDocFiles) {
|
|
127
|
+
if (!affectedDocs.includes(doc.path)) {
|
|
128
|
+
db.addDocFile(versionId, doc.path, doc.content);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Finalize version
|
|
132
|
+
const unverifiedAssumptions = db.getUnverifiedAssumptions(versionId);
|
|
133
|
+
if (unverifiedAssumptions.length > 0) {
|
|
134
|
+
db.updateDocVersionStatus(versionId, 'pending_review');
|
|
135
|
+
console.log(`⚠️ Version has ${unverifiedAssumptions.length} unverified assumptions - marked for review`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
db.activateDocVersion(versionId, project.id);
|
|
139
|
+
console.log(`✅ Version activated`);
|
|
140
|
+
}
|
|
141
|
+
// Reset stage counter (job is complete)
|
|
142
|
+
db.resetDocStage(project.id);
|
|
143
|
+
console.log(`✅ Incremental update complete`);
|
|
144
|
+
console.log(` 📦 Version: #${versionId}`);
|
|
145
|
+
console.log(` 📄 Updated: ${affectedDocs.length} files`);
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
exports.createUpdateProcessor = createUpdateProcessor;
|
|
149
|
+
/**
|
|
150
|
+
* Detect which source files have changed since last doc version.
|
|
151
|
+
* Uses git diff to find modified files.
|
|
152
|
+
*/
|
|
153
|
+
async function detectChangedFiles(projectPath, db, projectId) {
|
|
154
|
+
const git = new GitService_1.GitService(projectPath);
|
|
155
|
+
try {
|
|
156
|
+
// Use git status to find uncommitted changes
|
|
157
|
+
const status = await git.getStatus();
|
|
158
|
+
const changedFiles = [];
|
|
159
|
+
// Add modified, added, and renamed files
|
|
160
|
+
for (const file of [...status.modified, ...status.created, ...status.renamed.map(r => r.to)]) {
|
|
161
|
+
// Skip non-source files
|
|
162
|
+
if (file.includes('node_modules') || file.includes('.git') || file.startsWith('docs/'))
|
|
163
|
+
continue;
|
|
164
|
+
changedFiles.push(file);
|
|
165
|
+
}
|
|
166
|
+
// Also check for recent commits (last 5)
|
|
167
|
+
const log = await git.getLog(5);
|
|
168
|
+
// If there are recent commits (within last hour), consider those files changed too
|
|
169
|
+
const oneHourAgo = Date.now() - (60 * 60 * 1000);
|
|
170
|
+
for (const commit of log.all) {
|
|
171
|
+
const commitDate = new Date(commit.date).getTime();
|
|
172
|
+
if (commitDate > oneHourAgo) {
|
|
173
|
+
// This is a recent commit - the diffs are likely significant
|
|
174
|
+
// We'll include any staged/modified files
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return changedFiles;
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.warn('Could not detect changes via git:', error);
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Determine which doc files are affected by the source changes.
|
|
186
|
+
*/
|
|
187
|
+
async function determineAffectedDocs(changedSourceFiles, lastDocFiles, ai) {
|
|
188
|
+
// Simple heuristic: map source files to doc files
|
|
189
|
+
const affectedDocs = new Set();
|
|
190
|
+
for (const sourceFile of changedSourceFiles) {
|
|
191
|
+
// Find docs that might reference this file
|
|
192
|
+
for (const doc of lastDocFiles) {
|
|
193
|
+
// Check if doc content mentions the source file
|
|
194
|
+
const basename = path_1.default.basename(sourceFile);
|
|
195
|
+
const dirname = path_1.default.dirname(sourceFile);
|
|
196
|
+
if (doc.content.includes(basename) || doc.content.includes(dirname)) {
|
|
197
|
+
affectedDocs.add(doc.path);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Map by directory structure
|
|
201
|
+
const parts = sourceFile.split('/');
|
|
202
|
+
if (parts.length > 1) {
|
|
203
|
+
const packageOrDir = parts[0];
|
|
204
|
+
// Find corresponding doc folder
|
|
205
|
+
for (const doc of lastDocFiles) {
|
|
206
|
+
if (doc.path.includes(packageOrDir)) {
|
|
207
|
+
affectedDocs.add(doc.path);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// If no specific docs found, update main index files
|
|
213
|
+
if (affectedDocs.size === 0) {
|
|
214
|
+
for (const doc of lastDocFiles) {
|
|
215
|
+
if (doc.path.endsWith('index.md') || doc.path === 'docs/index.md') {
|
|
216
|
+
affectedDocs.add(doc.path);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return Array.from(affectedDocs);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=UpdateProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateProcessor.js","sourceRoot":"","sources":["../../src/jobs/UpdateProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { DatabaseService } from './DatabaseService';
|
|
2
|
+
export interface AIContext {
|
|
3
|
+
db: DatabaseService;
|
|
4
|
+
projectId?: number;
|
|
5
|
+
versionId?: number;
|
|
6
|
+
activityType?: 'analyze' | 'generate' | 'plan' | 'embed' | 'action' | 'other';
|
|
7
|
+
}
|
|
8
|
+
export declare class AIService {
|
|
9
|
+
private genAI;
|
|
10
|
+
private apiKey;
|
|
11
|
+
private readonly THINKING_MODEL;
|
|
12
|
+
private readonly FAST_MODEL;
|
|
13
|
+
private readonly EMBEDDING_MODEL;
|
|
14
|
+
constructor(apiKey: string);
|
|
15
|
+
/**
|
|
16
|
+
* Generates a vector embedding for the given text.
|
|
17
|
+
* Returns a 768-element Float32Array (or number array).
|
|
18
|
+
*/
|
|
19
|
+
generateEmbedding(text: string): Promise<number[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Helper to generate content with retry logic for rate limiting.
|
|
22
|
+
*/
|
|
23
|
+
private generateWithRetry;
|
|
24
|
+
/**
|
|
25
|
+
* Generates content with thinking and returns both the content and thought summaries.
|
|
26
|
+
* Uses HIGH thinking level with includeThoughts for capturing reasoning.
|
|
27
|
+
*/
|
|
28
|
+
generateWithThoughts(prompt: string, context?: AIContext, retries?: number, delay?: number): Promise<{
|
|
29
|
+
content: string;
|
|
30
|
+
thoughts: string[];
|
|
31
|
+
hasExtendedReasoning: boolean;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Generates a concise summary of the provided text.
|
|
35
|
+
*/
|
|
36
|
+
generateSummary(text: string): Promise<string>;
|
|
37
|
+
analyzeProjectStructure(files: string[]): Promise<string>;
|
|
38
|
+
generateReadme(analysis: string, files: string[]): Promise<string>;
|
|
39
|
+
generateChronicleInit(analysis: string): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Generates a single chronicle entry to append (not full file).
|
|
42
|
+
*/
|
|
43
|
+
generateChronicleEntry(action: string, details: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Generates ARCHITECTURE.md content.
|
|
46
|
+
*/
|
|
47
|
+
generateArchitectureDoc(analysis: string, files: string[]): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Generates MODULES.md content.
|
|
50
|
+
*/
|
|
51
|
+
generateModulesDoc(analysis: string, files: string[]): Promise<string>;
|
|
52
|
+
/**
|
|
53
|
+
* Detects project type to determine which docs to generate.
|
|
54
|
+
*/
|
|
55
|
+
detectProjectType(files: string[]): Promise<{
|
|
56
|
+
hasApi: boolean;
|
|
57
|
+
hasCli: boolean;
|
|
58
|
+
isMonorepo: boolean;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a documentation coverage plan - Stage 1 of multi-stage documentation.
|
|
62
|
+
* Returns a structured plan for what docs to generate and in what folder structure.
|
|
63
|
+
*/
|
|
64
|
+
planDocumentation(analysis: string, files: string[], projectType: {
|
|
65
|
+
hasApi: boolean;
|
|
66
|
+
hasCli: boolean;
|
|
67
|
+
isMonorepo: boolean;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
folders: {
|
|
70
|
+
path: string;
|
|
71
|
+
purpose: string;
|
|
72
|
+
}[];
|
|
73
|
+
files: {
|
|
74
|
+
path: string;
|
|
75
|
+
title: string;
|
|
76
|
+
description: string;
|
|
77
|
+
}[];
|
|
78
|
+
stages: {
|
|
79
|
+
stage: number;
|
|
80
|
+
focus: string;
|
|
81
|
+
files: string[];
|
|
82
|
+
}[];
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Generates a single documentation file based on the plan.
|
|
86
|
+
* Used in stages 2-4 of multi-stage documentation.
|
|
87
|
+
*/
|
|
88
|
+
generateDocFile(filePath: string, title: string, description: string, analysis: string, files: string[], includeMermaid?: boolean): Promise<string>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=AIService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIService.d.ts","sourceRoot":"","sources":["../../src/services/AIService.ts"],"names":[],"mappings":"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"}
|