opencode-supertask 0.1.33 → 0.1.35

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.
@@ -28548,6 +28548,25 @@ function currentGatewayRuntime(gatewayEntry = resolveGatewayEntry()) {
28548
28548
  env: { ...process.env }
28549
28549
  };
28550
28550
  }
28551
+ function refreshGatewayExecutionEnvironment(runtime, gatewayEntry) {
28552
+ const env = { ...process.env };
28553
+ for (const key of /* @__PURE__ */ new Set([
28554
+ ...Object.keys(runtime.env).filter((name) => name.startsWith("SUPERTASK_")),
28555
+ ...Object.keys(env).filter((name) => name.startsWith("SUPERTASK_")),
28556
+ "HOME",
28557
+ "PATH",
28558
+ "PM2_HOME"
28559
+ ])) {
28560
+ const value = runtime.env[key];
28561
+ if (value === void 0) delete env[key];
28562
+ else env[key] = value;
28563
+ }
28564
+ return {
28565
+ ...runtime,
28566
+ gatewayEntry: resolve(gatewayEntry),
28567
+ env
28568
+ };
28569
+ }
28551
28570
  function databasePath(env = process.env, cwd = process.cwd()) {
28552
28571
  return env.SUPERTASK_DB_PATH ? runtimePath(env.SUPERTASK_DB_PATH, cwd) : join4(runtimeHome(env), ".local/share/opencode/tasks.db");
28553
28572
  }
