termdeck-cli 1.0.2 โ†’ 2.0.2

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,233 +1,254 @@
1
- # termdeck
1
+ <div align="center">
2
2
 
3
- A terminal dashboard (TUI) for juggling your local dev projects.
3
+ # ๐Ÿ–ฅ๏ธ termdeck
4
4
 
5
- One screen lists your projects with a colour-coded status and blurb, and gives
6
- each one three actions:
5
+ **A beautiful, terminal-based project dashboard to manage your local dev environments, services, and AI coding agents.**
7
6
 
8
- | CTA | What it does |
9
- | --- | --- |
10
- | **Dev Server** | runs `npm run dev` **inside termdeck** โ€” stdout/stderr stream into the scrollable log pane below (no extra terminal window), then the localhost URL is detected and opened in your default browser |
11
- | **Editor** | opens a **brand new OS terminal window**, `cd`s into the project and runs `code .` |
12
- | **Agent** | opens a **brand new OS terminal window**, `cd`s into the project and runs `opencode` (placeholder โ€” configurable) |
13
-
14
- Everything is keyboard driven *and* mouse driven: the three CTAs are clickable
15
- buttons, the project list is click-selectable, and the mouse wheel scrolls the
16
- logs.
7
+ [![npm version](https://img.shields.io/npm/v/termdeck.svg)](https://www.npmjs.com/package/termdeck)
8
+ [![license](https://img.shields.io/npm/l/termdeck.svg)](https://github.com/barigalasunil/termdeck/blob/main/LICENSE)
17
9
 
18
10
  ```
19
11
  +----------------------------------------------------------------------+
20
- | termdeck 4 projects ยท /home/you/Projects โ— 2 dev servers running
12
+ | termdeck 14 projects ยท ~/dev/projects โ— 2 dev servers running |
21
13
  +------------------------+---------------------------------------------+
22
14
  | projects | selected project |
23
- | โ— api [Live] | alpha โ— Working |
24
- | โ— alpha [Working] | /home/you/Projects/alpha |
25
- | โ—‹ blog [Pending] | marketing site |
26
- | โ—‹ lab [Experiment]| editor: code . agent: opencode |
27
- | | โ— dev server running (pid 8123) โ†’ localhost |
15
+ | โ— api [live] | alpha โ— live |
16
+ | โ— alpha [live] | ~/dev/projects/alpha main ยท 8a2f1 (2d ago)|
17
+ | โ—‹ blog [exp] | marketing site |
18
+ | โ—‹ lab [scrap] | โ— dev server running (pid 8123) โ†’ localhost |
19
+ | | cpu 3.2% ยท mem 214MB |
28
20
  +------------------------+---------------------------------------------+
29
- | | [d] Dev Server [e] Editor [a] Agent |
30
- | +---------------------------------------------+
31
- | | dev server logs |
32
- | | 12:04:11 alpha [termdeck] $npm run dev |
33
- | | 12:04:12 alpha โžœ Local: http://localhost:51 |
21
+ | dev [r] status [s] search [/] ... |
34
22
  +------------------------+---------------------------------------------+
35
- | โ†‘/โ†“ select d dev e editor a agent x stop r reload q quit |
23
+ | dev server logs |
24
+ | 12:04:11 alpha [termdeck] $npm run dev |
25
+ | 12:04:12 alpha โžœ Local: http://localhost:5173 |
36
26
  +----------------------------------------------------------------------+
37
27
  ```
38
28
 
39
- ## Install
29
+ </div>
30
+
31
+ ---
32
+
33
+ ## โœจ Features
34
+
35
+ - ๐ŸŽฏ **Centralized Dashboard** โ€” See every project, its status (live, exp, pend, scrap), git state (branch, last commit), current process stats, and dev server state in one place.
36
+ - โšก **In-Terminal Dev Servers** โ€” Run `npm run dev` and stream the logs inside the dashboard. Auto-opens the browser. **Crash recovery** restarts a dead server up to 3 times.
37
+ - ๐Ÿš€ **One-Click External Tools** โ€” Launch your editor or an AI coding agent (claude, codex, opencode, freebuff, kilocode) in a new terminal window, with agent logs tailed back into the dashboard.
38
+ - ๐Ÿ”Ž **Live Search & Filtering** โ€” Type `/` to search projects by name; press `1`โ€“`5` to filter by status chip.
39
+ - ๏ธ **Mouse & Keyboard Support** โ€” Fully navigable with mouse clicks, Tab/Shift+Tab focus cycling, and keyboard shortcuts.
40
+ - ๐Ÿ’พ **Persistent, Self-Healing Config** โ€” Interactive first-run setup saves `~/.termdeck-config.json`; the `--scan` wizard merges new projects without losing your custom agent configs.
41
+
42
+ ---
43
+
44
+ ## ๐Ÿ“ฆ Installation
45
+
46
+ ### Global Install (Recommended)
40
47
 
41
48
  ```bash
42
49
  npm install -g termdeck
43
- termdeck
44
50
  ```
45
51
 
46
- Requires Node.js 16+ and a real terminal (macOS/Linux Terminal, Windows
47
- Terminal, iTerm, โ€ฆ). No Docker, no daemon, no background service.
52
+ This installs the `termdeck` command anywhere.
48
53
 
49
- ## First run
54
+ ### One-Off Run
50
55
 
51
- The first launch asks a few questions and remembers the answers in
52
- `~/.termdeck-config.json`:
56
+ ```bash
57
+ npx termdeck
58
+ ```
53
59
 
54
- 1. **Which directory holds your projects?** โ€” pick from suggestions (common
55
- folders like `~/Projects`, plus every drive letter on Windows) or type a path.
56
- 2. **Which folders are projects?** โ€” multi-select with <kbd>space</kbd>, confirm
57
- with <kbd>enter</kbd>.
58
- 3. **Status + description per folder** โ€” `Experimental`, `Live`, `Working` or
59
- `Pending`, plus a one line blurb.
60
+ > **Note:** Requires Node.js 16+ and a real terminal (macOS/Linux Terminal, Windows Terminal, iTerm, etc.). No Docker, no daemon, no background service.
60
61
 
61
- Every later launch skips straight to the dashboard. Re-run it any time with
62
- `termdeck --setup` (existing answers are pre-filled as defaults).
62
+ ### Auto-Updates
63
63
 
64
- ## Keys
64
+ On every dashboard launch termdeck silently checks the npm registry for a newer version. When one exists it installs `termdeck@latest` in the background โ€” no confirmation, no restart. Offline, slow or unreachable registries are ignored: you simply keep running the installed version.
65
65
 
66
- | Key | Action |
67
- | --- | --- |
68
- | <kbd>โ†‘</kbd>/<kbd>โ†“</kbd>, <kbd>j</kbd>/<kbd>k</kbd> | select a project (or click it) |
69
- | <kbd>d</kbd> | start the dev server for the selection (or click **Dev Server**) |
70
- | <kbd>e</kbd> | open the editor in a new terminal window (or click **Editor**) |
71
- | <kbd>a</kbd> | open the agent in a new terminal window (or click **Agent**) |
72
- | <kbd>x</kbd> | stop the selected project's dev server |
73
- | <kbd>r</kbd> | reload the config file from disk |
74
- | <kbd>PgUp</kbd>/<kbd>PgDn</kbd>, wheel | scroll the log pane (pauses following, shows how many lines arrived) |
75
- | <kbd>shift</kbd>+<kbd>G</kbd>, <kbd>end</kbd> | jump back to live logs |
76
- | <kbd>home</kbd> | jump to the start of the log history |
77
- | <kbd>q</kbd>, <kbd>ctrl</kbd>+<kbd>c</kbd> | quit โ€” every dev server termdeck started is stopped first |
66
+ Disable the check on an individual run with:
78
67
 
79
- Quitting while dev servers are running asks for a second <kbd>q</kbd> press.
68
+ ```bash
69
+ termdeck --no-update
70
+ ```
80
71
 
81
- ## CLI
72
+ ### Manual Upgrade
82
73
 
74
+ ```bash
75
+ npm update -g termdeck
76
+ # or, to force the very latest release:
77
+ npm install -g termdeck@latest
83
78
  ```
84
- termdeck launch the dashboard (runs setup on first use)
85
- termdeck --setup re-run the setup wizard
86
- termdeck --reset delete the config file, then run setup again
87
- termdeck --list print the configured projects and exit (no TUI)
88
- termdeck --no-open never auto-open the browser
89
- termdeck --help
79
+
80
+ ### Check the Installed Version
81
+
82
+ ```bash
90
83
  termdeck --version
84
+ # or inspect the global install directly
85
+ npm list -g termdeck
86
+ ```
87
+
88
+ ---
89
+
90
+ ## ๐Ÿ—‘๏ธ Uninstall
91
+
92
+ To completely remove termdeck from your system:
93
+
94
+ ```bash
95
+ npm uninstall -g termdeck
91
96
  ```
92
97
 
93
- ## Config file
94
-
95
- `~/.termdeck-config.json` (override the path with the `TERMDECK_CONFIG`
96
- environment variable):
97
-
98
- ```json
99
- {
100
- "version": 1,
101
- "root": "/home/you/Projects",
102
- "devCommand": "npm run dev",
103
- "editorCommand": "code .",
104
- "agentCommand": "opencode",
105
- "openBrowser": true,
106
- "projects": [
107
- {
108
- "name": "alpha",
109
- "path": "/home/you/Projects/alpha",
110
- "status": "Working",
111
- "info": "marketing site with a Next.js frontend"
112
- }
113
- ]
114
- }
98
+ This removes the global package and the `termdeck` command.
99
+ Your project configuration at `~/.termdeck-config.json` is preserved.
100
+ To delete the config file as well:
101
+
102
+ ```bash
103
+ # macOS/Linux
104
+ rm ~/.termdeck-config.json
105
+
106
+ # Windows PowerShell
107
+ Remove-Item ~\.termdeck-config.json
115
108
  ```
116
109
 
117
- The same keys can be set **per project** inside a `projects[]` entry
118
- (`devCommand`, `editorCommand`, `agentCommand`, `port`), which is handy when one
119
- repo needs `pnpm dev`, `npm start` or a fixed port. Editing the file by hand is
120
- fine โ€” press <kbd>r</kbd> in the dashboard to reload it.
110
+ ---
111
+
112
+ ## ๐Ÿš€ First Run & Configuration
113
+
114
+ On first launch termdeck detects that no `~/.termdeck-config.json` exists and runs an interactive setup wizard:
115
+
116
+ 1. **Which directory holds your projects?** โ€” Pick from suggestions (common folders like `~/Projects`, `~/dev`, plus every drive letter on Windows) or type a path.
117
+ 2. **Which folders are projects?** โ€” termdeck scans the directory and shows only folders that contain a `.git` directory or a `package.json` manifest. Multi-select with <kbd>Space</kbd>, confirm with <kbd>Enter</kbd>.
118
+ 3. **Per-project details** โ€” For each project you pick, termdeck asks its status (`live`, `exp`, `pend` or `scrap`, default `exp`), the dev-server port (default `3000`) and the package manager (`npm`, `pnpm` or `yarn` โ€” auto-detected from `pnpm-lock.yaml` / `yarn.lock`).
119
+
120
+ Every later launch skips straight to the dashboard.
121
+
122
+ > **Tip:** You can manually edit `~/.termdeck-config.json` if needed. Press <kbd>r</kbd> in the dashboard to reload.
123
+
124
+ ---
121
125
 
122
- | Field | Meaning |
126
+ ## โŒจ๏ธ Usage & Controls
127
+
128
+ ### CLI Flags
129
+
130
+ | Command | What it does |
123
131
  | --- | --- |
124
- | `devCommand` | command run for the Dev Server CTA (default `npm run dev`) |
125
- | `editorCommand` | command run in the new editor terminal (default `code .`) |
126
- | `agentCommand` | command run in the new agent terminal (default `opencode`) |
127
- | `openBrowser` | set to `false` (or pass `--no-open`) to keep the browser closed |
128
- | `port` | fallback port used if the dev server never prints a URL (default `3000`) |
129
- | `status` | `Experimental` ยท `Live` ยท `Working` ยท `Pending` |
130
-
131
- ## How each CTA works
132
-
133
- **Dev Server (in-app logs).** `cross-spawn` runs the dev command with `cwd` set
134
- to the project, `stdio: ['ignore','pipe','pipe']` and `FORCE_COLOR=0`, so nothing
135
- is attached to a terminal. Each stream is split into lines and pushed into the
136
- blessed-contrib `log` widget in the dashboard (batched every 120 ms โ€” dev
137
- servers can emit hundreds of lines per second). Every line is scanned for a
138
- localhost URL (`http://localhost:5173/`, `0.0.0.0:3000`, `listening on port
139
- 4200`, โ€ฆ); the first hit is normalised, and after a short delay the `open`
140
- package launches your default browser. If no URL shows up within ~9 seconds,
141
- termdeck assumes `http://localhost:<port || 3000>` and says so in the log pane.
142
- Processes are spawned detached on macOS/Linux and killed as a tree
143
- (`process.kill(-pid)` / `taskkill /T /F`), so a quit never leaves an orphaned
144
- Vite/Next server behind.
145
-
146
- **Editor / Agent (new terminal windows).** `cross-spawn` launches the OS
147
- terminal:
148
-
149
- - **macOS** โ€” `osascript -e 'tell application "Terminal" โ€ฆ do script "cd โ€ฆ && code ."'`
150
- - **Windows** โ€” `wt.exe -d "<dir>" cmd /k "code ."`, falling back to
151
- `cmd /c start "" /D "<dir>" cmd.exe /k "code ."` when Windows Terminal is not
152
- installed
153
- - **Linux** โ€” the first emulator found on `PATH` out of `gnome-terminal`,
154
- `konsole`, `xfce4-terminal`, `kitty`, `alacritty`, `wezterm`,
155
- `x-terminal-emulator`, `xterm` (each gets `--working-directory`/`-e` with
156
- `bash -lc` and `exec bash` so the window stays open)
157
-
158
- On Linux you can force a specific emulator with the `TERMDECK_TERMINAL`
159
- environment variable.
160
-
161
- ## Linking locally (test before publishing)
162
-
163
- From the project folder:
132
+ | `termdeck` | Launch the dashboard using the existing config (first run starts the wizard). |
133
+ | `termdeck --demo` | Launch with 14 sample projects (great for trying it out). |
134
+ | `termdeck --scan` | Re-run the interactive scanner: adds/updates projects in the config, merging with existing entries and preserving custom agent configs. |
135
+ | `termdeck --no-auto-restart` | Disable dev-server crash recovery for this session only. |
136
+ | `termdeck --reset` | Delete the config file and force a fresh first-run setup on the next launch. |
137
+ | `termdeck --no-update` | Disable the background auto-updater. |
138
+ | `termdeck --setup` | Re-run the setup wizard manually. |
139
+ | `termdeck --list` | Print the configured projects as a table and exit (no TUI). |
140
+ | `termdeck --no-open` | Do not auto-open the browser when a dev server starts. |
141
+
142
+ ### Keyboard Shortcuts
164
143
 
165
- ```bash
166
- npm install # install dependencies
167
- npm test # unit + end-to-end dev server tests (no TUI needed)
168
- npm run smoke # headless TUI smoke test: renders the dashboard, clicks a CTA
144
+ | Key | Action |
145
+ | --- | --- |
146
+ | <kbd>โ†‘</kbd> / <kbd>โ†“</kbd> or <kbd>j</kbd> / <kbd>k</kbd> | Navigate projects |
147
+ | <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | Cycle focus: project list โ†’ actions โ†’ output |
148
+ | <kbd>Enter</kbd> or <kbd>Space</kbd> | Activate the focused button |
149
+ | <kbd>r</kbd> / <kbd>d</kbd> | Run `npm run dev` for the selected project |
150
+ | <kbd>e</kbd> | Open the project in your editor in a new terminal |
151
+ | <kbd>c</kbd> | Open Claude in a new terminal |
152
+ | <kbd>x</kbd> | Open Codex in a new terminal |
153
+ | <kbd>o</kbd> | Open opencode in a new terminal |
154
+ | <kbd>f</kbd> | Open freebuff in a new terminal |
155
+ | <kbd>k</kbd> | Open kilocode in a new terminal |
156
+ | <kbd>s</kbd> | Cycle the selected project's status |
157
+ | <kbd>/</kbd> | Search projects by name (Enter commits, Esc cancels) |
158
+ | <kbd>1</kbd>โ€“<kbd>5</kbd> | Filter by status chip: all / live / exp / pend / scrap |
159
+ | <kbd>Shift</kbd>+<kbd>X</kbd> | Stop the selected project's dev server |
160
+ | <kbd>PgUp</kbd>/<kbd>PgDn</kbd>, mouse wheel | Scroll the dev server logs (<kbd>g</kbd> to follow the tail again) |
161
+ | <kbd>q</kbd> | Quit (stops every dev server it started) |
169
162
 
170
- npm link # symlinks this package into your global node_modules
171
- termdeck # now runs from anywhere with your edits live
163
+ > **Mouse Support:** All buttons and list items are fully clickable. Use the mouse wheel to scroll logs.
172
164
 
173
- # when you are done
174
- npm unlink -g termdeck
165
+ ---
166
+
167
+ ## โ“ FAQ
168
+
169
+ **How do I disable auto-updates?**
170
+ Pass `--no-update` when you launch the dashboard: `termdeck --no-update`. The npm registry is then never contacted and nothing is printed.
171
+
172
+ **A dev server keeps restarting โ€” how do I stop that?**
173
+ termdeck restarts a crashed dev server up to 3 times, then gives up and logs the failure. If you would rather not have any crash recovery for a session, launch with `termdeck --no-auto-restart`.
174
+
175
+ **Does my config get clobbered when I re-scan?**
176
+ No. `termdeck --scan` (or the setup wizard on a machine that already has a config) merges: projects you didn't touch stay exactly as they are, projects you re-select get their new status/port/package manager, and hand-written per-project overrides such as custom agent commands are kept.
177
+
178
+ ---
179
+
180
+ ## ๐Ÿ› ๏ธ Development & Contributing
181
+
182
+ ### Local Testing
183
+
184
+ ```bash
185
+ git clone https://github.com/barigalasunil/termdeck.git
186
+ cd termdeck
187
+ npm install
188
+ npm link # symlink into global node_modules
189
+ termdeck # runs from anywhere with your edits live
175
190
  ```
176
191
 
177
- `npm link` creates a global `termdeck` shim that points at this directory, so
178
- code changes take effect immediately โ€” no republishing. If you would rather not
179
- touch the global install, these work too:
192
+ ### Running Tests
180
193
 
181
194
  ```bash
182
- npm install -g . # real global install from the folder
183
- node bin/termdeck.js # run the entry point directly
184
- npm exec -- termdeck # run via the local package
195
+ npm test # unit + end-to-end dev server tests (64/64 passing โœ…)
196
+ npm run smoke # headless TUI smoke test
185
197
  ```
186
198
 
187
- Two tips while testing:
199
+ The smoke test drives a headless blessed screen: it verifies the dashboard renders, the dev-server CTA starts a real fixture server and streams its logs into the log pane, and that stopping the server cleans up the child process.
188
200
 
189
- - Keep your real config safe by pointing at a throwaway one:
190
- `TERMDECK_CONFIG=./scratch-config.json termdeck` (on Windows Git Bash use
191
- `TERMDECK_CONFIG=./scratch-config.json node bin/termdeck.js`).
192
- - `termdeck --list` prints the parsed config without starting the TUI, which is
193
- the quickest way to check that setup wrote what you expected.
201
+ ### Testing Auto-Updates
194
202
 
195
- When you are ready to publish:
203
+ The updater reads its registry endpoint from `TERMDECK_REGISTRY_URL`, so you can point it at a local mock. In one terminal, serve a fake registry that always claims a newer version:
196
204
 
197
205
  ```bash
198
- npm pack --dry-run # inspect exactly which files would be uploaded
199
- npm publish # needs an npm account; the package name must be free
206
+ node -e "require('http').createServer((q,s)=>{s.setHeader('content-type','application/json');s.end(JSON.stringify({version:'9.9.9'}))}).listen(4873)"
200
207
  ```
201
208
 
202
- The `bin` field in `package.json` plus the `#!/usr/bin/env node` shebang in
203
- `bin/termdeck.js` are what make the global `termdeck` command work.
209
+ Then run termdeck with the mock enabled:
210
+
211
+ ```bash
212
+ # macOS/Linux
213
+ TERMDECK_REGISTRY_URL=http://127.0.0.1:4873/termdeck/latest termdeck
204
214
 
205
- ## Troubleshooting
215
+ # Windows PowerShell
216
+ $env:TERMDECK_REGISTRY_URL="http://127.0.0.1:4873/termdeck/latest"; termdeck
217
+ ```
206
218
 
207
- | Symptom | Fix |
208
- | --- | --- |
209
- | `termdeck needs an interactive terminal` | first-run setup and the dashboard need a TTY. Use a real terminal, or `termdeck --list` |
210
- | Browser opens too early / too late | tune the port: the URL is only opened once it appears in the output. Silence your dev server's URL banner and termdeck falls back after ~9s |
211
- | "no terminal emulator found" | install one of the Linux terminals above or set `TERMDECK_TERMINAL` |
212
- | `opencode` not found in the new window | change `agentCommand` to whatever you use (`cursor .`, `claude`, `aider`, โ€ฆ) |
213
- | Log colours look plain | intentional: ANSI codes are stripped so the log pane stays readable in a terminal multiplexer |
214
- | Nothing appears when clicking | make sure you are *inside* the TUI window and the terminal reports mouse events (Windows Terminal, iTerm2, GNOME Terminal, VS Code all do) |
219
+ > The install always targets `@latest` on the **real** npm registry. Set the mock to your current version (e.g. `{"version":"2.0.0"}`) to exercise the "already up to date, no install" path, or use `--no-update` to skip the check entirely.
215
220
 
216
- ## Development
221
+ ### Releasing a Version
217
222
 
223
+ ```bash
224
+ npm version patch # 2.0.0 -> 2.0.1 (bug fixes)
225
+ npm version minor # adds backwards-compatible features
226
+ npm version major # breaking changes
227
+ npm publish
218
228
  ```
219
- bin/termdeck.js shebang shim -> src/index.js
220
- src/index.js CLI flags, setup-or-dashboard decision
221
- src/config.js ~/.termdeck-config.json + the inquirer wizard
222
- src/dashboard.js the blessed/blessed-contrib TUI
223
- src/devServer.js spawn + log streaming + URL detection + browser open
224
- src/terminal.js OS-specific "new terminal window" plans
225
- src/logView.js scrollable, follow-the-tail log pane
226
- src/util.js ANSI stripping, URL parsing, which(), killTree()
227
- test/run.js npm test โ€” unit tests + a real npm run dev lifecycle
228
- test/smoke.js npm run smoke โ€” headless render + real mouse click on a CTA
229
+
230
+ Publishing a higher version is what triggers the auto-update for everyone already running termdeck.
231
+
232
+ ### Unlink When Done
233
+
234
+ ```bash
235
+ npm unlink -g termdeck
229
236
  ```
230
237
 
231
- ## License
238
+ > **Tip:** Use `TERMDECK_CONFIG=./scratch-config.json termdeck` to test without touching your real config.
239
+
240
+ ---
241
+
242
+ ## ๐Ÿ“„ License
232
243
 
233
244
  MIT
245
+
246
+ ---
247
+
248
+ <div align="center">
249
+
250
+ **Built with โค๏ธ by [Sunil](https://github.com/barigalasunil)**
251
+
252
+ [GitHub](https://github.com/barigalasunil/termdeck) ยท [npm](https://www.npmjs.com/package/termdeck)
253
+
254
+ </div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "termdeck-cli",
3
- "version": "1.0.2",
4
- "description": "A terminal dashboard for your local dev projects: start dev servers with in-app logs, open your editor, or launch a coding agent in a fresh terminal window.",
3
+ "version": "2.0.2",
4
+ "description": "Terminal project control: a multi-pane TUI to manage your local dev projects โ€” dev servers, git state, process stats, and AI coding agents.",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "tui",
@@ -9,23 +9,24 @@
9
9
  "blessed",
10
10
  "blessed-contrib",
11
11
  "dev-server",
12
- "projects"
12
+ "projects",
13
+ "agents"
13
14
  ],
14
15
  "license": "MIT",
15
16
  "main": "src/index.js",
16
17
  "bin": {
17
- "termdeck": "bin/termdeck.js"
18
+ "termdeck": "src/index.js"
18
19
  },
19
20
  "files": [
20
- "bin",
21
21
  "src",
22
+ "sample-config.json",
22
23
  "README.md"
23
24
  ],
24
25
  "engines": {
25
26
  "node": ">=16"
26
27
  },
27
28
  "scripts": {
28
- "start": "node bin/termdeck.js",
29
+ "start": "node src/index.js",
29
30
  "test": "node test/run.js",
30
31
  "smoke": "node test/smoke.js"
31
32
  },
@@ -34,6 +35,7 @@
34
35
  "blessed-contrib": "^4.11.0",
35
36
  "cross-spawn": "^7.0.3",
36
37
  "inquirer": "^8.2.6",
37
- "open": "^8.4.2"
38
+ "open": "^8.4.2",
39
+ "pidusage": "^3.0.2"
38
40
  }
39
41
  }
@@ -0,0 +1,176 @@
1
+ {
2
+ "version": 2,
3
+ "root": "~/dev/projects",
4
+ "demoMode": true,
5
+ "autoRestart": true,
6
+ "devCommand": "npm run dev",
7
+ "editorCommand": "code .",
8
+ "agentCommand": "opencode",
9
+ "openBrowser": true,
10
+ "projects": [
11
+ {
12
+ "name": "hyperion-core",
13
+ "path": "hyperion-core",
14
+ "status": "live",
15
+ "port": 3000,
16
+ "packageManager": "pnpm",
17
+ "stack": "Next.js 14.2 ยท TypeScript 5.4 ยท Tailwind",
18
+ "branch": "feat/v2-query-optimizer",
19
+ "info": "core platform API and query engine",
20
+ "lastCommit": { "hash": "e8f20b4", "message": "feat: batch cache flush", "timestamp": "2025-05-18T16:30:00Z" },
21
+ "lastActivity": "12m ago"
22
+ },
23
+ {
24
+ "name": "atlas-engine",
25
+ "path": "atlas-engine",
26
+ "status": "live",
27
+ "port": 4000,
28
+ "packageManager": "npm",
29
+ "stack": "Node 20 ยท Express ยท Prisma",
30
+ "branch": "main",
31
+ "info": "data ingestion and normalization engine",
32
+ "lastCommit": { "hash": "c91d2aa", "message": "fix: retry backoff on S3 timeouts", "timestamp": "2025-05-18T14:02:00Z" },
33
+ "lastActivity": "2h ago"
34
+ },
35
+ {
36
+ "name": "orbit-controls",
37
+ "path": "orbit-controls",
38
+ "status": "live",
39
+ "port": 5000,
40
+ "packageManager": "yarn",
41
+ "stack": "React 18 ยท Vite ยท Zustand",
42
+ "branch": "develop",
43
+ "info": "mission control web UI",
44
+ "lastCommit": { "hash": "7f31ac9", "message": "feat: live telemetry widgets", "timestamp": "2025-05-18T09:47:00Z" },
45
+ "lastActivity": "7h ago"
46
+ },
47
+ {
48
+ "name": "neocortex-api",
49
+ "path": "neocortex-api",
50
+ "status": "live",
51
+ "port": 3001,
52
+ "packageManager": "pnpm",
53
+ "stack": "NestJS ยท PostgreSQL ยท Redis",
54
+ "branch": "main",
55
+ "info": "cognitive services REST API",
56
+ "lastCommit": { "hash": "d4e08f1", "message": "feat: vector search endpoint", "timestamp": "2025-05-17T20:15:00Z" },
57
+ "lastActivity": "1d ago"
58
+ },
59
+ {
60
+ "name": "quanta-cache",
61
+ "path": "quanta-cache",
62
+ "status": "live",
63
+ "port": 6379,
64
+ "packageManager": "npm",
65
+ "stack": "Go ยท Redis",
66
+ "branch": "feat/eviction-policy",
67
+ "info": "distributed in-memory cache layer",
68
+ "lastCommit": { "hash": "aa21c8e", "message": "feat: LFU eviction policy", "timestamp": "2025-05-17T11:20:00Z" },
69
+ "lastActivity": "1d ago"
70
+ },
71
+ {
72
+ "name": "ripple-mq",
73
+ "path": "ripple-mq",
74
+ "status": "live",
75
+ "port": 5672,
76
+ "packageManager": "pnpm",
77
+ "stack": "Elixir ยท RabbitMQ",
78
+ "branch": "main",
79
+ "info": "async event bus and worker queues",
80
+ "lastCommit": { "hash": "5f90b31", "message": "chore: upgrade amqp client", "timestamp": "2025-05-16T18:40:00Z" },
81
+ "lastActivity": "2d ago"
82
+ },
83
+ {
84
+ "name": "lumen-ui",
85
+ "path": "lumen-ui",
86
+ "status": "exp",
87
+ "port": 5173,
88
+ "packageManager": "npm",
89
+ "stack": "SolidJS ยท Tailwind",
90
+ "branch": "experimental/wip",
91
+ "info": "next-generation design system",
92
+ "lastCommit": { "hash": "1b0e23c", "message": "wip: token theming", "timestamp": "2025-05-18T12:05:00Z" },
93
+ "lastActivity": "4h ago"
94
+ },
95
+ {
96
+ "name": "sparkline-app",
97
+ "path": "sparkline-app",
98
+ "status": "exp",
99
+ "port": 8080,
100
+ "packageManager": "yarn",
101
+ "stack": "D3 ยท TypeScript",
102
+ "branch": "spikes/time-series",
103
+ "info": "time series visualizer spike",
104
+ "lastCommit": { "hash": "0ae4d77", "message": "spike: streaming chart", "timestamp": "2025-05-15T15:30:00Z" },
105
+ "lastActivity": "3d ago"
106
+ },
107
+ {
108
+ "name": "flux-router",
109
+ "path": "flux-router",
110
+ "status": "exp",
111
+ "port": 3100,
112
+ "packageManager": "pnpm",
113
+ "stack": "Go ยท gRPC",
114
+ "branch": "spike/grpc-gateway",
115
+ "info": "edge router prototype",
116
+ "lastCommit": { "hash": "71fcd64", "message": "spike: gateway handshake", "timestamp": "2025-05-14T10:12:00Z" },
117
+ "lastActivity": "4d ago"
118
+ },
119
+ {
120
+ "name": "stellar-auth",
121
+ "path": "stellar-auth",
122
+ "status": "pend",
123
+ "port": 4001,
124
+ "packageManager": "npm",
125
+ "stack": "Node 20 ยท JWT",
126
+ "branch": "main",
127
+ "info": "auth service - waiting on security review",
128
+ "lastCommit": { "hash": "2c8e9a4", "message": "docs: auth flow diagram", "timestamp": "2025-05-10T08:00:00Z" },
129
+ "lastActivity": "8d ago"
130
+ },
131
+ {
132
+ "name": "beacon-sdk",
133
+ "path": "beacon-sdk",
134
+ "status": "pend",
135
+ "packageManager": "pnpm",
136
+ "stack": "TypeScript SDK",
137
+ "branch": "next-release",
138
+ "info": "client library for the beacon API",
139
+ "lastCommit": { "hash": "6b3da17", "message": "feat: typed events", "timestamp": "2025-05-09T16:45:00Z" },
140
+ "lastActivity": "9d ago"
141
+ },
142
+ {
143
+ "name": "nova-cli",
144
+ "path": "nova-cli",
145
+ "status": "pend",
146
+ "packageManager": "npm",
147
+ "stack": "Node CLI",
148
+ "branch": "main",
149
+ "info": "developer CLI - specs not finalised",
150
+ "lastCommit": { "hash": "e77c9b2", "message": "init: project scaffold", "timestamp": "2025-05-05T13:00:00Z" },
151
+ "lastActivity": "2w ago"
152
+ },
153
+ {
154
+ "name": "drift-store",
155
+ "path": "drift-store",
156
+ "status": "scrap",
157
+ "packageManager": "npm",
158
+ "stack": "Node",
159
+ "branch": "archived/w1",
160
+ "info": "abandoned embedded store prototype",
161
+ "lastCommit": { "hash": "903fa18", "message": "abandoned: keep for reference", "timestamp": "2025-04-20T09:30:00Z" },
162
+ "lastActivity": "1mo ago"
163
+ },
164
+ {
165
+ "name": "quill-docs",
166
+ "path": "quill-docs",
167
+ "status": "scrap",
168
+ "packageManager": "yarn",
169
+ "stack": "Astro",
170
+ "branch": "main",
171
+ "info": "attempted docs rebuild, superseded",
172
+ "lastCommit": { "hash": "8d4ff32", "message": "docs: initial outline", "timestamp": "2025-04-15T17:20:00Z" },
173
+ "lastActivity": "1mo ago"
174
+ }
175
+ ]
176
+ }