staklink 0.3.61 → 0.3.63

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.
@@ -61229,7 +61229,7 @@ var SSEManager = class {
61229
61229
  var sseManager = new SSEManager();
61230
61230
 
61231
61231
  // src/proxy/version.ts
61232
- var VERSION = "0.3.61";
61232
+ var VERSION = "0.3.63";
61233
61233
 
61234
61234
  // node_modules/uuid/dist/esm/stringify.js
61235
61235
  var byteToHex = [];
@@ -121508,7 +121508,7 @@ async function runAgent({ prompt, apiKey, cwd, system_prompt, session, resume, s
121508
121508
  const res = await executeCommand(cmd, cwd, env, (l) => console.log(l));
121509
121509
  const output = res.stdout;
121510
121510
  if (summarize && session) {
121511
- const sessionData = await exportSession(session, "assistant");
121511
+ const sessionData = exportSession(session, "assistant");
121512
121512
  const summary = await summarizeSession(JSON.stringify(sessionData), apiKey);
121513
121513
  return { output, summary };
121514
121514
  }
@@ -132792,7 +132792,7 @@ async function streamGooseToSSE(sessionId, prompt, apiKey, res, options) {
132792
132792
  try {
132793
132793
  const result = streamText2({
132794
132794
  model: goose("anthropic/claude-sonnet-4-5", {
132795
- sessionName: options?.session || sessionId,
132795
+ sessionName: sessionId,
132796
132796
  apiKey,
132797
132797
  resume: options?.resume
132798
132798
  }),
@@ -132886,16 +132886,32 @@ var jwt3 = __toESM(require_jsonwebtoken(), 1);
132886
132886
  var crypto = __toESM(require("crypto"), 1);
132887
132887
  var JWT_SECRET = process.env.JWT_SECRET || crypto.randomBytes(32).toString("hex");
132888
132888
  var TOKEN_EXPIRY = "10m";
132889
+ var SESSION_INACTIVITY_TTL = 24 * 60 * 60 * 1e3;
132889
132890
  var SESSIONS = /* @__PURE__ */ new Map();
132890
- function createSession(sessionId, webhookUrl) {
132891
- const token = jwt3.sign({ sessionId }, JWT_SECRET, { expiresIn: TOKEN_EXPIRY });
132891
+ function issueToken(sessionId) {
132892
+ return jwt3.sign({ sessionId }, JWT_SECRET, { expiresIn: TOKEN_EXPIRY });
132893
+ }
132894
+ function createSession(sessionId, webhookUrl, apiKey) {
132895
+ const now3 = Date.now();
132896
+ const existing = SESSIONS.get(sessionId);
132897
+ if (existing) {
132898
+ existing.lastActivity = now3;
132899
+ if (webhookUrl !== void 0) {
132900
+ existing.webhookUrl = webhookUrl;
132901
+ }
132902
+ if (apiKey !== void 0) {
132903
+ existing.apiKey = apiKey;
132904
+ }
132905
+ return { token: issueToken(sessionId), created: false };
132906
+ }
132892
132907
  SESSIONS.set(sessionId, {
132893
132908
  sessionId,
132894
- token,
132895
- createdAt: Date.now(),
132896
- webhookUrl
132909
+ createdAt: now3,
132910
+ lastActivity: now3,
132911
+ webhookUrl,
132912
+ apiKey
132897
132913
  });
132898
- return { token };
132914
+ return { token: issueToken(sessionId), created: true };
132899
132915
  }
132900
132916
  function validateAndGetSession(sessionId, token) {
132901
132917
  try {
@@ -132904,6 +132920,9 @@ function validateAndGetSession(sessionId, token) {
132904
132920
  return null;
132905
132921
  }
132906
132922
  const session = SESSIONS.get(sessionId);
132923
+ if (session) {
132924
+ session.lastActivity = Date.now();
132925
+ }
132907
132926
  return session || null;
132908
132927
  } catch (error87) {
132909
132928
  return null;
@@ -132911,9 +132930,8 @@ function validateAndGetSession(sessionId, token) {
132911
132930
  }
132912
132931
  function cleanup() {
132913
132932
  const now3 = Date.now();
132914
- const TEN_MIN = 10 * 60 * 1e3;
132915
132933
  for (const [sessionId, session] of SESSIONS.entries()) {
132916
- if (now3 - session.createdAt > TEN_MIN) {
132934
+ if (now3 - session.lastActivity > SESSION_INACTIVITY_TTL) {
132917
132935
  SESSIONS.delete(sessionId);
132918
132936
  }
132919
132937
  }
@@ -134795,10 +134813,10 @@ ${diff.trim()}`);
134795
134813
  res.status(401).json({ error: "Invalid or expired token" });
134796
134814
  return;
134797
134815
  }
134798
- const { prompt, apiKey, system, session: sessionName, resume } = req.body;
134816
+ const { prompt, system, resume } = req.body;
134799
134817
  if (!prompt) {
134800
134818
  res.status(400).json({
134801
- error: "Missing required fields: prompt, apiKey"
134819
+ error: "Missing required field: prompt"
134802
134820
  });
134803
134821
  return;
134804
134822
  }
@@ -134810,24 +134828,25 @@ ${diff.trim()}`);
134810
134828
  await streamGooseToSSE(
134811
134829
  sessionId,
134812
134830
  prompt,
134813
- apiKey || process.env.ANTHROPIC_API_KEY || "",
134831
+ session.apiKey || process.env.ANTHROPIC_API_KEY || "",
134814
134832
  res,
134815
- { system, session: sessionName, resume, webhookUrl: session.webhookUrl }
134833
+ { system, resume, webhookUrl: session.webhookUrl }
134816
134834
  );
134817
134835
  });
134818
134836
  app.use(requireAuth);
134819
134837
  app.post("/session", async (req, res) => {
134820
- const { sessionId, webhookUrl } = req.body;
134838
+ const { sessionId, webhookUrl, apiKey } = req.body;
134821
134839
  if (!sessionId) {
134822
134840
  res.status(400).json({
134823
134841
  error: "Missing required fields: sessionId, webhookUrl"
134824
134842
  });
134825
134843
  return;
134826
134844
  }
134827
- const { token } = createSession(sessionId, webhookUrl);
134845
+ const { token, created } = createSession(sessionId, webhookUrl, apiKey);
134828
134846
  res.json({
134829
134847
  sessionId,
134830
134848
  token,
134849
+ created,
134831
134850
  streamUrl: `${req.protocol}://${req.get("host")}/stream/${sessionId}`
134832
134851
  });
134833
134852
  });
@@ -10967,7 +10967,7 @@ var glob = Object.assign(glob_, {
10967
10967
  glob.glob = glob;
10968
10968
 
10969
10969
  // src/proxy/version.ts
10970
- var VERSION = "0.3.61";
10970
+ var VERSION = "0.3.63";
10971
10971
 
10972
10972
  // src/cli.ts
10973
10973
  var STAKLINK_PROXY = "staklink-proxy";
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "staklink",
3
3
  "displayName": "staklink",
4
4
  "description": "staklink process manager",
5
- "version": "0.3.61",
5
+ "version": "0.3.63",
6
6
  "type": "module",
7
7
  "publisher": "stakwork",
8
8
  "engines": {