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.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.0",
68
- "claudeup-darwin-x64": "5.0.0",
69
- "claudeup-linux-x64": "5.0.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", () => {
@@ -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. That dodges the crash, and it is right on its own terms: a FIFO
20
- * hands its bytes to whoever opens it FIRST, so reading one would swallow
21
- * the secrets a dev server or `op run` was waiting for.
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; reading it would consume another process's secrets";
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";