staklink 0.4.20 → 0.4.22

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.
@@ -60927,7 +60927,7 @@ var SSEManager = class {
60927
60927
  var sseManager = new SSEManager();
60928
60928
 
60929
60929
  // src/proxy/version.ts
60930
- var VERSION = "0.4.20";
60930
+ var VERSION = "0.4.22";
60931
60931
 
60932
60932
  // node_modules/uuid/dist/esm/stringify.js
60933
60933
  var byteToHex = [];
@@ -137626,6 +137626,9 @@ function sanitizeShellArg2(arg) {
137626
137626
  }
137627
137627
 
137628
137628
  // src/agent/goose.ts
137629
+ function isStreamDecodeError(output) {
137630
+ return output.includes("Stream decode error: error decoding response body.") && output.includes("Please retry if you think this is a transient or recoverable error.");
137631
+ }
137629
137632
  var MODELS2 = {
137630
137633
  sonnet: GooseModels["claude-sonnet-4-6"],
137631
137634
  opus: GooseModels["claude-opus-4-6"],
@@ -137645,6 +137648,27 @@ function goose_env(apiKey, model = "sonnet") {
137645
137648
  PATH: `${path7.join(os.homedir(), ".local", "bin")}:${process.env.PATH}`
137646
137649
  };
137647
137650
  }
137651
+ async function extractSessionUsage(session) {
137652
+ try {
137653
+ const safeName = session.replaceAll(" ", "_");
137654
+ const res = await executeCommand(
137655
+ `goose session export --name ${safeName} --format json`,
137656
+ process.cwd(),
137657
+ {}
137658
+ );
137659
+ const data = JSON.parse(res.stdout);
137660
+ if (typeof data.input_tokens === "number" && typeof data.output_tokens === "number") {
137661
+ return {
137662
+ inputTokens: data.input_tokens,
137663
+ outputTokens: data.output_tokens,
137664
+ totalTokens: data.total_tokens ?? data.input_tokens + data.output_tokens
137665
+ };
137666
+ }
137667
+ return void 0;
137668
+ } catch {
137669
+ return void 0;
137670
+ }
137671
+ }
137648
137672
  async function runAgent({
137649
137673
  prompt,
137650
137674
  apiKey,
@@ -137679,14 +137703,38 @@ ${prompt}` : prompt;
137679
137703
  } catch {
137680
137704
  }
137681
137705
  }
137682
- const res = await executeCommand(cmd, cwd, env2, (l) => console.log(l));
137706
+ let res = await executeCommand(cmd, cwd, env2, (l) => console.log(l));
137707
+ if (session && isStreamDecodeError(res.stdout)) {
137708
+ const maxRetries = 2;
137709
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
137710
+ console.log(`Stream decode error detected, retrying (${attempt}/${maxRetries})...`);
137711
+ await new Promise((r) => setTimeout(r, 2e3 * attempt));
137712
+ const retryCmd = `goose run --with-builtin developer -t "continue" --system "${system}" --name ${session} --resume`;
137713
+ res = await executeCommand(retryCmd, cwd, env2, (l) => console.log(l));
137714
+ if (!isStreamDecodeError(res.stdout)) break;
137715
+ }
137716
+ }
137683
137717
  const output = res.stdout;
137718
+ const resolvedModel = getGooseModel(model || "sonnet");
137719
+ const provider = resolvedModel.includes("/") ? resolvedModel.split("/")[0] : "unknown";
137720
+ const usage = session ? await extractSessionUsage(session) : void 0;
137684
137721
  if (summarize && session) {
137685
137722
  const sessionData = exportSession(session, "assistant");
137686
137723
  const summary = await summarizeSession(sessionData, summaryApiKey || apiKey);
137687
- return { output, summary };
137724
+ return {
137725
+ output,
137726
+ summary,
137727
+ model: resolvedModel,
137728
+ provider,
137729
+ ...usage && { usage }
137730
+ };
137688
137731
  }
137689
- return output;
137732
+ return {
137733
+ output,
137734
+ model: resolvedModel,
137735
+ provider,
137736
+ ...usage && { usage }
137737
+ };
137690
137738
  }
137691
137739
  function createGooseConfig(exaApiKey, mcpServers) {
137692
137740
  const configDir = path7.join(os.homedir(), ".config", "goose");
@@ -137804,7 +137852,18 @@ async function runAgent2({
137804
137852
  cwd,
137805
137853
  executablePath: findClaudePath()
137806
137854
  });
137807
- return res.text;
137855
+ return {
137856
+ output: res.text,
137857
+ model: "claude_code",
137858
+ provider: "anthropic",
137859
+ ...res.usage && {
137860
+ usage: {
137861
+ inputTokens: res.usage.inputTokens,
137862
+ outputTokens: res.usage.outputTokens,
137863
+ totalTokens: res.usage.totalTokens
137864
+ }
137865
+ }
137866
+ };
137808
137867
  } catch (error88) {
137809
137868
  console.log("Model error:", error88);
137810
137869
  throw error88;
@@ -139311,15 +139370,20 @@ async function runAgent3({
139311
139370
  };
139312
139371
  }
139313
139372
  const model = codexCli(MODEL, settings);
139314
- const { text: text3 } = await generateText({
139373
+ const { text: text3, usage } = await generateText({
139315
139374
  model,
139316
139375
  prompt,
139317
139376
  system
139318
139377
  });
139378
+ const agentUsage = {
139379
+ inputTokens: usage.inputTokens ?? 0,
139380
+ outputTokens: usage.outputTokens ?? 0,
139381
+ totalTokens: usage.totalTokens ?? 0
139382
+ };
139319
139383
  if (summarize) {
139320
- return text3;
139384
+ return { output: text3, model: MODEL, provider: "openai", usage: agentUsage };
139321
139385
  }
139322
- return text3;
139386
+ return { output: text3, model: MODEL, provider: "openai", usage: agentUsage };
139323
139387
  }
139324
139388
 
139325
139389
  // src/agent/repair.ts
@@ -139985,7 +140049,11 @@ var createAsyncAgentHandler = (getParams, transformResult) => {
139985
140049
  const recordings = await collectRecordings(startTime);
139986
140050
  finishReq(request_id, {
139987
140051
  success: true,
139988
- result: finalResult,
140052
+ result: finalResult.output ?? finalResult,
140053
+ ...finalResult.summary && { summary: finalResult.summary },
140054
+ ...finalResult.usage && { usage: finalResult.usage },
140055
+ ...finalResult.model && { model: finalResult.model },
140056
+ ...finalResult.provider && { provider: finalResult.provider },
139989
140057
  ...screenshots.length > 0 && { screenshots },
139990
140058
  ...recordings.length > 0 && { recordings }
139991
140059
  });
@@ -142691,7 +142759,7 @@ async function startProxyServer() {
142691
142759
  system: repair_exports.SYSTEM
142692
142760
  };
142693
142761
  },
142694
- (result) => repair_exports.parseXML(result)
142762
+ (result) => repair_exports.parseXML(result.output)
142695
142763
  )
142696
142764
  );
142697
142765
  app.post(
@@ -11004,7 +11004,7 @@ var glob = Object.assign(glob_, {
11004
11004
  glob.glob = glob;
11005
11005
 
11006
11006
  // src/proxy/version.ts
11007
- var VERSION = "0.4.20";
11007
+ var VERSION = "0.4.22";
11008
11008
 
11009
11009
  // src/deps.ts
11010
11010
  var import_child_process = require("child_process");
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.4.20",
5
+ "version": "0.4.22",
6
6
  "type": "module",
7
7
  "publisher": "stakwork",
8
8
  "engines": {