sqlew 4.3.0 → 5.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 +95 -0
- package/LICENSE +1 -1
- package/NOTICE +2 -2
- package/README.md +338 -269
- package/assets/claude-md-snippets/plan-mode-integration.md +104 -48
- package/assets/claude-md-snippets/queue-monitoring.md +84 -0
- package/dist/backend/backend-factory.d.ts +67 -0
- package/dist/backend/backend-factory.d.ts.map +1 -0
- package/dist/backend/backend-factory.js +171 -0
- package/dist/backend/backend-factory.js.map +1 -0
- package/dist/backend/index.d.ts +12 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +13 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/inference.d.ts +38 -0
- package/dist/backend/inference.d.ts.map +1 -0
- package/dist/backend/inference.js +76 -0
- package/dist/backend/inference.js.map +1 -0
- package/dist/backend/local-backend.d.ts +40 -0
- package/dist/backend/local-backend.d.ts.map +1 -0
- package/dist/backend/local-backend.js +410 -0
- package/dist/backend/local-backend.js.map +1 -0
- package/dist/backend/transforming-backend.d.ts +47 -0
- package/dist/backend/transforming-backend.d.ts.map +1 -0
- package/dist/backend/transforming-backend.js +80 -0
- package/dist/backend/transforming-backend.js.map +1 -0
- package/dist/backend/types.d.ts +58 -0
- package/dist/backend/types.d.ts.map +1 -0
- package/dist/backend/types.js +7 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/cli/db-dump.js +45 -45
- package/dist/cli/db-dump.js.map +1 -1
- package/dist/cli/db-export.js +30 -30
- package/dist/cli/db-export.js.map +1 -1
- package/dist/cli/db-import.d.ts.map +1 -1
- package/dist/cli/db-import.js +32 -33
- package/dist/cli/db-import.js.map +1 -1
- package/dist/cli/hooks/check-completion.d.ts +1 -0
- package/dist/cli/hooks/check-completion.d.ts.map +1 -1
- package/dist/cli/hooks/check-completion.js +15 -26
- package/dist/cli/hooks/check-completion.js.map +1 -1
- package/dist/cli/hooks/mark-done.d.ts +1 -0
- package/dist/cli/hooks/mark-done.d.ts.map +1 -1
- package/dist/cli/hooks/mark-done.js +12 -17
- package/dist/cli/hooks/mark-done.js.map +1 -1
- package/dist/cli/hooks/on-enter-plan.js +2 -2
- package/dist/cli/hooks/on-enter-plan.js.map +1 -1
- package/dist/cli/hooks/on-session-start.d.ts +23 -0
- package/dist/cli/hooks/on-session-start.d.ts.map +1 -0
- package/dist/cli/hooks/on-session-start.js +70 -0
- package/dist/cli/hooks/on-session-start.js.map +1 -0
- package/dist/cli/hooks/on-stop.js +5 -5
- package/dist/cli/hooks/on-stop.js.map +1 -1
- package/dist/cli/hooks/{plan-toml-parser.d.ts → plan-parser.d.ts} +1 -1
- package/dist/cli/hooks/plan-parser.d.ts.map +1 -0
- package/dist/cli/hooks/{plan-toml-parser.js → plan-parser.js} +1 -1
- package/dist/cli/hooks/plan-parser.js.map +1 -0
- package/dist/cli/hooks/plan-pattern-extractor.d.ts.map +1 -1
- package/dist/cli/hooks/plan-pattern-extractor.js +6 -3
- package/dist/cli/hooks/plan-pattern-extractor.js.map +1 -1
- package/dist/cli/hooks/plan-processor.js +1 -1
- package/dist/cli/hooks/plan-processor.js.map +1 -1
- package/dist/cli/hooks/stdin-parser.d.ts +4 -0
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
- package/dist/cli/hooks/stdin-parser.js.map +1 -1
- package/dist/cli/hooks/suggest.js +2 -2
- package/dist/cli/hooks/suggest.js.map +1 -1
- package/dist/cli/hooks/track-plan.d.ts.map +1 -1
- package/dist/cli/hooks/track-plan.js +24 -18
- package/dist/cli/hooks/track-plan.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +108 -108
- package/dist/cli.js.map +1 -1
- package/dist/config/cloud-config-loader.d.ts +107 -0
- package/dist/config/cloud-config-loader.d.ts.map +1 -0
- package/dist/config/cloud-config-loader.js +273 -0
- package/dist/config/cloud-config-loader.js.map +1 -0
- package/dist/config/global-config.d.ts +10 -10
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +12 -12
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +5 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/minimal-generator.d.ts.map +1 -1
- package/dist/config/minimal-generator.js +22 -72
- package/dist/config/minimal-generator.js.map +1 -1
- package/dist/config/types.d.ts +59 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +14 -0
- package/dist/config/types.js.map +1 -1
- package/dist/constants.d.ts +1 -29
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -38
- package/dist/constants.js.map +1 -1
- package/dist/database/initialization/cleanup.d.ts.map +1 -1
- package/dist/database/initialization/cleanup.js +0 -13
- package/dist/database/initialization/cleanup.js.map +1 -1
- package/dist/database/initialization/init.d.ts.map +1 -1
- package/dist/database/initialization/init.js +0 -9
- package/dist/database/initialization/init.js.map +1 -1
- package/dist/database/initialization/schema-version.d.ts +4 -4
- package/dist/database/initialization/schema-version.js +9 -9
- package/dist/database/initialization/schema-version.js.map +1 -1
- package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.d.ts +36 -0
- package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.d.ts.map +1 -0
- package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.js +135 -0
- package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.js.map +1 -0
- package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.d.ts +20 -0
- package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.d.ts.map +1 -0
- package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.js +168 -0
- package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.js.map +1 -0
- package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.d.ts +23 -0
- package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.d.ts.map +1 -0
- package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.js +570 -0
- package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.js.map +1 -0
- package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.d.ts +29 -0
- package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.d.ts.map +1 -0
- package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.js +80 -0
- package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.js.map +1 -0
- package/dist/database/operations/inserts.js +11 -11
- package/dist/database/operations/inserts.js.map +1 -1
- package/dist/database/operations/queries.js +9 -9
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/formatters/adr-formatter.d.ts +22 -0
- package/dist/formatters/adr-formatter.d.ts.map +1 -0
- package/dist/formatters/adr-formatter.js +127 -0
- package/dist/formatters/adr-formatter.js.map +1 -0
- package/dist/formatters/confluence-formatter.d.ts +26 -0
- package/dist/formatters/confluence-formatter.d.ts.map +1 -0
- package/dist/formatters/confluence-formatter.js +129 -0
- package/dist/formatters/confluence-formatter.js.map +1 -0
- package/dist/formatters/index.d.ts +34 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +57 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/markdown-formatter.d.ts +16 -0
- package/dist/formatters/markdown-formatter.d.ts.map +1 -0
- package/dist/formatters/markdown-formatter.js +110 -0
- package/dist/formatters/markdown-formatter.js.map +1 -0
- package/dist/formatters/notion-formatter.d.ts +29 -0
- package/dist/formatters/notion-formatter.d.ts.map +1 -0
- package/dist/formatters/notion-formatter.js +177 -0
- package/dist/formatters/notion-formatter.js.map +1 -0
- package/dist/formatters/types.d.ts +31 -0
- package/dist/formatters/types.d.ts.map +1 -0
- package/dist/formatters/types.js +6 -0
- package/dist/formatters/types.js.map +1 -0
- package/dist/help-data/_schema.toml +21 -0
- package/dist/help-data/constraint.toml +259 -0
- package/dist/help-data/decision.toml +833 -0
- package/dist/help-data/example.toml +177 -0
- package/dist/help-data/help.toml +246 -0
- package/dist/help-data/queue.toml +134 -0
- package/dist/help-data/suggest.toml +219 -0
- package/dist/help-data/use-cases/_categories.toml +22 -0
- package/dist/help-data/use-cases/constraint-basic.toml +34 -0
- package/dist/help-data/use-cases/cross-tool-workflow.toml +50 -0
- package/dist/help-data/use-cases/decision-intelligence-duplicate.toml +35 -0
- package/dist/help-data/use-cases/decision-intelligence-related.toml +35 -0
- package/dist/help-data/use-cases/decision-tracking-basic.toml +42 -0
- package/dist/help-data/use-cases/decision-tracking-versions.toml +42 -0
- package/dist/help-data/use_case.toml +147 -0
- package/dist/help-loader.d.ts +194 -0
- package/dist/help-loader.d.ts.map +1 -0
- package/dist/help-loader.js +419 -0
- package/dist/help-loader.js.map +1 -0
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/dist/init-rules.d.ts +42 -0
- package/dist/init-rules.d.ts.map +1 -0
- package/dist/init-rules.js +217 -0
- package/dist/init-rules.js.map +1 -0
- package/dist/schema.d.ts +4 -6
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +28 -45
- package/dist/schema.js.map +1 -1
- package/dist/server/setup.d.ts +0 -10
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +97 -89
- package/dist/server/setup.js.map +1 -1
- package/dist/server/shutdown.d.ts +1 -1
- package/dist/server/shutdown.d.ts.map +1 -1
- package/dist/server/shutdown.js +1 -16
- package/dist/server/shutdown.js.map +1 -1
- package/dist/server/tool-handlers.d.ts +15 -0
- package/dist/server/tool-handlers.d.ts.map +1 -1
- package/dist/server/tool-handlers.js +47 -462
- package/dist/server/tool-handlers.js.map +1 -1
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +50 -62
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/tests/backend/backend-factory.test.d.ts +7 -0
- package/dist/tests/backend/backend-factory.test.d.ts.map +1 -0
- package/dist/tests/backend/backend-factory.test.js +157 -0
- package/dist/tests/backend/backend-factory.test.js.map +1 -0
- package/dist/tests/backend/inference.test.d.ts +7 -0
- package/dist/tests/backend/inference.test.d.ts.map +1 -0
- package/dist/tests/backend/inference.test.js +142 -0
- package/dist/tests/backend/inference.test.js.map +1 -0
- package/dist/tests/database/multi-project/multi-project.test.js +9 -70
- package/dist/tests/database/multi-project/multi-project.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 +32 -32
- package/dist/tests/docker/cross-database.test.js.map +1 -1
- package/dist/tests/docker/dump-import.test.js +55 -55
- package/dist/tests/docker/dump-import.test.js.map +1 -1
- package/dist/tests/docker/fk-constraints.test.js +3 -3
- package/dist/tests/docker/indexes.test.js +34 -34
- package/dist/tests/docker/integration.test.js +33 -33
- package/dist/tests/docker/multi-project-migration.test.js +47 -47
- package/dist/tests/docker/multi-project-migration.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +49 -49
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/db-init.d.ts +3 -1
- package/dist/tests/docker/native/db-init.d.ts.map +1 -1
- package/dist/tests/docker/native/db-init.js +14 -12
- package/dist/tests/docker/native/db-init.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +91 -91
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.d.ts +2 -2
- package/dist/tests/docker/native/help-system.test.js +113 -138
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.d.ts +2 -2
- package/dist/tests/docker/native/suggest-tool.test.js +35 -35
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +6 -12
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +74 -156
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/docker/schema-migration.test.js +6 -6
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.d.ts +3 -7
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.d.ts.map +1 -1
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +7 -318
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
- package/dist/tests/feature/help/help-system.test.d.ts +6 -6
- package/dist/tests/feature/help/help-system.test.js +166 -124
- package/dist/tests/feature/help/help-system.test.js.map +1 -1
- package/dist/tests/integration/auto-trigger-suggestions.test.js +22 -22
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
- package/dist/tests/integration/decision-intelligence-e2e.test.js +23 -22
- package/dist/tests/integration/decision-intelligence-e2e.test.js.map +1 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.js +3 -3
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +1 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js +25 -25
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
- package/dist/tests/integration/suggest-simple.test.js +18 -0
- package/dist/tests/integration/suggest-simple.test.js.map +1 -1
- package/dist/tests/migrations/test-all-versions.js +212 -212
- package/dist/tests/migrations/test-all-versions.js.map +1 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.js +29 -29
- package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +1 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.js +20 -20
- package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +1 -1
- package/dist/tests/test-v4-native-rdbms.js +20 -20
- package/dist/tests/test-v4-native-rdbms.js.map +1 -1
- package/dist/tests/unit/config/cloud-config-loader.test.d.ts +2 -0
- package/dist/tests/unit/config/cloud-config-loader.test.d.ts.map +1 -0
- package/dist/tests/unit/config/cloud-config-loader.test.js +103 -0
- package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -0
- package/dist/tests/unit/config/{plan-toml-cache.test.d.ts → plan-cache.test.d.ts} +1 -1
- package/dist/tests/unit/config/plan-cache.test.d.ts.map +1 -0
- package/dist/tests/unit/config/{plan-toml-cache.test.js → plan-cache.test.js} +32 -32
- package/dist/tests/unit/config/plan-cache.test.js.map +1 -0
- package/dist/tests/unit/hooks/{plan-toml-parser.test.d.ts → plan-parser.test.d.ts} +1 -1
- package/dist/tests/unit/hooks/plan-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/{plan-toml-parser.test.js → plan-parser.test.js} +179 -179
- package/dist/tests/unit/hooks/plan-parser.test.js.map +1 -0
- package/dist/tests/unit/server/tool-handlers.test.d.ts +7 -0
- package/dist/tests/unit/server/tool-handlers.test.d.ts.map +1 -0
- package/dist/tests/unit/server/tool-handlers.test.js +76 -0
- package/dist/tests/unit/server/tool-handlers.test.js.map +1 -0
- package/dist/tests/unit/utils/config-loader.test.js +17 -17
- package/dist/tests/unit/utils/connection-hash.test.d.ts +2 -0
- package/dist/tests/unit/utils/connection-hash.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/connection-hash.test.js +57 -0
- package/dist/tests/unit/utils/connection-hash.test.js.map +1 -0
- package/dist/tests/unit/utils/environment-detector.test.d.ts +2 -0
- package/dist/tests/unit/utils/environment-detector.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/environment-detector.test.js +43 -0
- package/dist/tests/unit/utils/environment-detector.test.js.map +1 -0
- package/dist/tests/unit/utils/path-utils.test.d.ts +2 -0
- package/dist/tests/unit/utils/path-utils.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/path-utils.test.js +72 -0
- package/dist/tests/unit/utils/path-utils.test.js.map +1 -0
- package/dist/tests/unit/utils/project-detector.test.js +14 -13
- package/dist/tests/unit/utils/project-detector.test.js.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.d.ts +2 -1
- package/dist/tests/unit/validation/parameter-validation.test.d.ts.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.js +5 -133
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
- 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-schema.js +48 -48
- package/dist/tests/utils/db-seeding.js +11 -11
- package/dist/tests/utils/db-seeding.js.map +1 -1
- package/dist/tests/utils/json-export-import.test.d.ts +6 -0
- package/dist/tests/utils/json-export-import.test.d.ts.map +1 -0
- package/dist/tests/utils/json-export-import.test.js +474 -0
- package/dist/tests/utils/json-export-import.test.js.map +1 -0
- package/dist/tests/utils/test-helpers.js +59 -59
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tools/constraints/actions/activate.d.ts +2 -2
- package/dist/tools/constraints/actions/activate.d.ts.map +1 -1
- package/dist/tools/constraints/actions/activate.js +12 -12
- package/dist/tools/constraints/actions/activate.js.map +1 -1
- package/dist/tools/constraints/actions/add.js +3 -3
- package/dist/tools/constraints/actions/add.js.map +1 -1
- package/dist/tools/constraints/actions/deactivate.js +6 -6
- 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 +9 -9
- package/dist/tools/constraints/actions/get.js.map +1 -1
- package/dist/tools/constraints/actions/suggest-pending.js +2 -2
- package/dist/tools/constraints/actions/suggest-pending.js.map +1 -1
- package/dist/tools/constraints/index.d.ts +1 -1
- package/dist/tools/constraints/index.d.ts.map +1 -1
- package/dist/tools/constraints/index.js +1 -1
- package/dist/tools/constraints/index.js.map +1 -1
- package/dist/tools/context/actions/create-policy.js +3 -3
- package/dist/tools/context/actions/create-policy.js.map +1 -1
- package/dist/tools/context/actions/create-template.js +2 -2
- package/dist/tools/context/actions/create-template.js.map +1 -1
- package/dist/tools/context/actions/export.d.ts +35 -0
- package/dist/tools/context/actions/export.d.ts.map +1 -0
- package/dist/tools/context/actions/export.js +93 -0
- package/dist/tools/context/actions/export.js.map +1 -0
- package/dist/tools/context/actions/hard-delete.js +11 -11
- package/dist/tools/context/actions/hard-delete.js.map +1 -1
- package/dist/tools/context/actions/has-updates.d.ts +1 -1
- package/dist/tools/context/actions/has-updates.d.ts.map +1 -1
- package/dist/tools/context/actions/has-updates.js +5 -17
- package/dist/tools/context/actions/has-updates.js.map +1 -1
- package/dist/tools/context/actions/list-policies.js +1 -1
- package/dist/tools/context/actions/list-policies.js.map +1 -1
- package/dist/tools/context/actions/list-templates.js +2 -2
- 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.js +8 -8
- 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.js +3 -3
- package/dist/tools/context/actions/versions.js.map +1 -1
- package/dist/tools/context/index.d.ts +1 -0
- package/dist/tools/context/index.d.ts.map +1 -1
- package/dist/tools/context/index.js +2 -0
- package/dist/tools/context/index.js.map +1 -1
- package/dist/tools/context/internal/queries.d.ts.map +1 -1
- package/dist/tools/context/internal/queries.js +54 -43
- package/dist/tools/context/internal/queries.js.map +1 -1
- package/dist/tools/context/types.d.ts +1 -1
- package/dist/tools/context/types.d.ts.map +1 -1
- package/dist/tools/example/actions/get.d.ts +8 -3
- package/dist/tools/example/actions/get.d.ts.map +1 -1
- package/dist/tools/example/actions/get.js +29 -30
- package/dist/tools/example/actions/get.js.map +1 -1
- package/dist/tools/example/actions/list-all.d.ts +8 -2
- package/dist/tools/example/actions/list-all.d.ts.map +1 -1
- package/dist/tools/example/actions/list-all.js +37 -29
- package/dist/tools/example/actions/list-all.js.map +1 -1
- package/dist/tools/example/actions/search.d.ts +8 -3
- package/dist/tools/example/actions/search.d.ts.map +1 -1
- package/dist/tools/example/actions/search.js +29 -43
- package/dist/tools/example/actions/search.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/actions/query-action.d.ts +7 -3
- package/dist/tools/help/actions/query-action.d.ts.map +1 -1
- package/dist/tools/help/actions/query-action.js +35 -6
- package/dist/tools/help/actions/query-action.js.map +1 -1
- package/dist/tools/help/actions/query-params.d.ts +5 -3
- package/dist/tools/help/actions/query-params.d.ts.map +1 -1
- package/dist/tools/help/actions/query-params.js +28 -6
- package/dist/tools/help/actions/query-params.js.map +1 -1
- package/dist/tools/help/actions/query-tool.d.ts +5 -3
- package/dist/tools/help/actions/query-tool.d.ts.map +1 -1
- package/dist/tools/help/actions/query-tool.js +23 -6
- package/dist/tools/help/actions/query-tool.js.map +1 -1
- package/dist/tools/help/actions/workflow-hints.d.ts +5 -3
- package/dist/tools/help/actions/workflow-hints.d.ts.map +1 -1
- package/dist/tools/help/actions/workflow-hints.js +21 -6
- package/dist/tools/help/actions/workflow-hints.js.map +1 -1
- package/dist/tools/queue/actions/clear.d.ts +19 -0
- package/dist/tools/queue/actions/clear.d.ts.map +1 -0
- package/dist/tools/queue/actions/clear.js +79 -0
- package/dist/tools/queue/actions/clear.js.map +1 -0
- package/dist/tools/queue/actions/list.d.ts +16 -0
- package/dist/tools/queue/actions/list.d.ts.map +1 -0
- package/dist/tools/queue/actions/list.js +95 -0
- package/dist/tools/queue/actions/list.js.map +1 -0
- package/dist/tools/queue/actions/remove.d.ts +19 -0
- package/dist/tools/queue/actions/remove.d.ts.map +1 -0
- package/dist/tools/queue/actions/remove.js +81 -0
- package/dist/tools/queue/actions/remove.js.map +1 -0
- package/dist/tools/queue/index.d.ts +13 -0
- package/dist/tools/queue/index.d.ts.map +1 -0
- package/dist/tools/queue/index.js +13 -0
- package/dist/tools/queue/index.js.map +1 -0
- package/dist/tools/queue/types.d.ts +87 -0
- package/dist/tools/queue/types.d.ts.map +1 -0
- package/dist/tools/queue/types.js +9 -0
- package/dist/tools/queue/types.js.map +1 -0
- package/dist/tools/suggest/actions/by-context.d.ts.map +1 -1
- package/dist/tools/suggest/actions/by-context.js +7 -15
- package/dist/tools/suggest/actions/by-context.js.map +1 -1
- package/dist/tools/suggest/actions/by-key.d.ts.map +1 -1
- package/dist/tools/suggest/actions/by-key.js +7 -15
- package/dist/tools/suggest/actions/by-key.js.map +1 -1
- package/dist/tools/suggest/actions/by-tags.d.ts +2 -2
- package/dist/tools/suggest/actions/by-tags.d.ts.map +1 -1
- package/dist/tools/suggest/actions/by-tags.js +8 -18
- package/dist/tools/suggest/actions/by-tags.js.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-context.d.ts +1 -1
- package/dist/tools/suggest/actions/constraint-by-context.d.ts.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-context.js +9 -16
- package/dist/tools/suggest/actions/constraint-by-context.js.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-tags.d.ts +1 -1
- package/dist/tools/suggest/actions/constraint-by-tags.d.ts.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-tags.js +11 -17
- package/dist/tools/suggest/actions/constraint-by-tags.js.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-text.d.ts +1 -1
- package/dist/tools/suggest/actions/constraint-by-text.d.ts.map +1 -1
- package/dist/tools/suggest/actions/constraint-by-text.js +6 -15
- package/dist/tools/suggest/actions/constraint-by-text.js.map +1 -1
- package/dist/tools/suggest/internal/constraint-queries.d.ts +4 -4
- package/dist/tools/suggest/internal/constraint-queries.js +14 -14
- package/dist/tools/suggest/internal/constraint-queries.js.map +1 -1
- package/dist/tools/suggest/internal/queries.d.ts +4 -4
- package/dist/tools/suggest/internal/queries.js +25 -25
- package/dist/tools/suggest/internal/queries.js.map +1 -1
- package/dist/tools/use_case/actions/get.d.ts +5 -3
- package/dist/tools/use_case/actions/get.d.ts.map +1 -1
- package/dist/tools/use_case/actions/get.js +20 -6
- package/dist/tools/use_case/actions/get.js.map +1 -1
- package/dist/tools/use_case/actions/list-all.d.ts +5 -3
- package/dist/tools/use_case/actions/list-all.d.ts.map +1 -1
- package/dist/tools/use_case/actions/list-all.js +36 -6
- package/dist/tools/use_case/actions/list-all.js.map +1 -1
- package/dist/tools/use_case/actions/search.d.ts +6 -3
- package/dist/tools/use_case/actions/search.d.ts.map +1 -1
- package/dist/tools/use_case/actions/search.js +37 -67
- package/dist/tools/use_case/actions/search.js.map +1 -1
- package/dist/tools/use_case/help/example.js +17 -17
- package/dist/tools/use_case/help/example.js.map +1 -1
- package/dist/types.d.ts +81 -380
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +1 -1
- package/dist/utils/action-specs/constraint-specs.js +6 -6
- package/dist/utils/action-specs/constraint-specs.js.map +1 -1
- package/dist/utils/action-specs/index.d.ts +0 -2
- package/dist/utils/action-specs/index.d.ts.map +1 -1
- package/dist/utils/action-specs/index.js +0 -6
- package/dist/utils/action-specs/index.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/case-insensitive-validator.d.ts +2 -2
- package/dist/utils/case-insensitive-validator.js +2 -2
- package/dist/utils/connection-hash.d.ts +37 -0
- package/dist/utils/connection-hash.d.ts.map +1 -0
- package/dist/utils/connection-hash.js +55 -0
- package/dist/utils/connection-hash.js.map +1 -0
- package/dist/utils/db-aggregations.js +16 -16
- package/dist/utils/db-aggregations.js.map +1 -1
- package/dist/utils/enum-converter.d.ts +0 -21
- package/dist/utils/enum-converter.d.ts.map +1 -1
- package/dist/utils/enum-converter.js +1 -23
- package/dist/utils/enum-converter.js.map +1 -1
- package/dist/utils/environment-detector.d.ts +30 -0
- package/dist/utils/environment-detector.d.ts.map +1 -0
- package/dist/utils/environment-detector.js +86 -0
- package/dist/utils/environment-detector.js.map +1 -0
- package/dist/utils/example-filter.d.ts +34 -0
- package/dist/utils/example-filter.d.ts.map +1 -0
- package/dist/utils/example-filter.js +45 -0
- package/dist/utils/example-filter.js.map +1 -0
- package/dist/utils/exporter/export.d.ts +2 -16
- package/dist/utils/exporter/export.d.ts.map +1 -1
- package/dist/utils/exporter/export.js +49 -130
- package/dist/utils/exporter/export.js.map +1 -1
- package/dist/utils/hook-queue.d.ts +60 -0
- package/dist/utils/hook-queue.d.ts.map +1 -1
- package/dist/utils/hook-queue.js +114 -11
- package/dist/utils/hook-queue.js.map +1 -1
- package/dist/utils/importer/import.d.ts.map +1 -1
- package/dist/utils/importer/import.js +33 -188
- package/dist/utils/importer/import.js.map +1 -1
- package/dist/utils/importer/master-tables.d.ts +2 -1
- package/dist/utils/importer/master-tables.d.ts.map +1 -1
- package/dist/utils/importer/master-tables.js +35 -81
- package/dist/utils/importer/master-tables.js.map +1 -1
- package/dist/utils/param-normalizer.d.ts +0 -1
- package/dist/utils/param-normalizer.d.ts.map +1 -1
- package/dist/utils/param-normalizer.js +1 -3
- package/dist/utils/param-normalizer.js.map +1 -1
- package/dist/utils/path-utils.d.ts +46 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +74 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/policy-validator.js +1 -1
- package/dist/utils/policy-validator.js.map +1 -1
- package/dist/utils/project-context.d.ts +23 -0
- package/dist/utils/project-context.d.ts.map +1 -1
- package/dist/utils/project-context.js +45 -3
- package/dist/utils/project-context.js.map +1 -1
- package/dist/utils/project-root.d.ts +2 -2
- package/dist/utils/project-root.js +2 -2
- package/dist/utils/sql-dump/core/index-export.js +7 -7
- package/dist/utils/sql-dump/schema/indexes.js +24 -24
- package/dist/utils/sql-dump/schema/tables.js +44 -44
- package/dist/utils/suggest-helpers.d.ts +82 -0
- package/dist/utils/suggest-helpers.d.ts.map +1 -0
- package/dist/utils/suggest-helpers.js +93 -0
- package/dist/utils/suggest-helpers.js.map +1 -0
- package/dist/utils/token-logging.js +6 -6
- package/dist/utils/token-logging.js.map +1 -1
- package/dist/utils/validators.js +1 -1
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/view-queries.d.ts +0 -8
- package/dist/utils/view-queries.d.ts.map +1 -1
- package/dist/utils/view-queries.js +29 -84
- package/dist/utils/view-queries.js.map +1 -1
- package/dist/watcher/index.d.ts +1 -4
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +1 -3
- package/dist/watcher/index.js.map +1 -1
- package/dist/watcher/queue-watcher.d.ts +10 -3
- package/dist/watcher/queue-watcher.d.ts.map +1 -1
- package/dist/watcher/queue-watcher.js +24 -21
- package/dist/watcher/queue-watcher.js.map +1 -1
- package/docs/CONFIGURATION.md +14 -14
- package/docs/DATABASE_AUTH.md +1 -1
- package/docs/HOOKS_GUIDE.md +30 -50
- package/docs/HOW_TO_UNINSTALL.md +199 -0
- package/docs/MIGRATION_CLEANUP_GUIDE.md +212 -0
- package/docs/MIGRATION_TO_SAAS.md +176 -0
- package/docs/SLASH_COMMANDS.md +1 -1
- package/docs/cli/DATABASE_MIGRATION.md +13 -13
- package/docs/cli/DATA_EXPORT_IMPORT.md +71 -69
- package/package.json +10 -8
- package/saas-connector/LICENSE +190 -0
- package/saas-connector/README.md +122 -0
- package/saas-connector/dist/auth/auth-manager.d.ts +6 -0
- package/saas-connector/dist/auth/auth-manager.d.ts.map +1 -0
- package/saas-connector/dist/auth/auth-manager.js +39 -0
- package/saas-connector/dist/auth/auth-manager.js.map +7 -0
- package/saas-connector/dist/backend/saas-backend.d.ts +20 -0
- package/saas-connector/dist/backend/saas-backend.d.ts.map +1 -0
- package/saas-connector/dist/backend/saas-backend.js +104 -0
- package/saas-connector/dist/backend/saas-backend.js.map +7 -0
- package/saas-connector/dist/client/http-client.d.ts +33 -0
- package/saas-connector/dist/client/http-client.d.ts.map +1 -0
- package/saas-connector/dist/client/http-client.js +226 -0
- package/saas-connector/dist/client/http-client.js.map +7 -0
- package/saas-connector/dist/client/types.d.ts +62 -0
- package/saas-connector/dist/client/types.d.ts.map +1 -0
- package/saas-connector/dist/client/types.js +17 -0
- package/saas-connector/dist/client/types.js.map +7 -0
- package/saas-connector/dist/config/constants.d.ts +14 -0
- package/saas-connector/dist/config/constants.d.ts.map +1 -0
- package/saas-connector/dist/config/constants.js +68 -0
- package/saas-connector/dist/config/constants.js.map +7 -0
- package/saas-connector/dist/errors/api-error.d.ts +26 -0
- package/saas-connector/dist/errors/api-error.d.ts.map +1 -0
- package/saas-connector/dist/errors/api-error.js +62 -0
- package/saas-connector/dist/errors/api-error.js.map +7 -0
- package/saas-connector/dist/index.d.ts +18 -0
- package/saas-connector/dist/index.d.ts.map +1 -0
- package/saas-connector/dist/index.js +51 -0
- package/saas-connector/dist/index.js.map +7 -0
- package/saas-connector/package-lock.json +518 -0
- package/saas-connector/package.json +34 -0
- package/scripts/copy-help-data.js +19 -0
- package/assets/config.example.toml +0 -282
- package/assets/kanban-style.png +0 -0
- package/assets/kanban-visualizer.png +0 -0
- package/assets/sample-agents/README.md +0 -36
- package/assets/sample-agents/sqlew-architect.md +0 -321
- package/assets/sample-agents/sqlew-researcher.md +0 -292
- package/assets/sample-agents/sqlew-scrum-master.md +0 -286
- package/assets/sample-commands/README.md +0 -56
- package/assets/sample-commands/sqlew.md +0 -144
- package/assets/sample-skills/sqlew-decision-format/SKILL.md +0 -73
- package/assets/sample-skills/sqlew-plan-guidance/SKILL.md +0 -62
- package/assets/schema.sql +0 -564
- package/dist/cli/hooks/init-hooks.d.ts +0 -35
- package/dist/cli/hooks/init-hooks.d.ts.map +0 -1
- package/dist/cli/hooks/init-hooks.js +0 -517
- package/dist/cli/hooks/init-hooks.js.map +0 -1
- package/dist/cli/hooks/plan-toml-parser.d.ts.map +0 -1
- package/dist/cli/hooks/plan-toml-parser.js.map +0 -1
- package/dist/init-agents.d.ts +0 -7
- package/dist/init-agents.d.ts.map +0 -1
- package/dist/init-agents.js +0 -206
- package/dist/init-agents.js.map +0 -1
- package/dist/init-commands.d.ts +0 -10
- package/dist/init-commands.d.ts.map +0 -1
- package/dist/init-commands.js +0 -46
- package/dist/init-commands.js.map +0 -1
- package/dist/init-skills.d.ts +0 -25
- package/dist/init-skills.d.ts.map +0 -1
- package/dist/init-skills.js +0 -160
- package/dist/init-skills.js.map +0 -1
- package/dist/sync-agents.d.ts +0 -13
- package/dist/sync-agents.d.ts.map +0 -1
- package/dist/sync-agents.js +0 -157
- package/dist/sync-agents.js.map +0 -1
- package/dist/sync-commands.d.ts +0 -13
- package/dist/sync-commands.d.ts.map +0 -1
- package/dist/sync-commands.js +0 -150
- package/dist/sync-commands.js.map +0 -1
- package/dist/sync-gitignore.d.ts +0 -13
- package/dist/sync-gitignore.d.ts.map +0 -1
- package/dist/sync-gitignore.js +0 -60
- package/dist/sync-gitignore.js.map +0 -1
- package/dist/tests/docker/native/task-operations.test.d.ts +0 -16
- package/dist/tests/docker/native/task-operations.test.d.ts.map +0 -1
- package/dist/tests/docker/native/task-operations.test.js +0 -800
- package/dist/tests/docker/native/task-operations.test.js.map +0 -1
- package/dist/tests/feature/decision/batch-validation-integration.test.d.ts +0 -6
- package/dist/tests/feature/decision/batch-validation-integration.test.d.ts.map +0 -1
- package/dist/tests/feature/decision/batch-validation-integration.test.js +0 -193
- package/dist/tests/feature/decision/batch-validation-integration.test.js.map +0 -1
- package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts +0 -6
- package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts.map +0 -1
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js +0 -281
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +0 -1
- package/dist/tests/feature/task/auto-pruning-partial.test.d.ts +0 -6
- package/dist/tests/feature/task/auto-pruning-partial.test.d.ts.map +0 -1
- package/dist/tests/feature/task/auto-pruning-partial.test.js +0 -305
- package/dist/tests/feature/task/auto-pruning-partial.test.js.map +0 -1
- package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts +0 -6
- package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts.map +0 -1
- package/dist/tests/feature/task/auto-pruning-persistence.test.js +0 -267
- package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +0 -1
- package/dist/tests/feature/task/auto-pruning-safety.test.d.ts +0 -12
- package/dist/tests/feature/task/auto-pruning-safety.test.d.ts.map +0 -1
- package/dist/tests/feature/task/auto-pruning-safety.test.js +0 -224
- package/dist/tests/feature/task/auto-pruning-safety.test.js.map +0 -1
- package/dist/tests/feature/task/dependencies.test.d.ts +0 -7
- package/dist/tests/feature/task/dependencies.test.d.ts.map +0 -1
- package/dist/tests/feature/task/dependencies.test.js +0 -656
- package/dist/tests/feature/task/dependencies.test.js.map +0 -1
- package/dist/tests/feature/task/file-actions-integration.test.d.ts +0 -10
- package/dist/tests/feature/task/file-actions-integration.test.d.ts.map +0 -1
- package/dist/tests/feature/task/file-actions-integration.test.js +0 -162
- package/dist/tests/feature/task/file-actions-integration.test.js.map +0 -1
- package/dist/tests/feature/task/file-actions-validation.test.d.ts +0 -6
- package/dist/tests/feature/task/file-actions-validation.test.d.ts.map +0 -1
- package/dist/tests/feature/task/file-actions-validation.test.js +0 -228
- package/dist/tests/feature/task/file-actions-validation.test.js.map +0 -1
- package/dist/tests/feature/task/link-file-backward-compat.test.d.ts +0 -6
- package/dist/tests/feature/task/link-file-backward-compat.test.d.ts.map +0 -1
- package/dist/tests/feature/task/link-file-backward-compat.test.js +0 -280
- package/dist/tests/feature/task/link-file-backward-compat.test.js.map +0 -1
- package/dist/tests/feature/task/watch-files-action.test.d.ts +0 -8
- package/dist/tests/feature/task/watch-files-action.test.d.ts.map +0 -1
- package/dist/tests/feature/task/watch-files-action.test.js +0 -402
- package/dist/tests/feature/task/watch-files-action.test.js.map +0 -1
- package/dist/tests/feature/task/watch-files-parameter.test.d.ts +0 -8
- package/dist/tests/feature/task/watch-files-parameter.test.d.ts.map +0 -1
- package/dist/tests/feature/task/watch-files-parameter.test.js +0 -283
- package/dist/tests/feature/task/watch-files-parameter.test.js.map +0 -1
- package/dist/tests/integration/all-features.standalone.d.ts +0 -7
- package/dist/tests/integration/all-features.standalone.d.ts.map +0 -1
- package/dist/tests/integration/all-features.standalone.js +0 -417
- package/dist/tests/integration/all-features.standalone.js.map +0 -1
- package/dist/tests/unit/config/plan-toml-cache.test.d.ts.map +0 -1
- package/dist/tests/unit/config/plan-toml-cache.test.js.map +0 -1
- package/dist/tests/unit/hooks/plan-toml-parser.test.d.ts.map +0 -1
- package/dist/tests/unit/hooks/plan-toml-parser.test.js.map +0 -1
- package/dist/tools/files/actions/check-lock.d.ts +0 -16
- package/dist/tools/files/actions/check-lock.d.ts.map +0 -1
- package/dist/tools/files/actions/check-lock.js +0 -74
- package/dist/tools/files/actions/check-lock.js.map +0 -1
- package/dist/tools/files/actions/get.d.ts +0 -16
- package/dist/tools/files/actions/get.d.ts.map +0 -1
- package/dist/tools/files/actions/get.js +0 -85
- package/dist/tools/files/actions/get.js.map +0 -1
- package/dist/tools/files/actions/record-batch.d.ts +0 -18
- package/dist/tools/files/actions/record-batch.d.ts.map +0 -1
- package/dist/tools/files/actions/record-batch.js +0 -119
- package/dist/tools/files/actions/record-batch.js.map +0 -1
- package/dist/tools/files/actions/record.d.ts +0 -16
- package/dist/tools/files/actions/record.d.ts.map +0 -1
- package/dist/tools/files/actions/record.js +0 -43
- package/dist/tools/files/actions/record.js.map +0 -1
- package/dist/tools/files/actions/sqlite-flush.d.ts +0 -27
- package/dist/tools/files/actions/sqlite-flush.d.ts.map +0 -1
- package/dist/tools/files/actions/sqlite-flush.js +0 -66
- package/dist/tools/files/actions/sqlite-flush.js.map +0 -1
- package/dist/tools/files/help/example.d.ts +0 -5
- package/dist/tools/files/help/example.d.ts.map +0 -1
- package/dist/tools/files/help/example.js +0 -98
- package/dist/tools/files/help/example.js.map +0 -1
- package/dist/tools/files/help/help.d.ts +0 -5
- package/dist/tools/files/help/help.d.ts.map +0 -1
- package/dist/tools/files/help/help.js +0 -24
- package/dist/tools/files/help/help.js.map +0 -1
- package/dist/tools/files/index.d.ts +0 -14
- package/dist/tools/files/index.d.ts.map +0 -1
- package/dist/tools/files/index.js +0 -15
- package/dist/tools/files/index.js.map +0 -1
- package/dist/tools/files/internal/queries.d.ts +0 -18
- package/dist/tools/files/internal/queries.d.ts.map +0 -1
- package/dist/tools/files/internal/queries.js +0 -54
- package/dist/tools/files/internal/queries.js.map +0 -1
- package/dist/tools/files/internal/validation.d.ts +0 -18
- package/dist/tools/files/internal/validation.d.ts.map +0 -1
- package/dist/tools/files/internal/validation.js +0 -39
- package/dist/tools/files/internal/validation.js.map +0 -1
- package/dist/tools/files/types.d.ts +0 -6
- package/dist/tools/files/types.d.ts.map +0 -1
- package/dist/tools/files/types.js +0 -6
- package/dist/tools/files/types.js.map +0 -1
- package/dist/tools/help-queries.d.ts +0 -130
- package/dist/tools/help-queries.d.ts.map +0 -1
- package/dist/tools/help-queries.js +0 -411
- package/dist/tools/help-queries.js.map +0 -1
- package/dist/tools/tasks/actions/add-dependency.d.ts +0 -12
- package/dist/tools/tasks/actions/add-dependency.d.ts.map +0 -1
- package/dist/tools/tasks/actions/add-dependency.js +0 -129
- package/dist/tools/tasks/actions/add-dependency.js.map +0 -1
- package/dist/tools/tasks/actions/archive.d.ts +0 -11
- package/dist/tools/tasks/actions/archive.d.ts.map +0 -1
- package/dist/tools/tasks/actions/archive.js +0 -58
- package/dist/tools/tasks/actions/archive.js.map +0 -1
- package/dist/tools/tasks/actions/create-batch.d.ts +0 -19
- package/dist/tools/tasks/actions/create-batch.d.ts.map +0 -1
- package/dist/tools/tasks/actions/create-batch.js +0 -103
- package/dist/tools/tasks/actions/create-batch.js.map +0 -1
- package/dist/tools/tasks/actions/create.d.ts +0 -16
- package/dist/tools/tasks/actions/create.d.ts.map +0 -1
- package/dist/tools/tasks/actions/create.js +0 -163
- package/dist/tools/tasks/actions/create.js.map +0 -1
- package/dist/tools/tasks/actions/get-dependencies.d.ts +0 -12
- package/dist/tools/tasks/actions/get-dependencies.d.ts.map +0 -1
- package/dist/tools/tasks/actions/get-dependencies.js +0 -41
- package/dist/tools/tasks/actions/get-dependencies.js.map +0 -1
- package/dist/tools/tasks/actions/get-pruned-files.d.ts +0 -13
- package/dist/tools/tasks/actions/get-pruned-files.d.ts.map +0 -1
- package/dist/tools/tasks/actions/get-pruned-files.js +0 -45
- package/dist/tools/tasks/actions/get-pruned-files.js.map +0 -1
- package/dist/tools/tasks/actions/get.d.ts +0 -12
- package/dist/tools/tasks/actions/get.d.ts.map +0 -1
- package/dist/tools/tasks/actions/get.js +0 -84
- package/dist/tools/tasks/actions/get.js.map +0 -1
- package/dist/tools/tasks/actions/link-pruned-file.d.ts +0 -14
- package/dist/tools/tasks/actions/link-pruned-file.d.ts.map +0 -1
- package/dist/tools/tasks/actions/link-pruned-file.js +0 -68
- package/dist/tools/tasks/actions/link-pruned-file.js.map +0 -1
- package/dist/tools/tasks/actions/link.d.ts +0 -14
- package/dist/tools/tasks/actions/link.d.ts.map +0 -1
- package/dist/tools/tasks/actions/link.js +0 -120
- package/dist/tools/tasks/actions/link.js.map +0 -1
- package/dist/tools/tasks/actions/list.d.ts +0 -17
- package/dist/tools/tasks/actions/list.d.ts.map +0 -1
- package/dist/tools/tasks/actions/list.js +0 -100
- package/dist/tools/tasks/actions/list.js.map +0 -1
- package/dist/tools/tasks/actions/move.d.ts +0 -13
- package/dist/tools/tasks/actions/move.d.ts.map +0 -1
- package/dist/tools/tasks/actions/move.js +0 -91
- package/dist/tools/tasks/actions/move.js.map +0 -1
- package/dist/tools/tasks/actions/remove-dependency.d.ts +0 -12
- package/dist/tools/tasks/actions/remove-dependency.d.ts.map +0 -1
- package/dist/tools/tasks/actions/remove-dependency.js +0 -36
- package/dist/tools/tasks/actions/remove-dependency.js.map +0 -1
- package/dist/tools/tasks/actions/update.d.ts +0 -10
- package/dist/tools/tasks/actions/update.d.ts.map +0 -1
- package/dist/tools/tasks/actions/update.js +0 -183
- package/dist/tools/tasks/actions/update.js.map +0 -1
- package/dist/tools/tasks/actions/watch-files.d.ts +0 -14
- package/dist/tools/tasks/actions/watch-files.d.ts.map +0 -1
- package/dist/tools/tasks/actions/watch-files.js +0 -127
- package/dist/tools/tasks/actions/watch-files.js.map +0 -1
- package/dist/tools/tasks/help/example.d.ts +0 -8
- package/dist/tools/tasks/help/example.d.ts.map +0 -1
- package/dist/tools/tasks/help/example.js +0 -225
- package/dist/tools/tasks/help/example.js.map +0 -1
- package/dist/tools/tasks/help/help.d.ts +0 -8
- package/dist/tools/tasks/help/help.d.ts.map +0 -1
- package/dist/tools/tasks/help/help.js +0 -307
- package/dist/tools/tasks/help/help.js.map +0 -1
- package/dist/tools/tasks/help/use-case.d.ts +0 -11
- package/dist/tools/tasks/help/use-case.d.ts.map +0 -1
- package/dist/tools/tasks/help/use-case.js +0 -767
- package/dist/tools/tasks/help/use-case.js.map +0 -1
- package/dist/tools/tasks/index.d.ts +0 -28
- package/dist/tools/tasks/index.d.ts.map +0 -1
- package/dist/tools/tasks/index.js +0 -33
- package/dist/tools/tasks/index.js.map +0 -1
- package/dist/tools/tasks/internal/state-machine.d.ts +0 -16
- package/dist/tools/tasks/internal/state-machine.d.ts.map +0 -1
- package/dist/tools/tasks/internal/state-machine.js +0 -36
- package/dist/tools/tasks/internal/state-machine.js.map +0 -1
- package/dist/tools/tasks/internal/task-queries.d.ts +0 -12
- package/dist/tools/tasks/internal/task-queries.d.ts.map +0 -1
- package/dist/tools/tasks/internal/task-queries.js +0 -53
- package/dist/tools/tasks/internal/task-queries.js.map +0 -1
- package/dist/tools/tasks/internal/validation.d.ts +0 -47
- package/dist/tools/tasks/internal/validation.d.ts.map +0 -1
- package/dist/tools/tasks/internal/validation.js +0 -261
- package/dist/tools/tasks/internal/validation.js.map +0 -1
- package/dist/tools/tasks/types.d.ts +0 -80
- package/dist/tools/tasks/types.d.ts.map +0 -1
- package/dist/tools/tasks/types.js +0 -68
- package/dist/tools/tasks/types.js.map +0 -1
- package/dist/tools/tasks/watcher/status.d.ts +0 -9
- package/dist/tools/tasks/watcher/status.d.ts.map +0 -1
- package/dist/tools/tasks/watcher/status.js +0 -130
- package/dist/tools/tasks/watcher/status.js.map +0 -1
- package/dist/tools/tasks.d.ts +0 -16
- package/dist/tools/tasks.d.ts.map +0 -1
- package/dist/tools/tasks.js +0 -17
- package/dist/tools/tasks.js.map +0 -1
- package/dist/utils/action-specs/file-specs.d.ts +0 -9
- package/dist/utils/action-specs/file-specs.d.ts.map +0 -1
- package/dist/utils/action-specs/file-specs.js +0 -54
- package/dist/utils/action-specs/file-specs.js.map +0 -1
- package/dist/utils/action-specs/task-specs.d.ts +0 -9
- package/dist/utils/action-specs/task-specs.d.ts.map +0 -1
- package/dist/utils/action-specs/task-specs.js +0 -143
- package/dist/utils/action-specs/task-specs.js.map +0 -1
- package/dist/utils/cleanup.d.ts +0 -69
- package/dist/utils/cleanup.d.ts.map +0 -1
- package/dist/utils/cleanup.js +0 -102
- package/dist/utils/cleanup.js.map +0 -1
- package/dist/utils/file-pruning.d.ts +0 -93
- package/dist/utils/file-pruning.d.ts.map +0 -1
- package/dist/utils/file-pruning.js +0 -194
- package/dist/utils/file-pruning.js.map +0 -1
- package/dist/utils/importer/topological-sort.d.ts +0 -61
- package/dist/utils/importer/topological-sort.d.ts.map +0 -1
- package/dist/utils/importer/topological-sort.js +0 -143
- package/dist/utils/importer/topological-sort.js.map +0 -1
- package/dist/utils/retention.d.ts +0 -65
- package/dist/utils/retention.d.ts.map +0 -1
- package/dist/utils/retention.js +0 -156
- package/dist/utils/retention.js.map +0 -1
- package/dist/utils/task-stale-detection.d.ts +0 -98
- package/dist/utils/task-stale-detection.d.ts.map +0 -1
- package/dist/utils/task-stale-detection.js +0 -479
- package/dist/utils/task-stale-detection.js.map +0 -1
- package/dist/watcher/file-watcher.d.ts +0 -131
- package/dist/watcher/file-watcher.d.ts.map +0 -1
- package/dist/watcher/file-watcher.js +0 -730
- package/dist/watcher/file-watcher.js.map +0 -1
- package/dist/watcher/test-executor.d.ts +0 -23
- package/dist/watcher/test-executor.d.ts.map +0 -1
- package/dist/watcher/test-executor.js +0 -226
- package/dist/watcher/test-executor.js.map +0 -1
- package/docs/TASK_SYSTEM_DEPRECATED.md +0 -88
|
@@ -1,656 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for Task Dependency feature
|
|
3
|
-
* Tests add_dependency, remove_dependency, get_dependencies actions
|
|
4
|
-
* and enhanced list/get actions with dependency support
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
7
|
-
import assert from 'node:assert/strict';
|
|
8
|
-
import { initializeDatabase, closeDatabase } from '../../../database.js';
|
|
9
|
-
import { ProjectContext } from '../../../utils/project-context.js';
|
|
10
|
-
import fs from 'fs';
|
|
11
|
-
import path from 'path';
|
|
12
|
-
import os from 'os';
|
|
13
|
-
/**
|
|
14
|
-
* Test database instance
|
|
15
|
-
*/
|
|
16
|
-
let testDb;
|
|
17
|
-
let tempDir;
|
|
18
|
-
let tempDbPath;
|
|
19
|
-
/**
|
|
20
|
-
* Helper: Create a test task
|
|
21
|
-
* Note: Agent tracking removed in v4.0
|
|
22
|
-
*/
|
|
23
|
-
async function createTestTask(db, title, status = 'todo') {
|
|
24
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
25
|
-
const statusIdMap = {
|
|
26
|
-
'todo': 1,
|
|
27
|
-
'in_progress': 2,
|
|
28
|
-
'waiting_review': 3,
|
|
29
|
-
'blocked': 4,
|
|
30
|
-
'done': 5,
|
|
31
|
-
'archived': 6
|
|
32
|
-
};
|
|
33
|
-
const statusId = statusIdMap[status];
|
|
34
|
-
const knex = db.getKnex();
|
|
35
|
-
const now = Math.floor(Date.now() / 1000);
|
|
36
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
37
|
-
title,
|
|
38
|
-
status_id: statusId,
|
|
39
|
-
priority: 2,
|
|
40
|
-
project_id: projectId,
|
|
41
|
-
created_ts: now,
|
|
42
|
-
updated_ts: now
|
|
43
|
-
});
|
|
44
|
-
return taskId;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Inline implementation of addDependency for testing (avoiding module dependency)
|
|
48
|
-
*/
|
|
49
|
-
async function addDependencyTest(db, params) {
|
|
50
|
-
if (!params.depends_on_task_id) {
|
|
51
|
-
throw new Error('Parameter "depends_on_task_id" is required');
|
|
52
|
-
}
|
|
53
|
-
if (!params.task_id) {
|
|
54
|
-
throw new Error('Parameter "task_id" is required');
|
|
55
|
-
}
|
|
56
|
-
const knex = db.getKnex();
|
|
57
|
-
return await knex.transaction(async (trx) => {
|
|
58
|
-
const TASK_STATUS_ARCHIVED = 6;
|
|
59
|
-
// Validation 1: No self-dependencies
|
|
60
|
-
if (params.depends_on_task_id === params.task_id) {
|
|
61
|
-
throw new Error('Self-dependency not allowed');
|
|
62
|
-
}
|
|
63
|
-
// Validation 2: Both tasks must exist and check if archived
|
|
64
|
-
const dependsOnTask = await trx('v4_tasks')
|
|
65
|
-
.where({ id: params.depends_on_task_id })
|
|
66
|
-
.select('id', 'status_id')
|
|
67
|
-
.first();
|
|
68
|
-
const task = await trx('v4_tasks')
|
|
69
|
-
.where({ id: params.task_id })
|
|
70
|
-
.select('id', 'status_id')
|
|
71
|
-
.first();
|
|
72
|
-
if (!dependsOnTask) {
|
|
73
|
-
throw new Error(`Task #${params.depends_on_task_id} not found`);
|
|
74
|
-
}
|
|
75
|
-
if (!task) {
|
|
76
|
-
throw new Error(`Task #${params.task_id} not found`);
|
|
77
|
-
}
|
|
78
|
-
// Validation 3: Neither task is archived
|
|
79
|
-
if (dependsOnTask.status_id === TASK_STATUS_ARCHIVED) {
|
|
80
|
-
throw new Error(`Cannot add dependency: Task #${params.depends_on_task_id} is archived`);
|
|
81
|
-
}
|
|
82
|
-
if (task.status_id === TASK_STATUS_ARCHIVED) {
|
|
83
|
-
throw new Error(`Cannot add dependency: Task #${params.task_id} is archived`);
|
|
84
|
-
}
|
|
85
|
-
// Validation 4: No direct circular (reverse relationship)
|
|
86
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
87
|
-
const reverseExists = await trx('v4_task_dependencies')
|
|
88
|
-
.where({
|
|
89
|
-
project_id: projectId,
|
|
90
|
-
blocker_task_id: params.task_id,
|
|
91
|
-
blocked_task_id: params.depends_on_task_id
|
|
92
|
-
})
|
|
93
|
-
.first();
|
|
94
|
-
if (reverseExists) {
|
|
95
|
-
throw new Error(`Circular dependency detected: Task #${params.task_id} already depends on Task #${params.depends_on_task_id}`);
|
|
96
|
-
}
|
|
97
|
-
// Validation 5: No transitive circular (check if adding this would create a cycle)
|
|
98
|
-
const cycleCheck = await trx.raw(`
|
|
99
|
-
WITH RECURSIVE dependency_chain AS (
|
|
100
|
-
-- Start from the task that would have the dependency
|
|
101
|
-
SELECT blocked_task_id, 1 as depth
|
|
102
|
-
FROM v4_task_dependencies
|
|
103
|
-
WHERE blocker_task_id = ?
|
|
104
|
-
|
|
105
|
-
UNION ALL
|
|
106
|
-
|
|
107
|
-
-- Follow the chain of dependencies
|
|
108
|
-
SELECT d.blocked_task_id, dc.depth + 1
|
|
109
|
-
FROM v4_task_dependencies d
|
|
110
|
-
JOIN dependency_chain dc ON d.blocker_task_id = dc.blocked_task_id
|
|
111
|
-
WHERE dc.depth < 100
|
|
112
|
-
)
|
|
113
|
-
SELECT blocked_task_id FROM dependency_chain WHERE blocked_task_id = ?
|
|
114
|
-
`, [params.task_id, params.depends_on_task_id]);
|
|
115
|
-
const cycleResult = Array.isArray(cycleCheck) ? cycleCheck[0] : cycleCheck;
|
|
116
|
-
if (cycleResult && cycleResult.blocked_task_id) {
|
|
117
|
-
// Build cycle path for error message
|
|
118
|
-
const cyclePathResult = await trx.raw(`
|
|
119
|
-
WITH RECURSIVE dependency_chain AS (
|
|
120
|
-
SELECT blocked_task_id, 1 as depth,
|
|
121
|
-
CAST(blocked_task_id AS TEXT) as path
|
|
122
|
-
FROM v4_task_dependencies
|
|
123
|
-
WHERE blocker_task_id = ?
|
|
124
|
-
|
|
125
|
-
UNION ALL
|
|
126
|
-
|
|
127
|
-
SELECT d.blocked_task_id, dc.depth + 1,
|
|
128
|
-
dc.path || ' → ' || d.blocked_task_id
|
|
129
|
-
FROM v4_task_dependencies d
|
|
130
|
-
JOIN dependency_chain dc ON d.blocker_task_id = dc.blocked_task_id
|
|
131
|
-
WHERE dc.depth < 100
|
|
132
|
-
)
|
|
133
|
-
SELECT path FROM dependency_chain WHERE blocked_task_id = ? ORDER BY depth DESC LIMIT 1
|
|
134
|
-
`, [params.task_id, params.depends_on_task_id]);
|
|
135
|
-
const pathResult = Array.isArray(cyclePathResult) ? cyclePathResult[0] : cyclePathResult;
|
|
136
|
-
const cyclePath = pathResult?.path || `#${params.task_id} → ... → #${params.depends_on_task_id}`;
|
|
137
|
-
throw new Error(`Circular dependency detected: Task #${params.depends_on_task_id} → #${cyclePath} → #${params.depends_on_task_id}`);
|
|
138
|
-
}
|
|
139
|
-
// All validations passed - insert dependency
|
|
140
|
-
const now = Math.floor(Date.now() / 1000);
|
|
141
|
-
await trx('v4_task_dependencies').insert({
|
|
142
|
-
project_id: projectId,
|
|
143
|
-
blocker_task_id: params.depends_on_task_id,
|
|
144
|
-
blocked_task_id: params.task_id,
|
|
145
|
-
created_ts: now
|
|
146
|
-
});
|
|
147
|
-
return {
|
|
148
|
-
success: true,
|
|
149
|
-
message: `Dependency added: Task #${params.task_id} depends on Task #${params.depends_on_task_id}`
|
|
150
|
-
};
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Inline implementation of removeDependency for testing
|
|
155
|
-
*/
|
|
156
|
-
async function removeDependencyTest(db, params) {
|
|
157
|
-
if (!params.depends_on_task_id) {
|
|
158
|
-
throw new Error('Parameter "depends_on_task_id" is required');
|
|
159
|
-
}
|
|
160
|
-
if (!params.task_id) {
|
|
161
|
-
throw new Error('Parameter "task_id" is required');
|
|
162
|
-
}
|
|
163
|
-
const knex = db.getKnex();
|
|
164
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
165
|
-
await knex('v4_task_dependencies')
|
|
166
|
-
.where({
|
|
167
|
-
project_id: projectId,
|
|
168
|
-
blocker_task_id: params.depends_on_task_id,
|
|
169
|
-
blocked_task_id: params.task_id
|
|
170
|
-
})
|
|
171
|
-
.delete();
|
|
172
|
-
return {
|
|
173
|
-
success: true,
|
|
174
|
-
message: `Dependency removed: Task #${params.task_id} no longer depends on Task #${params.depends_on_task_id}`
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Inline implementation of getDependencies for testing
|
|
179
|
-
*/
|
|
180
|
-
async function getDependenciesTest(db, params) {
|
|
181
|
-
if (!params.task_id) {
|
|
182
|
-
throw new Error('Parameter "task_id" is required');
|
|
183
|
-
}
|
|
184
|
-
const includeDetails = params.include_details || false;
|
|
185
|
-
const knex = db.getKnex();
|
|
186
|
-
// Check if task exists
|
|
187
|
-
const taskExists = await knex('v4_tasks')
|
|
188
|
-
.where({ id: params.task_id })
|
|
189
|
-
.select('id')
|
|
190
|
-
.first();
|
|
191
|
-
if (!taskExists) {
|
|
192
|
-
throw new Error(`Task with id ${params.task_id} not found`);
|
|
193
|
-
}
|
|
194
|
-
// Build query based on include_details flag
|
|
195
|
-
// Note: Agent tracking removed in v4.0
|
|
196
|
-
let selectFields;
|
|
197
|
-
if (includeDetails) {
|
|
198
|
-
selectFields = [
|
|
199
|
-
't.id',
|
|
200
|
-
't.title',
|
|
201
|
-
's.name as status',
|
|
202
|
-
't.priority',
|
|
203
|
-
't.created_ts',
|
|
204
|
-
't.updated_ts',
|
|
205
|
-
'td.description'
|
|
206
|
-
];
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
selectFields = [
|
|
210
|
-
't.id',
|
|
211
|
-
't.title',
|
|
212
|
-
's.name as status',
|
|
213
|
-
't.priority'
|
|
214
|
-
];
|
|
215
|
-
}
|
|
216
|
-
// Get blockers (tasks that this task depends on)
|
|
217
|
-
let blockersQuery = knex('v4_tasks as t')
|
|
218
|
-
.join('v4_task_dependencies as d', 't.id', 'd.blocker_task_id')
|
|
219
|
-
.leftJoin('v4_task_statuses as s', 't.status_id', 's.id')
|
|
220
|
-
.where('d.blocked_task_id', params.task_id)
|
|
221
|
-
.select(selectFields);
|
|
222
|
-
if (includeDetails) {
|
|
223
|
-
blockersQuery = blockersQuery.leftJoin('v4_task_details as td', 't.id', 'td.task_id');
|
|
224
|
-
}
|
|
225
|
-
const blockers = await blockersQuery;
|
|
226
|
-
// Get blocking (tasks that depend on this task)
|
|
227
|
-
let blockingQuery = knex('v4_tasks as t')
|
|
228
|
-
.join('v4_task_dependencies as d', 't.id', 'd.blocked_task_id')
|
|
229
|
-
.leftJoin('v4_task_statuses as s', 't.status_id', 's.id')
|
|
230
|
-
.where('d.blocker_task_id', params.task_id)
|
|
231
|
-
.select(selectFields);
|
|
232
|
-
if (includeDetails) {
|
|
233
|
-
blockingQuery = blockingQuery.leftJoin('v4_task_details as td', 't.id', 'td.task_id');
|
|
234
|
-
}
|
|
235
|
-
const blocking = await blockingQuery;
|
|
236
|
-
return {
|
|
237
|
-
task_id: params.task_id,
|
|
238
|
-
blockers,
|
|
239
|
-
blocking
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Setup before each test
|
|
244
|
-
*/
|
|
245
|
-
beforeEach(async () => {
|
|
246
|
-
// Create temp directory for test files and database
|
|
247
|
-
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sqlew-test-'));
|
|
248
|
-
tempDbPath = path.join(tempDir, 'test.db');
|
|
249
|
-
// Initialize database with Knex adapter
|
|
250
|
-
testDb = await initializeDatabase({
|
|
251
|
-
databaseType: 'sqlite',
|
|
252
|
-
connection: {
|
|
253
|
-
filename: tempDbPath,
|
|
254
|
-
},
|
|
255
|
-
});
|
|
256
|
-
// Initialize project context (required after v3.7.0)
|
|
257
|
-
const knex = testDb.getKnex();
|
|
258
|
-
const projectContext = ProjectContext.getInstance();
|
|
259
|
-
await projectContext.ensureProject(knex, 'test-task-dependencies', 'config', {
|
|
260
|
-
projectRootPath: process.cwd()
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
afterEach(async () => {
|
|
264
|
-
await closeDatabase();
|
|
265
|
-
// Reset ProjectContext singleton for test isolation
|
|
266
|
-
ProjectContext.reset();
|
|
267
|
-
// Cleanup temp directory
|
|
268
|
-
if (fs.existsSync(tempDir)) {
|
|
269
|
-
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
// ============================================================================
|
|
273
|
-
// Task #66: Unit Tests for add_dependency Validation
|
|
274
|
-
// ============================================================================
|
|
275
|
-
describe('add_dependency - Success Cases', () => {
|
|
276
|
-
it('should add valid dependency', async () => {
|
|
277
|
-
// Arrange
|
|
278
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
279
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
280
|
-
// Act
|
|
281
|
-
const result = await addDependencyTest(testDb, {
|
|
282
|
-
depends_on_task_id: task1,
|
|
283
|
-
task_id: task2
|
|
284
|
-
});
|
|
285
|
-
// Assert
|
|
286
|
-
assert.strictEqual(result.success, true);
|
|
287
|
-
assert.match(result.message, /Dependency added/);
|
|
288
|
-
// Verify in database
|
|
289
|
-
const knex = testDb.getKnex();
|
|
290
|
-
const deps = await knex('v4_task_dependencies')
|
|
291
|
-
.where({
|
|
292
|
-
blocker_task_id: task1,
|
|
293
|
-
blocked_task_id: task2
|
|
294
|
-
})
|
|
295
|
-
.first();
|
|
296
|
-
assert.ok(deps);
|
|
297
|
-
});
|
|
298
|
-
it('should add valid dependency and verify via get_dependencies', async () => {
|
|
299
|
-
// Arrange
|
|
300
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
301
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
302
|
-
// Act
|
|
303
|
-
await addDependencyTest(testDb, {
|
|
304
|
-
depends_on_task_id: task1,
|
|
305
|
-
task_id: task2
|
|
306
|
-
});
|
|
307
|
-
const result = await getDependenciesTest(testDb, { task_id: task2 });
|
|
308
|
-
// Assert
|
|
309
|
-
assert.strictEqual(result.task_id, task2);
|
|
310
|
-
assert.strictEqual(result.blockers.length, 1);
|
|
311
|
-
assert.strictEqual(result.blockers[0].id, task1);
|
|
312
|
-
assert.strictEqual(result.blocking.length, 0);
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
describe('add_dependency - Validation: Self-Dependency', () => {
|
|
316
|
-
it('should reject self-dependency', async () => {
|
|
317
|
-
// Arrange
|
|
318
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
319
|
-
// Act & Assert
|
|
320
|
-
await assert.rejects(async () => {
|
|
321
|
-
await addDependencyTest(testDb, {
|
|
322
|
-
depends_on_task_id: task1,
|
|
323
|
-
task_id: task1
|
|
324
|
-
});
|
|
325
|
-
}, {
|
|
326
|
-
message: /Self-dependency not allowed/
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
describe('add_dependency - Validation: Direct Circular', () => {
|
|
331
|
-
it('should reject direct circular dependency', async () => {
|
|
332
|
-
// Arrange
|
|
333
|
-
const taskA = await createTestTask(testDb, 'Task A');
|
|
334
|
-
const taskB = await createTestTask(testDb, 'Task B');
|
|
335
|
-
// Add A blocks B (B depends on A)
|
|
336
|
-
await addDependencyTest(testDb, {
|
|
337
|
-
depends_on_task_id: taskA,
|
|
338
|
-
task_id: taskB
|
|
339
|
-
});
|
|
340
|
-
// Act & Assert - Try to add B blocks A (A depends on B)
|
|
341
|
-
await assert.rejects(async () => {
|
|
342
|
-
await addDependencyTest(testDb, {
|
|
343
|
-
depends_on_task_id: taskB,
|
|
344
|
-
task_id: taskA
|
|
345
|
-
});
|
|
346
|
-
}, {
|
|
347
|
-
message: /Circular dependency detected/
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
describe('add_dependency - Validation: Transitive Circular', () => {
|
|
352
|
-
it('should reject transitive circular dependency (A→B→C→A)', async () => {
|
|
353
|
-
// Arrange
|
|
354
|
-
const taskA = await createTestTask(testDb, 'Task A');
|
|
355
|
-
const taskB = await createTestTask(testDb, 'Task B');
|
|
356
|
-
const taskC = await createTestTask(testDb, 'Task C');
|
|
357
|
-
// Add A blocks B (B depends on A)
|
|
358
|
-
await addDependencyTest(testDb, {
|
|
359
|
-
depends_on_task_id: taskA,
|
|
360
|
-
task_id: taskB
|
|
361
|
-
});
|
|
362
|
-
// Add B blocks C (C depends on B)
|
|
363
|
-
await addDependencyTest(testDb, {
|
|
364
|
-
depends_on_task_id: taskB,
|
|
365
|
-
task_id: taskC
|
|
366
|
-
});
|
|
367
|
-
// Act & Assert - Try to add C blocks A (A depends on C, would create cycle)
|
|
368
|
-
await assert.rejects(async () => {
|
|
369
|
-
await addDependencyTest(testDb, {
|
|
370
|
-
depends_on_task_id: taskC,
|
|
371
|
-
task_id: taskA
|
|
372
|
-
});
|
|
373
|
-
}, {
|
|
374
|
-
message: /Circular dependency detected/
|
|
375
|
-
});
|
|
376
|
-
});
|
|
377
|
-
it('should reject transitive circular with cycle path in error message', async () => {
|
|
378
|
-
// Arrange
|
|
379
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
380
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
381
|
-
const task3 = await createTestTask(testDb, 'Task 3');
|
|
382
|
-
// Create chain: 1 → 2 → 3 (2 depends on 1, 3 depends on 2)
|
|
383
|
-
await addDependencyTest(testDb, {
|
|
384
|
-
depends_on_task_id: task1,
|
|
385
|
-
task_id: task2
|
|
386
|
-
});
|
|
387
|
-
await addDependencyTest(testDb, {
|
|
388
|
-
depends_on_task_id: task2,
|
|
389
|
-
task_id: task3
|
|
390
|
-
});
|
|
391
|
-
// Act & Assert - Try to add 3 → 1 (1 depends on 3)
|
|
392
|
-
let errorMessage = '';
|
|
393
|
-
try {
|
|
394
|
-
await addDependencyTest(testDb, {
|
|
395
|
-
depends_on_task_id: task3,
|
|
396
|
-
task_id: task1
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
|
-
catch (error) {
|
|
400
|
-
errorMessage = error instanceof Error ? error.message : '';
|
|
401
|
-
}
|
|
402
|
-
// Verify error message contains cycle path
|
|
403
|
-
assert.match(errorMessage, /Circular dependency detected/);
|
|
404
|
-
// The error message should contain task IDs (may have # prefix or not depending on path formatting)
|
|
405
|
-
assert.match(errorMessage, new RegExp(`${task3}`));
|
|
406
|
-
assert.match(errorMessage, new RegExp(`${task2}`));
|
|
407
|
-
assert.match(errorMessage, new RegExp(`Task #${task3}`)); // Verify the main task ID has # prefix
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
describe('add_dependency - Validation: Non-Existent Tasks', () => {
|
|
411
|
-
it('should reject dependency with non-existent blocker', async () => {
|
|
412
|
-
// Arrange
|
|
413
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
414
|
-
// Act & Assert
|
|
415
|
-
await assert.rejects(async () => {
|
|
416
|
-
await addDependencyTest(testDb, {
|
|
417
|
-
depends_on_task_id: 999,
|
|
418
|
-
task_id: task1
|
|
419
|
-
});
|
|
420
|
-
}, {
|
|
421
|
-
message: /Task #999 not found/
|
|
422
|
-
});
|
|
423
|
-
});
|
|
424
|
-
it('should reject dependency with non-existent blocked', async () => {
|
|
425
|
-
// Arrange
|
|
426
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
427
|
-
// Act & Assert
|
|
428
|
-
await assert.rejects(async () => {
|
|
429
|
-
await addDependencyTest(testDb, {
|
|
430
|
-
depends_on_task_id: task1,
|
|
431
|
-
task_id: 999
|
|
432
|
-
});
|
|
433
|
-
}, {
|
|
434
|
-
message: /Task #999 not found/
|
|
435
|
-
});
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
describe('add_dependency - Validation: Archived Tasks', () => {
|
|
439
|
-
it('should reject dependency with archived blocker', async () => {
|
|
440
|
-
// Arrange
|
|
441
|
-
const task1 = await createTestTask(testDb, 'Task 1', 'archived');
|
|
442
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
443
|
-
// Act & Assert
|
|
444
|
-
await assert.rejects(async () => {
|
|
445
|
-
await addDependencyTest(testDb, {
|
|
446
|
-
depends_on_task_id: task1,
|
|
447
|
-
task_id: task2
|
|
448
|
-
});
|
|
449
|
-
}, {
|
|
450
|
-
message: /Cannot add dependency: Task #\d+ is archived/
|
|
451
|
-
});
|
|
452
|
-
});
|
|
453
|
-
it('should reject dependency with archived blocked', async () => {
|
|
454
|
-
// Arrange
|
|
455
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
456
|
-
const task2 = await createTestTask(testDb, 'Task 2', 'archived');
|
|
457
|
-
// Act & Assert
|
|
458
|
-
await assert.rejects(async () => {
|
|
459
|
-
await addDependencyTest(testDb, {
|
|
460
|
-
depends_on_task_id: task1,
|
|
461
|
-
task_id: task2
|
|
462
|
-
});
|
|
463
|
-
}, {
|
|
464
|
-
message: /Cannot add dependency: Task #\d+ is archived/
|
|
465
|
-
});
|
|
466
|
-
});
|
|
467
|
-
});
|
|
468
|
-
// ============================================================================
|
|
469
|
-
// Task #67: Unit Tests for remove_dependency and get_dependencies
|
|
470
|
-
// ============================================================================
|
|
471
|
-
describe('remove_dependency', () => {
|
|
472
|
-
it('should remove existing dependency', async () => {
|
|
473
|
-
// Arrange
|
|
474
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
475
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
476
|
-
await addDependencyTest(testDb, {
|
|
477
|
-
depends_on_task_id: task1,
|
|
478
|
-
task_id: task2
|
|
479
|
-
});
|
|
480
|
-
// Verify it exists
|
|
481
|
-
const beforeDeps = await getDependenciesTest(testDb, { task_id: task2 });
|
|
482
|
-
assert.strictEqual(beforeDeps.blockers.length, 1);
|
|
483
|
-
// Act
|
|
484
|
-
const result = await removeDependencyTest(testDb, {
|
|
485
|
-
depends_on_task_id: task1,
|
|
486
|
-
task_id: task2
|
|
487
|
-
});
|
|
488
|
-
// Assert
|
|
489
|
-
assert.strictEqual(result.success, true);
|
|
490
|
-
assert.match(result.message, /Dependency removed/);
|
|
491
|
-
// Verify it no longer exists
|
|
492
|
-
const afterDeps = await getDependenciesTest(testDb, { task_id: task2 });
|
|
493
|
-
assert.strictEqual(afterDeps.blockers.length, 0);
|
|
494
|
-
});
|
|
495
|
-
it('should succeed silently when removing non-existent dependency (idempotent)', async () => {
|
|
496
|
-
// Arrange
|
|
497
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
498
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
499
|
-
// Act - Remove dependency that doesn't exist
|
|
500
|
-
const result = await removeDependencyTest(testDb, {
|
|
501
|
-
depends_on_task_id: task1,
|
|
502
|
-
task_id: task2
|
|
503
|
-
});
|
|
504
|
-
// Assert
|
|
505
|
-
assert.strictEqual(result.success, true);
|
|
506
|
-
assert.match(result.message, /Dependency removed/);
|
|
507
|
-
});
|
|
508
|
-
});
|
|
509
|
-
describe('get_dependencies - Metadata Only', () => {
|
|
510
|
-
it('should return blockers and blocking (metadata-only)', async () => {
|
|
511
|
-
// Arrange
|
|
512
|
-
const taskA = await createTestTask(testDb, 'Task A');
|
|
513
|
-
const taskB = await createTestTask(testDb, 'Task B');
|
|
514
|
-
const taskC = await createTestTask(testDb, 'Task C');
|
|
515
|
-
// A blocks B, B blocks C (B depends on A, C depends on B)
|
|
516
|
-
await addDependencyTest(testDb, {
|
|
517
|
-
depends_on_task_id: taskA,
|
|
518
|
-
task_id: taskB
|
|
519
|
-
});
|
|
520
|
-
await addDependencyTest(testDb, {
|
|
521
|
-
depends_on_task_id: taskB,
|
|
522
|
-
task_id: taskC
|
|
523
|
-
});
|
|
524
|
-
// Act - Get dependencies for B
|
|
525
|
-
const result = await getDependenciesTest(testDb, { task_id: taskB });
|
|
526
|
-
// Assert
|
|
527
|
-
assert.strictEqual(result.task_id, taskB);
|
|
528
|
-
// B is blocked by A
|
|
529
|
-
assert.strictEqual(result.blockers.length, 1);
|
|
530
|
-
assert.strictEqual(result.blockers[0].id, taskA);
|
|
531
|
-
assert.strictEqual(result.blockers[0].title, 'Task A');
|
|
532
|
-
// B blocks C
|
|
533
|
-
assert.strictEqual(result.blocking.length, 1);
|
|
534
|
-
assert.strictEqual(result.blocking[0].id, taskC);
|
|
535
|
-
assert.strictEqual(result.blocking[0].title, 'Task C');
|
|
536
|
-
// Verify metadata-only (no description field)
|
|
537
|
-
assert.strictEqual(result.blockers[0].description, undefined);
|
|
538
|
-
assert.strictEqual(result.blocking[0].description, undefined);
|
|
539
|
-
});
|
|
540
|
-
it('should return empty arrays for task with no dependencies', async () => {
|
|
541
|
-
// Arrange
|
|
542
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
543
|
-
// Act
|
|
544
|
-
const result = await getDependenciesTest(testDb, { task_id: task1 });
|
|
545
|
-
// Assert
|
|
546
|
-
assert.strictEqual(result.task_id, task1);
|
|
547
|
-
assert.strictEqual(result.blockers.length, 0);
|
|
548
|
-
assert.strictEqual(result.blocking.length, 0);
|
|
549
|
-
});
|
|
550
|
-
});
|
|
551
|
-
describe('get_dependencies - With Details', () => {
|
|
552
|
-
it('should return full details when include_details=true', async () => {
|
|
553
|
-
// Arrange
|
|
554
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
555
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
556
|
-
// Add description to task1
|
|
557
|
-
const knex = testDb.getKnex();
|
|
558
|
-
await knex('v4_task_details').insert({
|
|
559
|
-
task_id: task1,
|
|
560
|
-
description: 'This is task 1 description'
|
|
561
|
-
});
|
|
562
|
-
// Add dependency (task2 depends on task1)
|
|
563
|
-
await addDependencyTest(testDb, {
|
|
564
|
-
depends_on_task_id: task1,
|
|
565
|
-
task_id: task2
|
|
566
|
-
});
|
|
567
|
-
// Act
|
|
568
|
-
const result = await getDependenciesTest(testDb, {
|
|
569
|
-
task_id: task2,
|
|
570
|
-
include_details: true
|
|
571
|
-
});
|
|
572
|
-
// Assert
|
|
573
|
-
assert.strictEqual(result.blockers.length, 1);
|
|
574
|
-
assert.strictEqual(result.blockers[0].id, task1);
|
|
575
|
-
assert.strictEqual(result.blockers[0].description, 'This is task 1 description');
|
|
576
|
-
});
|
|
577
|
-
it('should not include description by default', async () => {
|
|
578
|
-
// Arrange
|
|
579
|
-
const task1 = await createTestTask(testDb, 'Task 1');
|
|
580
|
-
const task2 = await createTestTask(testDb, 'Task 2');
|
|
581
|
-
// Add description
|
|
582
|
-
const knex = testDb.getKnex();
|
|
583
|
-
await knex('v4_task_details').insert({
|
|
584
|
-
task_id: task1,
|
|
585
|
-
description: 'This is task 1 description'
|
|
586
|
-
});
|
|
587
|
-
await addDependencyTest(testDb, {
|
|
588
|
-
depends_on_task_id: task1,
|
|
589
|
-
task_id: task2
|
|
590
|
-
});
|
|
591
|
-
// Act
|
|
592
|
-
const result = await getDependenciesTest(testDb, { task_id: task2 });
|
|
593
|
-
// Assert
|
|
594
|
-
assert.strictEqual(result.blockers[0].description, undefined);
|
|
595
|
-
});
|
|
596
|
-
});
|
|
597
|
-
describe('get_dependencies - Error Handling', () => {
|
|
598
|
-
it('should throw error for non-existent task', async () => {
|
|
599
|
-
// Act & Assert
|
|
600
|
-
await assert.rejects(async () => {
|
|
601
|
-
await getDependenciesTest(testDb, { task_id: 999 });
|
|
602
|
-
}, {
|
|
603
|
-
message: /Task with id 999 not found/
|
|
604
|
-
});
|
|
605
|
-
});
|
|
606
|
-
});
|
|
607
|
-
describe('CASCADE Deletion', () => {
|
|
608
|
-
it('should cascade delete dependencies when task deleted', async () => {
|
|
609
|
-
// Arrange
|
|
610
|
-
const taskA = await createTestTask(testDb, 'Task A');
|
|
611
|
-
const taskB = await createTestTask(testDb, 'Task B');
|
|
612
|
-
// Add A blocks B (B depends on A)
|
|
613
|
-
await addDependencyTest(testDb, {
|
|
614
|
-
depends_on_task_id: taskA,
|
|
615
|
-
task_id: taskB
|
|
616
|
-
});
|
|
617
|
-
// Verify dependency exists
|
|
618
|
-
const beforeDeps = await getDependenciesTest(testDb, { task_id: taskB });
|
|
619
|
-
assert.strictEqual(beforeDeps.blockers.length, 1);
|
|
620
|
-
// Act - Delete task A
|
|
621
|
-
const knex = testDb.getKnex();
|
|
622
|
-
await knex('v4_tasks').where({ id: taskA }).delete();
|
|
623
|
-
// Assert - Dependency should be deleted
|
|
624
|
-
const depsInDb = await knex('v4_task_dependencies')
|
|
625
|
-
.where('blocker_task_id', taskA)
|
|
626
|
-
.orWhere('blocked_task_id', taskA);
|
|
627
|
-
assert.strictEqual(depsInDb.length, 0);
|
|
628
|
-
// Verify B still exists
|
|
629
|
-
const taskBExists = await knex('v4_tasks').where({ id: taskB }).first();
|
|
630
|
-
assert.ok(taskBExists);
|
|
631
|
-
// Verify B has no dependencies anymore
|
|
632
|
-
const afterDeps = await getDependenciesTest(testDb, { task_id: taskB });
|
|
633
|
-
assert.strictEqual(afterDeps.blockers.length, 0);
|
|
634
|
-
});
|
|
635
|
-
it('should cascade delete when blocked task is deleted', async () => {
|
|
636
|
-
// Arrange
|
|
637
|
-
const taskA = await createTestTask(testDb, 'Task A');
|
|
638
|
-
const taskB = await createTestTask(testDb, 'Task B');
|
|
639
|
-
await addDependencyTest(testDb, {
|
|
640
|
-
depends_on_task_id: taskA,
|
|
641
|
-
task_id: taskB
|
|
642
|
-
});
|
|
643
|
-
// Act - Delete task B
|
|
644
|
-
const knex = testDb.getKnex();
|
|
645
|
-
await knex('v4_tasks').where({ id: taskB }).delete();
|
|
646
|
-
// Assert - Dependency should be deleted
|
|
647
|
-
const depsInDb = await knex('v4_task_dependencies')
|
|
648
|
-
.where('blocked_task_id', taskB);
|
|
649
|
-
assert.strictEqual(depsInDb.length, 0);
|
|
650
|
-
// Verify A still exists with no dependencies
|
|
651
|
-
const afterDeps = await getDependenciesTest(testDb, { task_id: taskA });
|
|
652
|
-
assert.strictEqual(afterDeps.blocking.length, 0);
|
|
653
|
-
});
|
|
654
|
-
});
|
|
655
|
-
console.log('✓ All task dependency tests defined');
|
|
656
|
-
//# sourceMappingURL=dependencies.test.js.map
|