oh-langfuse 0.1.58 → 0.1.60

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `oh-langfuse` 是用于给 Claude Code、OpenCode、Codex 配置 Langfuse 追踪的命令行工具。它既提供交互式安装向导,也支持 `setup`、`check`、`update`、`auto-update` 等直接命令。
4
4
 
5
- 当前 npm 版本:`0.1.58`
5
+ 当前 npm 版本:`0.1.60`
6
6
 
7
7
  ## 能做什么
8
8
 
@@ -88,8 +88,8 @@ npx oh-langfuse@latest verify-update all
88
88
  输出示例:
89
89
 
90
90
  ```text
91
- [OK] OpenCode Langfuse runtime is current: 0.1.58
92
- [FAIL] Codex Langfuse runtime is outdated: installed 0.1.57, latest 0.1.58
91
+ [OK] OpenCode Langfuse runtime is current: 0.1.60
92
+ [FAIL] Codex Langfuse runtime is outdated: installed 0.1.59, latest 0.1.60
93
93
  [FIX] Run: npx oh-langfuse@latest update codex
94
94
  [SKIP] Claude not installed
95
95
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-langfuse",
3
- "version": "0.1.58",
3
+ "version": "0.1.60",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Use npm scripts to configure Claude Code / OpenCode / Codex with Langfuse tracing.",
@@ -39,12 +39,12 @@ function parseArgs(argv) {
39
39
  return args;
40
40
  }
41
41
 
42
- async function latestVersion(registry = "https://registry.npmjs.org") {
43
- const base = registry.replace(/\/+$/, "");
44
- const response = await fetch(`${base}/oh-langfuse`, { headers: { accept: "application/json" } });
45
- if (!response.ok) throw new Error(`npm registry ${response.status} ${response.statusText}`);
46
- return extractVersionFromNpmMetadata(await response.json());
47
- }
42
+ async function latestVersion(packageName, registry = "https://registry.npmjs.org") {
43
+ const base = registry.replace(/\/+$/, "");
44
+ const response = await fetch(`${base}/${packageName}`, { headers: { accept: "application/json" } });
45
+ if (!response.ok) throw new Error(`npm registry ${response.status} ${response.statusText}`);
46
+ return extractVersionFromNpmMetadata(await response.json());
47
+ }
48
48
 
49
49
  function question(text) {
50
50
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
@@ -98,16 +98,26 @@ function shouldPrintStartupStatus(args, env = process.env) {
98
98
  return !!(args["startup-status"] || args.startupStatus || /^(1|true|yes|on)$/i.test(raw));
99
99
  }
100
100
 
101
- function printAlreadyCurrent(target, version) {
102
- const label = targetLabel(target);
103
- console.log(paint(`[OK] ${label} Langfuse \u5df2\u662f\u6700\u65b0\uff1a${packageJson.name}@${version}`, t.bold, t.green));
104
- }
105
-
106
- function runUpdate(target, args) {
107
- const updateArgs = ["-y", "oh-langfuse@latest", "update", target];
108
- if (args["skip-check"]) updateArgs.push("--skip-check");
109
- if (args.npmRegistry) updateArgs.push(`--npmRegistry=${args.npmRegistry}`);
110
- if (args.pipIndexUrl) updateArgs.push(`--pipIndexUrl=${args.pipIndexUrl}`);
101
+ function printAlreadyCurrent(target, packageName, version) {
102
+ const label = targetLabel(target);
103
+ console.log(paint(`[OK] ${label} Langfuse \u5df2\u662f\u6700\u65b0\uff1a${packageName}@${version}`, t.bold, t.green));
104
+ }
105
+
106
+ function updateCommandForPackage(packageName, target) {
107
+ if (packageName === "oh-aicoding-tool") return `npx oh-aicoding-tool@latest langfuse update ${target}`;
108
+ return `npx ${packageName}@latest update ${target}`;
109
+ }
110
+
111
+ function updateArgsForPackage(packageName, target) {
112
+ if (packageName === "oh-aicoding-tool") return ["-y", "oh-aicoding-tool@latest", "langfuse", "update", target];
113
+ return ["-y", `${packageName}@latest`, "update", target];
114
+ }
115
+
116
+ function runUpdate(target, packageName, args) {
117
+ const updateArgs = updateArgsForPackage(packageName, target);
118
+ if (args["skip-check"]) updateArgs.push("--skip-check");
119
+ if (args.npmRegistry) updateArgs.push(`--npmRegistry=${args.npmRegistry}`);
120
+ if (args.pipIndexUrl) updateArgs.push(`--pipIndexUrl=${args.pipIndexUrl}`);
111
121
  const result = runNpx(updateArgs, {
112
122
  stdio: "inherit",
113
123
  timeout: 900000,
@@ -133,26 +143,27 @@ async function main() {
133
143
  throw new Error("Usage: oh-langfuse auto-update <claude|opencode|codex>");
134
144
  }
135
145
 
136
- let latest;
137
- try {
138
- latest = await latestVersion(args.npmRegistry);
139
- } catch (error) {
140
- if (args.verbose) console.log(`[INFO] oh-langfuse update check skipped: ${error.message}`);
141
- return 0;
142
- }
143
-
144
- const record = getRuntimeInstallRecord(target);
145
- const installedVersion = record?.packageVersion || record?.version || "";
146
- const needsUpdate = installedVersion ? isNewerVersion(latest, installedVersion) : isNewerVersion(latest, packageJson.version);
147
- if (!needsUpdate) {
148
- if (shouldPrintStartupStatus(args)) printAlreadyCurrent(target, installedVersion || packageJson.version);
149
- return 0;
150
- }
151
-
152
- const message = installedVersion
153
- ? `oh-langfuse ${target} runtime update available: ${installedVersion} -> ${latest}.`
154
- : `oh-langfuse ${target} runtime may need update. Latest package: ${latest}.`;
155
- const updateCommand = `npx oh-langfuse@latest update ${target}`;
146
+ const record = getRuntimeInstallRecord(target);
147
+ const packageName = record?.packageName || packageJson.name;
148
+ let latest;
149
+ try {
150
+ latest = await latestVersion(packageName, args.npmRegistry);
151
+ } catch (error) {
152
+ if (args.verbose) console.log(`[INFO] ${packageName} update check skipped: ${error.message}`);
153
+ return 0;
154
+ }
155
+
156
+ const installedVersion = record?.packageVersion || record?.version || "";
157
+ const needsUpdate = installedVersion ? isNewerVersion(latest, installedVersion) : isNewerVersion(latest, packageJson.version);
158
+ if (!needsUpdate) {
159
+ if (shouldPrintStartupStatus(args)) printAlreadyCurrent(target, packageName, installedVersion || packageJson.version);
160
+ return 0;
161
+ }
162
+
163
+ const message = installedVersion
164
+ ? `${packageName} ${target} runtime update available: ${installedVersion} -> ${latest}.`
165
+ : `${packageName} ${target} runtime may need update. Latest package: ${latest}.`;
166
+ const updateCommand = updateCommandForPackage(packageName, target);
156
167
 
157
168
  if (mode === "notify") {
158
169
  printUpdateAvailable(target, message, updateCommand);
@@ -161,9 +172,9 @@ async function main() {
161
172
  }
162
173
 
163
174
  if (mode === "auto") {
164
- printUpdateAvailable(target, message, updateCommand);
165
- printUpdateCommand(target, updateCommand);
166
- const code = runUpdate(target, args);
175
+ printUpdateAvailable(target, message, updateCommand);
176
+ printUpdateCommand(target, updateCommand);
177
+ const code = runUpdate(target, packageName, args);
167
178
  return args.strict ? code : 0;
168
179
  }
169
180
 
@@ -173,10 +184,10 @@ async function main() {
173
184
  }
174
185
 
175
186
  printUpdateAvailable(target, message, updateCommand);
176
- const answer = await question(`${paint("[CONFIRM]", t.bold, t.gold)} Update now? (y/N) `);
177
- if (!/^(y|yes)$/i.test(answer)) return 0;
178
- printUpdateCommand(target, updateCommand);
179
- const code = runUpdate(target, args);
187
+ const answer = await question(`${paint("[CONFIRM]", t.bold, t.gold)} Update now? (y/N) `);
188
+ if (!/^(y|yes)$/i.test(answer)) return 0;
189
+ printUpdateCommand(target, updateCommand);
190
+ const code = runUpdate(target, packageName, args);
180
191
  return args.strict ? code : 0;
181
192
  }
182
193
 
@@ -254,7 +254,9 @@ async function main() {
254
254
  printUpdateSummary(targets);
255
255
  }
256
256
 
257
- main().catch((error) => {
258
- console.error(`[FAIL] ${error?.message || String(error)}`);
259
- process.exit(1);
260
- });
257
+ main()
258
+ .then(() => process.exit(0))
259
+ .catch((error) => {
260
+ console.error(`[FAIL] ${error?.message || String(error)}`);
261
+ process.exit(1);
262
+ });
@@ -154,9 +154,9 @@ async function main() {
154
154
 
155
155
  main()
156
156
  .then((code) => {
157
- process.exitCode = code;
157
+ process.exit(code);
158
158
  })
159
159
  .catch((error) => {
160
160
  console.error(paint(`[FAIL] ${error?.message || String(error)}`, t.bold, t.red));
161
- process.exitCode = 3;
161
+ process.exit(3);
162
162
  });