@clawos-dev/clawd 0.2.533 → 0.2.535

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.
Files changed (2) hide show
  1. package/dist/cli.cjs +45 -10
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -54624,6 +54624,32 @@ function upsertEnvFileVar(file, key, value) {
54624
54624
  import_node_fs28.default.writeFileSync(file, `${out.join("\n")}
54625
54625
  `, { encoding: "utf8", mode: 384 });
54626
54626
  }
54627
+ function readEnvFileVar(file, key) {
54628
+ try {
54629
+ return parseEnvFile(import_node_fs28.default.readFileSync(file, "utf8"))[key];
54630
+ } catch {
54631
+ return void 0;
54632
+ }
54633
+ }
54634
+ function removeEnvFileVar(file, key) {
54635
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) throw new Error(`invalid env name: ${key}`);
54636
+ let lines;
54637
+ try {
54638
+ lines = import_node_fs28.default.readFileSync(file, "utf8").split("\n");
54639
+ } catch {
54640
+ return;
54641
+ }
54642
+ if (lines[lines.length - 1] === "") lines.pop();
54643
+ const re2 = new RegExp(`^\\s*(?:export\\s+)?${key}=`);
54644
+ const out = lines.filter((l2) => !re2.test(l2));
54645
+ if (out.length === lines.length) return;
54646
+ if (out.every((l2) => l2.trim() === "" || l2.trim().startsWith("#"))) {
54647
+ import_node_fs28.default.rmSync(file, { force: true });
54648
+ return;
54649
+ }
54650
+ import_node_fs28.default.writeFileSync(file, `${out.join("\n")}
54651
+ `, { encoding: "utf8", mode: 384 });
54652
+ }
54627
54653
  function readSecretTable(args) {
54628
54654
  return {
54629
54655
  ...args.bundleRoot ? readDir(args.bundleRoot, args.logger) : {},
@@ -59010,13 +59036,16 @@ async function storeGitCredential(exec, token) {
59010
59036
  return back?.token === token;
59011
59037
  }
59012
59038
  async function resolveGithubAuth(args) {
59013
- const fromGit = await readGitCredential(args.exec);
59014
- if (fromGit) return { token: fromGit.token, source: "git" };
59015
59039
  const fromFile = args.fileToken();
59016
- return fromFile ? { token: fromFile, source: "file" } : void 0;
59040
+ if (fromFile) return { token: fromFile, source: "file" };
59041
+ const fromGit = await readGitCredential(args.exec);
59042
+ return fromGit ? { token: fromGit.token, source: "git" } : void 0;
59017
59043
  }
59018
59044
  async function storeGithubAuth(args) {
59019
- if (await storeGitCredential(args.exec, args.token)) return { token: args.token, source: "git" };
59045
+ if (await storeGitCredential(args.exec, args.token)) {
59046
+ args.clearFileToken();
59047
+ return { token: args.token, source: "git" };
59048
+ }
59020
59049
  args.writeFileToken(args.token);
59021
59050
  return { token: args.token, source: "file" };
59022
59051
  }
@@ -60004,6 +60033,10 @@ function createGithubIdentity(deps) {
60004
60033
  * 本机还没有身份时先问中心有没有本人现成的 token(换台机器授权过 / 上次跳回来了但 daemon 没轮到):
60005
60034
  * 有且 GitHub 认就直接领、不跳 GitHub。本机已有身份(能用的 = 用户要换一个;失效的 = 要重新授权,而中心那份就是这把死的)
60006
60035
  * 一律跳 GitHub 重来。进 pending 之后每次 status() 顺手问一次中心领没领到。
60036
+ *
60037
+ * 跳 GitHub 的那一次**直接回 pending 带链接**,不经 status():页面只在拿到 pending 时才开授权页
60038
+ * (ui hooks/useGithubAuth.ts),而 status() 在本机身份还能用时会照常显示它——「换一个」走 status() 就把链接吞了,
60039
+ * 用户点了没跳 GitHub、卡片直接显示已关联,中心那把死 token 永远换不掉(2026-09-17 实测)。之后的轮询仍走 status()。
60007
60040
  */
60008
60041
  async oauthStart(returnTo) {
60009
60042
  const local = await refresh();
@@ -60014,7 +60047,7 @@ function createGithubIdentity(deps) {
60014
60047
  }
60015
60048
  const { authUrl } = await deps.oauth.start(returnTo);
60016
60049
  pendingOauth = { authUrl, expiresAt: deps.now() + OAUTH_PENDING_MS };
60017
- return status();
60050
+ return { status: "pending", authUrl };
60018
60051
  },
60019
60052
  onChange(cb) {
60020
60053
  listeners.add(cb);
@@ -70414,7 +70447,7 @@ function computeMethodAccess(args) {
70414
70447
  }
70415
70448
 
70416
70449
  // src/version.ts
70417
- var version = "0.2.533".length > 0 ? "0.2.533" : "dev";
70450
+ var version = "0.2.535".length > 0 ? "0.2.535" : "dev";
70418
70451
 
70419
70452
  // src/cli-probe/probe.ts
70420
70453
  var fs77 = __toESM(require("fs"), 1);
@@ -73210,15 +73243,17 @@ async function startDaemon(config) {
73210
73243
  const secretsBundleRoot = findSecretsBundleRoot(logger);
73211
73244
  const localSecretsDir = import_node_path79.default.join(config.dataDir, LOCAL_SECRETS_DIRNAME);
73212
73245
  const readSecrets = () => readSecretTable({ bundleRoot: secretsBundleRoot, overrideDir: localSecretsDir, logger });
73246
+ const githubTokenFile = import_node_path79.default.join(localSecretsDir, GITHUB_TOKEN_FILE);
73213
73247
  const githubIdentity = createGithubIdentity({
73214
- resolve: () => resolveGithubAuth({ exec: runCommand, fileToken: () => readSecrets()[GITHUB_TOKEN_VAR] }),
73248
+ resolve: () => resolveGithubAuth({ exec: runCommand, fileToken: () => readEnvFileVar(githubTokenFile, GITHUB_TOKEN_VAR) }),
73215
73249
  store: (token) => storeGithubAuth({
73216
73250
  exec: runCommand,
73217
73251
  token,
73218
73252
  writeFileToken: (t2) => {
73219
- upsertEnvFileVar(import_node_path79.default.join(localSecretsDir, GITHUB_TOKEN_FILE), GITHUB_TOKEN_VAR, t2);
73220
- logger.warn("github.identity.token-in-file", { reason: "git \u6CA1\u914D credential helper\uFF0Ctoken \u843D\u672C\u673A\u51ED\u636E\u8868", file: GITHUB_TOKEN_FILE });
73221
- }
73253
+ upsertEnvFileVar(githubTokenFile, GITHUB_TOKEN_VAR, t2);
73254
+ logger.warn("github.identity.token-in-file", { reason: "git \u4E0D\u6536\uFF08\u6CA1\u914D credential helper\uFF0C\u6216\u53EA\u6709 gh \u90A3\u4E2A\u53EA\u8BFB\u7684\uFF09\uFF0Ctoken \u843D\u672C\u673A\u51ED\u636E\u8868", file: GITHUB_TOKEN_FILE });
73255
+ },
73256
+ clearFileToken: () => removeEnvFileVar(githubTokenFile, GITHUB_TOKEN_VAR)
73222
73257
  }),
73223
73258
  api: (token) => createGithubApi({ token }),
73224
73259
  oauth: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawos-dev/clawd",
3
- "version": "0.2.533",
3
+ "version": "0.2.535",
4
4
  "description": "Standalone clawd daemon — Claude Code (and future Codex) session server over WebSocket",
5
5
  "type": "module",
6
6
  "license": "MIT",