Compare commits
4 Commits
docs/auto-
...
ralph/batc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95d4ba9b28 | ||
|
|
b8830d9508 | ||
|
|
548beb4344 | ||
|
|
555da2b5b9 |
5
.changeset/open-tips-notice.md
Normal file
5
.changeset/open-tips-notice.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Add 4.5 haiku and sonnet to supported models for claude-code and anthropic ai providers
|
||||||
@@ -3,22 +3,6 @@ title: CLI Commands
|
|||||||
sidebarTitle: "CLI Commands"
|
sidebarTitle: "CLI Commands"
|
||||||
---
|
---
|
||||||
|
|
||||||
## Debug Mode
|
|
||||||
|
|
||||||
For troubleshooting issues, you can enable debug mode to get detailed error information:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Enable debug mode for any command
|
|
||||||
DEBUG=true task-master <command>
|
|
||||||
|
|
||||||
# Example with next command
|
|
||||||
DEBUG=true task-master next
|
|
||||||
```
|
|
||||||
|
|
||||||
Debug mode shows full error messages, stack traces, and additional context. See the [Troubleshooting guide](/getting-started/troubleshooting) for more details.
|
|
||||||
|
|
||||||
## Commands
|
|
||||||
|
|
||||||
|
|
||||||
<AccordionGroup>
|
<AccordionGroup>
|
||||||
<Accordion title="Parse PRD">
|
<Accordion title="Parse PRD">
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"getting-started/api-keys",
|
"getting-started/api-keys",
|
||||||
"getting-started/troubleshooting",
|
|
||||||
"getting-started/faq",
|
"getting-started/faq",
|
||||||
"getting-started/contribute"
|
"getting-started/contribute"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,32 +3,7 @@ title: FAQ
|
|||||||
sidebarTitle: "FAQ"
|
sidebarTitle: "FAQ"
|
||||||
---
|
---
|
||||||
|
|
||||||
## Common Questions
|
Coming soon.
|
||||||
|
|
||||||
### How do I get more detailed error information?
|
|
||||||
|
|
||||||
Enable debug mode by setting the `DEBUG` environment variable:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
DEBUG=true task-master <command>
|
|
||||||
```
|
|
||||||
|
|
||||||
This shows full error messages, stack traces, and additional context. See our [Troubleshooting guide](/getting-started/troubleshooting) for complete details.
|
|
||||||
|
|
||||||
### Why are my commands failing silently?
|
|
||||||
|
|
||||||
Task Master uses sanitized error messages by default to provide a clean user experience. Enable debug mode to see technical details about what went wrong.
|
|
||||||
|
|
||||||
### How do I report a bug?
|
|
||||||
|
|
||||||
When reporting issues, please:
|
|
||||||
1. Enable debug mode and include the full error output
|
|
||||||
2. Provide your environment details (OS, Node.js version, Task Master version)
|
|
||||||
3. Include the command that failed and your project configuration
|
|
||||||
|
|
||||||
See our [Troubleshooting guide](/getting-started/troubleshooting) for complete bug reporting guidelines.
|
|
||||||
|
|
||||||
More frequently asked questions coming soon.
|
|
||||||
|
|
||||||
## 💬 Getting Help
|
## 💬 Getting Help
|
||||||
|
|
||||||
|
|||||||
@@ -1,155 +0,0 @@
|
|||||||
---
|
|
||||||
title: Troubleshooting
|
|
||||||
sidebarTitle: "Troubleshooting"
|
|
||||||
---
|
|
||||||
|
|
||||||
This guide helps you troubleshoot common issues and get more detailed error information when using Task Master.
|
|
||||||
|
|
||||||
## Debug Mode
|
|
||||||
|
|
||||||
Task Master includes a debug mode that provides detailed error information including stack traces. This is especially useful when reporting issues or debugging problems.
|
|
||||||
|
|
||||||
### Enabling Debug Mode
|
|
||||||
|
|
||||||
Set the `DEBUG` environment variable to enable debug mode:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Enable debug mode for a single command
|
|
||||||
DEBUG=true task-master next
|
|
||||||
|
|
||||||
# Or use '1' instead of 'true'
|
|
||||||
DEBUG=1 task-master list
|
|
||||||
|
|
||||||
# Enable for entire session (bash/zsh)
|
|
||||||
export DEBUG=true
|
|
||||||
task-master next # Now shows detailed errors
|
|
||||||
|
|
||||||
# Enable for entire session (fish shell)
|
|
||||||
set -x DEBUG true
|
|
||||||
task-master next
|
|
||||||
```
|
|
||||||
|
|
||||||
### What Debug Mode Shows
|
|
||||||
|
|
||||||
With debug mode enabled, errors will include:
|
|
||||||
|
|
||||||
- **Full error messages**: Complete technical details instead of sanitized user messages
|
|
||||||
- **Stack traces**: Detailed information about where errors occurred
|
|
||||||
- **Error context**: Additional metadata about the failed operation
|
|
||||||
- **Error chains**: If an error was caused by another error, both are shown
|
|
||||||
|
|
||||||
### Example Output
|
|
||||||
|
|
||||||
**Normal mode (default):**
|
|
||||||
```
|
|
||||||
Error: Unable to read tasks file
|
|
||||||
```
|
|
||||||
|
|
||||||
**Debug mode:**
|
|
||||||
```
|
|
||||||
TaskMasterError[FILE_READ_ERROR]: Unable to read tasks file
|
|
||||||
|
|
||||||
Stack trace:
|
|
||||||
at TaskService.loadTasks (/path/to/task-service.ts:123)
|
|
||||||
at NextCommand.execute (/path/to/next.command.ts:45)
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common Issues
|
|
||||||
|
|
||||||
### File Permission Errors
|
|
||||||
|
|
||||||
**Problem**: Commands fail with file access errors
|
|
||||||
|
|
||||||
**Solution**:
|
|
||||||
1. Check file permissions in `.taskmaster/` directory
|
|
||||||
2. Ensure your user has write access to the project directory
|
|
||||||
3. Run with debug mode to see the exact file path causing issues
|
|
||||||
|
|
||||||
### API Connection Issues
|
|
||||||
|
|
||||||
**Problem**: Commands timeout or fail when using API storage
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. Check your internet connection
|
|
||||||
2. Verify API keys are correctly configured
|
|
||||||
3. Check if your organization has firewall restrictions
|
|
||||||
4. Use debug mode to see specific network errors
|
|
||||||
|
|
||||||
### Task File Corruption
|
|
||||||
|
|
||||||
**Problem**: Commands report invalid task data
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. Check if `.taskmaster/tasks/tasks.json` is valid JSON
|
|
||||||
2. Restore from backup if available
|
|
||||||
3. Run `task-master generate` to regenerate task files from main data
|
|
||||||
|
|
||||||
### Model Configuration Issues
|
|
||||||
|
|
||||||
**Problem**: AI-powered commands fail
|
|
||||||
|
|
||||||
**Solutions**:
|
|
||||||
1. Verify API keys are set: `task-master models`
|
|
||||||
2. Check if the configured model is available
|
|
||||||
3. Try switching to a different model
|
|
||||||
4. Use debug mode to see specific API error messages
|
|
||||||
|
|
||||||
## Getting Help
|
|
||||||
|
|
||||||
When reporting issues, please:
|
|
||||||
|
|
||||||
1. **Enable debug mode** and include the full error output
|
|
||||||
2. **Specify your environment**:
|
|
||||||
- Operating system and version
|
|
||||||
- Node.js version (`node --version`)
|
|
||||||
- Task Master version (`task-master --version`)
|
|
||||||
3. **Include relevant context**:
|
|
||||||
- Command that failed
|
|
||||||
- Project configuration
|
|
||||||
- Recent changes to your setup
|
|
||||||
|
|
||||||
### Support Channels
|
|
||||||
|
|
||||||
- **GitHub Issues**: [Report bugs and request features](https://github.com/eyaltoledano/claude-task-master/issues)
|
|
||||||
- **Discord**: [Join our community for help](https://discord.gg/taskmasterai)
|
|
||||||
- **GitHub Discussions**: [Ask questions and share ideas](https://github.com/eyaltoledano/claude-task-master/discussions)
|
|
||||||
|
|
||||||
## Advanced Debugging
|
|
||||||
|
|
||||||
### Inspecting Task Data
|
|
||||||
|
|
||||||
If you suspect task data corruption:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# View raw task data
|
|
||||||
cat .taskmaster/tasks/tasks.json | jq '.'
|
|
||||||
|
|
||||||
# Check specific task
|
|
||||||
task-master show <task-id> --format=json
|
|
||||||
```
|
|
||||||
|
|
||||||
### Configuration Debugging
|
|
||||||
|
|
||||||
Check your current configuration:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# View model configuration
|
|
||||||
task-master models
|
|
||||||
|
|
||||||
# Check if initialization is complete
|
|
||||||
ls -la .taskmaster/
|
|
||||||
```
|
|
||||||
|
|
||||||
### Network Debugging
|
|
||||||
|
|
||||||
For API storage issues:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Test with curl (replace with your API endpoint)
|
|
||||||
curl -H "Authorization: Bearer $ANTHROPIC_API_KEY" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
https://api.anthropic.com/v1/models
|
|
||||||
```
|
|
||||||
|
|
||||||
Remember to enable debug mode (`DEBUG=true`) when troubleshooting to get the most helpful error information.
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Available Models as of October 5, 2025
|
# Available Models as of October 18, 2025
|
||||||
|
|
||||||
## Main Models
|
## Main Models
|
||||||
|
|
||||||
@@ -8,8 +8,11 @@
|
|||||||
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
||||||
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
||||||
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
||||||
|
| anthropic | claude-sonnet-4-5-20250929 | 0.73 | 3 | 15 |
|
||||||
|
| anthropic | claude-haiku-4-5-20251001 | 0.45 | 1 | 5 |
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
|
| claude-code | haiku | 0.45 | 0 | 0 |
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
@@ -102,6 +105,7 @@
|
|||||||
| ----------- | -------------------------------------------- | --------- | ---------- | ----------- |
|
| ----------- | -------------------------------------------- | --------- | ---------- | ----------- |
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
|
| claude-code | haiku | 0.45 | 0 | 0 |
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
@@ -142,8 +146,11 @@
|
|||||||
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
||||||
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
||||||
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
||||||
|
| anthropic | claude-sonnet-4-5-20250929 | 0.73 | 3 | 15 |
|
||||||
|
| anthropic | claude-haiku-4-5-20251001 | 0.45 | 1 | 5 |
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
|
| claude-code | haiku | 0.45 | 0 | 0 |
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function log(level, ...args) {
|
|||||||
// is responsible for directing logs correctly (e.g., to stderr)
|
// is responsible for directing logs correctly (e.g., to stderr)
|
||||||
// during tool execution without upsetting the client connection.
|
// during tool execution without upsetting the client connection.
|
||||||
// Logs outside of tool execution (like startup) will go to stdout.
|
// Logs outside of tool execution (like startup) will go to stdout.
|
||||||
console.log(prefix, ...coloredArgs);
|
console.error(prefix, ...coloredArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
62
output.txt
62
output.txt
File diff suppressed because one or more lines are too long
@@ -25,7 +25,7 @@ export interface LoggerConfig {
|
|||||||
export class Logger {
|
export class Logger {
|
||||||
private config: Required<LoggerConfig>;
|
private config: Required<LoggerConfig>;
|
||||||
private static readonly DEFAULT_CONFIG: Required<LoggerConfig> = {
|
private static readonly DEFAULT_CONFIG: Required<LoggerConfig> = {
|
||||||
level: LogLevel.WARN,
|
level: LogLevel.SILENT,
|
||||||
silent: false,
|
silent: false,
|
||||||
prefix: '',
|
prefix: '',
|
||||||
timestamp: false,
|
timestamp: false,
|
||||||
|
|||||||
@@ -307,6 +307,20 @@ function validateProviderModelCombination(providerName, modelId) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of supported model IDs for a given provider from supported-models.json
|
||||||
|
* @param {string} providerName - The name of the provider (e.g., 'claude-code', 'anthropic')
|
||||||
|
* @returns {string[]} Array of supported model IDs, or empty array if provider not found
|
||||||
|
*/
|
||||||
|
export function getSupportedModelsForProvider(providerName) {
|
||||||
|
if (!MODEL_MAP[providerName]) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return MODEL_MAP[providerName]
|
||||||
|
.filter((model) => model.supported !== false)
|
||||||
|
.map((model) => model.id);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates Claude Code AI provider custom settings
|
* Validates Claude Code AI provider custom settings
|
||||||
* @param {object} settings The settings to validate
|
* @param {object} settings The settings to validate
|
||||||
|
|||||||
@@ -43,6 +43,28 @@
|
|||||||
"allowed_roles": ["main", "fallback"],
|
"allowed_roles": ["main", "fallback"],
|
||||||
"max_tokens": 8192,
|
"max_tokens": 8192,
|
||||||
"supported": true
|
"supported": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "claude-sonnet-4-5-20250929",
|
||||||
|
"swe_score": 0.73,
|
||||||
|
"cost_per_1m_tokens": {
|
||||||
|
"input": 3.0,
|
||||||
|
"output": 15.0
|
||||||
|
},
|
||||||
|
"allowed_roles": ["main", "fallback"],
|
||||||
|
"max_tokens": 64000,
|
||||||
|
"supported": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "claude-haiku-4-5-20251001",
|
||||||
|
"swe_score": 0.45,
|
||||||
|
"cost_per_1m_tokens": {
|
||||||
|
"input": 1.0,
|
||||||
|
"output": 5.0
|
||||||
|
},
|
||||||
|
"allowed_roles": ["main", "fallback"],
|
||||||
|
"max_tokens": 200000,
|
||||||
|
"supported": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"claude-code": [
|
"claude-code": [
|
||||||
@@ -67,6 +89,17 @@
|
|||||||
"allowed_roles": ["main", "fallback", "research"],
|
"allowed_roles": ["main", "fallback", "research"],
|
||||||
"max_tokens": 64000,
|
"max_tokens": 64000,
|
||||||
"supported": true
|
"supported": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "haiku",
|
||||||
|
"swe_score": 0.45,
|
||||||
|
"cost_per_1m_tokens": {
|
||||||
|
"input": 0,
|
||||||
|
"output": 0
|
||||||
|
},
|
||||||
|
"allowed_roles": ["main", "fallback", "research"],
|
||||||
|
"max_tokens": 200000,
|
||||||
|
"supported": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"codex-cli": [
|
"codex-cli": [
|
||||||
|
|||||||
@@ -12,7 +12,10 @@
|
|||||||
|
|
||||||
import { createClaudeCode } from 'ai-sdk-provider-claude-code';
|
import { createClaudeCode } from 'ai-sdk-provider-claude-code';
|
||||||
import { BaseAIProvider } from './base-provider.js';
|
import { BaseAIProvider } from './base-provider.js';
|
||||||
import { getClaudeCodeSettingsForCommand } from '../../scripts/modules/config-manager.js';
|
import {
|
||||||
|
getClaudeCodeSettingsForCommand,
|
||||||
|
getSupportedModelsForProvider
|
||||||
|
} from '../../scripts/modules/config-manager.js';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { log } from '../../scripts/modules/utils.js';
|
import { log } from '../../scripts/modules/utils.js';
|
||||||
|
|
||||||
@@ -24,14 +27,24 @@ let _claudeCliAvailable = null;
|
|||||||
*
|
*
|
||||||
* Features:
|
* Features:
|
||||||
* - No API key required (uses local Claude Code CLI)
|
* - No API key required (uses local Claude Code CLI)
|
||||||
* - Supports 'sonnet' and 'opus' models
|
* - Supported models loaded from supported-models.json
|
||||||
* - Command-specific configuration support
|
* - Command-specific configuration support
|
||||||
*/
|
*/
|
||||||
export class ClaudeCodeProvider extends BaseAIProvider {
|
export class ClaudeCodeProvider extends BaseAIProvider {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.name = 'Claude Code';
|
this.name = 'Claude Code';
|
||||||
this.supportedModels = ['sonnet', 'opus'];
|
// Load supported models from supported-models.json
|
||||||
|
this.supportedModels = getSupportedModelsForProvider('claude-code');
|
||||||
|
|
||||||
|
// Validate that models were loaded successfully
|
||||||
|
if (this.supportedModels.length === 0) {
|
||||||
|
log(
|
||||||
|
'warn',
|
||||||
|
'No supported models found for claude-code provider. Check supported-models.json configuration.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Claude Code requires explicit JSON schema mode
|
// Claude Code requires explicit JSON schema mode
|
||||||
this.needsExplicitJsonSchema = true;
|
this.needsExplicitJsonSchema = true;
|
||||||
// Claude Code does not support temperature parameter
|
// Claude Code does not support temperature parameter
|
||||||
|
|||||||
@@ -10,7 +10,10 @@ import { createCodexCli } from 'ai-sdk-provider-codex-cli';
|
|||||||
import { BaseAIProvider } from './base-provider.js';
|
import { BaseAIProvider } from './base-provider.js';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { log } from '../../scripts/modules/utils.js';
|
import { log } from '../../scripts/modules/utils.js';
|
||||||
import { getCodexCliSettingsForCommand } from '../../scripts/modules/config-manager.js';
|
import {
|
||||||
|
getCodexCliSettingsForCommand,
|
||||||
|
getSupportedModelsForProvider
|
||||||
|
} from '../../scripts/modules/config-manager.js';
|
||||||
|
|
||||||
export class CodexCliProvider extends BaseAIProvider {
|
export class CodexCliProvider extends BaseAIProvider {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -20,8 +23,17 @@ export class CodexCliProvider extends BaseAIProvider {
|
|||||||
this.needsExplicitJsonSchema = false;
|
this.needsExplicitJsonSchema = false;
|
||||||
// Codex CLI does not support temperature parameter
|
// Codex CLI does not support temperature parameter
|
||||||
this.supportsTemperature = false;
|
this.supportsTemperature = false;
|
||||||
// Restrict to supported models for OAuth subscription usage
|
// Load supported models from supported-models.json
|
||||||
this.supportedModels = ['gpt-5', 'gpt-5-codex'];
|
this.supportedModels = getSupportedModelsForProvider('codex-cli');
|
||||||
|
|
||||||
|
// Validate that models were loaded successfully
|
||||||
|
if (this.supportedModels.length === 0) {
|
||||||
|
log(
|
||||||
|
'warn',
|
||||||
|
'No supported models found for codex-cli provider. Check supported-models.json configuration.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// CLI availability check cache
|
// CLI availability check cache
|
||||||
this._codexCliChecked = false;
|
this._codexCliChecked = false;
|
||||||
this._codexCliAvailable = null;
|
this._codexCliAvailable = null;
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ describe('Claude Code Error Handling', () => {
|
|||||||
|
|
||||||
// These should work even if CLI is not available
|
// These should work even if CLI is not available
|
||||||
expect(provider.name).toBe('Claude Code');
|
expect(provider.name).toBe('Claude Code');
|
||||||
expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']);
|
expect(provider.getSupportedModels()).toEqual(['opus', 'sonnet', 'haiku']);
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(false);
|
expect(provider.isModelSupported('haiku')).toBe(true);
|
||||||
expect(provider.isRequiredApiKey()).toBe(false);
|
expect(provider.isRequiredApiKey()).toBe(false);
|
||||||
expect(() => provider.validateAuth()).not.toThrow();
|
expect(() => provider.validateAuth()).not.toThrow();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -40,14 +40,14 @@ describe('Claude Code Integration (Optional)', () => {
|
|||||||
it('should create a working provider instance', () => {
|
it('should create a working provider instance', () => {
|
||||||
const provider = new ClaudeCodeProvider();
|
const provider = new ClaudeCodeProvider();
|
||||||
expect(provider.name).toBe('Claude Code');
|
expect(provider.name).toBe('Claude Code');
|
||||||
expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']);
|
expect(provider.getSupportedModels()).toEqual(['opus', 'sonnet', 'haiku']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support model validation', () => {
|
it('should support model validation', () => {
|
||||||
const provider = new ClaudeCodeProvider();
|
const provider = new ClaudeCodeProvider();
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('opus')).toBe(true);
|
expect(provider.isModelSupported('opus')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(false);
|
expect(provider.isModelSupported('haiku')).toBe(true);
|
||||||
expect(provider.isModelSupported('unknown')).toBe(false);
|
expect(provider.isModelSupported('unknown')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,14 @@ jest.unstable_mockModule('../../../src/ai-providers/base-provider.js', () => ({
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// Mock config getters
|
||||||
|
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
||||||
|
getClaudeCodeSettingsForCommand: jest.fn(() => ({})),
|
||||||
|
getSupportedModelsForProvider: jest.fn(() => ['opus', 'sonnet', 'haiku']),
|
||||||
|
getDebugFlag: jest.fn(() => false),
|
||||||
|
getLogLevel: jest.fn(() => 'info')
|
||||||
|
}));
|
||||||
|
|
||||||
// Import after mocking
|
// Import after mocking
|
||||||
const { ClaudeCodeProvider } = await import(
|
const { ClaudeCodeProvider } = await import(
|
||||||
'../../../src/ai-providers/claude-code.js'
|
'../../../src/ai-providers/claude-code.js'
|
||||||
@@ -96,13 +104,13 @@ describe('ClaudeCodeProvider', () => {
|
|||||||
describe('model support', () => {
|
describe('model support', () => {
|
||||||
it('should return supported models', () => {
|
it('should return supported models', () => {
|
||||||
const models = provider.getSupportedModels();
|
const models = provider.getSupportedModels();
|
||||||
expect(models).toEqual(['sonnet', 'opus']);
|
expect(models).toEqual(['opus', 'sonnet', 'haiku']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should check if model is supported', () => {
|
it('should check if model is supported', () => {
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('opus')).toBe(true);
|
expect(provider.isModelSupported('opus')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(false);
|
expect(provider.isModelSupported('haiku')).toBe(true);
|
||||||
expect(provider.isModelSupported('unknown')).toBe(false);
|
expect(provider.isModelSupported('unknown')).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ jest.unstable_mockModule('ai-sdk-provider-codex-cli', () => ({
|
|||||||
// Mock config getters
|
// Mock config getters
|
||||||
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
||||||
getCodexCliSettingsForCommand: jest.fn(() => ({ allowNpx: true })),
|
getCodexCliSettingsForCommand: jest.fn(() => ({ allowNpx: true })),
|
||||||
|
getSupportedModelsForProvider: jest.fn(() => ['gpt-5', 'gpt-5-codex']),
|
||||||
// Provide commonly imported getters to satisfy other module imports if any
|
// Provide commonly imported getters to satisfy other module imports if any
|
||||||
getDebugFlag: jest.fn(() => false),
|
getDebugFlag: jest.fn(() => false),
|
||||||
getLogLevel: jest.fn(() => 'info')
|
getLogLevel: jest.fn(() => 'info')
|
||||||
|
|||||||
Reference in New Issue
Block a user