@@ -28830,7 +28849,10 @@ function upgradeUnlocked(target) {
28830
28849
  const oldRuntime = gatewayRuntimeFromProcess(existing) ?? (process.env.SUPERTASK_GATEWAY_ENTRY ? currentGatewayRuntime(resolveGatewayEntry()) : null);
28831
28850
  const before = getRunningVersion(oldRuntime?.env ?? process.env, oldRuntime?.cwd);
28832
28851
  const currentVersion = target?.version ?? getPackageVersion();
28833
- const targetRuntime = oldRuntime ? { ...oldRuntime, gatewayEntry: resolve(target?.gatewayEntry ?? oldRuntime.gatewayEntry) } : currentGatewayRuntime(target?.gatewayEntry ?? resolveGatewayEntry());
28852
+ const targetRuntime = oldRuntime ? refreshGatewayExecutionEnvironment(
28853
+ oldRuntime,
28854
+ target?.gatewayEntry ?? oldRuntime.gatewayEntry
28855
+ ) : currentGatewayRuntime(target?.gatewayEntry ?? resolveGatewayEntry());
28834
28856
  assertRuntimeCanControlPm2(oldRuntime, existing);
28835
28857
  gatewayKillTimeoutMs(targetRuntime);
28836
28858
  gatewayTerminationCommandTimeoutMs(targetRuntime);
@@ -28920,9 +28942,9 @@ function ensureGatewayUnlocked() {
28920
28942
 
28921
28943
  // src/daemon/update.ts
28922
28944
  import { spawnSync as spawnSync2 } from "child_process";
28923
- import { existsSync as existsSync5, readFileSync as readFileSync4, readdirSync } from "fs";
28945
+ import { existsSync as existsSync5, readFileSync as readFileSync4, readdirSync, realpathSync } from "fs";
28924
28946
  import { homedir as homedir4 } from "os";
28925
- import { join as join5 } from "path";
28947
+ import { dirname as dirname5, join as join5, resolve as resolve2 } from "path";
28926
28948
  var PACKAGE_NAME = "opencode-supertask";
28927
28949
  function pluginAt(packageDir) {
28928
28950
  const packageJson = join5(packageDir, "package.json");
@@ -28950,6 +28972,131 @@ function opencodeBin() {
28950
28972
  function npmBin() {
28951
28973
  return process.env.SUPERTASK_NPM_BIN ?? "npm";
28952
28974
  }
28975
+ function bunBin() {
28976
+ return process.env.SUPERTASK_BUN_BIN ?? "bun";
28977
+ }
28978
+ function resolveGlobalCliExecutable() {
28979
+ const override = process.env.SUPERTASK_CLI_BIN;
28980
+ if (override) return existsSync5(override) ? resolve2(override) : null;
28981
+ const result = spawnSync2(process.platform === "win32" ? "where" : "which", ["supertask"], {
28982
+ encoding: "utf8",
28983
+ env: process.env,
28984
+ timeout: 1e4
28985
+ });
28986
+ if (result.status !== 0) return null;
28987
+ const executable = `${result.stdout ?? ""}`.trim().split(/\r?\n/)[0];
28988
+ return executable && existsSync5(executable) ? resolve2(executable) : null;
28989
+ }
28990
+ function cliPackageDir(executable) {
28991
+ try {
28992
+ let directory = dirname5(realpathSync(executable));
28993
+ for (let depth = 0; depth < 6; depth += 1) {
28994
+ const packagePath = join5(directory, "package.json");
28995
+ if (existsSync5(packagePath)) {
28996
+ const pkg = JSON.parse(readFileSync4(packagePath, "utf8"));
28997
+ if (pkg.name === PACKAGE_NAME) return directory;
28998
+ }
28999
+ const parent = dirname5(directory);
29000
+ if (parent === directory) break;
29001
+ directory = parent;
29002
+ }
29003
+ } catch {
29004
+ }
29005
+ return null;
29006
+ }
29007
+ function packageVersion(packageDir) {
29008
+ try {
29009
+ const pkg = JSON.parse(readFileSync4(join5(packageDir, "package.json"), "utf8"));
29010
+ return pkg.name === PACKAGE_NAME && typeof pkg.version === "string" ? pkg.version : null;
29011
+ } catch {
29012
+ return null;
29013
+ }
29014
+ }
29015
+ function npmGlobalRoot() {
29016
+ const result = spawnSync2(npmBin(), ["root", "-g"], {
29017
+ encoding: "utf8",
29018
+ env: process.env,
29019
+ timeout: 3e4
29020
+ });
29021
+ if (result.status !== 0) return null;
29022
+ const root = `${result.stdout ?? ""}`.trim();
29023
+ if (!root) return null;
29024
+ try {
29025
+ return realpathSync(root);
29026
+ } catch {
29027
+ return resolve2(root);
29028
+ }
29029
+ }
29030
+ function globalCliPackageManager(packageDir) {
29031
+ const normalized = packageDir.replaceAll("\\", "/");
29032
+ if (normalized.includes("/install/global/node_modules/")) return "bun";
29033
+ const npmRoot = npmGlobalRoot();
29034
+ if (npmRoot && resolve2(packageDir) === join5(npmRoot, PACKAGE_NAME)) return "npm";
29035
+ return null;
29036
+ }
29037
+ function getGlobalCliDiagnostic() {
29038
+ const executable = resolveGlobalCliExecutable();
29039
+ if (!executable) {
29040
+ return {
29041
+ installed: false,
29042
+ executable: null,
29043
+ packageDir: null,
29044
+ version: null,
29045
+ packageManager: null
29046
+ };
29047
+ }
29048
+ const packageDir = cliPackageDir(executable);
29049
+ if (!packageDir) {
29050
+ return {
29051
+ installed: true,
29052
+ executable,
29053
+ packageDir: null,
29054
+ version: null,
29055
+ packageManager: null
29056
+ };
29057
+ }
29058
+ return {
29059
+ installed: true,
29060
+ executable,
29061
+ packageDir,
29062
+ version: packageVersion(packageDir),
29063
+ packageManager: globalCliPackageManager(packageDir)
29064
+ };
29065
+ }
29066
+ function updateGlobalCli(version3) {
29067
+ if (!isSemanticVersion(version3)) {
29068
+ throw new Error(`[supertask] \u5168\u5C40 CLI \u76EE\u6807\u7248\u672C\u65E0\u6548: ${version3}`);
29069
+ }
29070
+ const before = getGlobalCliDiagnostic();
29071
+ if (!before.installed) return { ...before, action: "not-installed" };
29072
+ if (before.version === version3) return { ...before, action: "already-current" };
29073
+ if (!before.packageManager) {
29074
+ throw new Error(
29075
+ `[supertask] \u65E0\u6CD5\u786E\u8BA4\u5168\u5C40 CLI \u7684\u5305\u7BA1\u7406\u5668\uFF08\u5F53\u524D ${before.version ?? "unknown"}\uFF0C\u76EE\u6807 ${version3}\uFF09\uFF1B\u8BF7\u6267\u884C npm install -g ${PACKAGE_NAME}@${version3} \u6216 bun add -g ${PACKAGE_NAME}@${version3}`
29076
+ );
29077
+ }
29078
+ const command = before.packageManager === "npm" ? npmBin() : bunBin();
29079
+ const args = before.packageManager === "npm" ? ["install", "-g", `${PACKAGE_NAME}@${version3}`] : ["add", "-g", `${PACKAGE_NAME}@${version3}`];
29080
+ const result = spawnSync2(command, args, {
29081
+ encoding: "utf8",
29082
+ env: process.env,
29083
+ timeout: 12e4
29084
+ });
29085
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`.trim();
29086
+ if (result.error) {
29087
+ throw new Error(`[supertask] \u5168\u5C40 CLI \u66F4\u65B0\u5931\u8D25: ${result.error.message}`);
29088
+ }
29089
+ if (result.status !== 0) {
29090
+ throw new Error(`[supertask] \u5168\u5C40 CLI \u66F4\u65B0\u5931\u8D25: ${output || `\u9000\u51FA\u7801 ${result.status}`}`);
29091
+ }
29092
+ const after = getGlobalCliDiagnostic();
29093
+ if (after.version !== version3) {
29094
+ throw new Error(
29095
+ `[supertask] \u5168\u5C40 CLI \u66F4\u65B0\u540E\u7248\u672C\u4E0D\u5339\u914D\uFF1A\u671F\u671B ${version3}\uFF0C\u5B9E\u9645 ${after.version ?? "unknown"}`
29096
+ );
29097
+ }
29098
+ return { ...after, action: "updated" };
29099
+ }
28953
29100
  function latestVersion() {
28954
29101
  const result = spawnSync2(npmBin(), [
28955
29102
  "view",
@@ -29446,12 +29593,27 @@ var SuperTaskPlugin = async () => {
29446
29593
  }
29447
29594
  throw upgradeError;
29448
29595
  }
29596
+ let cliUpdate;
29597
+ try {
29598
+ cliUpdate = updateGlobalCli(result.after);
29599
+ } catch (cliError) {
29600
+ return JSON.stringify({
29601
+ success: false,
29602
+ partial: true,
29603
+ before: result.before,
29604
+ after: result.after,
29605
+ restarted: result.restarted,
29606
+ error: `\u63D2\u4EF6\u548C Gateway \u5DF2\u5347\u7EA7\uFF0C\u4F46\u5168\u5C40 CLI \u66F4\u65B0\u5931\u8D25\uFF1A${cliError instanceof Error ? cliError.message : String(cliError)}`,
29607
+ hint: `\u8BF7\u6267\u884C npm install -g opencode-supertask@${result.after} \u6216 bun add -g opencode-supertask@${result.after}\uFF0C\u7136\u540E\u8FD0\u884C supertask doctor\u3002`
29608
+ });
29609
+ }
29449
29610
  return JSON.stringify({
29450
29611
  success: true,
29451
29612
  before: result.before,
29452
29613
  after: result.after,
29453
29614
  restarted: result.restarted,
29454
- message: `SuperTask \u5DF2\u4ECE ${result.before ?? "unknown"} \u5347\u7EA7\u5230 ${result.after}\uFF0CGateway \u5DF2\u91CD\u542F\u3002\u8BF7\u91CD\u542F opencode \u4EE5\u52A0\u8F7D\u65B0\u7248\u63D2\u4EF6\uFF1B\u82E5\u4F7F\u7528\u5168\u5C40 CLI\uFF0C\u8BF7\u7528\u539F\u5305\u7BA1\u7406\u5668\u5C06\u5B83\u66F4\u65B0\u5230 opencode-supertask@${result.after}\uFF08npm install -g \u6216 bun add -g\uFF09\u3002`
29615
+ cli: cliUpdate,
29616
+ message: `SuperTask \u5DF2\u4ECE ${result.before ?? "unknown"} \u5347\u7EA7\u5230 ${result.after}\uFF0CGateway \u5DF2\u91CD\u542F\uFF0C\u5168\u5C40 CLI \u5DF2\u540C\u6B65\u6216\u672C\u673A\u672A\u5B89\u88C5 CLI\u3002\u8BF7\u91CD\u542F opencode \u4EE5\u52A0\u8F7D\u65B0\u7248\u63D2\u4EF6\u3002`
29455
29617
  });
29456
29618
  } catch (error45) {
29457
29619
  return JSON.stringify({