@ironbee-ai/cli 0.12.0 → 0.13.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 (138) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +3 -2
  3. package/dist/assets/banner.txt +1 -1
  4. package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
  5. package/dist/clients/claude/hooks/session-status.js +8 -2
  6. package/dist/clients/claude/hooks/session-status.js.map +1 -1
  7. package/dist/clients/claude/index.d.ts.map +1 -1
  8. package/dist/clients/claude/index.js +5 -0
  9. package/dist/clients/claude/index.js.map +1 -1
  10. package/dist/clients/cursor/index.d.ts.map +1 -1
  11. package/dist/clients/cursor/index.js +6 -0
  12. package/dist/clients/cursor/index.js.map +1 -1
  13. package/dist/clients/registry.d.ts +8 -9
  14. package/dist/clients/registry.d.ts.map +1 -1
  15. package/dist/clients/registry.js +13 -11
  16. package/dist/clients/registry.js.map +1 -1
  17. package/dist/commands/install.d.ts.map +1 -1
  18. package/dist/commands/install.js +4 -5
  19. package/dist/commands/install.js.map +1 -1
  20. package/dist/commands/register.d.ts +0 -1
  21. package/dist/commands/register.d.ts.map +1 -1
  22. package/dist/commands/register.js +7 -27
  23. package/dist/commands/register.js.map +1 -1
  24. package/dist/commands/uninstall.d.ts +2 -3
  25. package/dist/commands/uninstall.d.ts.map +1 -1
  26. package/dist/commands/uninstall.js +3 -4
  27. package/dist/commands/uninstall.js.map +1 -1
  28. package/dist/commands/unregister.d.ts +0 -1
  29. package/dist/commands/unregister.d.ts.map +1 -1
  30. package/dist/commands/unregister.js +3 -24
  31. package/dist/commands/unregister.js.map +1 -1
  32. package/dist/index.js +33 -15
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/fs-prune.d.ts +20 -0
  35. package/dist/lib/fs-prune.d.ts.map +1 -0
  36. package/dist/lib/fs-prune.js +72 -0
  37. package/dist/lib/fs-prune.js.map +1 -0
  38. package/dist/lib/projects-registry.d.ts +6 -13
  39. package/dist/lib/projects-registry.d.ts.map +1 -1
  40. package/dist/lib/projects-registry.js +11 -46
  41. package/dist/lib/projects-registry.js.map +1 -1
  42. package/dist/tui/command.d.ts +18 -0
  43. package/dist/tui/command.d.ts.map +1 -0
  44. package/dist/tui/command.js +87 -0
  45. package/dist/tui/command.js.map +1 -0
  46. package/dist/tui/config/area.d.ts +6 -0
  47. package/dist/tui/config/area.d.ts.map +1 -0
  48. package/dist/tui/config/area.js +16 -0
  49. package/dist/tui/config/area.js.map +1 -0
  50. package/dist/tui/config/docs.d.ts +28 -0
  51. package/dist/tui/config/docs.d.ts.map +1 -0
  52. package/dist/tui/config/docs.js +68 -0
  53. package/dist/tui/config/docs.js.map +1 -0
  54. package/dist/tui/config/edit.d.ts +36 -0
  55. package/dist/tui/config/edit.d.ts.map +1 -0
  56. package/dist/tui/config/edit.js +69 -0
  57. package/dist/tui/config/edit.js.map +1 -0
  58. package/dist/tui/config/introspect.d.ts +58 -0
  59. package/dist/tui/config/introspect.d.ts.map +1 -0
  60. package/dist/tui/config/introspect.js +93 -0
  61. package/dist/tui/config/introspect.js.map +1 -0
  62. package/dist/tui/config/schema.d.ts +81 -0
  63. package/dist/tui/config/schema.d.ts.map +1 -0
  64. package/dist/tui/config/schema.js +534 -0
  65. package/dist/tui/config/schema.js.map +1 -0
  66. package/dist/tui/config/tree.d.ts +39 -0
  67. package/dist/tui/config/tree.d.ts.map +1 -0
  68. package/dist/tui/config/tree.js +59 -0
  69. package/dist/tui/config/tree.js.map +1 -0
  70. package/dist/tui/config/value.d.ts +75 -0
  71. package/dist/tui/config/value.d.ts.map +1 -0
  72. package/dist/tui/config/value.js +228 -0
  73. package/dist/tui/config/value.js.map +1 -0
  74. package/dist/tui/config/view.d.ts +13 -0
  75. package/dist/tui/config/view.d.ts.map +1 -0
  76. package/dist/tui/config/view.js +423 -0
  77. package/dist/tui/config/view.js.map +1 -0
  78. package/dist/tui/import/area.d.ts +11 -0
  79. package/dist/tui/import/area.d.ts.map +1 -0
  80. package/dist/tui/import/area.js +202 -0
  81. package/dist/tui/import/area.js.map +1 -0
  82. package/dist/tui/index.d.ts +9 -0
  83. package/dist/tui/index.d.ts.map +1 -0
  84. package/dist/tui/index.js +14 -0
  85. package/dist/tui/index.js.map +1 -0
  86. package/dist/tui/platforms/area.d.ts +12 -0
  87. package/dist/tui/platforms/area.d.ts.map +1 -0
  88. package/dist/tui/platforms/area.js +228 -0
  89. package/dist/tui/platforms/area.js.map +1 -0
  90. package/dist/tui/projects/area.d.ts +26 -0
  91. package/dist/tui/projects/area.d.ts.map +1 -0
  92. package/dist/tui/projects/area.js +588 -0
  93. package/dist/tui/projects/area.js.map +1 -0
  94. package/dist/tui/queue/area.d.ts +11 -0
  95. package/dist/tui/queue/area.d.ts.map +1 -0
  96. package/dist/tui/queue/area.js +338 -0
  97. package/dist/tui/queue/area.js.map +1 -0
  98. package/dist/tui/queue/read.d.ts +49 -0
  99. package/dist/tui/queue/read.d.ts.map +1 -0
  100. package/dist/tui/queue/read.js +261 -0
  101. package/dist/tui/queue/read.js.map +1 -0
  102. package/dist/tui/sessions/area.d.ts +10 -0
  103. package/dist/tui/sessions/area.d.ts.map +1 -0
  104. package/dist/tui/sessions/area.js +266 -0
  105. package/dist/tui/sessions/area.js.map +1 -0
  106. package/dist/tui/sessions/read.d.ts +79 -0
  107. package/dist/tui/sessions/read.d.ts.map +1 -0
  108. package/dist/tui/sessions/read.js +202 -0
  109. package/dist/tui/sessions/read.js.map +1 -0
  110. package/dist/tui/shell/area.d.ts +47 -0
  111. package/dist/tui/shell/area.d.ts.map +1 -0
  112. package/dist/tui/shell/area.js +13 -0
  113. package/dist/tui/shell/area.js.map +1 -0
  114. package/dist/tui/shell/frame.d.ts +23 -0
  115. package/dist/tui/shell/frame.d.ts.map +1 -0
  116. package/dist/tui/shell/frame.js +91 -0
  117. package/dist/tui/shell/frame.js.map +1 -0
  118. package/dist/tui/shell/registry.d.ts +11 -0
  119. package/dist/tui/shell/registry.d.ts.map +1 -0
  120. package/dist/tui/shell/registry.js +29 -0
  121. package/dist/tui/shell/registry.js.map +1 -0
  122. package/dist/tui/shell/rerender.d.ts +16 -0
  123. package/dist/tui/shell/rerender.d.ts.map +1 -0
  124. package/dist/tui/shell/rerender.js +34 -0
  125. package/dist/tui/shell/rerender.js.map +1 -0
  126. package/dist/tui/shell/session.d.ts +75 -0
  127. package/dist/tui/shell/session.d.ts.map +1 -0
  128. package/dist/tui/shell/session.js +333 -0
  129. package/dist/tui/shell/session.js.map +1 -0
  130. package/dist/tui/shell/shell.d.ts +16 -0
  131. package/dist/tui/shell/shell.d.ts.map +1 -0
  132. package/dist/tui/shell/shell.js +213 -0
  133. package/dist/tui/shell/shell.js.map +1 -0
  134. package/dist/tui/shell/util.d.ts +18 -0
  135. package/dist/tui/shell/util.d.ts.map +1 -0
  136. package/dist/tui/shell/util.js +31 -0
  137. package/dist/tui/shell/util.js.map +1 -0
  138. package/package.json +3 -1
