scalemax 0.1.4 → 0.1.6
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/README.md +7 -3
- package/dist/clients.js +9 -9
- package/dist/commands/doctor.js +1 -1
- package/dist/configure/api-code.js +15 -0
- package/dist/configure/cherry-studio.js +15 -0
- package/dist/configure/claude.js +13 -3
- package/dist/configure/codex.js +2 -2
- package/dist/configure/opencode.js +19 -2
- package/dist/configure/paths.js +7 -7
- package/dist/configure/templates.js +9 -2
- package/dist/configure/trae-solo.js +15 -0
- package/dist/detect/api-code.js +2 -0
- package/dist/detect/cherry-studio.js +2 -0
- package/dist/detect/common.js +11 -2
- package/dist/detect/trae-solo.js +2 -0
- package/dist/types/client.d.ts +1 -1
- package/dist/utils/api.js +1 -1
- package/package.json +6 -5
- package/dist/configure/continue.js +0 -12
- package/dist/configure/vscode.js +0 -13
- package/dist/configure/windsurf.js +0 -13
- package/dist/detect/continue.js +0 -2
- package/dist/detect/vscode.js +0 -2
- package/dist/detect/windsurf.js +0 -2
- /package/dist/configure/{continue.d.ts → api-code.d.ts} +0 -0
- /package/dist/configure/{vscode.d.ts → cherry-studio.d.ts} +0 -0
- /package/dist/configure/{windsurf.d.ts → trae-solo.d.ts} +0 -0
- /package/dist/detect/{continue.d.ts → api-code.d.ts} +0 -0
- /package/dist/detect/{vscode.d.ts → cherry-studio.d.ts} +0 -0
- /package/dist/detect/{windsurf.d.ts → trae-solo.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -98,15 +98,19 @@ SCALEMAX_API_KEY=sm_live_xxx scalemax models
|
|
|
98
98
|
|
|
99
99
|
## Supported clients
|
|
100
100
|
|
|
101
|
+
`npx scalemax` now focuses on the supported non-VS-Code client set:
|
|
102
|
+
|
|
101
103
|
- Codex
|
|
102
104
|
- Cursor
|
|
105
|
+
- TRAE SOLO
|
|
103
106
|
- Claude Code
|
|
104
107
|
- OpenCode
|
|
105
108
|
- OpenClaw
|
|
106
109
|
- Hermes
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
+
- Cherry Studio
|
|
111
|
+
- API Code
|
|
112
|
+
|
|
113
|
+
For clients without a stable official config file, the installer writes a ScaleMax setup guide under `~/.scalemax/` instead of modifying private app storage.
|
|
110
114
|
|
|
111
115
|
## Examples
|
|
112
116
|
|
package/dist/clients.js
CHANGED
|
@@ -2,6 +2,8 @@ import * as codexDetect from './detect/codex.js';
|
|
|
2
2
|
import * as codexConfig from './configure/codex.js';
|
|
3
3
|
import * as cursorDetect from './detect/cursor.js';
|
|
4
4
|
import * as cursorConfig from './configure/cursor.js';
|
|
5
|
+
import * as traeSoloDetect from './detect/trae-solo.js';
|
|
6
|
+
import * as traeSoloConfig from './configure/trae-solo.js';
|
|
5
7
|
import * as claudeDetect from './detect/claude.js';
|
|
6
8
|
import * as claudeConfig from './configure/claude.js';
|
|
7
9
|
import * as opencodeDetect from './detect/opencode.js';
|
|
@@ -10,20 +12,18 @@ import * as openclawDetect from './detect/openclaw.js';
|
|
|
10
12
|
import * as openclawConfig from './configure/openclaw.js';
|
|
11
13
|
import * as hermesDetect from './detect/hermes.js';
|
|
12
14
|
import * as hermesConfig from './configure/hermes.js';
|
|
13
|
-
import * as
|
|
14
|
-
import * as
|
|
15
|
-
import * as
|
|
16
|
-
import * as
|
|
17
|
-
import * as windsurfDetect from './detect/windsurf.js';
|
|
18
|
-
import * as windsurfConfig from './configure/windsurf.js';
|
|
15
|
+
import * as cherryStudioDetect from './detect/cherry-studio.js';
|
|
16
|
+
import * as cherryStudioConfig from './configure/cherry-studio.js';
|
|
17
|
+
import * as apiCodeDetect from './detect/api-code.js';
|
|
18
|
+
import * as apiCodeConfig from './configure/api-code.js';
|
|
19
19
|
export const clients = [
|
|
20
20
|
{ id: 'codex', name: 'Codex', detect: codexDetect.detect, install: codexConfig.install, configure: codexConfig.configure, verify: codexConfig.verify, launch: codexConfig.launch, remove: codexConfig.remove },
|
|
21
21
|
{ id: 'cursor', name: 'Cursor', detect: cursorDetect.detect, configure: cursorConfig.configure, remove: cursorConfig.remove },
|
|
22
|
+
{ id: 'trae-solo', name: 'TRAE SOLO', detect: traeSoloDetect.detect, configure: traeSoloConfig.configure, remove: traeSoloConfig.remove },
|
|
22
23
|
{ id: 'claude', name: 'Claude Code', detect: claudeDetect.detect, configure: claudeConfig.configure, remove: claudeConfig.remove },
|
|
23
24
|
{ id: 'opencode', name: 'OpenCode', detect: opencodeDetect.detect, configure: opencodeConfig.configure, remove: opencodeConfig.remove },
|
|
24
25
|
{ id: 'openclaw', name: 'OpenClaw', detect: openclawDetect.detect, configure: openclawConfig.configure, remove: openclawConfig.remove },
|
|
25
26
|
{ id: 'hermes', name: 'Hermes', detect: hermesDetect.detect, configure: hermesConfig.configure, remove: hermesConfig.remove },
|
|
26
|
-
{ id: '
|
|
27
|
-
{ id: '
|
|
28
|
-
{ id: 'windsurf', name: 'Windsurf', detect: windsurfDetect.detect, configure: windsurfConfig.configure, remove: windsurfConfig.remove }
|
|
27
|
+
{ id: 'cherry-studio', name: 'Cherry Studio', detect: cherryStudioDetect.detect, configure: cherryStudioConfig.configure, remove: cherryStudioConfig.remove },
|
|
28
|
+
{ id: 'api-code', name: 'API Code', detect: apiCodeDetect.detect, configure: apiCodeConfig.configure, remove: apiCodeConfig.remove }
|
|
29
29
|
];
|
package/dist/commands/doctor.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function doctorCommand(home = homeDir()) {
|
|
|
24
24
|
failures++;
|
|
25
25
|
}
|
|
26
26
|
const st = ora('Checking streaming').start();
|
|
27
|
-
const stream = await testStreaming(key, res.models.find(m => m.id === 'gpt-5.
|
|
27
|
+
const stream = await testStreaming(key, res.models.find(m => m.id === 'gpt-5.6-terra')?.id || res.models[0]?.id);
|
|
28
28
|
if (stream.ok)
|
|
29
29
|
st.succeed('Streaming available');
|
|
30
30
|
else {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { clientConfigPath } from './paths.js';
|
|
2
|
+
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
+
import { jsonConfig } from './templates.js';
|
|
4
|
+
const id = 'api-code';
|
|
5
|
+
const name = 'API Code';
|
|
6
|
+
export async function configure(ctx) {
|
|
7
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
+
const content = jsonConfig(name, ctx.apiKey, ctx.baseUrl, { "environment": { "SCALEMAX_API_KEY": "your ScaleMax API key", "SCALEMAX_BASE_URL": "https://api.scalemax.pro/v1" }, "node": "import OpenAI from 'openai';\nconst client = new OpenAI({ apiKey: process.env.SCALEMAX_API_KEY, baseURL: 'https://api.scalemax.pro/v1' });", "python": "from openai import OpenAI\nclient = OpenAI(api_key='...', base_url='https://api.scalemax.pro/v1')" });
|
|
9
|
+
const result = await writeManagedConfig(ctx, id, name, file, content);
|
|
10
|
+
return { ...result, message: 'API code examples written' };
|
|
11
|
+
}
|
|
12
|
+
export async function remove(ctx) {
|
|
13
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
14
|
+
return removeManagedConfig(ctx, id, name, file);
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { clientConfigPath } from './paths.js';
|
|
2
|
+
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
+
import { jsonConfig } from './templates.js';
|
|
4
|
+
const id = 'cherry-studio';
|
|
5
|
+
const name = 'Cherry Studio';
|
|
6
|
+
export async function configure(ctx) {
|
|
7
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
+
const content = jsonConfig(name, ctx.apiKey, ctx.baseUrl, { "officialSetup": ["Settings > Model Service / Model Providers", "Provider type: OpenAI or OpenAI Compatible", "API host/base URL: https://api.scalemax.pro/v1", "Add ScaleMax model IDs or fetch from /v1/models"], "recommendedModel": "gpt-5.6-terra" });
|
|
9
|
+
const result = await writeManagedConfig(ctx, id, name, file, content);
|
|
10
|
+
return { ...result, message: 'setup guide written; enter these values in Cherry Studio model provider settings' };
|
|
11
|
+
}
|
|
12
|
+
export async function remove(ctx) {
|
|
13
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
14
|
+
return removeManagedConfig(ctx, id, name, file);
|
|
15
|
+
}
|
package/dist/configure/claude.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { clientConfigPath } from './paths.js';
|
|
2
2
|
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
-
import { jsonConfig } from './templates.js';
|
|
4
3
|
const id = 'claude';
|
|
5
4
|
const name = 'Claude Code';
|
|
6
5
|
export async function configure(ctx) {
|
|
7
6
|
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
-
const content =
|
|
9
|
-
|
|
7
|
+
const content = JSON.stringify({
|
|
8
|
+
env: {
|
|
9
|
+
ANTHROPIC_AUTH_TOKEN: ctx.apiKey,
|
|
10
|
+
ANTHROPIC_BASE_URL: ctx.baseUrl,
|
|
11
|
+
ANTHROPIC_MODEL: 'gpt-5.6-terra'
|
|
12
|
+
},
|
|
13
|
+
scalemax: {
|
|
14
|
+
managedBy: 'ScaleMax CLI',
|
|
15
|
+
note: 'Claude Code uses Anthropic Messages, not OpenAI Chat Completions. This file stores ScaleMax values, but Claude Code requires a ScaleMax Anthropic-compatible endpoint before it can work reliably.'
|
|
16
|
+
}
|
|
17
|
+
}, null, 2) + '\n';
|
|
18
|
+
const result = await writeManagedConfig(ctx, id, name, file, content);
|
|
19
|
+
return { ...result, message: 'settings written; Claude Code requires Anthropic-compatible ScaleMax endpoint' };
|
|
10
20
|
}
|
|
11
21
|
export async function remove(ctx) {
|
|
12
22
|
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
package/dist/configure/codex.js
CHANGED
|
@@ -8,9 +8,9 @@ import { commandExists } from '../utils/exec.js';
|
|
|
8
8
|
const id = 'codex';
|
|
9
9
|
const name = 'Codex';
|
|
10
10
|
const provider = 'scalemax';
|
|
11
|
-
const model = 'gpt-5.
|
|
11
|
+
const model = 'gpt-5.6-terra';
|
|
12
12
|
function codexConfig(baseUrl) {
|
|
13
|
-
return `# ${GENERATED_HEADER}\nmodel = "${model}"\nmodel_provider = "${provider}"\ndisable_response_storage = true\n# Recommended ScaleMax Codex models: gpt-5.
|
|
13
|
+
return `# ${GENERATED_HEADER}\nmodel = "${model}"\nmodel_provider = "${provider}"\ndisable_response_storage = true\n# Recommended ScaleMax Codex models: gpt-5.6-terra, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex.\n# Provider-internal gpt-5.3-codex-spark is routed behind the public gpt-5.3-codex Codex slug.\n\n[model_providers.${provider}]\nname = "ScaleMax"\nbase_url = "${baseUrl}"\nwire_api = "responses"\nrequires_openai_auth = true\n`;
|
|
14
14
|
}
|
|
15
15
|
function codexAuth(apiKey) {
|
|
16
16
|
return JSON.stringify({ auth_mode: 'apikey', OPENAI_API_KEY: apiKey }, null, 2) + '\n';
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
import { clientConfigPath } from './paths.js';
|
|
2
2
|
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
-
import { jsonConfig } from './templates.js';
|
|
4
3
|
const id = 'opencode';
|
|
5
4
|
const name = 'OpenCode';
|
|
6
5
|
export async function configure(ctx) {
|
|
7
6
|
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
-
const content =
|
|
7
|
+
const content = JSON.stringify({
|
|
8
|
+
$schema: 'https://opencode.ai/config.json',
|
|
9
|
+
provider: {
|
|
10
|
+
scalemax: {
|
|
11
|
+
npm: '@ai-sdk/openai-compatible',
|
|
12
|
+
name: 'ScaleMax',
|
|
13
|
+
options: { baseURL: ctx.baseUrl, apiKey: ctx.apiKey },
|
|
14
|
+
models: {
|
|
15
|
+
'gpt-5.6-luna': { name: 'GPT-5.6 Luna' },
|
|
16
|
+
'gpt-5.6-terra': { name: 'GPT-5.6 Terra' },
|
|
17
|
+
'gpt-5.6-sol': { name: 'GPT-5.6 Sol' },
|
|
18
|
+
'gpt-5.4': { name: 'GPT-5.4' },
|
|
19
|
+
'gpt-5.4-mini': { name: 'GPT-5.4 Mini' },
|
|
20
|
+
'gpt-5.3-codex': { name: 'GPT-5.3 Codex' },
|
|
21
|
+
'codex-auto-review': { name: 'Codex Auto Review' }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}, null, 2) + '\n';
|
|
9
26
|
return writeManagedConfig(ctx, id, name, file, content);
|
|
10
27
|
}
|
|
11
28
|
export async function remove(ctx) {
|
package/dist/configure/paths.js
CHANGED
|
@@ -9,13 +9,13 @@ export function clientConfigPath(id, home, platform, env = process.env) {
|
|
|
9
9
|
switch (id) {
|
|
10
10
|
case 'codex': return codexConfigPath(home);
|
|
11
11
|
case 'cursor': return platform === 'win32' ? path.join(app, 'Cursor', 'User', 'settings.json') : platform === 'darwin' ? path.join(home, 'Library', 'Application Support', 'Cursor', 'User', 'settings.json') : path.join(linux, 'Cursor', 'User', 'settings.json');
|
|
12
|
+
case 'trae-solo': return path.join(home, '.scalemax', 'trae-solo.setup.json');
|
|
12
13
|
case 'claude': return path.join(home, '.claude', 'settings.json');
|
|
13
|
-
case 'opencode': return path.join(linux, 'opencode', '
|
|
14
|
+
case 'opencode': return path.join(linux, 'opencode', 'opencode.json');
|
|
14
15
|
case 'openclaw': return path.join(home, '.openclaw', 'config.json');
|
|
15
16
|
case 'hermes': return path.join(home, '.hermes', 'config', 'scalemax.json');
|
|
16
|
-
case '
|
|
17
|
-
case '
|
|
18
|
-
case 'windsurf': return platform === 'win32' ? path.join(app, 'Windsurf', 'User', 'settings.json') : platform === 'darwin' ? path.join(home, 'Library', 'Application Support', 'Windsurf', 'User', 'settings.json') : path.join(linux, 'Windsurf', 'User', 'settings.json');
|
|
17
|
+
case 'cherry-studio': return path.join(home, '.scalemax', 'cherry-studio.setup.json');
|
|
18
|
+
case 'api-code': return path.join(home, '.scalemax', 'api-code.examples.json');
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
export function installHints(id, home, platform, env = process.env) {
|
|
@@ -24,12 +24,12 @@ export function installHints(id, home, platform, env = process.env) {
|
|
|
24
24
|
switch (id) {
|
|
25
25
|
case 'codex': return [codexDir(home), path.join(linux, 'codex')];
|
|
26
26
|
case 'cursor': return [platform === 'darwin' ? '/Applications/Cursor.app' : path.join(app, 'Cursor'), path.join(linux, 'Cursor')];
|
|
27
|
+
case 'trae-solo': return [platform === 'darwin' ? '/Applications/Trae.app' : path.join(app, 'Trae'), path.join(linux, 'Trae')];
|
|
27
28
|
case 'claude': return [path.join(home, '.claude')];
|
|
28
29
|
case 'opencode': return [path.join(linux, 'opencode')];
|
|
29
30
|
case 'openclaw': return [path.join(home, '.openclaw'), path.join(linux, 'openclaw')];
|
|
30
31
|
case 'hermes': return [path.join(home, '.hermes')];
|
|
31
|
-
case '
|
|
32
|
-
case '
|
|
33
|
-
case 'windsurf': return [platform === 'darwin' ? '/Applications/Windsurf.app' : path.join(app, 'Windsurf'), path.join(linux, 'Windsurf')];
|
|
32
|
+
case 'cherry-studio': return [platform === 'darwin' ? '/Applications/Cherry Studio.app' : path.join(app, 'Cherry Studio'), path.join(linux, 'CherryStudio')];
|
|
33
|
+
case 'api-code': return [path.join(home, '.scalemax')];
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -11,9 +11,16 @@ export function jsonConfig(client, apiKey, baseUrl, extra = {}) {
|
|
|
11
11
|
}, null, 2) + '\n';
|
|
12
12
|
}
|
|
13
13
|
export function continueConfig(apiKey, baseUrl) {
|
|
14
|
+
const models = ['gpt-5.6-luna', 'gpt-5.6-terra', 'gpt-5.6-sol', 'gpt-5.4', 'gpt-5.4-mini', 'gpt-5.3-codex', 'codex-auto-review'];
|
|
14
15
|
return JSON.stringify({
|
|
15
|
-
models:
|
|
16
|
-
|
|
16
|
+
models: models.map(model => ({
|
|
17
|
+
title: `ScaleMax ${model}`,
|
|
18
|
+
provider: 'openai',
|
|
19
|
+
model,
|
|
20
|
+
apiBase: baseUrl,
|
|
21
|
+
apiKey
|
|
22
|
+
})),
|
|
23
|
+
tabAutocompleteModel: { title: 'ScaleMax gpt-5.4-mini', provider: 'openai', model: 'gpt-5.4-mini', apiBase: baseUrl, apiKey },
|
|
17
24
|
contextProviders: [{ name: 'code' }, { name: 'docs' }, { name: 'diff' }, { name: 'terminal' }]
|
|
18
25
|
}, null, 2) + '\n';
|
|
19
26
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { clientConfigPath } from './paths.js';
|
|
2
|
+
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
+
import { jsonConfig } from './templates.js';
|
|
4
|
+
const id = 'trae-solo';
|
|
5
|
+
const name = 'TRAE SOLO';
|
|
6
|
+
export async function configure(ctx) {
|
|
7
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
+
const content = jsonConfig(name, ctx.apiKey, ctx.baseUrl, { "officialSetup": ["Settings > Models > Add Model", "API format: OpenAI Chat Completions", "Request URL: https://api.scalemax.pro/v1/chat/completions or base URL https://api.scalemax.pro/v1", "Model ID: gpt-5.6-terra or another ScaleMax model"], "recommendedModel": "gpt-5.6-terra" });
|
|
9
|
+
const result = await writeManagedConfig(ctx, id, name, file, content);
|
|
10
|
+
return { ...result, message: 'setup guide written; enter these values in TRAE SOLO custom model settings' };
|
|
11
|
+
}
|
|
12
|
+
export async function remove(ctx) {
|
|
13
|
+
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
14
|
+
return removeManagedConfig(ctx, id, name, file);
|
|
15
|
+
}
|
package/dist/detect/common.js
CHANGED
|
@@ -2,7 +2,15 @@ import fs from 'fs-extra';
|
|
|
2
2
|
import { commandExists } from '../utils/exec.js';
|
|
3
3
|
import { clientConfigPath, installHints } from '../configure/paths.js';
|
|
4
4
|
const commands = {
|
|
5
|
-
codex: ['codex'],
|
|
5
|
+
codex: ['codex'],
|
|
6
|
+
cursor: ['cursor'],
|
|
7
|
+
'trae-solo': ['trae', 'trae-solo'],
|
|
8
|
+
claude: ['claude'],
|
|
9
|
+
opencode: ['opencode'],
|
|
10
|
+
openclaw: ['openclaw'],
|
|
11
|
+
hermes: ['hermes'],
|
|
12
|
+
'cherry-studio': ['cherry-studio', 'cherrystudio'],
|
|
13
|
+
'api-code': []
|
|
6
14
|
};
|
|
7
15
|
export async function detectClient(ctx, id, name) {
|
|
8
16
|
const paths = [clientConfigPath(id, ctx.home, ctx.platform, ctx.env), ...installHints(id, ctx.home, ctx.platform, ctx.env)];
|
|
@@ -15,5 +23,6 @@ export async function detectClient(ctx, id, name) {
|
|
|
15
23
|
if (await commandExists(cmd))
|
|
16
24
|
cmdHits.push(`command:${cmd}`);
|
|
17
25
|
const hits = [...cmdHits, ...pathHits];
|
|
18
|
-
|
|
26
|
+
const alwaysAvailable = id === 'api-code';
|
|
27
|
+
return { id, name, installed: hits.length > 0 || alwaysAvailable, reason: hits.length || alwaysAvailable ? undefined : 'not detected', paths: hits };
|
|
19
28
|
}
|
package/dist/types/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ClientId = 'codex' | 'cursor' | '
|
|
1
|
+
export type ClientId = 'codex' | 'cursor' | 'trae-solo' | 'claude' | 'opencode' | 'openclaw' | 'hermes' | 'cherry-studio' | 'api-code';
|
|
2
2
|
export interface ClientDefinition {
|
|
3
3
|
id: ClientId;
|
|
4
4
|
name: string;
|
package/dist/utils/api.js
CHANGED
|
@@ -41,7 +41,7 @@ export async function validateApiKey(apiKey) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
export async function testStreaming(apiKey, model) {
|
|
44
|
-
const selected = model || 'gpt-5.
|
|
44
|
+
const selected = model || 'gpt-5.6-terra';
|
|
45
45
|
try {
|
|
46
46
|
const res = await request('/chat/completions', apiKey, { method: 'POST', body: JSON.stringify({ model: selected, stream: true, max_tokens: 8, messages: [{ role: 'user', content: 'Say OK' }] }) });
|
|
47
47
|
if (!res.ok)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scalemax",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Universal ScaleMax installer for AI coding clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -51,11 +51,12 @@
|
|
|
51
51
|
"installer",
|
|
52
52
|
"codex",
|
|
53
53
|
"cursor",
|
|
54
|
-
"
|
|
54
|
+
"trae-solo",
|
|
55
|
+
"claude-code",
|
|
55
56
|
"opencode",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
57
|
+
"openclaw",
|
|
58
|
+
"hermes",
|
|
59
|
+
"cherry-studio",
|
|
59
60
|
"openai-compatible"
|
|
60
61
|
],
|
|
61
62
|
"license": "MIT",
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { clientConfigPath } from './paths.js';
|
|
2
|
-
import { writeManagedConfig, removeManagedConfig } from './common.js';
|
|
3
|
-
import { continueConfig } from './templates.js';
|
|
4
|
-
const id = 'continue';
|
|
5
|
-
const name = 'Continue';
|
|
6
|
-
export async function configure(ctx) {
|
|
7
|
-
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
-
return writeManagedConfig(ctx, id, name, file, continueConfig(ctx.apiKey, ctx.baseUrl));
|
|
9
|
-
}
|
|
10
|
-
export async function remove(ctx) {
|
|
11
|
-
return removeManagedConfig(ctx, id, name, clientConfigPath(id, ctx.home, ctx.platform));
|
|
12
|
-
}
|
package/dist/configure/vscode.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { clientConfigPath } from './paths.js';
|
|
2
|
-
import { removeManagedConfig, writeMergedJsonConfig } from './common.js';
|
|
3
|
-
import { editorSettings } from './templates.js';
|
|
4
|
-
const id = 'vscode';
|
|
5
|
-
const name = 'VS Code';
|
|
6
|
-
export async function configure(ctx) {
|
|
7
|
-
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
-
return writeMergedJsonConfig(ctx, id, name, file, existing => editorSettings(name, ctx.apiKey, ctx.baseUrl, existing));
|
|
9
|
-
}
|
|
10
|
-
export async function remove(ctx) {
|
|
11
|
-
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
12
|
-
return removeManagedConfig(ctx, id, name, file);
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { clientConfigPath } from './paths.js';
|
|
2
|
-
import { removeManagedConfig, writeMergedJsonConfig } from './common.js';
|
|
3
|
-
import { editorSettings } from './templates.js';
|
|
4
|
-
const id = 'windsurf';
|
|
5
|
-
const name = 'Windsurf';
|
|
6
|
-
export async function configure(ctx) {
|
|
7
|
-
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
8
|
-
return writeMergedJsonConfig(ctx, id, name, file, existing => editorSettings(name, ctx.apiKey, ctx.baseUrl, existing));
|
|
9
|
-
}
|
|
10
|
-
export async function remove(ctx) {
|
|
11
|
-
const file = clientConfigPath(id, ctx.home, ctx.platform);
|
|
12
|
-
return removeManagedConfig(ctx, id, name, file);
|
|
13
|
-
}
|
package/dist/detect/continue.js
DELETED
package/dist/detect/vscode.js
DELETED
package/dist/detect/windsurf.js
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|