@pulso/companion 0.4.7 → 0.4.9
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 +67 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9955,6 +9955,39 @@ async function handleCommand(command, params, streamCb) {
|
|
|
9955
9955
|
}
|
|
9956
9956
|
};
|
|
9957
9957
|
}
|
|
9958
|
+
if (command === "llm_detect_sessions") {
|
|
9959
|
+
const sessions = [];
|
|
9960
|
+
const PROVIDERS = [
|
|
9961
|
+
{ provider: "claude", url: "claude.ai", login_indicator: "/login" },
|
|
9962
|
+
{ provider: "chatgpt", url: "chatgpt.com", login_indicator: "/auth/login" },
|
|
9963
|
+
{ provider: "perplexity", url: "perplexity.ai", login_indicator: "/login" },
|
|
9964
|
+
{ provider: "gemini", url: "gemini.google.com", login_indicator: "/signin" }
|
|
9965
|
+
];
|
|
9966
|
+
try {
|
|
9967
|
+
const tabsResult = await adapter.browserListTabs();
|
|
9968
|
+
const tabs = Array.isArray(tabsResult) ? tabsResult : tabsResult?.data ?? [];
|
|
9969
|
+
const tabList = tabs;
|
|
9970
|
+
for (const p of PROVIDERS) {
|
|
9971
|
+
const matchingTabs = tabList.filter((t) => t.url?.includes(p.url));
|
|
9972
|
+
const tabOpen = matchingTabs.length > 0;
|
|
9973
|
+
const loggedIn = tabOpen && !matchingTabs.some((t) => t.url?.includes(p.login_indicator));
|
|
9974
|
+
sessions.push({ provider: p.provider, url: p.url, logged_in: loggedIn, tab_open: tabOpen });
|
|
9975
|
+
}
|
|
9976
|
+
} catch {
|
|
9977
|
+
for (const p of PROVIDERS) {
|
|
9978
|
+
sessions.push({ provider: p.provider, url: p.url, logged_in: false, tab_open: false });
|
|
9979
|
+
}
|
|
9980
|
+
}
|
|
9981
|
+
const available = sessions.filter((s) => s.logged_in).map((s) => s.provider);
|
|
9982
|
+
return {
|
|
9983
|
+
success: true,
|
|
9984
|
+
data: {
|
|
9985
|
+
sessions,
|
|
9986
|
+
available_providers: available,
|
|
9987
|
+
has_browser_llm: available.length > 0
|
|
9988
|
+
}
|
|
9989
|
+
};
|
|
9990
|
+
}
|
|
9958
9991
|
if (command === "llm_infer") {
|
|
9959
9992
|
const {
|
|
9960
9993
|
messages,
|
|
@@ -11058,7 +11091,6 @@ print(result.stdout[:5000])
|
|
|
11058
11091
|
if (useStreamJson) {
|
|
11059
11092
|
args.push("--verbose", "--include-partial-messages");
|
|
11060
11093
|
}
|
|
11061
|
-
args.push("--tools", "");
|
|
11062
11094
|
if (systemPrompt && systemPrompt.trim()) {
|
|
11063
11095
|
args.push("--system-prompt", systemPrompt.trim());
|
|
11064
11096
|
}
|
|
@@ -11105,9 +11137,21 @@ print(result.stdout[:5000])
|
|
|
11105
11137
|
}
|
|
11106
11138
|
}
|
|
11107
11139
|
};
|
|
11140
|
+
const { join: _join, dirname: _dirname } = __require("path");
|
|
11141
|
+
const _fs = __require("fs");
|
|
11142
|
+
const _augPath = augmentedPath2();
|
|
11143
|
+
let _nodeBinDir = "";
|
|
11144
|
+
for (const _dir of _augPath.split(":")) {
|
|
11145
|
+
try {
|
|
11146
|
+
_fs.accessSync(_join(_dir, "node"), _fs.constants.X_OK);
|
|
11147
|
+
_nodeBinDir = _dir;
|
|
11148
|
+
break;
|
|
11149
|
+
} catch {
|
|
11150
|
+
}
|
|
11151
|
+
}
|
|
11108
11152
|
const childEnv = {
|
|
11109
11153
|
...process.env,
|
|
11110
|
-
PATH: `${
|
|
11154
|
+
PATH: _nodeBinDir ? `${_nodeBinDir}:${_augPath}` : _augPath
|
|
11111
11155
|
};
|
|
11112
11156
|
delete childEnv.CLAUDECODE;
|
|
11113
11157
|
delete childEnv.CLAUDE_CODE;
|
|
@@ -11200,13 +11244,30 @@ print(result.stdout[:5000])
|
|
|
11200
11244
|
);
|
|
11201
11245
|
}
|
|
11202
11246
|
case "sys_claude_status": {
|
|
11247
|
+
const _home = process.env.HOME || "";
|
|
11248
|
+
const _claudePaths = [
|
|
11249
|
+
`${_home}/.local/bin/claude`,
|
|
11250
|
+
`${_home}/.local/share/claude/versions/latest/claude`,
|
|
11251
|
+
"/usr/local/bin/claude",
|
|
11252
|
+
"/opt/homebrew/bin/claude"
|
|
11253
|
+
];
|
|
11254
|
+
let _claudeBin = "claude";
|
|
11255
|
+
for (const _p of _claudePaths) {
|
|
11256
|
+
try {
|
|
11257
|
+
execSync3(`test -x "${_p}"`, { stdio: "ignore" });
|
|
11258
|
+
_claudeBin = _p;
|
|
11259
|
+
break;
|
|
11260
|
+
} catch {
|
|
11261
|
+
}
|
|
11262
|
+
}
|
|
11203
11263
|
try {
|
|
11204
|
-
const version = await runShell4("
|
|
11264
|
+
const version = await runShell4(`"${_claudeBin}" --version 2>/dev/null`, 5e3);
|
|
11205
11265
|
let authStatus = "unknown";
|
|
11206
11266
|
let authDetails;
|
|
11207
11267
|
try {
|
|
11208
|
-
const status = await runShell4("
|
|
11209
|
-
const
|
|
11268
|
+
const status = await runShell4(`"${_claudeBin}" auth status 2>&1`, 1e4);
|
|
11269
|
+
const jsonLine = status.split("\n").find((l) => l.trimStart().startsWith("{"));
|
|
11270
|
+
const trimmed = jsonLine?.trim() ?? status.trim();
|
|
11210
11271
|
let parsed = null;
|
|
11211
11272
|
try {
|
|
11212
11273
|
parsed = JSON.parse(trimmed);
|
|
@@ -12293,6 +12354,7 @@ async function probeCapabilities() {
|
|
|
12293
12354
|
}
|
|
12294
12355
|
tools.add("llm_infer");
|
|
12295
12356
|
tools.add("llm_list_local");
|
|
12357
|
+
tools.add("llm_detect_sessions");
|
|
12296
12358
|
if (adapter.platform === "macos" || adapter.platform === "windows") {
|
|
12297
12359
|
tools.add("llm_browser_claude");
|
|
12298
12360
|
tools.add("llm_browser_chatgpt");
|