Skip to content

Commit 0c2f6af

Browse files
committed
Merge branch 'dev'
2 parents bd90b72 + 3ad0f5e commit 0c2f6af

15 files changed

Lines changed: 1146 additions & 337 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,4 @@ backups
9595
docs
9696
examples
9797
tmp
98+
\n# TaskMaster CLI config\n.taskmaster/config.json\n.taskmaster/state.json

.taskmaster/config.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
"models": {
33
"main": {
44
"provider": "gemini-cli",
5-
"modelId": "gemini-2.5-pro",
5+
"modelId": "gemini-2.5-flash",
66
"maxTokens": 65536,
77
"temperature": 0.2
88
},
99
"research": {
1010
"provider": "gemini-cli",
11-
"modelId": "gemini-2.5-pro",
11+
"modelId": "gemini-2.5-flash",
1212
"maxTokens": 65536,
1313
"temperature": 0.1
1414
},
1515
"fallback": {
1616
"provider": "gemini-cli",
17-
"modelId": "gemini-2.5-pro",
17+
"modelId": "gemini-2.5-flash",
1818
"maxTokens": 65536,
1919
"temperature": 0.2
2020
}

.taskmaster/state.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"currentTag": "master",
3-
"lastSwitched": "2025-07-22T11:49:13.447Z",
3+
"lastSwitched": "2025-08-06T21:43:11.699Z",
44
"branchTagMapping": {},
55
"migrationNoticeShown": true
66
}

bun.lock

