@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.
- package/dist/cli.cjs +45 -10
- 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
|
-
|
|
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))
|
|
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.
|
|
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: () =>
|
|
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(
|
|
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: {
|