@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.
Files changed (143) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/.mcp.json +3 -0
  3. package/AGENTS.md +37 -0
  4. package/README.md +263 -0
  5. package/codex-plugin.toml +3 -0
  6. package/dist/artifacts/metadata.d.ts +3 -0
  7. package/dist/artifacts/metadata.d.ts.map +1 -0
  8. package/dist/artifacts/metadata.js +8 -0
  9. package/dist/artifacts/metadata.js.map +1 -0
  10. package/dist/artifacts/runs.d.ts +27 -0
  11. package/dist/artifacts/runs.d.ts.map +1 -0
  12. package/dist/artifacts/runs.js +43 -0
  13. package/dist/artifacts/runs.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +31 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/client/anthropic.d.ts +3 -0
  19. package/dist/client/anthropic.d.ts.map +1 -0
  20. package/dist/client/anthropic.js +31 -0
  21. package/dist/client/anthropic.js.map +1 -0
  22. package/dist/client/minimax.d.ts +19 -0
  23. package/dist/client/minimax.d.ts.map +1 -0
  24. package/dist/client/minimax.js +16 -0
  25. package/dist/client/minimax.js.map +1 -0
  26. package/dist/client/openai.d.ts +3 -0
  27. package/dist/client/openai.d.ts.map +1 -0
  28. package/dist/client/openai.js +28 -0
  29. package/dist/client/openai.js.map +1 -0
  30. package/dist/config.d.ts +14 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +34 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/hooks/claude-routing-reminder.d.ts +2 -0
  35. package/dist/hooks/claude-routing-reminder.d.ts.map +1 -0
  36. package/dist/hooks/claude-routing-reminder.js +12 -0
  37. package/dist/hooks/claude-routing-reminder.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +8 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/install/claude-config.d.ts +15 -0
  43. package/dist/install/claude-config.d.ts.map +1 -0
  44. package/dist/install/claude-config.js +130 -0
  45. package/dist/install/claude-config.js.map +1 -0
  46. package/dist/install/codex-config.d.ts +11 -0
  47. package/dist/install/codex-config.d.ts.map +1 -0
  48. package/dist/install/codex-config.js +83 -0
  49. package/dist/install/codex-config.js.map +1 -0
  50. package/dist/install/global-instructions.d.ts +9 -0
  51. package/dist/install/global-instructions.d.ts.map +1 -0
  52. package/dist/install/global-instructions.js +90 -0
  53. package/dist/install/global-instructions.js.map +1 -0
  54. package/dist/install/index.d.ts +6 -0
  55. package/dist/install/index.d.ts.map +1 -0
  56. package/dist/install/index.js +6 -0
  57. package/dist/install/index.js.map +1 -0
  58. package/dist/install/native-multimodal-config.d.ts +4 -0
  59. package/dist/install/native-multimodal-config.d.ts.map +1 -0
  60. package/dist/install/native-multimodal-config.js +50 -0
  61. package/dist/install/native-multimodal-config.js.map +1 -0
  62. package/dist/install/opencode-config.d.ts +13 -0
  63. package/dist/install/opencode-config.d.ts.map +1 -0
  64. package/dist/install/opencode-config.js +65 -0
  65. package/dist/install/opencode-config.js.map +1 -0
  66. package/dist/install/shell-alias.d.ts +9 -0
  67. package/dist/install/shell-alias.d.ts.map +1 -0
  68. package/dist/install/shell-alias.js +86 -0
  69. package/dist/install/shell-alias.js.map +1 -0
  70. package/dist/server.d.ts +3 -0
  71. package/dist/server.d.ts.map +1 -0
  72. package/dist/server.js +125 -0
  73. package/dist/server.js.map +1 -0
  74. package/dist/tools/ask.d.ts +18 -0
  75. package/dist/tools/ask.d.ts.map +1 -0
  76. package/dist/tools/ask.js +18 -0
  77. package/dist/tools/ask.js.map +1 -0
  78. package/dist/tools/delegate.d.ts +15 -0
  79. package/dist/tools/delegate.d.ts.map +1 -0
  80. package/dist/tools/delegate.js +31 -0
  81. package/dist/tools/delegate.js.map +1 -0
  82. package/dist/tools/inspect-run.d.ts +10 -0
  83. package/dist/tools/inspect-run.d.ts.map +1 -0
  84. package/dist/tools/inspect-run.js +23 -0
  85. package/dist/tools/inspect-run.js.map +1 -0
  86. package/dist/tools/mmx-cli.d.ts +92 -0
  87. package/dist/tools/mmx-cli.d.ts.map +1 -0
  88. package/dist/tools/mmx-cli.js +211 -0
  89. package/dist/tools/mmx-cli.js.map +1 -0
  90. package/dist/tools/model-status.d.ts +8 -0
  91. package/dist/tools/model-status.d.ts.map +1 -0
  92. package/dist/tools/model-status.js +28 -0
  93. package/dist/tools/model-status.js.map +1 -0
  94. package/dist/tools/propose-patch.d.ts +14 -0
  95. package/dist/tools/propose-patch.d.ts.map +1 -0
  96. package/dist/tools/propose-patch.js +26 -0
  97. package/dist/tools/propose-patch.js.map +1 -0
  98. package/dist/tools/review-diff.d.ts +14 -0
  99. package/dist/tools/review-diff.d.ts.map +1 -0
  100. package/dist/tools/review-diff.js +52 -0
  101. package/dist/tools/review-diff.js.map +1 -0
  102. package/dist/tools/summarize.d.ts +13 -0
  103. package/dist/tools/summarize.d.ts.map +1 -0
  104. package/dist/tools/summarize.js +28 -0
  105. package/dist/tools/summarize.js.map +1 -0
  106. package/dist/usage/stats.d.ts +34 -0
  107. package/dist/usage/stats.d.ts.map +1 -0
  108. package/dist/usage/stats.js +201 -0
  109. package/dist/usage/stats.js.map +1 -0
  110. package/dist/usage/tool-usage.d.ts +11 -0
  111. package/dist/usage/tool-usage.d.ts.map +1 -0
  112. package/dist/usage/tool-usage.js +24 -0
  113. package/dist/usage/tool-usage.js.map +1 -0
  114. package/dist/validation/limits.d.ts +8 -0
  115. package/dist/validation/limits.d.ts.map +1 -0
  116. package/dist/validation/limits.js +8 -0
  117. package/dist/validation/limits.js.map +1 -0
  118. package/dist/validation/patch.d.ts +7 -0
  119. package/dist/validation/patch.d.ts.map +1 -0
  120. package/dist/validation/patch.js +20 -0
  121. package/dist/validation/patch.js.map +1 -0
  122. package/dist/workspace/collect-files.d.ts +19 -0
  123. package/dist/workspace/collect-files.d.ts.map +1 -0
  124. package/dist/workspace/collect-files.js +60 -0
  125. package/dist/workspace/collect-files.js.map +1 -0
  126. package/dist/workspace/ignore.d.ts +3 -0
  127. package/dist/workspace/ignore.d.ts.map +1 -0
  128. package/dist/workspace/ignore.js +13 -0
  129. package/dist/workspace/ignore.js.map +1 -0
  130. package/dist/workspace/paths.d.ts +3 -0
  131. package/dist/workspace/paths.d.ts.map +1 -0
  132. package/dist/workspace/paths.js +18 -0
  133. package/dist/workspace/paths.js.map +1 -0
  134. package/dist/workspace/secrets.d.ts +4 -0
  135. package/dist/workspace/secrets.d.ts.map +1 -0
  136. package/dist/workspace/secrets.js +32 -0
  137. package/dist/workspace/secrets.js.map +1 -0
  138. package/package.json +64 -0
  139. package/scripts/claude-config.mjs +3 -0
  140. package/scripts/codex-config.mjs +3 -0
  141. package/scripts/install.mjs +548 -0
  142. package/scripts/opencode-config.mjs +3 -0
  143. package/skills/minimax-delegation/SKILL.md +24 -0
