@halfagiraf/clawx 0.2.0 → 0.2.1
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/cli/scout.d.ts.map +1 -1
- package/dist/cli/scout.js +10 -4
- package/dist/cli/scout.js.map +1 -1
- package/dist/config/hardware.d.ts +16 -2
- package/dist/config/hardware.d.ts.map +1 -1
- package/dist/config/hardware.js +151 -19
- package/dist/config/hardware.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/scout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../src/cli/scout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgErD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../src/cli/scout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgErD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,OAAO,CAAC,IAAI,CAAC,CAuHf"}
|
package/dist/cli/scout.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { createAgentSession, InteractiveMode, AuthStorage, ModelRegistry, DefaultResourceLoader, SettingsManager, } from "@mariozechner/pi-coding-agent";
|
|
8
8
|
import { resolveModel } from "../core/provider.js";
|
|
9
|
-
import { loadHardwareSpec, promptHardwareSpec } from "../config/hardware.js";
|
|
9
|
+
import { loadHardwareSpec, promptHardwareSpec, autoDetectAndSave } from "../config/hardware.js";
|
|
10
10
|
import { createHfSearchTool } from "../tools/hfSearch.js";
|
|
11
11
|
import { createHfModelInfoTool } from "../tools/hfModelInfo.js";
|
|
12
12
|
import { createHfReadmeTool } from "../tools/hfReadme.js";
|
|
@@ -67,16 +67,17 @@ async function checkOllamaToolSupport(config) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
export async function startScout(config, options = {}) {
|
|
70
|
-
// Load or
|
|
70
|
+
// Load or detect hardware spec
|
|
71
71
|
let hardware = null;
|
|
72
72
|
if (options.setupHardware) {
|
|
73
|
+
// --setup-hardware: manual prompts with auto-detected defaults
|
|
73
74
|
hardware = await promptHardwareSpec();
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
76
77
|
hardware = loadHardwareSpec();
|
|
77
78
|
if (!hardware) {
|
|
78
|
-
|
|
79
|
-
hardware = await
|
|
79
|
+
// First run: auto-detect and save (only prompts if detection fails)
|
|
80
|
+
hardware = await autoDetectAndSave();
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
const model = resolveModel(config);
|
|
@@ -154,9 +155,14 @@ export async function startScout(config, options = {}) {
|
|
|
154
155
|
if (allToolNames.length > 0) {
|
|
155
156
|
session.agent.streamFn = createToolParsingStreamFn(allToolNames);
|
|
156
157
|
}
|
|
158
|
+
// Build a welcome initial message so the agent introduces itself with hardware context
|
|
159
|
+
const initialMessage = `My hardware: ${hardware.gpu}, ${hardware.vram} VRAM, ${hardware.ram} RAM, ${hardware.os}` +
|
|
160
|
+
(hardware.notes ? `. ${hardware.notes}` : "") +
|
|
161
|
+
`. What models would you recommend for local coding assistance with tool calling support?`;
|
|
157
162
|
// Launch interactive mode
|
|
158
163
|
const mode = new InteractiveMode(session, {
|
|
159
164
|
modelFallbackMessage,
|
|
165
|
+
initialMessage,
|
|
160
166
|
verbose: options.verbose,
|
|
161
167
|
});
|
|
162
168
|
await mode.run();
|
package/dist/cli/scout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/cli/scout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,eAAe,GAGhB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/cli/scout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hardware spec management for Clawx Scout.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Auto-detects GPU, VRAM, RAM, and OS from the system.
|
|
5
|
+
* Falls back to manual prompts if detection fails.
|
|
6
6
|
*/
|
|
7
7
|
export interface HardwareSpec {
|
|
8
8
|
gpu: string;
|
|
@@ -13,5 +13,19 @@ export interface HardwareSpec {
|
|
|
13
13
|
}
|
|
14
14
|
export declare function loadHardwareSpec(): HardwareSpec | null;
|
|
15
15
|
export declare function saveHardwareSpec(spec: HardwareSpec): void;
|
|
16
|
+
/**
|
|
17
|
+
* Auto-detect hardware specs from the system.
|
|
18
|
+
* Returns a HardwareSpec with best-effort values.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectHardwareSpec(): HardwareSpec;
|
|
21
|
+
/**
|
|
22
|
+
* Auto-detect hardware, save it, and print what was found.
|
|
23
|
+
* If detection gets "Unknown" for critical fields, offer manual override.
|
|
24
|
+
*/
|
|
25
|
+
export declare function autoDetectAndSave(): Promise<HardwareSpec>;
|
|
26
|
+
/**
|
|
27
|
+
* Interactive manual prompts for all fields (--setup-hardware).
|
|
28
|
+
* Pre-fills with auto-detected values so user can just press Enter.
|
|
29
|
+
*/
|
|
16
30
|
export declare function promptHardwareSpec(): Promise<HardwareSpec>;
|
|
17
31
|
//# sourceMappingURL=hardware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/config/hardware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/config/hardware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAStD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAIzD;AAqGD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAMjD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,CA8B/D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA4BhE"}
|
package/dist/config/hardware.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hardware spec management for Clawx Scout.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Auto-detects GPU, VRAM, RAM, and OS from the system.
|
|
5
|
+
* Falls back to manual prompts if detection fails.
|
|
6
6
|
*/
|
|
7
7
|
import fs from "node:fs";
|
|
8
8
|
import path from "node:path";
|
|
9
|
+
import { execSync } from "node:child_process";
|
|
10
|
+
import os from "node:os";
|
|
9
11
|
import readline from "node:readline";
|
|
10
12
|
import { getGlobalConfigDir } from "./index.js";
|
|
11
|
-
const DEFAULTS = {
|
|
12
|
-
gpu: "Unknown GPU",
|
|
13
|
-
vram: "Unknown",
|
|
14
|
-
ram: "Unknown",
|
|
15
|
-
os: process.platform === "win32" ? "Windows" : process.platform === "darwin" ? "macOS" : "Linux",
|
|
16
|
-
};
|
|
17
13
|
function getHardwarePath() {
|
|
18
14
|
return path.join(getGlobalConfigDir(), "hardware.json");
|
|
19
15
|
}
|
|
@@ -34,24 +30,160 @@ export function saveHardwareSpec(spec) {
|
|
|
34
30
|
fs.mkdirSync(dir, { recursive: true });
|
|
35
31
|
fs.writeFileSync(getHardwarePath(), JSON.stringify(spec, null, 2), "utf-8");
|
|
36
32
|
}
|
|
33
|
+
function formatBytes(bytes) {
|
|
34
|
+
const gb = bytes / (1024 * 1024 * 1024);
|
|
35
|
+
return gb >= 1 ? `${Math.round(gb)}GB` : `${Math.round(gb * 1024)}MB`;
|
|
36
|
+
}
|
|
37
|
+
function run(cmd) {
|
|
38
|
+
try {
|
|
39
|
+
return execSync(cmd, { encoding: "utf-8", timeout: 10_000, stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function detectGpu() {
|
|
46
|
+
// Try nvidia-smi first (works on Windows + Linux)
|
|
47
|
+
const nvsmi = run("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits");
|
|
48
|
+
if (nvsmi) {
|
|
49
|
+
const lines = nvsmi.split("\n").filter(Boolean);
|
|
50
|
+
const gpus = [];
|
|
51
|
+
let totalVram = 0;
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
const parts = line.split(",").map((s) => s.trim());
|
|
54
|
+
gpus.push(parts[0]);
|
|
55
|
+
const mb = parseInt(parts[1], 10);
|
|
56
|
+
if (!isNaN(mb))
|
|
57
|
+
totalVram += mb;
|
|
58
|
+
}
|
|
59
|
+
const gpu = gpus.join(" + ");
|
|
60
|
+
const vram = totalVram >= 1024 ? `${Math.round(totalVram / 1024)}GB` : `${totalVram}MB`;
|
|
61
|
+
return { gpu, vram };
|
|
62
|
+
}
|
|
63
|
+
if (process.platform === "win32") {
|
|
64
|
+
// wmic fallback for Windows (covers AMD/Intel too)
|
|
65
|
+
const wmic = run("wmic path win32_VideoController get Name,AdapterRAM /format:csv");
|
|
66
|
+
if (wmic) {
|
|
67
|
+
const lines = wmic.split("\n").filter((l) => l.trim() && !l.startsWith("Node"));
|
|
68
|
+
const gpus = [];
|
|
69
|
+
let totalVram = 0;
|
|
70
|
+
for (const line of lines) {
|
|
71
|
+
const parts = line.split(",").map((s) => s.trim());
|
|
72
|
+
// CSV format: Node,AdapterRAM,Name
|
|
73
|
+
const adapterRam = parseInt(parts[1], 10);
|
|
74
|
+
const name = parts[2];
|
|
75
|
+
if (name)
|
|
76
|
+
gpus.push(name);
|
|
77
|
+
if (!isNaN(adapterRam) && adapterRam > 0)
|
|
78
|
+
totalVram += adapterRam;
|
|
79
|
+
}
|
|
80
|
+
if (gpus.length > 0) {
|
|
81
|
+
return {
|
|
82
|
+
gpu: gpus.join(" + "),
|
|
83
|
+
vram: totalVram > 0 ? formatBytes(totalVram) : "Unknown",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (process.platform === "linux") {
|
|
89
|
+
// lspci fallback for Linux
|
|
90
|
+
const lspci = run("lspci | grep -i 'vga\\|3d\\|display'");
|
|
91
|
+
if (lspci) {
|
|
92
|
+
const match = lspci.match(/:\s+(.+)/);
|
|
93
|
+
return { gpu: match?.[1] || lspci.split("\n")[0], vram: "Unknown" };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (process.platform === "darwin") {
|
|
97
|
+
const sp = run("system_profiler SPDisplaysDataType 2>/dev/null | grep 'Chipset Model\\|VRAM'");
|
|
98
|
+
if (sp) {
|
|
99
|
+
const chipMatch = sp.match(/Chipset Model:\s+(.+)/);
|
|
100
|
+
const vramMatch = sp.match(/VRAM.*?:\s+(.+)/);
|
|
101
|
+
return {
|
|
102
|
+
gpu: chipMatch?.[1] || "Apple Silicon",
|
|
103
|
+
vram: vramMatch?.[1] || "Unified Memory",
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return { gpu: "Unknown GPU", vram: "Unknown" };
|
|
108
|
+
}
|
|
109
|
+
function detectRam() {
|
|
110
|
+
const totalBytes = os.totalmem();
|
|
111
|
+
return formatBytes(totalBytes);
|
|
112
|
+
}
|
|
113
|
+
function detectOs() {
|
|
114
|
+
if (process.platform === "win32") {
|
|
115
|
+
const ver = run("ver");
|
|
116
|
+
if (ver)
|
|
117
|
+
return ver;
|
|
118
|
+
return `Windows ${os.release()}`;
|
|
119
|
+
}
|
|
120
|
+
if (process.platform === "darwin") {
|
|
121
|
+
const ver = run("sw_vers -productVersion");
|
|
122
|
+
return ver ? `macOS ${ver}` : "macOS";
|
|
123
|
+
}
|
|
124
|
+
// Linux
|
|
125
|
+
const pretty = run("cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"'");
|
|
126
|
+
return pretty || `Linux ${os.release()}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Auto-detect hardware specs from the system.
|
|
130
|
+
* Returns a HardwareSpec with best-effort values.
|
|
131
|
+
*/
|
|
132
|
+
export function detectHardwareSpec() {
|
|
133
|
+
const { gpu, vram } = detectGpu();
|
|
134
|
+
const ram = detectRam();
|
|
135
|
+
const detectedOs = detectOs();
|
|
136
|
+
return { gpu, vram, ram, os: detectedOs };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Auto-detect hardware, save it, and print what was found.
|
|
140
|
+
* If detection gets "Unknown" for critical fields, offer manual override.
|
|
141
|
+
*/
|
|
142
|
+
export async function autoDetectAndSave() {
|
|
143
|
+
console.log("\n Detecting hardware...\n");
|
|
144
|
+
const spec = detectHardwareSpec();
|
|
145
|
+
console.log(` GPU: ${spec.gpu}`);
|
|
146
|
+
console.log(` VRAM: ${spec.vram}`);
|
|
147
|
+
console.log(` RAM: ${spec.ram}`);
|
|
148
|
+
console.log(` OS: ${spec.os}`);
|
|
149
|
+
const hasUnknowns = spec.gpu === "Unknown GPU" || spec.vram === "Unknown";
|
|
150
|
+
if (hasUnknowns) {
|
|
151
|
+
console.log("\n Some values couldn't be auto-detected. Fill in the blanks:\n");
|
|
152
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
153
|
+
const ask = (q, def) => new Promise((resolve) => {
|
|
154
|
+
const suffix = def ? ` [${def}]` : "";
|
|
155
|
+
rl.question(`${q}${suffix}: `, (answer) => resolve(answer.trim() || def || ""));
|
|
156
|
+
});
|
|
157
|
+
if (spec.gpu === "Unknown GPU")
|
|
158
|
+
spec.gpu = await ask(" GPU", spec.gpu);
|
|
159
|
+
if (spec.vram === "Unknown")
|
|
160
|
+
spec.vram = await ask(" VRAM (e.g. 12GB)", spec.vram);
|
|
161
|
+
rl.close();
|
|
162
|
+
}
|
|
163
|
+
saveHardwareSpec(spec);
|
|
164
|
+
console.log(`\n Hardware spec saved to ${getHardwarePath()}\n`);
|
|
165
|
+
return spec;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Interactive manual prompts for all fields (--setup-hardware).
|
|
169
|
+
* Pre-fills with auto-detected values so user can just press Enter.
|
|
170
|
+
*/
|
|
37
171
|
export async function promptHardwareSpec() {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
output: process.stdout,
|
|
41
|
-
});
|
|
172
|
+
const detected = detectHardwareSpec();
|
|
173
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
42
174
|
const ask = (q, def) => new Promise((resolve) => {
|
|
43
175
|
const suffix = def ? ` [${def}]` : "";
|
|
44
176
|
rl.question(`${q}${suffix}: `, (answer) => resolve(answer.trim() || def || ""));
|
|
45
177
|
});
|
|
46
|
-
console.log("\n Hardware Setup for Scout
|
|
47
|
-
console.log("
|
|
48
|
-
const gpu = await ask(" GPU",
|
|
49
|
-
const vram = await ask(" VRAM
|
|
50
|
-
const ram = await ask("
|
|
51
|
-
const
|
|
178
|
+
console.log("\n Hardware Setup for Scout");
|
|
179
|
+
console.log(" Auto-detected values shown in brackets — press Enter to accept.\n");
|
|
180
|
+
const gpu = await ask(" GPU", detected.gpu);
|
|
181
|
+
const vram = await ask(" VRAM", detected.vram);
|
|
182
|
+
const ram = await ask(" RAM", detected.ram);
|
|
183
|
+
const osName = await ask(" OS", detected.os);
|
|
52
184
|
const notes = await ask(" Notes (optional, e.g. 'prefer uncensored models')");
|
|
53
185
|
rl.close();
|
|
54
|
-
const spec = { gpu, vram, ram, os };
|
|
186
|
+
const spec = { gpu, vram, ram, os: osName };
|
|
55
187
|
if (notes)
|
|
56
188
|
spec.notes = notes;
|
|
57
189
|
saveHardwareSpec(spec);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.js","sourceRoot":"","sources":["../../src/config/hardware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAUhD,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"hardware.js","sourceRoot":"","sources":["../../src/config/hardware.ts"],"names":[],"mappings":"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"}
|