cmp-memory-system 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +541 -0
- package/dist/analytics/index.d.ts +5 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +5 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +107 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +333 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/auto-improve/eslint-generator.d.ts +36 -0
- package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
- package/dist/auto-improve/eslint-generator.js +280 -0
- package/dist/auto-improve/eslint-generator.js.map +1 -0
- package/dist/auto-improve/index.d.ts +6 -0
- package/dist/auto-improve/index.d.ts.map +1 -0
- package/dist/auto-improve/index.js +6 -0
- package/dist/auto-improve/index.js.map +1 -0
- package/dist/auto-improve/pattern-detector.d.ts +92 -0
- package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
- package/dist/auto-improve/pattern-detector.js +231 -0
- package/dist/auto-improve/pattern-detector.js.map +1 -0
- package/dist/cli/index.d.ts +16 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +636 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +15 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +373 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/ui.d.ts +9 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +530 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/db/client.d.ts +66 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +159 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/drizzle-client.d.ts +302 -0
- package/dist/db/drizzle-client.d.ts.map +1 -0
- package/dist/db/drizzle-client.js +404 -0
- package/dist/db/drizzle-client.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/feedback/collector.d.ts +74 -0
- package/dist/feedback/collector.d.ts.map +1 -0
- package/dist/feedback/collector.js +231 -0
- package/dist/feedback/collector.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +5 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/memory-checkpoint.d.ts +43 -0
- package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
- package/dist/hooks/memory-checkpoint.js +257 -0
- package/dist/hooks/memory-checkpoint.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +61 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +262 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +34 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +358 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/session-start.d.ts +38 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +274 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +42 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +599 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/embeddings.d.ts +38 -0
- package/dist/registry/embeddings.d.ts.map +1 -0
- package/dist/registry/embeddings.js +110 -0
- package/dist/registry/embeddings.js.map +1 -0
- package/dist/registry/generator.d.ts +41 -0
- package/dist/registry/generator.d.ts.map +1 -0
- package/dist/registry/generator.js +323 -0
- package/dist/registry/generator.js.map +1 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/services/IdeaCollector.d.ts +103 -0
- package/dist/services/IdeaCollector.d.ts.map +1 -0
- package/dist/services/IdeaCollector.js +371 -0
- package/dist/services/IdeaCollector.js.map +1 -0
- package/dist/services/TaskTracker.d.ts +89 -0
- package/dist/services/TaskTracker.d.ts.map +1 -0
- package/dist/services/TaskTracker.js +324 -0
- package/dist/services/TaskTracker.js.map +1 -0
- package/dist/services/WorkPlanManager.d.ts +107 -0
- package/dist/services/WorkPlanManager.d.ts.map +1 -0
- package/dist/services/WorkPlanManager.js +440 -0
- package/dist/services/WorkPlanManager.js.map +1 -0
- package/dist/services/auto-inject.d.ts +77 -0
- package/dist/services/auto-inject.d.ts.map +1 -0
- package/dist/services/auto-inject.js +289 -0
- package/dist/services/auto-inject.js.map +1 -0
- package/dist/services/auto-tag.d.ts +61 -0
- package/dist/services/auto-tag.d.ts.map +1 -0
- package/dist/services/auto-tag.js +203 -0
- package/dist/services/auto-tag.js.map +1 -0
- package/dist/services/cross-project-sync.d.ts +76 -0
- package/dist/services/cross-project-sync.d.ts.map +1 -0
- package/dist/services/cross-project-sync.js +235 -0
- package/dist/services/cross-project-sync.js.map +1 -0
- package/dist/services/index.d.ts +15 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory-consolidation.d.ts +77 -0
- package/dist/services/memory-consolidation.d.ts.map +1 -0
- package/dist/services/memory-consolidation.js +298 -0
- package/dist/services/memory-consolidation.js.map +1 -0
- package/dist/services/semantic-search.d.ts +93 -0
- package/dist/services/semantic-search.d.ts.map +1 -0
- package/dist/services/semantic-search.js +278 -0
- package/dist/services/semantic-search.js.map +1 -0
- package/dist/services/weekly-digest.d.ts +105 -0
- package/dist/services/weekly-digest.d.ts.map +1 -0
- package/dist/services/weekly-digest.js +292 -0
- package/dist/services/weekly-digest.js.map +1 -0
- package/dist/types/index.d.ts +274 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +84 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +89 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +28 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +80 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +89 -0
- package/templates/memory-config.json +82 -0
- package/templates/memory-config.schema.json +212 -0
- package/templates/settings.json +58 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdeaCollector Service
|
|
3
|
+
*
|
|
4
|
+
* Collects and manages ideas and improvements generated during work sessions.
|
|
5
|
+
* Integrates with TaskTracker to associate ideas with tasks.
|
|
6
|
+
*/
|
|
7
|
+
import { ulid } from 'ulid';
|
|
8
|
+
import { createDrizzleClient } from '../db/drizzle-client.js';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// IDEA COLLECTOR SERVICE
|
|
11
|
+
// =============================================================================
|
|
12
|
+
export class IdeaCollector {
|
|
13
|
+
client;
|
|
14
|
+
system;
|
|
15
|
+
constructor(system) {
|
|
16
|
+
this.system = system;
|
|
17
|
+
this.client = createDrizzleClient(system);
|
|
18
|
+
}
|
|
19
|
+
// ===========================================================================
|
|
20
|
+
// IDEA OPERATIONS
|
|
21
|
+
// ===========================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Create a new idea (standalone, not attached to task)
|
|
24
|
+
*/
|
|
25
|
+
async createIdea(input) {
|
|
26
|
+
const now = new Date().toISOString();
|
|
27
|
+
const content = {
|
|
28
|
+
id: ulid(),
|
|
29
|
+
title: input.title,
|
|
30
|
+
description: input.description,
|
|
31
|
+
priority: input.priority ?? 'medium',
|
|
32
|
+
category: input.category ?? 'feature',
|
|
33
|
+
createdAt: now,
|
|
34
|
+
relatedFiles: input.relatedFiles,
|
|
35
|
+
standalone: true,
|
|
36
|
+
taskId: input.taskId,
|
|
37
|
+
};
|
|
38
|
+
const result = await this.client.create({
|
|
39
|
+
type: 'idea',
|
|
40
|
+
status: 'active',
|
|
41
|
+
priority: input.priority ?? 'medium',
|
|
42
|
+
content: content,
|
|
43
|
+
tags: [
|
|
44
|
+
'idea',
|
|
45
|
+
`category:${content.category}`,
|
|
46
|
+
`priority:${content.priority}`,
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
return result.id;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get all ideas (standalone and from tasks)
|
|
53
|
+
*/
|
|
54
|
+
async getAllIdeas(options) {
|
|
55
|
+
// Get standalone ideas
|
|
56
|
+
const standaloneItems = await this.client.list({
|
|
57
|
+
type: 'idea',
|
|
58
|
+
status: 'active',
|
|
59
|
+
limit: options?.limit ?? 100,
|
|
60
|
+
});
|
|
61
|
+
// Get ideas from tasks
|
|
62
|
+
const taskItems = await this.client.list({
|
|
63
|
+
type: 'task',
|
|
64
|
+
limit: 100,
|
|
65
|
+
});
|
|
66
|
+
const ideas = [];
|
|
67
|
+
// Add standalone ideas
|
|
68
|
+
for (const item of standaloneItems) {
|
|
69
|
+
const content = item.content;
|
|
70
|
+
if (content) {
|
|
71
|
+
ideas.push({
|
|
72
|
+
id: content.id,
|
|
73
|
+
title: content.title,
|
|
74
|
+
description: content.description,
|
|
75
|
+
priority: content.priority,
|
|
76
|
+
category: content.category,
|
|
77
|
+
createdAt: content.createdAt,
|
|
78
|
+
relatedFiles: content.relatedFiles,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Add ideas from tasks
|
|
83
|
+
for (const task of taskItems) {
|
|
84
|
+
const content = task.content;
|
|
85
|
+
if (content?.ideas) {
|
|
86
|
+
ideas.push(...content.ideas);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Filter by category
|
|
90
|
+
let filtered = ideas;
|
|
91
|
+
if (options?.category) {
|
|
92
|
+
filtered = filtered.filter(i => i.category === options.category);
|
|
93
|
+
}
|
|
94
|
+
if (options?.priority) {
|
|
95
|
+
filtered = filtered.filter(i => i.priority === options.priority);
|
|
96
|
+
}
|
|
97
|
+
// Sort by date and limit
|
|
98
|
+
return filtered
|
|
99
|
+
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
|
|
100
|
+
.slice(0, options?.limit ?? 100);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get idea statistics
|
|
104
|
+
*/
|
|
105
|
+
async getIdeaStats() {
|
|
106
|
+
const ideas = await this.getAllIdeas({ limit: 1000 });
|
|
107
|
+
const byCategory = {};
|
|
108
|
+
const byPriority = {};
|
|
109
|
+
for (const idea of ideas) {
|
|
110
|
+
byCategory[idea.category] = (byCategory[idea.category] ?? 0) + 1;
|
|
111
|
+
byPriority[idea.priority] = (byPriority[idea.priority] ?? 0) + 1;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
totalIdeas: ideas.length,
|
|
115
|
+
byCategory,
|
|
116
|
+
byPriority,
|
|
117
|
+
recent: ideas.slice(0, 10),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Mark idea as implemented/done
|
|
122
|
+
*/
|
|
123
|
+
async completeIdea(ideaId) {
|
|
124
|
+
// Find the idea (could be standalone or in a task)
|
|
125
|
+
const standaloneItems = await this.client.list({ type: 'idea' });
|
|
126
|
+
const standaloneItem = standaloneItems.find(item => {
|
|
127
|
+
const content = item.content;
|
|
128
|
+
return content?.id === ideaId;
|
|
129
|
+
});
|
|
130
|
+
if (standaloneItem) {
|
|
131
|
+
await this.client.update(standaloneItem.id, { status: 'done' });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ===========================================================================
|
|
135
|
+
// IMPROVEMENT OPERATIONS
|
|
136
|
+
// ===========================================================================
|
|
137
|
+
/**
|
|
138
|
+
* Create a new improvement (standalone)
|
|
139
|
+
*/
|
|
140
|
+
async createImprovement(input) {
|
|
141
|
+
const now = new Date().toISOString();
|
|
142
|
+
const content = {
|
|
143
|
+
id: ulid(),
|
|
144
|
+
title: input.title,
|
|
145
|
+
description: input.description,
|
|
146
|
+
type: input.type ?? 'code_quality',
|
|
147
|
+
effort: input.effort ?? 'medium',
|
|
148
|
+
createdAt: now,
|
|
149
|
+
suggestedBy: input.suggestedBy ?? 'ai',
|
|
150
|
+
standalone: true,
|
|
151
|
+
taskId: input.taskId,
|
|
152
|
+
};
|
|
153
|
+
const result = await this.client.create({
|
|
154
|
+
type: 'improvement',
|
|
155
|
+
status: 'active',
|
|
156
|
+
priority: input.effort === 'small' ? 'low' : input.effort === 'large' ? 'high' : 'medium',
|
|
157
|
+
content: content,
|
|
158
|
+
tags: [
|
|
159
|
+
'improvement',
|
|
160
|
+
`type:${content.type}`,
|
|
161
|
+
`effort:${content.effort}`,
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
return result.id;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get all improvements
|
|
168
|
+
*/
|
|
169
|
+
async getAllImprovements(options) {
|
|
170
|
+
// Get standalone improvements
|
|
171
|
+
const standaloneItems = await this.client.list({
|
|
172
|
+
type: 'improvement',
|
|
173
|
+
status: 'active',
|
|
174
|
+
limit: options?.limit ?? 100,
|
|
175
|
+
});
|
|
176
|
+
// Get improvements from tasks
|
|
177
|
+
const taskItems = await this.client.list({
|
|
178
|
+
type: 'task',
|
|
179
|
+
limit: 100,
|
|
180
|
+
});
|
|
181
|
+
const improvements = [];
|
|
182
|
+
// Add standalone improvements
|
|
183
|
+
for (const item of standaloneItems) {
|
|
184
|
+
const content = item.content;
|
|
185
|
+
if (content) {
|
|
186
|
+
improvements.push({
|
|
187
|
+
id: content.id,
|
|
188
|
+
title: content.title,
|
|
189
|
+
description: content.description,
|
|
190
|
+
type: content.type,
|
|
191
|
+
effort: content.effort,
|
|
192
|
+
createdAt: content.createdAt,
|
|
193
|
+
suggestedBy: content.suggestedBy,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Add improvements from tasks
|
|
198
|
+
for (const task of taskItems) {
|
|
199
|
+
const content = task.content;
|
|
200
|
+
if (content?.improvements) {
|
|
201
|
+
improvements.push(...content.improvements);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Filter
|
|
205
|
+
let filtered = improvements;
|
|
206
|
+
if (options?.type) {
|
|
207
|
+
filtered = filtered.filter(i => i.type === options.type);
|
|
208
|
+
}
|
|
209
|
+
if (options?.effort) {
|
|
210
|
+
filtered = filtered.filter(i => i.effort === options.effort);
|
|
211
|
+
}
|
|
212
|
+
// Sort and limit
|
|
213
|
+
return filtered
|
|
214
|
+
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
|
|
215
|
+
.slice(0, options?.limit ?? 100);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get improvement statistics
|
|
219
|
+
*/
|
|
220
|
+
async getImprovementStats() {
|
|
221
|
+
const improvements = await this.getAllImprovements({ limit: 1000 });
|
|
222
|
+
const byType = {};
|
|
223
|
+
const byEffort = {};
|
|
224
|
+
for (const imp of improvements) {
|
|
225
|
+
byType[imp.type] = (byType[imp.type] ?? 0) + 1;
|
|
226
|
+
byEffort[imp.effort] = (byEffort[imp.effort] ?? 0) + 1;
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
totalImprovements: improvements.length,
|
|
230
|
+
byType,
|
|
231
|
+
byEffort,
|
|
232
|
+
recent: improvements.slice(0, 10),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Mark improvement as implemented
|
|
237
|
+
*/
|
|
238
|
+
async completeImprovement(improvementId) {
|
|
239
|
+
const standaloneItems = await this.client.list({ type: 'improvement' });
|
|
240
|
+
const standaloneItem = standaloneItems.find(item => {
|
|
241
|
+
const content = item.content;
|
|
242
|
+
return content?.id === improvementId;
|
|
243
|
+
});
|
|
244
|
+
if (standaloneItem) {
|
|
245
|
+
await this.client.update(standaloneItem.id, { status: 'done' });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// ===========================================================================
|
|
249
|
+
// QUICK CAPTURE
|
|
250
|
+
// ===========================================================================
|
|
251
|
+
/**
|
|
252
|
+
* Quick capture from AI analysis (auto-categorizes)
|
|
253
|
+
*/
|
|
254
|
+
async quickCapture(text, context) {
|
|
255
|
+
const result = {};
|
|
256
|
+
// Simple heuristics to categorize
|
|
257
|
+
const lowerText = text.toLowerCase();
|
|
258
|
+
// Is it an improvement suggestion?
|
|
259
|
+
const isImprovement = lowerText.includes('refactor') ||
|
|
260
|
+
lowerText.includes('improve') ||
|
|
261
|
+
lowerText.includes('optimize') ||
|
|
262
|
+
lowerText.includes('performance') ||
|
|
263
|
+
lowerText.includes('clean up') ||
|
|
264
|
+
lowerText.includes('security');
|
|
265
|
+
// Is it a feature idea?
|
|
266
|
+
const isFeature = lowerText.includes('could add') ||
|
|
267
|
+
lowerText.includes('would be nice') ||
|
|
268
|
+
lowerText.includes('feature') ||
|
|
269
|
+
lowerText.includes('consider adding');
|
|
270
|
+
if (isImprovement) {
|
|
271
|
+
// Determine type
|
|
272
|
+
let type = 'code_quality';
|
|
273
|
+
if (lowerText.includes('performance') || lowerText.includes('optimize')) {
|
|
274
|
+
type = 'performance';
|
|
275
|
+
}
|
|
276
|
+
else if (lowerText.includes('security')) {
|
|
277
|
+
type = 'security';
|
|
278
|
+
}
|
|
279
|
+
else if (lowerText.includes('ux') || lowerText.includes('user')) {
|
|
280
|
+
type = 'ux';
|
|
281
|
+
}
|
|
282
|
+
else if (lowerText.includes('architecture') || lowerText.includes('structure')) {
|
|
283
|
+
type = 'architecture';
|
|
284
|
+
}
|
|
285
|
+
result.improvementId = await this.createImprovement({
|
|
286
|
+
title: text.slice(0, 100),
|
|
287
|
+
description: text,
|
|
288
|
+
type,
|
|
289
|
+
taskId: context?.taskId,
|
|
290
|
+
suggestedBy: 'ai',
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
if (isFeature || !isImprovement) {
|
|
294
|
+
// Determine category
|
|
295
|
+
let category = 'feature';
|
|
296
|
+
if (lowerText.includes('bug') || lowerText.includes('fix')) {
|
|
297
|
+
category = 'bug';
|
|
298
|
+
}
|
|
299
|
+
else if (lowerText.includes('refactor')) {
|
|
300
|
+
category = 'refactor';
|
|
301
|
+
}
|
|
302
|
+
else if (lowerText.includes('doc')) {
|
|
303
|
+
category = 'documentation';
|
|
304
|
+
}
|
|
305
|
+
else if (lowerText.includes('optim')) {
|
|
306
|
+
category = 'optimization';
|
|
307
|
+
}
|
|
308
|
+
result.ideaId = await this.createIdea({
|
|
309
|
+
title: text.slice(0, 100),
|
|
310
|
+
description: text,
|
|
311
|
+
category,
|
|
312
|
+
taskId: context?.taskId,
|
|
313
|
+
relatedFiles: context?.files,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
// ===========================================================================
|
|
319
|
+
// EXPORT
|
|
320
|
+
// ===========================================================================
|
|
321
|
+
/**
|
|
322
|
+
* Export all ideas and improvements as markdown
|
|
323
|
+
*/
|
|
324
|
+
async exportMarkdown() {
|
|
325
|
+
const ideas = await this.getAllIdeas();
|
|
326
|
+
const improvements = await this.getAllImprovements();
|
|
327
|
+
let md = `# Ideas & Improvements\n\n`;
|
|
328
|
+
md += `*Generated: ${new Date().toISOString()}*\n\n`;
|
|
329
|
+
md += `## Ideas (${ideas.length})\n\n`;
|
|
330
|
+
for (const idea of ideas) {
|
|
331
|
+
md += `### ${idea.title}\n`;
|
|
332
|
+
md += `- **Priority**: ${idea.priority}\n`;
|
|
333
|
+
md += `- **Category**: ${idea.category}\n`;
|
|
334
|
+
md += `- **Created**: ${idea.createdAt}\n`;
|
|
335
|
+
if (idea.relatedFiles?.length) {
|
|
336
|
+
md += `- **Files**: ${idea.relatedFiles.join(', ')}\n`;
|
|
337
|
+
}
|
|
338
|
+
md += `\n${idea.description}\n\n---\n\n`;
|
|
339
|
+
}
|
|
340
|
+
md += `## Improvements (${improvements.length})\n\n`;
|
|
341
|
+
for (const imp of improvements) {
|
|
342
|
+
md += `### ${imp.title}\n`;
|
|
343
|
+
md += `- **Type**: ${imp.type}\n`;
|
|
344
|
+
md += `- **Effort**: ${imp.effort}\n`;
|
|
345
|
+
md += `- **Suggested by**: ${imp.suggestedBy ?? 'unknown'}\n`;
|
|
346
|
+
md += `- **Created**: ${imp.createdAt}\n`;
|
|
347
|
+
md += `\n${imp.description}\n\n---\n\n`;
|
|
348
|
+
}
|
|
349
|
+
return md;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// =============================================================================
|
|
353
|
+
// FACTORY
|
|
354
|
+
// =============================================================================
|
|
355
|
+
let collectorInstance = null;
|
|
356
|
+
/**
|
|
357
|
+
* Get or create IdeaCollector instance
|
|
358
|
+
*/
|
|
359
|
+
export function getIdeaCollector(system) {
|
|
360
|
+
if (!collectorInstance) {
|
|
361
|
+
collectorInstance = new IdeaCollector(system);
|
|
362
|
+
}
|
|
363
|
+
return collectorInstance;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Create fresh IdeaCollector instance
|
|
367
|
+
*/
|
|
368
|
+
export function createIdeaCollector(system) {
|
|
369
|
+
return new IdeaCollector(system);
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=IdeaCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdeaCollector.js","sourceRoot":"","sources":["../../src/services/IdeaCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskTracker Service
|
|
3
|
+
*
|
|
4
|
+
* Automatically tracks tasks in DEV_Items database.
|
|
5
|
+
* Creates task entries when work starts, updates progress, and records completion.
|
|
6
|
+
*/
|
|
7
|
+
import type { DevSystem, DevItem, TaskIdea, TaskImprovement } from '../types/index.js';
|
|
8
|
+
export interface StartTaskOptions {
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
userRequest?: string;
|
|
12
|
+
currentFile?: string;
|
|
13
|
+
todoItems?: string[];
|
|
14
|
+
branch?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface UpdateTaskOptions {
|
|
17
|
+
filesModified?: string[];
|
|
18
|
+
toolCalls?: number;
|
|
19
|
+
filesRead?: number;
|
|
20
|
+
filesWritten?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface CompleteTaskOptions {
|
|
23
|
+
ideas?: Omit<TaskIdea, 'id' | 'createdAt'>[];
|
|
24
|
+
improvements?: Omit<TaskImprovement, 'id' | 'createdAt'>[];
|
|
25
|
+
cancelled?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare class TaskTracker {
|
|
28
|
+
private client;
|
|
29
|
+
private currentTaskId;
|
|
30
|
+
private taskMetrics;
|
|
31
|
+
constructor(system: DevSystem);
|
|
32
|
+
/**
|
|
33
|
+
* Start tracking a new task
|
|
34
|
+
*/
|
|
35
|
+
startTask(options: StartTaskOptions): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* Update current task with new information
|
|
38
|
+
*/
|
|
39
|
+
updateTask(options: UpdateTaskOptions): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Complete the current task
|
|
42
|
+
*/
|
|
43
|
+
completeTask(options?: CompleteTaskOptions): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Add an idea to the current task
|
|
46
|
+
*/
|
|
47
|
+
addIdea(idea: Omit<TaskIdea, 'id' | 'createdAt'>): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Add an improvement to the current task
|
|
50
|
+
*/
|
|
51
|
+
addImprovement(improvement: Omit<TaskImprovement, 'id' | 'createdAt'>): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Get current active task
|
|
54
|
+
*/
|
|
55
|
+
getCurrentTask(): Promise<DevItem | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Get recent tasks
|
|
58
|
+
*/
|
|
59
|
+
getRecentTasks(limit?: number): Promise<DevItem[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Get all ideas from completed tasks
|
|
62
|
+
*/
|
|
63
|
+
getAllIdeas(limit?: number): Promise<TaskIdea[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Get all improvements from completed tasks
|
|
66
|
+
*/
|
|
67
|
+
getAllImprovements(limit?: number): Promise<TaskImprovement[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Get current git branch
|
|
70
|
+
*/
|
|
71
|
+
private getCurrentBranch;
|
|
72
|
+
/**
|
|
73
|
+
* Check if there's an active task
|
|
74
|
+
*/
|
|
75
|
+
hasActiveTask(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get current task ID
|
|
78
|
+
*/
|
|
79
|
+
getCurrentTaskId(): string | null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get or create TaskTracker instance
|
|
83
|
+
*/
|
|
84
|
+
export declare function getTaskTracker(system: DevSystem): TaskTracker;
|
|
85
|
+
/**
|
|
86
|
+
* Create fresh TaskTracker instance
|
|
87
|
+
*/
|
|
88
|
+
export declare function createTaskTracker(system: DevSystem): TaskTracker;
|
|
89
|
+
//# sourceMappingURL=TaskTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskTracker.d.ts","sourceRoot":"","sources":["../../src/services/TaskTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EAEP,QAAQ,EACR,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,CAAA;IAC5C,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,CAAA;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,WAAW,CAUlB;gBAEW,MAAM,EAAE,SAAS;IAQ7B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA2C3D;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC3D;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDhE;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtE;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3F;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiB/C;;OAEG;IACG,cAAc,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOpD;;OAEG;IACG,WAAW,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBlD;;OAEG;IACG,kBAAkB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAwBhE;;OAEG;YACW,gBAAgB;IAe9B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;CAGlC;AAQD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAK7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAEhE"}
|