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,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VALID_EXECUTORS = void 0;
|
|
4
|
+
exports.parseTryModels = parseTryModels;
|
|
5
|
+
exports.validateExecutor = validateExecutor;
|
|
6
|
+
const task_o_matic_error_1 = require("./task-o-matic-error");
|
|
7
|
+
/**
|
|
8
|
+
* Valid executor tools
|
|
9
|
+
*/
|
|
10
|
+
exports.VALID_EXECUTORS = [
|
|
11
|
+
"opencode",
|
|
12
|
+
"claude",
|
|
13
|
+
"gemini",
|
|
14
|
+
"codex",
|
|
15
|
+
"kilo",
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Parse --try-models option into ModelAttemptConfig array
|
|
19
|
+
* Supports formats:
|
|
20
|
+
* - "model1,model2,model3" - just models (uses default executor)
|
|
21
|
+
* - "opencode:gpt-4o,claude:sonnet-4" - executor:model format
|
|
22
|
+
* - Mixed: "gpt-4o,claude:sonnet-4,gemini:gemini-2.0"
|
|
23
|
+
*
|
|
24
|
+
* @param value - Comma-separated model/executor specifications
|
|
25
|
+
* @returns Array of model attempt configurations
|
|
26
|
+
* @throws TaskOMaticError if an invalid executor is specified
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* parseTryModels("gpt-4o-mini,gpt-4o"); // [{ model: "gpt-4o-mini" }, { model: "gpt-4o" }]
|
|
31
|
+
* parseTryModels("opencode:gpt-4o,claude:sonnet-4"); // [{ executor: "opencode", model: "gpt-4o" }, ...]
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function parseTryModels(value) {
|
|
35
|
+
return value.split(",").map((item) => {
|
|
36
|
+
const trimmed = item.trim();
|
|
37
|
+
// Check if it includes executor specification (executor:model format)
|
|
38
|
+
if (trimmed.includes(":")) {
|
|
39
|
+
const [executor, model] = trimmed.split(":");
|
|
40
|
+
if (!exports.VALID_EXECUTORS.includes(executor)) {
|
|
41
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, `Invalid executor "${executor}" in --try-models. Must be one of: ${exports.VALID_EXECUTORS.join(", ")}`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
executor: executor,
|
|
45
|
+
model: model.trim(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Just a model name - use default executor
|
|
49
|
+
return {
|
|
50
|
+
model: trimmed,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Validate that an executor name is valid
|
|
56
|
+
*
|
|
57
|
+
* @param executor - Executor name to validate
|
|
58
|
+
* @returns Type guard confirming executor is valid
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* if (validateExecutor(options.tool)) {
|
|
63
|
+
* // TypeScript knows options.tool is ExecutorTool
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
function validateExecutor(executor) {
|
|
68
|
+
return exports.VALID_EXECUTORS.includes(executor);
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-parser.d.ts","sourceRoot":"","sources":["../../src/utils/model-parser.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAkDA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseModelString = parseModelString;
|
|
4
|
+
const validation_1 = require("../lib/validation");
|
|
5
|
+
// Helper to parse model string ([provider:]model[;reasoning[=budget]])
|
|
6
|
+
function parseModelString(modelStr) {
|
|
7
|
+
let processingStr = modelStr;
|
|
8
|
+
let reasoning;
|
|
9
|
+
// 1. Extract reasoning
|
|
10
|
+
// Format: ;reasoning or ;reasoning=1000
|
|
11
|
+
const reasoningMatch = processingStr.match(/;reasoning(?:=(\d+))?$/);
|
|
12
|
+
if (reasoningMatch) {
|
|
13
|
+
// If specific budget provided (group 1), use it.
|
|
14
|
+
// Otherwise default to "2000" as requested.
|
|
15
|
+
reasoning = reasoningMatch[1] ? reasoningMatch[1] : "2000";
|
|
16
|
+
// Remove the reasoning suffix from the string
|
|
17
|
+
processingStr = processingStr.substring(0, reasoningMatch.index);
|
|
18
|
+
}
|
|
19
|
+
// 2. Extract provider and model
|
|
20
|
+
// We look for the first colon.
|
|
21
|
+
const firstColonIndex = processingStr.indexOf(":");
|
|
22
|
+
if (firstColonIndex === -1) {
|
|
23
|
+
// No colon -> It's just a model name (provider inferred from env/defaults later)
|
|
24
|
+
return {
|
|
25
|
+
provider: undefined,
|
|
26
|
+
model: processingStr,
|
|
27
|
+
reasoning,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Has colon. Check if the part before is a valid provider.
|
|
31
|
+
const potentialProvider = processingStr.substring(0, firstColonIndex);
|
|
32
|
+
const potentialModel = processingStr.substring(firstColonIndex + 1);
|
|
33
|
+
if ((0, validation_1.isValidAIProvider)(potentialProvider)) {
|
|
34
|
+
// It is a known provider
|
|
35
|
+
return {
|
|
36
|
+
provider: potentialProvider,
|
|
37
|
+
model: potentialModel,
|
|
38
|
+
reasoning,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Not a known provider. Treat the whole thing as the model name.
|
|
42
|
+
// This handles cases like "google/gemini...:free" where "google/gemini..." isn't a provider key.
|
|
43
|
+
// Or just "model:with:colons".
|
|
44
|
+
return {
|
|
45
|
+
provider: undefined,
|
|
46
|
+
model: processingStr,
|
|
47
|
+
reasoning,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BTSFrontend } from "../types/index.js";
|
|
2
|
+
export interface StackInfo {
|
|
3
|
+
frontend: BTSFrontend | BTSFrontend[];
|
|
4
|
+
backend: string;
|
|
5
|
+
database: string;
|
|
6
|
+
orm: string;
|
|
7
|
+
auth: string;
|
|
8
|
+
addons: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function formatStackInfo(stack: StackInfo | null | undefined): string;
|
|
11
|
+
export declare function formatStackForContext(stack: StackInfo | null | undefined): string;
|
|
12
|
+
//# sourceMappingURL=stack-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/stack-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CA6B3E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAUjF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatStackInfo = formatStackInfo;
|
|
4
|
+
exports.formatStackForContext = formatStackForContext;
|
|
5
|
+
function formatStackInfo(stack) {
|
|
6
|
+
if (!stack) {
|
|
7
|
+
return "Not detected";
|
|
8
|
+
}
|
|
9
|
+
const frontendStr = Array.isArray(stack.frontend)
|
|
10
|
+
? stack.frontend.join(", ")
|
|
11
|
+
: stack.frontend;
|
|
12
|
+
const parts = [
|
|
13
|
+
`Frontend: ${frontendStr}`,
|
|
14
|
+
`Backend: ${stack.backend}`
|
|
15
|
+
];
|
|
16
|
+
if (stack.database !== 'none') {
|
|
17
|
+
parts.push(`Database: ${stack.database}`);
|
|
18
|
+
}
|
|
19
|
+
if (stack.orm !== 'none') {
|
|
20
|
+
parts.push(`ORM: ${stack.orm}`);
|
|
21
|
+
}
|
|
22
|
+
parts.push(`Auth: ${stack.auth}`);
|
|
23
|
+
if (stack.addons.length > 0) {
|
|
24
|
+
parts.push(`Addons: ${stack.addons.join(", ")}`);
|
|
25
|
+
}
|
|
26
|
+
return parts.join(", ");
|
|
27
|
+
}
|
|
28
|
+
function formatStackForContext(stack) {
|
|
29
|
+
if (!stack) {
|
|
30
|
+
return "";
|
|
31
|
+
}
|
|
32
|
+
const frontendStr = Array.isArray(stack.frontend)
|
|
33
|
+
? stack.frontend.join(" + ")
|
|
34
|
+
: stack.frontend;
|
|
35
|
+
return `Technology Stack: ${frontendStr} + ${stack.backend} + ${stack.database}`;
|
|
36
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Task } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Ensures a task is not null, throwing an error if it is.
|
|
4
|
+
* Useful for enforcing null checks after storage operations.
|
|
5
|
+
*
|
|
6
|
+
* @param task - Task that may be null
|
|
7
|
+
* @param taskId - ID of the task for error message
|
|
8
|
+
* @returns The task if not null
|
|
9
|
+
* @throws TaskOMaticError if task is null
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const task = await storage.getTask(taskId);
|
|
14
|
+
* const validTask = requireTask(task, taskId);
|
|
15
|
+
* console.log(validTask.title); // Safe - never null
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function requireTask(task: Task | null, taskId: string): Task;
|
|
19
|
+
/**
|
|
20
|
+
* Ensures multiple tasks are not null, throwing an error if any is null.
|
|
21
|
+
*
|
|
22
|
+
* @param tasks - Array of tasks that may contain nulls
|
|
23
|
+
* @param context - Context for error message (e.g., "subtasks", "dependencies")
|
|
24
|
+
* @returns Array of tasks with nulls filtered out
|
|
25
|
+
* @throws TaskOMaticError if any task is null
|
|
26
|
+
*/
|
|
27
|
+
export declare function requireTasks(tasks: (Task | null)[], context?: string): Task[];
|
|
28
|
+
/**
|
|
29
|
+
* Filters out null tasks from an array, with type narrowing.
|
|
30
|
+
*
|
|
31
|
+
* @param tasks - Array of tasks that may contain nulls
|
|
32
|
+
* @returns Array of tasks with nulls removed
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const tasks = await Promise.all(ids.map(id => storage.getTask(id)));
|
|
37
|
+
* const validTasks = filterNullTasks(tasks);
|
|
38
|
+
* // validTasks has type Task[] (no null)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function filterNullTasks(tasks: (Task | null)[]): Task[];
|
|
42
|
+
/**
|
|
43
|
+
* Validates that a task ID is a non-empty string.
|
|
44
|
+
*
|
|
45
|
+
* @param taskId - Task ID to validate
|
|
46
|
+
* @throws TaskOMaticError if task ID is invalid
|
|
47
|
+
*/
|
|
48
|
+
export declare function validateTaskId(taskId: string): void;
|
|
49
|
+
//# sourceMappingURL=storage-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-utils.d.ts","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAOzC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EACtB,OAAO,GAAE,MAAgB,GACxB,IAAI,EAAE,CAoBR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOnD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireTask = requireTask;
|
|
4
|
+
exports.requireTasks = requireTasks;
|
|
5
|
+
exports.filterNullTasks = filterNullTasks;
|
|
6
|
+
exports.validateTaskId = validateTaskId;
|
|
7
|
+
const task_o_matic_error_1 = require("./task-o-matic-error");
|
|
8
|
+
/**
|
|
9
|
+
* Ensures a task is not null, throwing an error if it is.
|
|
10
|
+
* Useful for enforcing null checks after storage operations.
|
|
11
|
+
*
|
|
12
|
+
* @param task - Task that may be null
|
|
13
|
+
* @param taskId - ID of the task for error message
|
|
14
|
+
* @returns The task if not null
|
|
15
|
+
* @throws TaskOMaticError if task is null
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const task = await storage.getTask(taskId);
|
|
20
|
+
* const validTask = requireTask(task, taskId);
|
|
21
|
+
* console.log(validTask.title); // Safe - never null
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
function requireTask(task, taskId) {
|
|
25
|
+
if (!task) {
|
|
26
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(taskId);
|
|
27
|
+
}
|
|
28
|
+
return task;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ensures multiple tasks are not null, throwing an error if any is null.
|
|
32
|
+
*
|
|
33
|
+
* @param tasks - Array of tasks that may contain nulls
|
|
34
|
+
* @param context - Context for error message (e.g., "subtasks", "dependencies")
|
|
35
|
+
* @returns Array of tasks with nulls filtered out
|
|
36
|
+
* @throws TaskOMaticError if any task is null
|
|
37
|
+
*/
|
|
38
|
+
function requireTasks(tasks, context = "tasks") {
|
|
39
|
+
const validTasks = [];
|
|
40
|
+
const missingIds = [];
|
|
41
|
+
tasks.forEach((task, index) => {
|
|
42
|
+
if (!task) {
|
|
43
|
+
missingIds.push(`index ${index}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
validTasks.push(task);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (missingIds.length > 0) {
|
|
50
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.STORAGE_INTEGRITY_ERROR, `Missing ${context}: ${missingIds.join(", ")}`);
|
|
51
|
+
}
|
|
52
|
+
return validTasks;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Filters out null tasks from an array, with type narrowing.
|
|
56
|
+
*
|
|
57
|
+
* @param tasks - Array of tasks that may contain nulls
|
|
58
|
+
* @returns Array of tasks with nulls removed
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const tasks = await Promise.all(ids.map(id => storage.getTask(id)));
|
|
63
|
+
* const validTasks = filterNullTasks(tasks);
|
|
64
|
+
* // validTasks has type Task[] (no null)
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
function filterNullTasks(tasks) {
|
|
68
|
+
return tasks.filter((task) => task !== null);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validates that a task ID is a non-empty string.
|
|
72
|
+
*
|
|
73
|
+
* @param taskId - Task ID to validate
|
|
74
|
+
* @throws TaskOMaticError if task ID is invalid
|
|
75
|
+
*/
|
|
76
|
+
function validateTaskId(taskId) {
|
|
77
|
+
if (!taskId || typeof taskId !== "string" || !taskId.trim()) {
|
|
78
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, "Invalid task ID: must be a non-empty string");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { StreamingOptions } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Token usage metrics from AI operations
|
|
4
|
+
*/
|
|
5
|
+
export interface TokenUsage {
|
|
6
|
+
prompt: number;
|
|
7
|
+
completion: number;
|
|
8
|
+
total: number;
|
|
9
|
+
}
|
|
10
|
+
export interface MetricsTracker {
|
|
11
|
+
tokenUsage: TokenUsage;
|
|
12
|
+
timeToFirstToken: number | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface MetricsStreamingResult {
|
|
15
|
+
options: StreamingOptions;
|
|
16
|
+
getMetrics: () => MetricsTracker;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates streaming options with automatic metrics tracking.
|
|
20
|
+
* Wraps provided streaming callbacks to capture token usage and timing metrics.
|
|
21
|
+
*
|
|
22
|
+
* @param streamingOptions - Optional base streaming options to wrap
|
|
23
|
+
* @param aiStartTime - Optional timestamp when AI operation started (for measuring time to first token)
|
|
24
|
+
* @returns Object containing wrapped streaming options and metrics getter
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const aiStartTime = Date.now();
|
|
29
|
+
* const { options, getMetrics } = createMetricsStreamingOptions(userCallbacks, aiStartTime);
|
|
30
|
+
*
|
|
31
|
+
* await generateText({ model, prompt, ...options });
|
|
32
|
+
*
|
|
33
|
+
* const { tokenUsage, timeToFirstToken } = getMetrics();
|
|
34
|
+
* console.log(`Used ${tokenUsage.total} tokens in ${timeToFirstToken}ms`);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function createMetricsStreamingOptions(streamingOptions?: StreamingOptions, aiStartTime?: number): MetricsStreamingResult;
|
|
38
|
+
//# sourceMappingURL=streaming-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-utils.d.ts","sourceRoot":"","sources":["../../src/utils/streaming-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,MAAM,cAAc,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,MAAM,GACnB,sBAAsB,CA+CxB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMetricsStreamingOptions = createMetricsStreamingOptions;
|
|
4
|
+
/**
|
|
5
|
+
* Creates streaming options with automatic metrics tracking.
|
|
6
|
+
* Wraps provided streaming callbacks to capture token usage and timing metrics.
|
|
7
|
+
*
|
|
8
|
+
* @param streamingOptions - Optional base streaming options to wrap
|
|
9
|
+
* @param aiStartTime - Optional timestamp when AI operation started (for measuring time to first token)
|
|
10
|
+
* @returns Object containing wrapped streaming options and metrics getter
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const aiStartTime = Date.now();
|
|
15
|
+
* const { options, getMetrics } = createMetricsStreamingOptions(userCallbacks, aiStartTime);
|
|
16
|
+
*
|
|
17
|
+
* await generateText({ model, prompt, ...options });
|
|
18
|
+
*
|
|
19
|
+
* const { tokenUsage, timeToFirstToken } = getMetrics();
|
|
20
|
+
* console.log(`Used ${tokenUsage.total} tokens in ${timeToFirstToken}ms`);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function createMetricsStreamingOptions(streamingOptions, aiStartTime) {
|
|
24
|
+
let tokenUsage = { prompt: 0, completion: 0, total: 0 };
|
|
25
|
+
let timeToFirstToken = undefined;
|
|
26
|
+
const wrappedOptions = {
|
|
27
|
+
onFinish: async (result) => {
|
|
28
|
+
// Extract token usage from result
|
|
29
|
+
if (result.usage) {
|
|
30
|
+
tokenUsage = {
|
|
31
|
+
prompt: result.usage.inputTokens || result.usage.promptTokens || 0,
|
|
32
|
+
completion: result.usage.outputTokens || result.usage.completionTokens || 0,
|
|
33
|
+
total: result.usage.totalTokens || 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Call original onFinish callback if provided
|
|
37
|
+
await streamingOptions?.onFinish?.(result);
|
|
38
|
+
},
|
|
39
|
+
onChunk: (chunk) => {
|
|
40
|
+
// Measure time to first token (ignore empty/whitespace chunks)
|
|
41
|
+
if (chunk && chunk.trim() && !timeToFirstToken && aiStartTime) {
|
|
42
|
+
timeToFirstToken = Date.now() - aiStartTime;
|
|
43
|
+
}
|
|
44
|
+
// Call original onChunk callback if provided
|
|
45
|
+
streamingOptions?.onChunk?.(chunk);
|
|
46
|
+
},
|
|
47
|
+
onError: (error) => {
|
|
48
|
+
// Pass through error callback
|
|
49
|
+
streamingOptions?.onError?.(error);
|
|
50
|
+
},
|
|
51
|
+
onReasoning: (text) => {
|
|
52
|
+
// Measure time to first token (reasoning counts as response start)
|
|
53
|
+
if (text && text.trim() && !timeToFirstToken && aiStartTime) {
|
|
54
|
+
timeToFirstToken = Date.now() - aiStartTime;
|
|
55
|
+
}
|
|
56
|
+
// Pass through reasoning callback
|
|
57
|
+
streamingOptions?.onReasoning?.(text);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
options: wrappedOptions,
|
|
62
|
+
getMetrics: () => ({ tokenUsage, timeToFirstToken }),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskOMaticError - Standardized error class for TaskOMatic
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error handling with context, suggestions, and typing.
|
|
5
|
+
* All errors in the system should use this class or one of the helper functions
|
|
6
|
+
* to ensure consistent error reporting and debugging experience.
|
|
7
|
+
*
|
|
8
|
+
* @example Basic usage
|
|
9
|
+
* ```typescript
|
|
10
|
+
* throw new TaskOMaticError("Task not found", {
|
|
11
|
+
* code: "TASK_NOT_FOUND",
|
|
12
|
+
* context: "Attempted to retrieve task ID: 123",
|
|
13
|
+
* suggestions: [
|
|
14
|
+
* "Verify the task ID is correct",
|
|
15
|
+
* "Check if the task was deleted"
|
|
16
|
+
* ]
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @example With cause chain
|
|
21
|
+
* ```typescript
|
|
22
|
+
* try {
|
|
23
|
+
* await storage.getTask(id);
|
|
24
|
+
* } catch (error) {
|
|
25
|
+
* throw new TaskOMaticError("Failed to retrieve task", {
|
|
26
|
+
* code: "STORAGE_ERROR",
|
|
27
|
+
* cause: error instanceof Error ? error : new Error(String(error)),
|
|
28
|
+
* context: `Task ID: ${id}`,
|
|
29
|
+
* suggestions: ["Check storage permissions", "Verify storage is initialized"]
|
|
30
|
+
* });
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example With metadata
|
|
35
|
+
* ```typescript
|
|
36
|
+
* throw new TaskOMaticError("AI operation timed out", {
|
|
37
|
+
* code: "AI_OPERATION_FAILED",
|
|
38
|
+
* metadata: {
|
|
39
|
+
* operation: "task-breakdown",
|
|
40
|
+
* duration: 30000,
|
|
41
|
+
* retryAttempts: 3
|
|
42
|
+
* },
|
|
43
|
+
* suggestions: ["Increase timeout", "Check AI service status"]
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class TaskOMaticError extends Error {
|
|
48
|
+
/**
|
|
49
|
+
* Error code for categorization
|
|
50
|
+
*/
|
|
51
|
+
code: string;
|
|
52
|
+
/**
|
|
53
|
+
* Additional context information
|
|
54
|
+
*/
|
|
55
|
+
context?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Actionable suggestions for resolving the error
|
|
58
|
+
*/
|
|
59
|
+
suggestions?: string[];
|
|
60
|
+
/**
|
|
61
|
+
* Original error that caused this error (if applicable)
|
|
62
|
+
*/
|
|
63
|
+
cause?: Error;
|
|
64
|
+
/**
|
|
65
|
+
* Timestamp when the error occurred
|
|
66
|
+
*/
|
|
67
|
+
timestamp: number;
|
|
68
|
+
/**
|
|
69
|
+
* Additional metadata for debugging
|
|
70
|
+
*/
|
|
71
|
+
metadata?: Record<string, unknown>;
|
|
72
|
+
/**
|
|
73
|
+
* Create a new TaskOMaticError
|
|
74
|
+
*
|
|
75
|
+
* @param message - Error message
|
|
76
|
+
* @param options - Additional error options
|
|
77
|
+
*/
|
|
78
|
+
constructor(message: string, options: {
|
|
79
|
+
code: string;
|
|
80
|
+
context?: string;
|
|
81
|
+
suggestions?: string[];
|
|
82
|
+
cause?: Error;
|
|
83
|
+
metadata?: Record<string, unknown>;
|
|
84
|
+
});
|
|
85
|
+
/**
|
|
86
|
+
* Get full error details as a formatted string
|
|
87
|
+
*/
|
|
88
|
+
getDetails(): string;
|
|
89
|
+
/**
|
|
90
|
+
* Get error details as a structured object
|
|
91
|
+
*/
|
|
92
|
+
toJSON(): {
|
|
93
|
+
name: string;
|
|
94
|
+
code: string;
|
|
95
|
+
message: string;
|
|
96
|
+
context?: string;
|
|
97
|
+
suggestions?: string[];
|
|
98
|
+
cause?: string;
|
|
99
|
+
timestamp: number;
|
|
100
|
+
metadata?: Record<string, unknown>;
|
|
101
|
+
stack?: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Standard error codes for TaskOMatic
|
|
106
|
+
*/
|
|
107
|
+
export declare const TaskOMaticErrorCodes: {
|
|
108
|
+
readonly UNEXPECTED_ERROR: "TASK_O_MATIC_001";
|
|
109
|
+
readonly INVALID_INPUT: "TASK_O_MATIC_002";
|
|
110
|
+
readonly CONFIGURATION_ERROR: "TASK_O_MATIC_003";
|
|
111
|
+
readonly TASK_NOT_FOUND: "TASK_O_MATIC_101";
|
|
112
|
+
readonly TASK_ALREADY_EXISTS: "TASK_O_MATIC_102";
|
|
113
|
+
readonly INVALID_TASK_STATUS: "TASK_O_MATIC_103";
|
|
114
|
+
readonly TASK_OPERATION_FAILED: "TASK_O_MATIC_104";
|
|
115
|
+
readonly STORAGE_ERROR: "TASK_O_MATIC_201";
|
|
116
|
+
readonly STORAGE_NOT_INITIALIZED: "TASK_O_MATIC_202";
|
|
117
|
+
readonly STORAGE_INTEGRITY_ERROR: "TASK_O_MATIC_203";
|
|
118
|
+
readonly AI_OPERATION_FAILED: "TASK_O_MATIC_301";
|
|
119
|
+
readonly AI_CONFIGURATION_ERROR: "TASK_O_MATIC_302";
|
|
120
|
+
readonly AI_RATE_LIMIT: "TASK_O_MATIC_303";
|
|
121
|
+
readonly WORKFLOW_VALIDATION_ERROR: "TASK_O_MATIC_401";
|
|
122
|
+
readonly WORKFLOW_EXECUTION_ERROR: "TASK_O_MATIC_402";
|
|
123
|
+
readonly PRD_PARSING_ERROR: "TASK_O_MATIC_501";
|
|
124
|
+
readonly PRD_GENERATION_ERROR: "TASK_O_MATIC_502";
|
|
125
|
+
readonly PRD_VALIDATION_ERROR: "TASK_O_MATIC_503";
|
|
126
|
+
};
|
|
127
|
+
type TaskOMaticErrorCode = (typeof TaskOMaticErrorCodes)[keyof typeof TaskOMaticErrorCodes];
|
|
128
|
+
/**
|
|
129
|
+
* Create a standardized error with context and suggestions
|
|
130
|
+
*
|
|
131
|
+
* Helper function to create TaskOMaticError instances with proper error codes
|
|
132
|
+
* from the TaskOMaticErrorCodes constants.
|
|
133
|
+
*
|
|
134
|
+
* @param code - Error code from TaskOMaticErrorCodes
|
|
135
|
+
* @param message - Human-readable error message
|
|
136
|
+
* @param options - Additional error options
|
|
137
|
+
* @returns Configured TaskOMaticError instance
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* throw createStandardError(
|
|
142
|
+
* TaskOMaticErrorCodes.TASK_NOT_FOUND,
|
|
143
|
+
* "Task with ID '123' not found",
|
|
144
|
+
* {
|
|
145
|
+
* context: "User attempted to retrieve non-existent task",
|
|
146
|
+
* suggestions: ["Verify task ID", "List all tasks to see available IDs"]
|
|
147
|
+
* }
|
|
148
|
+
* );
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function createStandardError(code: TaskOMaticErrorCode, message: string, options?: {
|
|
152
|
+
context?: string;
|
|
153
|
+
suggestions?: string[];
|
|
154
|
+
cause?: Error;
|
|
155
|
+
metadata?: Record<string, unknown>;
|
|
156
|
+
}): TaskOMaticError;
|
|
157
|
+
/**
|
|
158
|
+
* Format an existing error into a TaskOMaticError with context and suggestions
|
|
159
|
+
*
|
|
160
|
+
* Useful for wrapping caught errors with additional context while preserving
|
|
161
|
+
* the original error as the cause.
|
|
162
|
+
*
|
|
163
|
+
* @param error - Original error to wrap
|
|
164
|
+
* @param code - Error code from TaskOMaticErrorCodes
|
|
165
|
+
* @param options - Additional error options
|
|
166
|
+
* @returns TaskOMaticError wrapping the original error
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* try {
|
|
171
|
+
* await dangerousOperation();
|
|
172
|
+
* } catch (error) {
|
|
173
|
+
* throw formatStandardError(
|
|
174
|
+
* error,
|
|
175
|
+
* TaskOMaticErrorCodes.STORAGE_ERROR,
|
|
176
|
+
* {
|
|
177
|
+
* context: "Failed during task persistence",
|
|
178
|
+
* suggestions: ["Check disk space", "Verify write permissions"]
|
|
179
|
+
* }
|
|
180
|
+
* );
|
|
181
|
+
* }
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
export declare function formatStandardError(error: unknown, code: TaskOMaticErrorCode, options?: {
|
|
185
|
+
context?: string;
|
|
186
|
+
suggestions?: string[];
|
|
187
|
+
metadata?: Record<string, unknown>;
|
|
188
|
+
}): TaskOMaticError;
|
|
189
|
+
/**
|
|
190
|
+
* Type guard for TaskOMaticError
|
|
191
|
+
*/
|
|
192
|
+
export declare function isTaskOMaticError(error: unknown): error is TaskOMaticError;
|
|
193
|
+
/**
|
|
194
|
+
* Common error formatting functions
|
|
195
|
+
*/
|
|
196
|
+
export declare function formatTaskNotFoundError(taskId: string): TaskOMaticError;
|
|
197
|
+
export declare function formatInvalidStatusTransitionError(fromStatus: string, toStatus: string): TaskOMaticError;
|
|
198
|
+
export declare function formatStorageError(operation: string, cause?: Error): TaskOMaticError;
|
|
199
|
+
export declare function formatAIOperationError(operation: string, cause?: Error): TaskOMaticError;
|
|
200
|
+
/**
|
|
201
|
+
* Backward compatibility wrapper
|
|
202
|
+
* Maintains existing error handling patterns while using new error system
|
|
203
|
+
*/
|
|
204
|
+
export declare function wrapErrorForBackwardCompatibility(error: unknown, context?: string): Error;
|
|
205
|
+
export {};
|
|
206
|
+
//# sourceMappingURL=task-o-matic-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-o-matic-error.d.ts","sourceRoot":"","sources":["../../src/utils/task-o-matic-error.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;;;OAKG;gBAED,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC;IAkBH;;OAEG;IACH,UAAU,IAAI,MAAM;IAsBpB;;OAEG;IACH,MAAM,IAAI;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;CAaF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEX,KAAK,mBAAmB,GACtB,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,GACL,eAAe,CAQjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,mBAAmB,EACzB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,GACL,eAAe,CAWjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;GAEG;AAEH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAavE;AAED,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,eAAe,CAajB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,KAAK,GACZ,eAAe,CAcjB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,KAAK,GACZ,eAAe,CAejB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,CAUP"}
|