sqlew 3.8.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +251 -285
- package/README.md +150 -32
- package/assets/sample-agents/sqlew-architect.md +72 -17
- package/assets/sample-agents/sqlew-researcher.md +62 -1
- package/assets/sample-agents/sqlew-scrum-master.md +5 -1
- package/assets/sample-commands/README.md +57 -0
- package/assets/sample-commands/sqw-documentor.md +158 -0
- package/assets/sample-commands/sqw-plan.md +301 -0
- package/assets/sample-commands/sqw-research.md +298 -0
- package/assets/sample-commands/sqw-review.md +340 -0
- package/assets/sample-commands/sqw-scrum.md +423 -0
- package/assets/sample-commands/sqw-secretary.md +187 -0
- package/dist/adapters/sqlite-adapter.d.ts +0 -6
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +10 -14
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/cli/db-dump.d.ts +1 -1
- package/dist/cli/db-dump.d.ts.map +1 -1
- package/dist/cli/db-dump.js +1 -1
- package/dist/cli/db-dump.js.map +1 -1
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts +4 -0
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts.map +1 -0
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js +146 -0
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js.map +1 -0
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +22 -0
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js +106 -0
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +21 -0
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +106 -0
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +21 -0
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js +91 -0
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +1 -0
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +15 -0
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +270 -0
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +15 -0
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +241 -0
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts +16 -0
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js +168 -0
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts +14 -0
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js +228 -0
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts +14 -0
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js +237 -0
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +14 -0
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js +61 -0
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts +21 -0
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js +127 -0
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js.map +1 -0
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +15 -0
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js +69 -0
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +15 -0
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js +132 -0
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +18 -0
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js +47 -0
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts +20 -0
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js +119 -0
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js.map +1 -0
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +19 -0
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js +196 -0
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +1 -0
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts +22 -0
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js +375 -0
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/minimal-generator.d.ts.map +1 -1
- package/dist/config/minimal-generator.js +34 -0
- package/dist/config/minimal-generator.js.map +1 -1
- package/dist/config/types.d.ts +19 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +8 -0
- package/dist/config/types.js.map +1 -1
- package/dist/constants.d.ts +30 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +33 -0
- package/dist/constants.js.map +1 -1
- package/dist/database/initialization/cleanup.d.ts +1 -1
- package/dist/database/initialization/cleanup.d.ts.map +1 -1
- package/dist/database/initialization/cleanup.js +15 -1
- package/dist/database/initialization/cleanup.js.map +1 -1
- package/dist/database/initialization/init.d.ts.map +1 -1
- package/dist/database/initialization/init.js +3 -0
- package/dist/database/initialization/init.js.map +1 -1
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts +16 -0
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js +84 -0
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts +14 -0
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js +42 -0
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts +17 -0
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js +122 -0
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts +12 -0
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js +49 -0
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +12 -0
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +53 -0
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts +12 -0
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js +44 -0
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts +13 -0
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js +33 -0
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts +17 -0
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js +119 -0
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts +15 -0
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js +282 -0
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts +21 -0
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.js +83 -0
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts +22 -0
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js +94 -0
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts +19 -0
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js +120 -0
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts +14 -0
- package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts.map +1 -0
- package/dist/database/migrations/20251025070349_create_views_wrapper.js +160 -0
- package/dist/database/migrations/20251025070349_create_views_wrapper.js.map +1 -0
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts +9 -0
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js +21 -0
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts +13 -0
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js +17 -0
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts +27 -0
- package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/database/migrations/20251025090000_create_help_system_tables.js +120 -0
- package/dist/database/migrations/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts +18 -0
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js +388 -0
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts +20 -0
- package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/database/migrations/20251025100000_seed_help_metadata.js +264 -0
- package/dist/database/migrations/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts +21 -0
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js +281 -0
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts +13 -0
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js +76 -0
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts +17 -0
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.js +42 -0
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts +10 -0
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js +28 -0
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts +21 -0
- package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/database/migrations/20251027020000_update_agent_reusability.js +38 -0
- package/dist/database/migrations/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts +26 -0
- package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts.map +1 -0
- package/dist/database/migrations/20251028000000_simplify_agent_system.js +56 -0
- package/dist/database/migrations/20251028000000_simplify_agent_system.js.map +1 -0
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts +16 -0
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js +52 -0
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js.map +1 -0
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts +56 -0
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js +701 -0
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +30 -0
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js +180 -0
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
- package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts +19 -0
- package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts.map +1 -0
- package/dist/database/migrations/20251105000000_add_token_usage_table.js +47 -0
- package/dist/database/migrations/20251105000000_add_token_usage_table.js.map +1 -0
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +28 -0
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js +123 -0
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +36 -0
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +1 -0
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js +559 -0
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +1 -0
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts +26 -0
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts.map +1 -0
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js +78 -0
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js.map +1 -0
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +17 -0
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +1 -0
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js +78 -0
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +1 -0
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +24 -0
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +1 -0
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +63 -0
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +1 -0
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +27 -0
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +1 -0
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js +276 -0
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +1 -0
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +27 -0
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +1 -0
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js +67 -0
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +1 -0
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts +32 -0
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts.map +1 -0
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js +352 -0
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js.map +1 -0
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +35 -0
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +1 -0
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js +237 -0
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js.map +1 -0
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +22 -0
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js +190 -0
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts +32 -0
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js +342 -0
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +25 -0
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js +109 -0
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +24 -0
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +111 -0
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +24 -0
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +1 -0
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js +90 -0
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +1 -0
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +20 -0
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +275 -0
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +20 -0
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +246 -0
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts +23 -0
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js +175 -0
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts +21 -0
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js +235 -0
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts +21 -0
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js +244 -0
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +23 -0
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js +70 -0
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts +29 -0
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +1 -0
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js +135 -0
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js.map +1 -0
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +23 -0
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js +42 -0
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +25 -0
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js +102 -0
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +25 -0
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js +55 -0
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts +29 -0
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts.map +1 -0
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js +62 -0
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js.map +1 -0
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts +25 -0
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts.map +1 -0
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js +100 -0
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js.map +1 -0
- package/dist/init-commands.d.ts +7 -0
- package/dist/init-commands.d.ts.map +1 -0
- package/dist/init-commands.js +185 -0
- package/dist/init-commands.js.map +1 -0
- package/dist/schema.d.ts +11 -19
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +51 -63
- package/dist/schema.js.map +1 -1
- package/dist/server/tool-handlers.d.ts.map +1 -1
- package/dist/server/tool-handlers.js +20 -1
- package/dist/server/tool-handlers.js.map +1 -1
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +42 -1
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/sync-commands.d.ts +13 -0
- package/dist/sync-commands.d.ts.map +1 -0
- package/dist/sync-commands.js +115 -0
- package/dist/sync-commands.js.map +1 -0
- package/dist/tests/database/connection/connection-manager-integration.test.d.ts.map +1 -0
- package/dist/tests/{connection-manager-integration.test.js → database/connection/connection-manager-integration.test.js} +1 -1
- package/dist/tests/database/connection/connection-manager-integration.test.js.map +1 -0
- package/dist/tests/database/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/tests/{connection-manager.test.js → database/connection/connection-manager.test.js} +1 -1
- package/dist/tests/database/connection/connection-manager.test.js.map +1 -0
- package/dist/tests/database/migrations/idempotency.test.d.ts +2 -0
- package/dist/tests/database/migrations/idempotency.test.d.ts.map +1 -0
- package/dist/tests/{migration-idempotency.test.js → database/migrations/idempotency.test.js} +1 -1
- package/dist/tests/database/migrations/idempotency.test.js.map +1 -0
- package/dist/tests/database/migrations/upgrade-paths.test.d.ts +2 -0
- package/dist/tests/database/migrations/upgrade-paths.test.d.ts.map +1 -0
- package/dist/tests/{migration-upgrade-paths.test.js → database/migrations/upgrade-paths.test.js} +1 -1
- package/dist/tests/database/migrations/upgrade-paths.test.js.map +1 -0
- package/dist/tests/database/multi-project/multi-project.test.d.ts.map +1 -0
- package/dist/tests/{multi-project.test.js → database/multi-project/multi-project.test.js} +5 -5
- package/dist/tests/database/multi-project/multi-project.test.js.map +1 -0
- package/dist/tests/{sql-dump-converters.test.d.ts → database/sql-dump/converters.test.d.ts} +1 -1
- package/dist/tests/database/sql-dump/converters.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-converters.test.js → database/sql-dump/converters.test.js} +2 -2
- package/dist/tests/database/sql-dump/converters.test.js.map +1 -0
- package/dist/tests/{sql-dump-default-conversions.test.d.ts → database/sql-dump/default-conversions.test.d.ts} +1 -1
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-default-conversions.test.js → database/sql-dump/default-conversions.test.js} +2 -2
- package/dist/tests/database/sql-dump/default-conversions.test.js.map +1 -0
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts +27 -0
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-table-ordering.test.js → database/sql-dump/table-ordering.test.js} +34 -8
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -0
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts.map +1 -0
- package/dist/tests/{type-conversion.test.js → database/sql-dump/type-conversion.test.js} +1 -1
- package/dist/tests/database/sql-dump/type-conversion.test.js.map +1 -0
- package/dist/tests/database/testing-config.d.ts +105 -0
- package/dist/tests/database/testing-config.d.ts.map +1 -0
- package/dist/tests/database/testing-config.js +192 -0
- package/dist/tests/database/testing-config.js.map +1 -0
- package/dist/tests/{sql-dump-cross-database.test.d.ts → docker/cross-database.test.d.ts} +1 -1
- package/dist/tests/docker/cross-database.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-cross-database.test.js → docker/cross-database.test.js} +3 -3
- package/dist/tests/docker/cross-database.test.js.map +1 -0
- package/dist/tests/docker/dump-import.test.d.ts.map +1 -0
- package/dist/tests/{dump-import.test.js → docker/dump-import.test.js} +25 -31
- package/dist/tests/docker/dump-import.test.js.map +1 -0
- package/dist/tests/{sql-dump-fk-constraints.test.d.ts → docker/fk-constraints.test.d.ts} +1 -1
- package/dist/tests/docker/fk-constraints.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-fk-constraints.test.js → docker/fk-constraints.test.js} +3 -3
- package/dist/tests/docker/fk-constraints.test.js.map +1 -0
- package/dist/tests/{sql-dump-indexes.test.d.ts → docker/indexes.test.d.ts} +1 -1
- package/dist/tests/docker/indexes.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-indexes.test.js → docker/indexes.test.js} +10 -29
- package/dist/tests/docker/indexes.test.js.map +1 -0
- package/dist/tests/{sql-dump-integration.test.d.ts → docker/integration.test.d.ts} +1 -1
- package/dist/tests/docker/integration.test.d.ts.map +1 -0
- package/dist/tests/{sql-dump-integration.test.js → docker/integration.test.js} +9 -28
- package/dist/tests/docker/integration.test.js.map +1 -0
- package/dist/tests/docker/multi-project-migration.test.d.ts.map +1 -0
- package/dist/tests/{multi-project-migration.test.js → docker/multi-project-migration.test.js} +20 -8
- package/dist/tests/docker/multi-project-migration.test.js.map +1 -0
- package/dist/tests/docker/native/constraint-operations.test.d.ts +23 -0
- package/dist/tests/docker/native/constraint-operations.test.d.ts.map +1 -0
- package/dist/tests/docker/native/constraint-operations.test.js +693 -0
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -0
- package/dist/tests/docker/native/db-init.d.ts +59 -0
- package/dist/tests/docker/native/db-init.d.ts.map +1 -0
- package/dist/tests/docker/native/db-init.js +207 -0
- package/dist/tests/docker/native/db-init.js.map +1 -0
- package/dist/tests/docker/native/decision-operations.test.d.ts +16 -0
- package/dist/tests/docker/native/decision-operations.test.d.ts.map +1 -0
- package/dist/tests/docker/native/decision-operations.test.js +590 -0
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -0
- package/dist/tests/docker/native/help-system.test.d.ts +10 -0
- package/dist/tests/docker/native/help-system.test.d.ts.map +1 -0
- package/dist/tests/docker/native/help-system.test.js +568 -0
- package/dist/tests/docker/native/help-system.test.js.map +1 -0
- package/dist/tests/docker/native/suggest-tool.test.d.ts +16 -0
- package/dist/tests/docker/native/suggest-tool.test.d.ts.map +1 -0
- package/dist/tests/docker/native/suggest-tool.test.js +607 -0
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -0
- package/dist/tests/docker/native/task-operations.test.d.ts +16 -0
- package/dist/tests/docker/native/task-operations.test.d.ts.map +1 -0
- package/dist/tests/docker/native/task-operations.test.js +836 -0
- package/dist/tests/docker/native/task-operations.test.js.map +1 -0
- package/dist/tests/docker/native/test-harness.d.ts +129 -0
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -0
- package/dist/tests/docker/native/test-harness.js +314 -0
- package/dist/tests/docker/native/test-harness.js.map +1 -0
- package/dist/tests/docker/schema-migration.test.d.ts.map +1 -0
- package/dist/tests/{schema-migration.test.js → docker/schema-migration.test.js} +8 -18
- package/dist/tests/docker/schema-migration.test.js.map +1 -0
- package/dist/tests/feature/decision/analytics.test.d.ts +7 -0
- package/dist/tests/feature/decision/analytics.test.d.ts.map +1 -0
- package/dist/tests/feature/decision/analytics.test.js +140 -0
- package/dist/tests/feature/decision/analytics.test.js.map +1 -0
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.d.ts.map +1 -0
- package/dist/tests/{batch-validation-comprehensive.test.js → feature/decision/batch-validation-comprehensive.test.js} +5 -5
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -0
- package/dist/tests/feature/decision/batch-validation-integration.test.d.ts.map +1 -0
- package/dist/tests/{batch-validation-integration.test.js → feature/decision/batch-validation-integration.test.js} +3 -3
- package/dist/tests/feature/decision/batch-validation-integration.test.js.map +1 -0
- package/dist/tests/{decision-batch-validation.test.d.ts → feature/decision/batch-validation.test.d.ts} +1 -1
- package/dist/tests/feature/decision/batch-validation.test.d.ts.map +1 -0
- package/dist/tests/{decision-batch-validation.test.js → feature/decision/batch-validation.test.js} +4 -4
- package/dist/tests/feature/decision/batch-validation.test.js.map +1 -0
- package/dist/tests/feature/decision/context-modular.test.d.ts.map +1 -0
- package/dist/tests/{context-modular.test.js → feature/decision/context-modular.test.js} +17 -8
- package/dist/tests/feature/decision/context-modular.test.js.map +1 -0
- package/dist/tests/feature/help/help-system.test.d.ts.map +1 -0
- package/dist/tests/{help-system.test.js → feature/help/help-system.test.js} +9 -9
- package/dist/tests/feature/help/help-system.test.js.map +1 -0
- package/dist/tests/{tasks.auto-pruning-decision-link.test.d.ts → feature/task/auto-pruning-decision-link.test.d.ts} +1 -1
- package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts.map +1 -0
- package/dist/tests/{tasks.auto-pruning-decision-link.test.js → feature/task/auto-pruning-decision-link.test.js} +30 -8
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +1 -0
- package/dist/tests/{tasks.auto-pruning-partial.test.d.ts → feature/task/auto-pruning-partial.test.d.ts} +1 -1
- package/dist/tests/feature/task/auto-pruning-partial.test.d.ts.map +1 -0
- package/dist/tests/{tasks.auto-pruning-partial.test.js → feature/task/auto-pruning-partial.test.js} +26 -4
- package/dist/tests/feature/task/auto-pruning-partial.test.js.map +1 -0
- package/dist/tests/{tasks.auto-pruning-persistence.test.d.ts → feature/task/auto-pruning-persistence.test.d.ts} +1 -1
- package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts.map +1 -0
- package/dist/tests/{tasks.auto-pruning-persistence.test.js → feature/task/auto-pruning-persistence.test.js} +23 -3
- package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +1 -0
- package/dist/tests/{tasks.auto-pruning-safety.test.d.ts → feature/task/auto-pruning-safety.test.d.ts} +1 -1
- package/dist/tests/feature/task/auto-pruning-safety.test.d.ts.map +1 -0
- package/dist/tests/{tasks.auto-pruning-safety.test.js → feature/task/auto-pruning-safety.test.js} +46 -20
- package/dist/tests/feature/task/auto-pruning-safety.test.js.map +1 -0
- package/dist/tests/{tasks.dependencies.test.d.ts → feature/task/dependencies.test.d.ts} +1 -1
- package/dist/tests/feature/task/dependencies.test.d.ts.map +1 -0
- package/dist/tests/{tasks.dependencies.test.js → feature/task/dependencies.test.js} +46 -30
- package/dist/tests/feature/task/dependencies.test.js.map +1 -0
- package/dist/tests/{tasks.file-actions-integration.test.d.ts → feature/task/file-actions-integration.test.d.ts} +1 -1
- package/dist/tests/feature/task/file-actions-integration.test.d.ts.map +1 -0
- package/dist/tests/{tasks.file-actions-integration.test.js → feature/task/file-actions-integration.test.js} +6 -6
- package/dist/tests/feature/task/file-actions-integration.test.js.map +1 -0
- package/dist/tests/{tasks.file-actions-validation.test.d.ts → feature/task/file-actions-validation.test.d.ts} +1 -1
- package/dist/tests/feature/task/file-actions-validation.test.d.ts.map +1 -0
- package/dist/tests/{tasks.file-actions-validation.test.js → feature/task/file-actions-validation.test.js} +11 -4
- package/dist/tests/feature/task/file-actions-validation.test.js.map +1 -0
- package/dist/tests/{tasks.link-file-backward-compat.test.d.ts → feature/task/link-file-backward-compat.test.d.ts} +1 -1
- package/dist/tests/feature/task/link-file-backward-compat.test.d.ts.map +1 -0
- package/dist/tests/{tasks.link-file-backward-compat.test.js → feature/task/link-file-backward-compat.test.js} +65 -40
- package/dist/tests/feature/task/link-file-backward-compat.test.js.map +1 -0
- package/dist/tests/{tasks.watch-files-action.test.d.ts → feature/task/watch-files-action.test.d.ts} +3 -1
- package/dist/tests/feature/task/watch-files-action.test.d.ts.map +1 -0
- package/dist/tests/{tasks.watch-files-action.test.js → feature/task/watch-files-action.test.js} +58 -36
- package/dist/tests/feature/task/watch-files-action.test.js.map +1 -0
- package/dist/tests/{tasks.watch-files-parameter.test.d.ts → feature/task/watch-files-parameter.test.d.ts} +3 -1
- package/dist/tests/feature/task/watch-files-parameter.test.d.ts.map +1 -0
- package/dist/tests/{tasks.watch-files-parameter.test.js → feature/task/watch-files-parameter.test.js} +64 -39
- package/dist/tests/feature/task/watch-files-parameter.test.js.map +1 -0
- package/dist/tests/feature/vcs/git-aware-completion.test.d.ts.map +1 -0
- package/dist/tests/{git-aware-completion.test.js → feature/vcs/git-aware-completion.test.js} +25 -11
- package/dist/tests/feature/vcs/git-aware-completion.test.js.map +1 -0
- package/dist/tests/feature/vcs/two-step-git-completion.test.d.ts.map +1 -0
- package/dist/tests/{two-step-git-completion.test.js → feature/vcs/two-step-git-completion.test.js} +2 -2
- package/dist/tests/feature/vcs/two-step-git-completion.test.js.map +1 -0
- package/dist/tests/feature/vcs/vcs-staging.test.d.ts.map +1 -0
- package/dist/tests/{vcs-staging.test.js → feature/vcs/vcs-staging.test.js} +8 -3
- package/dist/tests/feature/vcs/vcs-staging.test.js.map +1 -0
- package/dist/tests/{all-features.test.d.ts → integration/all-features.standalone.d.ts} +1 -1
- package/dist/tests/integration/all-features.standalone.d.ts.map +1 -0
- package/dist/tests/{all-features.test.js → integration/all-features.standalone.js} +7 -9
- package/dist/tests/integration/all-features.standalone.js.map +1 -0
- package/dist/tests/integration/auto-trigger-suggestions.test.d.ts +7 -0
- package/dist/tests/integration/auto-trigger-suggestions.test.d.ts.map +1 -0
- package/dist/tests/integration/auto-trigger-suggestions.test.js +331 -0
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -0
- package/dist/tests/integration/decision-intelligence-e2e.test.d.ts +13 -0
- package/dist/tests/integration/decision-intelligence-e2e.test.d.ts.map +1 -0
- package/dist/tests/integration/decision-intelligence-e2e.test.js +558 -0
- package/dist/tests/integration/decision-intelligence-e2e.test.js.map +1 -0
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts +5 -0
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts.map +1 -0
- package/dist/tests/integration/e2e-workflow1-debug.test.js +99 -0
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +1 -0
- package/dist/tests/integration/hybrid-similarity-detection.test.d.ts +7 -0
- package/dist/tests/integration/hybrid-similarity-detection.test.d.ts.map +1 -0
- package/dist/tests/integration/hybrid-similarity-detection.test.js +512 -0
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -0
- package/dist/tests/integration/suggest-simple.test.d.ts +5 -0
- package/dist/tests/integration/suggest-simple.test.d.ts.map +1 -0
- package/dist/tests/integration/suggest-simple.test.js +72 -0
- package/dist/tests/integration/suggest-simple.test.js.map +1 -0
- package/dist/tests/unit/universal-knex.test.d.ts +2 -0
- package/dist/tests/unit/universal-knex.test.d.ts.map +1 -0
- package/dist/tests/unit/universal-knex.test.js +250 -0
- package/dist/tests/unit/universal-knex.test.js.map +1 -0
- package/dist/tests/unit/utils/config-loader.test.d.ts.map +1 -0
- package/dist/tests/{config-loader.test.js → unit/utils/config-loader.test.js} +63 -42
- package/dist/tests/unit/utils/config-loader.test.js.map +1 -0
- package/dist/tests/unit/utils/project-detector.test.d.ts.map +1 -0
- package/dist/tests/{project-detector.test.js → unit/utils/project-detector.test.js} +1 -1
- package/dist/tests/unit/utils/project-detector.test.js.map +1 -0
- package/dist/tests/unit/utils/semver.test.d.ts +2 -0
- package/dist/tests/unit/utils/semver.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/semver.test.js +72 -0
- package/dist/tests/unit/utils/semver.test.js.map +1 -0
- package/dist/tests/unit/validation/batch-validation.test.d.ts.map +1 -0
- package/dist/tests/{batch-validation.test.js → unit/validation/batch-validation.test.js} +2 -2
- package/dist/tests/unit/validation/batch-validation.test.js.map +1 -0
- package/dist/tests/unit/validation/parameter-validation.test.d.ts.map +1 -0
- package/dist/tests/{parameter-validation.test.js → unit/validation/parameter-validation.test.js} +9 -12
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -0
- package/dist/tests/unit/validation/policy-validation.test.d.ts +15 -0
- package/dist/tests/unit/validation/policy-validation.test.d.ts.map +1 -0
- package/dist/tests/unit/validation/policy-validation.test.js +343 -0
- package/dist/tests/unit/validation/policy-validation.test.js.map +1 -0
- package/dist/tests/utils/db-config.d.ts +21 -0
- package/dist/tests/utils/db-config.d.ts.map +1 -0
- package/dist/tests/utils/db-config.js +59 -0
- package/dist/tests/utils/db-config.js.map +1 -0
- package/dist/tests/utils/db-import.d.ts +11 -0
- package/dist/tests/utils/db-import.d.ts.map +1 -0
- package/dist/tests/utils/db-import.js +38 -0
- package/dist/tests/utils/db-import.js.map +1 -0
- package/dist/tests/utils/db-schema.d.ts +58 -0
- package/dist/tests/utils/db-schema.d.ts.map +1 -0
- package/dist/tests/utils/db-schema.js +218 -0
- package/dist/tests/utils/db-schema.js.map +1 -0
- package/dist/tests/utils/db-seeding.d.ts +18 -0
- package/dist/tests/utils/db-seeding.d.ts.map +1 -0
- package/dist/tests/utils/db-seeding.js +54 -0
- package/dist/tests/utils/db-seeding.js.map +1 -0
- package/dist/tests/utils/index.d.ts +20 -0
- package/dist/tests/utils/index.d.ts.map +1 -0
- package/dist/tests/utils/index.js +26 -0
- package/dist/tests/utils/index.js.map +1 -0
- package/dist/tests/utils/task-helpers.d.ts +67 -0
- package/dist/tests/utils/task-helpers.d.ts.map +1 -0
- package/dist/tests/utils/task-helpers.js +151 -0
- package/dist/tests/utils/task-helpers.js.map +1 -0
- package/dist/tests/utils/test-helpers.d.ts +93 -1
- package/dist/tests/utils/test-helpers.d.ts.map +1 -1
- package/dist/tests/utils/test-helpers.js +232 -64
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tests/utils/test-lifecycle.d.ts +52 -0
- package/dist/tests/utils/test-lifecycle.d.ts.map +1 -0
- package/dist/tests/utils/test-lifecycle.js +88 -0
- package/dist/tests/utils/test-lifecycle.js.map +1 -0
- package/dist/tools/context/actions/analytics.d.ts +88 -0
- package/dist/tools/context/actions/analytics.d.ts.map +1 -0
- package/dist/tools/context/actions/analytics.js +92 -0
- package/dist/tools/context/actions/analytics.js.map +1 -0
- package/dist/tools/context/actions/create-policy.d.ts +38 -0
- package/dist/tools/context/actions/create-policy.d.ts.map +1 -0
- package/dist/tools/context/actions/create-policy.js +87 -0
- package/dist/tools/context/actions/create-policy.js.map +1 -0
- package/dist/tools/context/actions/create-template.js +2 -2
- package/dist/tools/context/actions/create-template.js.map +1 -1
- package/dist/tools/context/actions/get.d.ts.map +1 -1
- package/dist/tools/context/actions/get.js +5 -4
- package/dist/tools/context/actions/get.js.map +1 -1
- package/dist/tools/context/actions/has-updates.d.ts.map +1 -1
- package/dist/tools/context/actions/has-updates.js +4 -19
- package/dist/tools/context/actions/has-updates.js.map +1 -1
- package/dist/tools/context/actions/list-policies.d.ts +31 -0
- package/dist/tools/context/actions/list-policies.d.ts.map +1 -0
- package/dist/tools/context/actions/list-policies.js +55 -0
- package/dist/tools/context/actions/list-policies.js.map +1 -0
- package/dist/tools/context/actions/list-templates.d.ts.map +1 -1
- package/dist/tools/context/actions/list-templates.js +2 -1
- package/dist/tools/context/actions/list-templates.js.map +1 -1
- package/dist/tools/context/actions/list.d.ts +1 -1
- package/dist/tools/context/actions/list.d.ts.map +1 -1
- package/dist/tools/context/actions/list.js +24 -18
- package/dist/tools/context/actions/list.js.map +1 -1
- package/dist/tools/context/actions/search-advanced.d.ts.map +1 -1
- package/dist/tools/context/actions/search-advanced.js +61 -42
- package/dist/tools/context/actions/search-advanced.js.map +1 -1
- package/dist/tools/context/actions/search-layer.d.ts.map +1 -1
- package/dist/tools/context/actions/search-layer.js +16 -7
- package/dist/tools/context/actions/search-layer.js.map +1 -1
- package/dist/tools/context/actions/search-tags.d.ts.map +1 -1
- package/dist/tools/context/actions/search-tags.js +22 -14
- package/dist/tools/context/actions/search-tags.js.map +1 -1
- package/dist/tools/context/actions/set-from-policy.d.ts +28 -0
- package/dist/tools/context/actions/set-from-policy.d.ts.map +1 -0
- package/dist/tools/context/actions/set-from-policy.js +54 -0
- package/dist/tools/context/actions/set-from-policy.js.map +1 -0
- package/dist/tools/context/actions/set-from-template.d.ts.map +1 -1
- package/dist/tools/context/actions/set-from-template.js +2 -1
- package/dist/tools/context/actions/set-from-template.js.map +1 -1
- package/dist/tools/context/index.d.ts +5 -0
- package/dist/tools/context/index.d.ts.map +1 -1
- package/dist/tools/context/index.js +5 -0
- package/dist/tools/context/index.js.map +1 -1
- package/dist/tools/context/internal/queries.d.ts.map +1 -1
- package/dist/tools/context/internal/queries.js +551 -31
- package/dist/tools/context/internal/queries.js.map +1 -1
- package/dist/tools/context/internal/validation.d.ts +4 -0
- package/dist/tools/context/internal/validation.d.ts.map +1 -1
- package/dist/tools/context/internal/validation.js +13 -0
- package/dist/tools/context/internal/validation.js.map +1 -1
- package/dist/tools/help/actions/query-action.js +1 -1
- package/dist/tools/help/actions/query-action.js.map +1 -1
- package/dist/tools/help/actions/query-params.js +1 -1
- package/dist/tools/help/actions/query-params.js.map +1 -1
- package/dist/tools/help/actions/query-tool.js +1 -1
- package/dist/tools/help/actions/query-tool.js.map +1 -1
- package/dist/tools/help-queries.d.ts +12 -12
- package/dist/tools/help-queries.d.ts.map +1 -1
- package/dist/tools/help-queries.js +121 -140
- package/dist/tools/help-queries.js.map +1 -1
- package/dist/tools/suggest/actions/by-context.d.ts +28 -0
- package/dist/tools/suggest/actions/by-context.d.ts.map +1 -0
- package/dist/tools/suggest/actions/by-context.js +68 -0
- package/dist/tools/suggest/actions/by-context.js.map +1 -0
- package/dist/tools/suggest/actions/by-key.d.ts +20 -0
- package/dist/tools/suggest/actions/by-key.d.ts.map +1 -0
- package/dist/tools/suggest/actions/by-key.js +55 -0
- package/dist/tools/suggest/actions/by-key.js.map +1 -0
- package/dist/tools/suggest/actions/by-tags.d.ts +23 -0
- package/dist/tools/suggest/actions/by-tags.d.ts.map +1 -0
- package/dist/tools/suggest/actions/by-tags.js +58 -0
- package/dist/tools/suggest/actions/by-tags.js.map +1 -0
- package/dist/tools/suggest/actions/check-duplicate.d.ts +20 -0
- package/dist/tools/suggest/actions/check-duplicate.d.ts.map +1 -0
- package/dist/tools/suggest/actions/check-duplicate.js +59 -0
- package/dist/tools/suggest/actions/check-duplicate.js.map +1 -0
- package/dist/tools/suggest/help/help.d.ts +5 -0
- package/dist/tools/suggest/help/help.d.ts.map +1 -0
- package/dist/tools/suggest/help/help.js +50 -0
- package/dist/tools/suggest/help/help.js.map +1 -0
- package/dist/tools/suggest/index.d.ts +18 -0
- package/dist/tools/suggest/index.d.ts.map +1 -0
- package/dist/tools/suggest/index.js +55 -0
- package/dist/tools/suggest/index.js.map +1 -0
- package/dist/tools/suggest/internal/queries.d.ts +60 -0
- package/dist/tools/suggest/internal/queries.d.ts.map +1 -0
- package/dist/tools/suggest/internal/queries.js +154 -0
- package/dist/tools/suggest/internal/queries.js.map +1 -0
- package/dist/tools/suggest/types.d.ts +70 -0
- package/dist/tools/suggest/types.d.ts.map +1 -0
- package/dist/tools/suggest/types.js +5 -0
- package/dist/tools/suggest/types.js.map +1 -0
- package/dist/tools/tasks/actions/link-pruned-file.d.ts +1 -0
- package/dist/tools/tasks/actions/link-pruned-file.d.ts.map +1 -1
- package/dist/tools/tasks/actions/link-pruned-file.js +7 -2
- package/dist/tools/tasks/actions/link-pruned-file.js.map +1 -1
- package/dist/tools/tasks/actions/link.d.ts.map +1 -1
- package/dist/tools/tasks/actions/link.js +4 -2
- package/dist/tools/tasks/actions/link.js.map +1 -1
- package/dist/tools/tasks/actions/list.d.ts.map +1 -1
- package/dist/tools/tasks/actions/list.js +37 -35
- package/dist/tools/tasks/actions/list.js.map +1 -1
- package/dist/tools/use_case/actions/search.d.ts +1 -1
- package/dist/tools/use_case/actions/search.d.ts.map +1 -1
- package/dist/tools/use_case/actions/search.js +31 -40
- package/dist/tools/use_case/actions/search.js.map +1 -1
- package/dist/types/actions.d.ts +10 -0
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/decision/params.d.ts +7 -0
- package/dist/types/decision/params.d.ts.map +1 -1
- package/dist/types/decision/responses.d.ts +38 -0
- package/dist/types/decision/responses.d.ts.map +1 -1
- package/dist/types/view-entities.d.ts +1 -0
- package/dist/types/view-entities.d.ts.map +1 -1
- package/dist/types.d.ts +154 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-specs/decision-specs.js +3 -3
- package/dist/utils/action-specs/decision-specs.js.map +1 -1
- package/dist/utils/activity-logging.d.ts.map +1 -1
- package/dist/utils/activity-logging.js +7 -0
- package/dist/utils/activity-logging.js.map +1 -1
- package/dist/utils/db-aggregations.d.ts +88 -0
- package/dist/utils/db-aggregations.d.ts.map +1 -0
- package/dist/utils/db-aggregations.js +158 -0
- package/dist/utils/db-aggregations.js.map +1 -0
- package/dist/utils/file-pruning.d.ts +37 -13
- package/dist/utils/file-pruning.d.ts.map +1 -1
- package/dist/utils/file-pruning.js +93 -84
- package/dist/utils/file-pruning.js.map +1 -1
- package/dist/utils/policy-validator.d.ts +37 -0
- package/dist/utils/policy-validator.d.ts.map +1 -0
- package/dist/utils/policy-validator.js +240 -0
- package/dist/utils/policy-validator.js.map +1 -0
- package/dist/utils/quality-checks.d.ts +7 -7
- package/dist/utils/quality-checks.d.ts.map +1 -1
- package/dist/utils/quality-checks.js +18 -21
- package/dist/utils/quality-checks.js.map +1 -1
- package/dist/utils/semver.d.ts +50 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +78 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/sql-dump/schema/tables.d.ts.map +1 -1
- package/dist/utils/sql-dump/schema/tables.js +125 -7
- package/dist/utils/sql-dump/schema/tables.js.map +1 -1
- package/dist/utils/sql-dump/schema/views.d.ts.map +1 -1
- package/dist/utils/sql-dump/schema/views.js +6 -0
- package/dist/utils/sql-dump/schema/views.js.map +1 -1
- package/dist/utils/suggestion-scorer.d.ts +62 -0
- package/dist/utils/suggestion-scorer.d.ts.map +1 -0
- package/dist/utils/suggestion-scorer.js +169 -0
- package/dist/utils/suggestion-scorer.js.map +1 -0
- package/dist/utils/tag-parser.d.ts +52 -0
- package/dist/utils/tag-parser.d.ts.map +1 -0
- package/dist/utils/tag-parser.js +65 -0
- package/dist/utils/tag-parser.js.map +1 -0
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +40 -4
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-logging.d.ts +9 -9
- package/dist/utils/token-logging.d.ts.map +1 -1
- package/dist/utils/token-logging.js +36 -38
- package/dist/utils/token-logging.js.map +1 -1
- package/dist/utils/universal-knex.d.ts +169 -0
- package/dist/utils/universal-knex.d.ts.map +1 -0
- package/dist/utils/universal-knex.js +318 -0
- package/dist/utils/universal-knex.js.map +1 -0
- package/dist/utils/validators.d.ts +2 -2
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +3 -2
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/vcs-adapter.d.ts.map +1 -1
- package/dist/utils/vcs-adapter.js +21 -14
- package/dist/utils/vcs-adapter.js.map +1 -1
- package/dist/utils/view-queries.d.ts +11 -3
- package/dist/utils/view-queries.d.ts.map +1 -1
- package/dist/utils/view-queries.js +122 -87
- package/dist/utils/view-queries.js.map +1 -1
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +99 -84
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/BEST_PRACTICES.md +10 -0
- package/docs/DECISION_CONTEXT.md +190 -1
- package/docs/DECISION_INTELLIGENCE.md +594 -0
- package/docs/MIGRATION_GUIDE_V3.9.0.md +371 -0
- package/docs/SLASH_COMMANDS.md +652 -0
- package/docs/TOOL_REFERENCE.md +164 -22
- package/docs/TOOL_SELECTION.md +16 -2
- package/docs/WORKFLOWS.md +163 -0
- package/docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md +296 -0
- package/package.json +37 -12
- package/scripts/check-cross-db-patterns.sh +105 -0
- package/scripts/filter-test-output.js +74 -0
- package/scripts/verify-migrations.sh +129 -0
- package/dist/tests/all-features.test.d.ts.map +0 -1
- package/dist/tests/all-features.test.js.map +0 -1
- package/dist/tests/batch-validation-comprehensive.test.d.ts.map +0 -1
- package/dist/tests/batch-validation-comprehensive.test.js.map +0 -1
- package/dist/tests/batch-validation-integration.test.d.ts.map +0 -1
- package/dist/tests/batch-validation-integration.test.js.map +0 -1
- package/dist/tests/batch-validation.test.d.ts.map +0 -1
- package/dist/tests/batch-validation.test.js.map +0 -1
- package/dist/tests/config-loader.test.d.ts.map +0 -1
- package/dist/tests/config-loader.test.js.map +0 -1
- package/dist/tests/connection-manager-integration.test.d.ts.map +0 -1
- package/dist/tests/connection-manager-integration.test.js.map +0 -1
- package/dist/tests/connection-manager.test.d.ts.map +0 -1
- package/dist/tests/connection-manager.test.js.map +0 -1
- package/dist/tests/context-modular.test.d.ts.map +0 -1
- package/dist/tests/context-modular.test.js.map +0 -1
- package/dist/tests/decision-batch-validation.test.d.ts.map +0 -1
- package/dist/tests/decision-batch-validation.test.js.map +0 -1
- package/dist/tests/dump-import.test.d.ts.map +0 -1
- package/dist/tests/dump-import.test.js.map +0 -1
- package/dist/tests/git-aware-completion.test.d.ts.map +0 -1
- package/dist/tests/git-aware-completion.test.js.map +0 -1
- package/dist/tests/help-system.test.d.ts.map +0 -1
- package/dist/tests/help-system.test.js.map +0 -1
- package/dist/tests/migration-idempotency.test.d.ts +0 -2
- package/dist/tests/migration-idempotency.test.d.ts.map +0 -1
- package/dist/tests/migration-idempotency.test.js.map +0 -1
- package/dist/tests/migration-upgrade-paths.test.d.ts +0 -2
- package/dist/tests/migration-upgrade-paths.test.d.ts.map +0 -1
- package/dist/tests/migration-upgrade-paths.test.js.map +0 -1
- package/dist/tests/multi-project-migration.test.d.ts.map +0 -1
- package/dist/tests/multi-project-migration.test.js.map +0 -1
- package/dist/tests/multi-project.test.d.ts.map +0 -1
- package/dist/tests/multi-project.test.js.map +0 -1
- package/dist/tests/parameter-validation.test.d.ts.map +0 -1
- package/dist/tests/parameter-validation.test.js.map +0 -1
- package/dist/tests/project-detector.test.d.ts.map +0 -1
- package/dist/tests/project-detector.test.js.map +0 -1
- package/dist/tests/schema-migration.test.d.ts.map +0 -1
- package/dist/tests/schema-migration.test.js.map +0 -1
- package/dist/tests/sql-dump-converters.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-converters.test.js.map +0 -1
- package/dist/tests/sql-dump-cross-database.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-cross-database.test.js.map +0 -1
- package/dist/tests/sql-dump-default-conversions.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-default-conversions.test.js.map +0 -1
- package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-fk-constraints.test.js.map +0 -1
- package/dist/tests/sql-dump-indexes.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-indexes.test.js.map +0 -1
- package/dist/tests/sql-dump-integration.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-integration.test.js.map +0 -1
- package/dist/tests/sql-dump-table-ordering.test.d.ts +0 -8
- package/dist/tests/sql-dump-table-ordering.test.d.ts.map +0 -1
- package/dist/tests/sql-dump-table-ordering.test.js.map +0 -1
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +0 -1
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +0 -1
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +0 -1
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +0 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +0 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +0 -1
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +0 -1
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +0 -1
- package/dist/tests/tasks.dependencies.test.d.ts.map +0 -1
- package/dist/tests/tasks.dependencies.test.js.map +0 -1
- package/dist/tests/tasks.file-actions-integration.test.d.ts.map +0 -1
- package/dist/tests/tasks.file-actions-integration.test.js.map +0 -1
- package/dist/tests/tasks.file-actions-validation.test.d.ts.map +0 -1
- package/dist/tests/tasks.file-actions-validation.test.js.map +0 -1
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +0 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +0 -1
- package/dist/tests/tasks.watch-files-action.test.d.ts.map +0 -1
- package/dist/tests/tasks.watch-files-action.test.js.map +0 -1
- package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +0 -1
- package/dist/tests/tasks.watch-files-parameter.test.js.map +0 -1
- package/dist/tests/two-step-git-completion.test.d.ts.map +0 -1
- package/dist/tests/two-step-git-completion.test.js.map +0 -1
- package/dist/tests/type-conversion.test.d.ts.map +0 -1
- package/dist/tests/type-conversion.test.js.map +0 -1
- package/dist/tests/vcs-staging.test.d.ts.map +0 -1
- package/dist/tests/vcs-staging.test.js.map +0 -1
- package/dist/utils/sql-dump.d.ts +0 -102
- package/dist/utils/sql-dump.d.ts.map +0 -1
- package/dist/utils/sql-dump.js +0 -1590
- package/dist/utils/sql-dump.js.map +0 -1
- /package/dist/tests/{connection-manager-integration.test.d.ts → database/connection/connection-manager-integration.test.d.ts} +0 -0
- /package/dist/tests/{connection-manager.test.d.ts → database/connection/connection-manager.test.d.ts} +0 -0
- /package/dist/tests/{multi-project.test.d.ts → database/multi-project/multi-project.test.d.ts} +0 -0
- /package/dist/tests/{type-conversion.test.d.ts → database/sql-dump/type-conversion.test.d.ts} +0 -0
- /package/dist/tests/{dump-import.test.d.ts → docker/dump-import.test.d.ts} +0 -0
- /package/dist/tests/{multi-project-migration.test.d.ts → docker/multi-project-migration.test.d.ts} +0 -0
- /package/dist/tests/{schema-migration.test.d.ts → docker/schema-migration.test.d.ts} +0 -0
- /package/dist/tests/{batch-validation-comprehensive.test.d.ts → feature/decision/batch-validation-comprehensive.test.d.ts} +0 -0
- /package/dist/tests/{batch-validation-integration.test.d.ts → feature/decision/batch-validation-integration.test.d.ts} +0 -0
- /package/dist/tests/{context-modular.test.d.ts → feature/decision/context-modular.test.d.ts} +0 -0
- /package/dist/tests/{help-system.test.d.ts → feature/help/help-system.test.d.ts} +0 -0
- /package/dist/tests/{git-aware-completion.test.d.ts → feature/vcs/git-aware-completion.test.d.ts} +0 -0
- /package/dist/tests/{two-step-git-completion.test.d.ts → feature/vcs/two-step-git-completion.test.d.ts} +0 -0
- /package/dist/tests/{vcs-staging.test.d.ts → feature/vcs/vcs-staging.test.d.ts} +0 -0
- /package/dist/tests/{config-loader.test.d.ts → unit/utils/config-loader.test.d.ts} +0 -0
- /package/dist/tests/{project-detector.test.d.ts → unit/utils/project-detector.test.d.ts} +0 -0
- /package/dist/tests/{batch-validation.test.d.ts → unit/validation/batch-validation.test.d.ts} +0 -0
- /package/dist/tests/{parameter-validation.test.d.ts → unit/validation/parameter-validation.test.d.ts} +0 -0
|
@@ -0,0 +1,701 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converted from: src/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.ts
|
|
3
|
+
* Line count: 1152 lines → ~1100 lines (5% reduction - SQLite-specific migration with extensive table recreation)
|
|
4
|
+
*
|
|
5
|
+
* Migration: Multi-Project Support v3.7.0 (Consolidated)
|
|
6
|
+
*
|
|
7
|
+
* Consolidates 4 separate migrations into a single comprehensive migration:
|
|
8
|
+
* - 20251101000000_add_multi_project_support (enhancements)
|
|
9
|
+
* - 20251104000000_multi_project_support_v3_7_0 (upgrades)
|
|
10
|
+
* - 20251104000001_multi_project_fix_constraints (upgrades)
|
|
11
|
+
* - 20251104000002_hotfix_missing_project_id (upgrades)
|
|
12
|
+
*
|
|
13
|
+
* Adds multi-project isolation support by:
|
|
14
|
+
* 1. Creating m_projects master table
|
|
15
|
+
* 2. Adding project_id to all transaction tables (14 tables)
|
|
16
|
+
* 3. Updating PRIMARY KEY constraints to composite (key_id, project_id)
|
|
17
|
+
* 4. Recreating m_config table with proper PRIMARY KEY structure
|
|
18
|
+
* 5. Adding indexes for multi-project queries
|
|
19
|
+
* 6. Recreating all views with project_id support
|
|
20
|
+
*
|
|
21
|
+
* Migration Steps:
|
|
22
|
+
* - STEP 1: Create m_projects table
|
|
23
|
+
* - STEP 2: Drop all views and triggers before modifications
|
|
24
|
+
* - STEP 3: Add project_id via ALTER TABLE (10 tables)
|
|
25
|
+
* - STEP 4: Fix PRIMARY KEY constraints (composite keys)
|
|
26
|
+
* - STEP 4a-4b: Recreate t_decisions tables with composite PRIMARY KEY
|
|
27
|
+
* - STEP 4.5: Recreate t_task_tags with composite PRIMARY KEY
|
|
28
|
+
* - STEP 4.6: Recreate t_task_dependencies with composite PRIMARY KEY
|
|
29
|
+
* - STEP 4.7: Recreate t_task_details with project_id (ALTER TABLE fails due to FK constraints)
|
|
30
|
+
* - STEP 4.8: Recreate t_task_file_links with project_id (ALTER TABLE fails due to FK constraints)
|
|
31
|
+
* - STEP 4.9: Recreate t_task_decision_links with project_id (ALTER TABLE fails due to FK constraints)
|
|
32
|
+
* - STEP 5: Recreate m_config table
|
|
33
|
+
* - STEP 6: Create composite indexes
|
|
34
|
+
* - STEP 7: Recreate all views with project_id support
|
|
35
|
+
* - STEP 8: Re-enable foreign key constraints
|
|
36
|
+
*
|
|
37
|
+
* SQLite Limitation Note:
|
|
38
|
+
* ALTER TABLE cannot modify tables with complex FOREIGN KEY constraints (ON DELETE CASCADE).
|
|
39
|
+
* Tables requiring recreation: t_task_details, t_task_tags, t_task_file_links,
|
|
40
|
+
* t_task_decision_links, t_task_dependencies.
|
|
41
|
+
*
|
|
42
|
+
* Satisfies Constraints:
|
|
43
|
+
* - #22 (CRITICAL): All transaction tables have project_id
|
|
44
|
+
* - #23 (CRITICAL): m_projects table with name/detection_source
|
|
45
|
+
* - #39 (HIGH): Composite indexes with project_id first
|
|
46
|
+
* - #41 (HIGH): t_task_tags composite PRIMARY KEY
|
|
47
|
+
* - #42 (HIGH): t_task_dependencies composite PRIMARY KEY
|
|
48
|
+
*
|
|
49
|
+
* NOTE: This migration is SQLite-specific and contains extensive table recreation logic.
|
|
50
|
+
* The Universal Knex Wrapper provides limited benefits due to SQLite-specific operations.
|
|
51
|
+
* MySQL/PostgreSQL compatibility is handled by separate migration 20251109000002.
|
|
52
|
+
*/
|
|
53
|
+
import { UniversalKnex } from "../../utils/universal-knex.js";
|
|
54
|
+
import { detectProjectNameSync } from "../../utils/project-detector.js";
|
|
55
|
+
export async function up(knex) {
|
|
56
|
+
const db = new UniversalKnex(knex);
|
|
57
|
+
// **BUG FIX v3.7.5**: This migration is SQLite-specific
|
|
58
|
+
// MySQL/PostgreSQL compatibility handled by 20251109000002_multi_project_cross_db_compat_v3_7_5.ts
|
|
59
|
+
if (!db.isSQLite) {
|
|
60
|
+
console.log(`✓ Non-SQLite database detected, skipping (handled by 20251109000002)`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Check if migration already completed
|
|
64
|
+
const hasProjectsTable = await knex.schema.hasTable("m_projects");
|
|
65
|
+
const hasProjectIdInDecisions = await knex.schema.hasColumn("t_decisions", "project_id");
|
|
66
|
+
const hasMigrationMarker = await knex.schema.hasTable("_multi_project_pk_fixed");
|
|
67
|
+
console.log(`🔍 Multi-project migration check:`);
|
|
68
|
+
console.log(` - m_projects: ${hasProjectsTable}`);
|
|
69
|
+
console.log(` - project_id in t_decisions: ${hasProjectIdInDecisions}`);
|
|
70
|
+
console.log(` - migration marker: ${hasMigrationMarker}`);
|
|
71
|
+
// If fully migrated, skip
|
|
72
|
+
if (hasProjectsTable && hasProjectIdInDecisions && hasMigrationMarker) {
|
|
73
|
+
console.log("✓ Multi-project schema already migrated, skipping");
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.log("🔄 Starting multi-project support migration v3.7.0 (consolidated)...");
|
|
77
|
+
// Disable foreign key constraints temporarily for SQLite
|
|
78
|
+
await knex.raw("PRAGMA foreign_keys = OFF");
|
|
79
|
+
console.log("✓ Disabled foreign key constraints");
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// STEP 1: Create m_projects Master Table
|
|
82
|
+
// ============================================================================
|
|
83
|
+
let defaultProjectId;
|
|
84
|
+
// Detect real project name (v3.7.3 fix)
|
|
85
|
+
const projectRoot = process.cwd();
|
|
86
|
+
const detected = detectProjectNameSync(projectRoot);
|
|
87
|
+
if (!hasProjectsTable) {
|
|
88
|
+
await knex.schema.createTable("m_projects", (table) => {
|
|
89
|
+
table.increments("id").primary();
|
|
90
|
+
table.string("name", 64).notNullable().unique();
|
|
91
|
+
table.string("display_name", 128);
|
|
92
|
+
table.string("detection_source", 20).notNullable(); // 'cli' | 'config' | 'git' | 'metadata' | 'directory'
|
|
93
|
+
table.string("project_root_path", 512);
|
|
94
|
+
table.integer("created_ts").notNullable();
|
|
95
|
+
table.integer("last_active_ts").notNullable();
|
|
96
|
+
table.text("metadata"); // JSON string for extensibility
|
|
97
|
+
});
|
|
98
|
+
// Insert project with REAL detected name (v3.7.3 fix)
|
|
99
|
+
const now = Math.floor(Date.now() / 1000);
|
|
100
|
+
await knex("m_projects").insert({
|
|
101
|
+
id: 1,
|
|
102
|
+
name: detected.name,
|
|
103
|
+
display_name: detected.name,
|
|
104
|
+
detection_source: detected.source,
|
|
105
|
+
created_ts: now,
|
|
106
|
+
last_active_ts: now,
|
|
107
|
+
});
|
|
108
|
+
defaultProjectId = 1;
|
|
109
|
+
console.log(`✓ Created m_projects table with project "${detected.name}" (ID: ${defaultProjectId}, source: ${detected.source})`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// ========================================================================
|
|
113
|
+
// Data Consolidation Strategy (v3.7.3 fix)
|
|
114
|
+
// ========================================================================
|
|
115
|
+
// Goal: Consolidate everything into project ID 1 with correct name
|
|
116
|
+
//
|
|
117
|
+
// This ONLY runs if upgrading from v3.7.0-v3.7.2 where:
|
|
118
|
+
// - Project #1 was created with fake name "default" or "default-project"
|
|
119
|
+
// - User manually created project #2 with real project name
|
|
120
|
+
//
|
|
121
|
+
// For fresh installs, project #1 is created with real name above,
|
|
122
|
+
// so consolidation is skipped.
|
|
123
|
+
const existingProject1 = await knex("m_projects")
|
|
124
|
+
.where({ id: 1 })
|
|
125
|
+
.first();
|
|
126
|
+
const existingProject2 = await knex("m_projects")
|
|
127
|
+
.where({ id: 2 })
|
|
128
|
+
.first();
|
|
129
|
+
const FAKE_NAMES = ["default-project", "default"];
|
|
130
|
+
// Check if this is a v3.7.0-v3.7.2 upgrade scenario
|
|
131
|
+
// (project #1 has fake name AND project #2 exists)
|
|
132
|
+
const isV370UpgradeScenario = existingProject1 && existingProject2 && FAKE_NAMES.includes(existingProject1.name);
|
|
133
|
+
// Perform consolidation ONLY for v3.7.0-v3.7.2 upgrades
|
|
134
|
+
if (isV370UpgradeScenario) {
|
|
135
|
+
console.log(`🔄 Detected v3.7.0-v3.7.2 upgrade scenario - consolidating projects...`);
|
|
136
|
+
console.log(` Project #1: "${existingProject1.name}" (fake name, empty)`);
|
|
137
|
+
console.log(` Project #2: "${existingProject2.name}" (real project, has data)`);
|
|
138
|
+
console.log(`🔄 Consolidating project #2 into project #1...`);
|
|
139
|
+
// STEP 1: Temporarily rename project #2 to avoid conflict
|
|
140
|
+
const tempName = `temp-${existingProject2.name}-${Date.now()}`;
|
|
141
|
+
await knex("m_projects").where({ id: 2 }).update({ name: tempName });
|
|
142
|
+
console.log(` ✓ Temporarily renamed project #2 to "${tempName}"`);
|
|
143
|
+
// STEP 2: Rename project #1 to real detected name
|
|
144
|
+
await knex("m_projects")
|
|
145
|
+
.where({ id: 1 })
|
|
146
|
+
.update({
|
|
147
|
+
name: detected.name,
|
|
148
|
+
display_name: detected.name,
|
|
149
|
+
detection_source: detected.source,
|
|
150
|
+
last_active_ts: Math.floor(Date.now() / 1000),
|
|
151
|
+
});
|
|
152
|
+
console.log(` ✓ Renamed project #1 from "${existingProject1.name}" to "${detected.name}"`);
|
|
153
|
+
// STEP 3: Migrate ALL data from project_id=2 → 1
|
|
154
|
+
const tablesToUpdate = [
|
|
155
|
+
"t_decisions",
|
|
156
|
+
"t_decisions_numeric",
|
|
157
|
+
"t_decision_history",
|
|
158
|
+
"t_decision_tags",
|
|
159
|
+
"t_decision_scopes",
|
|
160
|
+
"t_file_changes",
|
|
161
|
+
"t_constraints",
|
|
162
|
+
"t_tasks",
|
|
163
|
+
"t_task_tags",
|
|
164
|
+
"t_task_dependencies",
|
|
165
|
+
"t_task_details",
|
|
166
|
+
"t_task_file_links",
|
|
167
|
+
"t_task_decision_links",
|
|
168
|
+
"t_activity_log",
|
|
169
|
+
"t_decision_context",
|
|
170
|
+
];
|
|
171
|
+
for (const tableName of tablesToUpdate) {
|
|
172
|
+
const hasTable = await knex.schema.hasTable(tableName);
|
|
173
|
+
if (hasTable) {
|
|
174
|
+
const hasProjectId = await knex.schema.hasColumn(tableName, "project_id");
|
|
175
|
+
if (hasProjectId) {
|
|
176
|
+
const count = await knex(tableName).where({ project_id: 2 }).update({ project_id: 1 });
|
|
177
|
+
if (count > 0) {
|
|
178
|
+
console.log(` ✓ Migrated ${count} rows in ${tableName} (project_id: 2→1)`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// STEP 4: Delete project #2
|
|
184
|
+
await knex("m_projects").where({ id: 2 }).delete();
|
|
185
|
+
console.log(` ✓ Deleted project #2 (data consolidated into project #1)`);
|
|
186
|
+
console.log(`✅ Consolidation complete - all data now in project #1 "${detected.name}"`);
|
|
187
|
+
}
|
|
188
|
+
else if (existingProject1 && FAKE_NAMES.includes(existingProject1.name)) {
|
|
189
|
+
// No project #2, just rename project #1
|
|
190
|
+
console.log(`🔄 Renaming project #1 from "${existingProject1.name}" to "${detected.name}"`);
|
|
191
|
+
await knex("m_projects")
|
|
192
|
+
.where({ id: 1 })
|
|
193
|
+
.update({
|
|
194
|
+
name: detected.name,
|
|
195
|
+
display_name: detected.name,
|
|
196
|
+
detection_source: detected.source,
|
|
197
|
+
last_active_ts: Math.floor(Date.now() / 1000),
|
|
198
|
+
});
|
|
199
|
+
console.log(`✓ Project #1 renamed to "${detected.name}" (source: ${detected.source})`);
|
|
200
|
+
}
|
|
201
|
+
else if (existingProject1) {
|
|
202
|
+
// User already has real name, don't change it
|
|
203
|
+
console.log(`✓ Using existing project "${existingProject1.name}" (ID: 1)`);
|
|
204
|
+
}
|
|
205
|
+
// Always use project ID 1 after consolidation
|
|
206
|
+
defaultProjectId = 1;
|
|
207
|
+
}
|
|
208
|
+
// ============================================================================
|
|
209
|
+
// STEP 2: Drop All Views and Triggers (Before Table Modifications)
|
|
210
|
+
// ============================================================================
|
|
211
|
+
// Drop ALL views (including old schema views)
|
|
212
|
+
const views = await knex.raw(`SELECT name FROM sqlite_master WHERE type='view'`);
|
|
213
|
+
for (const view of views) {
|
|
214
|
+
await knex.raw(`DROP VIEW IF EXISTS ${view.name}`);
|
|
215
|
+
}
|
|
216
|
+
console.log(`✓ Dropped all ${views.length} views before table modifications`);
|
|
217
|
+
// Drop ALL triggers (old schema compatibility)
|
|
218
|
+
const triggers = await knex.raw(`SELECT name FROM sqlite_master WHERE type='trigger'`);
|
|
219
|
+
for (const trigger of triggers) {
|
|
220
|
+
await knex.raw(`DROP TRIGGER IF EXISTS ${trigger.name}`);
|
|
221
|
+
}
|
|
222
|
+
console.log(`✓ Dropped all ${triggers.length} triggers before table modifications`);
|
|
223
|
+
// Drop old t_agent_messages table if exists (removed in v3.6.5)
|
|
224
|
+
await knex.schema.dropTableIfExists("t_agent_messages");
|
|
225
|
+
console.log("✓ Dropped t_agent_messages if it existed (removed in v3.6.5)");
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// STEP 3: Add project_id to Transaction Tables
|
|
228
|
+
// ============================================================================
|
|
229
|
+
// Helper function to add project_id column using raw SQL (more reliable for old schemas)
|
|
230
|
+
async function addProjectIdColumn(tableName, knex, defaultProjectId) {
|
|
231
|
+
const hasColumn = await knex.schema.hasColumn(tableName, "project_id");
|
|
232
|
+
if (!hasColumn) {
|
|
233
|
+
// Use raw SQL to avoid Knex's schema parsing issues with old schemas
|
|
234
|
+
await knex.raw(`ALTER TABLE ${tableName} ADD COLUMN project_id INTEGER NOT NULL DEFAULT ${defaultProjectId}`);
|
|
235
|
+
// Add foreign key separately
|
|
236
|
+
await db.createIndexSafe(tableName, ['project_id'], `idx_${tableName}_project`);
|
|
237
|
+
console.log(`✓ Added project_id to ${tableName}`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
console.log(` ⏭ ${tableName} already has project_id, skipping`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Transaction tables that need project_id
|
|
244
|
+
// Note: t_decision_context is handled separately in Step 4 (after PRIMARY KEY fix)
|
|
245
|
+
// Note: t_task_details, t_task_tags, t_task_dependencies are recreated in Steps 4.5-4.7 (need table recreation for constraints)
|
|
246
|
+
const transactionTables = [
|
|
247
|
+
"t_decision_history",
|
|
248
|
+
"t_decision_tags",
|
|
249
|
+
"t_decision_scopes",
|
|
250
|
+
"t_file_changes",
|
|
251
|
+
"t_constraints",
|
|
252
|
+
"t_tasks",
|
|
253
|
+
// 't_task_details', // Handled in STEP 4.7 (needs table recreation)
|
|
254
|
+
// 't_task_tags', // Handled in STEP 4.5 (composite PRIMARY KEY)
|
|
255
|
+
"t_task_file_links",
|
|
256
|
+
"t_task_decision_links",
|
|
257
|
+
// 't_task_dependencies', // Handled in STEP 4.6 (composite PRIMARY KEY)
|
|
258
|
+
"t_activity_log", // Required for stats.clear to filter by project_id
|
|
259
|
+
];
|
|
260
|
+
for (const tableName of transactionTables) {
|
|
261
|
+
await addProjectIdColumn(tableName, knex, defaultProjectId);
|
|
262
|
+
}
|
|
263
|
+
// ============================================================================
|
|
264
|
+
// STEP 4: Fix PRIMARY KEY Constraints (t_decisions tables)
|
|
265
|
+
// ============================================================================
|
|
266
|
+
// For SQLite, we need to recreate tables to change PRIMARY KEY from single-column
|
|
267
|
+
// to composite (key_id, project_id)
|
|
268
|
+
if (!hasMigrationMarker) {
|
|
269
|
+
console.log("🔄 Fixing PRIMARY KEY constraints for t_decisions tables...");
|
|
270
|
+
// Drop t_decision_context temporarily (has FK to t_decisions)
|
|
271
|
+
let decisionContextData = [];
|
|
272
|
+
const hasDecisionContext = await knex.schema.hasTable("t_decision_context");
|
|
273
|
+
if (hasDecisionContext) {
|
|
274
|
+
decisionContextData = await knex("t_decision_context").select("*");
|
|
275
|
+
await knex.schema.dropTable("t_decision_context");
|
|
276
|
+
console.log("✓ Temporarily dropped t_decision_context (will recreate)");
|
|
277
|
+
}
|
|
278
|
+
// 4a. t_decisions
|
|
279
|
+
const decisionsData = await knex("t_decisions").select("*");
|
|
280
|
+
await knex.schema.dropTableIfExists("t_decisions");
|
|
281
|
+
await knex.schema.createTable("t_decisions", (table) => {
|
|
282
|
+
table.integer("key_id").unsigned().notNullable();
|
|
283
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
284
|
+
table.text("value").notNullable();
|
|
285
|
+
table.integer("agent_id").unsigned();
|
|
286
|
+
table.integer("layer_id").unsigned();
|
|
287
|
+
table.string("version", 20).defaultTo("1.0.0");
|
|
288
|
+
table.integer("status").defaultTo(1);
|
|
289
|
+
table.integer("ts").notNullable();
|
|
290
|
+
// Composite PRIMARY KEY
|
|
291
|
+
table.primary(["key_id", "project_id"]);
|
|
292
|
+
// Foreign keys
|
|
293
|
+
table.foreign("key_id").references("m_context_keys.id");
|
|
294
|
+
table.foreign("agent_id").references("m_agents.id");
|
|
295
|
+
table.foreign("layer_id").references("m_layers.id");
|
|
296
|
+
table.foreign("project_id").references("m_projects.id").onDelete("CASCADE");
|
|
297
|
+
});
|
|
298
|
+
if (decisionsData.length > 0) {
|
|
299
|
+
// Ensure project_id is set for existing data
|
|
300
|
+
await knex("t_decisions").insert(decisionsData.map((row) => ({
|
|
301
|
+
...row,
|
|
302
|
+
project_id: row.project_id || defaultProjectId,
|
|
303
|
+
})));
|
|
304
|
+
}
|
|
305
|
+
console.log(`✓ Recreated t_decisions with composite PRIMARY KEY (${decisionsData.length} rows)`);
|
|
306
|
+
// 4b. t_decisions_numeric
|
|
307
|
+
const decisionsNumericData = await knex("t_decisions_numeric").select("*");
|
|
308
|
+
await knex.schema.dropTableIfExists("t_decisions_numeric");
|
|
309
|
+
await knex.schema.createTable("t_decisions_numeric", (table) => {
|
|
310
|
+
table.integer("key_id").unsigned().notNullable();
|
|
311
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
312
|
+
table.double("value").notNullable();
|
|
313
|
+
table.integer("agent_id").unsigned();
|
|
314
|
+
table.integer("layer_id").unsigned();
|
|
315
|
+
table.string("version", 20).defaultTo("1.0.0");
|
|
316
|
+
table.integer("status").defaultTo(1);
|
|
317
|
+
table.integer("ts").notNullable();
|
|
318
|
+
// Composite PRIMARY KEY
|
|
319
|
+
table.primary(["key_id", "project_id"]);
|
|
320
|
+
// Foreign keys
|
|
321
|
+
table.foreign("key_id").references("m_context_keys.id");
|
|
322
|
+
table.foreign("agent_id").references("m_agents.id");
|
|
323
|
+
table.foreign("layer_id").references("m_layers.id");
|
|
324
|
+
table.foreign("project_id").references("m_projects.id").onDelete("CASCADE");
|
|
325
|
+
});
|
|
326
|
+
if (decisionsNumericData.length > 0) {
|
|
327
|
+
await knex("t_decisions_numeric").insert(decisionsNumericData.map((row) => ({
|
|
328
|
+
...row,
|
|
329
|
+
project_id: row.project_id || defaultProjectId,
|
|
330
|
+
})));
|
|
331
|
+
}
|
|
332
|
+
console.log(`✓ Recreated t_decisions_numeric with composite PRIMARY KEY (${decisionsNumericData.length} rows)`);
|
|
333
|
+
// Create migration marker
|
|
334
|
+
await knex.schema.createTable("_multi_project_pk_fixed", (table) => {
|
|
335
|
+
table.integer("applied_ts").notNullable();
|
|
336
|
+
});
|
|
337
|
+
await knex("_multi_project_pk_fixed").insert({
|
|
338
|
+
applied_ts: Math.floor(Date.now() / 1000),
|
|
339
|
+
});
|
|
340
|
+
console.log("✓ Created migration marker table");
|
|
341
|
+
// Recreate t_decision_context if it existed
|
|
342
|
+
if (hasDecisionContext) {
|
|
343
|
+
await knex.schema.createTable("t_decision_context", (table) => {
|
|
344
|
+
table.increments("id").primary();
|
|
345
|
+
table.integer("decision_key_id").unsigned().notNullable();
|
|
346
|
+
table.text("rationale");
|
|
347
|
+
table.text("alternatives_considered"); // JSON array (was 'alternatives' - fixed for compatibility)
|
|
348
|
+
table.text("tradeoffs"); // JSON object
|
|
349
|
+
table.integer("agent_id").unsigned();
|
|
350
|
+
table.integer("decision_date").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
351
|
+
table.integer("related_task_id").unsigned();
|
|
352
|
+
table.integer("related_constraint_id").unsigned();
|
|
353
|
+
table.integer("ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
354
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
355
|
+
// Foreign keys
|
|
356
|
+
table.foreign("decision_key_id").references("m_context_keys.id");
|
|
357
|
+
table.foreign("agent_id").references("m_agents.id");
|
|
358
|
+
table.foreign("related_task_id").references("t_tasks.id").onDelete("SET NULL");
|
|
359
|
+
table.foreign("related_constraint_id").references("t_constraints.id").onDelete("SET NULL");
|
|
360
|
+
table.foreign("project_id").references("m_projects.id").onDelete("CASCADE");
|
|
361
|
+
// Unique constraint
|
|
362
|
+
table.unique(["decision_key_id", "id"]);
|
|
363
|
+
});
|
|
364
|
+
// Restore data with project_id
|
|
365
|
+
if (decisionContextData.length > 0) {
|
|
366
|
+
await knex("t_decision_context").insert(decisionContextData.map((row) => ({
|
|
367
|
+
...row,
|
|
368
|
+
project_id: row.project_id || defaultProjectId,
|
|
369
|
+
})));
|
|
370
|
+
}
|
|
371
|
+
console.log(`✓ Recreated t_decision_context (${decisionContextData.length} rows)`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
console.log("✓ PRIMARY KEY constraints already fixed, skipping");
|
|
376
|
+
}
|
|
377
|
+
// ============================================================================
|
|
378
|
+
// STEP 4.5: Fix t_task_tags PRIMARY KEY (Constraint #41)
|
|
379
|
+
// ============================================================================
|
|
380
|
+
// t_task_tags needs composite PRIMARY KEY (project_id, task_id, tag_id)
|
|
381
|
+
// to support ON CONFLICT clause for multi-project tag insertion
|
|
382
|
+
const taskTagsHasCorrectPK = await knex
|
|
383
|
+
.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_tags'`)
|
|
384
|
+
.then((result) => {
|
|
385
|
+
const createSql = result[0]?.sql || "";
|
|
386
|
+
return (createSql.includes("PRIMARY KEY (project_id, task_id, tag_id)") ||
|
|
387
|
+
createSql.includes("PRIMARY KEY(project_id, task_id, tag_id)"));
|
|
388
|
+
});
|
|
389
|
+
if (!taskTagsHasCorrectPK) {
|
|
390
|
+
console.log("🔄 Fixing t_task_tags PRIMARY KEY to include project_id...");
|
|
391
|
+
// Backup existing data
|
|
392
|
+
const taskTagsData = await knex("t_task_tags").select("*");
|
|
393
|
+
// Drop and recreate table with correct PRIMARY KEY
|
|
394
|
+
await knex.schema.dropTableIfExists("t_task_tags");
|
|
395
|
+
await knex.schema.createTable("t_task_tags", (table) => {
|
|
396
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
397
|
+
table.integer("task_id").unsigned().notNullable();
|
|
398
|
+
table.integer("tag_id").unsigned().notNullable();
|
|
399
|
+
// Composite PRIMARY KEY with project_id first
|
|
400
|
+
table.primary(["project_id", "task_id", "tag_id"]);
|
|
401
|
+
// Foreign keys
|
|
402
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
403
|
+
table.foreign("task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
404
|
+
table.foreign("tag_id").references("id").inTable("m_tags");
|
|
405
|
+
});
|
|
406
|
+
// Restore data with project_id
|
|
407
|
+
if (taskTagsData.length > 0) {
|
|
408
|
+
await knex("t_task_tags").insert(taskTagsData.map((row) => ({
|
|
409
|
+
...row,
|
|
410
|
+
project_id: row.project_id || defaultProjectId,
|
|
411
|
+
})));
|
|
412
|
+
}
|
|
413
|
+
console.log(`✓ Recreated t_task_tags with composite PRIMARY KEY (${taskTagsData.length} rows)`);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
console.log("✓ t_task_tags PRIMARY KEY already correct, skipping");
|
|
417
|
+
}
|
|
418
|
+
// STEP 4.6: Fix t_task_dependencies PRIMARY KEY (Constraint #42)
|
|
419
|
+
// PRIMARY KEY must be (project_id, blocker_task_id, blocked_task_id) for multi-project support
|
|
420
|
+
const taskDepsHasCorrectPK = await knex
|
|
421
|
+
.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'`)
|
|
422
|
+
.then((result) => {
|
|
423
|
+
const createSql = result[0]?.sql || "";
|
|
424
|
+
return (createSql.includes("PRIMARY KEY (project_id, blocker_task_id, blocked_task_id)") ||
|
|
425
|
+
createSql.includes("PRIMARY KEY(project_id, blocker_task_id, blocked_task_id)"));
|
|
426
|
+
});
|
|
427
|
+
if (!taskDepsHasCorrectPK) {
|
|
428
|
+
console.log("🔄 Fixing t_task_dependencies PRIMARY KEY to include project_id...");
|
|
429
|
+
// Backup existing data
|
|
430
|
+
const taskDepsData = await knex("t_task_dependencies").select("*");
|
|
431
|
+
// Drop and recreate table with correct PRIMARY KEY
|
|
432
|
+
await knex.schema.dropTableIfExists("t_task_dependencies");
|
|
433
|
+
await knex.schema.createTable("t_task_dependencies", (table) => {
|
|
434
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
435
|
+
table.integer("blocker_task_id").unsigned().notNullable();
|
|
436
|
+
table.integer("blocked_task_id").unsigned().notNullable();
|
|
437
|
+
table.integer("created_ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
438
|
+
// Composite PRIMARY KEY with project_id first
|
|
439
|
+
table.primary(["project_id", "blocker_task_id", "blocked_task_id"]);
|
|
440
|
+
// Foreign keys
|
|
441
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
442
|
+
table.foreign("blocker_task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
443
|
+
table.foreign("blocked_task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
444
|
+
});
|
|
445
|
+
await db.createIndexSafe('t_task_dependencies', ['blocked_task_id', 'project_id'], 'idx_task_deps_blocked');
|
|
446
|
+
// Restore data with project_id
|
|
447
|
+
if (taskDepsData.length > 0) {
|
|
448
|
+
await knex("t_task_dependencies").insert(taskDepsData.map((row) => ({
|
|
449
|
+
...row,
|
|
450
|
+
project_id: row.project_id || defaultProjectId,
|
|
451
|
+
})));
|
|
452
|
+
}
|
|
453
|
+
console.log(`✓ Recreated t_task_dependencies with composite PRIMARY KEY (${taskDepsData.length} rows)`);
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
console.log("✓ t_task_dependencies PRIMARY KEY already correct, skipping");
|
|
457
|
+
}
|
|
458
|
+
// ============================================================================
|
|
459
|
+
// STEP 4.7: Fix t_task_details (Add project_id - needs table recreation)
|
|
460
|
+
// ============================================================================
|
|
461
|
+
const taskDetailsHasProjectId = await knex.schema.hasColumn("t_task_details", "project_id");
|
|
462
|
+
if (!taskDetailsHasProjectId) {
|
|
463
|
+
console.log("🔄 Adding project_id to t_task_details (requires table recreation due to FK)...");
|
|
464
|
+
const taskDetailsExists = await knex.schema.hasTable("t_task_details");
|
|
465
|
+
let taskDetailsData = [];
|
|
466
|
+
if (taskDetailsExists) {
|
|
467
|
+
taskDetailsData = await knex("t_task_details").select("*");
|
|
468
|
+
await knex.schema.dropTable("t_task_details");
|
|
469
|
+
}
|
|
470
|
+
await knex.schema.createTable("t_task_details", (table) => {
|
|
471
|
+
table.integer("task_id").unsigned().notNullable();
|
|
472
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
473
|
+
table.text("notes");
|
|
474
|
+
table.text("acceptance_criteria");
|
|
475
|
+
table.text("blocking_issues");
|
|
476
|
+
table.bigInteger("estimated_hours");
|
|
477
|
+
table.integer("actual_hours");
|
|
478
|
+
table.integer("updated_ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
479
|
+
// Composite PRIMARY KEY
|
|
480
|
+
table.primary(["task_id", "project_id"]);
|
|
481
|
+
// Foreign keys
|
|
482
|
+
table.foreign("task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
483
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
484
|
+
});
|
|
485
|
+
if (taskDetailsData.length > 0) {
|
|
486
|
+
await knex("t_task_details").insert(taskDetailsData.map((row) => ({
|
|
487
|
+
...row,
|
|
488
|
+
project_id: row.project_id || defaultProjectId,
|
|
489
|
+
})));
|
|
490
|
+
}
|
|
491
|
+
console.log(`✓ Recreated t_task_details with project_id (${taskDetailsData.length} rows)`);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
console.log("✓ t_task_details already has project_id, skipping");
|
|
495
|
+
}
|
|
496
|
+
// ============================================================================
|
|
497
|
+
// STEP 4.8: Fix t_task_file_links (Add project_id - needs table recreation)
|
|
498
|
+
// ============================================================================
|
|
499
|
+
const taskFileLinksHasProjectId = await knex.schema.hasColumn("t_task_file_links", "project_id");
|
|
500
|
+
if (!taskFileLinksHasProjectId) {
|
|
501
|
+
console.log("🔄 Adding project_id to t_task_file_links (requires table recreation due to FK)...");
|
|
502
|
+
const taskFileLinksData = await knex("t_task_file_links").select("*");
|
|
503
|
+
await knex.schema.dropTable("t_task_file_links");
|
|
504
|
+
await knex.schema.createTable("t_task_file_links", (table) => {
|
|
505
|
+
table.integer("task_id").unsigned().notNullable();
|
|
506
|
+
table.integer("file_id").unsigned().notNullable();
|
|
507
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
508
|
+
table.bigInteger("linked_ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
509
|
+
// UNIQUE constraint on (project_id, task_id, file_id) for ON CONFLICT DO NOTHING
|
|
510
|
+
table.unique(["project_id", "task_id", "file_id"]);
|
|
511
|
+
// Foreign keys
|
|
512
|
+
table.foreign("task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
513
|
+
table.foreign("file_id").references("id").inTable("m_files").onDelete("CASCADE");
|
|
514
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
515
|
+
});
|
|
516
|
+
if (taskFileLinksData.length > 0) {
|
|
517
|
+
await knex("t_task_file_links").insert(taskFileLinksData.map((row) => ({
|
|
518
|
+
...row,
|
|
519
|
+
project_id: row.project_id || defaultProjectId,
|
|
520
|
+
})));
|
|
521
|
+
}
|
|
522
|
+
console.log(`✓ Recreated t_task_file_links with project_id (${taskFileLinksData.length} rows)`);
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
console.log("✓ t_task_file_links already has project_id, skipping");
|
|
526
|
+
}
|
|
527
|
+
// ============================================================================
|
|
528
|
+
// STEP 4.9: Fix t_task_decision_links (Add project_id if it doesn't exist)
|
|
529
|
+
// ============================================================================
|
|
530
|
+
const taskDecisionLinksHasProjectId = await knex.schema.hasColumn("t_task_decision_links", "project_id");
|
|
531
|
+
if (!taskDecisionLinksHasProjectId) {
|
|
532
|
+
console.log("🔄 Adding project_id to t_task_decision_links (requires table recreation due to FK)...");
|
|
533
|
+
const taskDecisionLinksData = await knex("t_task_decision_links").select("*");
|
|
534
|
+
await knex.schema.dropTable("t_task_decision_links");
|
|
535
|
+
await knex.schema.createTable("t_task_decision_links", (table) => {
|
|
536
|
+
table.integer("task_id").unsigned().notNullable();
|
|
537
|
+
table.integer("decision_id").unsigned().notNullable();
|
|
538
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
539
|
+
table.text("link_type").defaultTo("implements");
|
|
540
|
+
table.bigInteger("linked_ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
541
|
+
// Composite PRIMARY KEY
|
|
542
|
+
table.primary(["task_id", "decision_id", "project_id"]);
|
|
543
|
+
// Foreign keys
|
|
544
|
+
table.foreign("task_id").references("id").inTable("t_tasks").onDelete("CASCADE");
|
|
545
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
546
|
+
});
|
|
547
|
+
if (taskDecisionLinksData.length > 0) {
|
|
548
|
+
await knex("t_task_decision_links").insert(taskDecisionLinksData.map((row) => ({
|
|
549
|
+
...row,
|
|
550
|
+
project_id: row.project_id || defaultProjectId,
|
|
551
|
+
})));
|
|
552
|
+
}
|
|
553
|
+
console.log(`✓ Recreated t_task_decision_links with project_id (${taskDecisionLinksData.length} rows)`);
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
console.log("✓ t_task_decision_links already has project_id, skipping");
|
|
557
|
+
}
|
|
558
|
+
// ============================================================================
|
|
559
|
+
// STEP 5: Recreate m_config Table
|
|
560
|
+
// ============================================================================
|
|
561
|
+
console.log("🔄 Recreating m_config table with project_id and composite PRIMARY KEY...");
|
|
562
|
+
const configData = await knex("m_config").select("*");
|
|
563
|
+
await knex.schema.dropTable("m_config");
|
|
564
|
+
await knex.schema.createTable("m_config", (table) => {
|
|
565
|
+
table.string("key", 128).notNullable();
|
|
566
|
+
table.integer("project_id").unsigned().notNullable().defaultTo(defaultProjectId);
|
|
567
|
+
table.text("value").notNullable();
|
|
568
|
+
table.integer("updated_ts").notNullable().defaultTo(knex.raw("(unixepoch())"));
|
|
569
|
+
// Composite PRIMARY KEY (key, project_id)
|
|
570
|
+
table.primary(["key", "project_id"]);
|
|
571
|
+
// Foreign key
|
|
572
|
+
table.foreign("project_id").references("id").inTable("m_projects").onDelete("CASCADE");
|
|
573
|
+
});
|
|
574
|
+
if (configData.length > 0) {
|
|
575
|
+
await knex("m_config").insert(configData.map((row) => ({
|
|
576
|
+
...row,
|
|
577
|
+
project_id: row.project_id || defaultProjectId,
|
|
578
|
+
})));
|
|
579
|
+
}
|
|
580
|
+
console.log(`✓ Recreated m_config with composite PRIMARY KEY (${configData.length} rows)`);
|
|
581
|
+
// ============================================================================
|
|
582
|
+
// STEP 6: Create Composite Indexes (Constraint #39)
|
|
583
|
+
// ============================================================================
|
|
584
|
+
console.log("🔄 Creating composite indexes with project_id first (Constraint #39)...");
|
|
585
|
+
// Create indexes with project_id first for optimal query performance
|
|
586
|
+
await db.createIndexSafe('t_decisions', ['project_id', 'key_id', 'ts DESC'], 'idx_decisions_project_key');
|
|
587
|
+
await db.createIndexSafe('t_decisions_numeric', ['project_id', 'key_id', 'ts DESC'], 'idx_decisions_numeric_project_key');
|
|
588
|
+
await db.createIndexSafe('t_decision_tags', ['project_id', 'tag_id'], 'idx_decision_tags_project');
|
|
589
|
+
await db.createIndexSafe('t_decision_scopes', ['project_id', 'scope_id'], 'idx_decision_scopes_project');
|
|
590
|
+
await db.createIndexSafe('t_file_changes', ['project_id', 'file_id'], 'idx_file_changes_project');
|
|
591
|
+
await db.createIndexSafe('t_constraints', ['project_id', 'priority DESC'], 'idx_constraints_project_priority');
|
|
592
|
+
await db.createIndexSafe('t_tasks', ['project_id', 'status_id', 'priority DESC'], 'idx_tasks_project_status');
|
|
593
|
+
await db.createIndexSafe('t_task_tags', ['project_id', 'tag_id'], 'idx_task_tags_project');
|
|
594
|
+
await db.createIndexSafe('t_task_file_links', ['project_id', 'task_id', 'file_id'], 'idx_task_file_links_project');
|
|
595
|
+
await db.createIndexSafe('t_task_decision_links', ['project_id', 'task_id', 'decision_id'], 'idx_task_decision_links_project');
|
|
596
|
+
console.log("✓ Created composite indexes with project_id first");
|
|
597
|
+
// ============================================================================
|
|
598
|
+
// STEP 7: Recreate All Views with Multi-Project Support
|
|
599
|
+
// ============================================================================
|
|
600
|
+
console.log("🔄 Recreating all views with project_id support...");
|
|
601
|
+
// v_tagged_decisions
|
|
602
|
+
await knex.raw(`
|
|
603
|
+
CREATE VIEW v_tagged_decisions AS
|
|
604
|
+
SELECT d.key_id,
|
|
605
|
+
d.project_id,
|
|
606
|
+
k.key as decision_key,
|
|
607
|
+
d.value,
|
|
608
|
+
l.name as layer,
|
|
609
|
+
d.version,
|
|
610
|
+
d.status,
|
|
611
|
+
datetime(d.ts, 'unixepoch') as timestamp
|
|
612
|
+
FROM t_decisions d
|
|
613
|
+
LEFT JOIN m_context_keys k ON d.key_id = k.id
|
|
614
|
+
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
615
|
+
ORDER BY d.ts DESC
|
|
616
|
+
`);
|
|
617
|
+
// v_active_context
|
|
618
|
+
await knex.raw(`
|
|
619
|
+
CREATE VIEW v_active_context AS
|
|
620
|
+
SELECT k.key,
|
|
621
|
+
d.project_id,
|
|
622
|
+
d.value,
|
|
623
|
+
l.name as layer,
|
|
624
|
+
datetime(d.ts, 'unixepoch') as last_updated
|
|
625
|
+
FROM t_decisions d
|
|
626
|
+
INNER JOIN m_context_keys k ON d.key_id = k.id
|
|
627
|
+
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
628
|
+
WHERE d.status = 1
|
|
629
|
+
ORDER BY d.ts DESC
|
|
630
|
+
`);
|
|
631
|
+
// v_layer_summary
|
|
632
|
+
await knex.raw(`
|
|
633
|
+
CREATE VIEW v_layer_summary AS
|
|
634
|
+
SELECT l.name as layer,
|
|
635
|
+
d.project_id,
|
|
636
|
+
COUNT(*) as decision_count
|
|
637
|
+
FROM t_decisions d
|
|
638
|
+
INNER JOIN m_layers l ON d.layer_id = l.id
|
|
639
|
+
WHERE d.status = 1
|
|
640
|
+
GROUP BY l.id, l.name, d.project_id
|
|
641
|
+
ORDER BY COUNT(*) DESC
|
|
642
|
+
`);
|
|
643
|
+
// v_recent_file_changes
|
|
644
|
+
await knex.raw(`
|
|
645
|
+
CREATE VIEW v_recent_file_changes AS
|
|
646
|
+
SELECT f.path,
|
|
647
|
+
fc.project_id,
|
|
648
|
+
a.name as changed_by,
|
|
649
|
+
datetime(fc.ts, 'unixepoch') as changed_at
|
|
650
|
+
FROM t_file_changes fc
|
|
651
|
+
INNER JOIN m_files f ON fc.file_id = f.id
|
|
652
|
+
LEFT JOIN m_agents a ON fc.agent_id = a.id
|
|
653
|
+
ORDER BY fc.ts DESC
|
|
654
|
+
LIMIT 50
|
|
655
|
+
`);
|
|
656
|
+
// v_tagged_constraints
|
|
657
|
+
await knex.raw(`
|
|
658
|
+
CREATE VIEW v_tagged_constraints AS
|
|
659
|
+
SELECT c.id,
|
|
660
|
+
c.constraint_text,
|
|
661
|
+
c.project_id,
|
|
662
|
+
cat.name as category,
|
|
663
|
+
c.priority,
|
|
664
|
+
a.name as author,
|
|
665
|
+
datetime(c.ts, 'unixepoch') as created
|
|
666
|
+
FROM t_constraints c
|
|
667
|
+
LEFT JOIN m_constraint_categories cat ON c.category_id = cat.id
|
|
668
|
+
LEFT JOIN m_agents a ON c.agent_id = a.id
|
|
669
|
+
WHERE c.active = 1
|
|
670
|
+
ORDER BY c.priority DESC, c.ts DESC
|
|
671
|
+
`);
|
|
672
|
+
// v_task_board
|
|
673
|
+
await knex.raw(`
|
|
674
|
+
CREATE VIEW v_task_board AS
|
|
675
|
+
SELECT t.id,
|
|
676
|
+
t.title,
|
|
677
|
+
t.project_id,
|
|
678
|
+
s.name as status,
|
|
679
|
+
t.priority,
|
|
680
|
+
t.assigned_agent,
|
|
681
|
+
a.name as created_by,
|
|
682
|
+
datetime(t.created_ts, 'unixepoch') as created_at,
|
|
683
|
+
datetime(t.updated_ts, 'unixepoch') as updated_at
|
|
684
|
+
FROM t_tasks t
|
|
685
|
+
INNER JOIN m_task_statuses s ON t.status_id = s.id
|
|
686
|
+
LEFT JOIN m_agents a ON t.created_by_agent_id = a.id
|
|
687
|
+
ORDER BY t.priority DESC, t.created_ts DESC
|
|
688
|
+
`);
|
|
689
|
+
console.log("✓ Recreated all views with project_id support");
|
|
690
|
+
// ============================================================================
|
|
691
|
+
// STEP 8: Re-enable Foreign Key Constraints
|
|
692
|
+
// ============================================================================
|
|
693
|
+
await knex.raw("PRAGMA foreign_keys = ON");
|
|
694
|
+
console.log("✓ Re-enabled foreign key constraints");
|
|
695
|
+
console.log("✅ Multi-project support migration v3.7.0 (consolidated) complete!");
|
|
696
|
+
}
|
|
697
|
+
export async function down(knex) {
|
|
698
|
+
console.log("⚠️ Rollback not supported for multi-project migration (data migration is one-way)");
|
|
699
|
+
console.log(" To rollback, restore from backup taken before migration");
|
|
700
|
+
}
|
|
701
|
+
//# sourceMappingURL=20251104000000_add_multi_project_v3_7_0.js.map
|