claudeup 5.0.0 → 5.0.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudeup",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "TUI tool for managing Claude Code plugins, MCPs, and configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/main.tsx",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"typescript": "^5.6.3"
|
|
65
65
|
},
|
|
66
66
|
"optionalDependencies": {
|
|
67
|
-
"claudeup-darwin-arm64": "5.0.
|
|
68
|
-
"claudeup-darwin-x64": "5.0.
|
|
69
|
-
"claudeup-linux-x64": "5.0.
|
|
67
|
+
"claudeup-darwin-arm64": "5.0.1",
|
|
68
|
+
"claudeup-darwin-x64": "5.0.1",
|
|
69
|
+
"claudeup-linux-x64": "5.0.1"
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -87,6 +87,11 @@ describe("loadProjectDotenv", () => {
|
|
|
87
87
|
expect(r.warnings).toHaveLength(1);
|
|
88
88
|
expect(r.warnings[0]).toContain(".env");
|
|
89
89
|
expect(r.warnings[0]).toContain("named pipe");
|
|
90
|
+
// The warning must give the real reason — the open blocks with no writer.
|
|
91
|
+
// It must NOT claim reading would steal another process's secrets: a
|
|
92
|
+
// 1Password pipe re-serves on every open, so that rationale is false.
|
|
93
|
+
expect(r.warnings[0]).toContain("blocks");
|
|
94
|
+
expect(r.warnings[0]).not.toContain("consume");
|
|
90
95
|
});
|
|
91
96
|
|
|
92
97
|
it("skips a .env that is a FIFO directly, and warns", () => {
|
package/src/services/dotenv.ts
CHANGED
|
@@ -16,9 +16,14 @@ import path from "node:path";
|
|
|
16
16
|
* Two rules this loader keeps that the autoload did not:
|
|
17
17
|
*
|
|
18
18
|
* 1. Only regular files are read. A FIFO, socket or device is skipped, never
|
|
19
|
-
* opened
|
|
20
|
-
*
|
|
21
|
-
* the
|
|
19
|
+
* opened, because opening a pipe BLOCKS until some process opens the other
|
|
20
|
+
* end — with no writer standing by, claudeup hangs on startup instead of
|
|
21
|
+
* running. That is the whole reason. It is NOT that reading would steal
|
|
22
|
+
* another process's secrets: 1Password's pipe re-serves its contents on
|
|
23
|
+
* every open, and `readFileSync` reads it correctly (`Bun.file().text()`
|
|
24
|
+
* is the API that hangs on a FIFO). An earlier version of this comment,
|
|
25
|
+
* the warning text, and the 4.42.1 changelog all claimed the one-reader
|
|
26
|
+
* story; it is wrong, so do not restore it.
|
|
22
27
|
* 2. Nothing here is fatal. A missing, unreadable or malformed .env produces a
|
|
23
28
|
* warning and claudeup carries on. Managing ~/.claude must never depend on
|
|
24
29
|
* the state of whatever directory you happen to be standing in.
|
|
@@ -89,7 +94,7 @@ export function parseDotenv(text: string): Record<string, string> {
|
|
|
89
94
|
/** What a non-regular entry actually is, for a warning a human can act on. */
|
|
90
95
|
function describeKind(info: Stats): string {
|
|
91
96
|
if (info.isFIFO()) {
|
|
92
|
-
return "it is a named pipe;
|
|
97
|
+
return "it is a named pipe; opening one blocks until a writer appears, and claudeup must not hang before it starts";
|
|
93
98
|
}
|
|
94
99
|
if (info.isSocket()) return "it is a socket, not a regular file";
|
|
95
100
|
if (info.isDirectory()) return "it is a directory, not a regular file";
|