sqlew 3.9.0 → 4.0.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 +20 -0
- package/README.md +20 -3
- package/assets/sample-agents/sqlew-architect.md +3 -4
- package/assets/sample-agents/sqlew-researcher.md +6 -15
- package/assets/sample-agents/sqlew-scrum-master.md +58 -50
- package/assets/sample-commands/sqw-documentor.md +62 -16
- package/assets/sample-commands/sqw-plan.md +82 -35
- package/assets/sample-commands/sqw-research.md +78 -17
- package/assets/sample-commands/sqw-review.md +66 -29
- package/assets/sample-commands/sqw-scrum.md +37 -3
- package/dist/adapters/mysql-adapter.js +3 -3
- package/dist/adapters/postgresql-adapter.js +3 -3
- package/dist/cli/db-dump.js +73 -73
- package/dist/cli/db-export.js +50 -50
- package/dist/cli/db-import.js +51 -51
- package/dist/cli.js +52 -52
- package/dist/config/minimal-generator.js +91 -91
- package/dist/database/config/config-ops.d.ts +19 -11
- package/dist/database/config/config-ops.d.ts.map +1 -1
- package/dist/database/config/config-ops.js +62 -36
- package/dist/database/config/config-ops.js.map +1 -1
- package/dist/database/index.d.ts +3 -1
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +4 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/initialization/init.d.ts.map +1 -1
- package/dist/database/initialization/init.js +31 -0
- package/dist/database/initialization/init.js.map +1 -1
- package/dist/database/initialization/schema-version.d.ts +94 -0
- package/dist/database/initialization/schema-version.d.ts.map +1 -0
- package/dist/database/initialization/schema-version.js +166 -0
- package/dist/database/initialization/schema-version.js.map +1 -0
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.d.ts +36 -0
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js +597 -0
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js.map +1 -0
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts +26 -0
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +390 -0
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -0
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.d.ts +17 -0
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.js +50 -0
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.js.map +1 -0
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.d.ts +13 -0
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.js +76 -0
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.js.map +1 -0
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.d.ts +17 -0
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js +334 -0
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js.map +1 -0
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.d.ts +11 -0
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js +33 -0
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js.map +1 -0
- package/dist/database/operations/inserts.d.ts +12 -7
- package/dist/database/operations/inserts.d.ts.map +1 -1
- package/dist/database/operations/inserts.js +30 -60
- package/dist/database/operations/inserts.js.map +1 -1
- package/dist/database/operations/queries.d.ts.map +1 -1
- package/dist/database/operations/queries.js +19 -21
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/database/operations/updates.d.ts +2 -1
- package/dist/database/operations/updates.d.ts.map +1 -1
- package/dist/database/operations/updates.js +3 -6
- package/dist/database/operations/updates.js.map +1 -1
- package/dist/init-agents.js +27 -27
- package/dist/init-commands.js +25 -25
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +5 -25
- package/dist/knexfile.js.map +1 -1
- package/dist/schema.d.ts +7 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +43 -50
- package/dist/schema.js.map +1 -1
- package/dist/server/arg-parser.js +18 -18
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +18 -1
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/sync-gitignore.d.ts +13 -0
- package/dist/sync-gitignore.d.ts.map +1 -0
- package/dist/sync-gitignore.js +60 -0
- package/dist/sync-gitignore.js.map +1 -0
- package/dist/tests/database/multi-project/multi-project.test.js +13 -13
- package/dist/tests/database/multi-project/multi-project.test.js.map +1 -1
- package/dist/tests/database/sql-dump/default-conversions.test.js +4 -4
- package/dist/tests/database/sql-dump/default-conversions.test.js.map +1 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js +14 -14
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -1
- package/dist/tests/docker/cross-database.test.js +12 -18
- package/dist/tests/docker/cross-database.test.js.map +1 -1
- package/dist/tests/docker/dump-import.test.js +15 -15
- package/dist/tests/docker/dump-import.test.js.map +1 -1
- package/dist/tests/docker/multi-project-migration.test.js +44 -61
- package/dist/tests/docker/multi-project-migration.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.d.ts +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +65 -114
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/db-init.d.ts +1 -1
- package/dist/tests/docker/native/db-init.js +3 -3
- package/dist/tests/docker/native/db-init.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +93 -148
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.js +60 -60
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.js +25 -33
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/task-operations.test.js +114 -140
- package/dist/tests/docker/native/task-operations.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +0 -9
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +42 -69
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js +6 -9
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/feature/task/auto-pruning-partial.test.js +17 -19
- package/dist/tests/feature/task/auto-pruning-partial.test.js.map +1 -1
- package/dist/tests/feature/task/auto-pruning-persistence.test.js +11 -14
- package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +1 -1
- package/dist/tests/feature/task/auto-pruning-safety.test.js +23 -42
- package/dist/tests/feature/task/auto-pruning-safety.test.js.map +1 -1
- package/dist/tests/feature/task/dependencies.test.js +30 -34
- package/dist/tests/feature/task/dependencies.test.js.map +1 -1
- package/dist/tests/feature/task/link-file-backward-compat.test.js +19 -21
- package/dist/tests/feature/task/link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/feature/task/watch-files-action.test.js +10 -12
- package/dist/tests/feature/task/watch-files-action.test.js.map +1 -1
- package/dist/tests/feature/task/watch-files-parameter.test.js +25 -27
- package/dist/tests/feature/task/watch-files-parameter.test.js.map +1 -1
- package/dist/tests/feature/vcs/git-aware-completion.test.js +32 -42
- package/dist/tests/feature/vcs/git-aware-completion.test.js.map +1 -1
- package/dist/tests/feature/vcs/two-step-git-completion.test.js +83 -104
- package/dist/tests/feature/vcs/two-step-git-completion.test.js.map +1 -1
- package/dist/tests/integration/all-features.standalone.js +4 -6
- package/dist/tests/integration/all-features.standalone.js.map +1 -1
- package/dist/tests/integration/auto-trigger-suggestions.test.js +26 -68
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
- package/dist/tests/integration/decision-intelligence-e2e.test.js +32 -71
- package/dist/tests/integration/decision-intelligence-e2e.test.js.map +1 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.js +3 -17
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +1 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js +45 -55
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
- package/dist/tests/migrations/test-all-versions.d.ts +1 -1
- package/dist/tests/migrations/test-all-versions.js +11 -9
- package/dist/tests/migrations/test-all-versions.js.map +1 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +7 -0
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +1 -0
- package/dist/tests/migrations/v4/v4-fresh-install.test.js +168 -0
- package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +1 -0
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +13 -0
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +1 -0
- package/dist/tests/migrations/v4/v4-migrate-data.test.js +264 -0
- package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +1 -0
- package/dist/tests/test-v4-native-rdbms.d.ts +10 -0
- package/dist/tests/test-v4-native-rdbms.d.ts.map +1 -0
- package/dist/tests/test-v4-native-rdbms.js +235 -0
- package/dist/tests/test-v4-native-rdbms.js.map +1 -0
- package/dist/tests/unit/constraint-scorer.test.d.ts +13 -0
- package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -0
- package/dist/tests/unit/constraint-scorer.test.js +390 -0
- package/dist/tests/unit/constraint-scorer.test.js.map +1 -0
- package/dist/tests/unit/validation/policy-validation.test.js +15 -15
- package/dist/tests/unit/validation/policy-validation.test.js.map +1 -1
- package/dist/tests/utils/db-config.d.ts.map +1 -1
- package/dist/tests/utils/db-config.js +2 -3
- package/dist/tests/utils/db-config.js.map +1 -1
- package/dist/tests/utils/db-seeding.d.ts.map +1 -1
- package/dist/tests/utils/db-seeding.js +17 -20
- package/dist/tests/utils/db-seeding.js.map +1 -1
- package/dist/tests/utils/task-helpers.d.ts +9 -9
- package/dist/tests/utils/task-helpers.d.ts.map +1 -1
- package/dist/tests/utils/task-helpers.js +26 -43
- package/dist/tests/utils/task-helpers.js.map +1 -1
- package/dist/tests/utils/test-helpers.d.ts +13 -8
- package/dist/tests/utils/test-helpers.d.ts.map +1 -1
- package/dist/tests/utils/test-helpers.js +55 -69
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tools/constraints/actions/add.d.ts.map +1 -1
- package/dist/tools/constraints/actions/add.js +8 -23
- package/dist/tools/constraints/actions/add.js.map +1 -1
- package/dist/tools/constraints/actions/deactivate.js +2 -2
- package/dist/tools/constraints/actions/deactivate.js.map +1 -1
- package/dist/tools/constraints/actions/get.d.ts +2 -2
- package/dist/tools/constraints/actions/get.js +2 -2
- package/dist/tools/context/actions/create-policy.d.ts.map +1 -1
- package/dist/tools/context/actions/create-policy.js +3 -20
- package/dist/tools/context/actions/create-policy.js.map +1 -1
- package/dist/tools/context/actions/create-template.d.ts.map +1 -1
- package/dist/tools/context/actions/create-template.js +5 -9
- package/dist/tools/context/actions/create-template.js.map +1 -1
- package/dist/tools/context/actions/hard-delete.js +12 -12
- package/dist/tools/context/actions/hard-delete.js.map +1 -1
- package/dist/tools/context/actions/has-updates.js +3 -3
- package/dist/tools/context/actions/has-updates.js.map +1 -1
- package/dist/tools/context/actions/list-policies.d.ts.map +1 -1
- package/dist/tools/context/actions/list-policies.js +3 -3
- package/dist/tools/context/actions/list-policies.js.map +1 -1
- package/dist/tools/context/actions/list-templates.d.ts.map +1 -1
- package/dist/tools/context/actions/list-templates.js +4 -5
- package/dist/tools/context/actions/list-templates.js.map +1 -1
- package/dist/tools/context/actions/list.js +1 -1
- package/dist/tools/context/actions/list.js.map +1 -1
- package/dist/tools/context/actions/search-layer.d.ts.map +1 -1
- package/dist/tools/context/actions/search-layer.js +11 -12
- package/dist/tools/context/actions/search-layer.js.map +1 -1
- package/dist/tools/context/actions/set-from-policy.js +1 -1
- package/dist/tools/context/actions/set-from-policy.js.map +1 -1
- package/dist/tools/context/actions/set-from-template.js +2 -2
- package/dist/tools/context/actions/set-from-template.js.map +1 -1
- package/dist/tools/context/actions/versions.d.ts.map +1 -1
- package/dist/tools/context/actions/versions.js +6 -7
- package/dist/tools/context/actions/versions.js.map +1 -1
- package/dist/tools/context/internal/queries.d.ts.map +1 -1
- package/dist/tools/context/internal/queries.js +73 -53
- package/dist/tools/context/internal/queries.js.map +1 -1
- package/dist/tools/example/actions/get.js +7 -7
- package/dist/tools/example/actions/get.js.map +1 -1
- package/dist/tools/example/actions/list-all.js +4 -4
- package/dist/tools/example/actions/list-all.js.map +1 -1
- package/dist/tools/example/actions/search.js +8 -8
- package/dist/tools/example/actions/search.js.map +1 -1
- package/dist/tools/example/help/example.js +21 -21
- package/dist/tools/files/actions/check-lock.d.ts.map +1 -1
- package/dist/tools/files/actions/check-lock.js +4 -6
- package/dist/tools/files/actions/check-lock.js.map +1 -1
- package/dist/tools/files/actions/get.d.ts.map +1 -1
- package/dist/tools/files/actions/get.js +6 -8
- package/dist/tools/files/actions/get.js.map +1 -1
- package/dist/tools/files/internal/queries.d.ts.map +1 -1
- package/dist/tools/files/internal/queries.js +5 -14
- package/dist/tools/files/internal/queries.js.map +1 -1
- package/dist/tools/help/actions/batch-guide.js +5 -5
- package/dist/tools/help/actions/batch-guide.js.map +1 -1
- package/dist/tools/help-queries.js +29 -29
- package/dist/tools/help-queries.js.map +1 -1
- package/dist/tools/suggest/actions/by-tags.d.ts +2 -2
- package/dist/tools/suggest/actions/by-tags.js +2 -2
- package/dist/tools/suggest/actions/constraint-by-context.d.ts +66 -0
- package/dist/tools/suggest/actions/constraint-by-context.d.ts.map +1 -0
- package/dist/tools/suggest/actions/constraint-by-context.js +82 -0
- package/dist/tools/suggest/actions/constraint-by-context.js.map +1 -0
- package/dist/tools/suggest/actions/constraint-by-tags.d.ts +48 -0
- package/dist/tools/suggest/actions/constraint-by-tags.d.ts.map +1 -0
- package/dist/tools/suggest/actions/constraint-by-tags.js +68 -0
- package/dist/tools/suggest/actions/constraint-by-tags.js.map +1 -0
- package/dist/tools/suggest/actions/constraint-by-text.d.ts +47 -0
- package/dist/tools/suggest/actions/constraint-by-text.d.ts.map +1 -0
- package/dist/tools/suggest/actions/constraint-by-text.js +65 -0
- package/dist/tools/suggest/actions/constraint-by-text.js.map +1 -0
- package/dist/tools/suggest/actions/constraint-check-duplicate.d.ts +50 -0
- package/dist/tools/suggest/actions/constraint-check-duplicate.d.ts.map +1 -0
- package/dist/tools/suggest/actions/constraint-check-duplicate.js +68 -0
- package/dist/tools/suggest/actions/constraint-check-duplicate.js.map +1 -0
- package/dist/tools/suggest/help/constraint-help.d.ts +12 -0
- package/dist/tools/suggest/help/constraint-help.d.ts.map +1 -0
- package/dist/tools/suggest/help/constraint-help.js +126 -0
- package/dist/tools/suggest/help/constraint-help.js.map +1 -0
- package/dist/tools/suggest/index.d.ts +3 -2
- package/dist/tools/suggest/index.d.ts.map +1 -1
- package/dist/tools/suggest/index.js +67 -4
- package/dist/tools/suggest/index.js.map +1 -1
- package/dist/tools/suggest/internal/constraint-queries.d.ts +55 -0
- package/dist/tools/suggest/internal/constraint-queries.d.ts.map +1 -0
- package/dist/tools/suggest/internal/constraint-queries.js +85 -0
- package/dist/tools/suggest/internal/constraint-queries.js.map +1 -0
- package/dist/tools/suggest/internal/queries.d.ts +4 -4
- package/dist/tools/suggest/internal/queries.d.ts.map +1 -1
- package/dist/tools/suggest/internal/queries.js +44 -37
- package/dist/tools/suggest/internal/queries.js.map +1 -1
- package/dist/tools/suggest/types.d.ts +10 -0
- package/dist/tools/suggest/types.d.ts.map +1 -1
- package/dist/tools/tasks/actions/add-dependency.d.ts.map +1 -1
- package/dist/tools/tasks/actions/add-dependency.js +15 -10
- package/dist/tools/tasks/actions/add-dependency.js.map +1 -1
- package/dist/tools/tasks/actions/archive.d.ts.map +1 -1
- package/dist/tools/tasks/actions/archive.js +2 -11
- package/dist/tools/tasks/actions/archive.js.map +1 -1
- package/dist/tools/tasks/actions/create.d.ts.map +1 -1
- package/dist/tools/tasks/actions/create.js +7 -24
- package/dist/tools/tasks/actions/create.js.map +1 -1
- package/dist/tools/tasks/actions/get-dependencies.js +1 -1
- package/dist/tools/tasks/actions/get-dependencies.js.map +1 -1
- package/dist/tools/tasks/actions/get-pruned-files.js +4 -4
- package/dist/tools/tasks/actions/get-pruned-files.js.map +1 -1
- package/dist/tools/tasks/actions/get.d.ts.map +1 -1
- package/dist/tools/tasks/actions/get.js +15 -16
- package/dist/tools/tasks/actions/get.js.map +1 -1
- package/dist/tools/tasks/actions/link-pruned-file.js +6 -6
- package/dist/tools/tasks/actions/link-pruned-file.js.map +1 -1
- package/dist/tools/tasks/actions/link.js +8 -8
- package/dist/tools/tasks/actions/link.js.map +1 -1
- package/dist/tools/tasks/actions/list.js +2 -2
- package/dist/tools/tasks/actions/list.js.map +1 -1
- package/dist/tools/tasks/actions/move.d.ts +2 -1
- package/dist/tools/tasks/actions/move.d.ts.map +1 -1
- package/dist/tools/tasks/actions/move.js +22 -22
- package/dist/tools/tasks/actions/move.js.map +1 -1
- package/dist/tools/tasks/actions/remove-dependency.js +1 -1
- package/dist/tools/tasks/actions/remove-dependency.js.map +1 -1
- package/dist/tools/tasks/actions/update.d.ts.map +1 -1
- package/dist/tools/tasks/actions/update.js +12 -15
- package/dist/tools/tasks/actions/update.js.map +1 -1
- package/dist/tools/tasks/actions/watch-files.js +8 -8
- package/dist/tools/tasks/actions/watch-files.js.map +1 -1
- package/dist/tools/tasks/help/example.js +4 -4
- package/dist/tools/tasks/help/example.js.map +1 -1
- package/dist/tools/tasks/help/help.d.ts.map +1 -1
- package/dist/tools/tasks/help/help.js +20 -10
- package/dist/tools/tasks/help/help.js.map +1 -1
- package/dist/tools/tasks/internal/state-machine.js +2 -2
- package/dist/tools/tasks/internal/state-machine.js.map +1 -1
- package/dist/tools/tasks/internal/task-queries.d.ts.map +1 -1
- package/dist/tools/tasks/internal/task-queries.js +9 -11
- package/dist/tools/tasks/internal/task-queries.js.map +1 -1
- package/dist/tools/tasks/types.d.ts +13 -1
- package/dist/tools/tasks/types.d.ts.map +1 -1
- package/dist/tools/tasks/types.js +30 -7
- package/dist/tools/tasks/types.js.map +1 -1
- package/dist/tools/tasks/watcher/status.js +8 -8
- package/dist/tools/tasks/watcher/status.js.map +1 -1
- package/dist/tools/use_case/actions/search.js +4 -4
- package/dist/tools/use_case/actions/search.js.map +1 -1
- package/dist/tools/use_case/help/example.js +16 -16
- package/dist/types/task/params.d.ts +2 -1
- package/dist/types/task/params.d.ts.map +1 -1
- package/dist/types.d.ts +10 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-specs/task-specs.js +5 -5
- package/dist/utils/action-specs/task-specs.js.map +1 -1
- package/dist/utils/batch-validation.d.ts +1 -1
- package/dist/utils/batch-validation.js +3 -3
- package/dist/utils/batch-validation.js.map +1 -1
- package/dist/utils/cleanup.js +3 -3
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/constraint-scorer.d.ts +113 -0
- package/dist/utils/constraint-scorer.d.ts.map +1 -0
- package/dist/utils/constraint-scorer.js +220 -0
- package/dist/utils/constraint-scorer.js.map +1 -0
- package/dist/utils/db-aggregations.js +10 -10
- package/dist/utils/db-aggregations.js.map +1 -1
- package/dist/utils/exporter/export.js +70 -70
- package/dist/utils/exporter/export.js.map +1 -1
- package/dist/utils/file-pruning.js +16 -16
- package/dist/utils/file-pruning.js.map +1 -1
- package/dist/utils/importer/import.js +33 -33
- package/dist/utils/importer/import.js.map +1 -1
- package/dist/utils/importer/master-tables.js +25 -25
- package/dist/utils/importer/master-tables.js.map +1 -1
- package/dist/utils/importer/topological-sort.d.ts +1 -1
- package/dist/utils/importer/topological-sort.js +1 -1
- package/dist/utils/policy-validator.js +5 -1
- package/dist/utils/policy-validator.js.map +1 -1
- package/dist/utils/project-context.js +3 -3
- package/dist/utils/project-context.js.map +1 -1
- package/dist/utils/quality-checks.js +3 -3
- package/dist/utils/quality-checks.js.map +1 -1
- package/dist/utils/retention.js +1 -1
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/sql-dump/core/dependency-sort.js +17 -17
- package/dist/utils/sql-dump/core/index-export.js +7 -7
- package/dist/utils/sql-dump/core/sequence-reset.js +5 -5
- package/dist/utils/sql-dump/generators/headers.js +10 -10
- package/dist/utils/sql-dump/schema/indexes.js +15 -15
- package/dist/utils/sql-dump/schema/primary-keys.js +14 -14
- package/dist/utils/sql-dump/schema/tables.js +44 -44
- package/dist/utils/sql-dump/schema/views.js +21 -21
- package/dist/utils/suggestion-scorer.d.ts.map +1 -1
- package/dist/utils/suggestion-scorer.js +9 -0
- package/dist/utils/suggestion-scorer.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +20 -19
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-logging.js +6 -6
- package/dist/utils/token-logging.js.map +1 -1
- package/dist/utils/validators.d.ts +4 -4
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +10 -4
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/view-queries.d.ts +3 -3
- package/dist/utils/view-queries.d.ts.map +1 -1
- package/dist/utils/view-queries.js +41 -66
- package/dist/utils/view-queries.js.map +1 -1
- package/dist/watcher/file-watcher.js +20 -20
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/AI_AGENT_GUIDE.md +81 -1376
- package/docs/ARCHITECTURE.md +127 -608
- package/docs/AUTO_FILE_TRACKING.md +22 -20
- package/docs/BATCH_VALIDATION.md +3 -3
- package/docs/CONFIGURATION.md +69 -68
- package/docs/CONSTRAINT_INTELLIGENCE.md +339 -0
- package/docs/DATABASE_AUTH.md +1 -1
- package/docs/DECISION_CONTEXT.md +12 -0
- package/docs/DECISION_INTELLIGENCE.md +19 -8
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +21 -20
- package/docs/SHARED_CONCEPTS.md +46 -16
- package/docs/SLASH_COMMANDS.md +88 -117
- package/docs/SPECIALIZED_AGENTS.md +45 -572
- package/docs/TASK_ACTIONS.md +63 -53
- package/docs/TASK_OVERVIEW.md +49 -61
- package/docs/TASK_PRUNING.md +32 -27
- package/docs/TOOL_REFERENCE.md +119 -76
- package/docs/TOOL_SELECTION.md +15 -18
- package/docs/WORKFLOWS.md +504 -350
- package/package.json +119 -119
- package/assets/sample-commands/sqw-secretary.md +0 -187
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js +0 -97
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js +0 -270
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.js +0 -93
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js +0 -146
- package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js.map +0 -1
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js +0 -182
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
- package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts +0 -4
- package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
- package/dist/config/knex/bootstrap/20251025070349_create_views.js +0 -247
- package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +0 -1
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -4
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -22
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -8
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -12
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -19
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js +0 -121
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -13
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +0 -383
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -15
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js +0 -259
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -16
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -276
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -8
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +0 -71
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -14
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -62
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -4
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -24
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -16
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js +0 -33
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -23
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js +0 -58
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +0 -13
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +0 -48
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +0 -1
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +0 -24
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +0 -189
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +0 -1
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +0 -16
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +0 -72
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +0 -1
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +0 -23
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +0 -118
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +0 -1
- package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +0 -29
- package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js +0 -556
- package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +0 -1
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts +0 -21
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js +0 -73
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +0 -19
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +0 -88
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +0 -24
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js +0 -79
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +0 -1
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts +0 -27
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js +0 -347
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +0 -30
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js +0 -232
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +0 -22
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js +0 -106
- package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +0 -21
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +0 -106
- package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +0 -21
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js +0 -91
- package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +0 -1
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +0 -15
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +0 -270
- package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +0 -15
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +0 -241
- package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts +0 -16
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js +0 -168
- package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts +0 -14
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js +0 -228
- package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts +0 -14
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js +0 -237
- package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +0 -14
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js +0 -61
- package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts +0 -21
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js +0 -127
- package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js.map +0 -1
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +0 -15
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js +0 -69
- package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +0 -15
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js +0 -132
- package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +0 -18
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js +0 -47
- package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +0 -1
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts +0 -20
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts.map +0 -1
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js +0 -119
- package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js.map +0 -1
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -13
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -70
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -11
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -36
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -14
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -84
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -9
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -37
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -9
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -41
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -9
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -36
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -10
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -28
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +0 -49
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +0 -974
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +0 -1
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +0 -14
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js +0 -97
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +0 -1
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +0 -24
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js +0 -303
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +0 -1
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +0 -19
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js +0 -196
- package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +0 -1
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts +0 -22
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts.map +0 -1
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js +0 -375
- package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -16
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js +0 -84
- package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -14
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js +0 -42
- package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -17
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js +0 -122
- package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -12
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js +0 -49
- package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -12
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -53
- package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -12
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js +0 -44
- package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -13
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js +0 -33
- package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts +0 -17
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js +0 -119
- package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts +0 -15
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js +0 -282
- package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts +0 -21
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.js +0 -83
- package/dist/database/migrations/20251025021351_create_indexes_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts +0 -22
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js +0 -94
- package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts +0 -19
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js +0 -120
- package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts +0 -14
- package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts.map +0 -1
- package/dist/database/migrations/20251025070349_create_views_wrapper.js +0 -160
- package/dist/database/migrations/20251025070349_create_views_wrapper.js.map +0 -1
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -9
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js +0 -21
- package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts +0 -13
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js +0 -17
- package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js.map +0 -1
- package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts +0 -27
- package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts.map +0 -1
- package/dist/database/migrations/20251025090000_create_help_system_tables.js +0 -120
- package/dist/database/migrations/20251025090000_create_help_system_tables.js.map +0 -1
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -18
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js +0 -388
- package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
- package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts +0 -20
- package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts.map +0 -1
- package/dist/database/migrations/20251025100000_seed_help_metadata.js +0 -264
- package/dist/database/migrations/20251025100000_seed_help_metadata.js.map +0 -1
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts +0 -21
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js +0 -281
- package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js.map +0 -1
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -13
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js +0 -76
- package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts +0 -17
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.js +0 -42
- package/dist/database/migrations/20251027000000_add_agent_reuse_system.js.map +0 -1
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -10
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js +0 -28
- package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
- package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts +0 -21
- package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts.map +0 -1
- package/dist/database/migrations/20251027020000_update_agent_reusability.js +0 -38
- package/dist/database/migrations/20251027020000_update_agent_reusability.js.map +0 -1
- package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts +0 -26
- package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts.map +0 -1
- package/dist/database/migrations/20251028000000_simplify_agent_system.js +0 -56
- package/dist/database/migrations/20251028000000_simplify_agent_system.js.map +0 -1
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts +0 -16
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts.map +0 -1
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js +0 -52
- package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js.map +0 -1
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts +0 -56
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts.map +0 -1
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js +0 -701
- package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js.map +0 -1
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +0 -30
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +0 -1
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js +0 -180
- package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js.map +0 -1
- package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts +0 -19
- package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts.map +0 -1
- package/dist/database/migrations/20251105000000_add_token_usage_table.js +0 -47
- package/dist/database/migrations/20251105000000_add_token_usage_table.js.map +0 -1
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +0 -28
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +0 -1
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js +0 -123
- package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +0 -1
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +0 -36
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +0 -1
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js +0 -559
- package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +0 -1
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts +0 -26
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts.map +0 -1
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js +0 -78
- package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js.map +0 -1
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +0 -17
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +0 -1
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js +0 -78
- package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +0 -1
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +0 -24
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +0 -1
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +0 -63
- package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +0 -1
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +0 -27
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +0 -1
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js +0 -276
- package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +0 -1
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +0 -27
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +0 -1
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js +0 -67
- package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +0 -1
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts +0 -32
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts.map +0 -1
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js +0 -352
- package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js.map +0 -1
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +0 -35
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +0 -1
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js +0 -237
- package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js.map +0 -1
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +0 -22
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js +0 -190
- package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts +0 -32
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js +0 -342
- package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +0 -25
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js +0 -109
- package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +0 -24
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +0 -111
- package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +0 -24
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +0 -1
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js +0 -90
- package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +0 -1
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +0 -20
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +0 -275
- package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +0 -20
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +0 -246
- package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts +0 -23
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js +0 -175
- package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts +0 -21
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js +0 -235
- package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts +0 -21
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js +0 -244
- package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +0 -23
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js +0 -70
- package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts +0 -29
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +0 -1
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js +0 -135
- package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js.map +0 -1
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +0 -23
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js +0 -42
- package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +0 -25
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js +0 -102
- package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +0 -25
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js +0 -55
- package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts +0 -29
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts.map +0 -1
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js +0 -62
- package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js.map +0 -1
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts +0 -25
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts.map +0 -1
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js +0 -100
- package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js.map +0 -1
- package/dist/tests/database/migrations/idempotency.test.d.ts +0 -2
- package/dist/tests/database/migrations/idempotency.test.d.ts.map +0 -1
- package/dist/tests/database/migrations/idempotency.test.js +0 -331
- package/dist/tests/database/migrations/idempotency.test.js.map +0 -1
- package/dist/tests/database/migrations/upgrade-paths.test.d.ts +0 -2
- package/dist/tests/database/migrations/upgrade-paths.test.d.ts.map +0 -1
- package/dist/tests/database/migrations/upgrade-paths.test.js +0 -249
- package/dist/tests/database/migrations/upgrade-paths.test.js.map +0 -1
- package/dist/utils/activity-logging.d.ts +0 -114
- package/dist/utils/activity-logging.d.ts.map +0 -1
- package/dist/utils/activity-logging.js +0 -169
- package/dist/utils/activity-logging.js.map +0 -1
- package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +0 -457
- package/docs/TASK_DEPENDENCIES.md +0 -748
- package/docs/TASK_LINKING.md +0 -909
- package/docs/TASK_MIGRATION.md +0 -701
- package/docs/TASK_SYSTEM.md +0 -1314
|
@@ -1,974 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration: Multi-Project Support v3.7.0 (Consolidated)
|
|
3
|
-
*
|
|
4
|
-
* Consolidates 4 separate migrations into a single comprehensive migration:
|
|
5
|
-
* - 20251101000000_add_multi_project_support (enhancements)
|
|
6
|
-
* - 20251104000000_multi_project_support_v3_7_0 (upgrades)
|
|
7
|
-
* - 20251104000001_multi_project_fix_constraints (upgrades)
|
|
8
|
-
* - 20251104000002_hotfix_missing_project_id (upgrades)
|
|
9
|
-
*
|
|
10
|
-
* Adds multi-project isolation support by:
|
|
11
|
-
* 1. Creating m_projects master table
|
|
12
|
-
* 2. Adding project_id to all transaction tables (14 tables)
|
|
13
|
-
* 3. Updating PRIMARY KEY constraints to composite (key_id, project_id)
|
|
14
|
-
* 4. Recreating m_config table with proper PRIMARY KEY structure
|
|
15
|
-
* 5. Adding indexes for multi-project queries
|
|
16
|
-
* 6. Recreating all views with project_id support
|
|
17
|
-
*
|
|
18
|
-
* Migration Steps:
|
|
19
|
-
* - STEP 1: Create m_projects table
|
|
20
|
-
* - STEP 2: Drop all views and triggers before modifications
|
|
21
|
-
* - STEP 3: Add project_id via ALTER TABLE (10 tables)
|
|
22
|
-
* - STEP 4: Fix PRIMARY KEY constraints (composite keys)
|
|
23
|
-
* - STEP 4a-4b: Recreate t_decisions tables with composite PRIMARY KEY
|
|
24
|
-
* - STEP 4.5: Recreate t_task_tags with composite PRIMARY KEY
|
|
25
|
-
* - STEP 4.6: Recreate t_task_dependencies with composite PRIMARY KEY
|
|
26
|
-
* - STEP 4.7: Recreate t_task_details with project_id (ALTER TABLE fails due to FK constraints)
|
|
27
|
-
* - STEP 4.8: Recreate t_task_file_links with project_id (ALTER TABLE fails due to FK constraints)
|
|
28
|
-
* - STEP 4.9: Recreate t_task_decision_links with project_id (ALTER TABLE fails due to FK constraints)
|
|
29
|
-
* - STEP 5: Recreate m_config table
|
|
30
|
-
* - STEP 6: Create composite indexes
|
|
31
|
-
* - STEP 7: Recreate all views with project_id support
|
|
32
|
-
* - STEP 8: Re-enable foreign key constraints
|
|
33
|
-
*
|
|
34
|
-
* SQLite Limitation Note:
|
|
35
|
-
* ALTER TABLE cannot modify tables with complex FOREIGN KEY constraints (ON DELETE CASCADE).
|
|
36
|
-
* Tables requiring recreation: t_task_details, t_task_tags, t_task_file_links,
|
|
37
|
-
* t_task_decision_links, t_task_dependencies.
|
|
38
|
-
*
|
|
39
|
-
* Satisfies Constraints:
|
|
40
|
-
* - #22 (CRITICAL): All transaction tables have project_id
|
|
41
|
-
* - #23 (CRITICAL): m_projects table with name/detection_source
|
|
42
|
-
* - #39 (HIGH): Composite indexes with project_id first
|
|
43
|
-
* - #41 (HIGH): t_task_tags composite PRIMARY KEY
|
|
44
|
-
* - #42 (HIGH): t_task_dependencies composite PRIMARY KEY
|
|
45
|
-
*/
|
|
46
|
-
import { detectProjectNameSync } from '../../../utils/project-detector.js';
|
|
47
|
-
export async function up(knex) {
|
|
48
|
-
// **BUG FIX v3.7.5**: This migration is SQLite-specific
|
|
49
|
-
// MySQL/PostgreSQL compatibility handled by 20251109000002_multi_project_cross_db_compat_v3_7_5.ts
|
|
50
|
-
const client = knex.client.config.client;
|
|
51
|
-
const isSQLite = client === 'sqlite3' || client === 'better-sqlite3';
|
|
52
|
-
if (!isSQLite) {
|
|
53
|
-
console.log(`✓ Non-SQLite database (${client}) detected, skipping (handled by 20251109000002)`);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// Check if migration already completed
|
|
57
|
-
const hasProjectsTable = await knex.schema.hasTable('m_projects');
|
|
58
|
-
const hasProjectIdInDecisions = await knex.schema.hasColumn('t_decisions', 'project_id');
|
|
59
|
-
const hasMigrationMarker = await knex.schema.hasTable('_multi_project_pk_fixed');
|
|
60
|
-
console.log(`🔍 Multi-project migration check:`);
|
|
61
|
-
console.log(` - m_projects: ${hasProjectsTable}`);
|
|
62
|
-
console.log(` - project_id in t_decisions: ${hasProjectIdInDecisions}`);
|
|
63
|
-
console.log(` - migration marker: ${hasMigrationMarker}`);
|
|
64
|
-
// If fully migrated, skip
|
|
65
|
-
if (hasProjectsTable && hasProjectIdInDecisions && hasMigrationMarker) {
|
|
66
|
-
console.log('✓ Multi-project schema already migrated, skipping');
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
console.log('🔄 Starting multi-project support migration v3.7.0 (consolidated)...');
|
|
70
|
-
// Disable foreign key constraints temporarily for SQLite
|
|
71
|
-
await knex.raw('PRAGMA foreign_keys = OFF');
|
|
72
|
-
console.log('✓ Disabled foreign key constraints');
|
|
73
|
-
// ============================================================================
|
|
74
|
-
// STEP 1: Create m_projects Master Table
|
|
75
|
-
// ============================================================================
|
|
76
|
-
let defaultProjectId;
|
|
77
|
-
// Detect real project name (v3.7.3 fix)
|
|
78
|
-
const projectRoot = process.cwd();
|
|
79
|
-
const detected = detectProjectNameSync(projectRoot);
|
|
80
|
-
if (!hasProjectsTable) {
|
|
81
|
-
await knex.schema.createTable('m_projects', (table) => {
|
|
82
|
-
table.increments('id').primary();
|
|
83
|
-
table.string('name', 64).notNullable().unique();
|
|
84
|
-
table.string('display_name', 128);
|
|
85
|
-
table.string('detection_source', 20).notNullable(); // 'cli' | 'config' | 'git' | 'metadata' | 'directory'
|
|
86
|
-
table.string('project_root_path', 512);
|
|
87
|
-
table.integer('created_ts').notNullable();
|
|
88
|
-
table.integer('last_active_ts').notNullable();
|
|
89
|
-
table.text('metadata'); // JSON string for extensibility
|
|
90
|
-
});
|
|
91
|
-
// Insert project with REAL detected name (v3.7.3 fix)
|
|
92
|
-
const now = Math.floor(Date.now() / 1000);
|
|
93
|
-
await knex('m_projects').insert({
|
|
94
|
-
id: 1,
|
|
95
|
-
name: detected.name,
|
|
96
|
-
display_name: detected.name,
|
|
97
|
-
detection_source: detected.source,
|
|
98
|
-
created_ts: now,
|
|
99
|
-
last_active_ts: now,
|
|
100
|
-
});
|
|
101
|
-
defaultProjectId = 1;
|
|
102
|
-
console.log(`✓ Created m_projects table with project "${detected.name}" (ID: ${defaultProjectId}, source: ${detected.source})`);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// ========================================================================
|
|
106
|
-
// Data Consolidation Strategy (v3.7.3 fix)
|
|
107
|
-
// ========================================================================
|
|
108
|
-
// Goal: Consolidate everything into project ID 1 with correct name
|
|
109
|
-
//
|
|
110
|
-
// This ONLY runs if upgrading from v3.7.0-v3.7.2 where:
|
|
111
|
-
// - Project #1 was created with fake name "default" or "default-project"
|
|
112
|
-
// - User manually created project #2 with real project name
|
|
113
|
-
//
|
|
114
|
-
// For fresh installs, project #1 is created with real name above,
|
|
115
|
-
// so consolidation is skipped.
|
|
116
|
-
const existingProject1 = await knex('m_projects')
|
|
117
|
-
.where({ id: 1 })
|
|
118
|
-
.first();
|
|
119
|
-
const existingProject2 = await knex('m_projects')
|
|
120
|
-
.where({ id: 2 })
|
|
121
|
-
.first();
|
|
122
|
-
const FAKE_NAMES = ['default-project', 'default'];
|
|
123
|
-
// Check if this is a v3.7.0-v3.7.2 upgrade scenario
|
|
124
|
-
// (project #1 has fake name AND project #2 exists)
|
|
125
|
-
const isV370UpgradeScenario = existingProject1 &&
|
|
126
|
-
existingProject2 &&
|
|
127
|
-
FAKE_NAMES.includes(existingProject1.name);
|
|
128
|
-
// Perform consolidation ONLY for v3.7.0-v3.7.2 upgrades
|
|
129
|
-
if (isV370UpgradeScenario) {
|
|
130
|
-
console.log(`🔄 Detected v3.7.0-v3.7.2 upgrade scenario - consolidating projects...`);
|
|
131
|
-
console.log(` Project #1: "${existingProject1.name}" (fake name, empty)`);
|
|
132
|
-
console.log(` Project #2: "${existingProject2.name}" (real project, has data)`);
|
|
133
|
-
console.log(`🔄 Consolidating project #2 into project #1...`);
|
|
134
|
-
// STEP 1: Temporarily rename project #2 to avoid conflict
|
|
135
|
-
const tempName = `temp-${existingProject2.name}-${Date.now()}`;
|
|
136
|
-
await knex('m_projects')
|
|
137
|
-
.where({ id: 2 })
|
|
138
|
-
.update({ name: tempName });
|
|
139
|
-
console.log(` ✓ Temporarily renamed project #2 to "${tempName}"`);
|
|
140
|
-
// STEP 2: Rename project #1 to real detected name
|
|
141
|
-
await knex('m_projects')
|
|
142
|
-
.where({ id: 1 })
|
|
143
|
-
.update({
|
|
144
|
-
name: detected.name,
|
|
145
|
-
display_name: detected.name,
|
|
146
|
-
detection_source: detected.source,
|
|
147
|
-
last_active_ts: Math.floor(Date.now() / 1000)
|
|
148
|
-
});
|
|
149
|
-
console.log(` ✓ Renamed project #1 from "${existingProject1.name}" to "${detected.name}"`);
|
|
150
|
-
// STEP 3: Migrate ALL data from project_id=2 → 1
|
|
151
|
-
const tablesToUpdate = [
|
|
152
|
-
't_decisions',
|
|
153
|
-
't_decisions_numeric',
|
|
154
|
-
't_decision_history',
|
|
155
|
-
't_decision_tags',
|
|
156
|
-
't_decision_scopes',
|
|
157
|
-
't_file_changes',
|
|
158
|
-
't_constraints',
|
|
159
|
-
't_tasks',
|
|
160
|
-
't_task_tags',
|
|
161
|
-
't_task_dependencies',
|
|
162
|
-
't_task_details',
|
|
163
|
-
't_task_file_links',
|
|
164
|
-
't_task_decision_links',
|
|
165
|
-
't_activity_log',
|
|
166
|
-
't_decision_context'
|
|
167
|
-
];
|
|
168
|
-
for (const tableName of tablesToUpdate) {
|
|
169
|
-
const hasTable = await knex.schema.hasTable(tableName);
|
|
170
|
-
if (hasTable) {
|
|
171
|
-
const hasProjectId = await knex.schema.hasColumn(tableName, 'project_id');
|
|
172
|
-
if (hasProjectId) {
|
|
173
|
-
const count = await knex(tableName)
|
|
174
|
-
.where({ project_id: 2 })
|
|
175
|
-
.update({ project_id: 1 });
|
|
176
|
-
if (count > 0) {
|
|
177
|
-
console.log(` ✓ Migrated ${count} rows in ${tableName} (project_id: 2→1)`);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
// STEP 4: Delete project #2
|
|
183
|
-
await knex('m_projects').where({ id: 2 }).delete();
|
|
184
|
-
console.log(` ✓ Deleted project #2 (data consolidated into project #1)`);
|
|
185
|
-
console.log(`✅ Consolidation complete - all data now in project #1 "${detected.name}"`);
|
|
186
|
-
}
|
|
187
|
-
else if (existingProject1 && FAKE_NAMES.includes(existingProject1.name)) {
|
|
188
|
-
// No project #2, just rename project #1
|
|
189
|
-
console.log(`🔄 Renaming project #1 from "${existingProject1.name}" to "${detected.name}"`);
|
|
190
|
-
await knex('m_projects')
|
|
191
|
-
.where({ id: 1 })
|
|
192
|
-
.update({
|
|
193
|
-
name: detected.name,
|
|
194
|
-
display_name: detected.name,
|
|
195
|
-
detection_source: detected.source,
|
|
196
|
-
last_active_ts: Math.floor(Date.now() / 1000)
|
|
197
|
-
});
|
|
198
|
-
console.log(`✓ Project #1 renamed to "${detected.name}" (source: ${detected.source})`);
|
|
199
|
-
}
|
|
200
|
-
else if (existingProject1) {
|
|
201
|
-
// User already has real name, don't change it
|
|
202
|
-
console.log(`✓ Using existing project "${existingProject1.name}" (ID: 1)`);
|
|
203
|
-
}
|
|
204
|
-
// Always use project ID 1 after consolidation
|
|
205
|
-
defaultProjectId = 1;
|
|
206
|
-
}
|
|
207
|
-
// ============================================================================
|
|
208
|
-
// STEP 2: Drop All Views and Triggers (Before Table Modifications)
|
|
209
|
-
// ============================================================================
|
|
210
|
-
// Drop ALL views (including old schema views)
|
|
211
|
-
const views = await knex.raw(`SELECT name FROM sqlite_master WHERE type='view'`);
|
|
212
|
-
for (const view of views) {
|
|
213
|
-
await knex.raw(`DROP VIEW IF EXISTS ${view.name}`);
|
|
214
|
-
}
|
|
215
|
-
console.log(`✓ Dropped all ${views.length} views before table modifications`);
|
|
216
|
-
// Drop ALL triggers (old schema compatibility)
|
|
217
|
-
const triggers = await knex.raw(`SELECT name FROM sqlite_master WHERE type='trigger'`);
|
|
218
|
-
for (const trigger of triggers) {
|
|
219
|
-
await knex.raw(`DROP TRIGGER IF EXISTS ${trigger.name}`);
|
|
220
|
-
}
|
|
221
|
-
console.log(`✓ Dropped all ${triggers.length} triggers before table modifications`);
|
|
222
|
-
// Drop old t_agent_messages table if exists (removed in v3.6.5)
|
|
223
|
-
await knex.schema.dropTableIfExists('t_agent_messages');
|
|
224
|
-
console.log('✓ Dropped t_agent_messages if it existed (removed in v3.6.5)');
|
|
225
|
-
// ============================================================================
|
|
226
|
-
// STEP 3: Add project_id to Transaction Tables
|
|
227
|
-
// ============================================================================
|
|
228
|
-
// Helper function to add project_id column using raw SQL (more reliable for old schemas)
|
|
229
|
-
async function addProjectIdColumn(tableName, knex, defaultProjectId) {
|
|
230
|
-
const hasColumn = await knex.schema.hasColumn(tableName, 'project_id');
|
|
231
|
-
if (!hasColumn) {
|
|
232
|
-
// Use raw SQL to avoid Knex's schema parsing issues with old schemas
|
|
233
|
-
await knex.raw(`ALTER TABLE ${tableName} ADD COLUMN project_id INTEGER NOT NULL DEFAULT ${defaultProjectId}`);
|
|
234
|
-
// Add foreign key separately
|
|
235
|
-
await knex.raw(`CREATE INDEX IF NOT EXISTS idx_${tableName}_project ON ${tableName}(project_id)`);
|
|
236
|
-
console.log(`✓ Added project_id to ${tableName}`);
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
console.log(` ⏭ ${tableName} already has project_id, skipping`);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
// Transaction tables that need project_id
|
|
243
|
-
// Note: t_decision_context is handled separately in Step 4 (after PRIMARY KEY fix)
|
|
244
|
-
// Note: t_task_details, t_task_tags, t_task_dependencies are recreated in Steps 4.5-4.7 (need table recreation for constraints)
|
|
245
|
-
const transactionTables = [
|
|
246
|
-
't_decision_history',
|
|
247
|
-
't_decision_tags',
|
|
248
|
-
't_decision_scopes',
|
|
249
|
-
't_file_changes',
|
|
250
|
-
't_constraints',
|
|
251
|
-
't_tasks',
|
|
252
|
-
// 't_task_details', // Handled in STEP 4.7 (needs table recreation)
|
|
253
|
-
// 't_task_tags', // Handled in STEP 4.5 (composite PRIMARY KEY)
|
|
254
|
-
't_task_file_links',
|
|
255
|
-
't_task_decision_links',
|
|
256
|
-
// 't_task_dependencies', // Handled in STEP 4.6 (composite PRIMARY KEY)
|
|
257
|
-
't_activity_log', // Required for stats.clear to filter by project_id
|
|
258
|
-
];
|
|
259
|
-
for (const tableName of transactionTables) {
|
|
260
|
-
await addProjectIdColumn(tableName, knex, defaultProjectId);
|
|
261
|
-
}
|
|
262
|
-
// ============================================================================
|
|
263
|
-
// STEP 4: Fix PRIMARY KEY Constraints (t_decisions tables)
|
|
264
|
-
// ============================================================================
|
|
265
|
-
// For SQLite, we need to recreate tables to change PRIMARY KEY from single-column
|
|
266
|
-
// to composite (key_id, project_id)
|
|
267
|
-
if (!hasMigrationMarker) {
|
|
268
|
-
console.log('🔄 Fixing PRIMARY KEY constraints for t_decisions tables...');
|
|
269
|
-
// Drop t_decision_context temporarily (has FK to t_decisions)
|
|
270
|
-
let decisionContextData = [];
|
|
271
|
-
const hasDecisionContext = await knex.schema.hasTable('t_decision_context');
|
|
272
|
-
if (hasDecisionContext) {
|
|
273
|
-
decisionContextData = await knex('t_decision_context').select('*');
|
|
274
|
-
await knex.schema.dropTable('t_decision_context');
|
|
275
|
-
console.log('✓ Temporarily dropped t_decision_context (will recreate)');
|
|
276
|
-
}
|
|
277
|
-
// 4a. t_decisions
|
|
278
|
-
const decisionsData = await knex('t_decisions').select('*');
|
|
279
|
-
await knex.schema.dropTableIfExists('t_decisions');
|
|
280
|
-
await knex.schema.createTable('t_decisions', (table) => {
|
|
281
|
-
table.integer('key_id').unsigned().notNullable();
|
|
282
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
283
|
-
table.text('value').notNullable();
|
|
284
|
-
table.integer('agent_id').unsigned();
|
|
285
|
-
table.integer('layer_id').unsigned();
|
|
286
|
-
table.string('version', 20).defaultTo('1.0.0');
|
|
287
|
-
table.integer('status').defaultTo(1);
|
|
288
|
-
table.integer('ts').notNullable();
|
|
289
|
-
// Composite PRIMARY KEY
|
|
290
|
-
table.primary(['key_id', 'project_id']);
|
|
291
|
-
// Foreign keys
|
|
292
|
-
table.foreign('key_id').references('m_context_keys.id');
|
|
293
|
-
table.foreign('agent_id').references('m_agents.id');
|
|
294
|
-
table.foreign('layer_id').references('m_layers.id');
|
|
295
|
-
table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
|
|
296
|
-
});
|
|
297
|
-
if (decisionsData.length > 0) {
|
|
298
|
-
// Ensure project_id is set for existing data
|
|
299
|
-
await knex('t_decisions').insert(decisionsData.map((row) => ({
|
|
300
|
-
...row,
|
|
301
|
-
project_id: row.project_id || defaultProjectId,
|
|
302
|
-
})));
|
|
303
|
-
}
|
|
304
|
-
console.log(`✓ Recreated t_decisions with composite PRIMARY KEY (${decisionsData.length} rows)`);
|
|
305
|
-
// 4b. t_decisions_numeric
|
|
306
|
-
const decisionsNumericData = await knex('t_decisions_numeric').select('*');
|
|
307
|
-
await knex.schema.dropTableIfExists('t_decisions_numeric');
|
|
308
|
-
await knex.schema.createTable('t_decisions_numeric', (table) => {
|
|
309
|
-
table.integer('key_id').unsigned().notNullable();
|
|
310
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
311
|
-
table.double('value').notNullable();
|
|
312
|
-
table.integer('agent_id').unsigned();
|
|
313
|
-
table.integer('layer_id').unsigned();
|
|
314
|
-
table.string('version', 20).defaultTo('1.0.0');
|
|
315
|
-
table.integer('status').defaultTo(1);
|
|
316
|
-
table.integer('ts').notNullable();
|
|
317
|
-
// Composite PRIMARY KEY
|
|
318
|
-
table.primary(['key_id', 'project_id']);
|
|
319
|
-
// Foreign keys
|
|
320
|
-
table.foreign('key_id').references('m_context_keys.id');
|
|
321
|
-
table.foreign('agent_id').references('m_agents.id');
|
|
322
|
-
table.foreign('layer_id').references('m_layers.id');
|
|
323
|
-
table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
|
|
324
|
-
});
|
|
325
|
-
if (decisionsNumericData.length > 0) {
|
|
326
|
-
await knex('t_decisions_numeric').insert(decisionsNumericData.map((row) => ({
|
|
327
|
-
...row,
|
|
328
|
-
project_id: row.project_id || defaultProjectId,
|
|
329
|
-
})));
|
|
330
|
-
}
|
|
331
|
-
console.log(`✓ Recreated t_decisions_numeric with composite PRIMARY KEY (${decisionsNumericData.length} rows)`);
|
|
332
|
-
// Create migration marker
|
|
333
|
-
await knex.schema.createTable('_multi_project_pk_fixed', (table) => {
|
|
334
|
-
table.integer('applied_ts').notNullable();
|
|
335
|
-
});
|
|
336
|
-
await knex('_multi_project_pk_fixed').insert({
|
|
337
|
-
applied_ts: Math.floor(Date.now() / 1000),
|
|
338
|
-
});
|
|
339
|
-
console.log('✓ Created migration marker table');
|
|
340
|
-
// Recreate t_decision_context if it existed
|
|
341
|
-
if (hasDecisionContext) {
|
|
342
|
-
await knex.schema.createTable('t_decision_context', (table) => {
|
|
343
|
-
table.increments('id').primary();
|
|
344
|
-
table.integer('decision_key_id').unsigned().notNullable();
|
|
345
|
-
table.text('rationale');
|
|
346
|
-
table.text('alternatives_considered'); // JSON array (was 'alternatives' - fixed for compatibility)
|
|
347
|
-
table.text('tradeoffs'); // JSON object
|
|
348
|
-
table.integer('agent_id').unsigned();
|
|
349
|
-
table.integer('decision_date').notNullable().defaultTo(knex.raw('(unixepoch())'));
|
|
350
|
-
table.integer('related_task_id').unsigned();
|
|
351
|
-
table.integer('related_constraint_id').unsigned();
|
|
352
|
-
table.integer('ts').notNullable().defaultTo(knex.raw('(unixepoch())'));
|
|
353
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
354
|
-
// Foreign keys
|
|
355
|
-
table.foreign('decision_key_id').references('m_context_keys.id');
|
|
356
|
-
table.foreign('agent_id').references('m_agents.id');
|
|
357
|
-
table.foreign('related_task_id').references('t_tasks.id').onDelete('SET NULL');
|
|
358
|
-
table.foreign('related_constraint_id').references('t_constraints.id').onDelete('SET NULL');
|
|
359
|
-
table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
|
|
360
|
-
// Unique constraint
|
|
361
|
-
table.unique(['decision_key_id', 'id']);
|
|
362
|
-
});
|
|
363
|
-
// Restore data with project_id
|
|
364
|
-
if (decisionContextData.length > 0) {
|
|
365
|
-
await knex('t_decision_context').insert(decisionContextData.map((row) => ({
|
|
366
|
-
...row,
|
|
367
|
-
project_id: row.project_id || defaultProjectId,
|
|
368
|
-
})));
|
|
369
|
-
}
|
|
370
|
-
console.log(`✓ Recreated t_decision_context (${decisionContextData.length} rows)`);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
374
|
-
console.log('✓ PRIMARY KEY constraints already fixed, skipping');
|
|
375
|
-
}
|
|
376
|
-
// ============================================================================
|
|
377
|
-
// STEP 4.5: Fix t_task_tags PRIMARY KEY (Constraint #41)
|
|
378
|
-
// ============================================================================
|
|
379
|
-
// t_task_tags needs composite PRIMARY KEY (project_id, task_id, tag_id)
|
|
380
|
-
// to support ON CONFLICT clause for multi-project tag insertion
|
|
381
|
-
const taskTagsHasCorrectPK = await knex.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_tags'`).then((result) => {
|
|
382
|
-
const createSql = result[0]?.sql || '';
|
|
383
|
-
return createSql.includes('PRIMARY KEY (project_id, task_id, tag_id)') ||
|
|
384
|
-
createSql.includes('PRIMARY KEY(project_id, task_id, tag_id)');
|
|
385
|
-
});
|
|
386
|
-
if (!taskTagsHasCorrectPK) {
|
|
387
|
-
console.log('🔄 Fixing t_task_tags PRIMARY KEY to include project_id...');
|
|
388
|
-
// Backup existing data
|
|
389
|
-
const taskTagsData = await knex('t_task_tags').select('*');
|
|
390
|
-
// Drop and recreate table with correct PRIMARY KEY
|
|
391
|
-
await knex.schema.dropTableIfExists('t_task_tags');
|
|
392
|
-
await knex.schema.createTable('t_task_tags', (table) => {
|
|
393
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
394
|
-
table.integer('task_id').unsigned().notNullable();
|
|
395
|
-
table.integer('tag_id').unsigned().notNullable();
|
|
396
|
-
// Composite PRIMARY KEY with project_id first
|
|
397
|
-
table.primary(['project_id', 'task_id', 'tag_id']);
|
|
398
|
-
// Foreign keys
|
|
399
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
400
|
-
table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
401
|
-
table.foreign('tag_id').references('id').inTable('m_tags');
|
|
402
|
-
});
|
|
403
|
-
// Restore data with project_id
|
|
404
|
-
if (taskTagsData.length > 0) {
|
|
405
|
-
await knex('t_task_tags').insert(taskTagsData.map((row) => ({
|
|
406
|
-
...row,
|
|
407
|
-
project_id: row.project_id || defaultProjectId,
|
|
408
|
-
})));
|
|
409
|
-
}
|
|
410
|
-
console.log(`✓ Recreated t_task_tags with composite PRIMARY KEY (${taskTagsData.length} rows)`);
|
|
411
|
-
}
|
|
412
|
-
else {
|
|
413
|
-
console.log('✓ t_task_tags PRIMARY KEY already correct, skipping');
|
|
414
|
-
}
|
|
415
|
-
// STEP 4.6: Fix t_task_dependencies PRIMARY KEY (Constraint #42)
|
|
416
|
-
// PRIMARY KEY must be (project_id, blocker_task_id, blocked_task_id) for multi-project support
|
|
417
|
-
const taskDepsHasCorrectPK = await knex.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'`).then((result) => {
|
|
418
|
-
const createSql = result[0]?.sql || '';
|
|
419
|
-
return createSql.includes('PRIMARY KEY (project_id, blocker_task_id, blocked_task_id)') ||
|
|
420
|
-
createSql.includes('PRIMARY KEY(project_id, blocker_task_id, blocked_task_id)');
|
|
421
|
-
});
|
|
422
|
-
if (!taskDepsHasCorrectPK) {
|
|
423
|
-
console.log('🔄 Fixing t_task_dependencies PRIMARY KEY to include project_id...');
|
|
424
|
-
const taskDepsData = await knex('t_task_dependencies').select('*');
|
|
425
|
-
await knex.schema.dropTableIfExists('t_task_dependencies');
|
|
426
|
-
await knex.schema.createTable('t_task_dependencies', (table) => {
|
|
427
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
428
|
-
table.integer('blocker_task_id').unsigned().notNullable();
|
|
429
|
-
table.integer('blocked_task_id').unsigned().notNullable();
|
|
430
|
-
table.integer('created_ts').notNullable();
|
|
431
|
-
table.primary(['project_id', 'blocker_task_id', 'blocked_task_id']);
|
|
432
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
433
|
-
table.foreign('blocker_task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
434
|
-
table.foreign('blocked_task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
435
|
-
table.index('blocked_task_id', 'idx_task_deps_blocked');
|
|
436
|
-
});
|
|
437
|
-
if (taskDepsData.length > 0) {
|
|
438
|
-
await knex('t_task_dependencies').insert(taskDepsData.map((row) => ({
|
|
439
|
-
...row,
|
|
440
|
-
project_id: row.project_id || defaultProjectId,
|
|
441
|
-
})));
|
|
442
|
-
}
|
|
443
|
-
console.log(`✓ Recreated t_task_dependencies with composite PRIMARY KEY (${taskDepsData.length} rows)`);
|
|
444
|
-
}
|
|
445
|
-
else {
|
|
446
|
-
console.log('✓ t_task_dependencies PRIMARY KEY already correct, skipping');
|
|
447
|
-
}
|
|
448
|
-
// ============================================================================
|
|
449
|
-
// STEP 4.7: Fix t_task_details - Add project_id with table recreation
|
|
450
|
-
// ============================================================================
|
|
451
|
-
// t_task_details needs project_id but ALTER TABLE may fail due to foreign key constraints
|
|
452
|
-
// Recreate table to ensure proper schema
|
|
453
|
-
const taskDetailsHasProjectId = await knex.schema.hasColumn('t_task_details', 'project_id');
|
|
454
|
-
if (!taskDetailsHasProjectId) {
|
|
455
|
-
console.log('🔄 Adding project_id to t_task_details (table recreation)...');
|
|
456
|
-
// Backup existing data
|
|
457
|
-
const taskDetailsData = await knex('t_task_details').select('*');
|
|
458
|
-
// Get project_id mapping from t_tasks
|
|
459
|
-
const tasksWithProjects = await knex('t_tasks')
|
|
460
|
-
.select('id', 'project_id')
|
|
461
|
-
.whereIn('id', taskDetailsData.map((row) => row.task_id));
|
|
462
|
-
const projectMap = new Map(tasksWithProjects.map((t) => [t.id, t.project_id]));
|
|
463
|
-
// Drop and recreate table with project_id
|
|
464
|
-
await knex.schema.dropTableIfExists('t_task_details');
|
|
465
|
-
await knex.schema.createTable('t_task_details', (table) => {
|
|
466
|
-
table.integer('task_id').primary();
|
|
467
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
468
|
-
table.text('description');
|
|
469
|
-
table.text('acceptance_criteria');
|
|
470
|
-
table.text('notes');
|
|
471
|
-
table.text('acceptance_criteria_json');
|
|
472
|
-
// Foreign keys
|
|
473
|
-
table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
474
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
475
|
-
// Index for project-scoped queries
|
|
476
|
-
table.index(['project_id', 'task_id'], 'idx_task_details_project');
|
|
477
|
-
});
|
|
478
|
-
// Restore data with project_id from parent tasks
|
|
479
|
-
if (taskDetailsData.length > 0) {
|
|
480
|
-
await knex('t_task_details').insert(taskDetailsData.map((row) => ({
|
|
481
|
-
...row,
|
|
482
|
-
project_id: projectMap.get(row.task_id) || defaultProjectId,
|
|
483
|
-
})));
|
|
484
|
-
}
|
|
485
|
-
console.log(`✓ Recreated t_task_details with project_id (${taskDetailsData.length} rows)`);
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
console.log('✓ t_task_details already has project_id, skipping');
|
|
489
|
-
}
|
|
490
|
-
// ============================================================================
|
|
491
|
-
// STEP 4.8: Fix t_task_file_links - Add project_id with table recreation
|
|
492
|
-
// ============================================================================
|
|
493
|
-
// t_task_file_links needs project_id but ALTER TABLE may fail due to foreign key constraints
|
|
494
|
-
// Recreate table to ensure proper schema
|
|
495
|
-
const taskFileLinksHasProjectId = await knex.schema.hasColumn('t_task_file_links', 'project_id');
|
|
496
|
-
if (!taskFileLinksHasProjectId) {
|
|
497
|
-
console.log('🔄 Adding project_id to t_task_file_links (table recreation)...');
|
|
498
|
-
// Backup existing data
|
|
499
|
-
const taskFileLinksData = await knex('t_task_file_links').select('*');
|
|
500
|
-
// Get project_id mapping from t_tasks
|
|
501
|
-
const tasksWithProjects2 = await knex('t_tasks')
|
|
502
|
-
.select('id', 'project_id')
|
|
503
|
-
.whereIn('id', taskFileLinksData.map((row) => row.task_id));
|
|
504
|
-
const projectMap2 = new Map(tasksWithProjects2.map((t) => [t.id, t.project_id]));
|
|
505
|
-
// Drop and recreate table with project_id
|
|
506
|
-
await knex.schema.dropTableIfExists('t_task_file_links');
|
|
507
|
-
await knex.schema.createTable('t_task_file_links', (table) => {
|
|
508
|
-
table.increments('id').primary();
|
|
509
|
-
table.integer('task_id').unsigned().notNullable();
|
|
510
|
-
table.integer('file_id').unsigned().notNullable();
|
|
511
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
512
|
-
table.integer('linked_ts').notNullable();
|
|
513
|
-
// Foreign keys
|
|
514
|
-
table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
515
|
-
table.foreign('file_id').references('id').inTable('m_files');
|
|
516
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
517
|
-
// Indexes
|
|
518
|
-
table.index('task_id', 'idx_task_file_links_task');
|
|
519
|
-
table.index(['project_id', 'task_id'], 'idx_task_file_links_project');
|
|
520
|
-
});
|
|
521
|
-
// Restore data with project_id from parent tasks
|
|
522
|
-
if (taskFileLinksData.length > 0) {
|
|
523
|
-
await knex('t_task_file_links').insert(taskFileLinksData.map((row) => ({
|
|
524
|
-
...row,
|
|
525
|
-
project_id: projectMap2.get(row.task_id) || defaultProjectId,
|
|
526
|
-
})));
|
|
527
|
-
}
|
|
528
|
-
console.log(`✓ Recreated t_task_file_links with project_id (${taskFileLinksData.length} rows)`);
|
|
529
|
-
}
|
|
530
|
-
else {
|
|
531
|
-
console.log('✓ t_task_file_links already has project_id, skipping');
|
|
532
|
-
}
|
|
533
|
-
// ============================================================================
|
|
534
|
-
// STEP 4.9: Fix t_task_decision_links - Add project_id with table recreation
|
|
535
|
-
// ============================================================================
|
|
536
|
-
// t_task_decision_links needs project_id but ALTER TABLE may fail due to foreign key constraints
|
|
537
|
-
// Recreate table to ensure proper schema
|
|
538
|
-
const taskDecisionLinksHasProjectId = await knex.schema.hasColumn('t_task_decision_links', 'project_id');
|
|
539
|
-
if (!taskDecisionLinksHasProjectId) {
|
|
540
|
-
console.log('🔄 Adding project_id to t_task_decision_links (table recreation)...');
|
|
541
|
-
// Backup existing data
|
|
542
|
-
const taskDecisionLinksData = await knex('t_task_decision_links').select('*');
|
|
543
|
-
// Get project_id mapping from t_tasks
|
|
544
|
-
const tasksWithProjects3 = await knex('t_tasks')
|
|
545
|
-
.select('id', 'project_id')
|
|
546
|
-
.whereIn('id', taskDecisionLinksData.map((row) => row.task_id));
|
|
547
|
-
const projectMap3 = new Map(tasksWithProjects3.map((t) => [t.id, t.project_id]));
|
|
548
|
-
// Drop and recreate table with project_id
|
|
549
|
-
await knex.schema.dropTableIfExists('t_task_decision_links');
|
|
550
|
-
await knex.schema.createTable('t_task_decision_links', (table) => {
|
|
551
|
-
table.increments('id').primary();
|
|
552
|
-
table.integer('task_id').unsigned().notNullable();
|
|
553
|
-
table.integer('decision_key_id').unsigned().notNullable();
|
|
554
|
-
table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
|
|
555
|
-
table.text('link_type').defaultTo('implements');
|
|
556
|
-
table.integer('linked_ts').notNullable();
|
|
557
|
-
// Foreign keys
|
|
558
|
-
table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
|
|
559
|
-
table.foreign('decision_key_id').references('id').inTable('m_context_keys');
|
|
560
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
561
|
-
// Indexes
|
|
562
|
-
table.index('task_id', 'idx_task_decision_links_task');
|
|
563
|
-
table.index('decision_key_id', 'idx_task_decision_links_decision');
|
|
564
|
-
table.index(['project_id', 'task_id'], 'idx_task_decision_links_project');
|
|
565
|
-
});
|
|
566
|
-
// Restore data with project_id from parent tasks
|
|
567
|
-
if (taskDecisionLinksData.length > 0) {
|
|
568
|
-
await knex('t_task_decision_links').insert(taskDecisionLinksData.map((row) => ({
|
|
569
|
-
...row,
|
|
570
|
-
project_id: projectMap3.get(row.task_id) || defaultProjectId,
|
|
571
|
-
})));
|
|
572
|
-
}
|
|
573
|
-
console.log(`✓ Recreated t_task_decision_links with project_id (${taskDecisionLinksData.length} rows)`);
|
|
574
|
-
}
|
|
575
|
-
else {
|
|
576
|
-
console.log('✓ t_task_decision_links already has project_id, skipping');
|
|
577
|
-
}
|
|
578
|
-
// ============================================================================
|
|
579
|
-
// STEP 5: Recreate m_config Table
|
|
580
|
-
// ============================================================================
|
|
581
|
-
// m_config needs special handling to avoid nullable composite PRIMARY KEY
|
|
582
|
-
// We use a single-column PRIMARY KEY on 'key' and project_id is nullable
|
|
583
|
-
const configHasProjectId = await knex.schema.hasColumn('m_config', 'project_id');
|
|
584
|
-
if (!configHasProjectId) {
|
|
585
|
-
console.log('🔄 Recreating m_config table with multi-project support...');
|
|
586
|
-
// Drop temp table if exists from previous partial run
|
|
587
|
-
await knex.schema.dropTableIfExists('m_config_new');
|
|
588
|
-
// Create new m_config table with project_id
|
|
589
|
-
await knex.schema.createTable('m_config_new', (table) => {
|
|
590
|
-
table.string('key', 64).notNullable();
|
|
591
|
-
table.integer('project_id').unsigned().nullable(); // Nullable for global config
|
|
592
|
-
table.text('value').notNullable();
|
|
593
|
-
// Single-column PRIMARY KEY (key only)
|
|
594
|
-
table.primary(['key']);
|
|
595
|
-
// Foreign key with CASCADE delete
|
|
596
|
-
table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
|
|
597
|
-
// Composite index for project-scoped lookups
|
|
598
|
-
table.index(['project_id', 'key'], 'idx_config_project_key');
|
|
599
|
-
});
|
|
600
|
-
// Migrate existing config data
|
|
601
|
-
const existingConfig = await knex('m_config').select('key', 'value');
|
|
602
|
-
if (existingConfig.length > 0) {
|
|
603
|
-
await knex('m_config_new').insert(existingConfig.map((row) => ({
|
|
604
|
-
key: row.key,
|
|
605
|
-
project_id: null, // Global config has NULL project_id
|
|
606
|
-
value: row.value,
|
|
607
|
-
})));
|
|
608
|
-
}
|
|
609
|
-
// Swap tables
|
|
610
|
-
await knex.schema.dropTable('m_config');
|
|
611
|
-
await knex.schema.renameTable('m_config_new', 'm_config');
|
|
612
|
-
console.log(`✓ Recreated m_config table (${existingConfig.length} rows migrated)`);
|
|
613
|
-
}
|
|
614
|
-
else {
|
|
615
|
-
console.log('✓ m_config already has project_id, skipping');
|
|
616
|
-
}
|
|
617
|
-
// ============================================================================
|
|
618
|
-
// STEP 6: Create Composite Indexes (Constraint #39)
|
|
619
|
-
// ============================================================================
|
|
620
|
-
// All multi-project indexes should have project_id first for optimal performance
|
|
621
|
-
const indexes = [
|
|
622
|
-
{ table: 't_decisions', columns: ['project_id', 'key_id'], name: 'idx_decisions_project_key' },
|
|
623
|
-
{ table: 't_decisions', columns: ['project_id', 'ts'], name: 'idx_decisions_project_ts' },
|
|
624
|
-
{ table: 't_decisions_numeric', columns: ['project_id', 'key_id'], name: 'idx_decisions_numeric_project_key' },
|
|
625
|
-
{ table: 't_decision_tags', columns: ['project_id', 'decision_key_id'], name: 'idx_decision_tags_project_key' },
|
|
626
|
-
{ table: 't_tasks', columns: ['project_id', 'status_id'], name: 'idx_tasks_project_status' },
|
|
627
|
-
{ table: 't_tasks', columns: ['project_id', 'created_ts'], name: 'idx_tasks_project_created' },
|
|
628
|
-
];
|
|
629
|
-
for (const { table, columns, name } of indexes) {
|
|
630
|
-
try {
|
|
631
|
-
// Check if index already exists
|
|
632
|
-
const indexCheck = await knex.raw(`SELECT name FROM sqlite_master WHERE type='index' AND name=?`, [name]);
|
|
633
|
-
if (!indexCheck || indexCheck.length === 0) {
|
|
634
|
-
await knex.schema.alterTable(table, (tbl) => {
|
|
635
|
-
tbl.index(columns, name);
|
|
636
|
-
});
|
|
637
|
-
console.log(`✓ Created index ${name}`);
|
|
638
|
-
}
|
|
639
|
-
else {
|
|
640
|
-
console.log(` ⏭ Index ${name} already exists, skipping`);
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
catch (error) {
|
|
644
|
-
// Ignore duplicate index errors
|
|
645
|
-
if (!error.message.includes('already exists')) {
|
|
646
|
-
throw error;
|
|
647
|
-
}
|
|
648
|
-
console.log(` ⏭ Index ${name} already exists, skipping`);
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
// ============================================================================
|
|
652
|
-
// STEP 7: Recreate All Views with Multi-Project Support
|
|
653
|
-
// ============================================================================
|
|
654
|
-
console.log('🔄 Recreating views with multi-project support...');
|
|
655
|
-
// v_tagged_decisions - Must match bootstrap schema (20251025070349_create_views.ts)
|
|
656
|
-
await knex.raw(`
|
|
657
|
-
CREATE VIEW v_tagged_decisions AS
|
|
658
|
-
SELECT
|
|
659
|
-
k.key,
|
|
660
|
-
d.value,
|
|
661
|
-
d.version,
|
|
662
|
-
CASE d.status WHEN 1 THEN 'active' WHEN 2 THEN 'deprecated' ELSE 'draft' END as status,
|
|
663
|
-
d.project_id,
|
|
664
|
-
l.name as layer,
|
|
665
|
-
(SELECT GROUP_CONCAT(t2.name, ',') FROM t_decision_tags dt2
|
|
666
|
-
JOIN m_tags t2 ON dt2.tag_id = t2.id
|
|
667
|
-
WHERE dt2.decision_key_id = d.key_id AND dt2.project_id = d.project_id) as tags,
|
|
668
|
-
(SELECT GROUP_CONCAT(s2.name, ',') FROM t_decision_scopes ds2
|
|
669
|
-
JOIN m_scopes s2 ON ds2.scope_id = s2.id
|
|
670
|
-
WHERE ds2.decision_key_id = d.key_id AND ds2.project_id = d.project_id) as scopes,
|
|
671
|
-
a.name as decided_by,
|
|
672
|
-
datetime(d.ts, 'unixepoch') as updated
|
|
673
|
-
FROM t_decisions d
|
|
674
|
-
JOIN m_context_keys k ON d.key_id = k.id
|
|
675
|
-
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
676
|
-
LEFT JOIN m_agents a ON d.agent_id = a.id
|
|
677
|
-
`);
|
|
678
|
-
// v_active_context
|
|
679
|
-
await knex.raw(`
|
|
680
|
-
CREATE VIEW v_active_context AS
|
|
681
|
-
SELECT
|
|
682
|
-
k.key,
|
|
683
|
-
d.value,
|
|
684
|
-
d.project_id,
|
|
685
|
-
l.name as layer,
|
|
686
|
-
a.name as decided_by,
|
|
687
|
-
datetime(d.ts, 'unixepoch') as updated
|
|
688
|
-
FROM t_decisions d
|
|
689
|
-
JOIN m_context_keys k ON d.key_id = k.id
|
|
690
|
-
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
691
|
-
LEFT JOIN m_agents a ON d.agent_id = a.id
|
|
692
|
-
WHERE d.status = 1 AND d.ts > (strftime('%s','now') - 3600)
|
|
693
|
-
ORDER BY d.ts DESC
|
|
694
|
-
`);
|
|
695
|
-
// v_layer_summary - Must match bootstrap schema (correct column names)
|
|
696
|
-
await knex.raw(`
|
|
697
|
-
CREATE VIEW v_layer_summary AS
|
|
698
|
-
SELECT
|
|
699
|
-
l.name as layer,
|
|
700
|
-
l.id as layer_id,
|
|
701
|
-
(SELECT COUNT(DISTINCT d2.key_id) FROM t_decisions d2
|
|
702
|
-
WHERE d2.layer_id = l.id AND d2.status = 1 AND d2.project_id = d.project_id) as decisions_count,
|
|
703
|
-
(SELECT COUNT(DISTINCT fc2.id) FROM t_file_changes fc2
|
|
704
|
-
WHERE fc2.layer_id = l.id AND fc2.ts > (strftime('%s','now') - 3600) AND fc2.project_id = d.project_id) as file_changes_count,
|
|
705
|
-
(SELECT COUNT(DISTINCT c2.id) FROM t_constraints c2
|
|
706
|
-
WHERE c2.layer_id = l.id AND c2.active = 1 AND c2.project_id = d.project_id) as constraints_count,
|
|
707
|
-
d.project_id
|
|
708
|
-
FROM m_layers l
|
|
709
|
-
CROSS JOIN (SELECT DISTINCT project_id FROM t_decisions) d
|
|
710
|
-
GROUP BY l.id, l.name, d.project_id
|
|
711
|
-
`);
|
|
712
|
-
// v_recent_file_changes
|
|
713
|
-
await knex.raw(`
|
|
714
|
-
CREATE VIEW v_recent_file_changes AS
|
|
715
|
-
SELECT f.path as file_path,
|
|
716
|
-
fc.project_id,
|
|
717
|
-
l.name as layer,
|
|
718
|
-
a.name as changed_by,
|
|
719
|
-
datetime(fc.ts, 'unixepoch') as changed_at
|
|
720
|
-
FROM t_file_changes fc
|
|
721
|
-
JOIN m_files f ON fc.file_id = f.id
|
|
722
|
-
LEFT JOIN m_layers l ON fc.layer_id = l.id
|
|
723
|
-
LEFT JOIN m_agents a ON fc.agent_id = a.id
|
|
724
|
-
ORDER BY fc.ts DESC
|
|
725
|
-
LIMIT 50
|
|
726
|
-
`);
|
|
727
|
-
// v_tagged_constraints
|
|
728
|
-
await knex.raw(`
|
|
729
|
-
CREATE VIEW v_tagged_constraints AS
|
|
730
|
-
SELECT c.id,
|
|
731
|
-
c.constraint_text,
|
|
732
|
-
c.project_id,
|
|
733
|
-
cat.name as category,
|
|
734
|
-
c.priority,
|
|
735
|
-
a.name as author,
|
|
736
|
-
datetime(c.ts, 'unixepoch') as created
|
|
737
|
-
FROM t_constraints c
|
|
738
|
-
LEFT JOIN m_constraint_categories cat ON c.category_id = cat.id
|
|
739
|
-
LEFT JOIN m_agents a ON c.agent_id = a.id
|
|
740
|
-
WHERE c.active = 1
|
|
741
|
-
ORDER BY c.priority DESC, c.ts DESC
|
|
742
|
-
`);
|
|
743
|
-
// v_task_board - Must match bootstrap schema (include all columns)
|
|
744
|
-
await knex.raw(`
|
|
745
|
-
CREATE VIEW v_task_board AS
|
|
746
|
-
SELECT
|
|
747
|
-
t.id,
|
|
748
|
-
t.title,
|
|
749
|
-
t.project_id,
|
|
750
|
-
s.name as status,
|
|
751
|
-
t.priority,
|
|
752
|
-
a.name as assigned_to,
|
|
753
|
-
l.name as layer,
|
|
754
|
-
t.created_ts,
|
|
755
|
-
t.updated_ts,
|
|
756
|
-
t.completed_ts,
|
|
757
|
-
(SELECT GROUP_CONCAT(tg2.name, ', ')
|
|
758
|
-
FROM t_task_tags tt2
|
|
759
|
-
JOIN m_tags tg2 ON tt2.tag_id = tg2.id
|
|
760
|
-
WHERE tt2.task_id = t.id AND tt2.project_id = t.project_id) as tags
|
|
761
|
-
FROM t_tasks t
|
|
762
|
-
LEFT JOIN m_task_statuses s ON t.status_id = s.id
|
|
763
|
-
LEFT JOIN m_agents a ON t.assigned_agent_id = a.id
|
|
764
|
-
LEFT JOIN m_layers l ON t.layer_id = l.id
|
|
765
|
-
`);
|
|
766
|
-
console.log('✓ Recreated all 6 views with project_id support');
|
|
767
|
-
// ============================================================================
|
|
768
|
-
// STEP 8: Re-enable Foreign Key Constraints
|
|
769
|
-
// ============================================================================
|
|
770
|
-
await knex.raw('PRAGMA foreign_keys = ON');
|
|
771
|
-
console.log('✓ Re-enabled foreign key constraints');
|
|
772
|
-
console.log('✅ Multi-project support migration v3.7.0 completed successfully');
|
|
773
|
-
}
|
|
774
|
-
export async function down(knex) {
|
|
775
|
-
console.log('🔄 Rolling back multi-project support migration...');
|
|
776
|
-
// Drop views
|
|
777
|
-
await knex.raw('DROP VIEW IF EXISTS v_tagged_decisions');
|
|
778
|
-
await knex.raw('DROP VIEW IF EXISTS v_active_context');
|
|
779
|
-
await knex.raw('DROP VIEW IF EXISTS v_layer_summary');
|
|
780
|
-
await knex.raw('DROP VIEW IF EXISTS v_recent_file_changes');
|
|
781
|
-
await knex.raw('DROP VIEW IF EXISTS v_tagged_constraints');
|
|
782
|
-
await knex.raw('DROP VIEW IF EXISTS v_task_board');
|
|
783
|
-
// Drop indexes
|
|
784
|
-
const indexes = [
|
|
785
|
-
'idx_decisions_project_key',
|
|
786
|
-
'idx_decisions_project_ts',
|
|
787
|
-
'idx_decisions_numeric_project_key',
|
|
788
|
-
'idx_decision_tags_project_key',
|
|
789
|
-
'idx_tasks_project_status',
|
|
790
|
-
'idx_tasks_project_created',
|
|
791
|
-
'idx_config_project_key',
|
|
792
|
-
];
|
|
793
|
-
for (const indexName of indexes) {
|
|
794
|
-
await knex.raw(`DROP INDEX IF EXISTS ${indexName}`);
|
|
795
|
-
}
|
|
796
|
-
// Restore m_config to original structure
|
|
797
|
-
const configHasProjectId = await knex.schema.hasColumn('m_config', 'project_id');
|
|
798
|
-
if (configHasProjectId) {
|
|
799
|
-
await knex.schema.dropTableIfExists('m_config_old');
|
|
800
|
-
await knex.schema.createTable('m_config_old', (table) => {
|
|
801
|
-
table.string('key', 64).primary();
|
|
802
|
-
table.text('value').notNullable();
|
|
803
|
-
});
|
|
804
|
-
const configData = await knex('m_config').where({ project_id: null }).select('key', 'value');
|
|
805
|
-
if (configData.length > 0) {
|
|
806
|
-
await knex('m_config_old').insert(configData);
|
|
807
|
-
}
|
|
808
|
-
await knex.schema.dropTable('m_config');
|
|
809
|
-
await knex.schema.renameTable('m_config_old', 'm_config');
|
|
810
|
-
}
|
|
811
|
-
// Restore t_decisions tables to single-column PRIMARY KEY
|
|
812
|
-
const decisionsData = await knex('t_decisions').select('*');
|
|
813
|
-
await knex.schema.dropTableIfExists('t_decisions');
|
|
814
|
-
await knex.schema.createTable('t_decisions', (table) => {
|
|
815
|
-
table.integer('key_id').unsigned().primary();
|
|
816
|
-
table.text('value').notNullable();
|
|
817
|
-
table.integer('agent_id').unsigned();
|
|
818
|
-
table.integer('layer_id').unsigned();
|
|
819
|
-
table.string('version', 20).defaultTo('1.0.0');
|
|
820
|
-
table.integer('status').defaultTo(1);
|
|
821
|
-
table.integer('ts').notNullable();
|
|
822
|
-
table.foreign('key_id').references('m_context_keys.id');
|
|
823
|
-
table.foreign('agent_id').references('m_agents.id');
|
|
824
|
-
table.foreign('layer_id').references('m_layers.id');
|
|
825
|
-
});
|
|
826
|
-
// Note: Data may be lost if there were multiple projects
|
|
827
|
-
if (decisionsData.length > 0) {
|
|
828
|
-
await knex('t_decisions').insert(decisionsData.map((row) => {
|
|
829
|
-
const { project_id, ...rest } = row;
|
|
830
|
-
return rest;
|
|
831
|
-
}));
|
|
832
|
-
}
|
|
833
|
-
// Same for t_decisions_numeric
|
|
834
|
-
const decisionsNumericData = await knex('t_decisions_numeric').select('*');
|
|
835
|
-
await knex.schema.dropTableIfExists('t_decisions_numeric');
|
|
836
|
-
await knex.schema.createTable('t_decisions_numeric', (table) => {
|
|
837
|
-
table.integer('key_id').unsigned().primary();
|
|
838
|
-
table.double('value').notNullable();
|
|
839
|
-
table.integer('agent_id').unsigned();
|
|
840
|
-
table.integer('layer_id').unsigned();
|
|
841
|
-
table.string('version', 20).defaultTo('1.0.0');
|
|
842
|
-
table.integer('status').defaultTo(1);
|
|
843
|
-
table.integer('ts').notNullable();
|
|
844
|
-
table.foreign('key_id').references('m_context_keys.id');
|
|
845
|
-
table.foreign('agent_id').references('m_agents.id');
|
|
846
|
-
table.foreign('layer_id').references('m_layers.id');
|
|
847
|
-
});
|
|
848
|
-
if (decisionsNumericData.length > 0) {
|
|
849
|
-
await knex('t_decisions_numeric').insert(decisionsNumericData.map((row) => {
|
|
850
|
-
const { project_id, ...rest } = row;
|
|
851
|
-
return rest;
|
|
852
|
-
}));
|
|
853
|
-
}
|
|
854
|
-
// Remove project_id from all transaction tables
|
|
855
|
-
const transactionTables = [
|
|
856
|
-
't_task_dependencies',
|
|
857
|
-
't_task_decision_links',
|
|
858
|
-
't_task_file_links',
|
|
859
|
-
't_task_tags',
|
|
860
|
-
't_task_details',
|
|
861
|
-
't_tasks',
|
|
862
|
-
't_constraints',
|
|
863
|
-
't_file_changes',
|
|
864
|
-
't_decision_context',
|
|
865
|
-
't_decision_scopes',
|
|
866
|
-
't_decision_tags',
|
|
867
|
-
't_decision_history',
|
|
868
|
-
];
|
|
869
|
-
for (const tableName of transactionTables) {
|
|
870
|
-
const hasTable = await knex.schema.hasTable(tableName);
|
|
871
|
-
if (hasTable) {
|
|
872
|
-
const hasColumn = await knex.schema.hasColumn(tableName, 'project_id');
|
|
873
|
-
if (hasColumn) {
|
|
874
|
-
await knex.schema.alterTable(tableName, (table) => {
|
|
875
|
-
table.dropColumn('project_id');
|
|
876
|
-
});
|
|
877
|
-
console.log(`✓ Removed project_id from ${tableName}`);
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
// Drop migration marker
|
|
882
|
-
await knex.schema.dropTableIfExists('_multi_project_pk_fixed');
|
|
883
|
-
// Drop m_projects table
|
|
884
|
-
await knex.schema.dropTableIfExists('m_projects');
|
|
885
|
-
// Recreate original views (without project_id)
|
|
886
|
-
await knex.raw(`
|
|
887
|
-
CREATE VIEW v_tagged_decisions AS
|
|
888
|
-
SELECT
|
|
889
|
-
k.key,
|
|
890
|
-
d.value,
|
|
891
|
-
l.name as layer,
|
|
892
|
-
a.name as decided_by,
|
|
893
|
-
datetime(d.ts, 'unixepoch') as updated,
|
|
894
|
-
GROUP_CONCAT(t.name, ', ') as tags
|
|
895
|
-
FROM t_decisions d
|
|
896
|
-
JOIN m_context_keys k ON d.key_id = k.id
|
|
897
|
-
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
898
|
-
LEFT JOIN m_agents a ON d.agent_id = a.id
|
|
899
|
-
LEFT JOIN t_decision_tags dt ON d.key_id = dt.decision_key_id
|
|
900
|
-
LEFT JOIN m_tags t ON dt.tag_id = t.id
|
|
901
|
-
WHERE d.status = 1
|
|
902
|
-
GROUP BY d.key_id
|
|
903
|
-
ORDER BY d.ts DESC
|
|
904
|
-
`);
|
|
905
|
-
await knex.raw(`
|
|
906
|
-
CREATE VIEW v_active_context AS
|
|
907
|
-
SELECT
|
|
908
|
-
k.key,
|
|
909
|
-
d.value,
|
|
910
|
-
l.name as layer,
|
|
911
|
-
a.name as decided_by,
|
|
912
|
-
datetime(d.ts, 'unixepoch') as updated
|
|
913
|
-
FROM t_decisions d
|
|
914
|
-
JOIN m_context_keys k ON d.key_id = k.id
|
|
915
|
-
LEFT JOIN m_layers l ON d.layer_id = l.id
|
|
916
|
-
LEFT JOIN m_agents a ON d.agent_id = a.id
|
|
917
|
-
WHERE d.status = 1 AND d.ts > (strftime('%s','now') - 3600)
|
|
918
|
-
ORDER BY d.ts DESC
|
|
919
|
-
`);
|
|
920
|
-
await knex.raw(`
|
|
921
|
-
CREATE VIEW v_layer_summary AS
|
|
922
|
-
SELECT l.name as layer,
|
|
923
|
-
COUNT(*) as decision_count
|
|
924
|
-
FROM t_decisions d
|
|
925
|
-
JOIN m_layers l ON d.layer_id = l.id
|
|
926
|
-
WHERE d.status = 1
|
|
927
|
-
GROUP BY l.id, l.name
|
|
928
|
-
ORDER BY decision_count DESC
|
|
929
|
-
`);
|
|
930
|
-
await knex.raw(`
|
|
931
|
-
CREATE VIEW v_recent_file_changes AS
|
|
932
|
-
SELECT f.path as file_path,
|
|
933
|
-
l.name as layer,
|
|
934
|
-
a.name as changed_by,
|
|
935
|
-
datetime(fc.ts, 'unixepoch') as changed_at
|
|
936
|
-
FROM t_file_changes fc
|
|
937
|
-
JOIN m_files f ON fc.file_id = f.id
|
|
938
|
-
LEFT JOIN m_layers l ON fc.layer_id = l.id
|
|
939
|
-
LEFT JOIN m_agents a ON fc.agent_id = a.id
|
|
940
|
-
ORDER BY fc.ts DESC
|
|
941
|
-
LIMIT 50
|
|
942
|
-
`);
|
|
943
|
-
await knex.raw(`
|
|
944
|
-
CREATE VIEW v_tagged_constraints AS
|
|
945
|
-
SELECT c.id,
|
|
946
|
-
c.constraint_text,
|
|
947
|
-
c.project_id,
|
|
948
|
-
cat.name as category,
|
|
949
|
-
c.priority,
|
|
950
|
-
a.name as author,
|
|
951
|
-
datetime(c.ts, 'unixepoch') as created
|
|
952
|
-
FROM t_constraints c
|
|
953
|
-
LEFT JOIN m_constraint_categories cat ON c.category_id = cat.id
|
|
954
|
-
LEFT JOIN m_agents a ON c.agent_id = a.id
|
|
955
|
-
WHERE c.active = 1
|
|
956
|
-
ORDER BY c.priority DESC, c.ts DESC
|
|
957
|
-
`);
|
|
958
|
-
await knex.raw(`
|
|
959
|
-
CREATE VIEW v_task_board AS
|
|
960
|
-
SELECT t.id,
|
|
961
|
-
t.title,
|
|
962
|
-
ts.name as status,
|
|
963
|
-
t.priority,
|
|
964
|
-
a.name as assigned_to,
|
|
965
|
-
datetime(t.created_ts, 'unixepoch') as created,
|
|
966
|
-
datetime(t.updated_ts, 'unixepoch') as updated
|
|
967
|
-
FROM t_tasks t
|
|
968
|
-
JOIN m_task_statuses ts ON t.status_id = ts.id
|
|
969
|
-
LEFT JOIN m_agents a ON t.assigned_agent_id = a.id
|
|
970
|
-
ORDER BY t.priority DESC, t.created_ts DESC
|
|
971
|
-
`);
|
|
972
|
-
console.log('✅ Multi-project rollback completed');
|
|
973
|
-
}
|
|
974
|
-
//# sourceMappingURL=20251104000000_add_multi_project_v3_7_0.js.map
|