claude-codex-wechat 0.1.41 → 0.1.44
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/server/cli.js +79 -11
- package/package.json +1 -1
package/dist/server/cli.js
CHANGED
|
@@ -2806,7 +2806,7 @@ function isTemporaryShim(candidate) {
|
|
|
2806
2806
|
const tempDir = tmpdir();
|
|
2807
2807
|
return candidate.startsWith(tempDir);
|
|
2808
2808
|
}
|
|
2809
|
-
async function findExecutable(command) {
|
|
2809
|
+
async function findExecutable(command, pathEnv) {
|
|
2810
2810
|
const extensions = executableExtensions();
|
|
2811
2811
|
if (command.includes("/") || command.includes("\\")) {
|
|
2812
2812
|
for (const ext of extensions) {
|
|
@@ -2814,7 +2814,7 @@ async function findExecutable(command) {
|
|
|
2814
2814
|
}
|
|
2815
2815
|
return void 0;
|
|
2816
2816
|
}
|
|
2817
|
-
const dirs = (
|
|
2817
|
+
const dirs = (pathEnv ?? "").split(delimiter).filter(Boolean);
|
|
2818
2818
|
let fallback;
|
|
2819
2819
|
for (const dir of dirs) {
|
|
2820
2820
|
for (const ext of extensions) {
|
|
@@ -2856,6 +2856,71 @@ function statePath(filename) {
|
|
|
2856
2856
|
return join9(tmpdir(), filename);
|
|
2857
2857
|
}
|
|
2858
2858
|
|
|
2859
|
+
// src/shared/loginShellEnv.ts
|
|
2860
|
+
import { spawnSync } from "node:child_process";
|
|
2861
|
+
import { delimiter as delimiter2 } from "node:path";
|
|
2862
|
+
var DELIMITER = "__CCW_LOGIN_ENV_DELIM_5f3a2b7c__";
|
|
2863
|
+
function parseEnvBlock(block) {
|
|
2864
|
+
const env = {};
|
|
2865
|
+
let currentKey = null;
|
|
2866
|
+
const normalized = block.replace(/\n$/, "");
|
|
2867
|
+
for (const line of normalized.split("\n")) {
|
|
2868
|
+
const match = /^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/.exec(line);
|
|
2869
|
+
if (match) {
|
|
2870
|
+
currentKey = match[1];
|
|
2871
|
+
env[currentKey] = match[2];
|
|
2872
|
+
} else if (currentKey) {
|
|
2873
|
+
env[currentKey] = `${env[currentKey]}
|
|
2874
|
+
${line}`;
|
|
2875
|
+
}
|
|
2876
|
+
}
|
|
2877
|
+
return env;
|
|
2878
|
+
}
|
|
2879
|
+
function captureLoginShellEnv(deps = {}) {
|
|
2880
|
+
const platform = deps.platform ?? process.platform;
|
|
2881
|
+
if (platform === "win32") return null;
|
|
2882
|
+
const run = deps.run ?? spawnSync;
|
|
2883
|
+
const shell = deps.shell ?? process.env.SHELL ?? "/bin/zsh";
|
|
2884
|
+
const timeoutMs = deps.timeoutMs ?? 5e3;
|
|
2885
|
+
const command = `printf %s '${DELIMITER}'; env; printf %s '${DELIMITER}'`;
|
|
2886
|
+
try {
|
|
2887
|
+
const result = run(shell, ["-l", "-i", "-c", command], {
|
|
2888
|
+
timeout: timeoutMs,
|
|
2889
|
+
encoding: "utf8",
|
|
2890
|
+
maxBuffer: 8 * 1024 * 1024
|
|
2891
|
+
});
|
|
2892
|
+
const stdout = typeof result.stdout === "string" ? result.stdout : "";
|
|
2893
|
+
const start = stdout.indexOf(DELIMITER);
|
|
2894
|
+
const end = stdout.indexOf(DELIMITER, start + DELIMITER.length);
|
|
2895
|
+
if (start === -1 || end === -1 || end <= start) return null;
|
|
2896
|
+
const block = stdout.slice(start + DELIMITER.length, end);
|
|
2897
|
+
const env = parseEnvBlock(block);
|
|
2898
|
+
if (!env.PATH) return null;
|
|
2899
|
+
return env;
|
|
2900
|
+
} catch {
|
|
2901
|
+
return null;
|
|
2902
|
+
}
|
|
2903
|
+
}
|
|
2904
|
+
var cache;
|
|
2905
|
+
function resolveLoginShellEnv() {
|
|
2906
|
+
if (cache !== void 0) return cache;
|
|
2907
|
+
cache = captureLoginShellEnv();
|
|
2908
|
+
if (cache === null && process.platform !== "win32") {
|
|
2909
|
+
console.warn(
|
|
2910
|
+
"[claude-codex-wechat] \u7EC8\u7AEF\u73AF\u5883\u590D\u523B\u5931\u8D25\uFF0C\u5DF2\u9000\u56DE process.env\uFF08PATH/\u51ED\u8BC1\u53EF\u80FD\u4E0E\u7EC8\u7AEF\u4E0D\u4E00\u81F4\uFF09\u3002\u82E5 provider \u62A5\u300C\u627E\u4E0D\u5230\u300D\u6216\u300C\u4EE4\u724C\u5DF2\u8FC7\u671F\u300D\uFF0C\u8BF7\u4ECE\u4EA4\u4E92\u7EC8\u7AEF\u91CD\u542F daemon\u3002"
|
|
2911
|
+
);
|
|
2912
|
+
}
|
|
2913
|
+
return cache;
|
|
2914
|
+
}
|
|
2915
|
+
function resolveTerminalSearchPath() {
|
|
2916
|
+
return mergeSearchPath(resolveLoginShellEnv()?.PATH, process.env.PATH);
|
|
2917
|
+
}
|
|
2918
|
+
function mergeSearchPath(primary, fallback) {
|
|
2919
|
+
if (!primary) return fallback;
|
|
2920
|
+
if (!fallback) return primary;
|
|
2921
|
+
return `${primary}${delimiter2}${fallback}`;
|
|
2922
|
+
}
|
|
2923
|
+
|
|
2859
2924
|
// src/providers/claude-code/assistantContent.ts
|
|
2860
2925
|
function extractAssistantBlocks(message) {
|
|
2861
2926
|
if (!message || typeof message !== "object") return [];
|
|
@@ -2970,12 +3035,12 @@ var BRIDGE_APPEND_SYSTEM_PROMPT = [
|
|
|
2970
3035
|
|
|
2971
3036
|
// src/providers/claude-code/claudeCapabilities.ts
|
|
2972
3037
|
import { spawn as spawn2 } from "node:child_process";
|
|
2973
|
-
var
|
|
3038
|
+
var cache2 = /* @__PURE__ */ new Map();
|
|
2974
3039
|
var probeAppendSystemPromptSupport = (command) => {
|
|
2975
|
-
const cached =
|
|
3040
|
+
const cached = cache2.get(command);
|
|
2976
3041
|
if (cached) return cached;
|
|
2977
3042
|
const result = runHelpProbe(command);
|
|
2978
|
-
|
|
3043
|
+
cache2.set(command, result);
|
|
2979
3044
|
return result;
|
|
2980
3045
|
};
|
|
2981
3046
|
function runHelpProbe(command) {
|
|
@@ -3224,7 +3289,7 @@ function parseJsonLine(line) {
|
|
|
3224
3289
|
function defaultClaudeStreamSpawner(call, opts = {}) {
|
|
3225
3290
|
const stderrCapBytes = opts.stderrCapBytes ?? 64 * 1024;
|
|
3226
3291
|
const maxLineBytes = opts.maxLineBytes ?? 10 * 1024 * 1024;
|
|
3227
|
-
const child = spawn3(call.command, call.args, { cwd: expandTilde(call.cwd) ?? call.cwd, stdio: ["pipe", "pipe", "pipe"], shell: useShellForCli() });
|
|
3292
|
+
const child = spawn3(call.command, call.args, { cwd: expandTilde(call.cwd) ?? call.cwd, stdio: ["pipe", "pipe", "pipe"], shell: useShellForCli(), env: resolveLoginShellEnv() ?? process.env });
|
|
3228
3293
|
let stderr = "";
|
|
3229
3294
|
let buffer = "";
|
|
3230
3295
|
const queue = [];
|
|
@@ -3349,7 +3414,8 @@ var CodexAppServerClient = class {
|
|
|
3349
3414
|
this.child = spawn4(command, ["app-server", "--listen", "stdio://"], {
|
|
3350
3415
|
cwd: input.cwd,
|
|
3351
3416
|
stdio: ["pipe", "pipe", "pipe"],
|
|
3352
|
-
shell: useShellForCli()
|
|
3417
|
+
shell: useShellForCli(),
|
|
3418
|
+
env: resolveLoginShellEnv() ?? process.env
|
|
3353
3419
|
});
|
|
3354
3420
|
this.child.stdout.on("data", (chunk) => this.onStdout(String(chunk)));
|
|
3355
3421
|
this.child.stderr.on("data", () => {
|
|
@@ -5607,8 +5673,9 @@ function listLanIpv4Addresses() {
|
|
|
5607
5673
|
return Object.values(networkInterfaces()).flat().filter((iface) => Boolean(iface)).filter((iface) => iface.family === "IPv4" && !iface.internal).map((iface) => iface.address);
|
|
5608
5674
|
}
|
|
5609
5675
|
async function resolveProviderCommands(providers) {
|
|
5610
|
-
const
|
|
5611
|
-
const
|
|
5676
|
+
const searchPath = resolveTerminalSearchPath();
|
|
5677
|
+
const claudeCommand = providers?.claude?.command ?? await findExecutable("claude", searchPath);
|
|
5678
|
+
const codexCommand = providers?.codex?.command ?? await findExecutable("codex", searchPath);
|
|
5612
5679
|
if (!claudeCommand && !codexCommand) return void 0;
|
|
5613
5680
|
return {
|
|
5614
5681
|
...claudeCommand ? { claude: { command: claudeCommand } } : {},
|
|
@@ -6176,9 +6243,10 @@ async function cmdDoctor() {
|
|
|
6176
6243
|
console.log("claude-codex-wechat doctor\n");
|
|
6177
6244
|
report("\u914D\u7F6E\u6587\u4EF6", existsSync11(configPath) ? configPath : `\u7F3A\u5931 (${configPath})\uFF0C\u9996\u6B21 start \u65F6\u81EA\u52A8\u521B\u5EFA`);
|
|
6178
6245
|
report("\u524D\u7AEF\u4EA7\u7269", existsSync11(webRoot) ? webRoot : `\u7F3A\u5931 (${webRoot})`);
|
|
6179
|
-
const
|
|
6246
|
+
const searchPath = resolveTerminalSearchPath();
|
|
6247
|
+
const claude = await findExecutable("claude", searchPath);
|
|
6180
6248
|
report("claude \u53EF\u6267\u884C", claude ?? "\u672A\u627E\u5230\uFF0C\u9700\u5148\u5B89\u88C5\u5E76\u767B\u5F55 Claude Code");
|
|
6181
|
-
const codex = await findExecutable("codex");
|
|
6249
|
+
const codex = await findExecutable("codex", searchPath);
|
|
6182
6250
|
report("codex \u53EF\u6267\u884C", codex ?? "\u672A\u627E\u5230\uFF08\u4EC5\u4F7F\u7528 Claude \u65F6\u53EF\u5FFD\u7565\uFF09");
|
|
6183
6251
|
if (existsSync11(configPath)) {
|
|
6184
6252
|
const config = loadBridgeConfig(configPath);
|