sqlew 3.6.1 → 3.6.3
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 +65 -0
- package/assets/config.example.toml +28 -0
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +15 -3
- package/dist/knexfile.js.map +1 -1
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/migrations/knex/{20251025020452_create_master_tables.js → bootstrap/20251025020452_create_master_tables.js} +15 -12
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/migrations/knex/{20251025021152_create_transaction_tables.js → bootstrap/20251025021152_create_transaction_tables.js} +19 -19
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js +93 -0
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js +64 -0
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +13 -0
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +70 -0
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +11 -0
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +36 -0
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +14 -0
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +84 -0
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +9 -0
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +37 -0
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +9 -0
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +41 -0
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +9 -0
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +36 -0
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +10 -0
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +28 -0
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
- package/dist/tests/migrations/test-all-versions-real.d.ts +8 -0
- package/dist/tests/migrations/test-all-versions-real.d.ts.map +1 -0
- package/dist/tests/migrations/test-all-versions-real.js +234 -0
- package/dist/tests/migrations/test-all-versions-real.js.map +1 -0
- package/dist/tests/migrations/test-all-versions.d.ts +14 -0
- package/dist/tests/migrations/test-all-versions.d.ts.map +1 -0
- package/dist/tests/migrations/test-all-versions.js +521 -0
- package/dist/tests/migrations/test-all-versions.js.map +1 -0
- package/dist/tools/tasks.js +2 -2
- package/dist/tools/tasks.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +79 -4
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/docs/MIGRATION_CHAIN.md +13 -0
- package/package.json +4 -1
- package/dist/migrations/add-decision-context.d.ts +0 -28
- package/dist/migrations/add-decision-context.d.ts.map +0 -1
- package/dist/migrations/add-decision-context.js +0 -125
- package/dist/migrations/add-decision-context.js.map +0 -1
- package/dist/migrations/add-help-system-tables.d.ts +0 -35
- package/dist/migrations/add-help-system-tables.d.ts.map +0 -1
- package/dist/migrations/add-help-system-tables.js +0 -206
- package/dist/migrations/add-help-system-tables.js.map +0 -1
- package/dist/migrations/add-table-prefixes.d.ts +0 -29
- package/dist/migrations/add-table-prefixes.d.ts.map +0 -1
- package/dist/migrations/add-table-prefixes.js +0 -150
- package/dist/migrations/add-table-prefixes.js.map +0 -1
- package/dist/migrations/add-task-dependencies.d.ts +0 -26
- package/dist/migrations/add-task-dependencies.d.ts.map +0 -1
- package/dist/migrations/add-task-dependencies.js +0 -94
- package/dist/migrations/add-task-dependencies.js.map +0 -1
- package/dist/migrations/add-task-tables.d.ts +0 -47
- package/dist/migrations/add-task-tables.d.ts.map +0 -1
- package/dist/migrations/add-task-tables.js +0 -285
- package/dist/migrations/add-task-tables.js.map +0 -1
- package/dist/migrations/add-token-tracking.d.ts +0 -28
- package/dist/migrations/add-token-tracking.d.ts.map +0 -1
- package/dist/migrations/add-token-tracking.js +0 -108
- package/dist/migrations/add-token-tracking.js.map +0 -1
- package/dist/migrations/add-v2.1.0-features.d.ts +0 -29
- package/dist/migrations/add-v2.1.0-features.d.ts.map +0 -1
- package/dist/migrations/add-v2.1.0-features.js +0 -198
- package/dist/migrations/add-v2.1.0-features.js.map +0 -1
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts +0 -26
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +0 -1
- package/dist/migrations/add-v3.5.0-pruned-files.js +0 -107
- package/dist/migrations/add-v3.5.0-pruned-files.js.map +0 -1
- package/dist/migrations/index.d.ts +0 -112
- package/dist/migrations/index.d.ts.map +0 -1
- package/dist/migrations/index.js +0 -411
- package/dist/migrations/index.js.map +0 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +0 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.js.map +0 -1
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +0 -1
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +0 -1
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +0 -1
- package/dist/migrations/knex/20251025021351_create_indexes.js +0 -62
- package/dist/migrations/knex/20251025021351_create_indexes.js.map +0 -1
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +0 -1
- package/dist/migrations/knex/20251025021416_seed_master_data.js +0 -58
- package/dist/migrations/knex/20251025021416_seed_master_data.js.map +0 -1
- package/dist/migrations/knex/20251025070349_create_views.d.ts.map +0 -1
- package/dist/migrations/knex/20251025070349_create_views.js.map +0 -1
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +0 -1
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +0 -1
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +0 -1
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +0 -1
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +0 -1
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +0 -1
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +0 -1
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +0 -1
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +0 -1
- package/dist/migrations/migrate-decisions-to-tasks.d.ts +0 -61
- package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +0 -1
- package/dist/migrations/migrate-decisions-to-tasks.js +0 -442
- package/dist/migrations/migrate-decisions-to-tasks.js.map +0 -1
- package/dist/migrations/seed-help-data.d.ts +0 -48
- package/dist/migrations/seed-help-data.d.ts.map +0 -1
- package/dist/migrations/seed-help-data.js +0 -1466
- package/dist/migrations/seed-help-data.js.map +0 -1
- package/dist/migrations/seed-tool-metadata.d.ts +0 -24
- package/dist/migrations/seed-tool-metadata.d.ts.map +0 -1
- package/dist/migrations/seed-tool-metadata.js +0 -392
- package/dist/migrations/seed-tool-metadata.js.map +0 -1
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts +0 -46
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +0 -1
- package/dist/migrations/v3.6.0-help-system-refactor.js +0 -223
- package/dist/migrations/v3.6.0-help-system-refactor.js.map +0 -1
- package/dist/tests/migrations/test-v3.2-migration.d.ts +0 -6
- package/dist/tests/migrations/test-v3.2-migration.d.ts.map +0 -1
- package/dist/tests/migrations/test-v3.2-migration.js +0 -191
- package/dist/tests/migrations/test-v3.2-migration.js.map +0 -1
- /package/dist/migrations/knex/{20251025020452_create_master_tables.d.ts → bootstrap/20251025020452_create_master_tables.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025021152_create_transaction_tables.d.ts → bootstrap/20251025021152_create_transaction_tables.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025021351_create_indexes.d.ts → bootstrap/20251025021351_create_indexes.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025021416_seed_master_data.d.ts → bootstrap/20251025021416_seed_master_data.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025070349_create_views.d.ts → bootstrap/20251025070349_create_views.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025070349_create_views.js → bootstrap/20251025070349_create_views.js} +0 -0
- /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.d.ts → enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.js → enhancements/20251025081221_add_link_type_to_task_decision_links.js} +0 -0
- /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.d.ts → enhancements/20251025082220_fix_task_dependencies_columns.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.js → enhancements/20251025082220_fix_task_dependencies_columns.js} +0 -0
- /package/dist/migrations/knex/{20251025090000_create_help_system_tables.d.ts → enhancements/20251025090000_create_help_system_tables.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025090000_create_help_system_tables.js → enhancements/20251025090000_create_help_system_tables.js} +0 -0
- /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.d.ts → enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.js → enhancements/20251025090100_seed_help_categories_and_use_cases.js} +0 -0
- /package/dist/migrations/knex/{20251025100000_seed_help_metadata.d.ts → enhancements/20251025100000_seed_help_metadata.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025100000_seed_help_metadata.js → enhancements/20251025100000_seed_help_metadata.js} +0 -0
- /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.d.ts → enhancements/20251025100100_seed_remaining_use_cases.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.js → enhancements/20251025100100_seed_remaining_use_cases.js} +0 -0
- /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.d.ts → enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts} +0 -0
- /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.js → enhancements/20251025120000_add_cascade_to_task_dependencies.js} +0 -0
- /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.d.ts → enhancements/20251027000000_add_agent_reuse_system.d.ts} +0 -0
- /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.js → enhancements/20251027000000_add_agent_reuse_system.js} +0 -0
- /package/dist/migrations/knex/{20251027010000_add_task_constraint_to_decision_context.d.ts → enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts} +0 -0
- /package/dist/migrations/knex/{20251027010000_add_task_constraint_to_decision_context.js → enhancements/20251027010000_add_task_constraint_to_decision_context.js} +0 -0
- /package/dist/migrations/knex/{20251027020000_update_agent_reusability.d.ts → enhancements/20251027020000_update_agent_reusability.d.ts} +0 -0
- /package/dist/migrations/knex/{20251027020000_update_agent_reusability.js → enhancements/20251027020000_update_agent_reusability.js} +0 -0
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Add Task Management Tables (v2.1.x -> v3.0.0)
|
|
3
|
-
*
|
|
4
|
-
* Adds Kanban-style task tracking system to reduce token usage
|
|
5
|
-
* from decisions table being misused for task tracking.
|
|
6
|
-
*
|
|
7
|
-
* Tables Added:
|
|
8
|
-
* - m_task_statuses (master table for task statuses)
|
|
9
|
-
* - t_tasks (core task data, token-efficient)
|
|
10
|
-
* - t_task_details (large text stored separately)
|
|
11
|
-
* - t_task_tags (many-to-many task tagging)
|
|
12
|
-
* - t_task_decision_links (link tasks to decisions)
|
|
13
|
-
* - t_task_constraint_links (link tasks to constraints)
|
|
14
|
-
* - t_task_file_links (link tasks to files)
|
|
15
|
-
*
|
|
16
|
-
* View Added:
|
|
17
|
-
* - v_task_board (token-efficient task board view)
|
|
18
|
-
*
|
|
19
|
-
* Triggers Added:
|
|
20
|
-
* - trg_log_task_create (activity log for task creation)
|
|
21
|
-
* - trg_log_task_status_change (activity log for status changes)
|
|
22
|
-
* - trg_update_task_timestamp (auto-update updated_ts)
|
|
23
|
-
*
|
|
24
|
-
* Initial Data:
|
|
25
|
-
* - Task statuses: todo, in_progress, waiting_review, blocked, done, archived
|
|
26
|
-
* - Config keys for stale task detection
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Check if migration is needed
|
|
30
|
-
*/
|
|
31
|
-
export function needsMigration(db) {
|
|
32
|
-
// Check if new table doesn't exist (m_task_statuses)
|
|
33
|
-
const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_task_statuses'").get();
|
|
34
|
-
return tableExists === undefined;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Run the migration
|
|
38
|
-
*/
|
|
39
|
-
export function runMigration(db) {
|
|
40
|
-
const details = [];
|
|
41
|
-
try {
|
|
42
|
-
// Start transaction
|
|
43
|
-
db.exec('BEGIN TRANSACTION');
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// 1. Create Master Table: m_task_statuses
|
|
46
|
-
// ============================================================================
|
|
47
|
-
db.exec(`
|
|
48
|
-
CREATE TABLE IF NOT EXISTS m_task_statuses (
|
|
49
|
-
id INTEGER PRIMARY KEY,
|
|
50
|
-
name TEXT UNIQUE NOT NULL
|
|
51
|
-
);
|
|
52
|
-
`);
|
|
53
|
-
details.push('Created table: m_task_statuses');
|
|
54
|
-
// ============================================================================
|
|
55
|
-
// 2. Create Transaction Tables
|
|
56
|
-
// ============================================================================
|
|
57
|
-
// Task core data (token-efficient: no large text here)
|
|
58
|
-
db.exec(`
|
|
59
|
-
CREATE TABLE IF NOT EXISTS t_tasks (
|
|
60
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
61
|
-
title TEXT NOT NULL,
|
|
62
|
-
status_id INTEGER NOT NULL REFERENCES m_task_statuses(id),
|
|
63
|
-
priority INTEGER DEFAULT 2,
|
|
64
|
-
assigned_agent_id INTEGER REFERENCES m_agents(id),
|
|
65
|
-
created_by_agent_id INTEGER REFERENCES m_agents(id),
|
|
66
|
-
layer_id INTEGER REFERENCES m_layers(id),
|
|
67
|
-
created_ts INTEGER DEFAULT (unixepoch()),
|
|
68
|
-
updated_ts INTEGER DEFAULT (unixepoch()),
|
|
69
|
-
completed_ts INTEGER
|
|
70
|
-
);
|
|
71
|
-
`);
|
|
72
|
-
details.push('Created table: t_tasks');
|
|
73
|
-
// Task details (large text stored separately)
|
|
74
|
-
db.exec(`
|
|
75
|
-
CREATE TABLE IF NOT EXISTS t_task_details (
|
|
76
|
-
task_id INTEGER PRIMARY KEY REFERENCES t_tasks(id) ON DELETE CASCADE,
|
|
77
|
-
description TEXT,
|
|
78
|
-
acceptance_criteria TEXT,
|
|
79
|
-
notes TEXT
|
|
80
|
-
);
|
|
81
|
-
`);
|
|
82
|
-
details.push('Created table: t_task_details');
|
|
83
|
-
// Task tags (many-to-many)
|
|
84
|
-
db.exec(`
|
|
85
|
-
CREATE TABLE IF NOT EXISTS t_task_tags (
|
|
86
|
-
task_id INTEGER REFERENCES t_tasks(id) ON DELETE CASCADE,
|
|
87
|
-
tag_id INTEGER REFERENCES m_tags(id),
|
|
88
|
-
PRIMARY KEY (task_id, tag_id)
|
|
89
|
-
);
|
|
90
|
-
`);
|
|
91
|
-
details.push('Created table: t_task_tags');
|
|
92
|
-
// Task-decision links
|
|
93
|
-
db.exec(`
|
|
94
|
-
CREATE TABLE IF NOT EXISTS t_task_decision_links (
|
|
95
|
-
task_id INTEGER REFERENCES t_tasks(id) ON DELETE CASCADE,
|
|
96
|
-
decision_key_id INTEGER REFERENCES m_context_keys(id),
|
|
97
|
-
link_type TEXT DEFAULT 'implements',
|
|
98
|
-
PRIMARY KEY (task_id, decision_key_id)
|
|
99
|
-
);
|
|
100
|
-
`);
|
|
101
|
-
details.push('Created table: t_task_decision_links');
|
|
102
|
-
// Task-constraint links
|
|
103
|
-
db.exec(`
|
|
104
|
-
CREATE TABLE IF NOT EXISTS t_task_constraint_links (
|
|
105
|
-
task_id INTEGER REFERENCES t_tasks(id) ON DELETE CASCADE,
|
|
106
|
-
constraint_id INTEGER REFERENCES t_constraints(id),
|
|
107
|
-
PRIMARY KEY (task_id, constraint_id)
|
|
108
|
-
);
|
|
109
|
-
`);
|
|
110
|
-
details.push('Created table: t_task_constraint_links');
|
|
111
|
-
// Task-file links
|
|
112
|
-
db.exec(`
|
|
113
|
-
CREATE TABLE IF NOT EXISTS t_task_file_links (
|
|
114
|
-
task_id INTEGER REFERENCES t_tasks(id) ON DELETE CASCADE,
|
|
115
|
-
file_id INTEGER REFERENCES m_files(id),
|
|
116
|
-
PRIMARY KEY (task_id, file_id)
|
|
117
|
-
);
|
|
118
|
-
`);
|
|
119
|
-
details.push('Created table: t_task_file_links');
|
|
120
|
-
// ============================================================================
|
|
121
|
-
// 3. Create Indexes
|
|
122
|
-
// ============================================================================
|
|
123
|
-
db.exec(`
|
|
124
|
-
CREATE INDEX IF NOT EXISTS idx_task_status ON t_tasks(status_id);
|
|
125
|
-
`);
|
|
126
|
-
details.push('Created index: idx_task_status');
|
|
127
|
-
db.exec(`
|
|
128
|
-
CREATE INDEX IF NOT EXISTS idx_task_updated ON t_tasks(updated_ts DESC);
|
|
129
|
-
`);
|
|
130
|
-
details.push('Created index: idx_task_updated');
|
|
131
|
-
db.exec(`
|
|
132
|
-
CREATE INDEX IF NOT EXISTS idx_task_assignee ON t_tasks(assigned_agent_id);
|
|
133
|
-
`);
|
|
134
|
-
details.push('Created index: idx_task_assignee');
|
|
135
|
-
// ============================================================================
|
|
136
|
-
// 4. Create View: v_task_board
|
|
137
|
-
// ============================================================================
|
|
138
|
-
db.exec(`
|
|
139
|
-
CREATE VIEW IF NOT EXISTS v_task_board AS
|
|
140
|
-
SELECT
|
|
141
|
-
t.id,
|
|
142
|
-
t.title,
|
|
143
|
-
s.name as status,
|
|
144
|
-
t.priority,
|
|
145
|
-
a.name as assigned_to,
|
|
146
|
-
l.name as layer,
|
|
147
|
-
t.created_ts,
|
|
148
|
-
t.updated_ts,
|
|
149
|
-
t.completed_ts,
|
|
150
|
-
(SELECT GROUP_CONCAT(tg2.name, ', ')
|
|
151
|
-
FROM t_task_tags tt2
|
|
152
|
-
JOIN m_tags tg2 ON tt2.tag_id = tg2.id
|
|
153
|
-
WHERE tt2.task_id = t.id) as tags
|
|
154
|
-
FROM t_tasks t
|
|
155
|
-
LEFT JOIN m_task_statuses s ON t.status_id = s.id
|
|
156
|
-
LEFT JOIN m_agents a ON t.assigned_agent_id = a.id
|
|
157
|
-
LEFT JOIN m_layers l ON t.layer_id = l.id;
|
|
158
|
-
`);
|
|
159
|
-
details.push('Created view: v_task_board');
|
|
160
|
-
// ============================================================================
|
|
161
|
-
// 5. Create Triggers
|
|
162
|
-
// ============================================================================
|
|
163
|
-
// Task creation activity log
|
|
164
|
-
db.exec(`
|
|
165
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_task_create
|
|
166
|
-
AFTER INSERT ON t_tasks
|
|
167
|
-
BEGIN
|
|
168
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
169
|
-
SELECT
|
|
170
|
-
COALESCE(NEW.created_by_agent_id, (SELECT id FROM m_agents WHERE name = 'system' LIMIT 1)),
|
|
171
|
-
'task_create',
|
|
172
|
-
'task_id:' || NEW.id,
|
|
173
|
-
NEW.layer_id,
|
|
174
|
-
json_object('title', NEW.title, 'status_id', NEW.status_id, 'priority', NEW.priority);
|
|
175
|
-
END;
|
|
176
|
-
`);
|
|
177
|
-
details.push('Created trigger: trg_log_task_create');
|
|
178
|
-
// Task status change activity log
|
|
179
|
-
db.exec(`
|
|
180
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_task_status_change
|
|
181
|
-
AFTER UPDATE OF status_id ON t_tasks
|
|
182
|
-
WHEN OLD.status_id != NEW.status_id
|
|
183
|
-
BEGIN
|
|
184
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
185
|
-
SELECT
|
|
186
|
-
COALESCE(NEW.assigned_agent_id, (SELECT id FROM m_agents WHERE name = 'system' LIMIT 1)),
|
|
187
|
-
'task_status_change',
|
|
188
|
-
'task_id:' || NEW.id,
|
|
189
|
-
NEW.layer_id,
|
|
190
|
-
json_object('old_status', OLD.status_id, 'new_status', NEW.status_id);
|
|
191
|
-
END;
|
|
192
|
-
`);
|
|
193
|
-
details.push('Created trigger: trg_log_task_status_change');
|
|
194
|
-
// Auto-update task timestamp
|
|
195
|
-
db.exec(`
|
|
196
|
-
CREATE TRIGGER IF NOT EXISTS trg_update_task_timestamp
|
|
197
|
-
AFTER UPDATE ON t_tasks
|
|
198
|
-
BEGIN
|
|
199
|
-
UPDATE t_tasks SET updated_ts = unixepoch() WHERE id = NEW.id;
|
|
200
|
-
END;
|
|
201
|
-
`);
|
|
202
|
-
details.push('Created trigger: trg_update_task_timestamp');
|
|
203
|
-
// ============================================================================
|
|
204
|
-
// 6. Seed Initial Data
|
|
205
|
-
// ============================================================================
|
|
206
|
-
// Insert task statuses
|
|
207
|
-
const statusInsert = db.prepare('INSERT INTO m_task_statuses (id, name) VALUES (?, ?)');
|
|
208
|
-
const statuses = [
|
|
209
|
-
{ id: 1, name: 'todo' },
|
|
210
|
-
{ id: 2, name: 'in_progress' },
|
|
211
|
-
{ id: 3, name: 'waiting_review' },
|
|
212
|
-
{ id: 4, name: 'blocked' },
|
|
213
|
-
{ id: 5, name: 'done' },
|
|
214
|
-
{ id: 6, name: 'archived' }
|
|
215
|
-
];
|
|
216
|
-
for (const status of statuses) {
|
|
217
|
-
statusInsert.run(status.id, status.name);
|
|
218
|
-
}
|
|
219
|
-
details.push('Seeded task statuses: todo, in_progress, waiting_review, blocked, done, archived');
|
|
220
|
-
// Insert config keys for task management
|
|
221
|
-
const configInsert = db.prepare('INSERT INTO m_config (key, value) VALUES (?, ?)');
|
|
222
|
-
const configs = [
|
|
223
|
-
{ key: 'task_stale_hours_in_progress', value: '2' },
|
|
224
|
-
{ key: 'task_stale_hours_waiting_review', value: '24' },
|
|
225
|
-
{ key: 'task_auto_stale_enabled', value: '1' }
|
|
226
|
-
];
|
|
227
|
-
for (const config of configs) {
|
|
228
|
-
configInsert.run(config.key, config.value);
|
|
229
|
-
}
|
|
230
|
-
details.push('Seeded config keys: task_stale_hours_in_progress, task_stale_hours_waiting_review, task_auto_stale_enabled');
|
|
231
|
-
// Commit transaction
|
|
232
|
-
db.exec('COMMIT');
|
|
233
|
-
return {
|
|
234
|
-
success: true,
|
|
235
|
-
message: 'Task tables migration completed successfully (v2.1.x -> v3.0.0).',
|
|
236
|
-
details
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
catch (error) {
|
|
240
|
-
// Rollback on error
|
|
241
|
-
db.exec('ROLLBACK');
|
|
242
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
243
|
-
return {
|
|
244
|
-
success: false,
|
|
245
|
-
message: `Task tables migration failed: ${message}`,
|
|
246
|
-
details
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Get migration info
|
|
252
|
-
*/
|
|
253
|
-
export function getMigrationInfo() {
|
|
254
|
-
return `
|
|
255
|
-
Migration: Add Task Management Tables (v2.1.x -> v3.0.0)
|
|
256
|
-
|
|
257
|
-
This migration adds Kanban-style task tracking to reduce token usage
|
|
258
|
-
from the decisions table being misused for task/todo tracking.
|
|
259
|
-
|
|
260
|
-
The migration will:
|
|
261
|
-
1. Create m_task_statuses master table
|
|
262
|
-
2. Create 6 transaction tables for task management
|
|
263
|
-
3. Create 3 indexes for query optimization
|
|
264
|
-
4. Create v_task_board view for token-efficient queries
|
|
265
|
-
5. Create 3 triggers for activity logging and timestamp updates
|
|
266
|
-
6. Seed task statuses (6 statuses)
|
|
267
|
-
7. Seed config keys for stale task detection (3 keys)
|
|
268
|
-
|
|
269
|
-
Tables Added:
|
|
270
|
-
- m_task_statuses (1 master table)
|
|
271
|
-
- t_tasks, t_task_details, t_task_tags (3 core tables)
|
|
272
|
-
- t_task_decision_links, t_task_constraint_links, t_task_file_links (3 link tables)
|
|
273
|
-
|
|
274
|
-
View Added:
|
|
275
|
-
- v_task_board (token-efficient task board view)
|
|
276
|
-
|
|
277
|
-
Triggers Added:
|
|
278
|
-
- trg_log_task_create (activity log)
|
|
279
|
-
- trg_log_task_status_change (activity log)
|
|
280
|
-
- trg_update_task_timestamp (auto-update)
|
|
281
|
-
|
|
282
|
-
This migration is safe and reversible via backup restoration.
|
|
283
|
-
`.trim();
|
|
284
|
-
}
|
|
285
|
-
//# sourceMappingURL=add-task-tables.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-task-tables.js","sourceRoot":"","sources":["../../src/migrations/add-task-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Add Token Tracking Table (v3.6.0)
|
|
3
|
-
*
|
|
4
|
-
* Creates table for tracking help system token usage to measure efficiency gains.
|
|
5
|
-
*
|
|
6
|
-
* Table Created:
|
|
7
|
-
* - t_help_token_usage: Tracks token consumption per query type
|
|
8
|
-
*/
|
|
9
|
-
import { Database } from 'better-sqlite3';
|
|
10
|
-
interface MigrationResult {
|
|
11
|
-
success: boolean;
|
|
12
|
-
message: string;
|
|
13
|
-
details?: string[];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Check if migration is needed
|
|
17
|
-
*/
|
|
18
|
-
export declare function needsTokenTrackingMigration(db: Database): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Run the migration
|
|
21
|
-
*/
|
|
22
|
-
export declare function migrateToTokenTracking(db: Database): MigrationResult;
|
|
23
|
-
/**
|
|
24
|
-
* Get migration info
|
|
25
|
-
*/
|
|
26
|
-
export declare function getTokenTrackingMigrationInfo(): string;
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=add-token-tracking.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-token-tracking.d.ts","sourceRoot":"","sources":["../../src/migrations/add-token-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAOjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,GAAG,eAAe,CA4DpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CA+BtD"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Add Token Tracking Table (v3.6.0)
|
|
3
|
-
*
|
|
4
|
-
* Creates table for tracking help system token usage to measure efficiency gains.
|
|
5
|
-
*
|
|
6
|
-
* Table Created:
|
|
7
|
-
* - t_help_token_usage: Tracks token consumption per query type
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Check if migration is needed
|
|
11
|
-
*/
|
|
12
|
-
export function needsTokenTrackingMigration(db) {
|
|
13
|
-
// Check if token tracking table doesn't exist yet
|
|
14
|
-
const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_token_usage'").get();
|
|
15
|
-
return tableExists === undefined;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Run the migration
|
|
19
|
-
*/
|
|
20
|
-
export function migrateToTokenTracking(db) {
|
|
21
|
-
const details = [];
|
|
22
|
-
try {
|
|
23
|
-
// Start transaction
|
|
24
|
-
db.exec('BEGIN TRANSACTION');
|
|
25
|
-
// Create t_help_token_usage table
|
|
26
|
-
db.exec(`
|
|
27
|
-
CREATE TABLE IF NOT EXISTS t_help_token_usage (
|
|
28
|
-
usage_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
29
|
-
query_type TEXT NOT NULL,
|
|
30
|
-
tool_name TEXT,
|
|
31
|
-
action_name TEXT,
|
|
32
|
-
estimated_tokens INTEGER NOT NULL,
|
|
33
|
-
actual_chars INTEGER NOT NULL,
|
|
34
|
-
timestamp INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
35
|
-
)
|
|
36
|
-
`);
|
|
37
|
-
details.push('Created table: t_help_token_usage');
|
|
38
|
-
// Create indexes for analysis queries
|
|
39
|
-
db.exec(`
|
|
40
|
-
CREATE INDEX IF NOT EXISTS idx_help_token_usage_query_type
|
|
41
|
-
ON t_help_token_usage(query_type)
|
|
42
|
-
`);
|
|
43
|
-
details.push('Created index: idx_help_token_usage_query_type');
|
|
44
|
-
db.exec(`
|
|
45
|
-
CREATE INDEX IF NOT EXISTS idx_help_token_usage_timestamp
|
|
46
|
-
ON t_help_token_usage(timestamp DESC)
|
|
47
|
-
`);
|
|
48
|
-
details.push('Created index: idx_help_token_usage_timestamp');
|
|
49
|
-
db.exec(`
|
|
50
|
-
CREATE INDEX IF NOT EXISTS idx_help_token_usage_tool_action
|
|
51
|
-
ON t_help_token_usage(tool_name, action_name)
|
|
52
|
-
`);
|
|
53
|
-
details.push('Created index: idx_help_token_usage_tool_action');
|
|
54
|
-
// Commit transaction
|
|
55
|
-
db.exec('COMMIT');
|
|
56
|
-
return {
|
|
57
|
-
success: true,
|
|
58
|
-
message: 'Token tracking migration completed successfully (v3.6.0)',
|
|
59
|
-
details
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
// Rollback on error
|
|
64
|
-
db.exec('ROLLBACK');
|
|
65
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
66
|
-
return {
|
|
67
|
-
success: false,
|
|
68
|
-
message: `Token tracking migration failed: ${message}`,
|
|
69
|
-
details
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Get migration info
|
|
75
|
-
*/
|
|
76
|
-
export function getTokenTrackingMigrationInfo() {
|
|
77
|
-
return `
|
|
78
|
-
Migration: Add Token Tracking Table (v3.6.0)
|
|
79
|
-
|
|
80
|
-
This migration creates 1 new table for tracking help system token usage:
|
|
81
|
-
|
|
82
|
-
Transaction Table (t_ prefix):
|
|
83
|
-
1. t_help_token_usage - Token consumption metrics per query
|
|
84
|
-
|
|
85
|
-
Fields:
|
|
86
|
-
- usage_id: Auto-incrementing primary key
|
|
87
|
-
- query_type: Type of query (help_action, help_params, etc.)
|
|
88
|
-
- tool_name: Tool name (if applicable)
|
|
89
|
-
- action_name: Action name (if applicable)
|
|
90
|
-
- estimated_tokens: Estimated token count
|
|
91
|
-
- actual_chars: Actual character count
|
|
92
|
-
- timestamp: Unix epoch timestamp
|
|
93
|
-
|
|
94
|
-
Indexes:
|
|
95
|
-
- idx_help_token_usage_query_type (query_type)
|
|
96
|
-
- idx_help_token_usage_timestamp (timestamp DESC)
|
|
97
|
-
- idx_help_token_usage_tool_action (tool_name, action_name)
|
|
98
|
-
|
|
99
|
-
Benefits:
|
|
100
|
-
- Track actual token consumption for help queries
|
|
101
|
-
- Measure efficiency gains vs legacy help system
|
|
102
|
-
- Analyze usage patterns and optimize responses
|
|
103
|
-
- Validate token reduction claims
|
|
104
|
-
|
|
105
|
-
This migration is safe and additive (no data loss).
|
|
106
|
-
`.trim();
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=add-token-tracking.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-token-tracking.js","sourceRoot":"","sources":["../../src/migrations/add-token-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAAY;IACtD,kDAAkD;IAClD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,iFAAiF,CAClF,CAAC,GAAG,EAAE,CAAC;IAER,OAAO,WAAW,KAAK,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAY;IACjD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,oBAAoB;QACpB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE7B,kCAAkC;QAClC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;KAUP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAElD,sCAAsC;QACtC,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAE/D,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAE9D,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAEhE,qBAAqB;QACrB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,0DAA0D;YACnE,OAAO;SACR,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oBAAoB;QACpB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,oCAAoC,OAAO,EAAE;YACtD,OAAO;SACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BN,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Add v2.1.0 features (v2.0.0 -> v2.1.0)
|
|
3
|
-
*
|
|
4
|
-
* Migrates database from v2.0.0 to v2.1.0:
|
|
5
|
-
* - Adds t_activity_log table (FR-001)
|
|
6
|
-
* - Adds t_decision_templates table (FR-006)
|
|
7
|
-
* - Adds 4 activity logging triggers
|
|
8
|
-
* - Adds 5 built-in decision templates
|
|
9
|
-
*/
|
|
10
|
-
import { Database } from 'better-sqlite3';
|
|
11
|
-
interface MigrationResult {
|
|
12
|
-
success: boolean;
|
|
13
|
-
message: string;
|
|
14
|
-
details?: string[];
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Check if migration is needed
|
|
18
|
-
*/
|
|
19
|
-
export declare function needsMigration(db: Database): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Run the migration
|
|
22
|
-
*/
|
|
23
|
-
export declare function runMigration(db: Database): MigrationResult;
|
|
24
|
-
/**
|
|
25
|
-
* Get migration info
|
|
26
|
-
*/
|
|
27
|
-
export declare function getMigrationInfo(): string;
|
|
28
|
-
export {};
|
|
29
|
-
//# sourceMappingURL=add-v2.1.0-features.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-v2.1.0-features.d.ts","sourceRoot":"","sources":["../../src/migrations/add-v2.1.0-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAWpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,eAAe,CA6L1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA0BzC"}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Add v2.1.0 features (v2.0.0 -> v2.1.0)
|
|
3
|
-
*
|
|
4
|
-
* Migrates database from v2.0.0 to v2.1.0:
|
|
5
|
-
* - Adds t_activity_log table (FR-001)
|
|
6
|
-
* - Adds t_decision_templates table (FR-006)
|
|
7
|
-
* - Adds 4 activity logging triggers
|
|
8
|
-
* - Adds 5 built-in decision templates
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Check if migration is needed
|
|
12
|
-
*/
|
|
13
|
-
export function needsMigration(db) {
|
|
14
|
-
// Check if new tables don't exist yet
|
|
15
|
-
const activityLogExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_activity_log'").get();
|
|
16
|
-
const templatesExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_decision_templates'").get();
|
|
17
|
-
return activityLogExists === undefined || templatesExists === undefined;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Run the migration
|
|
21
|
-
*/
|
|
22
|
-
export function runMigration(db) {
|
|
23
|
-
const details = [];
|
|
24
|
-
try {
|
|
25
|
-
// Start transaction
|
|
26
|
-
db.exec('BEGIN TRANSACTION');
|
|
27
|
-
// 1. Add t_activity_log table (FR-001)
|
|
28
|
-
const activityLogExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_activity_log'").get();
|
|
29
|
-
if (!activityLogExists) {
|
|
30
|
-
db.exec(`
|
|
31
|
-
CREATE TABLE t_activity_log (
|
|
32
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
33
|
-
ts INTEGER DEFAULT (unixepoch()),
|
|
34
|
-
agent_id INTEGER NOT NULL REFERENCES m_agents(id),
|
|
35
|
-
action_type TEXT NOT NULL,
|
|
36
|
-
target TEXT NOT NULL,
|
|
37
|
-
layer_id INTEGER REFERENCES m_layers(id),
|
|
38
|
-
details TEXT
|
|
39
|
-
);
|
|
40
|
-
`);
|
|
41
|
-
details.push('Created table: t_activity_log (FR-001)');
|
|
42
|
-
// Add indexes
|
|
43
|
-
db.exec(`
|
|
44
|
-
CREATE INDEX IF NOT EXISTS idx_activity_log_ts ON t_activity_log(ts DESC);
|
|
45
|
-
CREATE INDEX IF NOT EXISTS idx_activity_log_agent ON t_activity_log(agent_id);
|
|
46
|
-
CREATE INDEX IF NOT EXISTS idx_activity_log_action ON t_activity_log(action_type);
|
|
47
|
-
`);
|
|
48
|
-
details.push('Created indexes for t_activity_log');
|
|
49
|
-
}
|
|
50
|
-
// 2. Add t_decision_templates table (FR-006)
|
|
51
|
-
const templatesExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_decision_templates'").get();
|
|
52
|
-
if (!templatesExists) {
|
|
53
|
-
db.exec(`
|
|
54
|
-
CREATE TABLE t_decision_templates (
|
|
55
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
-
name TEXT UNIQUE NOT NULL,
|
|
57
|
-
defaults TEXT NOT NULL,
|
|
58
|
-
required_fields TEXT,
|
|
59
|
-
created_by INTEGER REFERENCES m_agents(id),
|
|
60
|
-
ts INTEGER DEFAULT (unixepoch())
|
|
61
|
-
);
|
|
62
|
-
`);
|
|
63
|
-
details.push('Created table: t_decision_templates (FR-006)');
|
|
64
|
-
// Insert built-in templates
|
|
65
|
-
const insertTemplate = db.prepare(`
|
|
66
|
-
INSERT OR IGNORE INTO t_decision_templates (name, defaults, required_fields, created_by, ts)
|
|
67
|
-
VALUES (?, ?, ?, NULL, unixepoch())
|
|
68
|
-
`);
|
|
69
|
-
insertTemplate.run('breaking_change', '{"layer":"business","status":"active","tags":["breaking"]}', null);
|
|
70
|
-
insertTemplate.run('security_vulnerability', '{"layer":"infrastructure","status":"active","tags":["security","vulnerability"]}', '["cve_id","severity"]');
|
|
71
|
-
insertTemplate.run('performance_optimization', '{"layer":"business","status":"active","tags":["performance","optimization"]}', null);
|
|
72
|
-
insertTemplate.run('deprecation', '{"layer":"business","status":"active","tags":["deprecation"]}', null);
|
|
73
|
-
insertTemplate.run('architecture_decision', '{"layer":"infrastructure","status":"active","tags":["architecture","adr"]}', null);
|
|
74
|
-
details.push('Inserted 5 built-in decision templates');
|
|
75
|
-
}
|
|
76
|
-
// 3. Add activity logging triggers (FR-001)
|
|
77
|
-
const triggerNames = [
|
|
78
|
-
'trg_log_decision_set',
|
|
79
|
-
'trg_log_decision_update',
|
|
80
|
-
'trg_log_message_send',
|
|
81
|
-
'trg_log_file_record'
|
|
82
|
-
];
|
|
83
|
-
let triggersCreated = 0;
|
|
84
|
-
// Check if triggers exist
|
|
85
|
-
for (const triggerName of triggerNames) {
|
|
86
|
-
const exists = db.prepare("SELECT name FROM sqlite_master WHERE type='trigger' AND name=?").get(triggerName);
|
|
87
|
-
if (!exists) {
|
|
88
|
-
triggersCreated++;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (triggersCreated > 0) {
|
|
92
|
-
// Create triggers
|
|
93
|
-
db.exec(`
|
|
94
|
-
-- Decision Addition Log
|
|
95
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_decision_set
|
|
96
|
-
AFTER INSERT ON t_decisions
|
|
97
|
-
BEGIN
|
|
98
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
99
|
-
SELECT
|
|
100
|
-
COALESCE(NEW.agent_id, (SELECT id FROM m_agents WHERE name = 'system' LIMIT 1)),
|
|
101
|
-
'decision_set',
|
|
102
|
-
(SELECT key FROM m_context_keys WHERE id = NEW.key_id),
|
|
103
|
-
NEW.layer_id,
|
|
104
|
-
json_object('value', NEW.value, 'version', NEW.version, 'status', NEW.status);
|
|
105
|
-
END;
|
|
106
|
-
|
|
107
|
-
-- Decision Update Log
|
|
108
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_decision_update
|
|
109
|
-
AFTER UPDATE ON t_decisions
|
|
110
|
-
WHEN OLD.value != NEW.value OR OLD.version != NEW.version OR OLD.status != NEW.status
|
|
111
|
-
BEGIN
|
|
112
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
113
|
-
SELECT
|
|
114
|
-
COALESCE(NEW.agent_id, (SELECT id FROM m_agents WHERE name = 'system' LIMIT 1)),
|
|
115
|
-
'decision_update',
|
|
116
|
-
(SELECT key FROM m_context_keys WHERE id = NEW.key_id),
|
|
117
|
-
NEW.layer_id,
|
|
118
|
-
json_object('old_value', OLD.value, 'new_value', NEW.value, 'old_version', OLD.version, 'new_version', NEW.version, 'old_status', OLD.status, 'new_status', NEW.status);
|
|
119
|
-
END;
|
|
120
|
-
|
|
121
|
-
-- Message Send Log
|
|
122
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_message_send
|
|
123
|
-
AFTER INSERT ON t_agent_messages
|
|
124
|
-
BEGIN
|
|
125
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
126
|
-
SELECT
|
|
127
|
-
NEW.from_agent_id,
|
|
128
|
-
'message_send',
|
|
129
|
-
'msg_id:' || NEW.id,
|
|
130
|
-
NULL,
|
|
131
|
-
json_object('to_agent_id', NEW.to_agent_id, 'msg_type', NEW.msg_type, 'priority', NEW.priority);
|
|
132
|
-
END;
|
|
133
|
-
|
|
134
|
-
-- File Change Log
|
|
135
|
-
CREATE TRIGGER IF NOT EXISTS trg_log_file_record
|
|
136
|
-
AFTER INSERT ON t_file_changes
|
|
137
|
-
BEGIN
|
|
138
|
-
INSERT INTO t_activity_log (agent_id, action_type, target, layer_id, details)
|
|
139
|
-
SELECT
|
|
140
|
-
NEW.agent_id,
|
|
141
|
-
'file_record',
|
|
142
|
-
(SELECT path FROM m_files WHERE id = NEW.file_id),
|
|
143
|
-
NEW.layer_id,
|
|
144
|
-
json_object('change_type', NEW.change_type, 'description', NEW.description);
|
|
145
|
-
END;
|
|
146
|
-
`);
|
|
147
|
-
details.push(`Created ${triggersCreated} activity logging triggers`);
|
|
148
|
-
}
|
|
149
|
-
// Commit transaction
|
|
150
|
-
db.exec('COMMIT');
|
|
151
|
-
return {
|
|
152
|
-
success: true,
|
|
153
|
-
message: 'Migration to v2.1.0 completed successfully.',
|
|
154
|
-
details
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
// Rollback on error
|
|
159
|
-
db.exec('ROLLBACK');
|
|
160
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
161
|
-
return {
|
|
162
|
-
success: false,
|
|
163
|
-
message: `Migration failed: ${message}`,
|
|
164
|
-
details
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Get migration info
|
|
170
|
-
*/
|
|
171
|
-
export function getMigrationInfo() {
|
|
172
|
-
return `
|
|
173
|
-
Migration: Add v2.1.0 Features (v2.0.0 -> v2.1.0)
|
|
174
|
-
|
|
175
|
-
This migration adds new features from the v2.1.0 release:
|
|
176
|
-
|
|
177
|
-
**FR-001: Activity Log**
|
|
178
|
-
- New table: t_activity_log
|
|
179
|
-
- 3 new indexes for performance
|
|
180
|
-
- 4 new triggers for automatic logging
|
|
181
|
-
|
|
182
|
-
**FR-006: Decision Templates**
|
|
183
|
-
- New table: t_decision_templates
|
|
184
|
-
- 5 built-in templates (breaking_change, security_vulnerability, performance_optimization, deprecation, architecture_decision)
|
|
185
|
-
|
|
186
|
-
**New Features:**
|
|
187
|
-
- Activity logging for all major operations
|
|
188
|
-
- Template-based decision creation
|
|
189
|
-
- Advanced query capabilities (FR-004)
|
|
190
|
-
- Batch operations (FR-005)
|
|
191
|
-
- Smart defaults with inference (FR-002)
|
|
192
|
-
- Lightweight update polling (FR-003)
|
|
193
|
-
- Standalone CLI query tool (FR-007)
|
|
194
|
-
|
|
195
|
-
This migration is safe and reversible via backup restoration.
|
|
196
|
-
`.trim();
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=add-v2.1.0-features.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-v2.1.0-features.js","sourceRoot":"","sources":["../../src/migrations/add-v2.1.0-features.ts"],"names":[],"mappings":"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"}
|