@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.
Files changed (73) hide show
  1. package/CHANGELOG.md +110 -80
  2. package/README.md +81 -57
  3. package/dist/adapters/claude-code.js +5 -2
  4. package/dist/adapters/claude-code.js.map +1 -1
  5. package/dist/adapters/codex.js +5 -2
  6. package/dist/adapters/codex.js.map +1 -1
  7. package/dist/cli/border-client.d.ts +1 -1
  8. package/dist/cli/border-client.js +1 -1
  9. package/dist/cli/commands/cockpit.d.ts +16 -6
  10. package/dist/cli/commands/cockpit.js +288 -20
  11. package/dist/cli/commands/cockpit.js.map +1 -1
  12. package/dist/cli/commands/daemon.d.ts +2 -19
  13. package/dist/cli/commands/daemon.js +39 -88
  14. package/dist/cli/commands/daemon.js.map +1 -1
  15. package/dist/cli/commands/doctor.js +24 -0
  16. package/dist/cli/commands/doctor.js.map +1 -1
  17. package/dist/cli/commands/organize.d.ts +18 -0
  18. package/dist/cli/commands/organize.js +94 -0
  19. package/dist/cli/commands/organize.js.map +1 -0
  20. package/dist/cli/commands/setup.js +13 -1
  21. package/dist/cli/commands/setup.js.map +1 -1
  22. package/dist/cli/commands/tmux.d.ts +56 -0
  23. package/dist/cli/commands/tmux.js +158 -28
  24. package/dist/cli/commands/tmux.js.map +1 -1
  25. package/dist/cli/gmux-render.d.ts +12 -1
  26. package/dist/cli/gmux-render.js +18 -11
  27. package/dist/cli/gmux-render.js.map +1 -1
  28. package/dist/cli/main.js +2 -0
  29. package/dist/cli/main.js.map +1 -1
  30. package/dist/cli/organize-confirm.d.ts +45 -0
  31. package/dist/cli/organize-confirm.js +57 -0
  32. package/dist/cli/organize-confirm.js.map +1 -0
  33. package/dist/cli/overlay-ask.d.ts +3 -1
  34. package/dist/cli/overlay-ask.js +5 -3
  35. package/dist/cli/overlay-ask.js.map +1 -1
  36. package/dist/cli/tmux-label.d.ts +11 -4
  37. package/dist/cli/tmux-label.js +17 -6
  38. package/dist/cli/tmux-label.js.map +1 -1
  39. package/dist/cli/work-report.d.ts +18 -0
  40. package/dist/cli/work-report.js +50 -0
  41. package/dist/cli/work-report.js.map +1 -0
  42. package/dist/core/bytes.d.ts +6 -0
  43. package/dist/core/bytes.js +13 -0
  44. package/dist/core/bytes.js.map +1 -0
  45. package/dist/core/organize-types.d.ts +95 -0
  46. package/dist/core/organize-types.js +33 -0
  47. package/dist/core/organize-types.js.map +1 -0
  48. package/dist/core/paths.d.ts +13 -0
  49. package/dist/core/paths.js +20 -1
  50. package/dist/core/paths.js.map +1 -1
  51. package/dist/services/ask-router.d.ts +44 -0
  52. package/dist/services/ask-router.js +63 -0
  53. package/dist/services/ask-router.js.map +1 -0
  54. package/dist/services/daemon-lock.d.ts +31 -0
  55. package/dist/services/daemon-lock.js +77 -0
  56. package/dist/services/daemon-lock.js.map +1 -0
  57. package/dist/services/daemon.js +35 -6
  58. package/dist/services/daemon.js.map +1 -1
  59. package/dist/services/guardian.js +4 -4
  60. package/dist/services/guardian.js.map +1 -1
  61. package/dist/services/organize.d.ts +91 -0
  62. package/dist/services/organize.js +462 -0
  63. package/dist/services/organize.js.map +1 -0
  64. package/dist/services/tmux-gateway.d.ts +12 -0
  65. package/dist/services/tmux-gateway.js +7 -1
  66. package/dist/services/tmux-gateway.js.map +1 -1
  67. package/dist/services/tmux.d.ts +17 -1
  68. package/dist/services/tmux.js +34 -1
  69. package/dist/services/tmux.js.map +1 -1
  70. package/dist/services/work-view.d.ts +67 -0
  71. package/dist/services/work-view.js +155 -0
  72. package/dist/services/work-view.js.map +1 -0
  73. 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":"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"}
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 (summaries and `gmux ask`)")
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AAGzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAsC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,QAAQ,GAET,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU9D,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,WAAW;QACvB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE;QACvF,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAa,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExD,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,0DAA0D;QAClE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACnB,SAAS,CAAC;gBACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;gBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,wEAAwE;QAChF,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACzB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,UAAU;IACjB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO;IAC1E,MAAM,IAAI,SAAS,CAAC,6CAA6C,EAAE;QACjE,GAAG,EAAE,8FAA8F,UAAU,EAAE,YAAY;QAC3H,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,SAAS,CAAC,EAAa,EAAE,OAA0B,EAAE,QAAgB;IAClF,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,OAAO,CAAC,MAAM,aAAa,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,QAAQ,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,gCAAgC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAa,EAAE,QAAgB,EAAE,QAAiB;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/E,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,QAAQ,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,iBAAiB,CAAC,EAAa;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,CAC3C,uFAAuF;QACrF,wEAAwE,CAC3E,MAAM,CACR,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,0DAA0D,CAAC,IAAI,CAAC,CAAC;IACtH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;IAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEvE,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAC7C,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACjC,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkC,EAAE;IACvE,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;QAEpC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CACnC,6GAA6G,CAC9G,IAAI,CACN,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ;gBAC/B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrC,CAAC,CAAC,0BAA0B,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,yEAAyE,CAAC,MAAM,CACxF,CAAC;QAEF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;QAE1E,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEnD,iFAAiF;QACjF,MAAM,aAAa,GAAG,QAAQ;YAC5B,CAAC,CAAC,MAAM,QAAQ,CACZ,EAAE,EACF,KAAK,IAAI,CAAC,iEAAiE,CAAC,KAAK,GAAG,CAClF,mEAAmE,CACpE,IAAI,EACL,IAAI,CACL;YACH,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,MAAM,GAAa;YACvB,OAAO,EAAE,cAAc;YACvB,QAAQ;YACR,aAAa;YACb,IAAI,EAAE,EAAE,GAAG,mBAAmB,EAAE,cAAc,EAAE;SACjD,CAAC;QACF,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,QAAQ;YACN,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,yCAAyC,CAAC,MAAM;YACrH,CAAC,CAAC,GAAG,GAAG,CAAC,0EAA0E,CAAC,MAAM,CAC7F,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAa,cAAc,2CAA2C,CAAC,MAAM,CAAC,CAAC;QAE3G,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AAGzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAsC,MAAM,qBAAqB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,QAAQ,GAET,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU9D,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,WAAW;QACvB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE;QACvF,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAa,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExD,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,0DAA0D;QAClE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACnB,SAAS,CAAC;gBACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;gBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,wEAAwE;QAChF,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACzB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,UAAU;IACjB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO;IAC1E,MAAM,IAAI,SAAS,CAAC,6CAA6C,EAAE;QACjE,GAAG,EAAE,8FAA8F,UAAU,EAAE,YAAY;QAC3H,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,SAAS,CAAC,EAAa,EAAE,OAA0B,EAAE,QAAgB;IAClF,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,OAAO,CAAC,MAAM,aAAa,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,QAAQ,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,gCAAgC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAa,EAAE,QAAgB,EAAE,QAAiB;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/E,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,QAAQ,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,iBAAiB,CAAC,EAAa;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,CAC3C,uFAAuF;QACrF,wEAAwE,CAC3E,MAAM,CACR,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,0DAA0D,CAAC,IAAI,CAAC,CAAC;IACtH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;IAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEvE,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAC7C,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACjC,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkC,EAAE;IACvE,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;QAEpC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CACnC,6GAA6G,CAC9G,IAAI,CACN,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ;gBAC/B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBACrC,CAAC,CAAC,0BAA0B,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,yEAAyE,CAAC,MAAM,CACxF,CAAC;QAEF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;QAE1E,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEnD,iFAAiF;QACjF,MAAM,aAAa,GAAG,QAAQ;YAC5B,CAAC,CAAC,MAAM,QAAQ,CACZ,EAAE,EACF,KAAK,IAAI,CAAC,iEAAiE,CAAC,KAAK,GAAG,CAClF,mEAAmE,CACpE,IAAI,EACL,IAAI,CACL;YACH,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,MAAM,GAAa;YACvB,OAAO,EAAE,cAAc;YACvB,QAAQ;YACR,aAAa;YACb,IAAI,EAAE,EAAE,GAAG,mBAAmB,EAAE,cAAc,EAAE;SACjD,CAAC;QACF,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,QAAQ;YACN,CAAC,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,yCAAyC,CAAC,MAAM;YACrH,CAAC,CAAC,GAAG,GAAG,CAAC,0EAA0E,CAAC,MAAM,CAC7F,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAa,cAAc,2CAA2C,CAAC,MAAM,CAAC,CAAC;QAE3G,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC;YAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAC7D,IAAI,EAAE,OAAO,EAAE;SAChB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;YACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,gFAAgF,CAAC,MAAM,CAC/F,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,uFAAuF,CAAC,MAAM,CACtG,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sFAAsF,CAAC;SACnG,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -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 { dim, green } from "../format.js";
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(BLOCK_START);
30
+ function blockRegion(text, startMarker, endMarker) {
31
+ const start = text.indexOf(startMarker);
28
32
  if (start === -1)
29
33
  return null;
30
- const endMarker = text.indexOf(BLOCK_END, start);
31
- if (endMarker === -1)
34
+ const endMarkerAt = text.indexOf(endMarker, start);
35
+ if (endMarkerAt === -1)
32
36
  return null;
33
- return { start, end: endMarker + BLOCK_END.length };
37
+ return { start, end: endMarkerAt + endMarker.length };
34
38
  }
35
- export function upsertBlock(existing, block) {
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 confPath() {
56
- return join(homedir(), ".tmux.conf");
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
- async function readConf() {
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(confPath(), "utf8");
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
- await writeFile(confPath(), upsertBlock(await readConf(), bindingsBlock()), "utf8");
73
- process.stdout.write(`${green("installed")} bindings in ${confPath()}\n`);
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 writeFile(confPath(), removeBlock(await readConf()), "utf8");
81
- process.stdout.write(`${green("removed")} the gmux block from ${confPath()}\n`);
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":"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"}
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 declare function formatBytes(n: number): string;
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[];