sqlew 3.6.10 → 3.7.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 +318 -0
- package/README.md +54 -39
- package/assets/config.example.toml +93 -0
- package/assets/kanban-visualizer.png +0 -0
- package/assets/sample-agents/sqlew-architect.md +32 -13
- package/assets/sample-agents/sqlew-researcher.md +70 -17
- package/assets/sample-agents/sqlew-scrum-master.md +60 -25
- package/assets/schema.sql +2 -2
- package/dist/adapters/auth/auth-factory.d.ts +86 -0
- package/dist/adapters/auth/auth-factory.d.ts.map +1 -0
- package/dist/adapters/auth/auth-factory.js +103 -0
- package/dist/adapters/auth/auth-factory.js.map +1 -0
- package/dist/adapters/auth/auth-types.d.ts +30 -0
- package/dist/adapters/auth/auth-types.d.ts.map +1 -0
- package/dist/adapters/auth/auth-types.js +30 -0
- package/dist/adapters/auth/auth-types.js.map +1 -0
- package/dist/adapters/auth/base-auth-provider.d.ts +327 -0
- package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -0
- package/dist/adapters/auth/base-auth-provider.js +111 -0
- package/dist/adapters/auth/base-auth-provider.js.map +1 -0
- package/dist/adapters/auth/direct-auth-provider.d.ts +356 -0
- package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -0
- package/dist/adapters/auth/direct-auth-provider.js +406 -0
- package/dist/adapters/auth/direct-auth-provider.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +638 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +557 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +13 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +27 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mysql-adapter.d.ts +547 -6
- package/dist/adapters/mysql-adapter.d.ts.map +1 -1
- package/dist/adapters/mysql-adapter.js +651 -32
- package/dist/adapters/mysql-adapter.js.map +1 -1
- package/dist/adapters/postgresql-adapter.d.ts +15 -4
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +19 -2
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/adapters/sqlite-adapter.d.ts +35 -5
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +57 -18
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/cli/db-dump.d.ts +32 -0
- package/dist/cli/db-dump.d.ts.map +1 -0
- package/dist/cli/db-dump.js +409 -0
- package/dist/cli/db-dump.js.map +1 -0
- package/dist/cli.js +24 -14
- package/dist/cli.js.map +1 -1
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.js +7 -2
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.js +49 -50
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.js +11 -6
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.js +66 -14
- package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +22 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.js +6 -0
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +6 -0
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.js +6 -0
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +7 -0
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +62 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.js +6 -0
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.js +6 -0
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +13 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +48 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +1 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +24 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +189 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +16 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +65 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +23 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +118 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +49 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +864 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
- package/dist/config/loader.d.ts +19 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +149 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +261 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/writer.d.ts +65 -0
- package/dist/config/writer.d.ts.map +1 -0
- package/dist/config/writer.js +139 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/database.d.ts +11 -2
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +62 -6
- package/dist/database.js.map +1 -1
- package/dist/index.js +165 -35
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +88 -12
- package/dist/knexfile.js.map +1 -1
- package/dist/tests/all-features.test.js +15 -3
- package/dist/tests/all-features.test.js.map +1 -1
- package/dist/tests/config-loader.test.d.ts +6 -0
- package/dist/tests/config-loader.test.d.ts.map +1 -0
- package/dist/tests/config-loader.test.js +201 -0
- package/dist/tests/config-loader.test.js.map +1 -0
- package/dist/tests/connection-manager-integration.test.d.ts +2 -0
- package/dist/tests/connection-manager-integration.test.d.ts.map +1 -0
- package/dist/tests/connection-manager-integration.test.js +431 -0
- package/dist/tests/connection-manager-integration.test.js.map +1 -0
- package/dist/tests/connection-manager.test.d.ts +2 -0
- package/dist/tests/connection-manager.test.d.ts.map +1 -0
- package/dist/tests/connection-manager.test.js +361 -0
- package/dist/tests/connection-manager.test.js.map +1 -0
- package/dist/tests/dump-import.test.d.ts +15 -0
- package/dist/tests/dump-import.test.d.ts.map +1 -0
- package/dist/tests/dump-import.test.js +430 -0
- package/dist/tests/dump-import.test.js.map +1 -0
- package/dist/tests/migration-idempotency.test.d.ts +2 -0
- package/dist/tests/migration-idempotency.test.d.ts.map +1 -0
- package/dist/tests/migration-idempotency.test.js +330 -0
- package/dist/tests/migration-idempotency.test.js.map +1 -0
- package/dist/tests/migration-upgrade-paths.test.d.ts +2 -0
- package/dist/tests/migration-upgrade-paths.test.d.ts.map +1 -0
- package/dist/tests/migration-upgrade-paths.test.js +248 -0
- package/dist/tests/migration-upgrade-paths.test.js.map +1 -0
- package/dist/tests/multi-project-migration.test.d.ts +17 -0
- package/dist/tests/multi-project-migration.test.d.ts.map +1 -0
- package/dist/tests/multi-project-migration.test.js +399 -0
- package/dist/tests/multi-project-migration.test.js.map +1 -0
- package/dist/tests/multi-project.test.d.ts +5 -0
- package/dist/tests/multi-project.test.d.ts.map +1 -0
- package/dist/tests/multi-project.test.js +238 -0
- package/dist/tests/multi-project.test.js.map +1 -0
- package/dist/tests/schema-migration.test.d.ts +8 -0
- package/dist/tests/schema-migration.test.d.ts.map +1 -0
- package/dist/tests/schema-migration.test.js +108 -0
- package/dist/tests/schema-migration.test.js.map +1 -0
- package/dist/tests/sql-dump-converters.test.d.ts +7 -0
- package/dist/tests/sql-dump-converters.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-converters.test.js +314 -0
- package/dist/tests/sql-dump-converters.test.js.map +1 -0
- package/dist/tests/sql-dump-cross-database.test.d.ts +21 -0
- package/dist/tests/sql-dump-cross-database.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-cross-database.test.js +314 -0
- package/dist/tests/sql-dump-cross-database.test.js.map +1 -0
- package/dist/tests/sql-dump-default-conversions.test.d.ts +8 -0
- package/dist/tests/sql-dump-default-conversions.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-default-conversions.test.js +141 -0
- package/dist/tests/sql-dump-default-conversions.test.js.map +1 -0
- package/dist/tests/sql-dump-fk-constraints.test.d.ts +13 -0
- package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-fk-constraints.test.js +381 -0
- package/dist/tests/sql-dump-fk-constraints.test.js.map +1 -0
- package/dist/tests/sql-dump-indexes.test.d.ts +12 -0
- package/dist/tests/sql-dump-indexes.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-indexes.test.js +269 -0
- package/dist/tests/sql-dump-indexes.test.js.map +1 -0
- package/dist/tests/sql-dump-integration.test.d.ts +16 -0
- package/dist/tests/sql-dump-integration.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-integration.test.js +342 -0
- package/dist/tests/sql-dump-integration.test.js.map +1 -0
- package/dist/tests/sql-dump-table-ordering.test.d.ts +8 -0
- package/dist/tests/sql-dump-table-ordering.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-table-ordering.test.js +253 -0
- package/dist/tests/sql-dump-table-ordering.test.js.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js +11 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +11 -1
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/type-conversion.test.d.ts +8 -0
- package/dist/tests/type-conversion.test.d.ts.map +1 -0
- package/dist/tests/type-conversion.test.js +312 -0
- package/dist/tests/type-conversion.test.js.map +1 -0
- package/dist/tests/utils/test-helpers.d.ts +93 -0
- package/dist/tests/utils/test-helpers.d.ts.map +1 -0
- package/dist/tests/utils/test-helpers.js +407 -0
- package/dist/tests/utils/test-helpers.js.map +1 -0
- package/dist/tools/config.d.ts +58 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +281 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +138 -122
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +216 -109
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +123 -102
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +581 -518
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +5 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +176 -122
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +9 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cleanup.d.ts +3 -0
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +14 -2
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/connection-manager.d.ts +59 -0
- package/dist/utils/connection-manager.d.ts.map +1 -0
- package/dist/utils/connection-manager.js +178 -0
- package/dist/utils/connection-manager.js.map +1 -0
- package/dist/utils/debug-logger.d.ts +8 -4
- package/dist/utils/debug-logger.d.ts.map +1 -1
- package/dist/utils/debug-logger.js +27 -7
- package/dist/utils/debug-logger.js.map +1 -1
- package/dist/utils/error-handler.d.ts +2 -2
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +10 -7
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js +36 -15
- package/dist/utils/parameter-validator.js.map +1 -1
- package/dist/utils/project-context.d.ts +111 -0
- package/dist/utils/project-context.d.ts.map +1 -0
- package/dist/utils/project-context.js +187 -0
- package/dist/utils/project-context.js.map +1 -0
- package/dist/utils/sql-dump-converters.d.ts +188 -0
- package/dist/utils/sql-dump-converters.d.ts.map +1 -0
- package/dist/utils/sql-dump-converters.js +311 -0
- package/dist/utils/sql-dump-converters.js.map +1 -0
- package/dist/utils/sql-dump.d.ts +102 -0
- package/dist/utils/sql-dump.d.ts.map +1 -0
- package/dist/utils/sql-dump.js +1550 -0
- package/dist/utils/sql-dump.js.map +1 -0
- package/dist/utils/vcs-adapter.d.ts +42 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -1
- package/dist/utils/vcs-adapter.js +154 -0
- package/dist/utils/vcs-adapter.js.map +1 -1
- package/docs/BASEADAPTER_IMPLEMENTATION.md +399 -0
- package/docs/DATABASE_AUTH.md +445 -0
- package/docs/DATABASE_MIGRATION.md +247 -0
- package/docs/MULTI_PROJECT_ARCHITECTURE.md +497 -0
- package/package.json +12 -4
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -15
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -34
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
- /package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.js +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Test Utilities for Cross-Database Migration Tests
|
|
3
|
+
*
|
|
4
|
+
* DRY principle: All common test setup, assertions, and helpers in one place.
|
|
5
|
+
* Used by all 5 test suites to avoid code duplication.
|
|
6
|
+
*/
|
|
7
|
+
import knex from 'knex';
|
|
8
|
+
import assert from 'node:assert';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { dirname } from 'path';
|
|
12
|
+
import { writeFileSync, unlinkSync, existsSync } from 'node:fs';
|
|
13
|
+
import { exec } from 'node:child_process';
|
|
14
|
+
import { promisify } from 'node:util';
|
|
15
|
+
const execAsync = promisify(exec);
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
// Migration directories - resolve based on whether we're in dist/ or src/
|
|
19
|
+
// When running tests, we're in dist/tests/utils/, so ../../config/knex/ is wrong
|
|
20
|
+
// We need to go to the project root first
|
|
21
|
+
const projectRoot = join(__dirname, '../../../'); // dist/tests/utils/ -> project root
|
|
22
|
+
const migrationDirs = [
|
|
23
|
+
join(projectRoot, 'dist/config/knex/bootstrap'),
|
|
24
|
+
join(projectRoot, 'dist/config/knex/upgrades'),
|
|
25
|
+
join(projectRoot, 'dist/config/knex/enhancements'),
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Get database configuration by type
|
|
29
|
+
*/
|
|
30
|
+
export function getDbConfig(type, customPath) {
|
|
31
|
+
switch (type) {
|
|
32
|
+
case 'sqlite':
|
|
33
|
+
return {
|
|
34
|
+
type: 'sqlite',
|
|
35
|
+
knexConfig: {
|
|
36
|
+
client: 'better-sqlite3',
|
|
37
|
+
connection: { filename: customPath || ':memory:' },
|
|
38
|
+
useNullAsDefault: true,
|
|
39
|
+
migrations: {
|
|
40
|
+
directory: migrationDirs,
|
|
41
|
+
extension: 'js',
|
|
42
|
+
tableName: 'knex_migrations',
|
|
43
|
+
loadExtensions: ['.js'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
case 'mysql':
|
|
48
|
+
return {
|
|
49
|
+
type: 'mysql',
|
|
50
|
+
containerName: 'mcp-sqlew-mysql-test',
|
|
51
|
+
knexConfig: {
|
|
52
|
+
client: 'mysql2',
|
|
53
|
+
connection: {
|
|
54
|
+
host: 'localhost',
|
|
55
|
+
port: 3307,
|
|
56
|
+
user: 'mcp_user',
|
|
57
|
+
password: 'mcp_pass',
|
|
58
|
+
database: 'mcp_test',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
case 'mariadb':
|
|
63
|
+
return {
|
|
64
|
+
type: 'mariadb',
|
|
65
|
+
containerName: 'mcp-sqlew-mariadb-test',
|
|
66
|
+
knexConfig: {
|
|
67
|
+
client: 'mysql2',
|
|
68
|
+
connection: {
|
|
69
|
+
host: 'localhost',
|
|
70
|
+
port: 3308,
|
|
71
|
+
user: 'mcp_user',
|
|
72
|
+
password: 'mcp_pass',
|
|
73
|
+
database: 'mcp_test',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
case 'postgresql':
|
|
78
|
+
return {
|
|
79
|
+
type: 'postgresql',
|
|
80
|
+
containerName: 'mcp-sqlew-postgres-test',
|
|
81
|
+
knexConfig: {
|
|
82
|
+
client: 'pg',
|
|
83
|
+
connection: {
|
|
84
|
+
host: 'localhost',
|
|
85
|
+
port: 5432,
|
|
86
|
+
user: 'mcp_user',
|
|
87
|
+
password: 'mcp_pass',
|
|
88
|
+
database: 'mcp_test',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Database Connection Helpers (DRY)
|
|
96
|
+
// ============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Create and verify database connection
|
|
99
|
+
*/
|
|
100
|
+
export async function connectDb(config) {
|
|
101
|
+
const db = knex(config.knexConfig);
|
|
102
|
+
try {
|
|
103
|
+
await db.raw('SELECT 1');
|
|
104
|
+
return db;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw new Error(`Failed to connect to ${config.type}: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Close database connection safely
|
|
112
|
+
*/
|
|
113
|
+
export async function disconnectDb(db) {
|
|
114
|
+
try {
|
|
115
|
+
await db.destroy();
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Ignore disconnect errors
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Drop all tables and views from database
|
|
123
|
+
*/
|
|
124
|
+
export async function dropAllTables(db, type) {
|
|
125
|
+
if (type === 'sqlite') {
|
|
126
|
+
// SQLite: Get all tables and views, then drop them
|
|
127
|
+
const objects = await db.raw(`
|
|
128
|
+
SELECT name, type FROM sqlite_master
|
|
129
|
+
WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%'
|
|
130
|
+
`);
|
|
131
|
+
await db.raw('PRAGMA foreign_keys = OFF');
|
|
132
|
+
for (const row of objects) {
|
|
133
|
+
if (row.type === 'view') {
|
|
134
|
+
await db.raw(`DROP VIEW IF EXISTS "${row.name}"`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await db.raw(`DROP TABLE IF EXISTS "${row.name}"`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
await db.raw('PRAGMA foreign_keys = ON');
|
|
141
|
+
}
|
|
142
|
+
else if (type === 'mysql' || type === 'mariadb') {
|
|
143
|
+
// MySQL/MariaDB: Drop all views first, then tables
|
|
144
|
+
await db.raw('SET FOREIGN_KEY_CHECKS=0');
|
|
145
|
+
// Drop views
|
|
146
|
+
const views = await db.raw(`
|
|
147
|
+
SELECT TABLE_NAME
|
|
148
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
149
|
+
WHERE TABLE_SCHEMA = 'mcp_test' AND TABLE_TYPE = 'VIEW'
|
|
150
|
+
`);
|
|
151
|
+
for (const row of views[0]) {
|
|
152
|
+
await db.raw(`DROP VIEW IF EXISTS ??`, [row.TABLE_NAME]);
|
|
153
|
+
}
|
|
154
|
+
// Drop tables
|
|
155
|
+
const tables = await db.raw(`
|
|
156
|
+
SELECT TABLE_NAME
|
|
157
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
158
|
+
WHERE TABLE_SCHEMA = 'mcp_test' AND TABLE_TYPE = 'BASE TABLE'
|
|
159
|
+
`);
|
|
160
|
+
for (const row of tables[0]) {
|
|
161
|
+
await db.raw(`DROP TABLE IF EXISTS ??`, [row.TABLE_NAME]);
|
|
162
|
+
}
|
|
163
|
+
await db.raw('SET FOREIGN_KEY_CHECKS=1');
|
|
164
|
+
}
|
|
165
|
+
else if (type === 'postgresql') {
|
|
166
|
+
// PostgreSQL: Drop and recreate schema (drops both tables and views)
|
|
167
|
+
await db.raw('DROP SCHEMA IF EXISTS public CASCADE');
|
|
168
|
+
await db.raw('CREATE SCHEMA public');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get list of tables in database
|
|
173
|
+
*/
|
|
174
|
+
export async function getTables(db, type) {
|
|
175
|
+
if (type === 'sqlite') {
|
|
176
|
+
const result = await db.raw(`
|
|
177
|
+
SELECT name FROM sqlite_master
|
|
178
|
+
WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name != 'knex_migrations'
|
|
179
|
+
ORDER BY name
|
|
180
|
+
`);
|
|
181
|
+
return result.map((r) => r.name);
|
|
182
|
+
}
|
|
183
|
+
else if (type === 'mysql' || type === 'mariadb') {
|
|
184
|
+
const result = await db.raw(`
|
|
185
|
+
SELECT TABLE_NAME
|
|
186
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
187
|
+
WHERE TABLE_SCHEMA = 'mcp_test'
|
|
188
|
+
AND TABLE_TYPE = 'BASE TABLE'
|
|
189
|
+
AND TABLE_NAME != 'knex_migrations'
|
|
190
|
+
ORDER BY TABLE_NAME
|
|
191
|
+
`);
|
|
192
|
+
return result[0].map((r) => r.TABLE_NAME);
|
|
193
|
+
}
|
|
194
|
+
else if (type === 'postgresql') {
|
|
195
|
+
const result = await db.raw(`
|
|
196
|
+
SELECT tablename
|
|
197
|
+
FROM pg_tables
|
|
198
|
+
WHERE schemaname = 'public' AND tablename != 'knex_migrations'
|
|
199
|
+
ORDER BY tablename
|
|
200
|
+
`);
|
|
201
|
+
return result.rows.map((r) => r.tablename);
|
|
202
|
+
}
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get table information (columns, rows)
|
|
207
|
+
*/
|
|
208
|
+
export async function getTableInfo(db, tableName) {
|
|
209
|
+
const columnInfo = await db(tableName).columnInfo();
|
|
210
|
+
const rowCount = await db(tableName).count('* as count').first();
|
|
211
|
+
return {
|
|
212
|
+
name: tableName,
|
|
213
|
+
columnCount: Object.keys(columnInfo).length,
|
|
214
|
+
rowCount: Number(rowCount?.count || 0),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Assert table counts match between two databases
|
|
219
|
+
*/
|
|
220
|
+
export async function assertTableCountsMatch(sourceDb, sourceType, targetDb, targetType, message) {
|
|
221
|
+
const sourceTables = await getTables(sourceDb, sourceType);
|
|
222
|
+
const targetTables = await getTables(targetDb, targetType);
|
|
223
|
+
assert.strictEqual(targetTables.length, sourceTables.length, message || `Table count mismatch: ${sourceType} has ${sourceTables.length}, ${targetType} has ${targetTables.length}`);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Assert row counts match for a specific table
|
|
227
|
+
*/
|
|
228
|
+
export async function assertRowCountsMatch(sourceDb, targetDb, tableName, message) {
|
|
229
|
+
const sourceCount = await sourceDb(tableName).count('* as count').first();
|
|
230
|
+
const targetCount = await targetDb(tableName).count('* as count').first();
|
|
231
|
+
assert.strictEqual(Number(targetCount?.count || 0), Number(sourceCount?.count || 0), message || `Row count mismatch in ${tableName}`);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get foreign key constraints from database
|
|
235
|
+
*/
|
|
236
|
+
export async function getFKConstraints(db, type, tableName) {
|
|
237
|
+
const constraints = [];
|
|
238
|
+
if (type === 'sqlite') {
|
|
239
|
+
const result = await db.raw(`PRAGMA foreign_key_list(${tableName})`);
|
|
240
|
+
for (const fk of result) {
|
|
241
|
+
constraints.push({
|
|
242
|
+
tableName,
|
|
243
|
+
columnName: fk.from,
|
|
244
|
+
referencedTable: fk.table,
|
|
245
|
+
referencedColumn: fk.to,
|
|
246
|
+
onDelete: fk.on_delete,
|
|
247
|
+
onUpdate: fk.on_update,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else if (type === 'mysql' || type === 'mariadb') {
|
|
252
|
+
const result = await db.raw(`
|
|
253
|
+
SELECT
|
|
254
|
+
COLUMN_NAME,
|
|
255
|
+
REFERENCED_TABLE_NAME,
|
|
256
|
+
REFERENCED_COLUMN_NAME
|
|
257
|
+
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
258
|
+
WHERE TABLE_SCHEMA = 'mcp_test'
|
|
259
|
+
AND TABLE_NAME = ?
|
|
260
|
+
AND REFERENCED_TABLE_NAME IS NOT NULL
|
|
261
|
+
`, [tableName]);
|
|
262
|
+
for (const fk of result[0]) {
|
|
263
|
+
constraints.push({
|
|
264
|
+
tableName,
|
|
265
|
+
columnName: fk.COLUMN_NAME,
|
|
266
|
+
referencedTable: fk.REFERENCED_TABLE_NAME,
|
|
267
|
+
referencedColumn: fk.REFERENCED_COLUMN_NAME,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (type === 'postgresql') {
|
|
272
|
+
const result = await db.raw(`
|
|
273
|
+
SELECT
|
|
274
|
+
kcu.column_name,
|
|
275
|
+
ccu.table_name AS referenced_table,
|
|
276
|
+
ccu.column_name AS referenced_column
|
|
277
|
+
FROM information_schema.table_constraints AS tc
|
|
278
|
+
JOIN information_schema.key_column_usage AS kcu
|
|
279
|
+
ON tc.constraint_name = kcu.constraint_name
|
|
280
|
+
JOIN information_schema.constraint_column_usage AS ccu
|
|
281
|
+
ON ccu.constraint_name = tc.constraint_name
|
|
282
|
+
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
283
|
+
AND tc.table_name = ?
|
|
284
|
+
`, [tableName]);
|
|
285
|
+
for (const fk of result.rows) {
|
|
286
|
+
constraints.push({
|
|
287
|
+
tableName,
|
|
288
|
+
columnName: fk.column_name,
|
|
289
|
+
referencedTable: fk.referenced_table,
|
|
290
|
+
referencedColumn: fk.referenced_column,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return constraints;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Assert FK constraints exist for a table
|
|
298
|
+
*/
|
|
299
|
+
export async function assertFKConstraintsExist(db, type, tableName, expectedCount, message) {
|
|
300
|
+
const constraints = await getFKConstraints(db, type, tableName);
|
|
301
|
+
assert.ok(constraints.length >= expectedCount, message || `Expected at least ${expectedCount} FK constraints on ${tableName}, found ${constraints.length}`);
|
|
302
|
+
}
|
|
303
|
+
// ============================================================================
|
|
304
|
+
// Data Seeding Helpers (DRY)
|
|
305
|
+
// ============================================================================
|
|
306
|
+
/**
|
|
307
|
+
* Seed test data with FK relationships
|
|
308
|
+
* Creates a simple schema: projects → agents → context_keys → decisions
|
|
309
|
+
*/
|
|
310
|
+
export async function seedTestData(db) {
|
|
311
|
+
const now = Math.floor(Date.now() / 1000);
|
|
312
|
+
// Clear existing test data (use test IDs 10, 20, 100, 101 to avoid conflicts with migration-created data)
|
|
313
|
+
await db('t_decisions').where('key_id', '>=', 100).andWhere('key_id', '<=', 101).del();
|
|
314
|
+
await db('m_context_keys').where('id', '>=', 100).andWhere('id', '<=', 101).del();
|
|
315
|
+
await db('m_agents').where('name', 'test-agent').del();
|
|
316
|
+
await db('m_projects').where('name', 'like', 'test-project-%').del();
|
|
317
|
+
// Seed m_projects (use IDs 10, 20 to avoid conflicts)
|
|
318
|
+
await db('m_projects').insert([
|
|
319
|
+
{ id: 10, name: 'test-project-1', display_name: 'Test Project 1', detection_source: 'test', created_ts: now, last_active_ts: now },
|
|
320
|
+
{ id: 20, name: 'test-project-2', display_name: 'Test Project 2', detection_source: 'test', created_ts: now, last_active_ts: now },
|
|
321
|
+
]);
|
|
322
|
+
// Seed m_agents (use ID 100 to avoid conflicts)
|
|
323
|
+
await db('m_agents').insert([
|
|
324
|
+
{ id: 100, name: 'test-agent' },
|
|
325
|
+
]);
|
|
326
|
+
// Seed m_context_keys (use IDs 100, 101 to avoid conflicts)
|
|
327
|
+
await db('m_context_keys').insert([
|
|
328
|
+
{ id: 100, key: 'test/key1' },
|
|
329
|
+
{ id: 101, key: 'test/key2' },
|
|
330
|
+
]);
|
|
331
|
+
// Seed t_decisions (has FK to m_projects, m_agents, m_context_keys)
|
|
332
|
+
await db('t_decisions').insert([
|
|
333
|
+
{ key_id: 100, project_id: 10, value: 'test-value-1', ts: now, agent_id: 100 },
|
|
334
|
+
{ key_id: 101, project_id: 20, value: 'test-value-2', ts: now, agent_id: 100 },
|
|
335
|
+
]);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Verify seeded data exists
|
|
339
|
+
* Note: Migrations may create a default project (ID 1), so we check for our test projects specifically
|
|
340
|
+
*/
|
|
341
|
+
export async function assertSeededDataExists(db) {
|
|
342
|
+
// Check for our specific test projects (IDs 10, 20)
|
|
343
|
+
const testProjects = await db('m_projects').whereIn('id', [10, 20]);
|
|
344
|
+
assert.strictEqual(testProjects.length, 2, 'Should have 2 test projects (IDs 10, 20)');
|
|
345
|
+
// Check for our test decisions
|
|
346
|
+
const testDecisions = await db('t_decisions').whereIn('key_id', [100, 101]);
|
|
347
|
+
assert.strictEqual(testDecisions.length, 2, 'Should have 2 test decisions (key_ids 100, 101)');
|
|
348
|
+
}
|
|
349
|
+
// ============================================================================
|
|
350
|
+
// SQL Import Helpers (DRY)
|
|
351
|
+
// ============================================================================
|
|
352
|
+
/**
|
|
353
|
+
* Import SQL dump to database via Docker container
|
|
354
|
+
*/
|
|
355
|
+
export async function importSqlToDocker(sql, containerName, type) {
|
|
356
|
+
const tempFile = `/tmp/sqlew-test-${Date.now()}.sql`;
|
|
357
|
+
writeFileSync(tempFile, sql);
|
|
358
|
+
try {
|
|
359
|
+
// Copy file to container
|
|
360
|
+
await execAsync(`docker cp ${tempFile} ${containerName}:/tmp/import.sql`);
|
|
361
|
+
// Import based on database type
|
|
362
|
+
if (type === 'mysql' || type === 'mariadb') {
|
|
363
|
+
await execAsync(`docker exec ${containerName} mysql -u mcp_user -pmcp_pass mcp_test -e "SOURCE /tmp/import.sql"`);
|
|
364
|
+
}
|
|
365
|
+
else if (type === 'postgresql') {
|
|
366
|
+
await execAsync(`docker exec ${containerName} psql -U mcp_user -d mcp_test -f /tmp/import.sql -v ON_ERROR_STOP=1 -q`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
finally {
|
|
370
|
+
// Clean up temp file
|
|
371
|
+
if (existsSync(tempFile)) {
|
|
372
|
+
unlinkSync(tempFile);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Setup test context with multiple databases
|
|
378
|
+
*/
|
|
379
|
+
export async function setupTestContext(types) {
|
|
380
|
+
const dbs = new Map();
|
|
381
|
+
const configs = new Map();
|
|
382
|
+
for (const type of types) {
|
|
383
|
+
const config = getDbConfig(type);
|
|
384
|
+
configs.set(type, config);
|
|
385
|
+
try {
|
|
386
|
+
const db = await connectDb(config);
|
|
387
|
+
dbs.set(type, db);
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
// Clean up already connected databases
|
|
391
|
+
for (const [, db] of dbs) {
|
|
392
|
+
await disconnectDb(db);
|
|
393
|
+
}
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return { dbs, configs };
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Teardown test context (close all connections)
|
|
401
|
+
*/
|
|
402
|
+
export async function teardownTestContext(context) {
|
|
403
|
+
for (const [, db] of context.dbs) {
|
|
404
|
+
await disconnectDb(db);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/tests/utils/test-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config tool for MCP Shared Context Server
|
|
3
|
+
* Manages per-project configuration with inheritance (project-specific > global)
|
|
4
|
+
*
|
|
5
|
+
* CONVERTED: Using Knex.js query builder only (NO knex.raw())
|
|
6
|
+
*/
|
|
7
|
+
import { DatabaseAdapter } from '../adapters/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get configuration value with per-project inheritance
|
|
10
|
+
*
|
|
11
|
+
* Lookup priority:
|
|
12
|
+
* 1. Project-specific config (project_id = current project)
|
|
13
|
+
* 2. Global config (project_id = NULL)
|
|
14
|
+
*
|
|
15
|
+
* @param params - Config key to retrieve
|
|
16
|
+
* @param adapter - Optional database adapter (for testing)
|
|
17
|
+
* @returns Config value or null if not found
|
|
18
|
+
*/
|
|
19
|
+
export declare function getConfig(params: {
|
|
20
|
+
key: string;
|
|
21
|
+
}, adapter?: DatabaseAdapter): Promise<{
|
|
22
|
+
key: string;
|
|
23
|
+
value: string | null;
|
|
24
|
+
scope: 'project' | 'global' | 'not_found';
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Update configuration value (project-specific or global)
|
|
28
|
+
*
|
|
29
|
+
* @param params - Config key, value, and optional scope
|
|
30
|
+
* @param adapter - Optional database adapter (for testing)
|
|
31
|
+
* @returns Success status
|
|
32
|
+
*/
|
|
33
|
+
export declare function updateConfig(params: {
|
|
34
|
+
key: string;
|
|
35
|
+
value: string;
|
|
36
|
+
scope?: 'project' | 'global';
|
|
37
|
+
}, adapter?: DatabaseAdapter): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
key: string;
|
|
40
|
+
value: string;
|
|
41
|
+
scope: 'project' | 'global';
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Get help documentation for config tool
|
|
45
|
+
* @returns Help documentation object
|
|
46
|
+
*/
|
|
47
|
+
export declare function configHelp(): any;
|
|
48
|
+
/**
|
|
49
|
+
* Get comprehensive examples for config tool
|
|
50
|
+
* @returns Examples documentation object
|
|
51
|
+
*/
|
|
52
|
+
export declare function configExample(): any;
|
|
53
|
+
/**
|
|
54
|
+
* Get use case documentation for config tool
|
|
55
|
+
* @returns Use case documentation object
|
|
56
|
+
*/
|
|
57
|
+
export declare function configUseCase(): any;
|
|
58
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;CAAE,CAAC,CAkD3F;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,EACD,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC,CAqCxF;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,GAAG,CA2BhC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAyEnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CA0DnC"}
|