oh-langfuse 0.1.59 → 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 +3 -3
- package/package.json +1 -1
- package/scripts/auto-update-runtime.mjs +54 -43
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.
|
|
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.
|
|
92
|
-
[FAIL] Codex Langfuse runtime is outdated: installed 0.1.
|
|
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
|
@@ -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}
|
|
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${
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
|