Lines changed: 346 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@
7474
"qtype:tasks": "quicktype .taskmaster/tasks/tasks.json -o src/@types/tasks.d.ts --just-types"
7575
},
7676
"dependencies": {
77-
"chalk": "^5.4.1",
77+
"chalk": "^5.5.0",
7878
"commander": "^14.0.0",
7979
"compressing": "^1.10.3",
8080
"execa": "^9.6.0",
81-
"figlet": "^1.8.1",
81+
"figlet": "^1.8.2",
8282
"figures": "^6.1.0",
8383
"inquirer": "^9.2.15",
8484
"node-emoji": "^2.2.0",
@@ -101,11 +101,11 @@
101101
"grunt": "^1.6.1",
102102
"grunt-contrib-compress": "^2.0.0",
103103
"grunt-shell": "^4.0.0",
104-
"jest": "^30.0.0",
104+
"jest": "^30.0.5",
105105
"load-grunt-tasks": "^5.1.0",
106-
"npm-check-updates": "^18.0.1",
106+
"npm-check-updates": "^18.0.2",
107107
"rimraf": "^6.0.1",
108-
"ts-jest": "^29.4.0",
108+
"ts-jest": "^29.4.1",
109109
"ungit": "^1.5.28"
110110
},
111111
"peerDependencies": {

src/@types/index.d.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,17 @@
11
export type T_PackageManager = "npm" | "pnpm" | "bun";
2+
3+
export const VALID_PROVIDERS = [
4+
"openrouter",
5+
"ollama",
6+
"bedrock",
7+
"azure",
8+
"vertex",
9+
] as const;
10+
11+
export type T_Provider = (typeof VALID_PROVIDERS)[number];
12+
13+
export interface I_AIModel {
14+
name: string;
15+
value: string;
16+
provider: T_Provider | null;
17+
}

src/constants/index.ts

Lines changed: 106 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
/* libs */
2+
import chalk from "chalk";
3+
4+
/* types */
5+
import type { I_AIModel } from "@/@types/index";
6+
7+
// ===============================
8+
19
// dev
210
export const DEV_MODE = true;
311

@@ -7,6 +15,8 @@ export const PRD_PATH = DEV_MODE ? "docs/PRD-todo.md" : "docs/PRD.md";
715
export const TASKS_PATH = ".taskmaster/tasks/tasks.json";
816
export const TASKS_SRC_PATH = ".taskmaster";
917
export const TASKS_BCK_DEST_PATH = "backups/tmai-backup";
18+
export const REPORT_PATH = ".taskmaster/reports/task-complexity-report.json";
19+
export const README_PATH = "README.md";
1020

1121
// tasks
1222
export const MAIN_COMMAND = "task-master";
@@ -41,42 +51,78 @@ export const MAX_TITLE_TRUNC_LENGTH = 40;
4151
export const MAX_DESCRIPTION_LENGTH = 250;
4252
export const MAX_PROMPT_LENGTH = 1024;
4353

44-
// status configuration
45-
export const STATUS_CONFIG = {
46-
todo: { icon: "○", color: "gray" },
47-
"in-progress": { icon: "▶", color: "yellow" },
48-
done: { icon: "✓", color: "green" },
49-
blocked: { icon: "✗", color: "red" },
50-
pending: { icon: "…", color: "gray" },
51-
review: { icon: "★", color: "blue" },
52-
deferred: { icon: "↓", color: "magenta" },
53-
cancelled: { icon: "✗", color: "redBright" },
54-
};
55-
56-
// package managers
57-
export const PACKAGE_MANAGERS = ["npm", "pnpm", "bun"] as const;
58-
5954
// common messages
6055
export const TASKMASTER_INIT_MSG = "TaskMaster AI Core initialized";
6156
export const TASKS_FILE_WARN: (path: string) => string = (path: string) =>
6257
`tasks.json not found at "${path}". Please generate tasks from PRD first.`;
6358

64-
// supported languages for TMAI responses
65-
export const LANG = [
66-
"English",
67-
"Chinese",
68-
"Japanese",
69-
"French",
70-
"Spanish",
71-
"German",
72-
"Portuguese",
73-
"Italian",
74-
] as const;
75-
7659
// ai models configuration
77-
export const AI_MODELS = [
78-
{ name: "Gemini 2.5 Pro", value: "gemini-2.5-pro" },
79-
{ name: "Gemini 2.5 Flash", value: "gemini-2.5-flash" },
60+
const MODELS_COMPATIBILITY = {
61+
high: "🟢",
62+
medium: "🟡",
63+
low: "🟣",
64+
};
65+
export const AI_MODELS: I_AIModel[] = [
66+
{
67+
name: `${MODELS_COMPATIBILITY.high} Gemini 2.5 Flash (free) ${chalk.gray("(google > free | 1M context)")}`,
68+
value: "gemini-2.5-flash",
69+
provider: null,
70+
},
71+
{
72+
name: `${MODELS_COMPATIBILITY.high} Gemini 2.5 Pro (free) ${chalk.gray("(google > free | 1M context)")}`,
73+
value: "gemini-2.5-pro",
74+
provider: null,
75+
},
76+
{
77+
name: `${MODELS_COMPATIBILITY.medium} Qwen 3 Coder ${chalk.gray("(openrouter > $0.20/M input | $0.80/M output | 262k context)")}`,
78+
value: "qwen/qwen3-coder",
79+
provider: "openrouter",
80+
},
81+
{
82+
name: `${MODELS_COMPATIBILITY.high} Qwen Turbo ${chalk.gray("(openrouter > $0.05/M input | $0.20/M output | 1M context)")}`,
83+
value: "qwen/qwen-turbo",
84+
provider: "openrouter",
85+
},
86+
{
87+
name: `${MODELS_COMPATIBILITY.medium} DeepSeek R1‑0528 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
88+
value: "deepseek/deepseek-r1-0528",
89+
provider: "openrouter",
90+
},
91+
{
92+
name: `${MODELS_COMPATIBILITY.low} DeepSeek R1‑0528 (free) ${chalk.gray("(openrouter > free | 163k context)")}`,
93+
value: "deepseek/deepseek-r1-0528:free",
94+
provider: "openrouter",
95+
},
96+
{
97+
name: `${MODELS_COMPATIBILITY.high} DeepSeek Chat V3‑0324 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
98+
value: "deepseek/deepseek-chat-v3-0324",
99+
provider: "openrouter",
100+
},
101+
{
102+
name: `${MODELS_COMPATIBILITY.low} DeepSeek Chat V3‑0324 (free) ${chalk.gray("(openrouter > fre | 163k context)")}`,
103+
value: "deepseek/deepseek-chat-v3-0324:free",
104+
provider: "openrouter",
105+
},
106+
{
107+
name: `${MODELS_COMPATIBILITY.high} Mistral DevStral Small 1.1 ${chalk.gray("(openrouter > $0.07/M input | $0.28/M output | 128k context)")}`,
108+
value: "mistralai/devstral-small",
109+
provider: "openrouter",
110+
},
111+
{
112+
name: `${MODELS_COMPATIBILITY.medium} Horizon Beta (free) ${chalk.gray("(openrouter > free | 256k context | training)")}`,
113+
value: "openrouter/horizon-beta",
114+
provider: "openrouter",
115+
},
116+
{
117+
name: `${MODELS_COMPATIBILITY.medium} Kimi K2 ${chalk.gray("(openrouter > $0.14/M input | $2.49/M output | 63k context)")}`,
118+
value: "moonshotai/kimi-k2",
119+
provider: "openrouter",
120+
},
121+
{
122+
name: `${MODELS_COMPATIBILITY.low} Kimi K2 (free) ${chalk.gray("(openrouter > free | 32k context)")}`,
123+
value: "moonshotai/kimi-k2:free",
124+
provider: "openrouter",
125+
},
80126
];
81127

82128
// task conversion rules
@@ -131,3 +177,33 @@ export const SUBTASK_TO_TASK_RULES = [
131177
example: "Subtask #1.2 becomes Task #4 (next available ID)",
132178
},
133179
];
180+
181+
// notes
182+
export const NOTE_MODELS = `Note: Model compatibility levels are indicated by: ${MODELS_COMPATIBILITY.high} high (most reliable), ${MODELS_COMPATIBILITY.medium} medium, ${MODELS_COMPATIBILITY.low} low. Higher compatibility means more reliable TMAI operations with fewer errors. While all models can perform tasks, those with higher compatibility are recommended for critical operations. Additional models — including popular paid options with competitive pricing — are available, mostly via OpenRouter.`;
183+
export const NOTE_LANGS =
184+
"Note: Make sure the LLM used by TMAI supports the language you choose!";
185+
186+
// extras
187+
export const GITHUB_URL = "https://github.com/RajaRakoto/taskmaster-cli";
188+
export const DEFAULT_COUNTDOWN = 10;
189+
export const PACKAGE_MANAGERS = ["npm", "pnpm", "bun"] as const;
190+
export const LANGS = [
191+
"English",
192+
"Chinese",
193+
"Japanese",
194+
"French",
195+
"Spanish",
196+
"German",
197+
"Portuguese",
198+
"Italian",
199+
] as const;
200+
export const STATUS_CONFIG = {
201+
todo: { icon: "○", color: "gray" },
202+
"in-progress": { icon: "▶", color: "yellow" },
203+
done: { icon: "✓", color: "green" },
204+
blocked: { icon: "✗", color: "red" },
205+
pending: { icon: "…", color: "gray" },
206+
review: { icon: "★", color: "blue" },
207+
deferred: { icon: "↓", color: "magenta" },
208+
cancelled: { icon: "✗", color: "redBright" },
209+
};

0 commit comments

Comments
 (0)