- fix test isolation: support MMX_CONFIG_DIR env for config path override
- remove free-tier music models (music-2.6-free, music-cover-free), default to music-2.6 / music-cover
- improve auth login prompt: show region info for API key option
Use undici's ProxyAgent + setGlobalDispatcher to inject proxy at
startup — all fetch calls go through it automatically without
touching any call site.
Proxy priority: HTTPS_PROXY > HTTP_PROXY > ALL_PROXY > config file.
Users can also persist via: mmx config set --key proxy --value URL
Supersedes #101, closes#96
Previously, switching API key with `mmx config set --key api_key`
kept the old cached region, causing requests to hit the wrong
endpoint. Now setting api_key deletes the cached region so it
gets auto-detected on the next command.
Bump version to 1.0.10.
The old endpoint v1/api/openplatform/coding_plan/remains returned
incorrect data. Switch to v1/token_plan/remains and fix the usage
calculation that previously treated usage_count as remaining.
Bump version to 1.0.8.
- Bump package.json version to 1.0.6 for npm publish
- Fix --instrumental with --lyrics-file validation (check flag presence, not just content)
- Update tests: new lyrics-required error message, replace 无歌词 example check with --lyrics-optimizer
Made-with: Cursor
- Version bumped to 1.0.0
- README/README_CN updated with npm and npx skills install instructions
- SKILL.md moved to repo root with required name/description frontmatter
Made-with: Cursor
- Add eslint.config.js with typescript-eslint flat config
- Add @eslint/js ^9 and typescript-eslint ^8 devDependencies
- Read VERSION from package.json in build.ts instead of hardcoding 'dev'
- Convert detectPlatform() to async with dynamic import in self-update.ts
- Remove all unused imports and rename unused params to _prefix
- Fix prefer-const violations and add eslint-disable comments where needed
- Fix indentation in video/generate.ts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- args.ts: replace hardcoded boolean/number/array lists with schema-driven
parseFlags(argv, OptionDef[]) + scanCommandPath(); adding a new flag no
longer requires touching the parser
- command.ts: add GLOBAL_OPTIONS as the single source of truth for global
flag types; main.ts merges with command options for two-pass parsing
- output/status-bar.ts: extract status-bar rendering out of http.ts;
HTTP client is now pure transport with no UI concerns
- registry.ts: remove commented-out File API dead code
- package.json: add build:dev for single-platform Bun standalone binary
- commands: annotate numeric (type:'number') and array (type:'array') flags
in text/chat, speech/synthesize, music/generate, video/generate, image/generate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- quota show: fix box misalignment in no-color mode ([] brackets
were 2 cols wider than the W formula assumed; move barVisLen calc
before W so the box is sized to fit the actual content)
- quota show: ignore config-file output setting so the rich HUD is
shown in TTY even when the user has `output: json` globally
- http: fix User-Agent version hardcoded to 0.1.0; now reads
CLI_VERSION env var with correct fallback
- http: print the brand status bar only once per process instead of
on every request
- errors/handler: replace ad-hoc JSON detection with detectOutputFormat
so error format is consistent with the rest of the CLI
- text/chat: fix description — "Anthropic Messages API" → "MiniMax"
- registry: fix group help alignment — printChildren now collects all
leaf paths first and aligns description column to the longest path
(fixes `video task get` being indented further than siblings)
- auth/login, registry: remove dev-journal comments from production code
- package.json, main.ts: sync version fallback to 0.3.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 1 — Infrastructure & Env Awareness
- Add src/utils/env.ts: isInteractive(), isCI() environment detection
(checks process.stdout.isTTY, process.stdin.isTTY, --non-interactive, CI env vars)
- Add --non-interactive and --async global flags
- Integrate flags through Config and GlobalFlags types
Phase 2 — Interactive Fallback
- Add src/utils/prompt.ts: promptText(), promptConfirm(), failIfMissing()
(wraps @clack/prompts, no-ops when non-interactive)
- Add @clack/prompts dependency
- image/generate: interactive --prompt when missing in TTY, fail-fast in CI
- text/chat: interactive --message when missing in TTY, fail-fast in CI
- vision/describe: interactive --image when missing in TTY, fail-fast in CI
- video/generate: interactive --prompt when missing in TTY, fail-fast in CI
Phase 3 — Async Task Handling
- Add --async global flag (explicit agent/CI mode)
- --async and --no-wait: always output pure JSON {taskId} to stdout
- Default polling behavior unchanged (blocking, spinner on stderr)
- video/generate: after polling completes, auto-download to ~/.minimax-video/{taskId}.mp4
and output only the local file path to stdout
Phase 4 — Stdout Purity
- registry.ts: printHelp/printRootHelp/printCommandHelp accept custom output stream
(defaults to stdout; main.ts passes stderr for --help so stdout stays clean)
- text/chat streaming: thinking/response headers route to stderr in non-TTY mode
(final text always goes to stdout)
- Global help text updated to list --non-interactive and --async flags
CLI for the MiniMax API Platform (Token Plan). Supports 16 commands
across 10 resource groups: text chat, speech synthesis, image generation,
video generation, music generation, web search, image understanding,
quota management, auth, and config.
Features:
- Resource-verb grammar (minimax <resource> <command>)
- Auto-detects API region (global/cn) on first run
- Structured output (text, json, yaml)
- SSE streaming for chat
- Async polling for video generation
- Cross-compiles to standalone binaries via Bun
- Works with Node 18+ via npm install