staklink 0.4.0 → 0.4.2
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/proxy-server.cjs +60 -13
- package/dist/staklink-cli.cjs +27 -11
- package/package.json +1 -1
package/dist/proxy-server.cjs
CHANGED
|
@@ -24061,7 +24061,7 @@ var require_token_io = __commonJS({
|
|
|
24061
24061
|
module2.exports = __toCommonJS(token_io_exports);
|
|
24062
24062
|
var import_path5 = __toESM2(require("path"));
|
|
24063
24063
|
var import_fs6 = __toESM2(require("fs"));
|
|
24064
|
-
var
|
|
24064
|
+
var import_os3 = __toESM2(require("os"));
|
|
24065
24065
|
var import_token_error = require_token_error();
|
|
24066
24066
|
function findRootDir() {
|
|
24067
24067
|
try {
|
|
@@ -24084,11 +24084,11 @@ var require_token_io = __commonJS({
|
|
|
24084
24084
|
if (process.env.XDG_DATA_HOME) {
|
|
24085
24085
|
return process.env.XDG_DATA_HOME;
|
|
24086
24086
|
}
|
|
24087
|
-
switch (
|
|
24087
|
+
switch (import_os3.default.platform()) {
|
|
24088
24088
|
case "darwin":
|
|
24089
|
-
return import_path5.default.join(
|
|
24089
|
+
return import_path5.default.join(import_os3.default.homedir(), "Library/Application Support");
|
|
24090
24090
|
case "linux":
|
|
24091
|
-
return import_path5.default.join(
|
|
24091
|
+
return import_path5.default.join(import_os3.default.homedir(), ".local/share");
|
|
24092
24092
|
case "win32":
|
|
24093
24093
|
if (process.env.LOCALAPPDATA) {
|
|
24094
24094
|
return process.env.LOCALAPPDATA;
|
|
@@ -26200,7 +26200,7 @@ var require_token_io2 = __commonJS({
|
|
|
26200
26200
|
module2.exports = __toCommonJS(token_io_exports);
|
|
26201
26201
|
var import_path5 = __toESM2(require("path"));
|
|
26202
26202
|
var import_fs6 = __toESM2(require("fs"));
|
|
26203
|
-
var
|
|
26203
|
+
var import_os3 = __toESM2(require("os"));
|
|
26204
26204
|
var import_token_error = require_token_error2();
|
|
26205
26205
|
function findRootDir() {
|
|
26206
26206
|
try {
|
|
@@ -26223,11 +26223,11 @@ var require_token_io2 = __commonJS({
|
|
|
26223
26223
|
if (process.env.XDG_DATA_HOME) {
|
|
26224
26224
|
return process.env.XDG_DATA_HOME;
|
|
26225
26225
|
}
|
|
26226
|
-
switch (
|
|
26226
|
+
switch (import_os3.default.platform()) {
|
|
26227
26227
|
case "darwin":
|
|
26228
|
-
return import_path5.default.join(
|
|
26228
|
+
return import_path5.default.join(import_os3.default.homedir(), "Library/Application Support");
|
|
26229
26229
|
case "linux":
|
|
26230
|
-
return import_path5.default.join(
|
|
26230
|
+
return import_path5.default.join(import_os3.default.homedir(), ".local/share");
|
|
26231
26231
|
case "win32":
|
|
26232
26232
|
if (process.env.LOCALAPPDATA) {
|
|
26233
26233
|
return process.env.LOCALAPPDATA;
|
|
@@ -26351,10 +26351,10 @@ var require_oauth = __commonJS({
|
|
|
26351
26351
|
refreshTokenRequest: () => refreshTokenRequest
|
|
26352
26352
|
});
|
|
26353
26353
|
module2.exports = __toCommonJS(oauth_exports);
|
|
26354
|
-
var
|
|
26354
|
+
var import_os3 = require("os");
|
|
26355
26355
|
var VERCEL_ISSUER = "https://vercel.com";
|
|
26356
26356
|
var VERCEL_CLI_CLIENT_ID = "cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp";
|
|
26357
|
-
var userAgent = `@vercel/oidc node-${process.version} ${(0,
|
|
26357
|
+
var userAgent = `@vercel/oidc node-${process.version} ${(0, import_os3.platform)()} (${(0, import_os3.arch)()}) ${(0, import_os3.hostname)()}`;
|
|
26358
26358
|
var _tokenEndpoint = null;
|
|
26359
26359
|
async function getTokenEndpoint() {
|
|
26360
26360
|
if (_tokenEndpoint) {
|
|
@@ -61258,7 +61258,7 @@ var SSEManager = class {
|
|
|
61258
61258
|
var sseManager = new SSEManager();
|
|
61259
61259
|
|
|
61260
61260
|
// src/proxy/version.ts
|
|
61261
|
-
var VERSION = "0.4.
|
|
61261
|
+
var VERSION = "0.4.2";
|
|
61262
61262
|
|
|
61263
61263
|
// node_modules/uuid/dist/esm/stringify.js
|
|
61264
61264
|
var byteToHex = [];
|
|
@@ -137436,6 +137436,32 @@ setInterval(cleanup, 6e4);
|
|
|
137436
137436
|
// src/agent/async_handler.ts
|
|
137437
137437
|
var import_path3 = __toESM(require("path"), 1);
|
|
137438
137438
|
var import_promises2 = __toESM(require("fs/promises"), 1);
|
|
137439
|
+
var import_os2 = __toESM(require("os"), 1);
|
|
137440
|
+
var SCREENSHOT_DIR = import_path3.default.join(
|
|
137441
|
+
import_os2.default.homedir(),
|
|
137442
|
+
".agent-browser",
|
|
137443
|
+
"tmp",
|
|
137444
|
+
"screenshots"
|
|
137445
|
+
);
|
|
137446
|
+
async function collectScreenshots(since) {
|
|
137447
|
+
try {
|
|
137448
|
+
const entries = await import_promises2.default.readdir(SCREENSHOT_DIR);
|
|
137449
|
+
const pngs = entries.filter((e) => e.endsWith(".png"));
|
|
137450
|
+
const results = [];
|
|
137451
|
+
for (const file3 of pngs) {
|
|
137452
|
+
const filePath = import_path3.default.join(SCREENSHOT_DIR, file3);
|
|
137453
|
+
const stat4 = await import_promises2.default.stat(filePath);
|
|
137454
|
+
if (stat4.mtimeMs < since) {
|
|
137455
|
+
continue;
|
|
137456
|
+
}
|
|
137457
|
+
const buf = await import_promises2.default.readFile(filePath);
|
|
137458
|
+
results.push({ filename: file3, base64: `data:image/png;base64,${buf.toString("base64")}` });
|
|
137459
|
+
}
|
|
137460
|
+
return results;
|
|
137461
|
+
} catch {
|
|
137462
|
+
return [];
|
|
137463
|
+
}
|
|
137464
|
+
}
|
|
137439
137465
|
var createAsyncAgentHandler = (getParams, transformResult) => {
|
|
137440
137466
|
return async (req, res) => {
|
|
137441
137467
|
const request_id = startReq();
|
|
@@ -137456,6 +137482,7 @@ var createAsyncAgentHandler = (getParams, transformResult) => {
|
|
|
137456
137482
|
}
|
|
137457
137483
|
const agentFn = chooseAgent(agent_name || "goose");
|
|
137458
137484
|
const defaultApiKey = agent_name === "codex" ? process.env.OPENAI_API_KEY || "" : process.env.ANTHROPIC_API_KEY || "";
|
|
137485
|
+
const startTime = Date.now();
|
|
137459
137486
|
agentFn({
|
|
137460
137487
|
prompt: params.prompt,
|
|
137461
137488
|
apiKey: apiKey || defaultApiKey,
|
|
@@ -137466,11 +137493,13 @@ var createAsyncAgentHandler = (getParams, transformResult) => {
|
|
|
137466
137493
|
model,
|
|
137467
137494
|
searchApiKey,
|
|
137468
137495
|
summaryApiKey
|
|
137469
|
-
}).then((result) => {
|
|
137496
|
+
}).then(async (result) => {
|
|
137470
137497
|
const finalResult = transformResult ? transformResult(result) : result;
|
|
137498
|
+
const screenshots = await collectScreenshots(startTime);
|
|
137471
137499
|
finishReq(request_id, {
|
|
137472
137500
|
success: true,
|
|
137473
|
-
result: finalResult
|
|
137501
|
+
result: finalResult,
|
|
137502
|
+
...screenshots.length > 0 && { screenshots }
|
|
137474
137503
|
});
|
|
137475
137504
|
}).catch((error87) => {
|
|
137476
137505
|
error("Agent error:", error87);
|
|
@@ -139748,6 +139777,24 @@ async function startProxyServer() {
|
|
|
139748
139777
|
res.json({ exists: false });
|
|
139749
139778
|
}
|
|
139750
139779
|
});
|
|
139780
|
+
app.get("/agent/session", async (req, res) => {
|
|
139781
|
+
log("===> GET /agent/session");
|
|
139782
|
+
const sessionId = req.query.sessionId || req.query.session_id;
|
|
139783
|
+
if (!sessionId) {
|
|
139784
|
+
res.status(400).json({ error: "Missing required query parameter: sessionId" });
|
|
139785
|
+
return;
|
|
139786
|
+
}
|
|
139787
|
+
try {
|
|
139788
|
+
const messages = exportSession(sessionId, "assistant");
|
|
139789
|
+
res.json({ success: true, messages });
|
|
139790
|
+
} catch (error87) {
|
|
139791
|
+
error("Error exporting session:", error87);
|
|
139792
|
+
res.status(404).json({
|
|
139793
|
+
success: false,
|
|
139794
|
+
error: error87 instanceof Error ? error87.message : "Session not found"
|
|
139795
|
+
});
|
|
139796
|
+
}
|
|
139797
|
+
});
|
|
139751
139798
|
app.post(
|
|
139752
139799
|
"/agent",
|
|
139753
139800
|
createAsyncAgentHandler((req) => ({
|
package/dist/staklink-cli.cjs
CHANGED
|
@@ -10967,17 +10967,21 @@ var glob = Object.assign(glob_, {
|
|
|
10967
10967
|
glob.glob = glob;
|
|
10968
10968
|
|
|
10969
10969
|
// src/proxy/version.ts
|
|
10970
|
-
var VERSION = "0.4.
|
|
10970
|
+
var VERSION = "0.4.2";
|
|
10971
10971
|
|
|
10972
10972
|
// src/deps.ts
|
|
10973
10973
|
var import_child_process = require("child_process");
|
|
10974
10974
|
var import_util2 = require("util");
|
|
10975
|
+
var import_fs3 = require("fs");
|
|
10976
|
+
var import_os = require("os");
|
|
10977
|
+
var import_path2 = require("path");
|
|
10975
10978
|
var execAsync = (0, import_util2.promisify)(import_child_process.exec);
|
|
10976
10979
|
var GOOSE_VERSION = "1.22.0";
|
|
10977
10980
|
async function ensureDepsInstalled() {
|
|
10978
10981
|
await ensureGooseInstalled();
|
|
10979
10982
|
await ensureAgentBrowserInstalled();
|
|
10980
10983
|
await ensureAgentBrowserSkillInstalled();
|
|
10984
|
+
await migrateAgentBrowserSkill();
|
|
10981
10985
|
}
|
|
10982
10986
|
async function ensureGooseInstalled() {
|
|
10983
10987
|
try {
|
|
@@ -11031,17 +11035,29 @@ async function installAgentBrowser() {
|
|
|
11031
11035
|
var AGENT_BROWSER_SKILL_NAME = "agent-browser";
|
|
11032
11036
|
var AGENT_BROWSER_SKILL_REPO = "https://github.com/vercel-labs/agent-browser";
|
|
11033
11037
|
async function ensureAgentBrowserSkillInstalled() {
|
|
11038
|
+
const skillPath = (0, import_path2.join)((0, import_os.homedir)(), ".config", "agents", "skills", AGENT_BROWSER_SKILL_NAME);
|
|
11039
|
+
if ((0, import_fs3.existsSync)(skillPath)) {
|
|
11040
|
+
console.log(`\u2705 Skill "${AGENT_BROWSER_SKILL_NAME}" is already installed`);
|
|
11041
|
+
return;
|
|
11042
|
+
}
|
|
11043
|
+
console.log(`\u{1F4E6} Installing ${AGENT_BROWSER_SKILL_NAME} skill...`);
|
|
11044
|
+
await installAgentBrowserSkill();
|
|
11045
|
+
}
|
|
11046
|
+
async function migrateAgentBrowserSkill() {
|
|
11047
|
+
const home = (0, import_os.homedir)();
|
|
11048
|
+
const oldPath = (0, import_path2.join)(home, ".agents", "skills", "agent-browser");
|
|
11049
|
+
const newDir = (0, import_path2.join)(home, ".config", "agents", "skills");
|
|
11050
|
+
const newPath = (0, import_path2.join)(newDir, "agent-browser");
|
|
11051
|
+
if (!(0, import_fs3.existsSync)(oldPath) || (0, import_fs3.existsSync)(newPath)) {
|
|
11052
|
+
return;
|
|
11053
|
+
}
|
|
11034
11054
|
try {
|
|
11035
|
-
|
|
11036
|
-
|
|
11037
|
-
|
|
11038
|
-
|
|
11039
|
-
|
|
11040
|
-
console.
|
|
11041
|
-
await installAgentBrowserSkill();
|
|
11042
|
-
} catch {
|
|
11043
|
-
console.log(`\u{1F4E6} Installing ${AGENT_BROWSER_SKILL_NAME} skill...`);
|
|
11044
|
-
await installAgentBrowserSkill();
|
|
11055
|
+
console.log("\u{1F504} Migrating agent-browser skill to new location...");
|
|
11056
|
+
await execAsync(`mkdir -p "${newDir}"`);
|
|
11057
|
+
await execAsync(`mv "${oldPath}" "${newPath}"`);
|
|
11058
|
+
console.log("\u2705 agent-browser skill migrated successfully");
|
|
11059
|
+
} catch (error2) {
|
|
11060
|
+
console.error("\u26A0\uFE0F Failed to migrate agent-browser skill:", error2);
|
|
11045
11061
|
}
|
|
11046
11062
|
}
|
|
11047
11063
|
async function installAgentBrowserSkill() {
|