@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,201 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
export function defaultUsageFile(env = process.env) {
|
|
4
|
+
return env.MINIMAX_USAGE_FILE || `${env.HOME || '.'}/.minimax/usage.jsonl`;
|
|
5
|
+
}
|
|
6
|
+
export async function recordUsage(filePath, record) {
|
|
7
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
8
|
+
const line = JSON.stringify({ ...record, createdAt: record.createdAt ?? new Date().toISOString() }) + '\n';
|
|
9
|
+
await writeFile(filePath, line, { encoding: 'utf8', flag: 'a' });
|
|
10
|
+
}
|
|
11
|
+
function parseSinceDate(value) {
|
|
12
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
13
|
+
return new Date(`${value}T00:00:00.000Z`);
|
|
14
|
+
const parsed = new Date(value);
|
|
15
|
+
if (Number.isNaN(parsed.getTime()))
|
|
16
|
+
throw new Error(`Invalid --since date: ${value}`);
|
|
17
|
+
return parsed;
|
|
18
|
+
}
|
|
19
|
+
function dayRangeUtc(now) {
|
|
20
|
+
const start = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), 0, 0, 0, 0));
|
|
21
|
+
const end = new Date(start.getTime() + 24 * 60 * 60 * 1000);
|
|
22
|
+
return { start, end };
|
|
23
|
+
}
|
|
24
|
+
function filterRecords(records, options) {
|
|
25
|
+
if (options.today) {
|
|
26
|
+
const { start, end } = dayRangeUtc(options.now ?? new Date());
|
|
27
|
+
return records.filter((record) => {
|
|
28
|
+
const createdAt = record.createdAt ? new Date(record.createdAt) : undefined;
|
|
29
|
+
return createdAt && !Number.isNaN(createdAt.getTime()) && createdAt >= start && createdAt < end;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (options.since) {
|
|
33
|
+
const since = parseSinceDate(options.since);
|
|
34
|
+
return records.filter((record) => {
|
|
35
|
+
const createdAt = record.createdAt ? new Date(record.createdAt) : undefined;
|
|
36
|
+
return createdAt && !Number.isNaN(createdAt.getTime()) && createdAt >= since;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return records;
|
|
40
|
+
}
|
|
41
|
+
export async function resetUsage(filePath) {
|
|
42
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
43
|
+
await writeFile(filePath, '', 'utf8');
|
|
44
|
+
}
|
|
45
|
+
export async function summarizeUsage(filePath, options = {}) {
|
|
46
|
+
let text = '';
|
|
47
|
+
try {
|
|
48
|
+
text = await readFile(filePath, 'utf8');
|
|
49
|
+
}
|
|
50
|
+
catch { /* empty */ }
|
|
51
|
+
const allRecords = text.split('\n').filter(Boolean).flatMap((line) => {
|
|
52
|
+
try {
|
|
53
|
+
return [JSON.parse(line)];
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const records = filterRecords(allRecords, options);
|
|
60
|
+
const byToolMap = new Map();
|
|
61
|
+
let inputTokens = 0;
|
|
62
|
+
let outputTokens = 0;
|
|
63
|
+
let hostTokensReturned = 0;
|
|
64
|
+
let durationMs = 0;
|
|
65
|
+
for (const record of records) {
|
|
66
|
+
inputTokens += record.inputTokens || 0;
|
|
67
|
+
outputTokens += record.outputTokens || 0;
|
|
68
|
+
hostTokensReturned += record.hostTokensReturned || 0;
|
|
69
|
+
durationMs += record.durationMs || 0;
|
|
70
|
+
const raw = (record.inputTokens || 0) + (record.outputTokens || 0);
|
|
71
|
+
const saved = Math.max(0, raw - (record.hostTokensReturned || 0));
|
|
72
|
+
const entry = byToolMap.get(record.tool) ?? { tool: record.tool, count: 0, saved: 0, raw: 0, durationMs: 0 };
|
|
73
|
+
entry.count += 1;
|
|
74
|
+
entry.saved += saved;
|
|
75
|
+
entry.raw += raw;
|
|
76
|
+
entry.durationMs += record.durationMs || 0;
|
|
77
|
+
byToolMap.set(record.tool, entry);
|
|
78
|
+
}
|
|
79
|
+
const rawTotal = inputTokens + outputTokens;
|
|
80
|
+
const tokensSaved = Math.max(0, rawTotal - hostTokensReturned);
|
|
81
|
+
const byTool = [...byToolMap.values()]
|
|
82
|
+
.map((entry) => ({ tool: entry.tool, count: entry.count, saved: entry.saved, avgPercent: entry.raw ? (entry.saved / entry.raw) * 100 : 0, durationMs: entry.durationMs }))
|
|
83
|
+
.sort((a, b) => b.saved - a.saved);
|
|
84
|
+
return { totalCalls: records.length, inputTokens, outputTokens, hostTokensReturned, tokensSaved, durationMs, byTool };
|
|
85
|
+
}
|
|
86
|
+
function fmtTokens(value) {
|
|
87
|
+
if (value >= 1_000_000)
|
|
88
|
+
return `${(value / 1_000_000).toFixed(1)}M`;
|
|
89
|
+
if (value >= 1_000)
|
|
90
|
+
return `${(value / 1_000).toFixed(1)}K`;
|
|
91
|
+
return `${Math.round(value)}`;
|
|
92
|
+
}
|
|
93
|
+
function fmtMs(ms) {
|
|
94
|
+
if (ms >= 60_000)
|
|
95
|
+
return `${Math.floor(ms / 60_000)}m${Math.round((ms % 60_000) / 1000)}s`;
|
|
96
|
+
if (ms >= 1000)
|
|
97
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
98
|
+
return `${Math.round(ms)}ms`;
|
|
99
|
+
}
|
|
100
|
+
// --- ANSI helpers ---
|
|
101
|
+
const RESET = '\x1b[0m';
|
|
102
|
+
const BOLD = '\x1b[1m';
|
|
103
|
+
const DIM = '\x1b[2m';
|
|
104
|
+
const CYAN = '\x1b[36m';
|
|
105
|
+
const GREEN = '\x1b[32m';
|
|
106
|
+
const YELLOW = '\x1b[33m';
|
|
107
|
+
const RED = '\x1b[31m';
|
|
108
|
+
function useColor() {
|
|
109
|
+
return process.stdout.isTTY === true && !process.env.NO_COLOR;
|
|
110
|
+
}
|
|
111
|
+
function makeStyles(color) {
|
|
112
|
+
if (!color) {
|
|
113
|
+
const noop = (s) => s;
|
|
114
|
+
return {
|
|
115
|
+
title: noop, dim: noop, bold: noop,
|
|
116
|
+
savingColor: () => noop,
|
|
117
|
+
bar: (pct, width = 25) => {
|
|
118
|
+
const filled = Math.round((Math.max(0, Math.min(pct, 100)) / 100) * width);
|
|
119
|
+
return `${'█'.repeat(filled)}${'░'.repeat(width - filled)}`;
|
|
120
|
+
},
|
|
121
|
+
label: noop,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const savingColor = (pct) => {
|
|
125
|
+
const code = pct >= 60 ? GREEN : pct >= 30 ? YELLOW : RED;
|
|
126
|
+
return (s) => `${code}${s}${RESET}`;
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
title: (s) => `${BOLD}${CYAN}${s}${RESET}`,
|
|
130
|
+
dim: (s) => `${DIM}${s}${RESET}`,
|
|
131
|
+
bold: (s) => `${BOLD}${s}${RESET}`,
|
|
132
|
+
savingColor,
|
|
133
|
+
bar: (pct, width = 25) => {
|
|
134
|
+
const clamped = Math.max(0, Math.min(pct, 100));
|
|
135
|
+
const filled = Math.round((clamped / 100) * width);
|
|
136
|
+
const code = clamped >= 60 ? GREEN : clamped >= 30 ? YELLOW : RED;
|
|
137
|
+
return `${code}${'█'.repeat(filled)}${RESET}${DIM}${'░'.repeat(width - filled)}${RESET}`;
|
|
138
|
+
},
|
|
139
|
+
label: (s) => s,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export function renderGainReport(summary, scope = 'Global Scope', color = useColor()) {
|
|
143
|
+
const s = makeStyles(color);
|
|
144
|
+
const rawTotal = summary.inputTokens + summary.outputTokens;
|
|
145
|
+
const percent = rawTotal ? (summary.tokensSaved / rawTotal) * 100 : 0;
|
|
146
|
+
const colorPct = s.savingColor(percent);
|
|
147
|
+
if (summary.totalCalls === 0) {
|
|
148
|
+
return [
|
|
149
|
+
`${s.title('MiniMax MCP Token Savings')} ${s.dim(`(${scope})`)}`,
|
|
150
|
+
s.dim('════════════════════════════════════════════════════════════'),
|
|
151
|
+
'',
|
|
152
|
+
s.dim('No usage recorded yet. Run some MiniMax MCP tools to start tracking.'),
|
|
153
|
+
].join('\n');
|
|
154
|
+
}
|
|
155
|
+
const SEP1 = s.dim('════════════════════════════════════════════════════════════');
|
|
156
|
+
const SEP2 = s.dim('────────────────────────────────────────────────────────────────────────');
|
|
157
|
+
const delegation = summary.byTool.filter((t) => !t.tool.startsWith('mmx_'));
|
|
158
|
+
const cli = summary.byTool.filter((t) => t.tool.startsWith('mmx_'));
|
|
159
|
+
const lines = [
|
|
160
|
+
`${s.title('MiniMax MCP Token Savings')} ${s.dim(`(${scope})`)}`,
|
|
161
|
+
SEP1,
|
|
162
|
+
'',
|
|
163
|
+
`Total calls: ${s.bold(String(summary.totalCalls))}`,
|
|
164
|
+
`Input tokens: ${fmtTokens(summary.inputTokens)}`,
|
|
165
|
+
`Output tokens: ${fmtTokens(summary.outputTokens)}`,
|
|
166
|
+
`Host returned: ${fmtTokens(summary.hostTokensReturned)}`,
|
|
167
|
+
`Tokens saved: ${s.bold(colorPct(fmtTokens(summary.tokensSaved)))} ${colorPct(`(${percent.toFixed(1)}%)`)}`,
|
|
168
|
+
`Total exec time: ${fmtMs(summary.durationMs)}${summary.totalCalls ? ` ${s.dim(`(avg ${fmtMs(summary.durationMs / summary.totalCalls)})`)}` : ''}`,
|
|
169
|
+
`Efficiency: ${s.bar(percent)} ${s.bold(colorPct(`${percent.toFixed(1)}%`))}`,
|
|
170
|
+
];
|
|
171
|
+
if (delegation.length > 0) {
|
|
172
|
+
lines.push('', s.bold('Delegation ') + s.dim('(token savings)'));
|
|
173
|
+
lines.push(SEP2);
|
|
174
|
+
lines.push(s.dim(' # Tool Count Saved Avg% Time Impact'));
|
|
175
|
+
lines.push(SEP2);
|
|
176
|
+
delegation.slice(0, 10).forEach((entry, index) => {
|
|
177
|
+
const c = s.savingColor(entry.avgPercent);
|
|
178
|
+
lines.push(`${s.dim(String(index + 1).padStart(3) + '.')} ${s.bold(entry.tool.padEnd(28).slice(0, 28))} ` +
|
|
179
|
+
`${String(entry.count).padStart(5)} ` +
|
|
180
|
+
`${c(fmtTokens(entry.saved).padStart(7))} ` +
|
|
181
|
+
`${c(entry.avgPercent.toFixed(1).padStart(5) + '%')} ` +
|
|
182
|
+
`${fmtMs(entry.durationMs).padStart(6)} ` +
|
|
183
|
+
`${s.bar(entry.avgPercent, 10)}`);
|
|
184
|
+
});
|
|
185
|
+
lines.push(SEP2);
|
|
186
|
+
}
|
|
187
|
+
if (cli.length > 0) {
|
|
188
|
+
lines.push('', s.bold('mmx CLI ') + s.dim('(media & API calls)'));
|
|
189
|
+
lines.push(SEP2);
|
|
190
|
+
lines.push(s.dim(' # Tool Count Time'));
|
|
191
|
+
lines.push(SEP2);
|
|
192
|
+
cli.slice(0, 10).forEach((entry, index) => {
|
|
193
|
+
lines.push(`${s.dim(String(index + 1).padStart(3) + '.')} ${s.bold(entry.tool.padEnd(28).slice(0, 28))} ` +
|
|
194
|
+
`${String(entry.count).padStart(5)} ` +
|
|
195
|
+
`${fmtMs(entry.durationMs).padStart(8)}`);
|
|
196
|
+
});
|
|
197
|
+
lines.push(SEP2);
|
|
198
|
+
}
|
|
199
|
+
return lines.join('\n');
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/usage/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MiniMaxPluginConfig } from '../config.js';
|
|
2
|
+
import type { MiniMaxCallResult } from '../client/minimax.js';
|
|
3
|
+
export declare function recordToolUsage(input: {
|
|
4
|
+
tool: string;
|
|
5
|
+
config: MiniMaxPluginConfig;
|
|
6
|
+
result: MiniMaxCallResult;
|
|
7
|
+
hostText: string;
|
|
8
|
+
startedAt: number;
|
|
9
|
+
usageFile?: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=tool-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-usage.d.ts","sourceRoot":"","sources":["../../src/usage/tool-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAa9D,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7L"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defaultUsageFile, recordUsage } from './stats.js';
|
|
2
|
+
function usageNumber(usage, keys) {
|
|
3
|
+
if (!usage || typeof usage !== 'object')
|
|
4
|
+
return 0;
|
|
5
|
+
const source = usage;
|
|
6
|
+
for (const key of keys) {
|
|
7
|
+
const value = source[key];
|
|
8
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
export async function recordToolUsage(input) {
|
|
14
|
+
const inputTokens = usageNumber(input.result.usage, ['input_tokens', 'prompt_tokens']);
|
|
15
|
+
const outputTokens = usageNumber(input.result.usage, ['output_tokens', 'completion_tokens']);
|
|
16
|
+
await recordUsage(input.usageFile ?? defaultUsageFile(), {
|
|
17
|
+
tool: input.tool,
|
|
18
|
+
inputTokens,
|
|
19
|
+
outputTokens,
|
|
20
|
+
hostTokensReturned: Math.ceil(input.hostText.length / 4),
|
|
21
|
+
durationMs: Date.now() - input.startedAt,
|
|
22
|
+
}).catch(() => undefined);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=tool-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-usage.js","sourceRoot":"","sources":["../../src/usage/tool-usage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,SAAS,WAAW,CAAC,KAAc,EAAE,IAAc;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAwI;IAC5K,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IACvF,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7F,MAAM,WAAW,CAAC,KAAK,CAAC,SAAS,IAAI,gBAAgB,EAAE,EAAE;QACvD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW;QACX,YAAY;QACZ,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS;KACzC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/validation/limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/validation/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,EAAE;IACZ,eAAe,EAAE,OAAO;IACxB,aAAa,EAAE,SAAS;IACxB,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE,OAAO;CACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/validation/patch.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAcvE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function validateUnifiedDiff(diff) {
|
|
2
|
+
const files = new Set();
|
|
3
|
+
const blockedOperations = [];
|
|
4
|
+
for (const line of diff.split('\n')) {
|
|
5
|
+
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
6
|
+
if (!match)
|
|
7
|
+
continue;
|
|
8
|
+
for (const candidate of [match[1], match[2]]) {
|
|
9
|
+
if (candidate.startsWith('../') || candidate.includes('/../'))
|
|
10
|
+
blockedOperations.push(`parent traversal: ${candidate}`);
|
|
11
|
+
if (candidate === '.git' || candidate.startsWith('.git/'))
|
|
12
|
+
blockedOperations.push(`git path: ${candidate}`);
|
|
13
|
+
if (candidate === '/dev/null')
|
|
14
|
+
blockedOperations.push('delete operation');
|
|
15
|
+
files.add(candidate);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return { ok: blockedOperations.length === 0, filesTouched: [...files].sort(), blockedOperations };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/validation/patch.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;YACxH,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,iBAAiB,CAAC,IAAI,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;YAC5G,IAAI,SAAS,KAAK,WAAW;gBAAE,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1E,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAC;AACpG,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface CollectedFile {
|
|
2
|
+
absolutePath: string;
|
|
3
|
+
relativePath: string;
|
|
4
|
+
content: string;
|
|
5
|
+
bytes: number;
|
|
6
|
+
redacted: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CollectFilesInput {
|
|
9
|
+
workspaceRoot: string;
|
|
10
|
+
paths: string[];
|
|
11
|
+
maxFiles?: number;
|
|
12
|
+
maxBytesPerFile?: number;
|
|
13
|
+
maxTotalBytes?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function collectFiles(input: CollectFilesInput): Promise<{
|
|
16
|
+
files: CollectedFile[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=collect-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-files.d.ts","sourceRoot":"","sources":["../../src/workspace/collect-files.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqDpH"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { lstat, readdir, readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { DEFAULT_LIMITS } from '../validation/limits.js';
|
|
4
|
+
import { isIgnoredPath } from './ignore.js';
|
|
5
|
+
import { assertSafeWorkspacePath, toRelativeWorkspacePath } from './paths.js';
|
|
6
|
+
import { detectSecretRisk, isSecretLikeFile, redactSecrets } from './secrets.js';
|
|
7
|
+
export async function collectFiles(input) {
|
|
8
|
+
const maxFiles = input.maxFiles ?? DEFAULT_LIMITS.maxFiles;
|
|
9
|
+
const maxBytesPerFile = input.maxBytesPerFile ?? DEFAULT_LIMITS.maxBytesPerFile;
|
|
10
|
+
const maxTotalBytes = input.maxTotalBytes ?? DEFAULT_LIMITS.maxTotalBytes;
|
|
11
|
+
const warnings = [];
|
|
12
|
+
const files = [];
|
|
13
|
+
let totalBytes = 0;
|
|
14
|
+
for (const path of input.paths) {
|
|
15
|
+
const absolute = assertSafeWorkspacePath(input.workspaceRoot, path);
|
|
16
|
+
await visit(absolute);
|
|
17
|
+
}
|
|
18
|
+
files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
19
|
+
return { files, warnings };
|
|
20
|
+
async function visit(absolutePath) {
|
|
21
|
+
if (files.length >= maxFiles) {
|
|
22
|
+
warnings.push(`Skipped files after maxFiles=${maxFiles}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const relativePath = toRelativeWorkspacePath(input.workspaceRoot, absolutePath);
|
|
26
|
+
if (relativePath && isIgnoredPath(relativePath))
|
|
27
|
+
return;
|
|
28
|
+
const info = await lstat(absolutePath);
|
|
29
|
+
if (info.isSymbolicLink()) {
|
|
30
|
+
warnings.push(`Skipped ${relativePath}: symlink not followed`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (info.isDirectory()) {
|
|
34
|
+
const entries = await readdir(absolutePath);
|
|
35
|
+
for (const entry of entries)
|
|
36
|
+
await visit(join(absolutePath, entry));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!info.isFile())
|
|
40
|
+
return;
|
|
41
|
+
if (info.size > maxBytesPerFile) {
|
|
42
|
+
warnings.push(`Skipped ${relativePath}: exceeds maxBytesPerFile=${maxBytesPerFile}`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (totalBytes + info.size > maxTotalBytes) {
|
|
46
|
+
warnings.push(`Skipped ${relativePath}: exceeds maxTotalBytes=${maxTotalBytes}`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const raw = await readFile(absolutePath, 'utf8');
|
|
50
|
+
const risky = detectSecretRisk(relativePath, raw);
|
|
51
|
+
if (risky && isSecretLikeFile(relativePath)) {
|
|
52
|
+
warnings.push(`Skipped ${relativePath}: secret-like file`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const content = risky ? redactSecrets(raw) : raw;
|
|
56
|
+
files.push({ absolutePath, relativePath, content, bytes: Buffer.byteLength(content), redacted: risky });
|
|
57
|
+
totalBytes += info.size;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=collect-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-files.js","sourceRoot":"","sources":["../../src/workspace/collect-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/workspace/ignore.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,qFAOlB,CAAC;AAEX,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG3D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const DEFAULT_IGNORES = [
|
|
2
|
+
'.git',
|
|
3
|
+
'node_modules',
|
|
4
|
+
'dist',
|
|
5
|
+
'coverage',
|
|
6
|
+
'.minimax/runs',
|
|
7
|
+
'.DS_Store',
|
|
8
|
+
];
|
|
9
|
+
export function isIgnoredPath(relativePath) {
|
|
10
|
+
const normalized = relativePath.replaceAll('\\', '/').replace(/^\.\//, '');
|
|
11
|
+
return DEFAULT_IGNORES.some((entry) => normalized === entry || normalized.startsWith(`${entry}/`));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/workspace/ignore.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM;IACN,cAAc;IACd,MAAM;IACN,UAAU;IACV,eAAe;IACf,WAAW;CACH,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,KAAK,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/workspace/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAYxF;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE3F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve, win32 } from 'node:path';
|
|
2
|
+
export function assertSafeWorkspacePath(workspaceRoot, inputPath) {
|
|
3
|
+
const root = resolve(workspaceRoot);
|
|
4
|
+
if (process.platform !== 'win32' && win32.isAbsolute(inputPath)) {
|
|
5
|
+
throw new Error(`Path escapes workspace: ${inputPath}`);
|
|
6
|
+
}
|
|
7
|
+
const resolved = resolve(root, inputPath);
|
|
8
|
+
const rel = relative(root, resolved);
|
|
9
|
+
const normalizedRel = rel.replaceAll('\\', '/');
|
|
10
|
+
if (rel === '' || (normalizedRel !== '..' && !normalizedRel.startsWith('../') && !isAbsolute(rel) && !win32.isAbsolute(rel))) {
|
|
11
|
+
return resolved;
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`Path escapes workspace: ${inputPath}`);
|
|
14
|
+
}
|
|
15
|
+
export function toRelativeWorkspacePath(workspaceRoot, absolutePath) {
|
|
16
|
+
return relative(resolve(workspaceRoot), resolve(absolutePath)).replaceAll('\\', '/');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/workspace/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,UAAU,uBAAuB,CAAC,aAAqB,EAAE,SAAiB;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7H,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,aAAqB,EAAE,YAAoB;IACjF,OAAO,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/workspace/secrets.ts"],"names":[],"mappings":"AASA,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAM/E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASrD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const SECRET_FILE_PATTERNS = [/^\.env(\.|$)/, /private[-_]?key/i, /credentials/i];
|
|
2
|
+
const SECRET_TEXT_PATTERNS = [
|
|
3
|
+
/(["']?api[_-]?key["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi,
|
|
4
|
+
/(["']?token["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi,
|
|
5
|
+
/(["']?password["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi,
|
|
6
|
+
/(["']?secret["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi,
|
|
7
|
+
/(-----BEGIN [A-Z ]*PRIVATE KEY-----)[\s\S]*?(-----END [A-Z ]*PRIVATE KEY-----)/g,
|
|
8
|
+
];
|
|
9
|
+
export function isSecretLikeFile(relativePath) {
|
|
10
|
+
const normalized = relativePath.replaceAll('\\', '/').split('/').pop() ?? relativePath;
|
|
11
|
+
return SECRET_FILE_PATTERNS.some((pattern) => pattern.test(normalized));
|
|
12
|
+
}
|
|
13
|
+
export function detectSecretRisk(relativePath, content) {
|
|
14
|
+
if (isSecretLikeFile(relativePath))
|
|
15
|
+
return true;
|
|
16
|
+
return SECRET_TEXT_PATTERNS.some((pattern) => {
|
|
17
|
+
pattern.lastIndex = 0;
|
|
18
|
+
return pattern.test(content);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export function redactSecrets(content) {
|
|
22
|
+
let redacted = content;
|
|
23
|
+
for (const pattern of SECRET_TEXT_PATTERNS) {
|
|
24
|
+
redacted = redacted.replace(pattern, (_match, prefix, suffix) => {
|
|
25
|
+
if (String(prefix).startsWith('-----BEGIN'))
|
|
26
|
+
return '[REDACTED_PRIVATE_KEY]';
|
|
27
|
+
return `${prefix}[REDACTED]`;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return redacted;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/workspace/secrets.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAClF,MAAM,oBAAoB,GAAG;IAC3B,sDAAsD;IACtD,gDAAgD;IAChD,mDAAmD;IACnD,iDAAiD;IACjD,iFAAiF;CAClF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC;IACvF,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,OAAe;IACpE,IAAI,gBAAgB,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;QAC3C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;YAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,OAAO,wBAAwB,CAAC;YAC7E,OAAO,GAAG,MAAM,YAAY,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hugo.bastidas/minimax-plugin",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP delegation plugin for MiniMax M3 — Claude Code, Codex, and OpenCode compatible",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"minimax-plugin": "./dist/index.js",
|
|
9
|
+
"minimax": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"setup": "node scripts/install.mjs",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest",
|
|
18
|
+
"typecheck": "tsc --noEmit",
|
|
19
|
+
"postbuild": "node -e \"const {chmodSync}=require('fs');chmodSync('dist/cli.js',0o755);\"",
|
|
20
|
+
"prepublishOnly": "npm run build && npm test"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@clack/prompts": "^1.4.0",
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
25
|
+
"zod": "^3.23.8"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.14.0",
|
|
29
|
+
"typescript": "^5.5.0",
|
|
30
|
+
"vitest": "^2.0.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"mcp",
|
|
34
|
+
"minimax",
|
|
35
|
+
"claude-code",
|
|
36
|
+
"codex",
|
|
37
|
+
"opencode",
|
|
38
|
+
"agent",
|
|
39
|
+
"delegation"
|
|
40
|
+
],
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://gitlab.com/tools5290918/minimax-plugin.git"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://gitlab.com/tools5290918/minimax-plugin",
|
|
46
|
+
"bugs": "https://gitlab.com/tools5290918/minimax-plugin/-/issues",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=20.0.0"
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"dist",
|
|
53
|
+
"scripts",
|
|
54
|
+
".claude-plugin",
|
|
55
|
+
"skills",
|
|
56
|
+
"codex-plugin.toml",
|
|
57
|
+
".mcp.json",
|
|
58
|
+
"README.md",
|
|
59
|
+
"AGENTS.md"
|
|
60
|
+
],
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public"
|
|
63
|
+
}
|
|
64
|
+
}
|