sqlew 2.1.3 → 3.0.2
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/CHANGELOG.md +891 -535
- package/README.md +302 -613
- package/assets/kanban-style.png +0 -0
- package/assets/schema.sql +531 -402
- package/dist/database.d.ts +9 -0
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +33 -34
- package/dist/database.js.map +1 -1
- package/dist/index.js +1024 -21
- package/dist/index.js.map +1 -1
- package/dist/migrations/add-task-tables.d.ts +47 -0
- package/dist/migrations/add-task-tables.d.ts.map +1 -0
- package/dist/migrations/add-task-tables.js +285 -0
- package/dist/migrations/add-task-tables.js.map +1 -0
- package/dist/migrations/index.d.ts +96 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +239 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migrate-decisions-to-tasks.d.ts +61 -0
- package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +1 -0
- package/dist/migrations/migrate-decisions-to-tasks.js +442 -0
- package/dist/migrations/migrate-decisions-to-tasks.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +14 -3
- package/dist/schema.js.map +1 -1
- package/dist/tools/constraints.d.ts +4 -0
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +6 -27
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +17 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +195 -190
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +113 -166
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/messaging.d.ts +2 -9
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +67 -126
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +90 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +732 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/utils.d.ts +8 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +50 -21
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/batch.d.ts +69 -0
- package/dist/utils/batch.d.ts.map +1 -0
- package/dist/utils/batch.js +148 -0
- package/dist/utils/batch.js.map +1 -0
- package/dist/utils/query-builder.d.ts +68 -0
- package/dist/utils/query-builder.d.ts.map +1 -0
- package/dist/utils/query-builder.js +116 -0
- package/dist/utils/query-builder.js.map +1 -0
- package/dist/utils/task-stale-detection.d.ts +28 -0
- package/dist/utils/task-stale-detection.d.ts.map +1 -0
- package/dist/utils/task-stale-detection.js +92 -0
- package/dist/utils/task-stale-detection.js.map +1 -0
- package/dist/utils/validators.d.ts +57 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +117 -0
- package/dist/utils/validators.js.map +1 -0
- package/docs/AI_AGENT_GUIDE.md +1471 -0
- package/{ARCHITECTURE.md → docs/ARCHITECTURE.md} +636 -636
- package/docs/BEST_PRACTICES.md +481 -0
- package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +457 -0
- package/docs/MIGRATION_CHAIN.md +280 -0
- package/{MIGRATION_v2.md → docs/MIGRATION_v2.md} +538 -538
- package/docs/SHARED_CONCEPTS.md +339 -0
- package/docs/TASK_ACTIONS.md +854 -0
- package/docs/TASK_LINKING.md +729 -0
- package/docs/TASK_MIGRATION.md +701 -0
- package/docs/TASK_OVERVIEW.md +363 -0
- package/docs/TASK_SYSTEM.md +1244 -0
- package/docs/TOOL_REFERENCE.md +471 -0
- package/docs/TOOL_SELECTION.md +279 -0
- package/docs/WORKFLOWS.md +602 -0
- package/docs/refactoring-summary-2025-10-17.md +365 -0
- package/docs/requirement-2025-10-17.md +508 -0
- package/package.json +64 -63
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration: Convert Task-Like Decisions to Tasks
|
|
3
|
+
*
|
|
4
|
+
* This migration detects decisions being used for task/todo tracking
|
|
5
|
+
* and migrates them to the dedicated task management system.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Heuristic detection of task-like decisions
|
|
9
|
+
* - Dry-run mode to preview before executing
|
|
10
|
+
* - Confidence scoring for each detection
|
|
11
|
+
* - Links tasks to original decisions for traceability
|
|
12
|
+
* - Optional deprecation of original decisions
|
|
13
|
+
*
|
|
14
|
+
* Detection Heuristics:
|
|
15
|
+
* - Keys containing: task_, _task, todo_, _todo, wip_, _wip, implement_, fix_
|
|
16
|
+
* - Tags containing: task, todo, in_progress, wip, blocked, done
|
|
17
|
+
* - Values containing: TODO:, WIP:, DONE:, BLOCKED:, [ ], [x]
|
|
18
|
+
* - Status indicators in value (e.g., "Status: in_progress")
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Extract status from decision value
|
|
22
|
+
*
|
|
23
|
+
* Patterns:
|
|
24
|
+
* - "Status: in_progress"
|
|
25
|
+
* - "TODO: Description"
|
|
26
|
+
* - "WIP: Description"
|
|
27
|
+
* - "DONE: Description"
|
|
28
|
+
* - "BLOCKED: Description"
|
|
29
|
+
* - "[x] Description" (done)
|
|
30
|
+
* - "[ ] Description" (todo)
|
|
31
|
+
*/
|
|
32
|
+
function extractStatus(value) {
|
|
33
|
+
const valueLower = value.toLowerCase();
|
|
34
|
+
// Check for explicit status markers
|
|
35
|
+
if (valueLower.includes('status:')) {
|
|
36
|
+
const statusMatch = valueLower.match(/status:\s*(\w+)/);
|
|
37
|
+
if (statusMatch) {
|
|
38
|
+
const status = statusMatch[1];
|
|
39
|
+
if (status.includes('progress') || status === 'wip')
|
|
40
|
+
return 'in_progress';
|
|
41
|
+
if (status.includes('review') || status.includes('waiting'))
|
|
42
|
+
return 'waiting_review';
|
|
43
|
+
if (status === 'blocked')
|
|
44
|
+
return 'blocked';
|
|
45
|
+
if (status === 'done' || status === 'complete')
|
|
46
|
+
return 'done';
|
|
47
|
+
if (status === 'todo' || status === 'pending')
|
|
48
|
+
return 'todo';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Check for prefix markers
|
|
52
|
+
if (valueLower.startsWith('wip:') || valueLower.startsWith('in progress:'))
|
|
53
|
+
return 'in_progress';
|
|
54
|
+
if (valueLower.startsWith('done:') || valueLower.startsWith('completed:'))
|
|
55
|
+
return 'done';
|
|
56
|
+
if (valueLower.startsWith('blocked:'))
|
|
57
|
+
return 'blocked';
|
|
58
|
+
if (valueLower.startsWith('todo:') || valueLower.startsWith('pending:'))
|
|
59
|
+
return 'todo';
|
|
60
|
+
if (valueLower.startsWith('review:') || valueLower.startsWith('waiting:'))
|
|
61
|
+
return 'waiting_review';
|
|
62
|
+
// Check for markdown checkboxes
|
|
63
|
+
if (value.trim().startsWith('[x]') || value.trim().startsWith('[X]'))
|
|
64
|
+
return 'done';
|
|
65
|
+
if (value.trim().startsWith('[ ]'))
|
|
66
|
+
return 'todo';
|
|
67
|
+
// Default to todo
|
|
68
|
+
return 'todo';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extract priority from decision value or tags
|
|
72
|
+
*/
|
|
73
|
+
function extractPriority(value, tags) {
|
|
74
|
+
const valueLower = value.toLowerCase();
|
|
75
|
+
const allTags = tags.join(',').toLowerCase();
|
|
76
|
+
// Check for explicit priority markers
|
|
77
|
+
if (valueLower.includes('priority:') || valueLower.includes('p:')) {
|
|
78
|
+
if (valueLower.includes('critical') || valueLower.includes('p0') || valueLower.includes('p:0'))
|
|
79
|
+
return 'critical';
|
|
80
|
+
if (valueLower.includes('high') || valueLower.includes('p1') || valueLower.includes('p:1'))
|
|
81
|
+
return 'high';
|
|
82
|
+
if (valueLower.includes('medium') || valueLower.includes('p2') || valueLower.includes('p:2'))
|
|
83
|
+
return 'medium';
|
|
84
|
+
if (valueLower.includes('low') || valueLower.includes('p3') || valueLower.includes('p:3'))
|
|
85
|
+
return 'low';
|
|
86
|
+
}
|
|
87
|
+
// Check tags
|
|
88
|
+
if (allTags.includes('critical') || allTags.includes('urgent'))
|
|
89
|
+
return 'critical';
|
|
90
|
+
if (allTags.includes('high') || allTags.includes('important'))
|
|
91
|
+
return 'high';
|
|
92
|
+
if (allTags.includes('low'))
|
|
93
|
+
return 'low';
|
|
94
|
+
// Default to medium
|
|
95
|
+
return 'medium';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Clean task title from decision key
|
|
99
|
+
*
|
|
100
|
+
* Removes prefixes like "task_", "todo_", "wip_"
|
|
101
|
+
* Converts snake_case to Title Case
|
|
102
|
+
*/
|
|
103
|
+
function cleanTaskTitle(key) {
|
|
104
|
+
// Remove common prefixes
|
|
105
|
+
let cleaned = key
|
|
106
|
+
.replace(/^task_/i, '')
|
|
107
|
+
.replace(/^todo_/i, '')
|
|
108
|
+
.replace(/^wip_/i, '')
|
|
109
|
+
.replace(/^implement_/i, '')
|
|
110
|
+
.replace(/^fix_/i, '')
|
|
111
|
+
.replace(/_task$/i, '')
|
|
112
|
+
.replace(/_todo$/i, '');
|
|
113
|
+
// Convert snake_case to Title Case
|
|
114
|
+
cleaned = cleaned
|
|
115
|
+
.split('_')
|
|
116
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
117
|
+
.join(' ');
|
|
118
|
+
return cleaned;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Extract description from decision value
|
|
122
|
+
*
|
|
123
|
+
* Removes status prefixes and markers
|
|
124
|
+
*/
|
|
125
|
+
function extractDescription(value) {
|
|
126
|
+
let description = value;
|
|
127
|
+
// Remove status prefixes
|
|
128
|
+
description = description
|
|
129
|
+
.replace(/^(TODO|WIP|DONE|BLOCKED|REVIEW|WAITING|STATUS):\s*/i, '')
|
|
130
|
+
.replace(/^Status:\s*\w+\s*-?\s*/i, '')
|
|
131
|
+
.replace(/^\[[ xX]\]\s*/, '');
|
|
132
|
+
// Trim
|
|
133
|
+
description = description.trim();
|
|
134
|
+
return description;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Detect if a decision is task-like
|
|
138
|
+
*
|
|
139
|
+
* @param key - Decision key
|
|
140
|
+
* @param value - Decision value
|
|
141
|
+
* @param tags - Decision tags
|
|
142
|
+
* @returns Confidence score (0-100) and reasons
|
|
143
|
+
*/
|
|
144
|
+
function detectTaskLikeDecision(key, value, tags) {
|
|
145
|
+
let confidence = 0;
|
|
146
|
+
const reasons = [];
|
|
147
|
+
const keyLower = key.toLowerCase();
|
|
148
|
+
const valueLower = value.toLowerCase();
|
|
149
|
+
const allTags = tags.join(',').toLowerCase();
|
|
150
|
+
// Key pattern matching (high confidence)
|
|
151
|
+
if (keyLower.includes('task_') || keyLower.includes('_task')) {
|
|
152
|
+
confidence += 30;
|
|
153
|
+
reasons.push('Key contains "task"');
|
|
154
|
+
}
|
|
155
|
+
if (keyLower.includes('todo_') || keyLower.includes('_todo')) {
|
|
156
|
+
confidence += 30;
|
|
157
|
+
reasons.push('Key contains "todo"');
|
|
158
|
+
}
|
|
159
|
+
if (keyLower.includes('wip_') || keyLower.includes('_wip')) {
|
|
160
|
+
confidence += 25;
|
|
161
|
+
reasons.push('Key contains "wip"');
|
|
162
|
+
}
|
|
163
|
+
if (keyLower.startsWith('implement_') || keyLower.startsWith('fix_')) {
|
|
164
|
+
confidence += 20;
|
|
165
|
+
reasons.push('Key starts with "implement" or "fix"');
|
|
166
|
+
}
|
|
167
|
+
// Tag matching (high confidence)
|
|
168
|
+
if (allTags.includes('task')) {
|
|
169
|
+
confidence += 25;
|
|
170
|
+
reasons.push('Has "task" tag');
|
|
171
|
+
}
|
|
172
|
+
if (allTags.includes('todo')) {
|
|
173
|
+
confidence += 25;
|
|
174
|
+
reasons.push('Has "todo" tag');
|
|
175
|
+
}
|
|
176
|
+
if (allTags.includes('in_progress') || allTags.includes('wip')) {
|
|
177
|
+
confidence += 20;
|
|
178
|
+
reasons.push('Has "in_progress" or "wip" tag');
|
|
179
|
+
}
|
|
180
|
+
if (allTags.includes('blocked')) {
|
|
181
|
+
confidence += 20;
|
|
182
|
+
reasons.push('Has "blocked" tag');
|
|
183
|
+
}
|
|
184
|
+
if (allTags.includes('done') && allTags.includes('task')) {
|
|
185
|
+
confidence += 15;
|
|
186
|
+
reasons.push('Has both "done" and "task" tags');
|
|
187
|
+
}
|
|
188
|
+
// Value pattern matching (medium confidence)
|
|
189
|
+
if (valueLower.includes('status:')) {
|
|
190
|
+
confidence += 15;
|
|
191
|
+
reasons.push('Value contains "Status:"');
|
|
192
|
+
}
|
|
193
|
+
if (valueLower.startsWith('todo:') || valueLower.startsWith('wip:') || valueLower.startsWith('done:')) {
|
|
194
|
+
confidence += 15;
|
|
195
|
+
reasons.push('Value starts with status prefix');
|
|
196
|
+
}
|
|
197
|
+
if (value.trim().match(/^\[[ xX]\]/)) {
|
|
198
|
+
confidence += 15;
|
|
199
|
+
reasons.push('Value starts with markdown checkbox');
|
|
200
|
+
}
|
|
201
|
+
if (valueLower.includes('blocked:')) {
|
|
202
|
+
confidence += 15;
|
|
203
|
+
reasons.push('Value contains "blocked:"');
|
|
204
|
+
}
|
|
205
|
+
// Cap at 100
|
|
206
|
+
confidence = Math.min(100, confidence);
|
|
207
|
+
return { confidence, reasons };
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Detect all task-like decisions in the database
|
|
211
|
+
*
|
|
212
|
+
* @param db - Database connection
|
|
213
|
+
* @param minConfidence - Minimum confidence threshold (0-100, default: 50)
|
|
214
|
+
* @returns Array of decision-task mappings
|
|
215
|
+
*/
|
|
216
|
+
export function detectTaskLikeDecisions(db, minConfidence = 50) {
|
|
217
|
+
const mappings = [];
|
|
218
|
+
try {
|
|
219
|
+
// Query all active decisions with their tags and layers
|
|
220
|
+
const decisions = db.prepare(`
|
|
221
|
+
SELECT
|
|
222
|
+
ck.key as decision_key,
|
|
223
|
+
d.value,
|
|
224
|
+
l.name as layer,
|
|
225
|
+
d.agent_id,
|
|
226
|
+
a.name as agent_name,
|
|
227
|
+
GROUP_CONCAT(t.name, ',') as tags
|
|
228
|
+
FROM t_decisions d
|
|
229
|
+
JOIN m_context_keys ck ON d.key_id = ck.id
|
|
230
|
+
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
231
|
+
LEFT JOIN m_agents a ON d.agent_id = a.id
|
|
232
|
+
LEFT JOIN t_decision_tags dt ON d.key_id = dt.decision_key_id
|
|
233
|
+
LEFT JOIN m_tags t ON dt.tag_id = t.id
|
|
234
|
+
WHERE d.status = 1 -- active only
|
|
235
|
+
GROUP BY ck.key
|
|
236
|
+
`).all();
|
|
237
|
+
for (const decision of decisions) {
|
|
238
|
+
const tags = decision.tags ? decision.tags.split(',').filter(t => t.trim()) : [];
|
|
239
|
+
// Detect if task-like
|
|
240
|
+
const { confidence, reasons } = detectTaskLikeDecision(decision.decision_key, decision.value, tags);
|
|
241
|
+
if (confidence >= minConfidence) {
|
|
242
|
+
const mapping = {
|
|
243
|
+
decisionKey: decision.decision_key,
|
|
244
|
+
taskTitle: cleanTaskTitle(decision.decision_key),
|
|
245
|
+
description: extractDescription(decision.value),
|
|
246
|
+
status: extractStatus(decision.value),
|
|
247
|
+
priority: extractPriority(decision.value, tags),
|
|
248
|
+
tags: tags.filter(t => !['task', 'todo', 'wip', 'in_progress', 'blocked', 'done'].includes(t.toLowerCase())),
|
|
249
|
+
layer: decision.layer,
|
|
250
|
+
assignee: decision.agent_name,
|
|
251
|
+
confidence,
|
|
252
|
+
detectionReasons: reasons,
|
|
253
|
+
};
|
|
254
|
+
mappings.push(mapping);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Sort by confidence (highest first)
|
|
258
|
+
mappings.sort((a, b) => b.confidence - a.confidence);
|
|
259
|
+
return mappings;
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
263
|
+
throw new Error(`Failed to detect task-like decisions: ${message}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Migrate decisions to tasks
|
|
268
|
+
*
|
|
269
|
+
* @param db - Database connection
|
|
270
|
+
* @param dryRun - If true, only preview without executing (default: true)
|
|
271
|
+
* @param minConfidence - Minimum confidence threshold (default: 50)
|
|
272
|
+
* @param deprecateOriginal - If true, mark original decisions as deprecated (default: false)
|
|
273
|
+
* @returns Migration result with mappings
|
|
274
|
+
*/
|
|
275
|
+
export function migrateDecisionsToTasks(db, dryRun = true, minConfidence = 50, deprecateOriginal = false) {
|
|
276
|
+
const details = [];
|
|
277
|
+
try {
|
|
278
|
+
// Detect task-like decisions
|
|
279
|
+
const mappings = detectTaskLikeDecisions(db, minConfidence);
|
|
280
|
+
if (mappings.length === 0) {
|
|
281
|
+
return {
|
|
282
|
+
success: true,
|
|
283
|
+
message: 'No task-like decisions detected',
|
|
284
|
+
details: [`Minimum confidence threshold: ${minConfidence}%`],
|
|
285
|
+
mappings: [],
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
details.push(`Detected ${mappings.length} task-like decisions (confidence ≥ ${minConfidence}%)`);
|
|
289
|
+
if (dryRun) {
|
|
290
|
+
details.push('DRY-RUN MODE: No changes will be made');
|
|
291
|
+
details.push('');
|
|
292
|
+
details.push('Migration preview:');
|
|
293
|
+
mappings.forEach((mapping, i) => {
|
|
294
|
+
details.push('');
|
|
295
|
+
details.push(`${i + 1}. Decision: ${mapping.decisionKey} (${mapping.confidence}% confidence)`);
|
|
296
|
+
details.push(` → Task: ${mapping.taskTitle}`);
|
|
297
|
+
details.push(` → Status: ${mapping.status}`);
|
|
298
|
+
details.push(` → Priority: ${mapping.priority}`);
|
|
299
|
+
if (mapping.tags.length > 0) {
|
|
300
|
+
details.push(` → Tags: ${mapping.tags.join(', ')}`);
|
|
301
|
+
}
|
|
302
|
+
if (mapping.layer) {
|
|
303
|
+
details.push(` → Layer: ${mapping.layer}`);
|
|
304
|
+
}
|
|
305
|
+
if (mapping.assignee) {
|
|
306
|
+
details.push(` → Assignee: ${mapping.assignee}`);
|
|
307
|
+
}
|
|
308
|
+
details.push(` → Detection reasons: ${mapping.detectionReasons.join(', ')}`);
|
|
309
|
+
});
|
|
310
|
+
return {
|
|
311
|
+
success: true,
|
|
312
|
+
message: `Dry-run complete: ${mappings.length} decisions would be migrated`,
|
|
313
|
+
details,
|
|
314
|
+
mappings,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
// Execute migration in transaction
|
|
318
|
+
db.exec('BEGIN TRANSACTION');
|
|
319
|
+
try {
|
|
320
|
+
const createdTasks = [];
|
|
321
|
+
for (const mapping of mappings) {
|
|
322
|
+
// 1. Get IDs for foreign keys
|
|
323
|
+
const statusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get(mapping.status);
|
|
324
|
+
if (!statusId) {
|
|
325
|
+
throw new Error(`Invalid status: ${mapping.status}`);
|
|
326
|
+
}
|
|
327
|
+
let layerId = null;
|
|
328
|
+
if (mapping.layer) {
|
|
329
|
+
const layer = db.prepare('SELECT id FROM m_layers WHERE name = ?').get(mapping.layer);
|
|
330
|
+
layerId = layer ? layer.id : null;
|
|
331
|
+
}
|
|
332
|
+
let assigneeId = null;
|
|
333
|
+
if (mapping.assignee) {
|
|
334
|
+
const agent = db.prepare('SELECT id FROM m_agents WHERE name = ?').get(mapping.assignee);
|
|
335
|
+
assigneeId = agent ? agent.id : null;
|
|
336
|
+
}
|
|
337
|
+
// Priority mapping
|
|
338
|
+
const priorityMap = {
|
|
339
|
+
low: 1,
|
|
340
|
+
medium: 2,
|
|
341
|
+
high: 3,
|
|
342
|
+
critical: 4,
|
|
343
|
+
};
|
|
344
|
+
const priority = priorityMap[mapping.priority] || 2;
|
|
345
|
+
// 2. Insert task
|
|
346
|
+
const taskResult = db.prepare(`
|
|
347
|
+
INSERT INTO t_tasks (title, status_id, priority, assigned_agent_id, layer_id, created_ts, updated_ts)
|
|
348
|
+
VALUES (?, ?, ?, ?, ?, unixepoch(), unixepoch())
|
|
349
|
+
`).run(mapping.taskTitle, statusId.id, priority, assigneeId, layerId);
|
|
350
|
+
const taskId = taskResult.lastInsertRowid;
|
|
351
|
+
createdTasks.push(taskId);
|
|
352
|
+
// 3. Insert task details (description)
|
|
353
|
+
db.prepare(`
|
|
354
|
+
INSERT INTO t_task_details (task_id, description)
|
|
355
|
+
VALUES (?, ?)
|
|
356
|
+
`).run(taskId, mapping.description);
|
|
357
|
+
// 4. Insert task tags
|
|
358
|
+
for (const tagName of mapping.tags) {
|
|
359
|
+
// Get or create tag
|
|
360
|
+
db.prepare('INSERT OR IGNORE INTO m_tags (name) VALUES (?)').run(tagName);
|
|
361
|
+
const tag = db.prepare('SELECT id FROM m_tags WHERE name = ?').get(tagName);
|
|
362
|
+
db.prepare(`
|
|
363
|
+
INSERT INTO t_task_tags (task_id, tag_id)
|
|
364
|
+
VALUES (?, ?)
|
|
365
|
+
`).run(taskId, tag.id);
|
|
366
|
+
}
|
|
367
|
+
// 5. Link task to original decision
|
|
368
|
+
const decisionKey = db.prepare('SELECT id FROM m_context_keys WHERE key = ?').get(mapping.decisionKey);
|
|
369
|
+
if (decisionKey) {
|
|
370
|
+
db.prepare(`
|
|
371
|
+
INSERT INTO t_task_decision_links (task_id, decision_key_id)
|
|
372
|
+
VALUES (?, ?)
|
|
373
|
+
`).run(taskId, decisionKey.id);
|
|
374
|
+
}
|
|
375
|
+
details.push(`✓ Created task ${taskId}: ${mapping.taskTitle} (from decision: ${mapping.decisionKey})`);
|
|
376
|
+
// 6. Optionally deprecate original decision
|
|
377
|
+
if (deprecateOriginal && decisionKey) {
|
|
378
|
+
db.prepare(`
|
|
379
|
+
UPDATE t_decisions
|
|
380
|
+
SET status = 2 -- deprecated
|
|
381
|
+
WHERE key_id = ?
|
|
382
|
+
`).run(decisionKey.id);
|
|
383
|
+
details.push(` → Deprecated original decision: ${mapping.decisionKey}`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
db.exec('COMMIT');
|
|
387
|
+
return {
|
|
388
|
+
success: true,
|
|
389
|
+
message: `Successfully migrated ${createdTasks.length} decisions to tasks`,
|
|
390
|
+
details,
|
|
391
|
+
mappings,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
db.exec('ROLLBACK');
|
|
396
|
+
throw error;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
401
|
+
return {
|
|
402
|
+
success: false,
|
|
403
|
+
message: `Migration failed: ${message}`,
|
|
404
|
+
details,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Get migration info
|
|
410
|
+
*/
|
|
411
|
+
export function getMigrationInfo() {
|
|
412
|
+
return `
|
|
413
|
+
Migration: Convert Task-Like Decisions to Tasks
|
|
414
|
+
|
|
415
|
+
This migration detects decisions being used for task/todo tracking
|
|
416
|
+
and migrates them to the dedicated task management system.
|
|
417
|
+
|
|
418
|
+
Detection Heuristics:
|
|
419
|
+
- Keys containing: task_, _task, todo_, _todo, wip_, _wip, implement_, fix_
|
|
420
|
+
- Tags containing: task, todo, in_progress, wip, blocked, done
|
|
421
|
+
- Values containing: TODO:, WIP:, DONE:, BLOCKED:, Status:, [ ], [x]
|
|
422
|
+
|
|
423
|
+
Features:
|
|
424
|
+
- Dry-run mode to preview before executing
|
|
425
|
+
- Confidence scoring (0-100%) for each detection
|
|
426
|
+
- Links tasks to original decisions for traceability
|
|
427
|
+
- Optional deprecation of original decisions
|
|
428
|
+
- Adjustable confidence threshold
|
|
429
|
+
|
|
430
|
+
Usage:
|
|
431
|
+
1. Dry-run: migrateDecisionsToTasks(db, true, 50, false)
|
|
432
|
+
2. Execute: migrateDecisionsToTasks(db, false, 70, true)
|
|
433
|
+
- minConfidence=70: Only migrate high-confidence detections
|
|
434
|
+
- deprecateOriginal=true: Mark original decisions as deprecated
|
|
435
|
+
|
|
436
|
+
This migration is safe and reversible via:
|
|
437
|
+
- Original decisions remain linked to tasks
|
|
438
|
+
- Can be re-run with different confidence thresholds
|
|
439
|
+
- Hard-delete function available for manual cleanup
|
|
440
|
+
`.trim();
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=migrate-decisions-to-tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-decisions-to-tasks.js","sourceRoot":"","sources":["../../src/migrations/migrate-decisions-to-tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAyBnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAwBA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAyBnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAwBA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA6GA"}
|
package/dist/schema.js
CHANGED
|
@@ -100,15 +100,18 @@ export function verifySchemaIntegrity(db) {
|
|
|
100
100
|
};
|
|
101
101
|
const requiredTables = [
|
|
102
102
|
'm_agents', 'm_files', 'm_context_keys', 'm_constraint_categories',
|
|
103
|
-
'm_layers', 'm_tags', 'm_scopes', 'm_config',
|
|
103
|
+
'm_layers', 'm_tags', 'm_scopes', 'm_config', 'm_task_statuses',
|
|
104
104
|
't_decisions', 't_decisions_numeric', 't_decision_history',
|
|
105
105
|
't_decision_tags', 't_decision_scopes',
|
|
106
106
|
't_agent_messages', 't_file_changes', 't_constraints', 't_constraint_tags',
|
|
107
107
|
't_activity_log', 't_decision_templates',
|
|
108
|
+
't_tasks', 't_task_details', 't_task_tags', 't_task_decision_links',
|
|
109
|
+
't_task_constraint_links', 't_task_file_links',
|
|
108
110
|
];
|
|
109
111
|
const requiredViews = [
|
|
110
112
|
'v_tagged_decisions', 'v_active_context', 'v_layer_summary',
|
|
111
113
|
'v_unread_messages_by_priority', 'v_recent_file_changes', 'v_tagged_constraints',
|
|
114
|
+
'v_task_board',
|
|
112
115
|
];
|
|
113
116
|
const requiredTriggers = [
|
|
114
117
|
'trg_record_decision_history',
|
|
@@ -116,6 +119,9 @@ export function verifySchemaIntegrity(db) {
|
|
|
116
119
|
'trg_log_decision_update',
|
|
117
120
|
'trg_log_message_send',
|
|
118
121
|
'trg_log_file_record',
|
|
122
|
+
'trg_log_task_create',
|
|
123
|
+
'trg_log_task_status_change',
|
|
124
|
+
'trg_update_task_timestamp',
|
|
119
125
|
];
|
|
120
126
|
try {
|
|
121
127
|
// Check tables
|
|
@@ -159,8 +165,13 @@ export function verifySchemaIntegrity(db) {
|
|
|
159
165
|
result.valid = false;
|
|
160
166
|
}
|
|
161
167
|
const configCount = db.prepare('SELECT COUNT(*) as count FROM m_config').get().count;
|
|
162
|
-
if (configCount <
|
|
163
|
-
result.errors.push(`Expected
|
|
168
|
+
if (configCount < 6) {
|
|
169
|
+
result.errors.push(`Expected 6 m_config entries, found ${configCount}`);
|
|
170
|
+
result.valid = false;
|
|
171
|
+
}
|
|
172
|
+
const taskStatusCount = db.prepare('SELECT COUNT(*) as count FROM m_task_statuses').get().count;
|
|
173
|
+
if (taskStatusCount < 6) {
|
|
174
|
+
result.errors.push(`Expected 6 task statuses, found ${taskStatusCount}`);
|
|
164
175
|
result.valid = false;
|
|
165
176
|
}
|
|
166
177
|
}
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* Handles constraint tracking with priority, layer assignment, and tags
|
|
4
4
|
*/
|
|
5
5
|
import type { AddConstraintParams, AddConstraintResponse, GetConstraintsParams, GetConstraintsResponse, DeactivateConstraintParams, DeactivateConstraintResponse } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get or create constraint category ID
|
|
8
|
+
* Uses INSERT OR IGNORE for idempotent operation
|
|
9
|
+
*/
|
|
6
10
|
/**
|
|
7
11
|
* Add a constraint with priority, layer, and tags
|
|
8
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAI7B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,CAoEhF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,sBAAsB,CAmEnF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,4BAA4B,CA0BrG"}
|
|
@@ -2,32 +2,13 @@
|
|
|
2
2
|
* Constraint management tools for MCP Shared Context Server
|
|
3
3
|
* Handles constraint tracking with priority, layer assignment, and tags
|
|
4
4
|
*/
|
|
5
|
-
import { getDatabase, getOrCreateAgent, getLayerId, transaction, getOrCreateTag } from '../database.js';
|
|
5
|
+
import { getDatabase, getOrCreateAgent, getLayerId, transaction, getOrCreateTag, getOrCreateCategoryId } from '../database.js';
|
|
6
6
|
import { STRING_TO_PRIORITY, DEFAULT_PRIORITY, SQLITE_TRUE, SQLITE_FALSE } from '../constants.js';
|
|
7
|
-
|
|
8
|
-
* Validate constraint category (must be one of predefined)
|
|
9
|
-
* Categories: performance, architecture, security
|
|
10
|
-
*/
|
|
11
|
-
function validateCategory(category) {
|
|
12
|
-
const validCategories = ['performance', 'architecture', 'security'];
|
|
13
|
-
if (!validCategories.includes(category)) {
|
|
14
|
-
throw new Error(`Invalid category. Must be one of: ${validCategories.join(', ')}`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
7
|
+
import { validateCategory, validatePriority } from '../utils/validators.js';
|
|
17
8
|
/**
|
|
18
9
|
* Get or create constraint category ID
|
|
19
10
|
* Uses INSERT OR IGNORE for idempotent operation
|
|
20
11
|
*/
|
|
21
|
-
function getOrCreateCategoryId(db, category) {
|
|
22
|
-
// Insert if doesn't exist
|
|
23
|
-
db.prepare('INSERT OR IGNORE INTO m_constraint_categories (name) VALUES (?)').run(category);
|
|
24
|
-
// Get the ID
|
|
25
|
-
const result = db.prepare('SELECT id FROM m_constraint_categories WHERE name = ?').get(category);
|
|
26
|
-
if (!result) {
|
|
27
|
-
throw new Error(`Failed to get or create category: ${category}`);
|
|
28
|
-
}
|
|
29
|
-
return result.id;
|
|
30
|
-
}
|
|
31
12
|
/**
|
|
32
13
|
* Add a constraint with priority, layer, and tags
|
|
33
14
|
*
|
|
@@ -45,9 +26,7 @@ export function addConstraint(params) {
|
|
|
45
26
|
validateCategory(params.category);
|
|
46
27
|
// Validate priority if provided
|
|
47
28
|
const priorityStr = params.priority || 'medium';
|
|
48
|
-
|
|
49
|
-
throw new Error('Invalid priority. Must be: low, medium, high, or critical');
|
|
50
|
-
}
|
|
29
|
+
validatePriority(priorityStr);
|
|
51
30
|
const priority = STRING_TO_PRIORITY[priorityStr] || DEFAULT_PRIORITY;
|
|
52
31
|
// Validate and get layer ID if provided
|
|
53
32
|
let layerId = null;
|
|
@@ -69,9 +48,9 @@ export function addConstraint(params) {
|
|
|
69
48
|
const createdBy = params.created_by || 'system';
|
|
70
49
|
const agentId = getOrCreateAgent(db, createdBy);
|
|
71
50
|
// Insert constraint
|
|
72
|
-
const insertResult = db.prepare(`
|
|
73
|
-
INSERT INTO t_constraints (category_id, layer_id, constraint_text, priority, active, created_by, ts)
|
|
74
|
-
VALUES (?, ?, ?, ?, ?, ?, unixepoch())
|
|
51
|
+
const insertResult = db.prepare(`
|
|
52
|
+
INSERT INTO t_constraints (category_id, layer_id, constraint_text, priority, active, created_by, ts)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, unixepoch())
|
|
75
54
|
`).run(categoryId, layerId, params.constraint_text, priority, SQLITE_TRUE, agentId);
|
|
76
55
|
const constraintId = insertResult.lastInsertRowid;
|
|
77
56
|
// Insert m_tags if provided
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"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"}
|