mirror of
https://github.com/modelstudioai/cli.git
synced 2026-09-14 19:49:23 +08:00
Merge branch 'main' into feat/multi-channel-install
This commit is contained in:
@@ -24,7 +24,7 @@ _Built for AI Agents. Every command works as a structured tool call._
|
||||
|
||||
Equip your AI Agent out-of-the-box with these capabilities, composable across complex tasks:
|
||||
|
||||
- **Text chat** — Qwen3.7-max: major gains in agentic coding, frontend coding, and vibe coding
|
||||
- **Text chat** — Qwen3.8-max: major gains in agentic coding, frontend coding, and vibe coding
|
||||
- **Multimodal (Omni)** — Full omni-modal support across text + image + audio + video
|
||||
- **Image generation & editing** — Qwen-Image 2.0: pro text rendering, photorealism, strong semantic adherence, multi-image composition
|
||||
- **Video generation & editing** — happyhorse-1.1 series: text-/image-/reference-to-video and natural-language video editing (up to 9-image reference)
|
||||
|
||||
@@ -24,7 +24,7 @@ _专为 AI Agent 打造,每个命令均可作为结构化工具调用。_
|
||||
|
||||
让您的 AI Agent 开箱即具备以下能力,并可在复杂任务中自动组合调用:
|
||||
|
||||
- **文本对话** — Qwen3.7-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
|
||||
- **文本对话** — Qwen3.8-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
|
||||
- **全模态对话** — 文本 + 图像 + 音频 + 视频全模态支持
|
||||
- **图像生成与编辑** — Qwen-Image 2.0:专业文字渲染、真实质感、强语义遵循、多图合成
|
||||
- **视频生成与编辑** — happyhorse-1.1 系列,支持文生 / 图生 / 参考生(最多 9 张图参考)/ 自然语言视频编辑
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bailian-cli",
|
||||
"version": "1.13.0",
|
||||
"version": "1.13.1",
|
||||
"description": "CLI for Aliyun Model Studio (DashScope) AI Platform.",
|
||||
"keywords": [
|
||||
"agent",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bailian-cli-commands",
|
||||
"version": "1.13.0",
|
||||
"version": "1.13.1",
|
||||
"description": "Command library for bailian-cli products (knowledge, memory, media, …). See https://www.npmjs.com/package/bailian-cli for usage.",
|
||||
"homepage": "https://bailian.console.aliyun.com/cli",
|
||||
"bugs": {
|
||||
|
||||
@@ -57,7 +57,7 @@ export async function validateAndPersistApiKey(
|
||||
const persistBaseUrl = profile.persistBaseUrl
|
||||
? normalizeModelBaseUrl(profile.persistBaseUrl)
|
||||
: undefined;
|
||||
const validationModel = "qwen3.7-max";
|
||||
const validationModel = "qwen3.8-max";
|
||||
const requestOpts = {
|
||||
url: baseUrl + chatPath(),
|
||||
method: "POST",
|
||||
|
||||
@@ -60,7 +60,7 @@ export const UI_BOOLEAN_KEYS = new Set<string>(["telemetry"]);
|
||||
// are surfaced as input placeholders so users can see the effective default
|
||||
// without persisting a value that would pin the model.
|
||||
export const UI_MODEL_DEFAULTS: Record<string, string> = {
|
||||
default_text_model: "qwen3.7-max",
|
||||
default_text_model: "qwen3.8-max",
|
||||
default_image_model: "qwen-image-2.0",
|
||||
default_video_model: "happyhorse-1.1-t2v",
|
||||
default_speech_model: "cosyvoice-v3-flash",
|
||||
@@ -80,7 +80,7 @@ export interface ModelOption {
|
||||
// Only names present in the codebase are listed here — no invented models.
|
||||
export const UI_MODEL_CATALOG: Record<string, ModelOption[]> = {
|
||||
default_text_model: [
|
||||
{ id: "qwen3.7-max", role: "text/chat default" },
|
||||
{ id: "qwen3.8-max", role: "text/chat default" },
|
||||
{ id: "qwen3-coder-plus", role: "coding-oriented (agent config)" },
|
||||
{ id: "qwen-flash", role: "fast · advisor ranking" },
|
||||
{ id: "qwen3.6-flash", role: "fast · advisor intent" },
|
||||
|
||||
@@ -25,7 +25,7 @@ const PROVIDER_BLOCKS: Record<string, string> = {
|
||||
};
|
||||
|
||||
const SINGLE_MODEL: Record<string, string> = {
|
||||
bailian: ` model: qwen3.7-max`,
|
||||
bailian: ` model: qwen3.8-max`,
|
||||
claude: ` model: claude-sonnet-4-6`,
|
||||
qoder: ` model: ultimate`,
|
||||
ark: ` model: doubao-seed-2-1-pro-260628`,
|
||||
@@ -39,7 +39,7 @@ function buildTemplate(options: { provider: string; agentName: string }): string
|
||||
|
||||
const modelBlock =
|
||||
options.provider === "all"
|
||||
? ` model:\n bailian: qwen3.7-max\n claude: claude-sonnet-4-6\n qoder: ultimate\n ark: doubao-seed-2-1-pro-260628`
|
||||
? ` model:\n bailian: qwen3.8-max\n claude: claude-sonnet-4-6\n qoder: ultimate\n ark: doubao-seed-2-1-pro-260628`
|
||||
: SINGLE_MODEL[options.provider]!;
|
||||
|
||||
const toolBlock =
|
||||
|
||||
@@ -15,7 +15,7 @@ import { ansi, emitResult, emitBare } from "bailian-cli-runtime";
|
||||
import { readFileSync } from "fs";
|
||||
|
||||
const CHAT_FLAGS = {
|
||||
model: { type: "string", valueHint: "<model>", description: "Model ID (default: qwen3.7-max)" },
|
||||
model: { type: "string", valueHint: "<model>", description: "Model ID (default: qwen3.8-max)" },
|
||||
message: {
|
||||
type: "array",
|
||||
valueHint: "<text>",
|
||||
@@ -123,7 +123,7 @@ export default defineCommand({
|
||||
const { settings, flags } = ctx;
|
||||
const { system, messages } = parseMessages(flags);
|
||||
|
||||
const model = flags.model || settings.defaultTextModel || "qwen3.7-max";
|
||||
const model = flags.model || settings.defaultTextModel || "qwen3.8-max";
|
||||
const shouldStream = flags.stream || process.stdout.isTTY;
|
||||
const format = detectOutputFormat(settings.output);
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ test("GET /api/config 返回全部 profile、明文密钥与持久化激活项",
|
||||
expect(res.json.booleanKeys).toContain("telemetry");
|
||||
// Default field hints are surfaced as prefilled values in the UI.
|
||||
expect(res.json.fieldDefaults.default_image_model).toBe("qwen-image-2.0");
|
||||
expect(res.json.fieldDefaults.default_text_model).toBe("qwen3.7-max");
|
||||
expect(res.json.fieldDefaults.default_text_model).toBe("qwen3.8-max");
|
||||
expect(res.json.fieldDefaults.output_dir).toContain("bailian-output");
|
||||
expect(res.json.fieldDefaults.timeout).toBe("300");
|
||||
expect(res.json.fieldDefaults.base_url).toBe("https://dashscope.aliyuncs.com");
|
||||
|
||||
@@ -217,7 +217,7 @@ describe("e2e: auth", () => {
|
||||
authorization: "Bearer sk-e2e-placeholder",
|
||||
sourceConfig: expect.any(String),
|
||||
body: {
|
||||
model: "qwen3.7-max",
|
||||
model: "qwen3.8-max",
|
||||
stream: false,
|
||||
},
|
||||
});
|
||||
@@ -266,7 +266,7 @@ describe("e2e: auth", () => {
|
||||
expect(config["token-plan"]).toMatchObject({
|
||||
api_key: "sk-sp-e2e-placeholder",
|
||||
base_url: validationServer.baseUrl,
|
||||
default_text_model: "qwen3.8-max-preview",
|
||||
default_text_model: "qwen3.8-max",
|
||||
default_video_model: "happyhorse-1.1-t2v",
|
||||
default_image_to_video_model: "happyhorse-1.1-i2v",
|
||||
default_reference_to_video_model: "happyhorse-1.1-r2v",
|
||||
@@ -314,7 +314,7 @@ describe("e2e: auth", () => {
|
||||
authorization: "Bearer sk-sp-e2e-placeholder",
|
||||
sourceConfig: expect.any(String),
|
||||
body: {
|
||||
model: "qwen3.7-max",
|
||||
model: "qwen3.8-max",
|
||||
stream: false,
|
||||
},
|
||||
});
|
||||
@@ -328,7 +328,7 @@ describe("e2e: auth", () => {
|
||||
expect(config["token-plan"]).toMatchObject({
|
||||
api_key: "sk-sp-e2e-placeholder",
|
||||
base_url: "https://token-plan.cn-beijing.maas.aliyuncs.com",
|
||||
default_text_model: "qwen3.8-max-preview",
|
||||
default_text_model: "qwen3.8-max",
|
||||
default_video_model: "happyhorse-1.1-t2v",
|
||||
default_image_to_video_model: "happyhorse-1.1-i2v",
|
||||
default_reference_to_video_model: "happyhorse-1.1-r2v",
|
||||
|
||||
@@ -21,7 +21,7 @@ agents:
|
||||
assistant:
|
||||
description: "E2E multi-provider fixture"
|
||||
model:
|
||||
bailian: qwen3.7-max
|
||||
bailian: qwen3.8-max
|
||||
claude: claude-sonnet-4-6
|
||||
instructions: |
|
||||
You are a helpful assistant.
|
||||
|
||||
@@ -20,7 +20,7 @@ describe.skipIf(!isDashScopeE2EReady())("e2e: text chat(DashScope)", () => {
|
||||
"text",
|
||||
"chat",
|
||||
"--model",
|
||||
"qwen3.7-max",
|
||||
"qwen3.8-max",
|
||||
]);
|
||||
expect(exitCode).toBe(2);
|
||||
expect(stderr).toMatch(/--message|Usage:/i);
|
||||
@@ -32,7 +32,7 @@ describe.skipIf(!isDashScopeE2EReady())("e2e: text chat(DashScope)", () => {
|
||||
"chat",
|
||||
"--dry-run",
|
||||
"--model",
|
||||
"qwen3.7-max",
|
||||
"qwen3.8-max",
|
||||
"--message",
|
||||
"干跑",
|
||||
"--max-tokens",
|
||||
@@ -44,16 +44,16 @@ describe.skipIf(!isDashScopeE2EReady())("e2e: text chat(DashScope)", () => {
|
||||
const data = parseStdoutJson<{
|
||||
request?: { model?: string; messages?: Array<{ content?: string }> };
|
||||
}>(stdout);
|
||||
expect(data.request?.model).toBe("qwen3.7-max");
|
||||
expect(data.request?.model).toBe("qwen3.8-max");
|
||||
expect(data.request?.messages?.some((m) => m.content === "干跑")).toBe(true);
|
||||
});
|
||||
|
||||
test("【qwen3.7-max】文本对话", async () => {
|
||||
test("【qwen3.8-max】文本对话", async () => {
|
||||
const { stdout, stderr, exitCode } = await runCommandE2e(TEXT_CHAT_ROUTES, [
|
||||
"text",
|
||||
"chat",
|
||||
"--model",
|
||||
"qwen3.7-max",
|
||||
"qwen3.8-max",
|
||||
"--message",
|
||||
"只回复一个字:好",
|
||||
"--max-tokens",
|
||||
|
||||
@@ -13,7 +13,7 @@ describe("e2e: vision describe", () => {
|
||||
"token-plan": {
|
||||
api_key: "sk-sp-e2e-placeholder",
|
||||
base_url: "https://token-plan.cn-beijing.maas.aliyuncs.com",
|
||||
default_text_model: "qwen3.8-max-preview",
|
||||
default_text_model: "qwen3.8-max",
|
||||
},
|
||||
}),
|
||||
);
|
||||
@@ -40,6 +40,6 @@ describe("e2e: vision describe", () => {
|
||||
|
||||
expect(exitCode, stderr).toBe(0);
|
||||
const data = parseStdoutJson<{ request?: { model?: string } }>(stdout);
|
||||
expect(data.request?.model).toBe("qwen3.8-max-preview");
|
||||
expect(data.request?.model).toBe("qwen3.8-max");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bailian-cli-core",
|
||||
"version": "1.13.0",
|
||||
"version": "1.13.1",
|
||||
"description": "Core SDK for bailian-cli. See https://www.npmjs.com/package/bailian-cli for usage.",
|
||||
"homepage": "https://bailian.console.aliyun.com/cli",
|
||||
"bugs": {
|
||||
|
||||
@@ -10,7 +10,7 @@ interface ModelProfilePreset {
|
||||
const MODEL_PROFILE_PRESETS: Readonly<Record<string, ModelProfilePreset>> = {
|
||||
"token-plan": {
|
||||
baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com",
|
||||
defaultTextModel: "qwen3.8-max-preview",
|
||||
defaultTextModel: "qwen3.8-max",
|
||||
defaultVideoModel: "happyhorse-1.1-t2v",
|
||||
defaultImageToVideoModel: "happyhorse-1.1-i2v",
|
||||
defaultReferenceToVideoModel: "happyhorse-1.1-r2v",
|
||||
|
||||
@@ -32,7 +32,7 @@ const resolve = (s: Parameters<typeof src>[0]): Settings => buildSettings(src(s)
|
||||
test("token-plan Profile 预设保持固定", () => {
|
||||
expect(getModelProfilePreset("token-plan")).toEqual({
|
||||
baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com",
|
||||
defaultTextModel: "qwen3.8-max-preview",
|
||||
defaultTextModel: "qwen3.8-max",
|
||||
defaultVideoModel: "happyhorse-1.1-t2v",
|
||||
defaultImageToVideoModel: "happyhorse-1.1-i2v",
|
||||
defaultReferenceToVideoModel: "happyhorse-1.1-r2v",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "knowledge-studio-cli",
|
||||
"version": "1.13.0",
|
||||
"version": "1.13.1",
|
||||
"description": "Lightweight RAG CLI for Aliyun Model Studio — focused on knowledge-base retrieval.",
|
||||
"keywords": [
|
||||
"alibaba-cloud",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bailian-cli-runtime",
|
||||
"version": "1.13.0",
|
||||
"version": "1.13.1",
|
||||
"description": "Runtime framework for bailian-cli (createCli, registry, args, output, pipeline). See https://www.npmjs.com/package/bailian-cli for usage.",
|
||||
"homepage": "https://bailian.console.aliyun.com/cli",
|
||||
"bugs": {
|
||||
|
||||
@@ -58,7 +58,7 @@ export async function textChat(
|
||||
});
|
||||
}
|
||||
|
||||
const model = input.model || "qwen3.7-max";
|
||||
const model = input.model || "qwen3.8-max";
|
||||
const messages: Array<{ role: string; content: string }> = [];
|
||||
if (input.system) messages.push({ role: "system", content: input.system });
|
||||
messages.push({ role: "user", content: input.message });
|
||||
|
||||
Reference in New Issue
Block a user