Skip to content

feat(acp): add MiniMax Code as a builtin Registry npx agent - #990

Open
kaizhou-lab wants to merge 4 commits into
mainfrom
chore/acp-new-agent-minimax-code-20260914
Open

kaizhou-lab wants to merge 4 commits into
mainfrom
chore/acp-new-agent-minimax-code-20260914

Conversation

@kaizhou-lab

@kaizhou-lab kaizhou-lab commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds MiniMax Code as a builtin ACP agent. It was listed on the ACP Registry in snapshot v2026.09.12-e6ee445 (the Registry's 41st id) with an npx distribution, which makes it the first new agent since the Registry sync started that qualifies for automatic integration under the standing rules — the two earlier arrivals (antigravity-acp, kimchi) were binary-only and remain deferred.

This PR is intentionally separate from today's lock-only bump (#989) so that bump kept its routine self-merge shape. This PR is for human review: it adds a migration, a logo, and a lock entry.

item value evidence
Public Registry card MiniMax Codehttps://agent.minimax.io, version 0.2.7 registry.md card; CDN JSON id: minimax-code, name: MiniMax Code, license: MIT
Distribution npx @minimax-ai/code@0.2.7, args ["acp"] CDN JSON; no binary or uvx distribution
Product CLI (binary_name) mcode official README: npm install -g @minimax-ai/codemcode; mcode --version documented, so the default PATH probe applies (no skip_version_probe)
ACP entrypoint mcode acp README "ACP clients" section; Registry declares the same acp arg
Chosen backend minimax-code product name + the agent's own agentInfo.name from the live handshake; follows the mimo-code precedent (029) for " Code" products. Not a copy of the JSON lookup id, which merely coincides
npm package identity @minimax-ai/code, bin mcode at 0.2.7; engines >=22.19 <23 || >=24 <27 npm view; AionCore's managed Node is 24.11.0 (MANAGED_NODE_VERSION), inside the range
Probe — initialize ok, protocolVersion 1, agentInfo {name: minimax-code, title: MiniMax Code, version: 0.2.7} acp_probe.mjs against npx -y @minimax-ai/code@0.2.7 acp, clean temporary HOME, no inherited credentials
Probe — session/new -32000 "Authentication required: Run mcode login and try again." clearly classified auth requirement (rubric level: Starts; session catalog not observable unauthenticated)
agentCapabilities loadSession: true; mcpCapabilities {http: true, sse: true}; promptCapabilities all false; sessionCapabilities {list, fork, resume, close} seeded snake_case in the migration per the migration 003 contract
authMethods none advertised by initialize auth_methods left NULL — nothing is synthesized. The session error itself tells the user to run mcode login

What the migration seeds and why each nullable field is what it is

044_add_minimax_code_builtin_agent.sql (template: 031, policy shape: 034):

  • id/agent_id = ec619063 (mirrored per the post-030 NOT NULL + UNIQUE rule), user_id NULL.
  • command: npx, args: ["-y","@minimax-ai/code","acp"], env: []. The exact version is not stored here; pin_registry_npx_args rewrites the package token to @minimax-ai/code@0.2.7 from the lock at spawn.
  • agent_source_info: {"binary_name":"mcode","bridge_binary":"npx"} — no registry_json_id / package_name in metadata.
  • agent_capabilities: seeded from the probe (snake_case). Not in the ON CONFLICT DO UPDATE list, nor is auth_methods, so a re-seed can never reset what a live handshake later learns.
  • yolo_id: NULL. Source-verified against the 0.2.7 ACP server chunk (run-acp-command-*.js): availableModes is exactly default and plan. The README's Ask / Auto / Full access levels are exposed as a _permission-category config option (permissionMode = default | auto | bypassPermissions), not as a session mode, and AionCore's yolo channel resolves through session/set_mode — the same chunk rejects unknown mode ids with "Unsupported Session mode" — so storing bypassPermissions would break unattended runs rather than enable them. See open question 1.
  • native_skills_dirs: NULL. The 0.2.7 source scans only $MINIMAX_DATA_DIR/skills (user data dir) and the bundled assets/skills; no project-relative skills directory exists, and the README documents none.
  • behavior_policy: {"supports_side_question":false} — no supports_team, no team_capable_override (retired by 033). Team capability derives from the seeded mcp_capabilities.
  • The four session-derived columns are not seeded (skill step 11); the availability probe fills them on first check.

Other files:

  • crates/aionui-runtime/resources/acp-registry-npx-lock.json — new entry minimax-code@minimax-ai/code 0.2.7 with registry_json_id alias.
  • crates/aionui-assets/assets/logos/acp-registry/minimax-code.svg — the Registry's official icon (…/registry/v1/latest/minimax-code.svg, 169 bytes, currentColor fill), keyed by backend; added to registry_agent_logos_are_embedded_as_svg.
  • crates/aionui-db/tests/minimax_code_builtin_agent_migration.rs — new: launch fields, handshake columns (seeded caps, NULL auth/yolo/skills, policy shape), lock pin is an exact semver under the backend key, and a bad-path test that mcode / minimax / minimax-ai / @minimax-ai/code do not resolve to a builtin row.
  • crates/aionui-db/tests/team_capability_criteria_migration.rsminimax-code added to the mcp-capabilities table (http+sse) and to the NULL-auth-methods-by-design list.
  • crates/aionui-db/src/repository/sqlite_agent_metadata.rs — seed row count 43 → 44.
  • crates/aionui-runtime/src/registry_npx_lock.rs — the every_lock_entry_has_an_exact_version guard counts lock entries; 12 → 13. Its exact-semver check now also covers the new entry.
  • crates/aionui-ai-agent/src/registry.rs — three more count guards: hydrate_loads_seed_rows (43 → 44), every_builtin_npx_agent_has_a_release_lock (12 → 13 pinned npx builtins), diagnostic_snapshot_pairs_rows_with_reasons (43 → 44), and list_by_agent_type_counts_seed_rows (ACP rows 39 → 40). CI surfaced these one fail-fast round at a time (753/9388, then 772/9388 tests run); the whole registry::tests module was then run locally by filter (30 passed) before the final push.

Open questions for review

  1. Unattended/Team runs. With yolo_id NULL, AgentType::full_auto_mode_id falls to its _ => "yolo" default, which this agent will reject as an unsupported mode — identical to the current situation for omp, dimcode, kilo, dirac, grok and every other Registry agent seeded without a yolo_id. The vendor's actual unattended switch is the permissionMode=bypassPermissions config option; supporting that would be an AionCore launch-configuration/config-option path, not a metadata value, and is out of scope here.
  2. Sign-in affordance. Because initialize advertises no authMethods, the UI cannot offer a login button until the runtime learns otherwise; the user gets the agent's own actionable error ("Run mcode login"). If a later version starts advertising methods, the live handshake will populate the column.
  3. Registry pin lags upstream. npm latest is already 0.4.5 (the vendor ships several times a day); the Registry declares 0.2.7 and the lock follows the Registry, as for every other agent. The nightly sync will bump it as the Registry moves.
  4. mcode-tools. Newer package versions (≥0.3.x) add a second bin; 0.2.7 ships mcode only. Nothing here depends on it.

AionUi issues

None linked. Per the workflow, issue linking requires an explicit request; no AionUi issue was searched, edited, or closed.

Validation

  • just migration-check — pass
  • Targeted tests (run with name filters, per the repository rule against unfiltered local runs):
    • cargo test -p aionui-db --test minimax_code_builtin_agent_migration
    • cargo test -p aionui-db --test team_capability_criteria_migration
    • cargo test -p aionui-db --lib seed_rows_populated_after_migrations
    • cargo test -p aionui-assets --lib registry_agent_logos_are_embedded_as_svg
    • cargo test -p aionui-runtime --lib registry_npx_lock
    • cargo test -p aionui-ai-agent --lib -- registry::tests (whole module, 30 passed)
  • just lint-fix (cargo fix + clippy --fix --workspace -D warnings) — clean
  • just fmt — clean
  • Local full cargo nextest was not run: this PR was prepared during working hours, when the full workspace suite is not permitted on this host; the Test check on this PR is the authority. This is the reason the PR is left open for review rather than self-merged, in addition to it not being a lock-only change.

Logging

No logging changes: metadata-only integration. Existing startup/session error paths already identify a failing agent by backend, and the agent's own session/new error carries the actionable instruction.

zk added 4 commits September 14, 2026 11:26
MiniMax Code was listed on the ACP Registry (snapshot v2026.09.12-e6ee445)
with an npx distribution, @minimax-ai/code@0.2.7 with args ["acp"]. Seed it
as a builtin ACP agent and pin the Registry version in the release lock.

Identity: public card "MiniMax Code" (agent.minimax.io); the npm package
installs the product CLI `mcode`, whose documented ACP server is `mcode acp`.
backend is `minimax-code` from the product name and the agent's own
agentInfo.name, following the mimo-code precedent; binary_name is `mcode`.

Probe at 0.2.7: initialize ok (protocolVersion 1), session/new returns
-32000 "Authentication required: Run `mcode login`". agent_capabilities is
seeded snake_case from that handshake; auth_methods stays NULL because
initialize advertised none. yolo_id stays NULL: the ACP server's session
modes are default/plan only, and its permission levels are a config option
(permissionMode), not a session mode. native_skills_dirs stays NULL: the
source scans only the user data dir and bundled skills.

Also: Registry icon under acp-registry/minimax-code.svg, lock guard count
12 -> 13, seed row count 43 -> 44, team-capability expectations, and a
migration test covering launch fields, handshake columns, the lock pin and
an alias bad path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant