@hugo.bastidas/minimax-plugin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +13 -0
- package/.mcp.json +3 -0
- package/AGENTS.md +37 -0
- package/README.md +263 -0
- package/codex-plugin.toml +3 -0
- package/dist/artifacts/metadata.d.ts +3 -0
- package/dist/artifacts/metadata.d.ts.map +1 -0
- package/dist/artifacts/metadata.js +8 -0
- package/dist/artifacts/metadata.js.map +1 -0
- package/dist/artifacts/runs.d.ts +27 -0
- package/dist/artifacts/runs.d.ts.map +1 -0
- package/dist/artifacts/runs.js +43 -0
- package/dist/artifacts/runs.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +31 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/anthropic.d.ts +3 -0
- package/dist/client/anthropic.d.ts.map +1 -0
- package/dist/client/anthropic.js +31 -0
- package/dist/client/anthropic.js.map +1 -0
- package/dist/client/minimax.d.ts +19 -0
- package/dist/client/minimax.d.ts.map +1 -0
- package/dist/client/minimax.js +16 -0
- package/dist/client/minimax.js.map +1 -0
- package/dist/client/openai.d.ts +3 -0
- package/dist/client/openai.d.ts.map +1 -0
- package/dist/client/openai.js +28 -0
- package/dist/client/openai.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/hooks/claude-routing-reminder.d.ts +2 -0
- package/dist/hooks/claude-routing-reminder.d.ts.map +1 -0
- package/dist/hooks/claude-routing-reminder.js +12 -0
- package/dist/hooks/claude-routing-reminder.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/install/claude-config.d.ts +15 -0
- package/dist/install/claude-config.d.ts.map +1 -0
- package/dist/install/claude-config.js +130 -0
- package/dist/install/claude-config.js.map +1 -0
- package/dist/install/codex-config.d.ts +11 -0
- package/dist/install/codex-config.d.ts.map +1 -0
- package/dist/install/codex-config.js +83 -0
- package/dist/install/codex-config.js.map +1 -0
- package/dist/install/global-instructions.d.ts +9 -0
- package/dist/install/global-instructions.d.ts.map +1 -0
- package/dist/install/global-instructions.js +90 -0
- package/dist/install/global-instructions.js.map +1 -0
- package/dist/install/index.d.ts +6 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +6 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/native-multimodal-config.d.ts +4 -0
- package/dist/install/native-multimodal-config.d.ts.map +1 -0
- package/dist/install/native-multimodal-config.js +50 -0
- package/dist/install/native-multimodal-config.js.map +1 -0
- package/dist/install/opencode-config.d.ts +13 -0
- package/dist/install/opencode-config.d.ts.map +1 -0
- package/dist/install/opencode-config.js +65 -0
- package/dist/install/opencode-config.js.map +1 -0
- package/dist/install/shell-alias.d.ts +9 -0
- package/dist/install/shell-alias.d.ts.map +1 -0
- package/dist/install/shell-alias.js +86 -0
- package/dist/install/shell-alias.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +125 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/ask.d.ts +18 -0
- package/dist/tools/ask.d.ts.map +1 -0
- package/dist/tools/ask.js +18 -0
- package/dist/tools/ask.js.map +1 -0
- package/dist/tools/delegate.d.ts +15 -0
- package/dist/tools/delegate.d.ts.map +1 -0
- package/dist/tools/delegate.js +31 -0
- package/dist/tools/delegate.js.map +1 -0
- package/dist/tools/inspect-run.d.ts +10 -0
- package/dist/tools/inspect-run.d.ts.map +1 -0
- package/dist/tools/inspect-run.js +23 -0
- package/dist/tools/inspect-run.js.map +1 -0
- package/dist/tools/mmx-cli.d.ts +92 -0
- package/dist/tools/mmx-cli.d.ts.map +1 -0
- package/dist/tools/mmx-cli.js +211 -0
- package/dist/tools/mmx-cli.js.map +1 -0
- package/dist/tools/model-status.d.ts +8 -0
- package/dist/tools/model-status.d.ts.map +1 -0
- package/dist/tools/model-status.js +28 -0
- package/dist/tools/model-status.js.map +1 -0
- package/dist/tools/propose-patch.d.ts +14 -0
- package/dist/tools/propose-patch.d.ts.map +1 -0
- package/dist/tools/propose-patch.js +26 -0
- package/dist/tools/propose-patch.js.map +1 -0
- package/dist/tools/review-diff.d.ts +14 -0
- package/dist/tools/review-diff.d.ts.map +1 -0
- package/dist/tools/review-diff.js +52 -0
- package/dist/tools/review-diff.js.map +1 -0
- package/dist/tools/summarize.d.ts +13 -0
- package/dist/tools/summarize.d.ts.map +1 -0
- package/dist/tools/summarize.js +28 -0
- package/dist/tools/summarize.js.map +1 -0
- package/dist/usage/stats.d.ts +34 -0
- package/dist/usage/stats.d.ts.map +1 -0
- package/dist/usage/stats.js +201 -0
- package/dist/usage/stats.js.map +1 -0
- package/dist/usage/tool-usage.d.ts +11 -0
- package/dist/usage/tool-usage.d.ts.map +1 -0
- package/dist/usage/tool-usage.js +24 -0
- package/dist/usage/tool-usage.js.map +1 -0
- package/dist/validation/limits.d.ts +8 -0
- package/dist/validation/limits.d.ts.map +1 -0
- package/dist/validation/limits.js +8 -0
- package/dist/validation/limits.js.map +1 -0
- package/dist/validation/patch.d.ts +7 -0
- package/dist/validation/patch.d.ts.map +1 -0
- package/dist/validation/patch.js +20 -0
- package/dist/validation/patch.js.map +1 -0
- package/dist/workspace/collect-files.d.ts +19 -0
- package/dist/workspace/collect-files.d.ts.map +1 -0
- package/dist/workspace/collect-files.js +60 -0
- package/dist/workspace/collect-files.js.map +1 -0
- package/dist/workspace/ignore.d.ts +3 -0
- package/dist/workspace/ignore.d.ts.map +1 -0
- package/dist/workspace/ignore.js +13 -0
- package/dist/workspace/ignore.js.map +1 -0
- package/dist/workspace/paths.d.ts +3 -0
- package/dist/workspace/paths.d.ts.map +1 -0
- package/dist/workspace/paths.js +18 -0
- package/dist/workspace/paths.js.map +1 -0
- package/dist/workspace/secrets.d.ts +4 -0
- package/dist/workspace/secrets.d.ts.map +1 -0
- package/dist/workspace/secrets.js +32 -0
- package/dist/workspace/secrets.js.map +1 -0
- package/package.json +64 -0
- package/scripts/claude-config.mjs +3 -0
- package/scripts/codex-config.mjs +3 -0
- package/scripts/install.mjs +548 -0
- package/scripts/opencode-config.mjs +3 -0
- package/skills/minimax-delegation/SKILL.md +24 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "minimax-plugin",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MiniMax M2.7 delegation plugin for Claude Code",
|
|
5
|
+
"author": "Hugo Bastidas",
|
|
6
|
+
"mcpServers": {
|
|
7
|
+
"minimax": {
|
|
8
|
+
"command": "node",
|
|
9
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/dist/index.js"],
|
|
10
|
+
"env": {}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
package/.mcp.json
ADDED
package/AGENTS.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Instrucciones para el agente — minimax-plugin
|
|
2
|
+
|
|
3
|
+
## Propósito
|
|
4
|
+
|
|
5
|
+
Plugin MCP que permite a agentes host (Claude Code, Codex, OpenCode) delegar tareas
|
|
6
|
+
pesadas en tokens a MiniMax M3. El servidor lee archivos del workspace localmente,
|
|
7
|
+
envía solo el contexto necesario a MiniMax y almacena salidas pesadas como artefactos
|
|
8
|
+
locales. El agente host recibe resúmenes compactos en lugar de la salida completa.
|
|
9
|
+
|
|
10
|
+
## Stack
|
|
11
|
+
|
|
12
|
+
- TypeScript · Node.js · `@modelcontextprotocol/sdk`
|
|
13
|
+
- Validación de entrada: `zod`
|
|
14
|
+
- Tests: `vitest`
|
|
15
|
+
- Build: `tsc`
|
|
16
|
+
|
|
17
|
+
## Comandos
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install # instalar dependencias
|
|
21
|
+
npm run build # compilar TypeScript → dist/
|
|
22
|
+
npm test # correr suite de tests
|
|
23
|
+
npm run typecheck # verificar tipos sin compilar
|
|
24
|
+
npm run setup # instalador interactivo (hosts: Claude Code, Codex, OpenCode)
|
|
25
|
+
minimax gain # ver estadísticas de uso y ahorro de tokens
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Reglas específicas del proyecto
|
|
29
|
+
|
|
30
|
+
- No registrar el `minimax-mcp` oficial nativo; este plugin expone las herramientas
|
|
31
|
+
`mmx_*` que invocan el CLI `mmx` oficial a través de wrappers en `src/tools/mmx-cli.ts`.
|
|
32
|
+
- Los artefactos de runs se almacenan en `.minimax/runs/<timestamp>-<slug>/` y están
|
|
33
|
+
excluidos de git. Usar `inspect_run` para recuperarlos bajo demanda.
|
|
34
|
+
- No pegar artefactos completos de vuelta en el contexto host salvo que sea
|
|
35
|
+
estrictamente necesario.
|
|
36
|
+
- Validar siempre que las propuestas de MiniMax cumplan los requisitos del proyecto
|
|
37
|
+
antes de aplicar cualquier parche.
|
package/README.md
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# minimax-plugin
|
|
2
|
+
|
|
3
|
+
Plugin de delegación MCP para MiniMax M3 — compatible con Claude Code, Codex y OpenCode.
|
|
4
|
+
|
|
5
|
+
## Qué hace
|
|
6
|
+
|
|
7
|
+
Este plugin permite a los agentes host (Claude Code, Codex, OpenCode) delegar tareas
|
|
8
|
+
pesadas en tokens a MiniMax M3 a través de un servidor MCP. El servidor lee archivos
|
|
9
|
+
del workspace localmente, envía solo el contexto necesario a MiniMax y almacena las
|
|
10
|
+
salidas pesadas como artefactos locales. Los agentes host reciben resúmenes compactos,
|
|
11
|
+
no la salida completa sin procesar.
|
|
12
|
+
|
|
13
|
+
**Por qué ahorra tokens:** en lugar de que el host lea muchos archivos en su contexto,
|
|
14
|
+
pegue diffs extensos o procese logs largos, el servidor MCP lo hace localmente y devuelve
|
|
15
|
+
solo lo que el host necesita.
|
|
16
|
+
|
|
17
|
+
## Instalación
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Instalar dependencias y compilar
|
|
21
|
+
npm install
|
|
22
|
+
npm run build
|
|
23
|
+
|
|
24
|
+
# Instalador interactivo (soporta Claude Code, Codex, OpenCode)
|
|
25
|
+
npm run setup
|
|
26
|
+
|
|
27
|
+
# Tras la instalación global o como link, ver estadísticas de ahorro
|
|
28
|
+
minimax gain
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
El menú del instalador tiene cuatro acciones: **Install**, **Update**, **Uninstall** y
|
|
32
|
+
**Status**. Al elegir **Install** (o **Update**) y uno o más hosts destino (Claude Code,
|
|
33
|
+
Codex, OpenCode — seleccionados con espacio en multiselect), muestra un selector de
|
|
34
|
+
componentes:
|
|
35
|
+
|
|
36
|
+
- **Core MCP** — MCP de codificación/delegación, herramientas wrapper de `mmx` CLI,
|
|
37
|
+
enrutamiento `MINIMAX.md` y hooks de Claude Code
|
|
38
|
+
- **Superpowers routing** — `MINIMAX_SUPERPOWERS.md` (depende de Core; se autoselecciona)
|
|
39
|
+
- **MiniMax CLI (mmx)** — CLI oficial `mmx` instalado globalmente (autoseleccionado por Core MCP)
|
|
40
|
+
|
|
41
|
+
**Alias de shell** — el instalador puede agregar una función de shell (por defecto: `cc-mini`)
|
|
42
|
+
que lanza Claude Code apuntando a la API de MiniMax. El alias escribe las credenciales en el
|
|
43
|
+
archivo RC de la shell con protección `chmod 0o600`, asegurando que la API key solo sea
|
|
44
|
+
legible por el propietario.
|
|
45
|
+
|
|
46
|
+
Cuando algún componente seleccionado requiere credenciales, el instalador solicita:
|
|
47
|
+
|
|
48
|
+
- `MINIMAX_API_KEY` (obligatorio)
|
|
49
|
+
- `MINIMAX_API_MODE` (por defecto: `anthropic`)
|
|
50
|
+
- `MINIMAX_MODEL` (por defecto: `MiniMax-M3`; el instalador lista los modelos MiniMax-M
|
|
51
|
+
disponibles en la cuenta y excluye variantes `highspeed`)
|
|
52
|
+
|
|
53
|
+
### Configuración manual
|
|
54
|
+
|
|
55
|
+
**Claude Code** — agregar a `~/.claude.json`:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"minimax": {
|
|
61
|
+
"command": "node",
|
|
62
|
+
"args": ["/ruta/a/minimax-plugin/dist/index.js"],
|
|
63
|
+
"env": {
|
|
64
|
+
"MINIMAX_API_KEY": "sk-...",
|
|
65
|
+
"MINIMAX_API_MODE": "anthropic",
|
|
66
|
+
"MINIMAX_MODEL": "MiniMax-M3"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**OpenCode** — agregar a `~/.config/opencode/opencode.jsonc`:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mcp": {
|
|
78
|
+
"minimax": {
|
|
79
|
+
"type": "local",
|
|
80
|
+
"command": ["node", "/ruta/a/minimax-plugin/dist/index.js"],
|
|
81
|
+
"enabled": true,
|
|
82
|
+
"environment": {
|
|
83
|
+
"MINIMAX_API_KEY": "sk-...",
|
|
84
|
+
"MINIMAX_API_MODE": "anthropic",
|
|
85
|
+
"MINIMAX_MODEL": "MiniMax-M3"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Codex** — agregar a `~/.codex/config.toml`:
|
|
93
|
+
|
|
94
|
+
```toml
|
|
95
|
+
[mcp_servers.minimax]
|
|
96
|
+
command = "node"
|
|
97
|
+
args = ["/ruta/a/minimax-plugin/dist/index.js"]
|
|
98
|
+
|
|
99
|
+
[mcp_servers.minimax.env]
|
|
100
|
+
MINIMAX_API_KEY = "sk-..."
|
|
101
|
+
MINIMAX_API_MODE = "anthropic"
|
|
102
|
+
MINIMAX_MODEL = "MiniMax-M3"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Desinstalación
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm run setup
|
|
109
|
+
# Seleccionar "Uninstall"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Elegir **Uninstall** y un host (o **All**); el instalador lista solo los componentes
|
|
113
|
+
instalados actualmente y permite seleccionar cuáles remover. Eliminar **Core MCP** también
|
|
114
|
+
elimina el MCP de codificación/delegación, las referencias de enrutamiento, los sidecars
|
|
115
|
+
generados (`MINIMAX.md` y `MINIMAX_SUPERPOWERS.md`) y los hooks de Claude Code donde
|
|
116
|
+
corresponda. También es posible remover manualmente la entrada `minimax` del archivo de
|
|
117
|
+
configuración del host.
|
|
118
|
+
|
|
119
|
+
## Estadísticas del CLI global
|
|
120
|
+
|
|
121
|
+
El paquete expone un comando global `minimax` cuando se instala o enlaza como paquete npm.
|
|
122
|
+
Úsalo para inspeccionar el uso del MCP y el ahorro de tokens, similar a `rtk gain`:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
minimax gain
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
El MCP agrega registros de uso en `~/.minimax/usage.jsonl` por defecto. Se puede
|
|
129
|
+
sobreescribir con `MINIMAX_USAGE_FILE=/ruta/al/archivo.jsonl`. El reporte muestra llamadas
|
|
130
|
+
totales, tokens de entrada/salida reportados por MiniMax, tokens compactos devueltos al host,
|
|
131
|
+
ahorro estimado, tiempo de ejecución e impacto por herramienta.
|
|
132
|
+
|
|
133
|
+
## Variables de entorno
|
|
134
|
+
|
|
135
|
+
| Variable | Requerida | Por defecto | Descripción |
|
|
136
|
+
|---|---|---|---|
|
|
137
|
+
| `MINIMAX_API_KEY` | Sí | — | API key de MiniMax |
|
|
138
|
+
| `MINIMAX_API_MODE` | No | `anthropic` | Modo de API: `anthropic` o `openai` |
|
|
139
|
+
| `MINIMAX_MODEL` | No | `MiniMax-M3` | Nombre del modelo; el instalador obtiene los modelos MiniMax-M disponibles en la cuenta y excluye variantes `highspeed` |
|
|
140
|
+
| `MINIMAX_BASE_URL` | No | Según modo | URL base alternativa |
|
|
141
|
+
| `MINIMAX_TIMEOUT_MS` | No | `300000` | Timeout de solicitud en milisegundos |
|
|
142
|
+
| `MINIMAX_MAX_OUTPUT_TOKENS` | No | `16384` | Máximo de tokens de salida por solicitud |
|
|
143
|
+
| `MINIMAX_SERVICE_TIER` | No | — | Tier de servicio MiniMax opcional: `standard` o `priority` |
|
|
144
|
+
| `MINIMAX_ARTIFACT_DIR` | No | `.minimax/runs` | Directorio local de almacenamiento de artefactos |
|
|
145
|
+
| `MINIMAX_USAGE_FILE` | No | `~/.minimax/usage.jsonl` | Log de uso/estadísticas del MCP |
|
|
146
|
+
|
|
147
|
+
## Referencias de enrutamiento global y hooks de Claude Code
|
|
148
|
+
|
|
149
|
+
Al instalar para Claude Code, Codex u OpenCode, el instalador mantiene pequeños los archivos
|
|
150
|
+
de instrucciones globales del host. El componente **Core MCP** escribe la política de
|
|
151
|
+
enrutamiento en `MINIMAX.md` e inserta solo una referencia gestionada por el plugin
|
|
152
|
+
`@.../MINIMAX.md` en el archivo de instrucciones globales del host. El componente opcional
|
|
153
|
+
**Superpowers routing** escribe `MINIMAX_SUPERPOWERS.md` e inserta solo una referencia
|
|
154
|
+
gestionada `@.../MINIMAX_SUPERPOWERS.md`:
|
|
155
|
+
|
|
156
|
+
- Claude Code: referencias en `~/.claude/CLAUDE.md`, políticas en `~/.claude/MINIMAX.md`
|
|
157
|
+
y opcionalmente `~/.claude/MINIMAX_SUPERPOWERS.md`
|
|
158
|
+
- Codex: referencias en `~/.codex/AGENTS.md`, políticas en `~/.codex/MINIMAX.md`
|
|
159
|
+
y opcionalmente `~/.codex/MINIMAX_SUPERPOWERS.md`
|
|
160
|
+
- OpenCode: referencias en `~/.config/opencode/AGENTS.md`, políticas en
|
|
161
|
+
`~/.config/opencode/MINIMAX.md` y opcionalmente `~/.config/opencode/MINIMAX_SUPERPOWERS.md`
|
|
162
|
+
|
|
163
|
+
Las rutas se derivan del directorio home/config del usuario actual en tiempo de instalación;
|
|
164
|
+
el instalador no hardcodea un nombre de usuario ni una ruta `/Users/...`. Las políticas de
|
|
165
|
+
MiniMax están escritas en segunda persona para funcionar de forma independiente para
|
|
166
|
+
cualquier host: **el agente host sigue siendo el orquestador y la autoridad final**. MiniMax
|
|
167
|
+
está enmarcado como un trabajador acotado para resúmenes de contexto pesado, borradores de
|
|
168
|
+
implementación, refactors mecánicos, actualizaciones de docs, scaffolds de tests, boilerplate
|
|
169
|
+
de migraciones, variantes de copy para landing pages, scaffolding repetitivo de componentes
|
|
170
|
+
y revisiones de diff opcionales como segunda opinión.
|
|
171
|
+
|
|
172
|
+
El menú del instalador usa cuatro acciones (**Install**, **Update**, **Uninstall**, **Status**)
|
|
173
|
+
con indicaciones. Después de elegir **Install** o **Update** y un host, un selector multiselect
|
|
174
|
+
lista todos los componentes — Core MCP, Superpowers routing y el CLI `mmx`
|
|
175
|
+
oficial — para que cada componente tenga exactamente un lugar donde gestionarlo. Las
|
|
176
|
+
dependencias se resuelven automáticamente (seleccionar Superpowers también selecciona Core).
|
|
177
|
+
Las convenciones globales personales (`AGENT_FOUNDATION.md`) se gestionan con el paquete
|
|
178
|
+
independiente `@hugo.bastidas/agent-foundation`, no con este instalador.
|
|
179
|
+
Los archivos `AGENTS.md` locales de cada proyecto deben mantenerse específicos del proyecto
|
|
180
|
+
y no deben duplicar reglas globales de sidecars como `AGENT_FOUNDATION.md`, `RTK.md`,
|
|
181
|
+
`MINIMAX.md` u otras referencias del host.
|
|
182
|
+
|
|
183
|
+
La política opcional de Superpowers indica al host que cuando un plan de Superpowers ofrece
|
|
184
|
+
Subagent-Driven Development y `superpowers_execute_task` está disponible, MiniMax debe ejecutar
|
|
185
|
+
cada tarea planeada internamente como implementador + revisor de spec + revisor de calidad de
|
|
186
|
+
código + sintetizador de parche final. Claude/Codex mantiene el brainstorming, specs, planes,
|
|
187
|
+
aplicación de parches, ejecución de tests y revisión final.
|
|
188
|
+
|
|
189
|
+
La API de texto está ajustada para MiniMax M3: las herramientas worker de contexto largo usan
|
|
190
|
+
thinking habilitado, mientras que el modo rápido `ask_minimax` lo deshabilita para menor
|
|
191
|
+
latencia. Las llamadas compatibles con Anthropic envían `thinking: { "type": "enabled" }`
|
|
192
|
+
cuando thinking está habilitado; las compatibles con OpenAI envían
|
|
193
|
+
`extra_body.reasoning_split = true` cuando se requiere salida de razonamiento. Establecer
|
|
194
|
+
`MINIMAX_SERVICE_TIER=priority` solo cuando la cuenta MiniMax soporta el tier priority.
|
|
195
|
+
|
|
196
|
+
El instalador no registra el servidor `minimax-mcp` oficial nativo. En su lugar, el Core MCP
|
|
197
|
+
expone herramientas `mmx_*` que llaman al CLI `mmx` oficial para operaciones de medios,
|
|
198
|
+
búsqueda, visión, cuota, config y archivos. El componente CLI opcional usa
|
|
199
|
+
`npm install -g mmx-cli` y provee el comando `mmx` para uso directo en terminal también.
|
|
200
|
+
|
|
201
|
+
Para Claude Code, el instalador agrega también hooks `SessionStart` y `UserPromptSubmit`
|
|
202
|
+
gestionados por el plugin en `~/.claude/settings.json`. El hook no hardcodea nombres de
|
|
203
|
+
herramientas de MiniMax; recuerda a Claude que inspeccione las herramientas actualmente
|
|
204
|
+
disponibles expuestas por el servidor MCP `minimax` y use MiniMax solo cuando la tarea
|
|
205
|
+
se ajuste a la política de trabajador acotado. La planificación, arquitectura, depuración,
|
|
206
|
+
revisión final, verificación y autoridad permanecen con el agente host.
|
|
207
|
+
|
|
208
|
+
## Herramientas
|
|
209
|
+
|
|
210
|
+
| Herramienta | Descripción |
|
|
211
|
+
|---|---|
|
|
212
|
+
| `ask_minimax` | Consultar a MiniMax sin necesidad de acceso a archivos locales; el modo rápido deshabilita thinking por defecto, los modos más profundos lo habilitan |
|
|
213
|
+
| `delegate_task` | Delegar tareas de worker de implementación acotada con perfiles limitados: implementation, mechanical_refactor, docs_update, test_scaffold, migration_boilerplate |
|
|
214
|
+
| `summarize_context` | Resumir archivos o directorios locales — resúmenes de arquitectura, riesgo u onboarding |
|
|
215
|
+
| `review_diff` | Segunda opinión opcional en un diff; el host sigue siendo el revisor final |
|
|
216
|
+
| `propose_patch` | Pedir a MiniMax que proponga un parche — se almacena como artefacto, NO se aplica directamente |
|
|
217
|
+
| `inspect_run` | Inspeccionar metadatos o artefactos de un run anterior |
|
|
218
|
+
| `model_status` | Verificar configuración y conectividad con la API |
|
|
219
|
+
| `superpowers_execute_task` | Ejecutar una tarea de plan Superpowers usando MiniMax como implementador interno, revisor de spec, revisor de calidad y sintetizador de parche final; almacena artefactos para revisión del host |
|
|
220
|
+
| `git_commit` | Generar un mensaje Conventional Commits a partir de git diff — MiniMax responde solo en español |
|
|
221
|
+
| `mmx_cli_status` / `mmx_quota_show` / `mmx_config_show` | Inspeccionar el CLI `mmx` instalado, cuotas y configuración |
|
|
222
|
+
| `mmx_text_chat` | Ejecutar chat de texto de MiniMax a través del CLI `mmx` oficial |
|
|
223
|
+
| `mmx_speech_voices` / `mmx_speech_synthesize` | Listar voces y sintetizar voz a través de `mmx` |
|
|
224
|
+
| `mmx_image_generate` | Generar imágenes a través de `mmx`; las rutas generadas permanecen dentro del workspace |
|
|
225
|
+
| `mmx_music_generate` / `mmx_music_cover` | Generar música o portadas a través de `mmx` |
|
|
226
|
+
| `mmx_search_query` / `mmx_vision_describe` | Búsqueda web y comprensión de imágenes a través del CLI de MiniMax |
|
|
227
|
+
| `mmx_file_list` | Listar el almacenamiento de archivos de MiniMax a través de `mmx` |
|
|
228
|
+
|
|
229
|
+
## Directorio de artefactos
|
|
230
|
+
|
|
231
|
+
Todas las salidas pesadas se almacenan en `.minimax/runs/<timestamp>-<slug>/`:
|
|
232
|
+
|
|
233
|
+
- `metadata.json` — metadatos del run
|
|
234
|
+
- `report.md` — informe de análisis completo
|
|
235
|
+
- `request.json` — detalles de la solicitud y manifiesto de archivos
|
|
236
|
+
- `summary.md` — resumen compacto
|
|
237
|
+
- `patch.diff` — parches propuestos (no aplicados)
|
|
238
|
+
- `implementation.md`, `spec-review.md`, `quality-review.md`, `final-patch.md` — artefactos de ejecución de tareas Superpowers
|
|
239
|
+
|
|
240
|
+
`.minimax/runs` está en `.gitignore` por defecto. Usar `inspect_run` para recuperar artefactos cuando sea necesario.
|
|
241
|
+
|
|
242
|
+
## Modelo de seguridad
|
|
243
|
+
|
|
244
|
+
- Todas las rutas se validan para permanecer dentro de la raíz del workspace
|
|
245
|
+
- Las herramientas wrapper `mmx_*` pasan la API key a través del flag oficial `mmx --api-key`
|
|
246
|
+
porque el CLI no consume `MINIMAX_API_KEY` del entorno; los ecos de comandos redactan la key
|
|
247
|
+
como `[redacted]`
|
|
248
|
+
- `.git`, `node_modules`, `dist` y archivos dot-env están bloqueados por defecto
|
|
249
|
+
- Los patrones de secretos (API keys, tokens, contraseñas, claves privadas) se redactan antes
|
|
250
|
+
de enviar a MiniMax
|
|
251
|
+
- Los parches propuestos se validan: sin rutas `.git`, sin traversal de directorios padre,
|
|
252
|
+
sin escritura directa de archivos
|
|
253
|
+
- MiniMax nunca escribe archivos directamente — los parches se almacenan como artefactos para
|
|
254
|
+
revisión del host
|
|
255
|
+
|
|
256
|
+
## Desarrollo
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
npm install
|
|
260
|
+
npm test
|
|
261
|
+
npm run typecheck
|
|
262
|
+
npm run build
|
|
263
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/artifacts/metadata.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export function sha256(content) {
|
|
3
|
+
return createHash('sha256').update(content).digest('hex');
|
|
4
|
+
}
|
|
5
|
+
export function safeSlug(value) {
|
|
6
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 60) || 'run';
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/artifacts/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,MAAM,CAAC,OAAwB;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface RunMetadata {
|
|
2
|
+
runId: string;
|
|
3
|
+
tool: string;
|
|
4
|
+
createdAt: string;
|
|
5
|
+
artifacts: Record<string, {
|
|
6
|
+
path: string;
|
|
7
|
+
sha256: string;
|
|
8
|
+
bytes: number;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface RunHandle {
|
|
12
|
+
runId: string;
|
|
13
|
+
runDir: string;
|
|
14
|
+
metadata: RunMetadata;
|
|
15
|
+
}
|
|
16
|
+
export declare function createRun(input: {
|
|
17
|
+
artifactRoot: string;
|
|
18
|
+
slug: string;
|
|
19
|
+
tool: string;
|
|
20
|
+
}): Promise<RunHandle>;
|
|
21
|
+
export declare function writeRunArtifact(run: RunHandle, name: string, content: string): Promise<{
|
|
22
|
+
path: string;
|
|
23
|
+
sha256: string;
|
|
24
|
+
bytes: number;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function readRunMetadata(runDir: string): Promise<RunMetadata>;
|
|
27
|
+
//# sourceMappingURL=runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/artifacts/runs.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAY/G;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9I;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAE1E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { safeSlug, sha256 } from './metadata.js';
|
|
5
|
+
export async function createRun(input) {
|
|
6
|
+
const createdAt = new Date().toISOString();
|
|
7
|
+
const stamp = createdAt.replace(/[:.]/g, '-');
|
|
8
|
+
const runId = `${stamp}-${safeSlug(input.slug)}-${randomBytes(4).toString('hex')}`;
|
|
9
|
+
const artifactRoot = resolve(input.artifactRoot);
|
|
10
|
+
const runDir = join(artifactRoot, runId);
|
|
11
|
+
await mkdir(artifactRoot, { recursive: true });
|
|
12
|
+
await mkdir(runDir);
|
|
13
|
+
const metadata = { runId, tool: input.tool, createdAt, artifacts: {} };
|
|
14
|
+
const handle = { runId, runDir, metadata };
|
|
15
|
+
await persistMetadata(handle);
|
|
16
|
+
return handle;
|
|
17
|
+
}
|
|
18
|
+
export async function writeRunArtifact(run, name, content) {
|
|
19
|
+
assertSafeArtifactName(name);
|
|
20
|
+
const path = join(run.runDir, name);
|
|
21
|
+
await writeFile(path, content, 'utf8');
|
|
22
|
+
const record = { path, sha256: sha256(content), bytes: Buffer.byteLength(content) };
|
|
23
|
+
run.metadata.artifacts[name] = record;
|
|
24
|
+
await persistMetadata(run);
|
|
25
|
+
return record;
|
|
26
|
+
}
|
|
27
|
+
export async function readRunMetadata(runDir) {
|
|
28
|
+
return JSON.parse(await readFile(join(runDir, 'metadata.json'), 'utf8'));
|
|
29
|
+
}
|
|
30
|
+
function assertSafeArtifactName(name) {
|
|
31
|
+
if (name.length === 0 ||
|
|
32
|
+
isAbsolute(name) ||
|
|
33
|
+
name.includes('/') ||
|
|
34
|
+
name.includes('\\') ||
|
|
35
|
+
name.includes('..') ||
|
|
36
|
+
!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {
|
|
37
|
+
throw new Error(`Invalid artifact name: ${name}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function persistMetadata(run) {
|
|
41
|
+
await writeFile(join(run.runDir, 'metadata.json'), JSON.stringify(run.metadata, null, 2), 'utf8');
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/artifacts/runs.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { defaultUsageFile, renderGainReport, resetUsage, summarizeUsage } from './usage/stats.js';
|
|
3
|
+
function argValue(args, name) {
|
|
4
|
+
const index = args.indexOf(name);
|
|
5
|
+
return index >= 0 ? args[index + 1] : undefined;
|
|
6
|
+
}
|
|
7
|
+
async function main() {
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
const command = args[0] ?? 'help';
|
|
10
|
+
if (command === 'gain') {
|
|
11
|
+
const file = argValue(args, '--file') ?? defaultUsageFile();
|
|
12
|
+
if (args.includes('--reset')) {
|
|
13
|
+
await resetUsage(file);
|
|
14
|
+
console.log(`Reset MiniMax usage stats: ${file}`);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const today = args.includes('--today');
|
|
18
|
+
const since = argValue(args, '--since');
|
|
19
|
+
const now = process.env.MINIMAX_GAIN_NOW ? new Date(process.env.MINIMAX_GAIN_NOW) : undefined;
|
|
20
|
+
const summary = await summarizeUsage(file, { today, since, now });
|
|
21
|
+
const scope = today ? 'Today' : since ? `Since ${since}` : 'Global Scope';
|
|
22
|
+
console.log(renderGainReport(summary, scope));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.log('Usage: minimax gain [--today] [--since YYYY-MM-DD] [--reset] [--file <usage.jsonl>]');
|
|
26
|
+
}
|
|
27
|
+
main().catch((error) => {
|
|
28
|
+
console.error(error);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElG,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC;AACrG,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/client/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAcxE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B9F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { joinMiniMaxUrl, shouldEnableThinking } from './minimax.js';
|
|
2
|
+
export async function callAnthropicMiniMax(input) {
|
|
3
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
4
|
+
const response = await fetchImpl(joinMiniMaxUrl(input.config.baseUrl, '/v1/messages'), {
|
|
5
|
+
method: 'POST',
|
|
6
|
+
headers: {
|
|
7
|
+
'content-type': 'application/json',
|
|
8
|
+
authorization: `Bearer ${input.config.apiKey}`,
|
|
9
|
+
},
|
|
10
|
+
body: JSON.stringify({
|
|
11
|
+
model: input.config.model,
|
|
12
|
+
max_tokens: input.maxOutputTokens ?? input.config.maxOutputTokens,
|
|
13
|
+
system: input.system,
|
|
14
|
+
...(shouldEnableThinking(input) ? { thinking: { type: 'enabled' } } : {}),
|
|
15
|
+
...(input.config.serviceTier ? { service_tier: input.config.serviceTier } : {}),
|
|
16
|
+
messages: [{ role: 'user', content: input.prompt }],
|
|
17
|
+
}),
|
|
18
|
+
signal: AbortSignal.timeout(input.config.timeoutMs),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw new Error(`MiniMax Anthropic API failed: ${response.status} ${await response.text()}`);
|
|
22
|
+
}
|
|
23
|
+
const raw = (await response.json());
|
|
24
|
+
const text = (raw.content ?? [])
|
|
25
|
+
.filter((block) => block.type === 'text')
|
|
26
|
+
.map((block) => block.text ?? '')
|
|
27
|
+
.join('\n')
|
|
28
|
+
.trim();
|
|
29
|
+
return { text, raw, usage: raw.usage };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/client/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAapE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAuB;IAChE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;SAC/C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;YACzB,UAAU,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe;YACjE,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SACpD,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;KACpD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;IAChE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SAChC,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IAEV,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MiniMaxPluginConfig } from '../config.js';
|
|
2
|
+
export interface MiniMaxCallInput {
|
|
3
|
+
config: MiniMaxPluginConfig;
|
|
4
|
+
system: string;
|
|
5
|
+
prompt: string;
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
maxOutputTokens?: number;
|
|
8
|
+
thinking?: 'enabled' | 'disabled';
|
|
9
|
+
disableThinking?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface MiniMaxCallResult {
|
|
12
|
+
text: string;
|
|
13
|
+
raw: unknown;
|
|
14
|
+
usage?: unknown;
|
|
15
|
+
}
|
|
16
|
+
export declare function joinMiniMaxUrl(baseUrl: string, path: string): string;
|
|
17
|
+
export declare function shouldEnableThinking(input: Pick<MiniMaxCallInput, 'thinking' | 'disableThinking'>): boolean;
|
|
18
|
+
export declare function callMiniMax(input: MiniMaxCallInput): Promise<MiniMaxCallResult>;
|
|
19
|
+
//# sourceMappingURL=minimax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.d.ts","sourceRoot":"","sources":["../../src/client/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,iBAAiB,CAAC,GAAG,OAAO,CAG3G;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGrF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { callAnthropicMiniMax } from './anthropic.js';
|
|
2
|
+
import { callOpenAiMiniMax } from './openai.js';
|
|
3
|
+
export function joinMiniMaxUrl(baseUrl, path) {
|
|
4
|
+
return `${baseUrl.replace(/\/+$/, '')}/${path.replace(/^\/+/, '')}`;
|
|
5
|
+
}
|
|
6
|
+
export function shouldEnableThinking(input) {
|
|
7
|
+
if (input.thinking)
|
|
8
|
+
return input.thinking === 'enabled';
|
|
9
|
+
return !input.disableThinking;
|
|
10
|
+
}
|
|
11
|
+
export async function callMiniMax(input) {
|
|
12
|
+
if (input.config.apiMode === 'anthropic')
|
|
13
|
+
return callAnthropicMiniMax(input);
|
|
14
|
+
return callOpenAiMiniMax(input);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=minimax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../src/client/minimax.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkBhD,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,IAAY;IAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA6D;IAChG,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;IACxD,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,WAAW;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/client/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQxE,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2B3F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { joinMiniMaxUrl, shouldEnableThinking } from './minimax.js';
|
|
2
|
+
export async function callOpenAiMiniMax(input) {
|
|
3
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
4
|
+
const response = await fetchImpl(joinMiniMaxUrl(input.config.baseUrl, '/chat/completions'), {
|
|
5
|
+
method: 'POST',
|
|
6
|
+
headers: {
|
|
7
|
+
'content-type': 'application/json',
|
|
8
|
+
authorization: `Bearer ${input.config.apiKey}`,
|
|
9
|
+
},
|
|
10
|
+
body: JSON.stringify({
|
|
11
|
+
model: input.config.model,
|
|
12
|
+
messages: [
|
|
13
|
+
{ role: 'system', content: input.system },
|
|
14
|
+
{ role: 'user', content: input.prompt },
|
|
15
|
+
],
|
|
16
|
+
max_tokens: input.maxOutputTokens ?? input.config.maxOutputTokens,
|
|
17
|
+
...(shouldEnableThinking(input) ? { extra_body: { reasoning_split: true } } : {}),
|
|
18
|
+
...(input.config.serviceTier ? { service_tier: input.config.serviceTier } : {}),
|
|
19
|
+
}),
|
|
20
|
+
signal: AbortSignal.timeout(input.config.timeoutMs),
|
|
21
|
+
});
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`MiniMax OpenAI API failed: ${response.status} ${await response.text()}`);
|
|
24
|
+
}
|
|
25
|
+
const raw = (await response.json());
|
|
26
|
+
return { text: raw.choices?.[0]?.message?.content?.trim() ?? '', raw, usage: raw.usage };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/client/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAuB;IAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE;QAC1F,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;SAC/C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;YACzB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,UAAU,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe;YACjE,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;KACpD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;IAC7D,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC3F,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type MiniMaxApiMode = 'anthropic' | 'openai';
|
|
2
|
+
export type MiniMaxServiceTier = 'standard' | 'priority';
|
|
3
|
+
export interface MiniMaxPluginConfig {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
apiMode: MiniMaxApiMode;
|
|
6
|
+
model: string;
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
timeoutMs: number;
|
|
9
|
+
maxOutputTokens: number;
|
|
10
|
+
artifactDir: string;
|
|
11
|
+
serviceTier?: MiniMaxServiceTier;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadConfigFromEnv(env?: Record<string, string | undefined>): MiniMaxPluginConfig;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,mBAAmB,CAyB5G"}
|