Skip to content

Commit a9b2b45

Browse files
committed
feat(ui): add model compatibility and github link
1 parent 9d0c483 commit a9b2b45

2 files changed

Lines changed: 27 additions & 16 deletions

File tree

src/constants/index.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,64 +57,69 @@ export const TASKS_FILE_WARN: (path: string) => string = (path: string) =>
5757
`tasks.json not found at "${path}". Please generate tasks from PRD first.`;
5858

5959
// ai models configuration
60+
const MODELS_COMPATIBILITY = {
61+
high: "🟢",
62+
medium: "🟡",
63+
low: "🟣",
64+
};
6065
export const AI_MODELS: I_AIModel[] = [
6166
{
62-
name: `Gemini 2.5 Flash (free) ${chalk.gray("(google > free | 1M context)")}`,
67+
name: `${MODELS_COMPATIBILITY.high} Gemini 2.5 Flash (free) ${chalk.gray("(google > free | 1M context)")}`,
6368
value: "gemini-2.5-flash",
6469
provider: null,
6570
},
6671
{
67-
name: `Gemini 2.5 Pro (free) ${chalk.gray("(google > free | 1M context)")}`,
72+
name: `${MODELS_COMPATIBILITY.high} Gemini 2.5 Pro (free) ${chalk.gray("(google > free | 1M context)")}`,
6873
value: "gemini-2.5-pro",
6974
provider: null,
7075
},
7176
{
72-
name: `Qwen 3 Coder ${chalk.gray("(openrouter > $0.20/M input | $0.80/M output | 262k context)")}`,
77+
name: `${MODELS_COMPATIBILITY.medium} Qwen 3 Coder ${chalk.gray("(openrouter > $0.20/M input | $0.80/M output | 262k context)")}`,
7378
value: "qwen/qwen3-coder",
7479
provider: "openrouter",
7580
},
7681
{
77-
name: `Qwen Turbo ${chalk.gray("(openrouter > $0.05/M input | $0.20/M output | 1M context)")}`,
82+
name: `${MODELS_COMPATIBILITY.high} Qwen Turbo ${chalk.gray("(openrouter > $0.05/M input | $0.20/M output | 1M context)")}`,
7883
value: "qwen/qwen-turbo",
7984
provider: "openrouter",
8085
},
8186
{
82-
name: `DeepSeek R1‑0528 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
87+
name: `${MODELS_COMPATIBILITY.medium} DeepSeek R1‑0528 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
8388
value: "deepseek/deepseek-r1-0528",
8489
provider: "openrouter",
8590
},
8691
{
87-
name: `DeepSeek R1‑0528 (free) ${chalk.gray("(openrouter > free | 163k context)")}`,
92+
name: `${MODELS_COMPATIBILITY.low} DeepSeek R1‑0528 (free) ${chalk.gray("(openrouter > free | 163k context)")}`,
8893
value: "deepseek/deepseek-r1-0528:free",
8994
provider: "openrouter",
9095
},
9196
{
92-
name: `DeepSeek Chat V3‑0324 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
97+
name: `${MODELS_COMPATIBILITY.high} DeepSeek Chat V3‑0324 ${chalk.gray("(openrouter > $0.18/M input | $0.72/M output | 163k context)")}`,
9398
value: "deepseek/deepseek-chat-v3-0324",
9499
provider: "openrouter",
95100
},
96101
{
97-
name: `DeepSeek Chat V3‑0324 (free) ${chalk.gray("(openrouter > fre | 163k context)")}`,
102+
name: `${MODELS_COMPATIBILITY.low} DeepSeek Chat V3‑0324 (free) ${chalk.gray("(openrouter > fre | 163k context)")}`,
98103
value: "deepseek/deepseek-chat-v3-0324:free",
99104
provider: "openrouter",
100105
},
101106
{
102-
name: `Mistral DevStral Small 1.1 ${chalk.gray("(openrouter > $0.07/M input | $0.28/M output | 128k context)")}`,
107+
name: `${MODELS_COMPATIBILITY.high} Mistral DevStral Small 1.1 ${chalk.gray("(openrouter > $0.07/M input | $0.28/M output | 128k context)")}`,
103108
value: "mistralai/devstral-small",
104109
provider: "openrouter",
105110
},
106111
{
107-
name: `Horizon Beta (free) ${chalk.gray("(openrouter > free | 256k context | training)")}`,
112+
name: `${MODELS_COMPATIBILITY.medium} Horizon Beta (free) ${chalk.gray("(openrouter > free | 256k context | training)")}`,
108113
value: "openrouter/horizon-beta",
109114
provider: "openrouter",
110115
},
111116
{
112-
name: `Kimi K2 ${chalk.gray("(openrouter > $0.14/M input | $2.49/M output | 63k context)")}`,
117+
name: `${MODELS_COMPATIBILITY.medium} Kimi K2 ${chalk.gray("(openrouter > $0.14/M input | $2.49/M output | 63k context)")}`,
113118
value: "moonshotai/kimi-k2",
114119
provider: "openrouter",
115120
},
116121
{
117-
name: `Kimi K2 (free) ${chalk.gray("(openrouter > free | 32k context)")}`,
122+
name: `${MODELS_COMPATIBILITY.low} Kimi K2 (free) ${chalk.gray("(openrouter > free | 32k context)")}`,
118123
value: "moonshotai/kimi-k2:free",
119124
provider: "openrouter",
120125
},
@@ -174,12 +179,12 @@ export const SUBTASK_TO_TASK_RULES = [
174179
];
175180

176181
// notes
177-
export const NOTE_MODELS =
178-
"Note: This list is optimized for faster TMAI testing using free or high-quota models. These models are also fully suitable for real-world projects. Additional models — including popular paid options with highly competitive pricing — are also available, mostly via the OpenRouter provider";
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.`;
179183
export const NOTE_LANGS =
180184
"Note: Make sure the LLM used by TMAI supports the language you choose!";
181185

182186
// extras
187+
export const GITHUB_URL = "https://github.com/RajaRakoto/taskmaster-cli";
183188
export const DEFAULT_COUNTDOWN = 10;
184189
export const PACKAGE_MANAGERS = ["npm", "pnpm", "bun"] as const;
185190
export const LANGS = [

src/utils/ascii.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import chalk from "chalk";
66
import pkg from "../../package.json";
77

88
/* constants */
9-
import { DEV_MODE, FONT_PATH } from "@/constants";
9+
import { DEV_MODE, FONT_PATH, GITHUB_URL } from "@/constants";
1010

1111
/* utils */
1212
import { resolveRealPathAsync, readFileAsync } from "@/utils/extras";
@@ -35,7 +35,13 @@ export async function bannerRendererAsync(
3535
});
3636
const coloredBanner = chalk.magenta(rendered);
3737
const packageVersion = pkg.version;
38-
const result = `${coloredBanner}\n ${chalk.underline("version:")} ${packageVersion}${DEV_MODE ? ` ${chalk.yellow("(dev mode)")}` : ""}\n\n ${description}`;
38+
const result = [
39+
coloredBanner,
40+
`\n ${chalk.underline("version:")} ${chalk.bgGray(packageVersion)}`,
41+
DEV_MODE ? ` ${chalk.yellow("(dev mode)")}` : "",
42+
`\n ${chalk.underline("github:")} ${chalk.bgGray(GITHUB_URL)}`,
43+
`\n\n ${description}`,
44+
].join("");
3945
resolve(result);
4046
} catch (error) {
4147
reject(

0 commit comments

Comments
 (0)