package/dist/config.js ADDED
@@ -0,0 +1,34 @@
1
+ import { DEFAULT_LIMITS } from './validation/limits.js';
2
+ export function loadConfigFromEnv(env = process.env) {
3
+ const apiKey = env.MINIMAX_API_KEY?.trim();
4
+ if (!apiKey)
5
+ throw new Error('MINIMAX_API_KEY is required');
6
+ const apiMode = (env.MINIMAX_API_MODE ?? 'anthropic').trim().toLowerCase();
7
+ if (apiMode !== 'anthropic' && apiMode !== 'openai') {
8
+ throw new Error('MINIMAX_API_MODE must be anthropic or openai');
9
+ }
10
+ const serviceTier = env.MINIMAX_SERVICE_TIER?.trim().toLowerCase();
11
+ if (serviceTier && serviceTier !== 'standard' && serviceTier !== 'priority') {
12
+ throw new Error('MINIMAX_SERVICE_TIER must be standard or priority');
13
+ }
14
+ const defaultBaseUrl = apiMode === 'anthropic' ? 'https://api.minimax.io/anthropic' : 'https://api.minimax.io/v1';
15
+ return {
16
+ apiKey,
17
+ apiMode,
18
+ model: env.MINIMAX_MODEL?.trim() || 'MiniMax-M3',
19
+ baseUrl: env.MINIMAX_BASE_URL?.trim() || defaultBaseUrl,
20
+ timeoutMs: readPositiveInt(env.MINIMAX_TIMEOUT_MS, DEFAULT_LIMITS.timeoutMs),
21
+ maxOutputTokens: readPositiveInt(env.MINIMAX_MAX_OUTPUT_TOKENS, DEFAULT_LIMITS.maxOutputTokens),
22
+ artifactDir: env.MINIMAX_ARTIFACT_DIR?.trim() || '.minimax/runs',
23
+ serviceTier: serviceTier,
24
+ };
25
+ }
26
+ function readPositiveInt(value, fallback) {
27
+ if (!value)
28
+ return fallback;
29
+ const parsed = Number.parseInt(value, 10);
30
+ if (!Number.isFinite(parsed) || parsed <= 0)
31
+ return fallback;
32
+ return parsed;
33
+ }
34
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgBxD,MAAM,UAAU,iBAAiB,CAAC,MAA0C,OAAO,CAAC,GAAG;IACrF,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3E,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,WAAW,GAAG,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,WAAW,IAAI,WAAW,KAAK,UAAU,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAElH,OAAO;QACL,MAAM;QACN,OAAO;QACP,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,YAAY;QAChD,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,cAAc;QACvD,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,SAAS,CAAC;QAC5E,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,yBAAyB,EAAE,cAAc,CAAC,eAAe,CAAC;QAC/F,WAAW,EAAE,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,eAAe;QAChE,WAAW,EAAE,WAA6C;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB,EAAE,QAAgB;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude-routing-reminder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-routing-reminder.d.ts","sourceRoot":"","sources":["../../src/hooks/claude-routing-reminder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ const REMINDER = [
2
+ 'MiniMax MCP routing reminder:',
3
+ 'The `minimax` MCP server is available for token-heavy delegation.',
4
+ 'Use MiniMax only as a bounded worker: implementation drafts, mechanical refactors, docs updates, test scaffolds, migration boilerplate, context compression, or optional second opinions. Keep planning, architecture, debugging, final review, verification, and authority with you, the host agent. Inspect the currently available tools exposed by the `minimax` MCP server and choose only when the task fits this worker boundary.',
5
+ 'Do not delegate secrets, .env files, .git data, dependency folders, or final authority decisions.',
6
+ ].join(' ');
7
+ function main() {
8
+ process.stdout.write(REMINDER);
9
+ }
10
+ main();
11
+ export {};
12
+ //# sourceMappingURL=claude-routing-reminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-routing-reminder.js","sourceRoot":"","sources":["../../src/hooks/claude-routing-reminder.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG;IACf,+BAA+B;IAC/B,mEAAmE;IACnE,0aAA0a;IAC1a,mGAAmG;CACpG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,SAAS,IAAI;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { startServer } from './server.js';
3
+ startServer().catch((err) => {
4
+ const msg = err instanceof Error ? err.message : String(err);
5
+ process.stderr.write(`Fatal: ${msg}\n`);
6
+ process.exit(1);
7
+ });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACnC,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface ClaudeMcpServer {
2
+ command: string;
3
+ args: string[];
4
+ env: Record<string, string>;
5
+ }
6
+ export declare function readJsonFile(filePath: string): Promise<unknown>;
7
+ export declare function writeJsonFile(filePath: string, data: unknown): Promise<void>;
8
+ export declare function writeClaudeConfig(configPath: string, server: ClaudeMcpServer): Promise<void>;
9
+ export declare function readClaudeMiniMaxEnv(configPath: string): Promise<Record<string, string>>;
10
+ export declare function removeClaudeConfig(configPath: string): Promise<void>;
11
+ export declare function writeClaudeHooksConfig(settingsPath: string, hookScriptPath: string): Promise<void>;
12
+ export declare function removeClaudeHooksConfig(settingsPath: string): Promise<void>;
13
+ export declare function writeClaudeGlobalInstructions(filePath: string): Promise<void>;
14
+ export declare function removeClaudeGlobalInstructions(filePath: string): Promise<void>;
15
+ //# sourceMappingURL=claude-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-config.d.ts","sourceRoot":"","sources":["../../src/install/claude-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAKD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAelG;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAe9F;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E;AA0BD,wBAAsB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBxG;AAED,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBjF;AAED,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF"}
@@ -0,0 +1,130 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { removeGlobalInstructions, writeGlobalInstructions } from './global-instructions.js';
4
+ const MINIMAX_HOOK_MARKER = '--minimax-plugin-hook';
5
+ const SESSION_START_MATCHERS = ['startup', 'resume', 'clear', 'compact'];
6
+ export async function readJsonFile(filePath) {
7
+ const text = await readFile(filePath, 'utf8');
8
+ return JSON.parse(text);
9
+ }
10
+ export async function writeJsonFile(filePath, data) {
11
+ await mkdir(dirname(filePath), { recursive: true });
12
+ await writeFile(filePath, JSON.stringify(data, null, 2) + '\n', 'utf8');
13
+ }
14
+ export async function writeClaudeConfig(configPath, server) {
15
+ let config;
16
+ try {
17
+ config = (await readJsonFile(configPath));
18
+ }
19
+ catch {
20
+ config = {};
21
+ }
22
+ const mcpServers = (config.mcpServers ?? {});
23
+ mcpServers.minimax = {
24
+ command: server.command,
25
+ args: server.args,
26
+ env: server.env,
27
+ };
28
+ config.mcpServers = mcpServers;
29
+ await writeJsonFile(configPath, config);
30
+ }
31
+ export async function readClaudeMiniMaxEnv(configPath) {
32
+ try {
33
+ const config = (await readJsonFile(configPath));
34
+ const mcpServers = config.mcpServers;
35
+ const minimax = mcpServers?.minimax;
36
+ const env = minimax?.env;
37
+ if (!env || typeof env !== 'object')
38
+ return {};
39
+ return Object.fromEntries(Object.entries(env)
40
+ .filter(([, value]) => typeof value === 'string')
41
+ .map(([key, value]) => [key, value]));
42
+ }
43
+ catch {
44
+ return {};
45
+ }
46
+ }
47
+ export async function removeClaudeConfig(configPath) {
48
+ const config = (await readJsonFile(configPath));
49
+ const mcpServers = (config.mcpServers ?? {});
50
+ delete mcpServers.minimax;
51
+ config.mcpServers = mcpServers;
52
+ await writeJsonFile(configPath, config);
53
+ }
54
+ function hookCommand(scriptPath) {
55
+ return `node ${JSON.stringify(scriptPath)} ${MINIMAX_HOOK_MARKER}`;
56
+ }
57
+ function isManagedMiniMaxHook(hook) {
58
+ return Boolean(hook
59
+ && typeof hook === 'object'
60
+ && typeof hook.command === 'string'
61
+ && hook.command.includes(MINIMAX_HOOK_MARKER));
62
+ }
63
+ function removeManagedHooksFromEventGroups(groups) {
64
+ if (!Array.isArray(groups))
65
+ return [];
66
+ return groups.flatMap((group) => {
67
+ if (!group || typeof group !== 'object')
68
+ return [];
69
+ const current = group;
70
+ const hooks = Array.isArray(current.hooks) ? current.hooks.filter((hook) => !isManagedMiniMaxHook(hook)) : [];
71
+ if (hooks.length === 0)
72
+ return [];
73
+ return [{ ...current, hooks }];
74
+ });
75
+ }
76
+ export async function writeClaudeHooksConfig(settingsPath, hookScriptPath) {
77
+ let config;
78
+ try {
79
+ config = (await readJsonFile(settingsPath));
80
+ }
81
+ catch {
82
+ config = {};
83
+ }
84
+ const hooks = (config.hooks && typeof config.hooks === 'object' ? config.hooks : {});
85
+ const command = hookCommand(hookScriptPath);
86
+ const handler = { type: 'command', command, timeout: 5 };
87
+ hooks.UserPromptSubmit = [
88
+ ...removeManagedHooksFromEventGroups(hooks.UserPromptSubmit),
89
+ { hooks: [handler] },
90
+ ];
91
+ hooks.SessionStart = [
92
+ ...removeManagedHooksFromEventGroups(hooks.SessionStart),
93
+ ...SESSION_START_MATCHERS.map((matcher) => ({ matcher, hooks: [handler] })),
94
+ ];
95
+ config.hooks = hooks;
96
+ await writeJsonFile(settingsPath, config);
97
+ }
98
+ export async function removeClaudeHooksConfig(settingsPath) {
99
+ let config;
100
+ try {
101
+ config = (await readJsonFile(settingsPath));
102
+ }
103
+ catch {
104
+ return;
105
+ }
106
+ const hooks = (config.hooks && typeof config.hooks === 'object' ? config.hooks : {});
107
+ for (const eventName of Object.keys(hooks)) {
108
+ const remaining = removeManagedHooksFromEventGroups(hooks[eventName]);
109
+ if (remaining.length > 0) {
110
+ hooks[eventName] = remaining;
111
+ }
112
+ else {
113
+ delete hooks[eventName];
114
+ }
115
+ }
116
+ if (Object.keys(hooks).length > 0) {
117
+ config.hooks = hooks;
118
+ }
119
+ else {
120
+ delete config.hooks;
121
+ }
122
+ await writeJsonFile(settingsPath, config);
123
+ }
124
+ export async function writeClaudeGlobalInstructions(filePath) {
125
+ await writeGlobalInstructions(filePath);
126
+ }
127
+ export async function removeClaudeGlobalInstructions(filePath) {
128
+ await removeGlobalInstructions(filePath);
129
+ }
130
+ //# sourceMappingURL=claude-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../../src/install/claude-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface CodexMcpServer {
2
+ command: string;
3
+ args: string[];
4
+ env: Record<string, string>;
5
+ }
6
+ export declare function writeCodexConfig(configPath: string, server: CodexMcpServer): Promise<void>;
7
+ export declare function readCodexMiniMaxEnv(configPath: string): Promise<Record<string, string>>;
8
+ export declare function removeCodexConfig(configPath: string): Promise<void>;
9
+ export declare function writeCodexGlobalInstructions(filePath: string): Promise<void>;
10
+ export declare function removeCodexGlobalInstructions(filePath: string): Promise<void>;
11
+ //# sourceMappingURL=codex-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config.d.ts","sourceRoot":"","sources":["../../src/install/codex-config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhG;AAMD,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsB7F;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AAED,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF;AAED,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF"}
@@ -0,0 +1,83 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { removeGlobalInstructions, writeGlobalInstructions } from './global-instructions.js';
4
+ const TOML_MINIMAX_START = '# >>> minimax-plugin >>>';
5
+ const TOML_MINIMAX_END = '# <<< minimax-plugin <<<';
6
+ function escapeRegExp(str) {
7
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
8
+ }
9
+ export async function writeCodexConfig(configPath, server) {
10
+ let existing = '';
11
+ try {
12
+ existing = await readFile(configPath, 'utf8');
13
+ }
14
+ catch { /* new file */ }
15
+ const envLines = Object.entries(server.env).map(([key, value]) => `${key} = "${value}"`).join('\n');
16
+ const block = [
17
+ TOML_MINIMAX_START,
18
+ `[mcp_servers.minimax]`,
19
+ `command = "${server.command}"`,
20
+ `args = ${JSON.stringify(server.args)}`,
21
+ `[mcp_servers.minimax.env]`,
22
+ envLines,
23
+ TOML_MINIMAX_END,
24
+ ].join('\n');
25
+ const stripped = existing.replace(new RegExp(`${escapeRegExp(TOML_MINIMAX_START)}[\\s\\S]*?${escapeRegExp(TOML_MINIMAX_END)}`, 'g'), '').trimEnd();
26
+ const updated = stripped ? `${stripped}\n\n${block}\n` : `${block}\n`;
27
+ await mkdir(dirname(configPath), { recursive: true });
28
+ await writeFile(configPath, updated, 'utf8');
29
+ }
30
+ function parseTomlStringValue(value) {
31
+ return value.trim().replace(/^["']|["']$/g, '');
32
+ }
33
+ export async function readCodexMiniMaxEnv(configPath) {
34
+ let existing = '';
35
+ try {
36
+ existing = await readFile(configPath, 'utf8');
37
+ }
38
+ catch {
39
+ return {};
40
+ }
41
+ const managedMatch = existing.match(new RegExp(`${escapeRegExp(TOML_MINIMAX_START)}([\\s\\S]*?)${escapeRegExp(TOML_MINIMAX_END)}`));
42
+ const source = managedMatch?.[1] ?? existing;
43
+ const env = {};
44
+ let inMiniMaxEnv = false;
45
+ for (const rawLine of source.split(/\r?\n/)) {
46
+ const line = rawLine.trim();
47
+ if (!line || line.startsWith('#'))
48
+ continue;
49
+ if (line.startsWith('[')) {
50
+ inMiniMaxEnv = line === '[mcp_servers.minimax.env]';
51
+ continue;
52
+ }
53
+ if (!inMiniMaxEnv)
54
+ continue;
55
+ const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.+)$/);
56
+ if (match)
57
+ env[match[1]] = parseTomlStringValue(match[2]);
58
+ }
59
+ return env;
60
+ }
61
+ export async function removeCodexConfig(configPath) {
62
+ let existing = '';
63
+ try {
64
+ existing = await readFile(configPath, 'utf8');
65
+ }
66
+ catch {
67
+ return;
68
+ }
69
+ const stripped = existing.replace(new RegExp(`${escapeRegExp(TOML_MINIMAX_START)}[\\s\\S]*?${escapeRegExp(TOML_MINIMAX_END)}`, 'g'), '').trimEnd();
70
+ if (stripped) {
71
+ await writeFile(configPath, stripped + '\n', 'utf8');
72
+ }
73
+ else {
74
+ await writeFile(configPath, '', 'utf8');
75
+ }
76
+ }
77
+ export async function writeCodexGlobalInstructions(filePath) {
78
+ await writeGlobalInstructions(filePath);
79
+ }
80
+ export async function removeCodexGlobalInstructions(filePath) {
81
+ await removeGlobalInstructions(filePath);
82
+ }
83
+ //# sourceMappingURL=codex-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config.js","sourceRoot":"","sources":["../../src/install/codex-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const GLOBAL_INSTRUCTIONS_START = "<!-- >>> minimax-plugin >>> -->";
2
+ export declare const GLOBAL_INSTRUCTIONS_END = "<!-- <<< minimax-plugin <<< -->";
3
+ export declare const MINIMAX_INSTRUCTIONS_FILE = "MINIMAX.md";
4
+ export declare const MINIMAX_GLOBAL_INSTRUCTIONS: string;
5
+ export declare function stripManagedMiniMaxInstructions(content: string): string;
6
+ export declare function minimaxInstructionsPath(globalInstructionsPath: string): string;
7
+ export declare function writeGlobalInstructions(filePath: string): Promise<void>;
8
+ export declare function removeGlobalInstructions(filePath: string): Promise<void>;
9
+ //# sourceMappingURL=global-instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-instructions.d.ts","sourceRoot":"","sources":["../../src/install/global-instructions.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AACzE,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,eAAO,MAAM,2BAA2B,QA+B5B,CAAC;AA2Bb,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,uBAAuB,CAAC,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9E"}
@@ -0,0 +1,90 @@
1
+ import { readFile, writeFile, mkdir, rm } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ export const GLOBAL_INSTRUCTIONS_START = '<!-- >>> minimax-plugin >>> -->';
4
+ export const GLOBAL_INSTRUCTIONS_END = '<!-- <<< minimax-plugin <<< -->';
5
+ export const MINIMAX_INSTRUCTIONS_FILE = 'MINIMAX.md';
6
+ export const MINIMAX_GLOBAL_INSTRUCTIONS = [
7
+ '## MiniMax MCP routing',
8
+ '',
9
+ 'Use MiniMax MCP as a bounded worker to offload token-heavy or mechanical work.',
10
+ 'Delegate when: the task is self-contained, the context is large, or the output',
11
+ 'is a draft that you will review before applying. Keep planning, architecture,',
12
+ 'debugging, final review, and authority with you.',
13
+ '',
14
+ '**Text/code tasks — use these tools:**',
15
+ '- `ask_minimax` — quick question, no file access needed',
16
+ '- `delegate_task` — implementation draft, mechanical refactor, docs update, test scaffold, migration boilerplate',
17
+ '- `summarize_context` — architecture/risk/onboarding summary of large directories',
18
+ '- `review_diff` — optional second-opinion on a diff (you remain final reviewer)',
19
+ '- `propose_patch` — draft a patch as artifact; you apply it after review',
20
+ '',
21
+ '**Multimodal tasks — use mmx_* tools:**',
22
+ '- `mmx_image_generate` — generate images (supports subjectRef for character consistency)',
23
+ '- `mmx_speech_synthesize` / `mmx_speech_voices` — text-to-speech',
24
+ '- `mmx_music_generate` / `mmx_music_cover` — music generation',
25
+ '- `mmx_vision_describe` — describe or analyze an image',
26
+ '- `mmx_search_query` — web search via MiniMax',
27
+ '- `mmx_text_chat` — direct text chat via mmx CLI',
28
+ '',
29
+ '**Never delegate:**',
30
+ '- Architecture decisions or debugging authority',
31
+ '- Final code review or verification',
32
+ '- Secrets, .env files, .git data, or credential-bearing files',
33
+ '',
34
+ '**Failure policy:** If a MiniMax tool fails, times out, or returns unusable output —',
35
+ 'stop that path, tell the user what failed, and continue locally only after stating',
36
+ 'MiniMax failed or the user approves a fallback.',
37
+ ].join('\n');
38
+ function escapeRegExp(str) {
39
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
40
+ }
41
+ function instructionReference(filePath) {
42
+ return `@${resolve(filePath)}`;
43
+ }
44
+ function managedReferenceBlock(startMarker, endMarker, targetPath) {
45
+ return [
46
+ startMarker,
47
+ instructionReference(targetPath),
48
+ endMarker,
49
+ ].join('\n');
50
+ }
51
+ function stripManagedBlock(content, startMarker, endMarker) {
52
+ return content
53
+ .replace(new RegExp(`${escapeRegExp(startMarker)}[\\s\\S]*?${escapeRegExp(endMarker)}`, 'g'), '')
54
+ .trimEnd();
55
+ }
56
+ export function stripManagedMiniMaxInstructions(content) {
57
+ return stripManagedBlock(content, GLOBAL_INSTRUCTIONS_START, GLOBAL_INSTRUCTIONS_END);
58
+ }
59
+ export function minimaxInstructionsPath(globalInstructionsPath) {
60
+ return join(dirname(globalInstructionsPath), MINIMAX_INSTRUCTIONS_FILE);
61
+ }
62
+ export async function writeGlobalInstructions(filePath) {
63
+ const targetPath = minimaxInstructionsPath(filePath);
64
+ let existing = '';
65
+ try {
66
+ existing = await readFile(filePath, 'utf8');
67
+ }
68
+ catch { /* new file */ }
69
+ const stripped = stripManagedMiniMaxInstructions(existing);
70
+ const block = managedReferenceBlock(GLOBAL_INSTRUCTIONS_START, GLOBAL_INSTRUCTIONS_END, targetPath);
71
+ const updated = stripped ? `${stripped}\n\n${block}\n` : `${block}\n`;
72
+ await mkdir(dirname(filePath), { recursive: true });
73
+ await mkdir(dirname(targetPath), { recursive: true });
74
+ await writeFile(targetPath, `${MINIMAX_GLOBAL_INSTRUCTIONS}\n`, 'utf8');
75
+ await writeFile(filePath, updated, 'utf8');
76
+ }
77
+ export async function removeGlobalInstructions(filePath) {
78
+ let existing = '';
79
+ try {
80
+ existing = await readFile(filePath, 'utf8');
81
+ }
82
+ catch {
83
+ await rm(minimaxInstructionsPath(filePath), { force: true });
84
+ return;
85
+ }
86
+ const stripped = stripManagedMiniMaxInstructions(existing);
87
+ await writeFile(filePath, stripped ? `${stripped}\n` : '', 'utf8');
88
+ await rm(minimaxInstructionsPath(filePath), { force: true });
89
+ }
90
+ //# sourceMappingURL=global-instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-instructions.js","sourceRoot":"","sources":["../../src/install/global-instructions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { writeOpenCodeConfig, removeOpenCodeConfig, readOpenCodeMiniMaxEnv, writeOpenCodeGlobalInstructions, removeOpenCodeGlobalInstructions, } from './opencode-config.js';
2
+ export { writeClaudeConfig, removeClaudeConfig, readClaudeMiniMaxEnv, writeClaudeHooksConfig, removeClaudeHooksConfig, writeClaudeGlobalInstructions, removeClaudeGlobalInstructions, } from './claude-config.js';
3
+ export { writeCodexConfig, removeCodexConfig, readCodexMiniMaxEnv, writeCodexGlobalInstructions, removeCodexGlobalInstructions, } from './codex-config.js';
4
+ export { removeClaudeNativeMultimodalConfig, removeOpenCodeNativeMultimodalConfig, removeCodexNativeMultimodalConfig } from './native-multimodal-config.js';
5
+ export { writeShellAlias, removeShellAlias, isShellAliasInstalled, isLegacyAliasInstalled, shellRcPath, DEFAULT_ALIAS_NAME } from './shell-alias.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kCAAkC,EAAE,oCAAoC,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAC5J,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { writeOpenCodeConfig, removeOpenCodeConfig, readOpenCodeMiniMaxEnv, writeOpenCodeGlobalInstructions, removeOpenCodeGlobalInstructions, } from './opencode-config.js';
2
+ export { writeClaudeConfig, removeClaudeConfig, readClaudeMiniMaxEnv, writeClaudeHooksConfig, removeClaudeHooksConfig, writeClaudeGlobalInstructions, removeClaudeGlobalInstructions, } from './claude-config.js';
3
+ export { writeCodexConfig, removeCodexConfig, readCodexMiniMaxEnv, writeCodexGlobalInstructions, removeCodexGlobalInstructions, } from './codex-config.js';
4
+ export { removeClaudeNativeMultimodalConfig, removeOpenCodeNativeMultimodalConfig, removeCodexNativeMultimodalConfig } from './native-multimodal-config.js';
5
+ export { writeShellAlias, removeShellAlias, isShellAliasInstalled, isLegacyAliasInstalled, shellRcPath, DEFAULT_ALIAS_NAME } from './shell-alias.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kCAAkC,EAAE,oCAAoC,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAC5J,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function removeClaudeNativeMultimodalConfig(configPath: string): Promise<void>;
2
+ export declare function removeOpenCodeNativeMultimodalConfig(configPath: string): Promise<void>;
3
+ export declare function removeCodexNativeMultimodalConfig(configPath: string): Promise<void>;
4
+ //# sourceMappingURL=native-multimodal-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-multimodal-config.d.ts","sourceRoot":"","sources":["../../src/install/native-multimodal-config.ts"],"names":[],"mappings":"AAYA,wBAAsB,kCAAkC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1F;AAED,wBAAsB,oCAAoC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5F;AAED,wBAAsB,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzF"}
@@ -0,0 +1,50 @@
1
+ import { readJsonFile, writeJsonFile } from './claude-config.js';
2
+ import { readJsoncOrJson, writeJsonFile as writeOpenCodeJsonFile } from './opencode-config.js';
3
+ import { readFile, writeFile } from 'node:fs/promises';
4
+ const TOML_NATIVE_MULTIMODAL_START = '# >>> minimax-multimodal >>>';
5
+ const TOML_NATIVE_MULTIMODAL_END = '# <<< minimax-multimodal <<<';
6
+ const SERVER_NAME = 'minimax_multimodal';
7
+ function escapeRegExp(str) {
8
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
9
+ }
10
+ export async function removeClaudeNativeMultimodalConfig(configPath) {
11
+ let config;
12
+ try {
13
+ config = (await readJsonFile(configPath));
14
+ }
15
+ catch {
16
+ return;
17
+ }
18
+ const mcpServers = (config.mcpServers ?? {});
19
+ delete mcpServers[SERVER_NAME];
20
+ config.mcpServers = mcpServers;
21
+ await writeJsonFile(configPath, config);
22
+ }
23
+ export async function removeOpenCodeNativeMultimodalConfig(configPath) {
24
+ let config;
25
+ try {
26
+ config = (await readJsoncOrJson(configPath));
27
+ }
28
+ catch {
29
+ return;
30
+ }
31
+ const mcp = (config.mcp ?? {});
32
+ delete mcp[SERVER_NAME];
33
+ config.mcp = mcp;
34
+ await writeOpenCodeJsonFile(configPath, config);
35
+ }
36
+ export async function removeCodexNativeMultimodalConfig(configPath) {
37
+ let existing = '';
38
+ try {
39
+ existing = await readFile(configPath, 'utf8');
40
+ }
41
+ catch {
42
+ return;
43
+ }
44
+ const managedBlock = new RegExp(`${escapeRegExp(TOML_NATIVE_MULTIMODAL_START)}[\\s\\S]*?${escapeRegExp(TOML_NATIVE_MULTIMODAL_END)}`, 'g');
45
+ let stripped = existing.replace(managedBlock, '').trimEnd();
46
+ const tableBlock = new RegExp('\\n?\\[mcp_servers\\.minimax_multimodal\\][\\s\\S]*?(?=\\n\\[mcp_servers\\.|\\n# >>>|$)', 'g');
47
+ stripped = stripped.replace(tableBlock, '').trimEnd();
48
+ await writeFile(configPath, stripped ? `${stripped}\n` : '', 'utf8');
49
+ }
50
+ //# sourceMappingURL=native-multimodal-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-multimodal-config.js","sourceRoot":"","sources":["../../src/install/native-multimodal-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;AACpE,MAAM,0BAA0B,GAAG,8BAA8B,CAAC;AAClE,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,UAAkB;IACzE,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QAAC,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAA4B,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/F,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAA4B,CAAC;IACxE,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,UAAkB;IAC3E,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QAAC,MAAM,GAAG,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,CAA4B,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO;IAAC,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IAC1D,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,MAAM,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,UAAkB;IACxE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO;IAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,4BAA4B,CAAC,aAAa,YAAY,CAAC,0BAA0B,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3I,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,yFAAyF,EAAE,GAAG,CAAC,CAAC;IAC9H,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface OpenCodeMcpServer {
2
+ command: string;
3
+ args: string[];
4
+ env: Record<string, string>;
5
+ }
6
+ export declare function readJsoncOrJson(filePath: string): Promise<unknown>;
7
+ export declare function writeJsonFile(filePath: string, data: unknown): Promise<void>;
8
+ export declare function writeOpenCodeConfig(configPath: string, server: OpenCodeMcpServer): Promise<void>;
9
+ export declare function readOpenCodeMiniMaxEnv(configPath: string): Promise<Record<string, string>>;
10
+ export declare function removeOpenCodeConfig(configPath: string): Promise<void>;
11
+ export declare function writeOpenCodeGlobalInstructions(filePath: string): Promise<void>;
12
+ export declare function removeOpenCodeGlobalInstructions(filePath: string): Promise<void>;
13
+ //# sourceMappingURL=opencode-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.d.ts","sourceRoot":"","sources":["../../src/install/opencode-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtG;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAehG;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5E;AAED,wBAAsB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAED,wBAAsB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF"}