@generativereality/cctabs 0.3.1 → 0.3.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/.claude-plugin/plugin.json +1 -1
- package/README.md +6 -1
- package/dist/index.js +35 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cctabs",
|
|
3
3
|
"description": "Claude Code tab manager. Terminal tabs as the UI, no tmux. Claude can orchestrate its own sibling sessions.",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "generativereality",
|
|
7
7
|
"url": "https://cctabs.com"
|
package/README.md
CHANGED
|
@@ -206,11 +206,16 @@ flags = ["--allow-dangerously-skip-permissions"]
|
|
|
206
206
|
| Terminal | Status |
|
|
207
207
|
|----------|--------|
|
|
208
208
|
| [Wave Terminal](https://waveterm.dev) | ✅ Full support |
|
|
209
|
+
| [Tabby](https://tabby.sh) | ✅ Full support (requires the [`tabby-cctabs`](./tabby-plugin/) companion plugin) |
|
|
209
210
|
| iTerm2 | Planned |
|
|
210
211
|
| Ghostty | Planned |
|
|
211
212
|
| Warp | Planned |
|
|
212
213
|
|
|
213
|
-
Wave is supported via its unix socket RPC. Other terminals will follow as adapters — PRs welcome.
|
|
214
|
+
Wave is supported via its unix socket RPC. Tabby is supported via a small companion plugin that exposes a localhost HTTP API the cctabs CLI talks to — install with `cctabs install-tabby-plugin`. Other terminals will follow as adapters — PRs welcome.
|
|
215
|
+
|
|
216
|
+
### Login shells on macOS
|
|
217
|
+
|
|
218
|
+
cctabs-spawned tabs default to **login shells** (`zsh -l`, `bash -l`, etc.) so PATH is initialised the same way Tabby's UI-spawned tabs are. Without `-l`, macOS's `/etc/zprofile` doesn't run, `path_helper` doesn't populate `/usr/local/bin` and `/opt/homebrew/bin` from `/etc/paths`, and brand-new tabs are missing Node, Homebrew, and anything else that lives there. Symptoms: `env: node: No such file or directory` in Claude Code's Bash tool, plugin MCP servers failing to start with ENOENT when they shell out to `npx`, and cctabs CLI itself failing inside the tab it just spawned. See [Tabby issue #2](https://github.com/Eugeny/tabby/issues/2) for the historical context. Pass an explicit `args` array (including `[]`) when calling the `/tabs` endpoint if you need a non-login shell.
|
|
214
219
|
|
|
215
220
|
## License
|
|
216
221
|
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { consola } from "consola";
|
|
|
11
11
|
import * as p from "@clack/prompts";
|
|
12
12
|
//#region package.json
|
|
13
13
|
var name = "@generativereality/cctabs";
|
|
14
|
-
var version = "0.3.
|
|
14
|
+
var version = "0.3.2";
|
|
15
15
|
var description = "Claude Code tab manager. Terminal tabs as the UI, no tmux.";
|
|
16
16
|
var package_default = {
|
|
17
17
|
name,
|
|
@@ -2601,6 +2601,38 @@ function checkTabbyPlugin() {
|
|
|
2601
2601
|
hint: "Run `cctabs install-tabby-plugin` from inside a Tabby tab — it npm-installs the plugin and reopens Tabby. Or do it by hand: `npm install --legacy-peer-deps --prefix \"$HOME/Library/Application Support/tabby/plugins\" tabby-cctabs`, then quit + reopen Tabby."
|
|
2602
2602
|
};
|
|
2603
2603
|
}
|
|
2604
|
+
/**
|
|
2605
|
+
* Probe whether `node` is findable in a freshly spawned shell — the canonical
|
|
2606
|
+
* symptom of the macOS non-login PATH bug. Spawning `zsh -l -c 'command -v
|
|
2607
|
+
* node'` simulates the same login-shell init (/etc/zprofile → path_helper)
|
|
2608
|
+
* that cctabs now uses when it opens new Tabby tabs. If this fails, brand-new
|
|
2609
|
+
* tabs will also fail to find Node, every plugin MCP that shells out to npx
|
|
2610
|
+
* will ENOENT, and the cctabs CLI itself becomes unusable from inside those
|
|
2611
|
+
* tabs (chicken-and-egg). The remediation hint covers both the upstream-fix
|
|
2612
|
+
* path (rely on a recent cctabs that defaults to `-l`) and the dotfile
|
|
2613
|
+
* workaround for users on older versions or non-Tabby terminals.
|
|
2614
|
+
*/
|
|
2615
|
+
function checkSpawnedShellPath() {
|
|
2616
|
+
const r = spawnSync("zsh", [
|
|
2617
|
+
"-l",
|
|
2618
|
+
"-c",
|
|
2619
|
+
"command -v node"
|
|
2620
|
+
], {
|
|
2621
|
+
encoding: "utf-8",
|
|
2622
|
+
timeout: 3e3
|
|
2623
|
+
});
|
|
2624
|
+
if (r.status === 0 && r.stdout?.trim()) return {
|
|
2625
|
+
name: "Spawned shell PATH (node findable)",
|
|
2626
|
+
status: "ok",
|
|
2627
|
+
detail: r.stdout.trim()
|
|
2628
|
+
};
|
|
2629
|
+
return {
|
|
2630
|
+
name: "Spawned shell PATH",
|
|
2631
|
+
status: "warn",
|
|
2632
|
+
detail: r.error?.message ?? r.stderr?.trim() ?? "node not found in a login zsh",
|
|
2633
|
+
hint: "A login zsh cannot find `node`. Either node is not installed, or PATH is broken. On macOS, `/usr/local/bin` is added by /etc/zprofile's path_helper — non-login shells skip it. Add `export PATH=\"/usr/local/bin:$PATH\"` to ~/.zshenv as a belt-and-braces fix."
|
|
2634
|
+
};
|
|
2635
|
+
}
|
|
2604
2636
|
function checkWaveDb() {
|
|
2605
2637
|
if (!existsSync(WAVE_DB_PATH)) return { result: {
|
|
2606
2638
|
name: "Wave DB",
|
|
@@ -2705,6 +2737,7 @@ const doctorCommand = define({
|
|
|
2705
2737
|
const results = [];
|
|
2706
2738
|
let waveDb = null;
|
|
2707
2739
|
results.push(checkTerminal(terminal));
|
|
2740
|
+
results.push(checkSpawnedShellPath());
|
|
2708
2741
|
if (terminal === "tabby") results.push(checkTabbyPlugin());
|
|
2709
2742
|
if (terminal === "wave") {
|
|
2710
2743
|
results.push(checkWaveAccessibility());
|
|
@@ -2852,7 +2885,7 @@ const defaultCommand = define({
|
|
|
2852
2885
|
description,
|
|
2853
2886
|
args: {},
|
|
2854
2887
|
async run() {
|
|
2855
|
-
await sessionsCommand.run?.call(this, {
|
|
2888
|
+
await sessionsCommand.run?.call(this, { values: {} });
|
|
2856
2889
|
}
|
|
2857
2890
|
});
|
|
2858
2891
|
const subCommands = new Map([
|