Compare commits
3 Commits
task-maste
...
chore/prep
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bd03d0d32 | ||
|
|
dc44ed9de8 | ||
|
|
31b8407dbc |
16
.changeset/pre.json
Normal file
16
.changeset/pre.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"mode": "pre",
|
||||||
|
"tag": "rc",
|
||||||
|
"initialVersions": {
|
||||||
|
"task-master-ai": "0.21.0",
|
||||||
|
"extension": "0.20.0"
|
||||||
|
},
|
||||||
|
"changesets": [
|
||||||
|
"fix-gemini-cli-dependency",
|
||||||
|
"fresh-bugs-squashed",
|
||||||
|
"happy-sites-stay",
|
||||||
|
"orange-pots-add",
|
||||||
|
"quiet-rabbits-bathe",
|
||||||
|
"swift-otters-argue"
|
||||||
|
]
|
||||||
|
}
|
||||||
5
.changeset/thick-squids-attend.md
Normal file
5
.changeset/thick-squids-attend.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"task-master-ai": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Prompt to generate a complexity report when it is missing
|
||||||
343
.taskmaster/docs/tm-core-phase-1.txt
Normal file
343
.taskmaster/docs/tm-core-phase-1.txt
Normal file
@@ -0,0 +1,343 @@
|
|||||||
|
# Product Requirements Document: tm-core Package - Parse PRD Feature
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
Create a TypeScript package named `tm-core` at `packages/tm-core` that implements parse-prd functionality using class-based architecture similar to the existing AI providers pattern.
|
||||||
|
|
||||||
|
## Design Patterns & Architecture
|
||||||
|
|
||||||
|
### Patterns to Apply
|
||||||
|
1. **Factory Pattern**: Use for `ProviderFactory` to create AI provider instances
|
||||||
|
2. **Strategy Pattern**: Use for `IAIProvider` implementations and `IStorage` implementations
|
||||||
|
3. **Facade Pattern**: Use for `TaskMasterCore` as the main API entry point
|
||||||
|
4. **Template Method Pattern**: Use for `BaseProvider` abstract class
|
||||||
|
5. **Dependency Injection**: Use throughout for testability (pass dependencies via constructor)
|
||||||
|
6. **Repository Pattern**: Use for `FileStorage` to abstract data persistence
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
- **Files**: kebab-case (e.g., `task-parser.ts`, `file-storage.ts`)
|
||||||
|
- **Classes**: PascalCase (e.g., `TaskParser`, `FileStorage`)
|
||||||
|
- **Interfaces**: PascalCase with 'I' prefix (e.g., `IStorage`, `IAIProvider`)
|
||||||
|
- **Methods**: camelCase (e.g., `parsePRD`, `loadTasks`)
|
||||||
|
- **Constants**: UPPER_SNAKE_CASE (e.g., `DEFAULT_MODEL`)
|
||||||
|
- **Type aliases**: PascalCase (e.g., `TaskStatus`, `ParseOptions`)
|
||||||
|
|
||||||
|
## Exact Folder Structure Required
|
||||||
|
```
|
||||||
|
packages/tm-core/
|
||||||
|
├── src/
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── types/
|
||||||
|
│ │ └── index.ts
|
||||||
|
│ ├── interfaces/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ ├── storage.interface.ts
|
||||||
|
│ │ ├── ai-provider.interface.ts
|
||||||
|
│ │ └── configuration.interface.ts
|
||||||
|
│ ├── tasks/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ └── task-parser.ts
|
||||||
|
│ ├── ai/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ ├── base-provider.ts
|
||||||
|
│ │ ├── provider-factory.ts
|
||||||
|
│ │ ├── prompt-builder.ts
|
||||||
|
│ │ └── providers/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ ├── anthropic-provider.ts
|
||||||
|
│ │ ├── openai-provider.ts
|
||||||
|
│ │ └── google-provider.ts
|
||||||
|
│ ├── storage/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ └── file-storage.ts
|
||||||
|
│ ├── config/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ └── config-manager.ts
|
||||||
|
│ ├── utils/
|
||||||
|
│ │ ├── index.ts # Barrel export
|
||||||
|
│ │ └── id-generator.ts
|
||||||
|
│ └── errors/
|
||||||
|
│ ├── index.ts # Barrel export
|
||||||
|
│ └── task-master-error.ts
|
||||||
|
├── tests/
|
||||||
|
│ ├── task-parser.test.ts
|
||||||
|
│ ├── integration/
|
||||||
|
│ │ └── parse-prd.test.ts
|
||||||
|
│ └── mocks/
|
||||||
|
│ └── mock-provider.ts
|
||||||
|
├── package.json
|
||||||
|
├── tsconfig.json
|
||||||
|
├── tsup.config.js
|
||||||
|
└── jest.config.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## Specific Implementation Requirements
|
||||||
|
|
||||||
|
### 1. Create types/index.ts
|
||||||
|
Define these exact TypeScript interfaces:
|
||||||
|
- `Task` interface with fields: id, title, description, status, priority, complexity, dependencies, subtasks, metadata, createdAt, updatedAt, source
|
||||||
|
- `Subtask` interface with fields: id, title, description, completed
|
||||||
|
- `TaskMetadata` interface with fields: parsedFrom, aiProvider, version, tags (optional)
|
||||||
|
- Type literals: `TaskStatus` = 'pending' | 'in-progress' | 'completed' | 'blocked'
|
||||||
|
- Type literals: `TaskPriority` = 'low' | 'medium' | 'high' | 'critical'
|
||||||
|
- Type literals: `TaskComplexity` = 'simple' | 'moderate' | 'complex'
|
||||||
|
- `ParseOptions` interface with fields: dryRun (optional), additionalContext (optional), tag (optional), maxTasks (optional)
|
||||||
|
|
||||||
|
### 2. Create interfaces/storage.interface.ts
|
||||||
|
Define `IStorage` interface with these exact methods:
|
||||||
|
- `loadTasks(tag?: string): Promise<Task[]>`
|
||||||
|
- `saveTasks(tasks: Task[], tag?: string): Promise<void>`
|
||||||
|
- `appendTasks(tasks: Task[], tag?: string): Promise<void>`
|
||||||
|
- `updateTask(id: string, task: Partial<Task>, tag?: string): Promise<void>`
|
||||||
|
- `deleteTask(id: string, tag?: string): Promise<void>`
|
||||||
|
- `exists(tag?: string): Promise<boolean>`
|
||||||
|
|
||||||
|
### 3. Create interfaces/ai-provider.interface.ts
|
||||||
|
Define `IAIProvider` interface with these exact methods:
|
||||||
|
- `generateCompletion(prompt: string, options?: AIOptions): Promise<string>`
|
||||||
|
- `calculateTokens(text: string): number`
|
||||||
|
- `getName(): string`
|
||||||
|
- `getModel(): string`
|
||||||
|
|
||||||
|
Define `AIOptions` interface with fields: temperature (optional), maxTokens (optional), systemPrompt (optional)
|
||||||
|
|
||||||
|
### 4. Create interfaces/configuration.interface.ts
|
||||||
|
Define `IConfiguration` interface with fields:
|
||||||
|
- `projectPath: string`
|
||||||
|
- `aiProvider: string`
|
||||||
|
- `apiKey?: string`
|
||||||
|
- `aiOptions?: AIOptions`
|
||||||
|
- `mainModel?: string`
|
||||||
|
- `researchModel?: string`
|
||||||
|
- `fallbackModel?: string`
|
||||||
|
- `tasksPath?: string`
|
||||||
|
- `enableTags?: boolean`
|
||||||
|
|
||||||
|
### 5. Create tasks/task-parser.ts
|
||||||
|
Create class `TaskParser` with:
|
||||||
|
- Constructor accepting `aiProvider: IAIProvider` and `config: IConfiguration`
|
||||||
|
- Private property `promptBuilder: PromptBuilder`
|
||||||
|
- Public method `parsePRD(prdPath: string, options: ParseOptions = {}): Promise<Task[]>`
|
||||||
|
- Private method `readPRD(prdPath: string): Promise<string>`
|
||||||
|
- Private method `extractTasks(aiResponse: string): Partial<Task>[]`
|
||||||
|
- Private method `enrichTasks(rawTasks: Partial<Task>[], prdPath: string): Task[]`
|
||||||
|
- Apply **Dependency Injection** pattern via constructor
|
||||||
|
|
||||||
|
### 6. Create ai/base-provider.ts
|
||||||
|
Copy existing base-provider.js and convert to TypeScript abstract class:
|
||||||
|
- Abstract class `BaseProvider` implementing `IAIProvider`
|
||||||
|
- Protected properties: `apiKey: string`, `model: string`
|
||||||
|
- Constructor accepting `apiKey: string` and `options: { model?: string }`
|
||||||
|
- Abstract methods matching IAIProvider interface
|
||||||
|
- Abstract method `getDefaultModel(): string`
|
||||||
|
- Apply **Template Method** pattern for common provider logic
|
||||||
|
|
||||||
|
### 7. Create ai/provider-factory.ts
|
||||||
|
Create class `ProviderFactory` with:
|
||||||
|
- Static method `create(config: { provider: string; apiKey?: string; model?: string }): Promise<IAIProvider>`
|
||||||
|
- Switch statement for providers: 'anthropic', 'openai', 'google'
|
||||||
|
- Dynamic imports for each provider
|
||||||
|
- Throw error for unknown providers
|
||||||
|
- Apply **Factory** pattern for creating provider instances
|
||||||
|
|
||||||
|
Example implementation structure:
|
||||||
|
```typescript
|
||||||
|
switch (provider.toLowerCase()) {
|
||||||
|
case 'anthropic':
|
||||||
|
const { AnthropicProvider } = await import('./providers/anthropic-provider.js');
|
||||||
|
return new AnthropicProvider(apiKey, { model });
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Create ai/providers/anthropic-provider.ts
|
||||||
|
Create class `AnthropicProvider` extending `BaseProvider`:
|
||||||
|
- Import Anthropic SDK: `import { Anthropic } from '@anthropic-ai/sdk'`
|
||||||
|
- Private property `client: Anthropic`
|
||||||
|
- Implement all abstract methods from BaseProvider
|
||||||
|
- Default model: 'claude-3-sonnet-20240229'
|
||||||
|
- Handle API errors and wrap with meaningful messages
|
||||||
|
|
||||||
|
### 9. Create ai/providers/openai-provider.ts (placeholder)
|
||||||
|
Create class `OpenAIProvider` extending `BaseProvider`:
|
||||||
|
- Import OpenAI SDK when implemented
|
||||||
|
- For now, throw error: "OpenAI provider not yet implemented"
|
||||||
|
|
||||||
|
### 10. Create ai/providers/google-provider.ts (placeholder)
|
||||||
|
Create class `GoogleProvider` extending `BaseProvider`:
|
||||||
|
- Import Google Generative AI SDK when implemented
|
||||||
|
- For now, throw error: "Google provider not yet implemented"
|
||||||
|
|
||||||
|
### 11. Create ai/prompt-builder.ts
|
||||||
|
Create class `PromptBuilder` with:
|
||||||
|
- Method `buildParsePrompt(prdContent: string, options: ParseOptions = {}): string`
|
||||||
|
- Method `buildExpandPrompt(task: string, context?: string): string`
|
||||||
|
- Use template literals for prompt construction
|
||||||
|
- Include specific JSON format instructions in prompts
|
||||||
|
|
||||||
|
### 9. Create storage/file-storage.ts
|
||||||
|
Create class `FileStorage` implementing `IStorage`:
|
||||||
|
- Private property `basePath: string` set to `{projectPath}/.taskmaster`
|
||||||
|
- Constructor accepting `projectPath: string`
|
||||||
|
- Private method `getTasksPath(tag?: string): string` returning correct path based on tag
|
||||||
|
- Private method `ensureDirectory(dir: string): Promise<void>`
|
||||||
|
- Implement all IStorage methods
|
||||||
|
- Handle ENOENT errors by returning empty arrays
|
||||||
|
- Use JSON format with structure: `{ tasks: Task[], metadata: { version: string, lastModified: string } }`
|
||||||
|
- Apply **Repository** pattern for data access abstraction
|
||||||
|
|
||||||
|
### 10. Create config/config-manager.ts
|
||||||
|
Create class `ConfigManager`:
|
||||||
|
- Private property `config: IConfiguration`
|
||||||
|
- Constructor accepting `options: Partial<IConfiguration>`
|
||||||
|
- Use Zod for validation with schema matching IConfiguration
|
||||||
|
- Method `get<K extends keyof IConfiguration>(key: K): IConfiguration[K]`
|
||||||
|
- Method `getAll(): IConfiguration`
|
||||||
|
- Method `validate(): boolean`
|
||||||
|
- Default values: projectPath = process.cwd(), aiProvider = 'anthropic', enableTags = true
|
||||||
|
|
||||||
|
### 11. Create utils/id-generator.ts
|
||||||
|
Export functions:
|
||||||
|
- `generateTaskId(index: number = 0): string` returning format `task_{timestamp}_{index}_{random}`
|
||||||
|
- `generateSubtaskId(parentId: string, index: number = 0): string` returning format `{parentId}_sub_{index}_{random}`
|
||||||
|
|
||||||
|
### 16. Create src/index.ts
|
||||||
|
Create main class `TaskMasterCore`:
|
||||||
|
- Private properties: `config: ConfigManager`, `storage: IStorage`, `aiProvider?: IAIProvider`, `parser?: TaskParser`
|
||||||
|
- Constructor accepting `options: Partial<IConfiguration>`
|
||||||
|
- Method `initialize(): Promise<void>` for lazy loading
|
||||||
|
- Method `parsePRD(prdPath: string, options: ParseOptions = {}): Promise<Task[]>`
|
||||||
|
- Method `getTasks(tag?: string): Promise<Task[]>`
|
||||||
|
- Apply **Facade** pattern to provide simple API over complex subsystems
|
||||||
|
|
||||||
|
Export:
|
||||||
|
- Class `TaskMasterCore`
|
||||||
|
- Function `createTaskMaster(options: Partial<IConfiguration>): TaskMasterCore`
|
||||||
|
- All types from './types'
|
||||||
|
- All interfaces from './interfaces/*'
|
||||||
|
|
||||||
|
Import statements should use kebab-case:
|
||||||
|
```typescript
|
||||||
|
import { TaskParser } from './tasks/task-parser';
|
||||||
|
import { FileStorage } from './storage/file-storage';
|
||||||
|
import { ConfigManager } from './config/config-manager';
|
||||||
|
import { ProviderFactory } from './ai/provider-factory';
|
||||||
|
```
|
||||||
|
|
||||||
|
### 17. Configure package.json
|
||||||
|
Create package.json with:
|
||||||
|
- name: "@task-master/core"
|
||||||
|
- version: "0.1.0"
|
||||||
|
- type: "module"
|
||||||
|
- main: "./dist/index.js"
|
||||||
|
- module: "./dist/index.mjs"
|
||||||
|
- types: "./dist/index.d.ts"
|
||||||
|
- exports map for proper ESM/CJS support
|
||||||
|
- scripts: build (tsup), dev (tsup --watch), test (jest), typecheck (tsc --noEmit)
|
||||||
|
- dependencies: zod@^3.23.8
|
||||||
|
- peerDependencies: @anthropic-ai/sdk, openai, @google/generative-ai
|
||||||
|
- devDependencies: typescript, tsup, jest, ts-jest, @types/node, @types/jest
|
||||||
|
|
||||||
|
### 18. Configure TypeScript
|
||||||
|
Create tsconfig.json with:
|
||||||
|
- target: "ES2022"
|
||||||
|
- module: "ESNext"
|
||||||
|
- strict: true (with all strict flags enabled)
|
||||||
|
- declaration: true
|
||||||
|
- outDir: "./dist"
|
||||||
|
- rootDir: "./src"
|
||||||
|
|
||||||
|
### 19. Configure tsup
|
||||||
|
Create tsup.config.js with:
|
||||||
|
- entry: ['src/index.ts']
|
||||||
|
- format: ['cjs', 'esm']
|
||||||
|
- dts: true
|
||||||
|
- sourcemap: true
|
||||||
|
- clean: true
|
||||||
|
- external: AI provider SDKs
|
||||||
|
|
||||||
|
### 20. Configure Jest
|
||||||
|
Create jest.config.js with:
|
||||||
|
- preset: 'ts-jest'
|
||||||
|
- testEnvironment: 'node'
|
||||||
|
- Coverage threshold: 80% for all metrics
|
||||||
|
|
||||||
|
## Build Process
|
||||||
|
1. Use tsup to compile TypeScript to both CommonJS and ESM
|
||||||
|
2. Generate .d.ts files for TypeScript consumers
|
||||||
|
3. Output to dist/ directory
|
||||||
|
4. Ensure tree-shaking works properly
|
||||||
|
|
||||||
|
## Testing Requirements
|
||||||
|
- Create unit tests for TaskParser in tests/task-parser.test.ts
|
||||||
|
- Create MockProvider class in tests/mocks/mock-provider.ts for testing without API calls
|
||||||
|
- Test error scenarios (file not found, invalid JSON, etc.)
|
||||||
|
- Create integration test in tests/integration/parse-prd.test.ts
|
||||||
|
- Follow kebab-case naming for all test files
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
- TypeScript compilation with zero errors
|
||||||
|
- No use of 'any' type
|
||||||
|
- All interfaces properly exported
|
||||||
|
- Compatible with existing tasks.json format
|
||||||
|
- Feature flag support via USE_TM_CORE environment variable
|
||||||
|
|
||||||
|
## Import/Export Conventions
|
||||||
|
- Use named exports for all classes and interfaces
|
||||||
|
- Use barrel exports (index.ts) in each directory
|
||||||
|
- Import types/interfaces with type-only imports: `import type { Task } from '../types'`
|
||||||
|
- Group imports in order: Node built-ins, external packages, internal packages, relative imports
|
||||||
|
- Use .js extension in import paths for ESM compatibility
|
||||||
|
|
||||||
|
## Error Handling Patterns
|
||||||
|
- Create custom error classes in `src/errors/` directory
|
||||||
|
- All public methods should catch and wrap errors with context
|
||||||
|
- Use error codes for different error types (e.g., 'FILE_NOT_FOUND', 'PARSE_ERROR')
|
||||||
|
- Never expose internal implementation details in error messages
|
||||||
|
- Log errors to console.error only in development mode
|
||||||
|
|
||||||
|
## Barrel Exports Content
|
||||||
|
|
||||||
|
### interfaces/index.ts
|
||||||
|
```typescript
|
||||||
|
export type { IStorage } from './storage.interface';
|
||||||
|
export type { IAIProvider, AIOptions } from './ai-provider.interface';
|
||||||
|
export type { IConfiguration } from './configuration.interface';
|
||||||
|
```
|
||||||
|
|
||||||
|
### tasks/index.ts
|
||||||
|
```typescript
|
||||||
|
export { TaskParser } from './task-parser';
|
||||||
|
```
|
||||||
|
|
||||||
|
### ai/index.ts
|
||||||
|
```typescript
|
||||||
|
export { BaseProvider } from './base-provider';
|
||||||
|
export { ProviderFactory } from './provider-factory';
|
||||||
|
export { PromptBuilder } from './prompt-builder';
|
||||||
|
```
|
||||||
|
|
||||||
|
### ai/providers/index.ts
|
||||||
|
```typescript
|
||||||
|
export { AnthropicProvider } from './anthropic-provider';
|
||||||
|
export { OpenAIProvider } from './openai-provider';
|
||||||
|
export { GoogleProvider } from './google-provider';
|
||||||
|
```
|
||||||
|
|
||||||
|
### storage/index.ts
|
||||||
|
```typescript
|
||||||
|
export { FileStorage } from './file-storage';
|
||||||
|
```
|
||||||
|
|
||||||
|
### config/index.ts
|
||||||
|
```typescript
|
||||||
|
export { ConfigManager } from './config-manager';
|
||||||
|
```
|
||||||
|
|
||||||
|
### utils/index.ts
|
||||||
|
```typescript
|
||||||
|
export { generateTaskId, generateSubtaskId } from './id-generator';
|
||||||
|
```
|
||||||
|
|
||||||
|
### errors/index.ts
|
||||||
|
```typescript
|
||||||
|
export { TaskMasterError } from './task-master-error';
|
||||||
|
```
|
||||||
39
CHANGELOG.md
39
CHANGELOG.md
@@ -1,5 +1,44 @@
|
|||||||
# task-master-ai
|
# task-master-ai
|
||||||
|
|
||||||
|
## 0.22.0-rc.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#1032](https://github.com/eyaltoledano/claude-task-master/pull/1032) [`4423119`](https://github.com/eyaltoledano/claude-task-master/commit/4423119a5ec53958c9dffa8bf564da8be7a2827d) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Add comprehensive Kiro IDE integration with autonomous task management hooks
|
||||||
|
- **Kiro Profile**: Added full support for Kiro IDE with automatic installation of 7 Taskmaster agent hooks
|
||||||
|
- **Hook-Driven Workflow**: Introduced natural language automation hooks that eliminate manual task status updates
|
||||||
|
- **Automatic Hook Installation**: Hooks are now automatically copied to `.kiro/hooks/` when running `task-master rules add kiro`
|
||||||
|
- **Language-Agnostic Support**: All hooks support multiple programming languages (JS, Python, Go, Rust, Java, etc.)
|
||||||
|
- **Frontmatter Transformation**: Kiro rules use simplified `inclusion: always` format instead of Cursor's complex frontmatter
|
||||||
|
- **Special Rule**: Added `taskmaster_hooks_workflow.md` that guides AI assistants to prefer hook-driven completion
|
||||||
|
|
||||||
|
Key hooks included:
|
||||||
|
- Task Dependency Auto-Progression: Automatically starts tasks when dependencies complete
|
||||||
|
- Code Change Task Tracker: Updates task progress as you save files
|
||||||
|
- Test Success Task Completer: Marks tasks done when tests pass
|
||||||
|
- Daily Standup Assistant: Provides personalized task status summaries
|
||||||
|
- PR Readiness Checker: Validates task completion before creating pull requests
|
||||||
|
- Complexity Analyzer: Auto-expands complex tasks into manageable subtasks
|
||||||
|
- Git Commit Task Linker: Links commits to tasks for better traceability
|
||||||
|
|
||||||
|
This creates a truly autonomous development workflow where task management happens naturally as you code!
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1033](https://github.com/eyaltoledano/claude-task-master/pull/1033) [`7b90568`](https://github.com/eyaltoledano/claude-task-master/commit/7b9056832653464f934c91c22997077065d738c4) Thanks [@ben-vargas](https://github.com/ben-vargas)! - Fix compatibility with @google/gemini-cli-core v0.1.12+ by updating ai-sdk-provider-gemini-cli to v0.1.1.
|
||||||
|
|
||||||
|
- [#1038](https://github.com/eyaltoledano/claude-task-master/pull/1038) [`77cc5e4`](https://github.com/eyaltoledano/claude-task-master/commit/77cc5e4537397642f2664f61940a101433ee6fb4) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix 'expand --all' and 'show' commands to correctly handle tag contexts for complexity reports and task display.
|
||||||
|
|
||||||
|
- [#1025](https://github.com/eyaltoledano/claude-task-master/pull/1025) [`8781794`](https://github.com/eyaltoledano/claude-task-master/commit/8781794c56d454697fc92c88a3925982d6b81205) Thanks [@joedanz](https://github.com/joedanz)! - Clean up remaining automatic task file generation calls
|
||||||
|
|
||||||
|
- [#1035](https://github.com/eyaltoledano/claude-task-master/pull/1035) [`fb7d588`](https://github.com/eyaltoledano/claude-task-master/commit/fb7d588137e8c53b0d0f54bd1dd8d387648583ee) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix max_tokens limits for OpenRouter and Groq models
|
||||||
|
- Add special handling in config-manager.js for custom OpenRouter models to use a conservative default of 32,768 max_tokens
|
||||||
|
- Update qwen/qwen-turbo model max_tokens from 1,000,000 to 32,768 to match OpenRouter's actual limits
|
||||||
|
- Fix moonshotai/kimi-k2-instruct max_tokens to 16,384 to match Groq's actual limit (fixes #1028)
|
||||||
|
- This prevents "maximum context length exceeded" errors when using OpenRouter models not in our supported models list
|
||||||
|
|
||||||
|
- [#1027](https://github.com/eyaltoledano/claude-task-master/pull/1027) [`6ae66b2`](https://github.com/eyaltoledano/claude-task-master/commit/6ae66b2afbfe911340fa25e0236c3db83deaa7eb) Thanks [@andreswebs](https://github.com/andreswebs)! - Fix VSCode profile generation to use correct rule file names (using `.instructions.md` extension instead of `.md`) and front-matter properties (removing the unsupported `alwaysApply` property from instructions files' front-matter).
|
||||||
|
|
||||||
## 0.21.0
|
## 0.21.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "task-master-ai",
|
"name": "task-master-ai",
|
||||||
"version": "0.21.0",
|
"version": "0.22.0-rc.0",
|
||||||
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import boxen from 'boxen';
|
|||||||
import ora from 'ora';
|
import ora from 'ora';
|
||||||
import Table from 'cli-table3';
|
import Table from 'cli-table3';
|
||||||
import gradient from 'gradient-string';
|
import gradient from 'gradient-string';
|
||||||
|
import readline from 'readline';
|
||||||
import {
|
import {
|
||||||
log,
|
log,
|
||||||
findTaskById,
|
findTaskById,
|
||||||
@@ -1682,18 +1683,15 @@ async function displayComplexityReport(reportPath) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
const readline = require('readline').createInterface({
|
const rl = readline.createInterface({
|
||||||
input: process.stdin,
|
input: process.stdin,
|
||||||
output: process.stdout
|
output: process.stdout
|
||||||
});
|
});
|
||||||
|
|
||||||
const answer = await new Promise((resolve) => {
|
const answer = await new Promise((resolve) => {
|
||||||
readline.question(
|
rl.question(chalk.cyan('Generate complexity report? (y/n): '), resolve);
|
||||||
chalk.cyan('Generate complexity report? (y/n): '),
|
|
||||||
resolve
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
readline.close();
|
rl.close();
|
||||||
|
|
||||||
if (answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes') {
|
if (answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes') {
|
||||||
// Call the analyze-complexity command
|
// Call the analyze-complexity command
|
||||||
@@ -1974,8 +1972,6 @@ async function confirmTaskOverwrite(tasksPath) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Use dynamic import to get the readline module
|
|
||||||
const readline = await import('readline');
|
|
||||||
const rl = readline.createInterface({
|
const rl = readline.createInterface({
|
||||||
input: process.stdin,
|
input: process.stdin,
|
||||||
output: process.stdout
|
output: process.stdout
|
||||||
@@ -2463,8 +2459,6 @@ async function displayMultipleTasksSummary(
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Use dynamic import for readline
|
|
||||||
const readline = await import('readline');
|
|
||||||
const rl = readline.createInterface({
|
const rl = readline.createInterface({
|
||||||
input: process.stdin,
|
input: process.stdin,
|
||||||
output: process.stdout
|
output: process.stdout
|
||||||
|
|||||||
Reference in New Issue
Block a user