sqlew 2.1.4 → 3.1.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +891 -605
  2. package/LICENSE +49 -18
  3. package/README.md +337 -690
  4. package/assets/kanban-style.png +0 -0
  5. package/assets/schema.sql +532 -402
  6. package/dist/database.d.ts +9 -0
  7. package/dist/database.d.ts.map +1 -1
  8. package/dist/database.js +33 -34
  9. package/dist/database.js.map +1 -1
  10. package/dist/index.js +1050 -215
  11. package/dist/index.js.map +1 -1
  12. package/dist/migrations/add-task-tables.d.ts +47 -0
  13. package/dist/migrations/add-task-tables.d.ts.map +1 -0
  14. package/dist/migrations/add-task-tables.js +285 -0
  15. package/dist/migrations/add-task-tables.js.map +1 -0
  16. package/dist/migrations/index.d.ts +96 -0
  17. package/dist/migrations/index.d.ts.map +1 -0
  18. package/dist/migrations/index.js +239 -0
  19. package/dist/migrations/index.js.map +1 -0
  20. package/dist/migrations/migrate-decisions-to-tasks.d.ts +61 -0
  21. package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +1 -0
  22. package/dist/migrations/migrate-decisions-to-tasks.js +442 -0
  23. package/dist/migrations/migrate-decisions-to-tasks.js.map +1 -0
  24. package/dist/schema.d.ts.map +1 -1
  25. package/dist/schema.js +14 -3
  26. package/dist/schema.js.map +1 -1
  27. package/dist/tools/constraints.d.ts +4 -0
  28. package/dist/tools/constraints.d.ts.map +1 -1
  29. package/dist/tools/constraints.js +6 -27
  30. package/dist/tools/constraints.js.map +1 -1
  31. package/dist/tools/context.d.ts +17 -1
  32. package/dist/tools/context.d.ts.map +1 -1
  33. package/dist/tools/context.js +195 -190
  34. package/dist/tools/context.js.map +1 -1
  35. package/dist/tools/files.d.ts.map +1 -1
  36. package/dist/tools/files.js +113 -166
  37. package/dist/tools/files.js.map +1 -1
  38. package/dist/tools/messaging.d.ts +2 -9
  39. package/dist/tools/messaging.d.ts.map +1 -1
  40. package/dist/tools/messaging.js +67 -126
  41. package/dist/tools/messaging.js.map +1 -1
  42. package/dist/tools/tasks.d.ts +90 -0
  43. package/dist/tools/tasks.d.ts.map +1 -0
  44. package/dist/tools/tasks.js +844 -0
  45. package/dist/tools/tasks.js.map +1 -0
  46. package/dist/tools/utils.d.ts +8 -1
  47. package/dist/tools/utils.d.ts.map +1 -1
  48. package/dist/tools/utils.js +50 -21
  49. package/dist/tools/utils.js.map +1 -1
  50. package/dist/types.d.ts +29 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/utils/batch.d.ts +69 -0
  53. package/dist/utils/batch.d.ts.map +1 -0
  54. package/dist/utils/batch.js +148 -0
  55. package/dist/utils/batch.js.map +1 -0
  56. package/dist/utils/query-builder.d.ts +68 -0
  57. package/dist/utils/query-builder.d.ts.map +1 -0
  58. package/dist/utils/query-builder.js +116 -0
  59. package/dist/utils/query-builder.js.map +1 -0
  60. package/dist/utils/task-stale-detection.d.ts +28 -0
  61. package/dist/utils/task-stale-detection.d.ts.map +1 -0
  62. package/dist/utils/task-stale-detection.js +92 -0
  63. package/dist/utils/task-stale-detection.js.map +1 -0
  64. package/dist/utils/validators.d.ts +57 -0
  65. package/dist/utils/validators.d.ts.map +1 -0
  66. package/dist/utils/validators.js +117 -0
  67. package/dist/utils/validators.js.map +1 -0
  68. package/dist/watcher/file-watcher.d.ts +75 -0
  69. package/dist/watcher/file-watcher.d.ts.map +1 -0
  70. package/dist/watcher/file-watcher.js +374 -0
  71. package/dist/watcher/file-watcher.js.map +1 -0
  72. package/dist/watcher/index.d.ts +8 -0
  73. package/dist/watcher/index.d.ts.map +1 -0
  74. package/dist/watcher/index.js +7 -0
  75. package/dist/watcher/index.js.map +1 -0
  76. package/dist/watcher/test-executor.d.ts +23 -0
  77. package/dist/watcher/test-executor.d.ts.map +1 -0
  78. package/dist/watcher/test-executor.js +226 -0
  79. package/dist/watcher/test-executor.js.map +1 -0
  80. package/docs/ACCEPTANCE_CRITERIA.md +625 -0
  81. package/docs/AI_AGENT_GUIDE.md +1471 -648
  82. package/{ARCHITECTURE.md → docs/ARCHITECTURE.md} +636 -636
  83. package/docs/AUTO_FILE_TRACKING.md +436 -0
  84. package/docs/BEST_PRACTICES.md +481 -0
  85. package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +457 -0
  86. package/docs/MIGRATION_CHAIN.md +280 -0
  87. package/{MIGRATION_v2.md → docs/MIGRATION_v2.md} +538 -538
  88. package/docs/SHARED_CONCEPTS.md +339 -0
  89. package/docs/TASK_ACTIONS.md +854 -0
  90. package/docs/TASK_LINKING.md +729 -0
  91. package/docs/TASK_MIGRATION.md +701 -0
  92. package/docs/TASK_OVERVIEW.md +363 -0
  93. package/docs/TASK_SYSTEM.md +1244 -0
  94. package/docs/TOOL_REFERENCE.md +471 -0
  95. package/docs/TOOL_SELECTION.md +279 -0
  96. package/docs/WORKFLOWS.md +602 -0
  97. package/package.json +65 -64
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Migration Orchestrator
3
+ *
4
+ * Coordinates automatic sequential execution of all database migrations.
5
+ * Supports upgrading from any previous version to the latest version in a single run.
6
+ *
7
+ * Features:
8
+ * - Automatic version detection
9
+ * - Migration chain construction
10
+ * - Sequential execution with transaction safety
11
+ * - Detailed logging and error reporting
12
+ * - Dry-run mode support
13
+ */
14
+ import * as tablePrefixes from './add-table-prefixes.js';
15
+ import * as v210Features from './add-v2.1.0-features.js';
16
+ import * as taskTables from './add-task-tables.js';
17
+ /**
18
+ * Registry of all available migrations in execution order
19
+ */
20
+ const MIGRATIONS = [
21
+ {
22
+ name: 'add-table-prefixes',
23
+ fromVersion: '1.0.x',
24
+ toVersion: '1.1.0',
25
+ needsMigration: tablePrefixes.needsMigration,
26
+ runMigration: tablePrefixes.runMigration,
27
+ getMigrationInfo: tablePrefixes.getMigrationInfo,
28
+ },
29
+ {
30
+ name: 'add-v2.1.0-features',
31
+ fromVersion: '2.0.0',
32
+ toVersion: '2.1.0',
33
+ needsMigration: v210Features.needsMigration,
34
+ runMigration: v210Features.runMigration,
35
+ getMigrationInfo: v210Features.getMigrationInfo,
36
+ },
37
+ {
38
+ name: 'add-task-tables',
39
+ fromVersion: '2.1.x',
40
+ toVersion: '3.0.0',
41
+ needsMigration: taskTables.needsMigration,
42
+ runMigration: taskTables.runMigration,
43
+ getMigrationInfo: taskTables.getMigrationInfo,
44
+ },
45
+ ];
46
+ /**
47
+ * Detect current database version by inspecting schema
48
+ *
49
+ * Version Detection Logic:
50
+ * - v1.0.0: Has unprefixed tables (agents, not m_agents)
51
+ * - v1.1.0: Has prefixed tables but no t_activity_log
52
+ * - v2.0.0: Has t_activity_log but no m_task_statuses
53
+ * - v2.1.0: Has t_activity_log but no m_task_statuses
54
+ * - v3.0.0: Has m_task_statuses
55
+ *
56
+ * @param db - Database connection
57
+ * @returns Detected version string
58
+ */
59
+ export function detectDatabaseVersion(db) {
60
+ try {
61
+ // Check for task tables (v3.0.0)
62
+ const hasTaskTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_task_statuses'").get();
63
+ if (hasTaskTables) {
64
+ return '3.0.0';
65
+ }
66
+ // Check for v2.1.0 features (activity log)
67
+ const hasActivityLog = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_activity_log'").get();
68
+ if (hasActivityLog) {
69
+ return '2.1.x';
70
+ }
71
+ // Check for prefixed tables (v1.1.0+)
72
+ const hasPrefixedTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_agents'").get();
73
+ if (hasPrefixedTables) {
74
+ return '2.0.0'; // Could be 1.1.0 or 2.0.0, both have same schema
75
+ }
76
+ // Check for old unprefixed tables (v1.0.0)
77
+ const hasOldTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='agents'").get();
78
+ if (hasOldTables) {
79
+ return '1.0.0';
80
+ }
81
+ // No tables found - fresh database
82
+ return 'fresh';
83
+ }
84
+ catch (error) {
85
+ const message = error instanceof Error ? error.message : String(error);
86
+ throw new Error(`Failed to detect database version: ${message}`);
87
+ }
88
+ }
89
+ /**
90
+ * Get migration plan for current database
91
+ *
92
+ * @param db - Database connection
93
+ * @returns Array of migration names that need to run
94
+ */
95
+ export function getMigrationPlan(db) {
96
+ const plan = [];
97
+ for (const migration of MIGRATIONS) {
98
+ if (migration.needsMigration(db)) {
99
+ plan.push(`${migration.name} (${migration.fromVersion} → ${migration.toVersion})`);
100
+ }
101
+ }
102
+ return plan;
103
+ }
104
+ /**
105
+ * Run all pending migrations in sequence
106
+ *
107
+ * This function:
108
+ * 1. Detects current database version
109
+ * 2. Identifies which migrations are needed
110
+ * 3. Executes migrations in correct order
111
+ * 4. Stops on first failure (rollback already handled by individual migrations)
112
+ * 5. Returns combined results
113
+ *
114
+ * @param db - Database connection
115
+ * @param dryRun - If true, only show plan without executing (default: false)
116
+ * @returns Array of migration results
117
+ */
118
+ export function runAllMigrations(db, dryRun = false) {
119
+ const results = [];
120
+ try {
121
+ // Detect current version
122
+ const currentVersion = detectDatabaseVersion(db);
123
+ console.log(`\n📊 Current database version: ${currentVersion}`);
124
+ // Get migration plan
125
+ const plan = getMigrationPlan(db);
126
+ if (plan.length === 0) {
127
+ console.log('✅ Database is up to date, no migrations needed.\n');
128
+ return [{
129
+ success: true,
130
+ message: 'No migrations needed',
131
+ details: [`Current version: ${currentVersion}`]
132
+ }];
133
+ }
134
+ console.log(`\n📋 Migration plan (${plan.length} migration${plan.length === 1 ? '' : 's'}):`);
135
+ plan.forEach((step, i) => {
136
+ console.log(` ${i + 1}. ${step}`);
137
+ });
138
+ if (dryRun) {
139
+ console.log('\n🏃 Dry-run mode: No changes will be made.\n');
140
+ return [{
141
+ success: true,
142
+ message: 'Dry-run completed',
143
+ details: plan
144
+ }];
145
+ }
146
+ console.log('');
147
+ // Execute migrations in sequence
148
+ for (const migration of MIGRATIONS) {
149
+ if (!migration.needsMigration(db)) {
150
+ continue;
151
+ }
152
+ console.log(`\n🔄 Running migration: ${migration.name}`);
153
+ console.log(` ${migration.fromVersion} → ${migration.toVersion}`);
154
+ const result = migration.runMigration(db);
155
+ results.push(result);
156
+ if (result.success) {
157
+ console.log(`✅ ${result.message}`);
158
+ if (result.details && result.details.length > 0) {
159
+ result.details.forEach(detail => {
160
+ console.log(` - ${detail}`);
161
+ });
162
+ }
163
+ }
164
+ else {
165
+ console.error(`❌ ${result.message}`);
166
+ if (result.details && result.details.length > 0) {
167
+ result.details.forEach(detail => {
168
+ console.error(` - ${detail}`);
169
+ });
170
+ }
171
+ // Stop on first failure
172
+ console.error('\n⚠️ Migration failed. Database rolled back to previous state.\n');
173
+ break;
174
+ }
175
+ }
176
+ // Detect final version
177
+ const finalVersion = detectDatabaseVersion(db);
178
+ console.log(`\n✅ Migration complete: ${currentVersion} → ${finalVersion}\n`);
179
+ return results;
180
+ }
181
+ catch (error) {
182
+ const message = error instanceof Error ? error.message : String(error);
183
+ return [{
184
+ success: false,
185
+ message: `Migration orchestrator failed: ${message}`,
186
+ }];
187
+ }
188
+ }
189
+ /**
190
+ * Get detailed info about a specific migration
191
+ *
192
+ * @param migrationName - Name of the migration
193
+ * @returns Migration info text or null if not found
194
+ */
195
+ export function getMigrationDetails(migrationName) {
196
+ const migration = MIGRATIONS.find(m => m.name === migrationName);
197
+ if (!migration) {
198
+ return null;
199
+ }
200
+ return migration.getMigrationInfo();
201
+ }
202
+ /**
203
+ * Get list of all available migrations
204
+ *
205
+ * @returns Array of migration info objects
206
+ */
207
+ export function listAllMigrations() {
208
+ return MIGRATIONS.map(m => ({
209
+ name: m.name,
210
+ fromVersion: m.fromVersion,
211
+ toVersion: m.toVersion,
212
+ }));
213
+ }
214
+ /**
215
+ * Check if database needs any migrations
216
+ *
217
+ * @param db - Database connection
218
+ * @returns true if migrations are needed
219
+ */
220
+ export function needsAnyMigrations(db) {
221
+ return MIGRATIONS.some(m => m.needsMigration(db));
222
+ }
223
+ /**
224
+ * Get summary of migration status
225
+ *
226
+ * @param db - Database connection
227
+ * @returns Summary object
228
+ */
229
+ export function getMigrationStatus(db) {
230
+ const currentVersion = detectDatabaseVersion(db);
231
+ const plan = getMigrationPlan(db);
232
+ return {
233
+ currentVersion,
234
+ upToDate: plan.length === 0,
235
+ pendingMigrations: plan.length,
236
+ migrationPlan: plan,
237
+ };
238
+ }
239
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
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
+ import { Database } from 'better-sqlite3';
21
+ export interface DecisionTaskMapping {
22
+ decisionKey: string;
23
+ taskTitle: string;
24
+ description: string;
25
+ status: string;
26
+ priority: string;
27
+ tags: string[];
28
+ layer: string | null;
29
+ assignee: string | null;
30
+ confidence: number;
31
+ detectionReasons: string[];
32
+ }
33
+ export interface MigrationResult {
34
+ success: boolean;
35
+ message: string;
36
+ details?: string[];
37
+ mappings?: DecisionTaskMapping[];
38
+ }
39
+ /**
40
+ * Detect all task-like decisions in the database
41
+ *
42
+ * @param db - Database connection
43
+ * @param minConfidence - Minimum confidence threshold (0-100, default: 50)
44
+ * @returns Array of decision-task mappings
45
+ */
46
+ export declare function detectTaskLikeDecisions(db: Database, minConfidence?: number): DecisionTaskMapping[];
47
+ /**
48
+ * Migrate decisions to tasks
49
+ *
50
+ * @param db - Database connection
51
+ * @param dryRun - If true, only preview without executing (default: true)
52
+ * @param minConfidence - Minimum confidence threshold (default: 50)
53
+ * @param deprecateOriginal - If true, mark original decisions as deprecated (default: false)
54
+ * @returns Migration result with mappings
55
+ */
56
+ export declare function migrateDecisionsToTasks(db: Database, dryRun?: boolean, minConfidence?: number, deprecateOriginal?: boolean): MigrationResult;
57
+ /**
58
+ * Get migration info
59
+ */
60
+ export declare function getMigrationInfo(): string;
61
+ //# sourceMappingURL=migrate-decisions-to-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-decisions-to-tasks.d.ts","sourceRoot":"","sources":["../../src/migrations/migrate-decisions-to-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAuMD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,EACZ,aAAa,GAAE,MAAW,GACzB,mBAAmB,EAAE,CAmEvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,EACZ,MAAM,GAAE,OAAc,EACtB,aAAa,GAAE,MAAW,EAC1B,iBAAiB,GAAE,OAAe,GACjC,eAAe,CA2JjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA8BzC"}