task-o-matic-core 0.1.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/README.md +646 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/lib/ai-service/ai-operations.d.ts +45 -0
- package/dist/lib/ai-service/ai-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/ai-operations.js +60 -0
- package/dist/lib/ai-service/base-operations.d.ts +43 -0
- package/dist/lib/ai-service/base-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/base-operations.js +119 -0
- package/dist/lib/ai-service/documentation-operations.d.ts +18 -0
- package/dist/lib/ai-service/documentation-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/documentation-operations.js +308 -0
- package/dist/lib/ai-service/filesystem-tools.d.ts +69 -0
- package/dist/lib/ai-service/filesystem-tools.d.ts.map +1 -0
- package/dist/lib/ai-service/filesystem-tools.js +70 -0
- package/dist/lib/ai-service/json-parser.d.ts +34 -0
- package/dist/lib/ai-service/json-parser.d.ts.map +1 -0
- package/dist/lib/ai-service/json-parser.js +177 -0
- package/dist/lib/ai-service/mcp-client.d.ts +9 -0
- package/dist/lib/ai-service/mcp-client.d.ts.map +1 -0
- package/dist/lib/ai-service/mcp-client.js +48 -0
- package/dist/lib/ai-service/model-provider.d.ts +12 -0
- package/dist/lib/ai-service/model-provider.d.ts.map +1 -0
- package/dist/lib/ai-service/model-provider.js +146 -0
- package/dist/lib/ai-service/prd-operations.d.ts +25 -0
- package/dist/lib/ai-service/prd-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/prd-operations.js +592 -0
- package/dist/lib/ai-service/research-tools.d.ts +4 -0
- package/dist/lib/ai-service/research-tools.d.ts.map +1 -0
- package/dist/lib/ai-service/research-tools.js +8 -0
- package/dist/lib/ai-service/retry-handler.d.ts +8 -0
- package/dist/lib/ai-service/retry-handler.d.ts.map +1 -0
- package/dist/lib/ai-service/retry-handler.js +63 -0
- package/dist/lib/ai-service/task-operations.d.ts +13 -0
- package/dist/lib/ai-service/task-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/task-operations.js +220 -0
- package/dist/lib/benchmark/registry.d.ts +11 -0
- package/dist/lib/benchmark/registry.d.ts.map +1 -0
- package/dist/lib/benchmark/registry.js +212 -0
- package/dist/lib/benchmark/runner.d.ts +6 -0
- package/dist/lib/benchmark/runner.d.ts.map +1 -0
- package/dist/lib/benchmark/runner.js +150 -0
- package/dist/lib/benchmark/storage.d.ts +13 -0
- package/dist/lib/benchmark/storage.d.ts.map +1 -0
- package/dist/lib/benchmark/storage.js +100 -0
- package/dist/lib/benchmark/types.d.ts +104 -0
- package/dist/lib/benchmark/types.d.ts.map +1 -0
- package/dist/lib/benchmark/types.js +2 -0
- package/dist/lib/better-t-stack-cli.d.ts +50 -0
- package/dist/lib/better-t-stack-cli.d.ts.map +1 -0
- package/dist/lib/better-t-stack-cli.js +428 -0
- package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
- package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap/cli-bootstrap.js +322 -0
- package/dist/lib/bootstrap/index.d.ts +3 -0
- package/dist/lib/bootstrap/index.d.ts.map +1 -0
- package/dist/lib/bootstrap/index.js +18 -0
- package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
- package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap/medusa-bootstrap.js +215 -0
- package/dist/lib/config-validation.d.ts +215 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +254 -0
- package/dist/lib/config.d.ts +55 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +351 -0
- package/dist/lib/context-builder.d.ts +66 -0
- package/dist/lib/context-builder.d.ts.map +1 -0
- package/dist/lib/context-builder.js +322 -0
- package/dist/lib/executors/claude-code-executor.d.ts +9 -0
- package/dist/lib/executors/claude-code-executor.d.ts.map +1 -0
- package/dist/lib/executors/claude-code-executor.js +69 -0
- package/dist/lib/executors/codex-executor.d.ts +9 -0
- package/dist/lib/executors/codex-executor.d.ts.map +1 -0
- package/dist/lib/executors/codex-executor.js +73 -0
- package/dist/lib/executors/executor-factory.d.ts +5 -0
- package/dist/lib/executors/executor-factory.d.ts.map +1 -0
- package/dist/lib/executors/executor-factory.js +27 -0
- package/dist/lib/executors/gemini-executor.d.ts +9 -0
- package/dist/lib/executors/gemini-executor.d.ts.map +1 -0
- package/dist/lib/executors/gemini-executor.js +67 -0
- package/dist/lib/executors/kilo-executor.d.ts +9 -0
- package/dist/lib/executors/kilo-executor.d.ts.map +1 -0
- package/dist/lib/executors/kilo-executor.js +69 -0
- package/dist/lib/executors/opencode-executor.d.ts +9 -0
- package/dist/lib/executors/opencode-executor.d.ts.map +1 -0
- package/dist/lib/executors/opencode-executor.js +67 -0
- package/dist/lib/git-utils.d.ts +88 -0
- package/dist/lib/git-utils.d.ts.map +1 -0
- package/dist/lib/git-utils.js +242 -0
- package/dist/lib/hooks.d.ts +73 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +62 -0
- package/dist/lib/index.d.ts +100 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +143 -0
- package/dist/lib/logger.d.ts +20 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +32 -0
- package/dist/lib/notifications.d.ts +7 -0
- package/dist/lib/notifications.d.ts.map +1 -0
- package/dist/lib/notifications.js +81 -0
- package/dist/lib/prompt-builder.d.ts +70 -0
- package/dist/lib/prompt-builder.d.ts.map +1 -0
- package/dist/lib/prompt-builder.js +344 -0
- package/dist/lib/prompt-registry.d.ts +22 -0
- package/dist/lib/prompt-registry.d.ts.map +1 -0
- package/dist/lib/prompt-registry.js +409 -0
- package/dist/lib/provider-defaults.json +32 -0
- package/dist/lib/storage/file-system.d.ts +57 -0
- package/dist/lib/storage/file-system.d.ts.map +1 -0
- package/dist/lib/storage/file-system.js +638 -0
- package/dist/lib/storage/storage-callbacks.d.ts +17 -0
- package/dist/lib/storage/storage-callbacks.d.ts.map +1 -0
- package/dist/lib/storage/storage-callbacks.js +94 -0
- package/dist/lib/storage/types.d.ts +43 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +2 -0
- package/dist/lib/task-execution-core.d.ts +7 -0
- package/dist/lib/task-execution-core.d.ts.map +1 -0
- package/dist/lib/task-execution-core.js +381 -0
- package/dist/lib/task-execution.d.ts +7 -0
- package/dist/lib/task-execution.d.ts.map +1 -0
- package/dist/lib/task-execution.js +40 -0
- package/dist/lib/task-loop-execution.d.ts +7 -0
- package/dist/lib/task-loop-execution.d.ts.map +1 -0
- package/dist/lib/task-loop-execution.js +156 -0
- package/dist/lib/task-planning.d.ts +29 -0
- package/dist/lib/task-planning.d.ts.map +1 -0
- package/dist/lib/task-planning.js +103 -0
- package/dist/lib/task-review.d.ts +27 -0
- package/dist/lib/task-review.d.ts.map +1 -0
- package/dist/lib/task-review.js +103 -0
- package/dist/lib/validation.d.ts +26 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +98 -0
- package/dist/prompts/documentation-detection.d.ts +2 -0
- package/dist/prompts/documentation-detection.d.ts.map +1 -0
- package/dist/prompts/documentation-detection.js +24 -0
- package/dist/prompts/documentation-recap.d.ts +3 -0
- package/dist/prompts/documentation-recap.d.ts.map +1 -0
- package/dist/prompts/documentation-recap.js +13 -0
- package/dist/prompts/index.d.ts +15 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +30 -0
- package/dist/prompts/prd-combination.d.ts +2 -0
- package/dist/prompts/prd-combination.d.ts.map +1 -0
- package/dist/prompts/prd-combination.js +35 -0
- package/dist/prompts/prd-generation.d.ts +2 -0
- package/dist/prompts/prd-generation.d.ts.map +1 -0
- package/dist/prompts/prd-generation.js +49 -0
- package/dist/prompts/prd-parsing.d.ts +3 -0
- package/dist/prompts/prd-parsing.d.ts.map +1 -0
- package/dist/prompts/prd-parsing.js +172 -0
- package/dist/prompts/prd-question-answer.d.ts +3 -0
- package/dist/prompts/prd-question-answer.d.ts.map +1 -0
- package/dist/prompts/prd-question-answer.js +27 -0
- package/dist/prompts/prd-question.d.ts +3 -0
- package/dist/prompts/prd-question.d.ts.map +1 -0
- package/dist/prompts/prd-question.js +40 -0
- package/dist/prompts/prd-rework.d.ts +3 -0
- package/dist/prompts/prd-rework.d.ts.map +1 -0
- package/dist/prompts/prd-rework.js +81 -0
- package/dist/prompts/prd-suggest-stack.d.ts +3 -0
- package/dist/prompts/prd-suggest-stack.d.ts.map +1 -0
- package/dist/prompts/prd-suggest-stack.js +99 -0
- package/dist/prompts/task-breakdown.d.ts +3 -0
- package/dist/prompts/task-breakdown.d.ts.map +1 -0
- package/dist/prompts/task-breakdown.js +151 -0
- package/dist/prompts/task-enhancement.d.ts +3 -0
- package/dist/prompts/task-enhancement.d.ts.map +1 -0
- package/dist/prompts/task-enhancement.js +140 -0
- package/dist/prompts/task-execution.d.ts +3 -0
- package/dist/prompts/task-execution.d.ts.map +1 -0
- package/dist/prompts/task-execution.js +24 -0
- package/dist/prompts/task-planning.d.ts +3 -0
- package/dist/prompts/task-planning.d.ts.map +1 -0
- package/dist/prompts/task-planning.js +66 -0
- package/dist/prompts/workflow-assistance.d.ts +32 -0
- package/dist/prompts/workflow-assistance.d.ts.map +1 -0
- package/dist/prompts/workflow-assistance.js +130 -0
- package/dist/prompts/workflow-prompts.d.ts +9 -0
- package/dist/prompts/workflow-prompts.d.ts.map +1 -0
- package/dist/prompts/workflow-prompts.js +93 -0
- package/dist/services/benchmark.d.ts +26 -0
- package/dist/services/benchmark.d.ts.map +1 -0
- package/dist/services/benchmark.js +343 -0
- package/dist/services/prd.d.ts +136 -0
- package/dist/services/prd.d.ts.map +1 -0
- package/dist/services/prd.js +550 -0
- package/dist/services/tasks.d.ts +388 -0
- package/dist/services/tasks.d.ts.map +1 -0
- package/dist/services/tasks.js +1150 -0
- package/dist/services/workflow-ai-assistant.d.ts +74 -0
- package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
- package/dist/services/workflow-ai-assistant.js +175 -0
- package/dist/services/workflow-benchmark.d.ts +34 -0
- package/dist/services/workflow-benchmark.d.ts.map +1 -0
- package/dist/services/workflow-benchmark.js +318 -0
- package/dist/services/workflow.d.ts +107 -0
- package/dist/services/workflow.d.ts.map +1 -0
- package/dist/services/workflow.js +580 -0
- package/dist/test/hooks.test.d.ts +2 -0
- package/dist/test/hooks.test.d.ts.map +1 -0
- package/dist/test/hooks.test.js +67 -0
- package/dist/test/integration/callbacks.test.d.ts +2 -0
- package/dist/test/integration/callbacks.test.d.ts.map +1 -0
- package/dist/test/integration/callbacks.test.js +64 -0
- package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
- package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
- package/dist/test/lib/ai-service/task-operations.test.js +362 -0
- package/dist/test/lib/config.test.d.ts +2 -0
- package/dist/test/lib/config.test.d.ts.map +1 -0
- package/dist/test/lib/config.test.js +128 -0
- package/dist/test/lib/git-utils.test.d.ts +2 -0
- package/dist/test/lib/git-utils.test.d.ts.map +1 -0
- package/dist/test/lib/git-utils.test.js +168 -0
- package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
- package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
- package/dist/test/mocks/mock-ai-operations.js +107 -0
- package/dist/test/mocks/mock-context-builder.d.ts +10 -0
- package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
- package/dist/test/mocks/mock-context-builder.js +81 -0
- package/dist/test/mocks/mock-model-provider.d.ts +7 -0
- package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
- package/dist/test/mocks/mock-model-provider.js +21 -0
- package/dist/test/mocks/mock-service-factory.d.ts +11 -0
- package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
- package/dist/test/mocks/mock-service-factory.js +61 -0
- package/dist/test/mocks/mock-storage.d.ts +50 -0
- package/dist/test/mocks/mock-storage.d.ts.map +1 -0
- package/dist/test/mocks/mock-storage.js +145 -0
- package/dist/test/model-parsing.test.d.ts +2 -0
- package/dist/test/model-parsing.test.d.ts.map +1 -0
- package/dist/test/model-parsing.test.js +73 -0
- package/dist/test/services/task-service.test.d.ts +2 -0
- package/dist/test/services/task-service.test.d.ts.map +1 -0
- package/dist/test/services/task-service.test.js +459 -0
- package/dist/test/storage.test.d.ts +2 -0
- package/dist/test/storage.test.d.ts.map +1 -0
- package/dist/test/storage.test.js +207 -0
- package/dist/test/task-loop-git.test.d.ts +2 -0
- package/dist/test/task-loop-git.test.d.ts.map +1 -0
- package/dist/test/task-loop-git.test.js +95 -0
- package/dist/test/test-mock-setup.d.ts +26 -0
- package/dist/test/test-mock-setup.d.ts.map +1 -0
- package/dist/test/test-mock-setup.js +41 -0
- package/dist/test/test-setup.d.ts +9 -0
- package/dist/test/test-setup.d.ts.map +1 -0
- package/dist/test/test-setup.js +44 -0
- package/dist/test/test-utils.d.ts +22 -0
- package/dist/test/test-utils.d.ts.map +1 -0
- package/dist/test/test-utils.js +37 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
- package/dist/test/utils/ai-operation-utility.test.js +290 -0
- package/dist/test/utils/error-handling.test.d.ts +2 -0
- package/dist/test/utils/error-handling.test.d.ts.map +1 -0
- package/dist/test/utils/error-handling.test.js +231 -0
- package/dist/test/utils/file-utils.test.d.ts +2 -0
- package/dist/test/utils/file-utils.test.d.ts.map +1 -0
- package/dist/test/utils/file-utils.test.js +76 -0
- package/dist/test/utils/id-generator.test.d.ts +2 -0
- package/dist/test/utils/id-generator.test.d.ts.map +1 -0
- package/dist/test/utils/id-generator.test.js +41 -0
- package/dist/test/utils/model-parser.test.d.ts +2 -0
- package/dist/test/utils/model-parser.test.d.ts.map +1 -0
- package/dist/test/utils/model-parser.test.js +65 -0
- package/dist/test/validation.test.d.ts +2 -0
- package/dist/test/validation.test.d.ts.map +1 -0
- package/dist/test/validation.test.js +22 -0
- package/dist/types/callbacks.d.ts +30 -0
- package/dist/types/callbacks.d.ts.map +1 -0
- package/dist/types/callbacks.js +2 -0
- package/dist/types/index.d.ts +435 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +30 -0
- package/dist/types/mcp.d.ts +3 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +3 -0
- package/dist/types/options.d.ts +112 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +2 -0
- package/dist/types/results.d.ts +200 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +2 -0
- package/dist/types/workflow-options.d.ts +82 -0
- package/dist/types/workflow-options.d.ts.map +1 -0
- package/dist/types/workflow-options.js +2 -0
- package/dist/types/workflow-results.d.ts +82 -0
- package/dist/types/workflow-results.d.ts.map +1 -0
- package/dist/types/workflow-results.js +2 -0
- package/dist/utils/ai-config-builder.d.ts +14 -0
- package/dist/utils/ai-config-builder.d.ts.map +1 -0
- package/dist/utils/ai-config-builder.js +22 -0
- package/dist/utils/ai-operation-utility.d.ts +142 -0
- package/dist/utils/ai-operation-utility.d.ts.map +1 -0
- package/dist/utils/ai-operation-utility.js +303 -0
- package/dist/utils/ai-service-factory.d.ts +34 -0
- package/dist/utils/ai-service-factory.d.ts.map +1 -0
- package/dist/utils/ai-service-factory.js +99 -0
- package/dist/utils/error-utils.d.ts +70 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +104 -0
- package/dist/utils/file-utils.d.ts +107 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +171 -0
- package/dist/utils/id-generator.d.ts +92 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +146 -0
- package/dist/utils/metadata-utils.d.ts +40 -0
- package/dist/utils/metadata-utils.d.ts.map +1 -0
- package/dist/utils/metadata-utils.js +43 -0
- package/dist/utils/model-executor-parser.d.ts +38 -0
- package/dist/utils/model-executor-parser.d.ts.map +1 -0
- package/dist/utils/model-executor-parser.js +69 -0
- package/dist/utils/model-parser.d.ts +6 -0
- package/dist/utils/model-parser.d.ts.map +1 -0
- package/dist/utils/model-parser.js +49 -0
- package/dist/utils/stack-formatter.d.ts +12 -0
- package/dist/utils/stack-formatter.d.ts.map +1 -0
- package/dist/utils/stack-formatter.js +36 -0
- package/dist/utils/storage-utils.d.ts +49 -0
- package/dist/utils/storage-utils.d.ts.map +1 -0
- package/dist/utils/storage-utils.js +80 -0
- package/dist/utils/streaming-utils.d.ts +38 -0
- package/dist/utils/streaming-utils.d.ts.map +1 -0
- package/dist/utils/streaming-utils.js +64 -0
- package/dist/utils/task-o-matic-error.d.ts +206 -0
- package/dist/utils/task-o-matic-error.d.ts.map +1 -0
- package/dist/utils/task-o-matic-error.js +304 -0
- package/package.json +40 -0
- package/src/index.ts +36 -0
- package/src/lib/ai-service/ai-operations.ts +310 -0
- package/src/lib/ai-service/base-operations.ts +139 -0
- package/src/lib/ai-service/documentation-operations.ts +438 -0
- package/src/lib/ai-service/filesystem-tools.ts +73 -0
- package/src/lib/ai-service/gemini-proxy.ts.bak +52 -0
- package/src/lib/ai-service/json-parser.ts +203 -0
- package/src/lib/ai-service/mcp-client.ts +54 -0
- package/src/lib/ai-service/model-provider.ts +192 -0
- package/src/lib/ai-service/prd-operations.ts +854 -0
- package/src/lib/ai-service/research-tools.ts +207 -0
- package/src/lib/ai-service/retry-handler.ts +89 -0
- package/src/lib/ai-service/task-operations.ts +342 -0
- package/src/lib/benchmark/registry.ts +307 -0
- package/src/lib/benchmark/runner.ts +190 -0
- package/src/lib/benchmark/storage.ts +140 -0
- package/src/lib/benchmark/types.ts +121 -0
- package/src/lib/better-t-stack-cli.ts +524 -0
- package/src/lib/bootstrap/cli-bootstrap.ts +397 -0
- package/src/lib/bootstrap/index.ts +2 -0
- package/src/lib/bootstrap/medusa-bootstrap.ts +261 -0
- package/src/lib/config-validation.ts +278 -0
- package/src/lib/config.ts +435 -0
- package/src/lib/context-builder.ts +383 -0
- package/src/lib/executors/claude-code-executor.ts +83 -0
- package/src/lib/executors/codex-executor.ts +85 -0
- package/src/lib/executors/executor-factory.ts +28 -0
- package/src/lib/executors/gemini-executor.ts +80 -0
- package/src/lib/executors/kilo-executor.ts +83 -0
- package/src/lib/executors/opencode-executor.ts +81 -0
- package/src/lib/git-utils.ts +334 -0
- package/src/lib/hooks.ts +121 -0
- package/src/lib/index.ts +166 -0
- package/src/lib/logger.ts +43 -0
- package/src/lib/notifications.ts +103 -0
- package/src/lib/prompt-builder.ts +471 -0
- package/src/lib/prompt-registry.ts +491 -0
- package/src/lib/provider-defaults.json +32 -0
- package/src/lib/storage/file-system.ts +864 -0
- package/src/lib/storage/storage-callbacks.ts +120 -0
- package/src/lib/storage/types.ts +58 -0
- package/src/lib/task-execution-core.ts +591 -0
- package/src/lib/task-execution.ts +59 -0
- package/src/lib/task-loop-execution.ts +214 -0
- package/src/lib/task-planning.ts +157 -0
- package/src/lib/task-review.ts +138 -0
- package/src/lib/validation.ts +140 -0
- package/src/prompts/documentation-detection.ts +21 -0
- package/src/prompts/documentation-recap.ts +11 -0
- package/src/prompts/index.ts +14 -0
- package/src/prompts/prd-combination.ts +32 -0
- package/src/prompts/prd-generation.ts +46 -0
- package/src/prompts/prd-parsing.ts +170 -0
- package/src/prompts/prd-question-answer.ts +25 -0
- package/src/prompts/prd-question.ts +38 -0
- package/src/prompts/prd-rework.ts +79 -0
- package/src/prompts/prd-suggest-stack.ts +97 -0
- package/src/prompts/task-breakdown.ts +149 -0
- package/src/prompts/task-enhancement.ts +138 -0
- package/src/prompts/task-execution.ts +22 -0
- package/src/prompts/task-planning.ts +64 -0
- package/src/prompts/workflow-assistance.ts +151 -0
- package/src/prompts/workflow-prompts.ts +97 -0
- package/src/services/benchmark.ts +433 -0
- package/src/services/prd.ts +845 -0
- package/src/services/tasks.ts +1515 -0
- package/src/services/workflow-ai-assistant.ts +298 -0
- package/src/services/workflow-benchmark.ts +339 -0
- package/src/services/workflow.ts +779 -0
- package/src/test/hooks.test.ts +77 -0
- package/src/test/integration/callbacks.test.ts +39 -0
- package/src/test/lib/ai-service/task-operations.test.ts +430 -0
- package/src/test/lib/config.test.ts +150 -0
- package/src/test/lib/git-utils.test.ts +198 -0
- package/src/test/mocks/mock-ai-operations.ts +205 -0
- package/src/test/mocks/mock-context-builder.ts +84 -0
- package/src/test/mocks/mock-model-provider.ts +21 -0
- package/src/test/mocks/mock-service-factory.ts +64 -0
- package/src/test/mocks/mock-storage.ts +204 -0
- package/src/test/model-parsing.test.ts +78 -0
- package/src/test/services/task-service.test.ts +551 -0
- package/src/test/storage.test.ts +206 -0
- package/src/test/task-loop-git.test.ts +142 -0
- package/src/test/test-mock-setup.ts +46 -0
- package/src/test/test-setup.ts +48 -0
- package/src/test/test-utils.ts +45 -0
- package/src/test/utils/ai-operation-utility.test.ts +306 -0
- package/src/test/utils/error-handling.test.ts +241 -0
- package/src/test/utils/file-utils.test.ts +80 -0
- package/src/test/utils/id-generator.test.ts +44 -0
- package/src/test/utils/model-parser.test.ts +67 -0
- package/src/test/validation.test.ts +19 -0
- package/src/types/callbacks.ts +14 -0
- package/src/types/index.ts +628 -0
- package/src/types/mcp.ts +5 -0
- package/src/types/options.ts +165 -0
- package/src/types/results.ts +216 -0
- package/src/types/workflow-options.ts +113 -0
- package/src/types/workflow-results.ts +87 -0
- package/src/utils/ai-config-builder.ts +33 -0
- package/src/utils/ai-operation-utility.ts +380 -0
- package/src/utils/ai-service-factory.ts +125 -0
- package/src/utils/error-utils.ts +124 -0
- package/src/utils/file-utils.ts +197 -0
- package/src/utils/id-generator.ts +168 -0
- package/src/utils/metadata-utils.ts +48 -0
- package/src/utils/model-executor-parser.ts +80 -0
- package/src/utils/model-parser.ts +58 -0
- package/src/utils/stack-formatter.ts +53 -0
- package/src/utils/storage-utils.ts +94 -0
- package/src/utils/streaming-utils.ts +91 -0
- package/src/utils/task-o-matic-error.ts +393 -0
- package/tsconfig.json +20 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { FileSystemStorage } from "../lib/storage/file-system";
|
|
2
|
+
import { TaskRepository } from "../lib/storage/types";
|
|
3
|
+
import { CreateTaskRequest } from "../types";
|
|
4
|
+
import * as assert from "assert";
|
|
5
|
+
|
|
6
|
+
describe("FileSystemStorage", () => {
|
|
7
|
+
let storage: TaskRepository;
|
|
8
|
+
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
storage = new FileSystemStorage();
|
|
11
|
+
// Clean up any existing data for fresh test
|
|
12
|
+
try {
|
|
13
|
+
const tasks = await storage.getTopLevelTasks();
|
|
14
|
+
for (const task of tasks) {
|
|
15
|
+
await storage.deleteTask(task.id);
|
|
16
|
+
}
|
|
17
|
+
} catch (error) {
|
|
18
|
+
// Ignore cleanup errors
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("Task Management", () => {
|
|
23
|
+
it("should create a task successfully", async () => {
|
|
24
|
+
const taskRequest: CreateTaskRequest = {
|
|
25
|
+
title: "Test Task",
|
|
26
|
+
description: "A test task description",
|
|
27
|
+
estimatedEffort: "small",
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const task = await storage.createTask(taskRequest);
|
|
31
|
+
|
|
32
|
+
assert.strictEqual(task.title, "Test Task");
|
|
33
|
+
assert.strictEqual(task.description, "A test task description");
|
|
34
|
+
assert.strictEqual(task.estimatedEffort, "small");
|
|
35
|
+
assert.strictEqual(task.status, "todo");
|
|
36
|
+
assert.ok(task.id);
|
|
37
|
+
assert.ok(task.createdAt);
|
|
38
|
+
assert.ok(task.updatedAt);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("should retrieve a task by ID", async () => {
|
|
42
|
+
const taskRequest: CreateTaskRequest = {
|
|
43
|
+
title: "Test Task for Retrieval",
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const createdTask = await storage.createTask(taskRequest);
|
|
47
|
+
const retrievedTask = await storage.getTask(createdTask.id);
|
|
48
|
+
|
|
49
|
+
assert.ok(retrievedTask);
|
|
50
|
+
assert.strictEqual(retrievedTask.id, createdTask.id);
|
|
51
|
+
assert.strictEqual(retrievedTask.title, createdTask.title);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("should return null for non-existent task", async () => {
|
|
55
|
+
const task = await storage.getTask("non-existent-id");
|
|
56
|
+
assert.strictEqual(task, null);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("should update a task", async () => {
|
|
60
|
+
const taskRequest: CreateTaskRequest = {
|
|
61
|
+
title: "Original Title",
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const createdTask = await storage.createTask(taskRequest);
|
|
65
|
+
|
|
66
|
+
// Add a small delay to ensure different timestamps
|
|
67
|
+
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
68
|
+
|
|
69
|
+
const updatedTask = await storage.updateTask(createdTask.id, {
|
|
70
|
+
title: "Updated Title",
|
|
71
|
+
status: "in-progress",
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
assert.ok(updatedTask);
|
|
75
|
+
assert.strictEqual(updatedTask.title, "Updated Title");
|
|
76
|
+
assert.strictEqual(updatedTask.status, "in-progress");
|
|
77
|
+
assert.ok(updatedTask.updatedAt >= createdTask.updatedAt);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("should delete a task", async () => {
|
|
81
|
+
const taskRequest: CreateTaskRequest = {
|
|
82
|
+
title: "Task to Delete",
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const createdTask = await storage.createTask(taskRequest);
|
|
86
|
+
const deleteResult = await storage.deleteTask(createdTask.id);
|
|
87
|
+
|
|
88
|
+
assert.strictEqual(deleteResult, true);
|
|
89
|
+
|
|
90
|
+
const deletedTask = await storage.getTask(createdTask.id);
|
|
91
|
+
assert.strictEqual(deletedTask, null);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("should handle task dependencies", async () => {
|
|
95
|
+
const task1Request: CreateTaskRequest = {
|
|
96
|
+
title: "First Task",
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const task2Request: CreateTaskRequest = {
|
|
100
|
+
title: "Second Task",
|
|
101
|
+
dependencies: [],
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const task1 = await storage.createTask(task1Request);
|
|
105
|
+
const task2 = await storage.createTask({
|
|
106
|
+
...task2Request,
|
|
107
|
+
dependencies: [task1.id],
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
assert.strictEqual(task2.dependencies?.length, 1);
|
|
111
|
+
assert.strictEqual(task2.dependencies[0], task1.id);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe("Input Validation", () => {
|
|
116
|
+
it("should reject empty task title", async () => {
|
|
117
|
+
try {
|
|
118
|
+
await storage.createTask({ title: "" });
|
|
119
|
+
assert.fail("Should have thrown an error");
|
|
120
|
+
} catch (error) {
|
|
121
|
+
assert.ok(error instanceof Error);
|
|
122
|
+
assert.ok(error.message.includes("title"));
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("should reject invalid task ID", async () => {
|
|
127
|
+
try {
|
|
128
|
+
await storage.getTask("");
|
|
129
|
+
assert.fail("Should have thrown an error");
|
|
130
|
+
} catch (error) {
|
|
131
|
+
assert.ok(error instanceof Error);
|
|
132
|
+
assert.ok(error.message.includes("Task ID"));
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("should reject invalid estimated effort", async () => {
|
|
137
|
+
try {
|
|
138
|
+
await storage.createTask({
|
|
139
|
+
title: "Test Task",
|
|
140
|
+
estimatedEffort: "invalid" as any,
|
|
141
|
+
});
|
|
142
|
+
assert.fail("Should have thrown an error");
|
|
143
|
+
} catch (error) {
|
|
144
|
+
assert.ok(error instanceof Error);
|
|
145
|
+
assert.ok(error.message.includes("effort"));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe("Storage Validation", () => {
|
|
151
|
+
it("should validate storage integrity", async () => {
|
|
152
|
+
const validation = await storage.validateStorageIntegrity();
|
|
153
|
+
assert.ok(validation.isValid);
|
|
154
|
+
assert.strictEqual(validation.issues.length, 0);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("should detect duplicate task IDs", async () => {
|
|
158
|
+
// This would require manual manipulation to test
|
|
159
|
+
// For now, just ensure the method exists
|
|
160
|
+
const validation = await storage.validateStorageIntegrity();
|
|
161
|
+
assert.ok(typeof validation.isValid === "boolean");
|
|
162
|
+
assert.ok(Array.isArray(validation.issues));
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe("Content Management", () => {
|
|
167
|
+
it("should save and retrieve task content", async () => {
|
|
168
|
+
const taskRequest: CreateTaskRequest = {
|
|
169
|
+
title: "Task with Content",
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const task = await storage.createTask(taskRequest);
|
|
173
|
+
const content = "# Task Content\nThis is the task content.";
|
|
174
|
+
|
|
175
|
+
const contentFile = await storage.saveTaskContent(task.id, content);
|
|
176
|
+
const retrievedContent = await storage.getTaskContent(task.id);
|
|
177
|
+
|
|
178
|
+
assert.strictEqual(retrievedContent, content);
|
|
179
|
+
assert.ok(contentFile.includes(task.id));
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it("should return null for non-existent content", async () => {
|
|
183
|
+
// First create a task to ensure storage is initialized
|
|
184
|
+
const taskRequest: CreateTaskRequest = {
|
|
185
|
+
title: "Dummy Task for Initialization",
|
|
186
|
+
};
|
|
187
|
+
await storage.createTask(taskRequest);
|
|
188
|
+
|
|
189
|
+
const content = await storage.getTaskContent("non-existent-task");
|
|
190
|
+
assert.strictEqual(content, null);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("should delete task content", async () => {
|
|
194
|
+
const taskRequest: CreateTaskRequest = {
|
|
195
|
+
title: "Task with Content to Delete",
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
const task = await storage.createTask(taskRequest);
|
|
199
|
+
await storage.saveTaskContent(task.id, "Some content");
|
|
200
|
+
await storage.deleteTaskContent(task.id);
|
|
201
|
+
|
|
202
|
+
const content = await storage.getTaskContent(task.id);
|
|
203
|
+
assert.strictEqual(content, null);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
});
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import assert from "assert";
|
|
2
|
+
import { extractCommitInfo } from "../lib/git-utils";
|
|
3
|
+
|
|
4
|
+
describe("Task Loop Git Integration", () => {
|
|
5
|
+
const mockTaskTitle = "Test Task";
|
|
6
|
+
const mockExecutionMessage = "Executed task";
|
|
7
|
+
|
|
8
|
+
it("should extract commit info from existing commit", async () => {
|
|
9
|
+
const gitState = {
|
|
10
|
+
beforeHead: "abc",
|
|
11
|
+
afterHead: "def",
|
|
12
|
+
hasUncommittedChanges: false,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const mockExec = async (cmd: string) => {
|
|
16
|
+
if (cmd.includes("git show")) {
|
|
17
|
+
return {
|
|
18
|
+
stdout: "feat: test commit\n\nBody\n src/file.ts | 10 +",
|
|
19
|
+
stderr: "",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return { stdout: "", stderr: "" };
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const result = await extractCommitInfo(
|
|
26
|
+
"1",
|
|
27
|
+
mockTaskTitle,
|
|
28
|
+
mockExecutionMessage,
|
|
29
|
+
gitState,
|
|
30
|
+
mockExec
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
assert.strictEqual(result.message, "feat: test commit");
|
|
34
|
+
assert.deepStrictEqual(result.files, ["src/file.ts"]);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("should generate commit info from uncommitted changes", async () => {
|
|
38
|
+
const gitState = {
|
|
39
|
+
beforeHead: "abc",
|
|
40
|
+
afterHead: "abc",
|
|
41
|
+
hasUncommittedChanges: true,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const mockExec = async (cmd: string) => {
|
|
45
|
+
if (cmd.includes("git diff")) {
|
|
46
|
+
return { stdout: "diff content", stderr: "" };
|
|
47
|
+
}
|
|
48
|
+
if (cmd.includes("git status")) {
|
|
49
|
+
return { stdout: " M src/changed.ts", stderr: "" };
|
|
50
|
+
}
|
|
51
|
+
return { stdout: "", stderr: "" };
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const mockAiOps = {
|
|
55
|
+
streamText: async () => JSON.stringify({ message: "fix: auto commit" }),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const result = await extractCommitInfo(
|
|
59
|
+
"1",
|
|
60
|
+
mockTaskTitle,
|
|
61
|
+
mockExecutionMessage,
|
|
62
|
+
gitState,
|
|
63
|
+
mockExec,
|
|
64
|
+
mockAiOps
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
assert.strictEqual(result.message, "fix: auto commit");
|
|
68
|
+
assert.deepStrictEqual(result.files, ["src/changed.ts"]);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("should return default info when no changes", async () => {
|
|
72
|
+
const gitState = {
|
|
73
|
+
beforeHead: "abc",
|
|
74
|
+
afterHead: "abc",
|
|
75
|
+
hasUncommittedChanges: false,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const result = await extractCommitInfo(
|
|
79
|
+
"1",
|
|
80
|
+
mockTaskTitle,
|
|
81
|
+
mockExecutionMessage,
|
|
82
|
+
gitState
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
|
|
86
|
+
assert.deepStrictEqual(result.files, []);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("should handle git command failures gracefully", async () => {
|
|
90
|
+
const gitState = {
|
|
91
|
+
beforeHead: "abc",
|
|
92
|
+
afterHead: "def",
|
|
93
|
+
hasUncommittedChanges: false,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const mockExec = async () => {
|
|
97
|
+
throw new Error("Git failed");
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const result = await extractCommitInfo(
|
|
101
|
+
"1",
|
|
102
|
+
mockTaskTitle,
|
|
103
|
+
mockExecutionMessage,
|
|
104
|
+
gitState,
|
|
105
|
+
mockExec
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
|
|
109
|
+
assert.deepStrictEqual(result.files, []);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("should handle invalid AI JSON response", async () => {
|
|
113
|
+
const gitState = {
|
|
114
|
+
beforeHead: "abc",
|
|
115
|
+
afterHead: "abc",
|
|
116
|
+
hasUncommittedChanges: true,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const mockExec = async (cmd: string) => {
|
|
120
|
+
if (cmd.includes("git diff")) return { stdout: "diff", stderr: "" };
|
|
121
|
+
if (cmd.includes("git status"))
|
|
122
|
+
return { stdout: " M file.ts", stderr: "" };
|
|
123
|
+
return { stdout: "", stderr: "" };
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const mockAiOps = {
|
|
127
|
+
streamText: async () => "Not JSON",
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const result = await extractCommitInfo(
|
|
131
|
+
"1",
|
|
132
|
+
mockTaskTitle,
|
|
133
|
+
mockExecutionMessage,
|
|
134
|
+
gitState,
|
|
135
|
+
mockExec,
|
|
136
|
+
mockAiOps
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
|
|
140
|
+
assert.deepStrictEqual(result.files, ["file.ts"]);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Mock Setup - Provides mock instances for ai-service-factory
|
|
3
|
+
* Uses the injectTestInstances function to inject mocks
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { MockStorage } from "./mocks/mock-storage";
|
|
7
|
+
import { MockAIOperations } from "./mocks/mock-ai-operations";
|
|
8
|
+
import { MockModelProvider } from "./mocks/mock-model-provider";
|
|
9
|
+
import { MockContextBuilder } from "./mocks/mock-context-builder";
|
|
10
|
+
import { injectTestInstances } from "../utils/ai-service-factory";
|
|
11
|
+
|
|
12
|
+
// Store mock instances
|
|
13
|
+
export let mockStorage: MockStorage;
|
|
14
|
+
export let mockAIOperations: MockAIOperations;
|
|
15
|
+
export let mockModelProvider: MockModelProvider;
|
|
16
|
+
export let mockContextBuilder: MockContextBuilder;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Initialize fresh mock instances and inject them into the service factory
|
|
20
|
+
*/
|
|
21
|
+
export function resetMocks() {
|
|
22
|
+
mockStorage = new MockStorage();
|
|
23
|
+
mockAIOperations = new MockAIOperations() as any; // Cast to any to avoid type issues
|
|
24
|
+
mockModelProvider = new MockModelProvider() as any;
|
|
25
|
+
mockContextBuilder = new MockContextBuilder(mockStorage) as any;
|
|
26
|
+
|
|
27
|
+
// Inject mocks into the service factory
|
|
28
|
+
injectTestInstances({
|
|
29
|
+
storage: mockStorage,
|
|
30
|
+
aiOperations: mockAIOperations as any,
|
|
31
|
+
modelProvider: mockModelProvider as any,
|
|
32
|
+
contextBuilder: mockContextBuilder as any,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get current mock instances for test assertions
|
|
38
|
+
*/
|
|
39
|
+
export function getMocks() {
|
|
40
|
+
return {
|
|
41
|
+
storage: mockStorage,
|
|
42
|
+
aiOperations: mockAIOperations,
|
|
43
|
+
modelProvider: mockModelProvider,
|
|
44
|
+
contextBuilder: mockContextBuilder,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Setup - Global test configuration and cleanup
|
|
3
|
+
* This file sets up the test environment to ensure proper isolation and configuration
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { configManager } from "../lib/config";
|
|
7
|
+
import { hooks } from "../lib/hooks";
|
|
8
|
+
import { resetMocks } from "./test-mock-setup";
|
|
9
|
+
|
|
10
|
+
// Global test setup
|
|
11
|
+
before(async function () {
|
|
12
|
+
// Set up a test working directory
|
|
13
|
+
const testDir = process.cwd();
|
|
14
|
+
configManager.setWorkingDirectory(testDir);
|
|
15
|
+
|
|
16
|
+
// Set up a minimal test configuration (no need to load from disk)
|
|
17
|
+
configManager.setConfig({
|
|
18
|
+
ai: {
|
|
19
|
+
provider: "openrouter",
|
|
20
|
+
model: "anthropic/claude-3-5-sonnet",
|
|
21
|
+
maxTokens: 4000,
|
|
22
|
+
temperature: 0.7,
|
|
23
|
+
apiKey: "test-key",
|
|
24
|
+
},
|
|
25
|
+
workingDirectory: testDir,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Reset mocks to ensure clean state
|
|
29
|
+
resetMocks();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Clean up between tests
|
|
33
|
+
afterEach(function () {
|
|
34
|
+
// Reset mocks to ensure clean state
|
|
35
|
+
resetMocks();
|
|
36
|
+
|
|
37
|
+
// Clean up hooks to prevent interference
|
|
38
|
+
hooks.clear();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Additional test utilities
|
|
42
|
+
export function setupTestEnvironment() {
|
|
43
|
+
// This can be called in individual tests for additional setup
|
|
44
|
+
return {
|
|
45
|
+
config: configManager.getConfig(),
|
|
46
|
+
workingDir: configManager.getWorkingDirectory(),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resetMockServices } from "./mocks/mock-service-factory";
|
|
2
|
+
import { MockStorage } from "./mocks/mock-storage";
|
|
3
|
+
import { MockAIOperations } from "./mocks/mock-ai-operations";
|
|
4
|
+
import { MockModelProvider } from "./mocks/mock-model-provider";
|
|
5
|
+
import { MockContextBuilder } from "./mocks/mock-context-builder";
|
|
6
|
+
|
|
7
|
+
export interface TestContext {
|
|
8
|
+
storage: MockStorage;
|
|
9
|
+
aiOperations: MockAIOperations;
|
|
10
|
+
modelProvider: MockModelProvider;
|
|
11
|
+
contextBuilder: MockContextBuilder;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function createTestContext(): TestContext {
|
|
15
|
+
resetMockServices();
|
|
16
|
+
|
|
17
|
+
const storage = new MockStorage();
|
|
18
|
+
const aiOperations = new MockAIOperations();
|
|
19
|
+
const modelProvider = new MockModelProvider();
|
|
20
|
+
const contextBuilder = new MockContextBuilder(storage);
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
storage,
|
|
24
|
+
aiOperations,
|
|
25
|
+
modelProvider,
|
|
26
|
+
contextBuilder,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createTestTaskData() {
|
|
31
|
+
return {
|
|
32
|
+
title: "Test Task",
|
|
33
|
+
description: "This is a test task description",
|
|
34
|
+
content: "Full content for the test task",
|
|
35
|
+
effort: "medium" as const,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function createTestPRDData() {
|
|
40
|
+
return {
|
|
41
|
+
description: "Test PRD description",
|
|
42
|
+
content:
|
|
43
|
+
"# Test PRD\n\nThis is a test PRD document with multiple sections.\n\n## Features\n- Feature 1\n- Feature 2\n\n## Requirements\n- Requirement 1\n- Requirement 2",
|
|
44
|
+
};
|
|
45
|
+
}
|