@bulletproof-sh/ctrl-daemon 0.1.1-alpha.15 → 0.1.1-alpha.19

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
@@ -1,6 +1,6 @@
1
1
  # @bulletproof-sh/ctrl-daemon
2
2
 
3
- WebSocket daemon for [Ctrl / Cubicles](https://ctrl.bulletproof.sh) — watches Claude Code sessions on disk and broadcasts live agent state to connected web clients. Features a full-screen animated Matrix rain TUI with a centered log panel showing daemon events in real time.
3
+ WebSocket daemon for [Ctrl / Cubicles](https://ctrl.bulletproof.sh) — auto-discovers AI coding agent sessions (Claude Code, OpenAI Codex, Augment Code) and broadcasts live agent state to connected web clients. Features a full-screen animated TUI with a centered log panel showing daemon events in real time.
4
4
 
5
5
  ## Requirements
6
6
 
@@ -9,7 +9,7 @@ WebSocket daemon for [Ctrl / Cubicles](https://ctrl.bulletproof.sh) — watches
9
9
  ## Usage
10
10
 
11
11
  ```sh
12
- # Watch all Claude Code projects (default)
12
+ # Auto-discover all installed AI coding tools (default)
13
13
  npx @bulletproof-sh/ctrl-daemon
14
14
 
15
15
  # Watch a single project directory
@@ -18,7 +18,10 @@ npx @bulletproof-sh/ctrl-daemon --project-dir /path/to/your/project
18
18
  # Custom port / host
19
19
  npx @bulletproof-sh/ctrl-daemon --port 3001 --host 127.0.0.1
20
20
 
21
- # Disable the Matrix rain TUI (plain text output)
21
+ # Choose a TUI background animation
22
+ npx @bulletproof-sh/ctrl-daemon --animation starfield
23
+
24
+ # Disable the TUI (plain text output)
22
25
  npx @bulletproof-sh/ctrl-daemon --no-tui
23
26
  ```
24
27
 
@@ -28,20 +31,21 @@ npx @bulletproof-sh/ctrl-daemon --no-tui
28
31
  |---|---|---|
29
32
  | `--port <number>` | `3001` | Port to listen on (auto-increments if in use) |
30
33
  | `--host <address>` | `0.0.0.0` | Host/address to bind to |
31
- | `--project-dir <path>` | — | Watch a single project; omit to watch all projects |
34
+ | `--project-dir <path>` | — | Watch a single project; omit to auto-discover all tools |
32
35
  | `--idle-timeout <minutes>` | `15` | Agent idle timeout in minutes |
33
- | `--no-tui` | | Disable Matrix rain TUI (also auto-disabled when not a TTY) |
36
+ | `--animation, -a <name>` | `random` | Background animation: matrix, starfield, aurora, fireflies, life, pipes, dvd, starwars, none |
37
+ | `--no-tui` | — | Disable TUI (also auto-disabled when not a TTY) |
34
38
  | `--help`, `-h` | — | Print usage |
35
39
 
36
- Without `--project-dir`, the daemon scans `~/.claude/projects/` and watches every session it finds there.
40
+ Without `--project-dir`, the daemon auto-discovers all installed AI coding tools and watches their session directories.
37
41
 
38
42
  If the requested port is already in use, the daemon automatically tries the next port (up to 10 attempts).
39
43
 
40
44
  ## Terminal UI
41
45
 
42
- When running in a TTY, the daemon displays an animated Matrix rain effect with a centered panel showing the CTRL logo, live agent/client counts, and scrolling daemon event logs. The TUI handles terminal resize and restores the terminal cleanly on exit.
46
+ When running in a TTY, the daemon displays an animated background (randomly selected from matrix, starfield, aurora, fireflies, life, pipes, and dvd) with a centered panel showing the CTRL logo, live agent/client counts, and scrolling daemon event logs. Use `--animation <name>` to pick a specific animation, or `--no-tui` to disable the TUI entirely.
43
47
 
44
- Pass `--no-tui` to disable the TUI and use plain text output instead. The TUI is also automatically disabled when stdout is not a TTY (e.g. when piping output or running in CI).
48
+ The TUI handles terminal resize and restores the terminal cleanly on exit. The TUI is also automatically disabled when stdout is not a TTY (e.g. when piping output or running in CI).
45
49
 
46
50
  ## Sharing your office
47
51
 
@@ -55,7 +59,7 @@ npx @bulletproof-sh/ctrl-daemon
55
59
  ngrok http 3001
56
60
  ```
57
61
 
58
- Then open [bulletproof.sh](https://bulletproof.sh), go to **Settings → Share Office** and copy the generated link. Anyone who opens it will see your agents in real time — no auth or setup required on their end.
62
+ Then open [ctrl.bulletproof.sh](https://ctrl.bulletproof.sh), go to **Settings → Share Office** and copy the generated link. Anyone who opens it will see your agents in real time — no auth or setup required on their end.
59
63
 
60
64
  > **Note:** Free ngrok URLs rotate each time you restart the tunnel. A paid ngrok plan gives you a stable domain.
61
65
 
@@ -65,6 +69,14 @@ Connect to `ws://localhost:3001/ws`. The daemon broadcasts JSON messages wheneve
65
69
 
66
70
  The [Ctrl web app](https://ctrl.bulletproof.sh) connects here by default. You can change the URL in the app's Settings modal or by setting `VITE_DAEMON_WS_URL` at build time.
67
71
 
72
+ ### Health check
73
+
74
+ `GET /health` returns JSON with daemon status, agent count, and version:
75
+
76
+ ```json
77
+ { "status": "ok", "agents": 3, "version": "0.0.18" }
78
+ ```
79
+
68
80
  ## Environment Variables
69
81
 
70
82
  | Variable | Description |
@@ -92,10 +104,10 @@ The check is non-blocking and fails silently if the registry is unreachable.
92
104
  bun install
93
105
  bun run dev # watch mode
94
106
  bun run build # compile to dist/
95
- bun run check # biome lint + format
107
+ bun run verify # tsc + biome + tests
108
+ bun run test # tests only
96
109
  ```
97
110
 
98
111
  ## License
99
112
 
100
113
  BUSL-1.1
101
-
@@ -20,6 +20,7 @@ const platformPackages = {
20
20
  'darwin-x64': '@bulletproof-sh/ctrl-daemon-darwin-x64',
21
21
  'linux-arm64': '@bulletproof-sh/ctrl-daemon-linux-arm64',
22
22
  'linux-x64': '@bulletproof-sh/ctrl-daemon-linux-x64',
23
+ 'win32-x64': '@bulletproof-sh/ctrl-daemon-windows-x64',
23
24
  };
24
25
 
25
26
  function getBinaryPath() {
@@ -29,9 +30,10 @@ function getBinaryPath() {
29
30
 
30
31
  const key = `${process.platform}-${process.arch}`;
31
32
  const pkg = platformPackages[key];
33
+ const binName = process.platform === 'win32' ? 'ctrl-daemon.exe' : 'ctrl-daemon';
32
34
  if (pkg) {
33
35
  try {
34
- const binPath = require.resolve(`${pkg}/bin/ctrl-daemon`);
36
+ const binPath = require.resolve(`${pkg}/bin/${binName}`);
35
37
  if (existsSync(binPath)) {
36
38
  return binPath;
37
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bulletproof-sh/ctrl-daemon",
3
- "version": "0.1.1-alpha.15",
3
+ "version": "0.1.1-alpha.19",
4
4
  "description": "WebSocket daemon for ctrl — watches Claude Code sessions and broadcasts agent state",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -27,10 +27,11 @@
27
27
  "vitest": "^4.0.18"
28
28
  },
29
29
  "optionalDependencies": {
30
- "@bulletproof-sh/ctrl-daemon-darwin-arm64": "0.1.1-alpha.15",
31
- "@bulletproof-sh/ctrl-daemon-darwin-x64": "0.1.1-alpha.15",
32
- "@bulletproof-sh/ctrl-daemon-linux-arm64": "0.1.1-alpha.15",
33
- "@bulletproof-sh/ctrl-daemon-linux-x64": "0.1.1-alpha.15"
30
+ "@bulletproof-sh/ctrl-daemon-darwin-arm64": "0.1.1-alpha.19",
31
+ "@bulletproof-sh/ctrl-daemon-darwin-x64": "0.1.1-alpha.19",
32
+ "@bulletproof-sh/ctrl-daemon-linux-arm64": "0.1.1-alpha.19",
33
+ "@bulletproof-sh/ctrl-daemon-linux-x64": "0.1.1-alpha.19",
34
+ "@bulletproof-sh/ctrl-daemon-windows-x64": "0.1.1-alpha.19"
34
35
  },
35
36
  "dependencies": {
36
37
  "posthog-node": "^5.26.0"