@@ -0,0 +1,588 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Projects area
4
+ *
5
+ * Two clearly-separated sections, only ONE of which holds the keyboard at a time
6
+ * (Tab toggles; the active one gets a ▸ label + highlighted border, the other
7
+ * dims). Defaults to the Current directory panel. Distinct, STABLE letters —
8
+ * i install / x uninstall / a register / d unregister / c make active — so
9
+ * opposite actions never share a key; i/x/d mean the same thing in both sections
10
+ * (gated, dispatched to the cwd or the selected row by the active one):
11
+ * - a top "Current directory" panel — everything scoped to the cwd / -p the
12
+ * TUI launched in: `i` install here, `x` uninstall here, `a` register here,
13
+ * `d` unregister here, `c` (or Enter) make active. The action that applies
14
+ * now is bold, its opposite dimmed (e.g. installed → x bold, i dimmed).
15
+ * - a "Registered projects" list + detail — everything scoped to the SELECTED
16
+ * registered project (`↑/↓` move, `Enter` switch active, `i` install, `x`
17
+ * uninstall, `d` unregister). The split keeps "which command acts on what"
18
+ * unambiguous.
19
+ *
20
+ * register (a) / unregister (d) are pure inventory writes (applied immediately);
21
+ * install (i/n) / uninstall (x/n) touch artifacts and run in the FOREGROUND via
22
+ * session.runWithOutput (stdout captured into a pane). A client picker (the
23
+ * --client analog) is shown when >1 client is registered.
24
+ */
25
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ var desc = Object.getOwnPropertyDescriptor(m, k);
28
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29
+ desc = { enumerable: true, get: function() { return m[k]; } };
30
+ }
31
+ Object.defineProperty(o, k2, desc);
32
+ }) : (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ o[k2] = m[k];
35
+ }));
36
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
37
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
38
+ }) : function(o, v) {
39
+ o["default"] = v;
40
+ });
41
+ var __importStar = (this && this.__importStar) || (function () {
42
+ var ownKeys = function(o) {
43
+ ownKeys = Object.getOwnPropertyNames || function (o) {
44
+ var ar = [];
45
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
46
+ return ar;
47
+ };
48
+ return ownKeys(o);
49
+ };
50
+ return function (mod) {
51
+ if (mod && mod.__esModule) return mod;
52
+ var result = {};
53
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
54
+ __setModuleDefault(result, mod);
55
+ return result;
56
+ };
57
+ })();
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.projectsArea = void 0;
60
+ const blessed = __importStar(require("blessed"));
61
+ const fs_1 = require("fs");
62
+ const path_1 = require("path");
63
+ const registry_1 = require("../../clients/registry");
64
+ const install_1 = require("../../commands/install");
65
+ const uninstall_1 = require("../../commands/uninstall");
66
+ const config_1 = require("../../lib/config");
67
+ const projects_registry_1 = require("../../lib/projects-registry");
68
+ const util_1 = require("../shell/util");
69
+ const CWD_PANEL_HEIGHT = 6;
70
+ function basename(p) {
71
+ const parts = p.replace(/[/\\]+$/, "").split(/[/\\]/);
72
+ return parts[parts.length - 1] || p;
73
+ }
74
+ function mountProjectsView(ctx) {
75
+ const launchDir = ctx.session.launchDir;
76
+ /** Canonical form of a path (matches how the registry stores entries); raw on failure. */
77
+ function safeCanonical(p) {
78
+ try {
79
+ return (0, projects_registry_1.canonicalizePath)(p);
80
+ }
81
+ catch {
82
+ return p;
83
+ }
84
+ }
85
+ const cwdCanonical = safeCanonical(launchDir);
86
+ let projects = (0, projects_registry_1.listProjects)();
87
+ // Default the cursor to the cwd's row when it's already registered, so the
88
+ // current directory is the selected project on entry (it's also the default
89
+ // active project — session.projectDir starts as launchDir).
90
+ let index = Math.max(0, projects.findIndex((p) => p.path === cwdCanonical));
91
+ // The active project, in canonical form, recomputed each render (it changes
92
+ // via switch / make-active). Used so ★ matches regardless of whether the
93
+ // active path is the raw launchDir or a canonical registry entry.
94
+ let activeCanonical = safeCanonical(ctx.session.projectDir);
95
+ // Which section owns the keyboard. Only one is active at a time (Tab
96
+ // toggles). Defaults to the Current directory panel — managing "here" is the
97
+ // common reason to open this area; Tab into the list to browse the registry.
98
+ let section = "cwd";
99
+ const cwdBox = blessed.box({
100
+ parent: ctx.container,
101
+ top: 0,
102
+ left: 0,
103
+ width: "100%",
104
+ height: CWD_PANEL_HEIGHT,
105
+ border: { type: "line" },
106
+ label: " Current directory ",
107
+ tags: true,
108
+ style: { border: { fg: "yellow" } },
109
+ content: "",
110
+ });
111
+ const list = blessed.list({
112
+ parent: ctx.container,
113
+ top: CWD_PANEL_HEIGHT,
114
+ left: 0,
115
+ width: "52%",
116
+ height: `100%-${CWD_PANEL_HEIGHT}`,
117
+ border: { type: "line" },
118
+ label: " Registered projects ",
119
+ tags: true,
120
+ keys: false,
121
+ mouse: false,
122
+ // invertSelected:false — blessed otherwise FORCES the selected row's fg to
123
+ // the row's base colour (element.js: "Ignore foreground changes for selected
124
+ // items"), which washes the inline {green-fg}●/{red-fg}○ dot to the default
125
+ // (grey-ish) terminal fg. With it off, the selected row keeps its own dot
126
+ // colour; selection is shown by background only (set in applyFocusStyles).
127
+ invertSelected: false,
128
+ scrollbar: { ch: " " },
129
+ style: { selected: { bg: "blue" }, border: { fg: "cyan" } },
130
+ items: [],
131
+ });
132
+ const detail = blessed.box({
133
+ parent: ctx.container,
134
+ top: CWD_PANEL_HEIGHT,
135
+ left: "52%",
136
+ width: "48%",
137
+ height: `100%-${CWD_PANEL_HEIGHT}`,
138
+ border: { type: "line" },
139
+ label: " Detail ",
140
+ tags: true,
141
+ scrollable: true,
142
+ alwaysScroll: true,
143
+ scrollbar: { ch: " " },
144
+ style: { border: { fg: "cyan" } },
145
+ content: "",
146
+ });
147
+ function selected() {
148
+ return projects.length === 0 ? undefined : projects[(0, util_1.clamp)(index, 0, projects.length - 1)];
149
+ }
150
+ function detectedNames(path) {
151
+ return (0, registry_1.detectClients)(path).map((c) => c.name).join(", ");
152
+ }
153
+ function isActive(path) {
154
+ return path === activeCanonical || safeCanonical(path) === activeCanonical;
155
+ }
156
+ function rowLabel(entry) {
157
+ const onDisk = (0, registry_1.isProjectActive)(entry);
158
+ const dot = onDisk ? "{green-fg}●{/green-fg}" : "{red-fg}○{/red-fg}";
159
+ const star = isActive(entry.path) ? "{yellow-fg}★{/yellow-fg} " : " ";
160
+ return `${star}${dot} ${(0, util_1.escapeTags)(basename(entry.path))} {gray-fg}${(0, util_1.escapeTags)(detectedNames(entry.path))}{/gray-fg}`;
161
+ }
162
+ /** Live install / registration / active state of the launch directory. */
163
+ function cwdState() {
164
+ return {
165
+ installed: detectedNames(launchDir),
166
+ registered: projects.some((p) => p.path === cwdCanonical),
167
+ active: isActive(cwdCanonical),
168
+ };
169
+ }
170
+ // A key hint: bold (white) when the action applies right now, gray when it's
171
+ // a no-op in the current state. Distinct, STABLE letters — i/x for
172
+ // install/uninstall, a/d for register/unregister — so opposite actions never
173
+ // share a key.
174
+ function keyLabel(label, live) {
175
+ return live ? `{bold}${label}{/bold}` : `{gray-fg}${label}{/gray-fg}`;
176
+ }
177
+ /** The top panel: the cwd's path + install/registration/active state + its actions. */
178
+ function buildCwdPanel() {
179
+ const { installed, registered, active } = cwdState();
180
+ const inst = installed.length > 0;
181
+ const stateParts = [];
182
+ stateParts.push(inst
183
+ ? `{green-fg}● installed{/green-fg} {gray-fg}(${(0, util_1.escapeTags)(installed)}){/gray-fg}`
184
+ : "{gray-fg}○ not installed{/gray-fg}");
185
+ stateParts.push(registered ? "{green-fg}registered{/green-fg}" : "{gray-fg}not registered{/gray-fg}");
186
+ stateParts.push(active ? "{yellow-fg}★ active project{/yellow-fg}" : "{gray-fg}not the active project{/gray-fg}");
187
+ // All actions shown with distinct stable letters; the one that applies
188
+ // now is bold, its opposite dimmed (e.g. installed → x bold, i dimmed).
189
+ const actions = `${keyLabel("i install", !inst)} ${keyLabel("x uninstall", inst)}`
190
+ + ` {gray-fg}·{/gray-fg} ${keyLabel("a register", !registered)} ${keyLabel("d unregister", registered)}`
191
+ + ` {gray-fg}·{/gray-fg} ${keyLabel("c make active", !active)}`;
192
+ const lines = [];
193
+ lines.push(`{bold}${(0, util_1.escapeTags)(launchDir)}{/bold}`);
194
+ lines.push(stateParts.join(" {gray-fg}·{/gray-fg} "));
195
+ lines.push(actions);
196
+ return lines.join("\n");
197
+ }
198
+ /**
199
+ * Bottom status bar — shows ONLY the ACTIVE section's keys (what's live right
200
+ * now) plus the Tab hint + globals. The cwd section's install/uninstall and
201
+ * register/unregister carry distinct stable letters (i/x, a/d), bold when they
202
+ * apply, gray when a no-op.
203
+ */
204
+ function buildStatus() {
205
+ const globals = "{bold}Tab{/bold} switch section {bold}I/X{/bold} all {bold}r{/bold} refresh {bold}Esc/q{/bold}";
206
+ let activeSeg;
207
+ if (section === "cwd") {
208
+ const { installed, registered } = cwdState();
209
+ const inst = installed.length > 0;
210
+ activeSeg =
211
+ `{cyan-fg}cwd:{/cyan-fg} ${keyLabel("i install", !inst)} ${keyLabel("x uninstall", inst)}`
212
+ + ` ${keyLabel("a register", !registered)} ${keyLabel("d unregister", registered)} {bold}c{/bold} make active`;
213
+ }
214
+ else {
215
+ activeSeg = "{bold}↑/↓{/bold} move {bold}Enter{/bold} switch {bold}i{/bold} install {bold}x{/bold} uninstall {bold}d{/bold} unregister";
216
+ }
217
+ return ` ${activeSeg} {gray-fg}│{/gray-fg} ${globals}`;
218
+ }
219
+ function buildDetail(entry) {
220
+ if (entry === undefined) {
221
+ // Empty registry ⇒ the cwd is not registered (so `a` = register), but
222
+ // it may still be installed on disk — mirror the panel's install verb.
223
+ const installedHere = detectedNames(launchDir).length > 0;
224
+ const lines = [];
225
+ lines.push("{gray-fg}No projects registered yet.{/gray-fg}");
226
+ lines.push("");
227
+ lines.push("{gray-fg}Use the {/gray-fg}{bold}Current directory{/bold}{gray-fg} panel above:{/gray-fg}");
228
+ lines.push(installedHere
229
+ ? "{bold}x{/bold} {gray-fg}— uninstall IronBee from here (removes hooks + guidance){/gray-fg}"
230
+ : "{bold}i{/bold} {gray-fg}— install IronBee here (writes hooks + guidance, registers it){/gray-fg}");
231
+ lines.push("{bold}a{/bold} {gray-fg}— register here only (inventory, no artifact writes){/gray-fg}");
232
+ return lines.join("\n");
233
+ }
234
+ const active = (0, registry_1.isProjectActive)(entry);
235
+ const paths = (0, config_1.getConfigLayerPaths)(entry.path);
236
+ const lines = [];
237
+ lines.push(`{bold}${(0, util_1.escapeTags)(basename(entry.path))}{/bold}`);
238
+ lines.push("{gray-fg}" + "─".repeat(46) + "{/gray-fg}");
239
+ lines.push(`{gray-fg}path:{/gray-fg} ${(0, util_1.escapeTags)(entry.path)}`);
240
+ lines.push(`{gray-fg}detected:{/gray-fg} ${(0, util_1.escapeTags)(detectedNames(entry.path)) || "(none on disk)"}`);
241
+ lines.push(`{gray-fg}added:{/gray-fg} ${(0, util_1.escapeTags)(entry.installedAt)}`);
242
+ lines.push(`{gray-fg}on disk:{/gray-fg} ${active ? "{green-fg}detected{/green-fg}" : "{red-fg}stale (artifacts not detected){/red-fg}"}`);
243
+ lines.push("");
244
+ lines.push("{bold}config layers{/bold}");
245
+ lines.push(` {gray-fg}global {/gray-fg} ${(0, util_1.escapeTags)(paths.global)}`);
246
+ lines.push(` {gray-fg}project{/gray-fg} ${(0, util_1.escapeTags)(paths.project ?? "-")}`);
247
+ lines.push(` {gray-fg}local {/gray-fg} ${(0, util_1.escapeTags)(paths.local ?? "-")}`);
248
+ lines.push("");
249
+ if (isActive(entry.path)) {
250
+ lines.push("{yellow-fg}★ active project{/yellow-fg} — Config / Sessions / Queue target this.");
251
+ lines.push("{gray-fg}c (in the cwd panel) = unselect → back to the current directory{/gray-fg}");
252
+ }
253
+ else {
254
+ lines.push("{gray-fg}Enter/s = make active (Config / Sessions / Queue switch to it){/gray-fg}");
255
+ }
256
+ lines.push("{gray-fg}i = install · x = uninstall (pick a client when >1 registered; runs here, blocking){/gray-fg}");
257
+ return lines.join("\n");
258
+ }
259
+ /** Set a widget's border colour in place (mirrors blessed's live style obj). */
260
+ function setBorderFg(w, fg) {
261
+ const st = w.style;
262
+ if (st.border !== undefined) {
263
+ st.border.fg = fg;
264
+ }
265
+ }
266
+ // Mark the active section with a ▸ label + highlighted border; dim the other,
267
+ // so it's always obvious which one the keyboard is driving. The selection is
268
+ // shown by BACKGROUND only (blue when the list is active, none when it isn't);
269
+ // the row's foreground is NEVER overridden, so each row always keeps its own
270
+ // dot colour (green ● on-disk / red ○ stale) — blessed applies style.selected
271
+ // fg/bg as the item's base attr (list.js), and an unset fg lets the inline
272
+ // {green-fg}/{red-fg} tags render. Overriding fg here was washing the selected
273
+ // row's dot to a single colour.
274
+ function applyFocusStyles() {
275
+ const cwdActive = section === "cwd";
276
+ cwdBox.setLabel(cwdActive ? " {yellow-fg}▸ Current directory{/yellow-fg} " : " Current directory ");
277
+ list.setLabel(cwdActive ? " Registered projects " : " {yellow-fg}▸ Registered projects{/yellow-fg} ");
278
+ setBorderFg(cwdBox, cwdActive ? "yellow" : "gray");
279
+ setBorderFg(list, cwdActive ? "gray" : "yellow");
280
+ setBorderFg(detail, cwdActive ? "gray" : "cyan");
281
+ const sel = list.style.selected ?? {};
282
+ sel.bg = cwdActive ? undefined : "blue"; // bar only when the list is active
283
+ sel.fg = undefined; // never override the row's own colours
284
+ }
285
+ function render() {
286
+ activeCanonical = safeCanonical(ctx.session.projectDir);
287
+ ctx.setStatus(buildStatus());
288
+ applyFocusStyles();
289
+ cwdBox.setContent(buildCwdPanel());
290
+ if (projects.length === 0) {
291
+ list.setItems(["{gray-fg}(no registered projects){/gray-fg}"]);
292
+ }
293
+ else {
294
+ list.setItems(projects.map((p) => rowLabel(p)));
295
+ list.select((0, util_1.clamp)(index, 0, projects.length - 1));
296
+ }
297
+ detail.setContent(buildDetail(selected()));
298
+ detail.setScroll(0);
299
+ ctx.screen.render();
300
+ }
301
+ function toggleSection() {
302
+ section = section === "cwd" ? "list" : "cwd";
303
+ render();
304
+ }
305
+ // `selectTarget` (a canonical path) moves the cursor to that entry after the
306
+ // reload — used by register/install-cwd so the freshly-added launch dir is
307
+ // selected and immediately actionable (switch / unregister / uninstall).
308
+ function refresh(selectTarget) {
309
+ projects = (0, projects_registry_1.listProjects)();
310
+ if (selectTarget !== undefined) {
311
+ const at = projects.findIndex((p) => p.path === selectTarget);
312
+ if (at >= 0) {
313
+ index = at;
314
+ }
315
+ }
316
+ index = (0, util_1.clamp)(index, 0, Math.max(0, projects.length - 1));
317
+ render();
318
+ }
319
+ function move(delta) {
320
+ if (projects.length === 0) {
321
+ return;
322
+ }
323
+ index = (0, util_1.clamp)(index + delta, 0, projects.length - 1);
324
+ render();
325
+ }
326
+ function registerCwd() {
327
+ try {
328
+ (0, projects_registry_1.upsertProject)(launchDir);
329
+ refresh(cwdCanonical); // select the just-registered row
330
+ ctx.session.message(`Registered ${basename(launchDir)} in the inventory. Use d to unregister, i to install.`);
331
+ }
332
+ catch (e) {
333
+ ctx.session.message(`Register failed: ${e instanceof Error ? e.message : String(e)}`);
334
+ }
335
+ }
336
+ // Pure inventory remove of the launch dir — leaves any artifacts on disk
337
+ // (matches `ironbee unregister`). For full teardown use `x` (uninstall).
338
+ function unregisterCwd() {
339
+ ctx.session.confirm(`Unregister ${basename(launchDir)}? (inventory only, no files touched)`, (yes) => {
340
+ if (!yes) {
341
+ return;
342
+ }
343
+ try {
344
+ (0, projects_registry_1.removeProject)(launchDir);
345
+ refresh();
346
+ }
347
+ catch (e) {
348
+ ctx.session.message(`Unregister failed: ${e instanceof Error ? e.message : String(e)}`);
349
+ }
350
+ });
351
+ }
352
+ // The cwd panel's `a` — register the launch dir (inventory only). No-op (with
353
+ // a hint) when it's already registered; `d` unregisters.
354
+ function cwdRegister() {
355
+ if (projects.some((p) => p.path === cwdCanonical)) {
356
+ ctx.session.message(`${basename(launchDir)} is already registered — press d to unregister.`);
357
+ return;
358
+ }
359
+ registerCwd();
360
+ }
361
+ // The cwd panel's `d` — unregister the launch dir (inventory only). No-op
362
+ // (with a hint) when it isn't registered.
363
+ function cwdUnregister() {
364
+ if (!projects.some((p) => p.path === cwdCanonical)) {
365
+ ctx.session.message(`${basename(launchDir)} is not registered — nothing to unregister.`);
366
+ return;
367
+ }
368
+ unregisterCwd();
369
+ }
370
+ // Make the current directory the active project — also the "unselect" for a
371
+ // previously-switched project: there's always exactly one active project
372
+ // (the cwd is the home base it falls back to). Moves the cursor to the cwd
373
+ // row when it's registered.
374
+ function setActiveToCwd() {
375
+ if (isActive(cwdCanonical)) {
376
+ ctx.session.message(`The current directory (${basename(launchDir)}) is already the active project.`);
377
+ return;
378
+ }
379
+ ctx.setActiveProject(cwdCanonical);
380
+ const at = projects.findIndex((p) => p.path === cwdCanonical);
381
+ if (at >= 0) {
382
+ index = at;
383
+ }
384
+ render();
385
+ ctx.session.message(`Active project → current directory (${basename(launchDir)}). Any switched project is unselected.`);
386
+ }
387
+ // Shared install core (used by the cwd panel `i` and the selected-row `i`).
388
+ // Writes artifacts for the chosen client(s) and adds the path to the
389
+ // inventory, then refreshes (selecting `selectAfter` when given).
390
+ function doInstall(targetPath, title, selectAfter) {
391
+ pickClient(title, (clients) => {
392
+ void ctx.session.runWithOutput(`Install ${basename(targetPath)} (${clients.map((c) => c.name).join(", ")})`, () => {
393
+ for (const client of clients) {
394
+ client.install(targetPath);
395
+ }
396
+ (0, projects_registry_1.upsertProject)(targetPath);
397
+ }).then(() => refresh(selectAfter));
398
+ });
399
+ }
400
+ // Shared uninstall core (used by the cwd panel `x` and the selected-row `x`).
401
+ // Confirms, removes artifacts for the chosen client(s), then runs the smart
402
+ // teardown (drop shared .ironbee/ + registry entry) when no OTHER client
403
+ // remains — keyed on which clients we uninstalled vs. the still-present
404
+ // others, NOT a post-uninstall detect (uninstall leaves the .claude/.cursor
405
+ // DIR behind, so a detect would keep the project looking "active").
406
+ function doUninstall(targetPath, selectAfter) {
407
+ pickClient("Uninstall which client?", (clients) => {
408
+ ctx.session.confirm(`Uninstall ${clients.map((c) => c.name).join(", ")} from ${basename(targetPath)}?`, (yes) => {
409
+ if (!yes) {
410
+ return;
411
+ }
412
+ void ctx.session.runWithOutput(`Uninstall ${basename(targetPath)} (${clients.map((c) => c.name).join(", ")})`, () => {
413
+ const uninstalled = new Set(clients.map((c) => c.name));
414
+ for (const client of clients) {
415
+ client.uninstall(targetPath);
416
+ }
417
+ const otherClientPresent = registry_1.REGISTERED_CLIENTS.some((c) => !uninstalled.has(c.name) && c.detect(targetPath));
418
+ if (!otherClientPresent) {
419
+ const ironbeeDir = (0, path_1.join)(targetPath, ".ironbee");
420
+ if ((0, fs_1.existsSync)(ironbeeDir)) {
421
+ (0, fs_1.rmSync)(ironbeeDir, { recursive: true, force: true });
422
+ }
423
+ (0, projects_registry_1.removeProject)(targetPath);
424
+ }
425
+ }).then(() => refresh(selectAfter));
426
+ });
427
+ });
428
+ }
429
+ // The cwd panel's `i` — install IronBee into the LAUNCH directory (the cwd /
430
+ // -p the TUI started in, NOT the switchable active project). No-op (with a
431
+ // hint) when it's already installed; `x` uninstalls.
432
+ function cwdInstall() {
433
+ if (detectedNames(launchDir).length > 0) {
434
+ ctx.session.message(`${basename(launchDir)} is already installed — press x to uninstall.`);
435
+ return;
436
+ }
437
+ doInstall(launchDir, "Install into the current directory — which client?", cwdCanonical);
438
+ }
439
+ // The cwd panel's `x` — uninstall from the launch dir (+ smart teardown).
440
+ // No-op (with a hint) when nothing is installed.
441
+ function cwdUninstall() {
442
+ if (detectedNames(launchDir).length === 0) {
443
+ ctx.session.message(`${basename(launchDir)} is not installed — nothing to uninstall.`);
444
+ return;
445
+ }
446
+ doUninstall(launchDir, cwdCanonical);
447
+ }
448
+ function switchTo() {
449
+ const entry = selected();
450
+ if (entry === undefined) {
451
+ return;
452
+ }
453
+ ctx.setActiveProject(entry.path);
454
+ render();
455
+ ctx.session.message(`Active project → ${basename(entry.path)}. Config / Sessions / Queue now target it.`);
456
+ }
457
+ function unregisterSelected() {
458
+ const entry = selected();
459
+ if (entry === undefined) {
460
+ return;
461
+ }
462
+ ctx.session.confirm(`Unregister ${basename(entry.path)}? (inventory only, no files touched)`, (yes) => {
463
+ if (!yes) {
464
+ return;
465
+ }
466
+ try {
467
+ (0, projects_registry_1.removeProject)(entry.path);
468
+ refresh();
469
+ }
470
+ catch (e) {
471
+ ctx.session.message(`Unregister failed: ${e instanceof Error ? e.message : String(e)}`);
472
+ }
473
+ });
474
+ }
475
+ // Offer a client choice (the `--client` analog) when more than one client
476
+ // is registered; with a single client, skip the picker. `cb` gets the
477
+ // chosen clients (or all on "All clients").
478
+ function pickClient(title, cb) {
479
+ if (registry_1.REGISTERED_CLIENTS.length <= 1) {
480
+ cb(registry_1.REGISTERED_CLIENTS);
481
+ return;
482
+ }
483
+ const names = registry_1.REGISTERED_CLIENTS.map((c) => c.name);
484
+ ctx.session.pick(title, ["All clients", ...names], (idx) => {
485
+ if (idx < 0) {
486
+ return;
487
+ }
488
+ cb(idx === 0 ? registry_1.REGISTERED_CLIENTS : [registry_1.REGISTERED_CLIENTS[idx - 1]]);
489
+ });
490
+ }
491
+ function installSelected() {
492
+ const entry = selected();
493
+ if (entry === undefined) {
494
+ return;
495
+ }
496
+ doInstall(entry.path, "Install which client?");
497
+ }
498
+ function uninstallSelected() {
499
+ const entry = selected();
500
+ if (entry === undefined) {
501
+ return;
502
+ }
503
+ doUninstall(entry.path);
504
+ }
505
+ async function installAll() {
506
+ await ctx.session.runWithOutput("Install — all registered projects", async () => {
507
+ await (0, install_1.runInstallAll)({});
508
+ });
509
+ refresh();
510
+ }
511
+ function uninstallAllFlow() {
512
+ ctx.session.confirm("Uninstall IronBee from ALL registered projects? (destructive)", (yes) => {
513
+ if (!yes) {
514
+ return;
515
+ }
516
+ void ctx.session.runWithOutput("Uninstall — all registered projects", async () => {
517
+ await (0, uninstall_1.runUninstallAll)({ yes: true });
518
+ }).then(() => refresh());
519
+ });
520
+ }
521
+ // Tab toggles which section owns the keyboard; each section's keys are gated
522
+ // so only the active section responds (no cross-talk between the two).
523
+ list.key(["tab"], () => toggleSection());
524
+ list.key(["S-tab"], () => toggleSection());
525
+ list.key(["up", "k"], () => { if (section === "list") {
526
+ move(-1);
527
+ } });
528
+ list.key(["down", "j"], () => { if (section === "list") {
529
+ move(1);
530
+ } });
531
+ // i / x / d carry the SAME meaning in both sections (install / uninstall /
532
+ // unregister), dispatched to the cwd or to the selected row by the active
533
+ // section. a (register) and c (make active) are cwd-only.
534
+ list.key(["i"], () => { if (section === "cwd") {
535
+ cwdInstall();
536
+ }
537
+ else {
538
+ installSelected();
539
+ } });
540
+ list.key(["x"], () => { if (section === "cwd") {
541
+ cwdUninstall();
542
+ }
543
+ else {
544
+ uninstallSelected();
545
+ } });
546
+ list.key(["d"], () => { if (section === "cwd") {
547
+ cwdUnregister();
548
+ }
549
+ else {
550
+ unregisterSelected();
551
+ } });
552
+ list.key(["a"], () => { if (section === "cwd") {
553
+ cwdRegister();
554
+ } });
555
+ list.key(["c"], () => { if (section === "cwd") {
556
+ setActiveToCwd();
557
+ } });
558
+ // Enter: switch active in the list; make-active in the cwd panel.
559
+ list.key(["enter", "s"], () => { if (section === "list") {
560
+ switchTo();
561
+ }
562
+ else {
563
+ setActiveToCwd();
564
+ } });
565
+ // global (either section)
566
+ list.key(["S-i"], () => { void installAll(); });
567
+ list.key(["S-x"], () => uninstallAllFlow());
568
+ list.key(["r"], () => refresh());
569
+ render();
570
+ list.focus();
571
+ ctx.screen.render();
572
+ return {
573
+ unmount() {
574
+ cwdBox.destroy();
575
+ list.destroy();
576
+ detail.destroy();
577
+ },
578
+ };
579
+ }
580
+ exports.projectsArea = {
581
+ id: "projects",
582
+ title: "Projects",
583
+ summary: "Registry — switch active · register / unregister · install / uninstall (+ --all)",
584
+ mount(ctx) {
585
+ return mountProjectsView(ctx);
586
+ },
587
+ };
588
+ //# sourceMappingURL=area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.js","sourceRoot":"","sources":["../../../src/tui/projects/area.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * IronBee — Queue area (read-only)
3
+ *
4
+ * Per-session view of the file-backed job queue: pending jobs (live + frozen
5
+ * snapshots) and dead-letter counts. Read-only operator view backed by the pure
6
+ * `listQueues` reader; draining / retrying stays on the `ironbee queue` CLI
7
+ * (those spawn workers / print, which would corrupt the screen).
8
+ */
9
+ import { TuiArea } from "../shell/area";
10
+ export declare const queueArea: TuiArea;
11
+ //# sourceMappingURL=area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/queue/area.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,EAA2B,OAAO,EAAE,MAAM,eAAe,CAAC;AAoTjE,eAAO,MAAM,SAAS,EAAE,OAOvB,CAAC"}