@wu529778790/open-im 1.2.0 → 1.2.1

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/config.js +35 -21
  2. package/package.json +1 -1
package/dist/config.js CHANGED
@@ -10,7 +10,6 @@ import { join, isAbsolute } from 'node:path';
10
10
  import { homedir } from 'node:os';
11
11
  import { APP_HOME } from './constants.js';
12
12
  const CONFIG_PATH = join(APP_HOME, 'config.json');
13
- const CLAUDE_SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
14
13
  function loadFileConfig() {
15
14
  try {
16
15
  return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
@@ -19,17 +18,34 @@ function loadFileConfig() {
19
18
  return {};
20
19
  }
21
20
  }
22
- /** ~/.claude/settings.json 加载 Claude API 凭证(Claude Code 共用配置) */
21
+ /** 获取用户主目录(兼容不同运行环境,如 launchd、systemd 等) */
22
+ function getClaudeConfigHome() {
23
+ return process.env.HOME || process.env.USERPROFILE || homedir();
24
+ }
25
+ /** 从 Claude Code 配置文件加载 env,支持多路径(与 Claude Code 共用) */
23
26
  function loadClaudeSettingsEnv() {
24
- try {
25
- const raw = JSON.parse(readFileSync(CLAUDE_SETTINGS_PATH, 'utf-8'));
26
- const env = raw?.env;
27
- if (env && typeof env === 'object') {
28
- return env;
27
+ const home = getClaudeConfigHome();
28
+ const paths = [
29
+ join(home, '.claude', 'settings.json'),
30
+ join(home, '.claude.json'),
31
+ ];
32
+ for (const p of paths) {
33
+ try {
34
+ const raw = JSON.parse(readFileSync(p, 'utf-8'));
35
+ const env = raw?.env;
36
+ if (env && typeof env === 'object') {
37
+ const result = {};
38
+ for (const [k, v] of Object.entries(env)) {
39
+ if (v != null && typeof k === 'string') {
40
+ result[k] = String(v);
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ }
46
+ catch {
47
+ /* 文件不存在或格式错误,尝试下一路径 */
29
48
  }
30
- }
31
- catch {
32
- /* 文件不存在或格式错误,忽略 */
33
49
  }
34
50
  return {};
35
51
  }
@@ -73,20 +89,18 @@ function parseCommaSeparated(value) {
73
89
  export function loadConfig() {
74
90
  const file = loadFileConfig();
75
91
  // 将配置文件中的 env 设置到环境变量(优先级低于现有环境变量)
76
- if (file.env) {
77
- for (const [key, value] of Object.entries(file.env)) {
78
- if (!(key in process.env)) {
79
- process.env[key] = value;
92
+ const mergeEnv = (env) => {
93
+ for (const [key, value] of Object.entries(env)) {
94
+ if (!(key in process.env) && value != null && typeof key === 'string') {
95
+ process.env[key] = String(value);
80
96
  }
81
97
  }
82
- }
83
- // 从 ~/.claude/settings.json 合并 Claude API 凭证(Claude Code 共用,最低优先级)
98
+ };
99
+ if (file.env)
100
+ mergeEnv(file.env);
101
+ // 从 Claude Code 配置合并 API 凭证(~/.claude/settings.json 或 ~/.claude.json,最低优先级)
84
102
  const claudeEnv = loadClaudeSettingsEnv();
85
- for (const [key, value] of Object.entries(claudeEnv)) {
86
- if (!(key in process.env)) {
87
- process.env[key] = value;
88
- }
89
- }
103
+ mergeEnv(claudeEnv);
90
104
  const fileTelegram = file.platforms?.telegram;
91
105
  const fileFeishu = file.platforms?.feishu;
92
106
  const fileWechat = file.platforms?.wechat;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wu529778790/open-im",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Multi-platform IM bridge for AI CLI tools (Claude, Codex, Cursor)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",