scalemax 0.1.4 → 0.1.5
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/dist/clients.js +7 -4
- package/dist/configure/cline.d.ts +3 -0
- package/dist/configure/cline.js +13 -0
- package/dist/configure/paths.js +4 -0
- package/dist/configure/roo.d.ts +3 -0
- package/dist/configure/roo.js +13 -0
- package/dist/configure/templates.js +9 -2
- package/dist/configure/vscode.js +6 -6
- package/dist/detect/cline.d.ts +2 -0
- package/dist/detect/cline.js +2 -0
- package/dist/detect/common.js +29 -2
- package/dist/detect/roo.d.ts +2 -0
- package/dist/detect/roo.js +2 -0
- package/dist/types/client.d.ts +1 -1
- package/package.json +3 -2
package/dist/clients.js
CHANGED
|
@@ -2,8 +2,6 @@ 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 claudeDetect from './detect/claude.js';
|
|
6
|
-
import * as claudeConfig from './configure/claude.js';
|
|
7
5
|
import * as opencodeDetect from './detect/opencode.js';
|
|
8
6
|
import * as opencodeConfig from './configure/opencode.js';
|
|
9
7
|
import * as openclawDetect from './detect/openclaw.js';
|
|
@@ -14,16 +12,21 @@ import * as continueDetect from './detect/continue.js';
|
|
|
14
12
|
import * as continueConfig from './configure/continue.js';
|
|
15
13
|
import * as vscodeDetect from './detect/vscode.js';
|
|
16
14
|
import * as vscodeConfig from './configure/vscode.js';
|
|
15
|
+
import * as rooDetect from './detect/roo.js';
|
|
16
|
+
import * as rooConfig from './configure/roo.js';
|
|
17
|
+
import * as clineDetect from './detect/cline.js';
|
|
18
|
+
import * as clineConfig from './configure/cline.js';
|
|
17
19
|
import * as windsurfDetect from './detect/windsurf.js';
|
|
18
20
|
import * as windsurfConfig from './configure/windsurf.js';
|
|
19
21
|
export const clients = [
|
|
20
22
|
{ id: 'codex', name: 'Codex', detect: codexDetect.detect, install: codexConfig.install, configure: codexConfig.configure, verify: codexConfig.verify, launch: codexConfig.launch, remove: codexConfig.remove },
|
|
21
23
|
{ id: 'cursor', name: 'Cursor', detect: cursorDetect.detect, configure: cursorConfig.configure, remove: cursorConfig.remove },
|
|
22
|
-
{ 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: 'vscode', name: 'VS Code', detect: vscodeDetect.detect, configure: vscodeConfig.configure, remove: vscodeConfig.remove },
|
|
27
|
+
{ id: 'vscode', name: 'Continue Extension (VS Code)', detect: vscodeDetect.detect, configure: vscodeConfig.configure, remove: vscodeConfig.remove },
|
|
28
|
+
{ id: 'roo', name: 'Roo Code (VS Code)', detect: rooDetect.detect, configure: rooConfig.configure, remove: rooConfig.remove },
|
|
29
|
+
{ id: 'cline', name: 'Cline (VS Code)', detect: clineDetect.detect, configure: clineConfig.configure, remove: clineConfig.remove },
|
|
27
30
|
{ id: 'continue', name: 'Continue', detect: continueDetect.detect, configure: continueConfig.configure, remove: continueConfig.remove },
|
|
28
31
|
{ id: 'windsurf', name: 'Windsurf', detect: windsurfDetect.detect, configure: windsurfConfig.configure, remove: windsurfConfig.remove }
|
|
29
32
|
];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const id = 'cline';
|
|
2
|
+
const name = 'Cline (VS Code)';
|
|
3
|
+
export async function configure(ctx) {
|
|
4
|
+
return {
|
|
5
|
+
id,
|
|
6
|
+
name,
|
|
7
|
+
changed: false,
|
|
8
|
+
message: `detected. Open the extension settings and select API Provider: OpenAI Compatible; Base URL: ${ctx.baseUrl}; API Key: your ScaleMax key; Model ID: gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex, or codex-auto-review. Official docs: https://docs.cline.bot/provider-config/openai-compatible`,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function remove(_ctx) {
|
|
12
|
+
return { id, name, changed: false, message: 'Roo/Cline settings are stored inside VS Code extension state. Remove or edit them from the extension settings UI.' };
|
|
13
|
+
}
|
package/dist/configure/paths.js
CHANGED
|
@@ -14,6 +14,8 @@ export function clientConfigPath(id, home, platform, env = process.env) {
|
|
|
14
14
|
case 'openclaw': return path.join(home, '.openclaw', 'config.json');
|
|
15
15
|
case 'hermes': return path.join(home, '.hermes', 'config', 'scalemax.json');
|
|
16
16
|
case 'continue': return path.join(home, '.continue', 'config.json');
|
|
17
|
+
case 'roo': return path.join(home, '.scalemax', 'roo-code-vscode.manual.json');
|
|
18
|
+
case 'cline': return path.join(home, '.scalemax', 'cline-vscode.manual.json');
|
|
17
19
|
case 'vscode': return platform === 'win32' ? path.join(app, 'Code', 'User', 'settings.json') : platform === 'darwin' ? path.join(home, 'Library', 'Application Support', 'Code', 'User', 'settings.json') : path.join(linux, 'Code', 'User', 'settings.json');
|
|
18
20
|
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');
|
|
19
21
|
}
|
|
@@ -29,6 +31,8 @@ export function installHints(id, home, platform, env = process.env) {
|
|
|
29
31
|
case 'openclaw': return [path.join(home, '.openclaw'), path.join(linux, 'openclaw')];
|
|
30
32
|
case 'hermes': return [path.join(home, '.hermes')];
|
|
31
33
|
case 'continue': return [path.join(home, '.continue')];
|
|
34
|
+
case 'roo': return [];
|
|
35
|
+
case 'cline': return [];
|
|
32
36
|
case 'vscode': return [platform === 'darwin' ? '/Applications/Visual Studio Code.app' : path.join(app, 'Code'), path.join(linux, 'Code')];
|
|
33
37
|
case 'windsurf': return [platform === 'darwin' ? '/Applications/Windsurf.app' : path.join(app, 'Windsurf'), path.join(linux, 'Windsurf')];
|
|
34
38
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const id = 'roo';
|
|
2
|
+
const name = 'Roo Code (VS Code)';
|
|
3
|
+
export async function configure(ctx) {
|
|
4
|
+
return {
|
|
5
|
+
id,
|
|
6
|
+
name,
|
|
7
|
+
changed: false,
|
|
8
|
+
message: `detected. Open the extension settings and select API Provider: OpenAI Compatible; Base URL: ${ctx.baseUrl}; API Key: your ScaleMax key; Model ID: gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex, or codex-auto-review. Official docs: https://docs.roocode.com/providers/openai-compatible`,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function remove(_ctx) {
|
|
12
|
+
return { id, name, changed: false, message: 'Roo/Cline settings are stored inside VS Code extension state. Remove or edit them from the extension settings UI.' };
|
|
13
|
+
}
|
|
@@ -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.5', '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
|
}
|
package/dist/configure/vscode.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { clientConfigPath } from './paths.js';
|
|
2
|
-
import { removeManagedConfig,
|
|
3
|
-
import {
|
|
2
|
+
import { removeManagedConfig, writeManagedConfig } from './common.js';
|
|
3
|
+
import { continueConfig } from './templates.js';
|
|
4
4
|
const id = 'vscode';
|
|
5
|
-
const name = 'VS Code';
|
|
5
|
+
const name = 'Continue Extension (VS Code)';
|
|
6
6
|
export async function configure(ctx) {
|
|
7
|
-
const file = clientConfigPath(
|
|
8
|
-
return
|
|
7
|
+
const file = clientConfigPath('continue', ctx.home, ctx.platform);
|
|
8
|
+
return writeManagedConfig(ctx, id, name, file, continueConfig(ctx.apiKey, ctx.baseUrl));
|
|
9
9
|
}
|
|
10
10
|
export async function remove(ctx) {
|
|
11
|
-
const file = clientConfigPath(
|
|
11
|
+
const file = clientConfigPath('continue', ctx.home, ctx.platform);
|
|
12
12
|
return removeManagedConfig(ctx, id, name, file);
|
|
13
13
|
}
|
package/dist/detect/common.js
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import { commandExists } from '../utils/exec.js';
|
|
3
3
|
import { clientConfigPath, installHints } from '../configure/paths.js';
|
|
4
|
+
function vscodeExtensionRoots(ctx) {
|
|
5
|
+
const app = ctx.env.APPDATA || '';
|
|
6
|
+
const xdg = ctx.env.XDG_DATA_HOME || pathJoin(ctx.home, '.local', 'share');
|
|
7
|
+
if (ctx.platform === 'win32')
|
|
8
|
+
return [pathJoin(ctx.home, '.vscode', 'extensions'), pathJoin(app, 'Code', 'User', 'globalStorage')];
|
|
9
|
+
if (ctx.platform === 'darwin')
|
|
10
|
+
return [pathJoin(ctx.home, '.vscode', 'extensions'), pathJoin(ctx.home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage')];
|
|
11
|
+
return [pathJoin(ctx.home, '.vscode', 'extensions'), pathJoin(xdg, 'Code', 'User', 'globalStorage')];
|
|
12
|
+
}
|
|
13
|
+
function pathJoin(...parts) { return parts.filter(Boolean).join('/'); }
|
|
14
|
+
async function detectVsCodeExtension(ctx, patterns) {
|
|
15
|
+
const hits = [];
|
|
16
|
+
for (const root of vscodeExtensionRoots(ctx)) {
|
|
17
|
+
const entries = await fs.readdir(root).catch(() => []);
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
const lower = entry.toLowerCase();
|
|
20
|
+
if (patterns.some(pattern => lower.includes(pattern)))
|
|
21
|
+
hits.push(`${root}/${entry}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return hits;
|
|
25
|
+
}
|
|
4
26
|
const commands = {
|
|
5
|
-
codex: ['codex'], cursor: ['cursor'], claude: ['claude'], opencode: ['opencode'], openclaw: ['openclaw'], hermes: ['hermes'], continue: ['continue'], vscode: ['code'], windsurf: ['windsurf']
|
|
27
|
+
codex: ['codex'], cursor: ['cursor'], claude: ['claude'], opencode: ['opencode'], openclaw: ['openclaw'], hermes: ['hermes'], continue: ['continue'], vscode: ['code'], roo: [], cline: [], windsurf: ['windsurf']
|
|
6
28
|
};
|
|
7
29
|
export async function detectClient(ctx, id, name) {
|
|
8
30
|
const paths = [clientConfigPath(id, ctx.home, ctx.platform, ctx.env), ...installHints(id, ctx.home, ctx.platform, ctx.env)];
|
|
@@ -14,6 +36,11 @@ export async function detectClient(ctx, id, name) {
|
|
|
14
36
|
for (const cmd of commands[id])
|
|
15
37
|
if (await commandExists(cmd))
|
|
16
38
|
cmdHits.push(`command:${cmd}`);
|
|
17
|
-
const
|
|
39
|
+
const extensionHits = id === 'roo'
|
|
40
|
+
? await detectVsCodeExtension(ctx, ['rooveterinaryinc.roo-cline', 'roo-cline', 'roo-code'])
|
|
41
|
+
: id === 'cline'
|
|
42
|
+
? await detectVsCodeExtension(ctx, ['saoudrizwan.claude-dev', 'cline.cline'])
|
|
43
|
+
: [];
|
|
44
|
+
const hits = [...cmdHits, ...pathHits, ...extensionHits];
|
|
18
45
|
return { id, name, installed: hits.length > 0, reason: hits.length ? undefined : 'not detected', paths: hits };
|
|
19
46
|
}
|
package/dist/types/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ClientId = 'codex' | 'cursor' | 'claude' | 'opencode' | 'openclaw' | 'hermes' | 'continue' | 'vscode' | 'windsurf';
|
|
1
|
+
export type ClientId = 'codex' | 'cursor' | 'claude' | 'opencode' | 'openclaw' | 'hermes' | 'continue' | 'vscode' | 'roo' | 'cline' | 'windsurf';
|
|
2
2
|
export interface ClientDefinition {
|
|
3
3
|
id: ClientId;
|
|
4
4
|
name: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scalemax",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Universal ScaleMax installer for AI coding clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -51,10 +51,11 @@
|
|
|
51
51
|
"installer",
|
|
52
52
|
"codex",
|
|
53
53
|
"cursor",
|
|
54
|
-
"claude",
|
|
55
54
|
"opencode",
|
|
56
55
|
"continue",
|
|
57
56
|
"vscode",
|
|
57
|
+
"roo-code",
|
|
58
|
+
"cline",
|
|
58
59
|
"windsurf",
|
|
59
60
|
"openai-compatible"
|
|
60
61
|
],
|