@gigaflow/gmux 0.15.0 → 0.16.0
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/CHANGELOG.md +110 -80
- package/README.md +81 -57
- package/dist/adapters/claude-code.js +5 -2
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex.js +5 -2
- package/dist/adapters/codex.js.map +1 -1
- package/dist/cli/border-client.d.ts +1 -1
- package/dist/cli/border-client.js +1 -1
- package/dist/cli/commands/cockpit.d.ts +16 -6
- package/dist/cli/commands/cockpit.js +288 -20
- package/dist/cli/commands/cockpit.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +2 -19
- package/dist/cli/commands/daemon.js +39 -88
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/doctor.js +24 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/organize.d.ts +18 -0
- package/dist/cli/commands/organize.js +94 -0
- package/dist/cli/commands/organize.js.map +1 -0
- package/dist/cli/commands/setup.js +13 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/tmux.d.ts +56 -0
- package/dist/cli/commands/tmux.js +158 -28
- package/dist/cli/commands/tmux.js.map +1 -1
- package/dist/cli/gmux-render.d.ts +12 -1
- package/dist/cli/gmux-render.js +18 -11
- package/dist/cli/gmux-render.js.map +1 -1
- package/dist/cli/main.js +2 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/organize-confirm.d.ts +45 -0
- package/dist/cli/organize-confirm.js +57 -0
- package/dist/cli/organize-confirm.js.map +1 -0
- package/dist/cli/overlay-ask.d.ts +3 -1
- package/dist/cli/overlay-ask.js +5 -3
- package/dist/cli/overlay-ask.js.map +1 -1
- package/dist/cli/tmux-label.d.ts +11 -4
- package/dist/cli/tmux-label.js +17 -6
- package/dist/cli/tmux-label.js.map +1 -1
- package/dist/cli/work-report.d.ts +18 -0
- package/dist/cli/work-report.js +50 -0
- package/dist/cli/work-report.js.map +1 -0
- package/dist/core/bytes.d.ts +6 -0
- package/dist/core/bytes.js +13 -0
- package/dist/core/bytes.js.map +1 -0
- package/dist/core/organize-types.d.ts +95 -0
- package/dist/core/organize-types.js +33 -0
- package/dist/core/organize-types.js.map +1 -0
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +20 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/services/ask-router.d.ts +44 -0
- package/dist/services/ask-router.js +63 -0
- package/dist/services/ask-router.js.map +1 -0
- package/dist/services/daemon-lock.d.ts +31 -0
- package/dist/services/daemon-lock.js +77 -0
- package/dist/services/daemon-lock.js.map +1 -0
- package/dist/services/daemon.js +35 -6
- package/dist/services/daemon.js.map +1 -1
- package/dist/services/guardian.js +4 -4
- package/dist/services/guardian.js.map +1 -1
- package/dist/services/organize.d.ts +91 -0
- package/dist/services/organize.js +462 -0
- package/dist/services/organize.js.map +1 -0
- package/dist/services/tmux-gateway.d.ts +12 -0
- package/dist/services/tmux-gateway.js +7 -1
- package/dist/services/tmux-gateway.js.map +1 -1
- package/dist/services/tmux.d.ts +17 -1
- package/dist/services/tmux.js +34 -1
- package/dist/services/tmux.js.map +1 -1
- package/dist/services/work-view.d.ts +67 -0
- package/dist/services/work-view.js +155 -0
- package/dist/services/work-view.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
1
2
|
import { SCHEMA_VERSION } from "../../core/types.js";
|
|
2
3
|
import { cacheDir, configPath } from "../../core/paths.js";
|
|
3
4
|
import { allAdapters } from "../../adapters/registry.js";
|
|
@@ -7,6 +8,7 @@ import { onPath } from "../../services/providers.js";
|
|
|
7
8
|
import { defaultSummaryProvider } from "../../services/summarize.js";
|
|
8
9
|
import { discover } from "../../services/index-store.js";
|
|
9
10
|
import { supportsDisplayPopup, tmuxVersion } from "../../services/tmux.js";
|
|
11
|
+
import { inspectTmuxBindings, realTmuxFs } from "./tmux.js";
|
|
10
12
|
import { dim, green, jsonEnvelope, red, yellow } from "../format.js";
|
|
11
13
|
/**
|
|
12
14
|
* Report what is present, what is missing, and — for anything missing — the
|
|
@@ -60,6 +62,28 @@ export function registerDoctor(program) {
|
|
|
60
62
|
? {}
|
|
61
63
|
: { fix: tmuxV ? "Upgrade tmux to 3.2 or newer." : "brew install tmux, then `gmux tmux install`." }),
|
|
62
64
|
});
|
|
65
|
+
const bindings = inspectTmuxBindings(homedir(), realTmuxFs());
|
|
66
|
+
const bindingsOk = bindings.installed && !bindings.leftoverLegacy;
|
|
67
|
+
checks.push({
|
|
68
|
+
name: "tmux bindings",
|
|
69
|
+
ok: bindingsOk,
|
|
70
|
+
optional: true,
|
|
71
|
+
detail: !bindings.installed
|
|
72
|
+
? "not installed — ctrl-g will not open the cockpit"
|
|
73
|
+
: bindings.leftoverLegacy
|
|
74
|
+
? `installed in ${bindings.targetPath} but shadowed by leftover gigamanage bindings`
|
|
75
|
+
: `installed in ${bindings.targetPath}`,
|
|
76
|
+
...(bindingsOk ? {} : { fix: "gmux tmux install (or re-run `gmux setup`)" }),
|
|
77
|
+
});
|
|
78
|
+
if (bindings.leftoverLegacy) {
|
|
79
|
+
checks.push({
|
|
80
|
+
name: "legacy gigamanage tmux bindings",
|
|
81
|
+
ok: false,
|
|
82
|
+
optional: true,
|
|
83
|
+
detail: "old # >>> gigamanage >>> block still present — ctrl-g may open `gm overlay`",
|
|
84
|
+
fix: "gmux tmux install (migrates the old block) or delete the # >>> gigamanage >>> block from ~/.tmux.conf / ~/.tmux.conf.local",
|
|
85
|
+
});
|
|
86
|
+
}
|
|
63
87
|
// Config first: it explains every provider answer below it.
|
|
64
88
|
const config = await readConfig();
|
|
65
89
|
const hasConfigFile = await configExists();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gmux organize [intent...]`: turn the live tmux pane set into a plan that
|
|
3
|
+
* groups panes into per-project windows, print it as a numbered dry-run
|
|
4
|
+
* preview, and — only with `--apply` — execute it against real tmux.
|
|
5
|
+
*
|
|
6
|
+
* Dry-run is the default (see the organize spec's design invariant): sensing
|
|
7
|
+
* panes and building a plan never touches tmux. `RealTmuxGateway` is
|
|
8
|
+
* constructed, and `applyPlan` called, only inside the `--apply` branch.
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from "commander";
|
|
11
|
+
import type { OrganizePane, OrganizePlan } from "../../core/organize-types.js";
|
|
12
|
+
import type { PaneEntry } from "../../core/gmux-types.js";
|
|
13
|
+
/** A daemon `PaneEntry` (rich: state + label), flattened to `OrganizePane`.
|
|
14
|
+
* Exported so the ctrl-g cockpit plans from the same snapshot shape. */
|
|
15
|
+
export declare function fromPaneEntry(entry: PaneEntry): OrganizePane;
|
|
16
|
+
/** Pure. Renders a plan as the numbered dry-run preview printed to stdout. */
|
|
17
|
+
export declare function renderOrganizePreview(plan: OrganizePlan): string;
|
|
18
|
+
export declare function registerOrganize(program: Command): void;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gmux organize [intent...]`: turn the live tmux pane set into a plan that
|
|
3
|
+
* groups panes into per-project windows, print it as a numbered dry-run
|
|
4
|
+
* preview, and — only with `--apply` — execute it against real tmux.
|
|
5
|
+
*
|
|
6
|
+
* Dry-run is the default (see the organize spec's design invariant): sensing
|
|
7
|
+
* panes and building a plan never touches tmux. `RealTmuxGateway` is
|
|
8
|
+
* constructed, and `applyPlan` called, only inside the `--apply` branch.
|
|
9
|
+
*/
|
|
10
|
+
import { readSnapshotFile } from "../../services/daemon-client.js";
|
|
11
|
+
import { HeuristicOrganizePlanner, LlmOrganizePlanner, applyPlan } from "../../services/organize.js";
|
|
12
|
+
import { PaneRegistry } from "../../services/pane-registry.js";
|
|
13
|
+
import { RealTmuxGateway } from "../../services/tmux-gateway.js";
|
|
14
|
+
import { dim, green, yellow } from "../format.js";
|
|
15
|
+
/** A daemon `PaneEntry` (rich: state + label), flattened to `OrganizePane`.
|
|
16
|
+
* Exported so the ctrl-g cockpit plans from the same snapshot shape. */
|
|
17
|
+
export function fromPaneEntry(entry) {
|
|
18
|
+
return {
|
|
19
|
+
paneId: entry.identity.paneId,
|
|
20
|
+
windowId: entry.identity.windowId,
|
|
21
|
+
cwd: entry.identity.cwd,
|
|
22
|
+
command: entry.identity.command,
|
|
23
|
+
harness: entry.identity.harness,
|
|
24
|
+
state: entry.state,
|
|
25
|
+
label: entry.semantics?.label ?? null,
|
|
26
|
+
active: entry.identity.active,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** A live registry `PaneIdentity` (lean: no daemon around to know state/label). */
|
|
30
|
+
function fromPaneIdentity(identity) {
|
|
31
|
+
return {
|
|
32
|
+
paneId: identity.paneId,
|
|
33
|
+
windowId: identity.windowId,
|
|
34
|
+
cwd: identity.cwd,
|
|
35
|
+
command: identity.command,
|
|
36
|
+
harness: identity.harness,
|
|
37
|
+
state: null,
|
|
38
|
+
label: null,
|
|
39
|
+
active: identity.active,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sense the current panes. Prefers the daemon snapshot (richer: state +
|
|
44
|
+
* semantic label) when one is on disk; falls back to a live registry diff
|
|
45
|
+
* against a fresh `RealTmuxGateway` when no daemon is around. Never mutates
|
|
46
|
+
* tmux — `PaneRegistry.diff()` only calls `listPanes()`.
|
|
47
|
+
*/
|
|
48
|
+
async function sensePanes() {
|
|
49
|
+
const snap = await readSnapshotFile();
|
|
50
|
+
if (snap) {
|
|
51
|
+
return snap.snapshot.panes.filter((entry) => !entry.gone).map(fromPaneEntry);
|
|
52
|
+
}
|
|
53
|
+
const { present } = await new PaneRegistry(new RealTmuxGateway()).diff();
|
|
54
|
+
return present.map(fromPaneIdentity);
|
|
55
|
+
}
|
|
56
|
+
/** Pure. Renders a plan as the numbered dry-run preview printed to stdout. */
|
|
57
|
+
export function renderOrganizePreview(plan) {
|
|
58
|
+
const lines = [plan.summary];
|
|
59
|
+
plan.steps.forEach((step, i) => lines.push(`${i + 1}. ${step.description}`));
|
|
60
|
+
lines.push(dim("run with --apply to execute"));
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
export function registerOrganize(program) {
|
|
64
|
+
program
|
|
65
|
+
.command("organize [intent...]")
|
|
66
|
+
.description("reorganize the tmux workspace into per-project windows (dry-run by default)")
|
|
67
|
+
.option("--apply", "execute the plan instead of printing it", false)
|
|
68
|
+
.option("--json", "print the plan as JSON")
|
|
69
|
+
.option("--heuristic", "force the deterministic planner, ignoring any intent/provider")
|
|
70
|
+
.action(async (intentWords, opts) => {
|
|
71
|
+
const panes = await sensePanes();
|
|
72
|
+
const intent = intentWords.join(" ").trim();
|
|
73
|
+
const planner = opts.heuristic || intent === "" ? new HeuristicOrganizePlanner() : new LlmOrganizePlanner();
|
|
74
|
+
const plan = await planner.plan(panes, intent === "" ? undefined : intent);
|
|
75
|
+
if (!opts.apply) {
|
|
76
|
+
if (opts.json)
|
|
77
|
+
process.stdout.write(`${JSON.stringify(plan, null, 2)}\n`);
|
|
78
|
+
else
|
|
79
|
+
process.stdout.write(`${renderOrganizePreview(plan)}\n`);
|
|
80
|
+
return; // Dry-run: no gateway constructed, no tmux mutation.
|
|
81
|
+
}
|
|
82
|
+
const gateway = new RealTmuxGateway();
|
|
83
|
+
const { applied, skipped } = await applyPlan(plan, gateway);
|
|
84
|
+
if (opts.json) {
|
|
85
|
+
process.stdout.write(`${JSON.stringify({ applied, skipped }, null, 2)}\n`);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
process.stdout.write(`${green(`${applied.length} applied`)} / ${yellow(`${skipped.length} skipped`)}\n`);
|
|
89
|
+
for (const { step, reason } of skipped) {
|
|
90
|
+
process.stdout.write(`${dim(` skipped: ${step.description} — ${reason}`)}\n`);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=organize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organize.js","sourceRoot":"","sources":["../../../src/cli/commands/organize.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* is a choice a human made, which is why it goes to the config dir rather than
|
|
6
6
|
* the cache — see core/paths.ts.
|
|
7
7
|
*/
|
|
8
|
+
import { homedir } from "node:os";
|
|
8
9
|
import { createInterface } from "node:readline/promises";
|
|
9
10
|
import { GmuxError } from "../../core/errors.js";
|
|
10
11
|
import { DEFAULT_GMUX_CONFIG } from "../../core/gmux-types.js";
|
|
@@ -12,6 +13,7 @@ import { configPath } from "../../core/paths.js";
|
|
|
12
13
|
import { CONFIG_VERSION } from "../../core/types.js";
|
|
13
14
|
import { CUSTOM_PROVIDER_ID, PROVIDERS, onPath, toChoice, } from "../../services/providers.js";
|
|
14
15
|
import { parseCommand, readConfig, writeConfig } from "../../services/config.js";
|
|
16
|
+
import { maybeInstallTmuxBindings } from "./tmux.js";
|
|
15
17
|
import { bold, cyan, dim, green, yellow } from "../format.js";
|
|
16
18
|
function providerOption(spec) {
|
|
17
19
|
const installed = onPath(spec.binary);
|
|
@@ -183,6 +185,16 @@ export async function runSetupWizard(options = {}) {
|
|
|
183
185
|
? `${dim("gmux will call")} ${cyan(provider.command.join(" "))}${dim(". Change it any time with `gmux setup`.")}\n\n`
|
|
184
186
|
: `${dim("gmux will make no model calls. Run `gmux setup` if you change your mind.")}\n\n`);
|
|
185
187
|
process.stdout.write(`${dim(`guardian: ${guardianPolicy}. Change it any time with \`gmux setup\`.`)}\n\n`);
|
|
188
|
+
const tmux = await maybeInstallTmuxBindings({
|
|
189
|
+
available: onPath("tmux"),
|
|
190
|
+
ask: (question, fallback) => askYesNo(rl, question, fallback),
|
|
191
|
+
home: homedir(),
|
|
192
|
+
});
|
|
193
|
+
if (tmux.didInstall && tmux.path) {
|
|
194
|
+
process.stdout.write(`${green("✓")} ${dim(`tmux bindings saved to ${tmux.path}`)}\n`);
|
|
195
|
+
process.stdout.write(`${dim("reload with `tmux source-file ~/.tmux.conf`; then ctrl-g pulls up the cockpit.")}\n\n`);
|
|
196
|
+
}
|
|
197
|
+
process.stdout.write(`${dim("Start the workspace daemon with `gmux daemon` (leave it running). Nothing autostarts.")}\n\n`);
|
|
186
198
|
return config;
|
|
187
199
|
}
|
|
188
200
|
finally {
|
|
@@ -192,7 +204,7 @@ export async function runSetupWizard(options = {}) {
|
|
|
192
204
|
export function registerSetup(program) {
|
|
193
205
|
program
|
|
194
206
|
.command("setup")
|
|
195
|
-
.description("choose the harness gmux uses for model calls
|
|
207
|
+
.description("choose the harness gmux uses for model calls, the guardian policy, and tmux bindings")
|
|
196
208
|
.action(async () => {
|
|
197
209
|
await runSetupWizard();
|
|
198
210
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
export declare const BLOCK_START = "# >>> gmux >>>";
|
|
3
3
|
export declare const BLOCK_END = "# <<< gmux <<<";
|
|
4
|
+
export declare const LEGACY_BLOCK_START = "# >>> gigamanage >>>";
|
|
5
|
+
export declare const LEGACY_BLOCK_END = "# <<< gigamanage <<<";
|
|
6
|
+
/** Enough filesystem to pick the file tmux will actually keep. */
|
|
7
|
+
export interface TmuxPathStat {
|
|
8
|
+
exists(path: string): boolean;
|
|
9
|
+
isSymlink(path: string): boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface TmuxInspectFs extends TmuxPathStat {
|
|
12
|
+
read(path: string): string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface TmuxBindingsReport {
|
|
15
|
+
targetPath: string;
|
|
16
|
+
installed: boolean;
|
|
17
|
+
leftoverLegacy: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface InstallResult {
|
|
20
|
+
path: string;
|
|
21
|
+
removedLegacy: boolean;
|
|
22
|
+
}
|
|
4
23
|
/**
|
|
5
24
|
* The bindings gmux manages. `ctrl+g` pulls up the whole-workspace cockpit;
|
|
6
25
|
* `ctrl+shift+g` opens the history picker, whose Enter resumes into a new window.
|
|
@@ -8,4 +27,41 @@ export declare const BLOCK_END = "# <<< gmux <<<";
|
|
|
8
27
|
export declare function bindingsBlock(): string;
|
|
9
28
|
export declare function upsertBlock(existing: string, block: string): string;
|
|
10
29
|
export declare function removeBlock(existing: string): string;
|
|
30
|
+
/** Drop both the gmux block and a leftover `# >>> gigamanage >>>` block. */
|
|
31
|
+
export declare function stripManagedBlocks(existing: string): string;
|
|
32
|
+
export declare function tmuxConfFiles(home: string): {
|
|
33
|
+
conf: string;
|
|
34
|
+
local: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* True when this conf will actually load `~/.tmux.conf.local`.
|
|
38
|
+
*
|
|
39
|
+
* Oh My Tmux does `source "$TMUX_CONF_LOCAL"`. Vanilla tmux never reads
|
|
40
|
+
* `.tmux.conf.local`, and a dotfiles-repo symlink is not Oh My Tmux just
|
|
41
|
+
* because it is a symlink — those users want write-through.
|
|
42
|
+
*/
|
|
43
|
+
export declare function sourcesTmuxConfLocal(confText: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* The file `gmux tmux install` should write: `.tmux.conf.local` only when the
|
|
46
|
+
* live conf sources it. Otherwise `~/.tmux.conf` (including through a
|
|
47
|
+
* user-owned dotfiles symlink).
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveTmuxConfPath(home: string, fs: TmuxInspectFs): string;
|
|
50
|
+
export declare function realTmuxFs(): TmuxInspectFs;
|
|
51
|
+
export declare function inspectTmuxBindings(home: string, fs: TmuxInspectFs): TmuxBindingsReport;
|
|
52
|
+
/**
|
|
53
|
+
* Install the gmux block into the file tmux will keep, and strip leftover
|
|
54
|
+
* gigamanage/gmux blocks from both candidate files (including through a
|
|
55
|
+
* symlink, so a previous write-through install is cleaned up).
|
|
56
|
+
*/
|
|
57
|
+
export declare function installTmuxBindings(home: string): Promise<InstallResult>;
|
|
58
|
+
export declare function uninstallTmuxBindings(home: string): Promise<void>;
|
|
59
|
+
export declare function maybeInstallTmuxBindings(opts: {
|
|
60
|
+
available: boolean;
|
|
61
|
+
ask: (question: string, fallback: boolean) => Promise<boolean>;
|
|
62
|
+
home: string;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
didInstall: boolean;
|
|
65
|
+
path?: string;
|
|
66
|
+
}>;
|
|
11
67
|
export declare function registerTmux(program: Command): void;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readFileSync } from "node:fs";
|
|
1
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
2
3
|
import { homedir } from "node:os";
|
|
3
4
|
import { join } from "node:path";
|
|
4
|
-
import {
|
|
5
|
+
import { GmuxError } from "../../core/errors.js";
|
|
6
|
+
import { bold, dim, green, yellow } from "../format.js";
|
|
5
7
|
import { toggleWatch } from "../tmux-label.js";
|
|
6
8
|
export const BLOCK_START = "# >>> gmux >>>";
|
|
7
9
|
export const BLOCK_END = "# <<< gmux <<<";
|
|
10
|
+
export const LEGACY_BLOCK_START = "# >>> gigamanage >>>";
|
|
11
|
+
export const LEGACY_BLOCK_END = "# <<< gigamanage <<<";
|
|
8
12
|
/**
|
|
9
13
|
* The bindings gmux manages. `ctrl+g` pulls up the whole-workspace cockpit;
|
|
10
14
|
* `ctrl+shift+g` opens the history picker, whose Enter resumes into a new window.
|
|
@@ -23,25 +27,17 @@ export function bindingsBlock() {
|
|
|
23
27
|
BLOCK_END,
|
|
24
28
|
].join("\n");
|
|
25
29
|
}
|
|
26
|
-
function blockRegion(text) {
|
|
27
|
-
const start = text.indexOf(
|
|
30
|
+
function blockRegion(text, startMarker, endMarker) {
|
|
31
|
+
const start = text.indexOf(startMarker);
|
|
28
32
|
if (start === -1)
|
|
29
33
|
return null;
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
34
|
+
const endMarkerAt = text.indexOf(endMarker, start);
|
|
35
|
+
if (endMarkerAt === -1)
|
|
32
36
|
return null;
|
|
33
|
-
return { start, end:
|
|
37
|
+
return { start, end: endMarkerAt + endMarker.length };
|
|
34
38
|
}
|
|
35
|
-
|
|
36
|
-
const region = blockRegion(existing);
|
|
37
|
-
if (!region) {
|
|
38
|
-
const sep = existing.length === 0 || existing.endsWith("\n") ? "" : "\n";
|
|
39
|
-
return `${existing}${sep}${block}\n`;
|
|
40
|
-
}
|
|
41
|
-
return existing.slice(0, region.start) + block + existing.slice(region.end);
|
|
42
|
-
}
|
|
43
|
-
export function removeBlock(existing) {
|
|
44
|
-
const region = blockRegion(existing);
|
|
39
|
+
function removeMarkedBlock(existing, startMarker, endMarker) {
|
|
40
|
+
const region = blockRegion(existing, startMarker, endMarker);
|
|
45
41
|
if (!region)
|
|
46
42
|
return existing;
|
|
47
43
|
let before = existing.slice(0, region.start);
|
|
@@ -52,39 +48,173 @@ export function removeBlock(existing) {
|
|
|
52
48
|
after = after.slice(1);
|
|
53
49
|
return before + (before && after ? "\n" : "") + after;
|
|
54
50
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
51
|
+
export function upsertBlock(existing, block) {
|
|
52
|
+
const region = blockRegion(existing, BLOCK_START, BLOCK_END);
|
|
53
|
+
if (!region) {
|
|
54
|
+
const sep = existing.length === 0 || existing.endsWith("\n") ? "" : "\n";
|
|
55
|
+
return `${existing}${sep}${block}\n`;
|
|
56
|
+
}
|
|
57
|
+
return existing.slice(0, region.start) + block + existing.slice(region.end);
|
|
58
|
+
}
|
|
59
|
+
export function removeBlock(existing) {
|
|
60
|
+
return removeMarkedBlock(existing, BLOCK_START, BLOCK_END);
|
|
61
|
+
}
|
|
62
|
+
/** Drop both the gmux block and a leftover `# >>> gigamanage >>>` block. */
|
|
63
|
+
export function stripManagedBlocks(existing) {
|
|
64
|
+
return removeMarkedBlock(removeBlock(existing), LEGACY_BLOCK_START, LEGACY_BLOCK_END);
|
|
57
65
|
}
|
|
58
|
-
|
|
66
|
+
export function tmuxConfFiles(home) {
|
|
67
|
+
return { conf: join(home, ".tmux.conf"), local: join(home, ".tmux.conf.local") };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* True when this conf will actually load `~/.tmux.conf.local`.
|
|
71
|
+
*
|
|
72
|
+
* Oh My Tmux does `source "$TMUX_CONF_LOCAL"`. Vanilla tmux never reads
|
|
73
|
+
* `.tmux.conf.local`, and a dotfiles-repo symlink is not Oh My Tmux just
|
|
74
|
+
* because it is a symlink — those users want write-through.
|
|
75
|
+
*/
|
|
76
|
+
export function sourcesTmuxConfLocal(confText) {
|
|
77
|
+
return /tmux\.conf\.local|TMUX_CONF_LOCAL/.test(confText);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The file `gmux tmux install` should write: `.tmux.conf.local` only when the
|
|
81
|
+
* live conf sources it. Otherwise `~/.tmux.conf` (including through a
|
|
82
|
+
* user-owned dotfiles symlink).
|
|
83
|
+
*/
|
|
84
|
+
export function resolveTmuxConfPath(home, fs) {
|
|
85
|
+
const { conf, local } = tmuxConfFiles(home);
|
|
86
|
+
if (sourcesTmuxConfLocal(fs.read(conf) ?? ""))
|
|
87
|
+
return local;
|
|
88
|
+
return conf;
|
|
89
|
+
}
|
|
90
|
+
export function realTmuxFs() {
|
|
91
|
+
return {
|
|
92
|
+
exists: (path) => existsSync(path),
|
|
93
|
+
isSymlink: (path) => {
|
|
94
|
+
try {
|
|
95
|
+
return lstatSync(path).isSymbolicLink();
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
read: (path) => {
|
|
102
|
+
try {
|
|
103
|
+
return readFileSync(path, "utf8");
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function inspectTmuxBindings(home, fs) {
|
|
112
|
+
const { conf, local } = tmuxConfFiles(home);
|
|
113
|
+
const targetPath = resolveTmuxConfPath(home, fs);
|
|
114
|
+
const targetText = fs.read(targetPath) ?? "";
|
|
115
|
+
const leftoverLegacy = [conf, local].some((p) => (fs.read(p) ?? "").includes(LEGACY_BLOCK_START));
|
|
116
|
+
return {
|
|
117
|
+
targetPath,
|
|
118
|
+
installed: targetText.includes(BLOCK_START),
|
|
119
|
+
leftoverLegacy,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function readMaybe(path) {
|
|
59
123
|
try {
|
|
60
|
-
return await readFile(
|
|
124
|
+
return await readFile(path, "utf8");
|
|
61
125
|
}
|
|
62
126
|
catch {
|
|
63
|
-
return
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Install the gmux block into the file tmux will keep, and strip leftover
|
|
132
|
+
* gigamanage/gmux blocks from both candidate files (including through a
|
|
133
|
+
* symlink, so a previous write-through install is cleaned up).
|
|
134
|
+
*/
|
|
135
|
+
export async function installTmuxBindings(home) {
|
|
136
|
+
const fs = realTmuxFs();
|
|
137
|
+
const { conf, local } = tmuxConfFiles(home);
|
|
138
|
+
const target = resolveTmuxConfPath(home, fs);
|
|
139
|
+
const other = target === local ? conf : local;
|
|
140
|
+
let removedLegacy = false;
|
|
141
|
+
const rewrite = async (path, asTarget) => {
|
|
142
|
+
const existing = await readMaybe(path);
|
|
143
|
+
if (existing === null && !asTarget)
|
|
144
|
+
return;
|
|
145
|
+
const text = existing ?? "";
|
|
146
|
+
if (text.includes(LEGACY_BLOCK_START))
|
|
147
|
+
removedLegacy = true;
|
|
148
|
+
const stripped = stripManagedBlocks(text);
|
|
149
|
+
const next = asTarget ? upsertBlock(stripped, bindingsBlock()) : stripped;
|
|
150
|
+
if (next === text)
|
|
151
|
+
return;
|
|
152
|
+
try {
|
|
153
|
+
await writeFile(path, next, "utf8");
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
throw new GmuxError(`Could not write tmux bindings to ${path}.`, {
|
|
157
|
+
fix: `Check that ${path} is writable, then re-run gmux tmux install.`,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
// Target first so a failed cleanup cannot leave the user with no bindings.
|
|
162
|
+
await rewrite(target, true);
|
|
163
|
+
await rewrite(other, false);
|
|
164
|
+
return { path: target, removedLegacy };
|
|
165
|
+
}
|
|
166
|
+
export async function uninstallTmuxBindings(home) {
|
|
167
|
+
const { conf, local } = tmuxConfFiles(home);
|
|
168
|
+
for (const path of [conf, local]) {
|
|
169
|
+
const existing = await readMaybe(path);
|
|
170
|
+
if (existing === null)
|
|
171
|
+
continue;
|
|
172
|
+
const next = stripManagedBlocks(existing);
|
|
173
|
+
if (next !== existing)
|
|
174
|
+
await writeFile(path, next, "utf8");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export async function maybeInstallTmuxBindings(opts) {
|
|
178
|
+
if (!opts.available)
|
|
179
|
+
return { didInstall: false };
|
|
180
|
+
const report = inspectTmuxBindings(opts.home, realTmuxFs());
|
|
181
|
+
if (report.installed && !report.leftoverLegacy) {
|
|
182
|
+
return { didInstall: false, path: report.targetPath };
|
|
64
183
|
}
|
|
184
|
+
const ok = await opts.ask(`\n${bold("Install tmux bindings (ctrl-g cockpit, ctrl-shift-g picker)?")}\n${dim("Writes to ~/.tmux.conf.local when the live conf sources it (Oh My Tmux); otherwise ~/.tmux.conf.")}\n`, true);
|
|
185
|
+
if (!ok)
|
|
186
|
+
return { didInstall: false };
|
|
187
|
+
const result = await installTmuxBindings(opts.home);
|
|
188
|
+
return { didInstall: true, path: result.path };
|
|
65
189
|
}
|
|
66
190
|
export function registerTmux(program) {
|
|
67
191
|
const tmux = program.command("tmux").description("manage gmux's tmux key bindings");
|
|
68
192
|
tmux
|
|
69
193
|
.command("install")
|
|
70
|
-
.description("add the gmux cockpit/picker key bindings to ~/.tmux.conf")
|
|
194
|
+
.description("add the gmux cockpit/picker key bindings to ~/.tmux.conf (or ~/.tmux.conf.local)")
|
|
71
195
|
.action(async () => {
|
|
72
|
-
|
|
73
|
-
process.stdout.write(`${green("installed")} bindings in ${
|
|
196
|
+
const result = await installTmuxBindings(homedir());
|
|
197
|
+
process.stdout.write(`${green("installed")} bindings in ${result.path}\n`);
|
|
198
|
+
if (result.removedLegacy) {
|
|
199
|
+
process.stdout.write(`${dim("removed leftover gigamanage bindings so ctrl-g opens the cockpit")}\n`);
|
|
200
|
+
}
|
|
74
201
|
process.stdout.write(`${dim("reload with `tmux source-file ~/.tmux.conf`; then ctrl-g pulls up the cockpit, ctrl-shift-g browses")}\n`);
|
|
75
202
|
});
|
|
76
203
|
tmux
|
|
77
204
|
.command("uninstall")
|
|
78
|
-
.description("remove the gmux block from ~/.tmux.conf")
|
|
205
|
+
.description("remove the gmux block from ~/.tmux.conf and ~/.tmux.conf.local")
|
|
79
206
|
.action(async () => {
|
|
80
|
-
await
|
|
81
|
-
process.stdout.write(`${green("removed")} the gmux block from
|
|
207
|
+
await uninstallTmuxBindings(homedir());
|
|
208
|
+
process.stdout.write(`${green("removed")} the gmux block from ~/.tmux.conf and ~/.tmux.conf.local\n`);
|
|
82
209
|
});
|
|
83
210
|
tmux
|
|
84
211
|
.command("label <window>")
|
|
85
212
|
.description("toggle the live pane-border label agent (used by the M-g binding)")
|
|
86
213
|
.action(async (windowId) => {
|
|
87
|
-
await toggleWatch(windowId);
|
|
214
|
+
const result = await toggleWatch(windowId);
|
|
215
|
+
if (result === "daemon-owned") {
|
|
216
|
+
process.stderr.write(`${yellow("note")} gmux daemon is running and owns the pane borders; stop it with \`gmux daemon stop\` to use alt-g watch.\n`);
|
|
217
|
+
}
|
|
88
218
|
});
|
|
89
219
|
}
|
|
90
220
|
//# sourceMappingURL=tmux.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../../src/cli/commands/tmux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../../src/cli/commands/tmux.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
import { formatBytes } from "../core/bytes.js";
|
|
1
2
|
import type { HostPressure, WorkspaceSnapshot } from "../core/gmux-types.js";
|
|
2
|
-
export
|
|
3
|
+
export { formatBytes };
|
|
3
4
|
export declare function relativeTime(ts: number, now: number): string;
|
|
4
5
|
export declare function unattributedLine(host: HostPressure | null): string | null;
|
|
6
|
+
/** A broadcast question and each session's answer (null while still landing). */
|
|
7
|
+
export interface CockpitAsk {
|
|
8
|
+
question: string;
|
|
9
|
+
rows: {
|
|
10
|
+
label: string;
|
|
11
|
+
answer: string | null;
|
|
12
|
+
}[];
|
|
13
|
+
}
|
|
5
14
|
export interface RenderCockpitOptions {
|
|
6
15
|
width?: number;
|
|
7
16
|
stale?: {
|
|
8
17
|
ageMs: number;
|
|
9
18
|
} | null;
|
|
19
|
+
status?: string | null;
|
|
20
|
+
ask?: CockpitAsk | null;
|
|
10
21
|
}
|
|
11
22
|
export declare function renderCockpit(snapshot: WorkspaceSnapshot, now: number, widthOrOpts?: number | RenderCockpitOptions): string[];
|