@involvex/super-agent-cli 0.0.88 → 0.0.91
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/index.js +173 -84
- package/dist/super-agent-cli.exe +0 -0
- package/dist/super-agent.js +5 -1
- package/eslint.config.mjs +1 -1
- package/package.json +12 -10
- package/super-agent.js +5 -1
- package/vscode-extension/.vscodeignore +1 -1
- package/vscode-extension/assets/OIG2.DOaPIFEsckNdoFMZfTst.jpeg +0 -0
- package/vscode-extension/assets/OIG2.VAWPCioTg1WMPjh6hCKf.jpeg +0 -0
- package/vscode-extension/assets/OIG2.lB.rOYX.C99.N1x8iyfe.jpeg +0 -0
- package/vscode-extension/assets/OIG2.lUJOmexttYsbAVqCtOwM.jpeg +0 -0
- package/vscode-extension/assets/OIG3.emS4s05QfD4P1jTVi3Fe.jpeg +0 -0
- package/vscode-extension/assets/icon.PNG +0 -0
- package/vscode-extension/build.js +4 -4
- package/vscode-extension/dist/chat-provider.js +262 -0
- package/vscode-extension/dist/chat-provider.js.map +1 -0
- package/vscode-extension/dist/chat.css +268 -0
- package/vscode-extension/dist/chat.js +233 -0
- package/vscode-extension/dist/cli-connector.js +296 -0
- package/vscode-extension/dist/cli-connector.js.map +1 -0
- package/vscode-extension/dist/extension.js +156 -0
- package/vscode-extension/dist/extension.js.map +1 -0
- package/vscode-extension/dist/file-context.js +230 -0
- package/vscode-extension/dist/file-context.js.map +1 -0
- package/vscode-extension/dist/node_modules/ws/LICENSE +20 -0
- package/vscode-extension/dist/node_modules/ws/README.md +548 -0
- package/vscode-extension/dist/node_modules/ws/browser.js +8 -0
- package/vscode-extension/dist/node_modules/ws/index.js +13 -0
- package/vscode-extension/dist/node_modules/ws/lib/buffer-util.js +131 -0
- package/vscode-extension/dist/node_modules/ws/lib/constants.js +19 -0
- package/vscode-extension/dist/node_modules/ws/lib/event-target.js +292 -0
- package/vscode-extension/dist/node_modules/ws/lib/extension.js +203 -0
- package/vscode-extension/dist/node_modules/ws/lib/limiter.js +55 -0
- package/vscode-extension/dist/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/vscode-extension/dist/node_modules/ws/lib/receiver.js +706 -0
- package/vscode-extension/dist/node_modules/ws/lib/sender.js +602 -0
- package/vscode-extension/dist/node_modules/ws/lib/stream.js +161 -0
- package/vscode-extension/dist/node_modules/ws/lib/subprotocol.js +62 -0
- package/vscode-extension/dist/node_modules/ws/lib/validation.js +152 -0
- package/vscode-extension/dist/node_modules/ws/lib/websocket-server.js +554 -0
- package/vscode-extension/dist/node_modules/ws/lib/websocket.js +1393 -0
- package/vscode-extension/dist/node_modules/ws/package.json +69 -0
- package/vscode-extension/dist/node_modules/ws/wrapper.mjs +8 -0
- package/vscode-extension/dist/super-agent-vscode-0.0.3.vsix +0 -0
- package/vscode-extension/icon.png +0 -0
- package/vscode-extension/icon.svg +11 -0
- package/vscode-extension/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -1731,7 +1731,7 @@ var init_indexer = __esm(() => {
|
|
|
1731
1731
|
var require_package = __commonJS((exports, module) => {
|
|
1732
1732
|
module.exports = {
|
|
1733
1733
|
name: "@involvex/super-agent-cli",
|
|
1734
|
-
version: "0.0.
|
|
1734
|
+
version: "0.0.91",
|
|
1735
1735
|
description: "An open-source AI agent that brings the power of Super Agent directly into your terminal.",
|
|
1736
1736
|
keywords: [
|
|
1737
1737
|
"cli",
|
|
@@ -1759,7 +1759,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1759
1759
|
},
|
|
1760
1760
|
main: "dist/index.js",
|
|
1761
1761
|
bin: {
|
|
1762
|
-
"super-agent": "super-agent.js"
|
|
1762
|
+
"super-agent": "dist/super-agent.js"
|
|
1763
1763
|
},
|
|
1764
1764
|
workspaces: [
|
|
1765
1765
|
"@plugins/templates/*",
|
|
@@ -1768,7 +1768,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1768
1768
|
],
|
|
1769
1769
|
scripts: {
|
|
1770
1770
|
prebuild: "bun run format && bun run lint:fix && bun run typecheck",
|
|
1771
|
-
build: "bun build src/index.ts --outdir ./dist --target node --packages external --format esm && bun run copy-bin && bun run build:web",
|
|
1771
|
+
build: "bun build src/index.ts --outdir ./dist --target node --packages external --format esm && bun run copy-bin && bun run build:web && bun run build:plugins && bun run build:vscode && bun run package:vscode",
|
|
1772
1772
|
"build:bun": "bun build src/index.ts --outdir ./dist --target node --packages external --format esm",
|
|
1773
1773
|
"build:plugins": "bun run -F @involvex/super-agent\\* build",
|
|
1774
1774
|
"build:vscode": "bun run -F super-agent-vscode build",
|
|
@@ -1794,9 +1794,12 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1794
1794
|
"test:watch": "vitest",
|
|
1795
1795
|
typecheck: "tsc --noEmit"
|
|
1796
1796
|
},
|
|
1797
|
+
overrides: {
|
|
1798
|
+
"@modelcontextprotocol/sdk": "^1.26.0"
|
|
1799
|
+
},
|
|
1797
1800
|
dependencies: {
|
|
1798
1801
|
"@google/generative-ai": "^0.24.1",
|
|
1799
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
1802
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
1800
1803
|
"@types/mime": "^4.0.0",
|
|
1801
1804
|
axios: "^1.13.4",
|
|
1802
1805
|
bcrypt: "^6.0.0",
|
|
@@ -1804,9 +1807,8 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1804
1807
|
chalk: "^5.6.2",
|
|
1805
1808
|
commander: "^14.0.3",
|
|
1806
1809
|
"conventional-changelog-cli": "^5.0.0",
|
|
1807
|
-
dotenv: "^17.2.
|
|
1808
|
-
|
|
1809
|
-
firebase: "^12.8.0",
|
|
1810
|
+
dotenv: "^17.2.4",
|
|
1811
|
+
firebase: "^12.9.0",
|
|
1810
1812
|
"fs-extra": "^11.3.3",
|
|
1811
1813
|
ignore: "^7.0.5",
|
|
1812
1814
|
ink: "^6.6.0",
|
|
@@ -1815,7 +1817,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1815
1817
|
"marked-terminal": "^7.3.0",
|
|
1816
1818
|
mime: "^4.1.0",
|
|
1817
1819
|
open: "^11.0.0",
|
|
1818
|
-
openai: "^6.
|
|
1820
|
+
openai: "^6.18.0",
|
|
1819
1821
|
react: "^19.2.4",
|
|
1820
1822
|
"ripgrep-node": "^1.0.0",
|
|
1821
1823
|
"shell-quote": "^1.8.3",
|
|
@@ -1824,7 +1826,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1824
1826
|
},
|
|
1825
1827
|
devDependencies: {
|
|
1826
1828
|
"@types/fs-extra": "^11.0.4",
|
|
1827
|
-
"@types/node": "^25.1
|
|
1829
|
+
"@types/node": "^25.2.1",
|
|
1828
1830
|
"@types/react": "18.3.27",
|
|
1829
1831
|
"@types/ws": "^8.18.1",
|
|
1830
1832
|
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
@@ -1834,7 +1836,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
1834
1836
|
prettier: "^3.8.1",
|
|
1835
1837
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
1836
1838
|
"prettier-plugin-packagejson": "^3.0.0",
|
|
1837
|
-
"prettier-plugin-sort-imports": "^1.8.
|
|
1839
|
+
"prettier-plugin-sort-imports": "^1.8.10",
|
|
1838
1840
|
"react-devtools-core": "^7.0.1",
|
|
1839
1841
|
tsx: "^4.21.0",
|
|
1840
1842
|
typescript: "^5.9.3",
|
|
@@ -1992,11 +1994,9 @@ var BANNER = `
|
|
|
1992
1994
|
`;
|
|
1993
1995
|
|
|
1994
1996
|
// src/utils/confirmation-service.ts
|
|
1995
|
-
import { exec, spawn } from "child_process";
|
|
1996
1997
|
import { strict as assert } from "assert";
|
|
1998
|
+
import { spawn } from "child_process";
|
|
1997
1999
|
import { EventEmitter } from "events";
|
|
1998
|
-
import { promisify } from "util";
|
|
1999
|
-
var execAsync = promisify(exec);
|
|
2000
2000
|
|
|
2001
2001
|
class ConfirmationService extends EventEmitter {
|
|
2002
2002
|
static instance;
|
|
@@ -2911,11 +2911,53 @@ init_config();
|
|
|
2911
2911
|
|
|
2912
2912
|
// src/plugins/manager.ts
|
|
2913
2913
|
init_settings_manager();
|
|
2914
|
-
|
|
2915
|
-
|
|
2914
|
+
|
|
2915
|
+
// src/utils/exec.ts
|
|
2916
|
+
import { spawn as spawn2 } from "child_process";
|
|
2917
|
+
async function runSafeCommand(command, args, options = {}) {
|
|
2918
|
+
return new Promise((resolve, reject) => {
|
|
2919
|
+
const child = spawn2(command, args, {
|
|
2920
|
+
cwd: options.cwd || process.cwd(),
|
|
2921
|
+
env: { ...process.env, ...options.env },
|
|
2922
|
+
shell: false
|
|
2923
|
+
});
|
|
2924
|
+
let stdout = "";
|
|
2925
|
+
let stderr = "";
|
|
2926
|
+
if (child.stdout) {
|
|
2927
|
+
child.stdout.on("data", (data) => {
|
|
2928
|
+
stdout += data.toString();
|
|
2929
|
+
});
|
|
2930
|
+
}
|
|
2931
|
+
if (child.stderr) {
|
|
2932
|
+
child.stderr.on("data", (data) => {
|
|
2933
|
+
stderr += data.toString();
|
|
2934
|
+
});
|
|
2935
|
+
}
|
|
2936
|
+
if (options.input && child.stdin) {
|
|
2937
|
+
child.stdin.write(options.input);
|
|
2938
|
+
child.stdin.end();
|
|
2939
|
+
}
|
|
2940
|
+
child.on("close", (code) => {
|
|
2941
|
+
if (code === 0) {
|
|
2942
|
+
resolve({ stdout, stderr });
|
|
2943
|
+
} else {
|
|
2944
|
+
const error = new Error(`Command "${command} ${args.join(" ")}" failed with exit code ${code}.
|
|
2945
|
+
Stderr: ${stderr}`);
|
|
2946
|
+
error.code = code;
|
|
2947
|
+
error.stdout = stdout;
|
|
2948
|
+
error.stderr = stderr;
|
|
2949
|
+
reject(error);
|
|
2950
|
+
}
|
|
2951
|
+
});
|
|
2952
|
+
child.on("error", (err) => {
|
|
2953
|
+
reject(err);
|
|
2954
|
+
});
|
|
2955
|
+
});
|
|
2956
|
+
}
|
|
2957
|
+
|
|
2958
|
+
// src/plugins/manager.ts
|
|
2916
2959
|
import * as path4 from "path";
|
|
2917
2960
|
import fs4 from "fs-extra";
|
|
2918
|
-
var execAsync2 = promisify2(exec2);
|
|
2919
2961
|
|
|
2920
2962
|
class PluginManager {
|
|
2921
2963
|
static instance;
|
|
@@ -3016,12 +3058,14 @@ class PluginManager {
|
|
|
3016
3058
|
if (await fs4.pathExists(targetDir)) {
|
|
3017
3059
|
console.log(`Repository already cloned at ${targetDir}. Pulling latest...`);
|
|
3018
3060
|
try {
|
|
3019
|
-
await
|
|
3061
|
+
await runSafeCommand("git", ["pull"], {
|
|
3062
|
+
cwd: targetDir
|
|
3063
|
+
});
|
|
3020
3064
|
} catch (error) {
|
|
3021
3065
|
console.warn(`Failed to pull updates: ${error}`);
|
|
3022
3066
|
}
|
|
3023
3067
|
} else {
|
|
3024
|
-
await
|
|
3068
|
+
await runSafeCommand("git", ["clone", gitUrl, targetDir]);
|
|
3025
3069
|
}
|
|
3026
3070
|
const packageJsonPath = path4.join(targetDir, "package.json");
|
|
3027
3071
|
if (await fs4.pathExists(packageJsonPath)) {
|
|
@@ -3029,11 +3073,17 @@ class PluginManager {
|
|
|
3029
3073
|
try {
|
|
3030
3074
|
const hasBun = await fs4.pathExists(path4.join(targetDir, "bun.lockb"));
|
|
3031
3075
|
const hasYarn = await fs4.pathExists(path4.join(targetDir, "yarn.lock"));
|
|
3032
|
-
const installCmd = hasBun ? "bun
|
|
3033
|
-
|
|
3076
|
+
const installCmd = hasBun ? "bun" : hasYarn ? "yarn" : "npm";
|
|
3077
|
+
const installArgs = ["install"];
|
|
3078
|
+
await runSafeCommand(installCmd, installArgs, {
|
|
3079
|
+
cwd: targetDir
|
|
3080
|
+
});
|
|
3034
3081
|
console.log("\uD83D\uDD28 Building plugin...");
|
|
3035
|
-
const buildCmd = hasBun ? "bun
|
|
3036
|
-
|
|
3082
|
+
const buildCmd = hasBun ? "bun" : hasYarn ? "yarn" : "npm";
|
|
3083
|
+
const buildArgs = ["run", "build"];
|
|
3084
|
+
await runSafeCommand(buildCmd, buildArgs, {
|
|
3085
|
+
cwd: targetDir
|
|
3086
|
+
});
|
|
3037
3087
|
} catch (error) {
|
|
3038
3088
|
console.warn(`Build failed: ${error.message}`);
|
|
3039
3089
|
}
|
|
@@ -3056,11 +3106,17 @@ class PluginManager {
|
|
|
3056
3106
|
try {
|
|
3057
3107
|
const hasBun = await fs4.pathExists(path4.join(absolutePath, "bun.lockb"));
|
|
3058
3108
|
const hasYarn = await fs4.pathExists(path4.join(absolutePath, "yarn.lock"));
|
|
3059
|
-
const installCmd = hasBun ? "bun
|
|
3060
|
-
|
|
3109
|
+
const installCmd = hasBun ? "bun" : hasYarn ? "yarn" : "npm";
|
|
3110
|
+
const installArgs = ["install"];
|
|
3111
|
+
await runSafeCommand(installCmd, installArgs, {
|
|
3112
|
+
cwd: absolutePath
|
|
3113
|
+
});
|
|
3061
3114
|
console.log("\uD83D\uDD28 Building plugin...");
|
|
3062
|
-
const buildCmd = hasBun ? "bun
|
|
3063
|
-
|
|
3115
|
+
const buildCmd = hasBun ? "bun" : hasYarn ? "yarn" : "npm";
|
|
3116
|
+
const buildArgs = ["run", "build"];
|
|
3117
|
+
await runSafeCommand(buildCmd, buildArgs, {
|
|
3118
|
+
cwd: absolutePath
|
|
3119
|
+
});
|
|
3064
3120
|
} catch (error) {
|
|
3065
3121
|
console.warn(`Build failed: ${error.message}`);
|
|
3066
3122
|
}
|
|
@@ -3477,11 +3533,8 @@ async function getAllSuperAgentTools() {
|
|
|
3477
3533
|
}
|
|
3478
3534
|
|
|
3479
3535
|
// src/plugins/repository-manager.ts
|
|
3480
|
-
import { exec as exec3 } from "child_process";
|
|
3481
|
-
import { promisify as promisify3 } from "util";
|
|
3482
3536
|
import * as path5 from "path";
|
|
3483
3537
|
import fs5 from "fs-extra";
|
|
3484
|
-
var execAsync3 = promisify3(exec3);
|
|
3485
3538
|
var BUILTIN_REPOSITORIES = {
|
|
3486
3539
|
agents: {
|
|
3487
3540
|
type: "agents",
|
|
@@ -3535,21 +3588,21 @@ class RepositoryManager {
|
|
|
3535
3588
|
const gitRoot = process.cwd();
|
|
3536
3589
|
const gitDirPath = path5.join(gitRoot, ".git");
|
|
3537
3590
|
if (!await fs5.pathExists(gitDirPath)) {
|
|
3538
|
-
await
|
|
3591
|
+
await runSafeCommand("git", ["clone", repoConfig.url, targetDir], {
|
|
3539
3592
|
cwd: process.cwd()
|
|
3540
3593
|
});
|
|
3541
3594
|
} else {
|
|
3542
3595
|
try {
|
|
3543
|
-
await
|
|
3596
|
+
await runSafeCommand("git", ["submodule", "add", repoConfig.url, targetDir], {
|
|
3544
3597
|
cwd: process.cwd()
|
|
3545
3598
|
});
|
|
3546
3599
|
} catch (submoduleError) {
|
|
3547
|
-
await
|
|
3600
|
+
await runSafeCommand("git", ["clone", repoConfig.url, targetDir], {
|
|
3548
3601
|
cwd: process.cwd()
|
|
3549
3602
|
});
|
|
3550
3603
|
}
|
|
3551
3604
|
try {
|
|
3552
|
-
await
|
|
3605
|
+
await runSafeCommand("git", ["submodule", "update", "--init", "--recursive"], {
|
|
3553
3606
|
cwd: process.cwd()
|
|
3554
3607
|
});
|
|
3555
3608
|
} catch {}
|
|
@@ -3567,7 +3620,7 @@ class RepositoryManager {
|
|
|
3567
3620
|
const targetDir = path5.join(this.reposDir, config.type);
|
|
3568
3621
|
try {
|
|
3569
3622
|
if (await fs5.pathExists(targetDir)) {
|
|
3570
|
-
await
|
|
3623
|
+
await runSafeCommand("git", ["pull", "origin", config.branch || "main"], {
|
|
3571
3624
|
cwd: targetDir
|
|
3572
3625
|
});
|
|
3573
3626
|
updated.push(key);
|
|
@@ -4247,8 +4300,16 @@ Note: Some providers may require a full restart of the CLI to take effect.`;
|
|
|
4247
4300
|
if (key.tab || key.return) {
|
|
4248
4301
|
const safeIndex = Math.min(selectedCommandIndex, filteredSuggestions.length - 1);
|
|
4249
4302
|
const selectedCommand = filteredSuggestions[safeIndex];
|
|
4250
|
-
|
|
4251
|
-
|
|
4303
|
+
const stripCommandPlaceholders = (command) => {
|
|
4304
|
+
let previous;
|
|
4305
|
+
let current = command;
|
|
4306
|
+
do {
|
|
4307
|
+
previous = current;
|
|
4308
|
+
current = current.replace(/\s*<[^>]+>/g, "").replace(/\s*\[[^\]]+\]/g, "");
|
|
4309
|
+
} while (current !== previous);
|
|
4310
|
+
return current;
|
|
4311
|
+
};
|
|
4312
|
+
let completedCommand = stripCommandPlaceholders(selectedCommand.command);
|
|
4252
4313
|
if (!completedCommand.endsWith(" ") && selectedCommand.command.includes("<")) {
|
|
4253
4314
|
completedCommand += " ";
|
|
4254
4315
|
} else if (!completedCommand.endsWith(" ")) {
|
|
@@ -7416,7 +7477,11 @@ function getLogger() {
|
|
|
7416
7477
|
// src/ui/components/config-viewer.tsx
|
|
7417
7478
|
import { Box as Box10, Text as Text9 } from "ink";
|
|
7418
7479
|
import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
|
|
7419
|
-
function ConfigViewer({
|
|
7480
|
+
function ConfigViewer({
|
|
7481
|
+
config,
|
|
7482
|
+
isVisible = true,
|
|
7483
|
+
onClose
|
|
7484
|
+
}) {
|
|
7420
7485
|
if (!isVisible) {
|
|
7421
7486
|
return null;
|
|
7422
7487
|
}
|
|
@@ -7808,7 +7873,7 @@ init_settings_manager();
|
|
|
7808
7873
|
|
|
7809
7874
|
// src/tools/bash.ts
|
|
7810
7875
|
import * as shellQuote from "shell-quote";
|
|
7811
|
-
import { spawn as
|
|
7876
|
+
import { spawn as spawn3 } from "child_process";
|
|
7812
7877
|
class BashTool {
|
|
7813
7878
|
currentDirectory = process.cwd();
|
|
7814
7879
|
confirmationService = ConfirmationService.getInstance();
|
|
@@ -7821,7 +7886,7 @@ class BashTool {
|
|
|
7821
7886
|
const cmd = argv[0];
|
|
7822
7887
|
const args = argv.slice(1);
|
|
7823
7888
|
return await new Promise((resolve2, reject) => {
|
|
7824
|
-
const child =
|
|
7889
|
+
const child = spawn3(cmd, args, {
|
|
7825
7890
|
cwd: options.cwd,
|
|
7826
7891
|
shell: false
|
|
7827
7892
|
});
|
|
@@ -8464,7 +8529,7 @@ Important Files:
|
|
|
8464
8529
|
}
|
|
8465
8530
|
// src/tools/search.ts
|
|
8466
8531
|
init_indexer();
|
|
8467
|
-
import { spawn as
|
|
8532
|
+
import { spawn as spawn4 } from "child_process";
|
|
8468
8533
|
import * as path16 from "path";
|
|
8469
8534
|
import fs16 from "fs-extra";
|
|
8470
8535
|
|
|
@@ -8565,7 +8630,7 @@ class SearchTool {
|
|
|
8565
8630
|
}
|
|
8566
8631
|
args.push("--no-require-git", "--follow", "--glob", "!.git/**", "--glob", "!node_modules/**", "--glob", "!.DS_Store", "--glob", "!*.log");
|
|
8567
8632
|
args.push(query, this.currentDirectory);
|
|
8568
|
-
const rg =
|
|
8633
|
+
const rg = spawn4("rg", args);
|
|
8569
8634
|
let output = "";
|
|
8570
8635
|
let errorOutput = "";
|
|
8571
8636
|
rg.stdout.on("data", (data) => {
|
|
@@ -10252,6 +10317,9 @@ IMPORTANT RESPONSE GUIDELINES:
|
|
|
10252
10317
|
Current working directory: ${process.cwd()}`
|
|
10253
10318
|
});
|
|
10254
10319
|
}
|
|
10320
|
+
getChatHistory() {
|
|
10321
|
+
return this.chatHistory;
|
|
10322
|
+
}
|
|
10255
10323
|
async setProvider(providerId) {
|
|
10256
10324
|
const manager = getSettingsManager();
|
|
10257
10325
|
const activeProviderId = (providerId || "grok").toLowerCase();
|
|
@@ -11935,16 +12003,23 @@ class WebServer {
|
|
|
11935
12003
|
ws.on("message", async (data) => {
|
|
11936
12004
|
try {
|
|
11937
12005
|
const message = JSON.parse(data.toString());
|
|
11938
|
-
if (message.type === "prompt") {
|
|
11939
|
-
|
|
12006
|
+
if (message.type === "prompt" || message.type === "chat_message") {
|
|
12007
|
+
const content = message.content?.message || message.content || "";
|
|
12008
|
+
await this.handlePrompt(content, ws);
|
|
11940
12009
|
} else if (message.type === "get_file_tree") {
|
|
11941
12010
|
await this.handleGetFileTree(ws);
|
|
11942
12011
|
} else if (message.type === "get_file_content") {
|
|
11943
|
-
|
|
12012
|
+
const filePath = message.path || message.filePath;
|
|
12013
|
+
await this.handleGetFileContent(filePath, ws);
|
|
11944
12014
|
} else if (message.type === "list_sessions") {
|
|
11945
12015
|
await this.handleListSessions(ws);
|
|
11946
12016
|
} else if (message.type === "switch_session") {
|
|
11947
12017
|
await this.handleSwitchSession(message.sessionId, ws);
|
|
12018
|
+
} else if (message.type === "get_chat_history") {
|
|
12019
|
+
await this.handleGetChatHistory(ws);
|
|
12020
|
+
} else if (message.type === "abort") {
|
|
12021
|
+
this.agent.abortCurrentOperation();
|
|
12022
|
+
ws.send(JSON.stringify({ type: "done", content: "Operation aborted" }));
|
|
11948
12023
|
}
|
|
11949
12024
|
} catch (error) {
|
|
11950
12025
|
console.error("WebSocket message error:", error);
|
|
@@ -12068,6 +12143,23 @@ class WebServer {
|
|
|
12068
12143
|
ws.send(JSON.stringify({ type: "error", content: error.message }));
|
|
12069
12144
|
}
|
|
12070
12145
|
}
|
|
12146
|
+
async handleGetChatHistory(ws) {
|
|
12147
|
+
try {
|
|
12148
|
+
const history = this.agent.getChatHistory();
|
|
12149
|
+
ws.send(JSON.stringify({
|
|
12150
|
+
type: "chat_history",
|
|
12151
|
+
messages: history.map((entry) => ({
|
|
12152
|
+
role: entry.type === "user" ? "user" : "assistant",
|
|
12153
|
+
content: entry.content,
|
|
12154
|
+
timestamp: entry.timestamp,
|
|
12155
|
+
toolCall: entry.toolCall,
|
|
12156
|
+
toolResult: entry.toolResult
|
|
12157
|
+
}))
|
|
12158
|
+
}));
|
|
12159
|
+
} catch (error) {
|
|
12160
|
+
ws.send(JSON.stringify({ type: "error", content: error.message }));
|
|
12161
|
+
}
|
|
12162
|
+
}
|
|
12071
12163
|
async checkAndSendUpdateNotification(ws) {
|
|
12072
12164
|
try {
|
|
12073
12165
|
const pkg = await Promise.resolve().then(() => __toESM(require_package(), 1));
|
|
@@ -13012,7 +13104,7 @@ function createGitCommand() {
|
|
|
13012
13104
|
// src/commands/statusbar.ts
|
|
13013
13105
|
init_settings_manager();
|
|
13014
13106
|
import { Command as Command11 } from "commander";
|
|
13015
|
-
import
|
|
13107
|
+
import inquirer4 from "inquirer";
|
|
13016
13108
|
function createStatusBarCommand() {
|
|
13017
13109
|
const command = new Command11("statusbar");
|
|
13018
13110
|
command.description("Configure status bar settings").action(async () => {
|
|
@@ -13026,43 +13118,40 @@ function createStatusBarCommand() {
|
|
|
13026
13118
|
show_context: false
|
|
13027
13119
|
};
|
|
13028
13120
|
try {
|
|
13029
|
-
const response = await prompt(
|
|
13030
|
-
|
|
13031
|
-
|
|
13032
|
-
|
|
13033
|
-
|
|
13034
|
-
|
|
13035
|
-
|
|
13036
|
-
|
|
13037
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
13052
|
-
|
|
13053
|
-
|
|
13054
|
-
|
|
13055
|
-
|
|
13056
|
-
|
|
13057
|
-
|
|
13058
|
-
|
|
13059
|
-
|
|
13060
|
-
|
|
13061
|
-
|
|
13062
|
-
|
|
13063
|
-
}
|
|
13064
|
-
]
|
|
13065
|
-
});
|
|
13121
|
+
const response = await inquirer4.prompt([
|
|
13122
|
+
{
|
|
13123
|
+
type: "checkbox",
|
|
13124
|
+
name: "features",
|
|
13125
|
+
message: "Select status bar features to display:",
|
|
13126
|
+
choices: [
|
|
13127
|
+
{
|
|
13128
|
+
name: "Model Name",
|
|
13129
|
+
value: "show_model",
|
|
13130
|
+
checked: currentConfig.show_model
|
|
13131
|
+
},
|
|
13132
|
+
{
|
|
13133
|
+
name: "Token Count",
|
|
13134
|
+
value: "show_tokens",
|
|
13135
|
+
checked: currentConfig.show_tokens
|
|
13136
|
+
},
|
|
13137
|
+
{
|
|
13138
|
+
name: "Git Status",
|
|
13139
|
+
value: "show_git_status",
|
|
13140
|
+
checked: currentConfig.show_git_status
|
|
13141
|
+
},
|
|
13142
|
+
{
|
|
13143
|
+
name: "Memory Usage",
|
|
13144
|
+
value: "show_memory",
|
|
13145
|
+
checked: currentConfig.show_memory
|
|
13146
|
+
},
|
|
13147
|
+
{
|
|
13148
|
+
name: "Context Size",
|
|
13149
|
+
value: "show_context",
|
|
13150
|
+
checked: currentConfig.show_context
|
|
13151
|
+
}
|
|
13152
|
+
]
|
|
13153
|
+
}
|
|
13154
|
+
]);
|
|
13066
13155
|
const newConfig = {
|
|
13067
13156
|
show_model: response.features.includes("show_model"),
|
|
13068
13157
|
show_tokens: response.features.includes("show_tokens"),
|
|
@@ -13170,12 +13259,12 @@ function loadModel2() {
|
|
|
13170
13259
|
}
|
|
13171
13260
|
return model;
|
|
13172
13261
|
}
|
|
13173
|
-
async function processPromptHeadless(
|
|
13262
|
+
async function processPromptHeadless(prompt, apiKey, baseURL, model, maxToolRounds) {
|
|
13174
13263
|
try {
|
|
13175
13264
|
const agent = new SuperAgent(apiKey, baseURL, model, maxToolRounds);
|
|
13176
13265
|
const confirmationService = ConfirmationService.getInstance();
|
|
13177
13266
|
confirmationService.setSessionFlag("allOperations", true);
|
|
13178
|
-
const chatEntries = await agent.processUserMessage(
|
|
13267
|
+
const chatEntries = await agent.processUserMessage(prompt);
|
|
13179
13268
|
const messages = [];
|
|
13180
13269
|
for (const entry of chatEntries) {
|
|
13181
13270
|
switch (entry.type) {
|
package/dist/super-agent-cli.exe
CHANGED
|
Binary file
|
package/dist/super-agent.js
CHANGED
|
@@ -9,4 +9,8 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
9
9
|
const __dirname = dirname(__filename);
|
|
10
10
|
|
|
11
11
|
// Import and run the bundled CLI
|
|
12
|
-
|
|
12
|
+
const indexPath = __dirname.endsWith("dist")
|
|
13
|
+
? join(__dirname, "index.js")
|
|
14
|
+
: join(__dirname, "dist", "index.js");
|
|
15
|
+
|
|
16
|
+
import(indexPath);
|
package/eslint.config.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@involvex/super-agent-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.91",
|
|
4
4
|
"description": "An open-source AI agent that brings the power of Super Agent directly into your terminal.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"main": "dist/index.js",
|
|
30
30
|
"bin": {
|
|
31
|
-
"super-agent": "super-agent.js"
|
|
31
|
+
"super-agent": "dist/super-agent.js"
|
|
32
32
|
},
|
|
33
33
|
"workspaces": [
|
|
34
34
|
"@plugins/templates/*",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
],
|
|
38
38
|
"scripts": {
|
|
39
39
|
"prebuild": "bun run format && bun run lint:fix && bun run typecheck",
|
|
40
|
-
"build": "bun build src/index.ts --outdir ./dist --target node --packages external --format esm && bun run copy-bin && bun run build:web",
|
|
40
|
+
"build": "bun build src/index.ts --outdir ./dist --target node --packages external --format esm && bun run copy-bin && bun run build:web && bun run build:plugins && bun run build:vscode && bun run package:vscode",
|
|
41
41
|
"build:bun": "bun build src/index.ts --outdir ./dist --target node --packages external --format esm",
|
|
42
42
|
"build:plugins": "bun run -F @involvex/super-agent\\* build",
|
|
43
43
|
"build:vscode": "bun run -F super-agent-vscode build",
|
|
@@ -63,9 +63,12 @@
|
|
|
63
63
|
"test:watch": "vitest",
|
|
64
64
|
"typecheck": "tsc --noEmit"
|
|
65
65
|
},
|
|
66
|
+
"overrides": {
|
|
67
|
+
"@modelcontextprotocol/sdk": "^1.26.0"
|
|
68
|
+
},
|
|
66
69
|
"dependencies": {
|
|
67
70
|
"@google/generative-ai": "^0.24.1",
|
|
68
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
71
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
69
72
|
"@types/mime": "^4.0.0",
|
|
70
73
|
"axios": "^1.13.4",
|
|
71
74
|
"bcrypt": "^6.0.0",
|
|
@@ -73,9 +76,8 @@
|
|
|
73
76
|
"chalk": "^5.6.2",
|
|
74
77
|
"commander": "^14.0.3",
|
|
75
78
|
"conventional-changelog-cli": "^5.0.0",
|
|
76
|
-
"dotenv": "^17.2.
|
|
77
|
-
"
|
|
78
|
-
"firebase": "^12.8.0",
|
|
79
|
+
"dotenv": "^17.2.4",
|
|
80
|
+
"firebase": "^12.9.0",
|
|
79
81
|
"fs-extra": "^11.3.3",
|
|
80
82
|
"ignore": "^7.0.5",
|
|
81
83
|
"ink": "^6.6.0",
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
"marked-terminal": "^7.3.0",
|
|
85
87
|
"mime": "^4.1.0",
|
|
86
88
|
"open": "^11.0.0",
|
|
87
|
-
"openai": "^6.
|
|
89
|
+
"openai": "^6.18.0",
|
|
88
90
|
"react": "^19.2.4",
|
|
89
91
|
"ripgrep-node": "^1.0.0",
|
|
90
92
|
"shell-quote": "^1.8.3",
|
|
@@ -93,7 +95,7 @@
|
|
|
93
95
|
},
|
|
94
96
|
"devDependencies": {
|
|
95
97
|
"@types/fs-extra": "^11.0.4",
|
|
96
|
-
"@types/node": "^25.1
|
|
98
|
+
"@types/node": "^25.2.1",
|
|
97
99
|
"@types/react": "18.3.27",
|
|
98
100
|
"@types/ws": "^8.18.1",
|
|
99
101
|
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
@@ -103,7 +105,7 @@
|
|
|
103
105
|
"prettier": "^3.8.1",
|
|
104
106
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
105
107
|
"prettier-plugin-packagejson": "^3.0.0",
|
|
106
|
-
"prettier-plugin-sort-imports": "^1.8.
|
|
108
|
+
"prettier-plugin-sort-imports": "^1.8.10",
|
|
107
109
|
"react-devtools-core": "^7.0.1",
|
|
108
110
|
"tsx": "^4.21.0",
|
|
109
111
|
"typescript": "^5.9.3",
|
package/super-agent.js
CHANGED
|
@@ -9,4 +9,8 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
9
9
|
const __dirname = dirname(__filename);
|
|
10
10
|
|
|
11
11
|
// Import and run the bundled CLI
|
|
12
|
-
|
|
12
|
+
const indexPath = __dirname.endsWith("dist")
|
|
13
|
+
? join(__dirname, "index.js")
|
|
14
|
+
: join(__dirname, "dist", "index.js");
|
|
15
|
+
|
|
16
|
+
import(indexPath);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -2,7 +2,7 @@ const path = require("path");
|
|
|
2
2
|
const fs = require("fs");
|
|
3
3
|
|
|
4
4
|
const srcDir = path.join(__dirname, "src");
|
|
5
|
-
const outDir = path.join(__dirname, "
|
|
5
|
+
const outDir = path.join(__dirname, "dist");
|
|
6
6
|
|
|
7
7
|
// Ensure out directory exists
|
|
8
8
|
if (!fs.existsSync(outDir)) {
|
|
@@ -18,20 +18,20 @@ for (const file of assetsToCopy) {
|
|
|
18
18
|
|
|
19
19
|
if (fs.existsSync(srcPath)) {
|
|
20
20
|
fs.copyFileSync(srcPath, outPath);
|
|
21
|
-
console.log(`Copied ${file} to
|
|
21
|
+
console.log(`Copied ${file} to dist/`);
|
|
22
22
|
} else {
|
|
23
23
|
console.warn(`Source file not found: ${srcPath}`);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// Copy ws dependency to
|
|
27
|
+
// Copy ws dependency to dist/node_modules for packaging
|
|
28
28
|
const wsSrc = path.join(__dirname, "node_modules", "ws");
|
|
29
29
|
const wsDest = path.join(outDir, "node_modules", "ws");
|
|
30
30
|
|
|
31
31
|
if (fs.existsSync(wsSrc)) {
|
|
32
32
|
// Copy recursively
|
|
33
33
|
copyDirectory(wsSrc, wsDest);
|
|
34
|
-
console.log("Copied ws to
|
|
34
|
+
console.log("Copied ws to dist/node_modules/");
|
|
35
35
|
} else {
|
|
36
36
|
console.warn("ws not found in node_modules");
|
|
37
37
|
}
|