@ironbee-ai/cli 0.11.4 → 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 (176) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +17 -3
  3. package/dist/assets/banner.txt +1 -1
  4. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  5. package/dist/clients/claude/hooks/session-start.js +7 -0
  6. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  7. package/dist/clients/claude/hooks/session-status.d.ts +129 -0
  8. package/dist/clients/claude/hooks/session-status.d.ts.map +1 -0
  9. package/dist/clients/claude/hooks/session-status.js +450 -0
  10. package/dist/clients/claude/hooks/session-status.js.map +1 -0
  11. package/dist/clients/claude/index.d.ts +26 -0
  12. package/dist/clients/claude/index.d.ts.map +1 -1
  13. package/dist/clients/claude/index.js +151 -0
  14. package/dist/clients/claude/index.js.map +1 -1
  15. package/dist/clients/cursor/index.d.ts.map +1 -1
  16. package/dist/clients/cursor/index.js +6 -0
  17. package/dist/clients/cursor/index.js.map +1 -1
  18. package/dist/clients/registry.d.ts +8 -9
  19. package/dist/clients/registry.d.ts.map +1 -1
  20. package/dist/clients/registry.js +13 -11
  21. package/dist/clients/registry.js.map +1 -1
  22. package/dist/commands/config.d.ts +5 -4
  23. package/dist/commands/config.d.ts.map +1 -1
  24. package/dist/commands/config.js +10 -4
  25. package/dist/commands/config.js.map +1 -1
  26. package/dist/commands/hook.js +44 -0
  27. package/dist/commands/hook.js.map +1 -1
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +4 -5
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/register.d.ts +0 -1
  32. package/dist/commands/register.d.ts.map +1 -1
  33. package/dist/commands/register.js +7 -27
  34. package/dist/commands/register.js.map +1 -1
  35. package/dist/commands/statusline-toggle.d.ts +29 -0
  36. package/dist/commands/statusline-toggle.d.ts.map +1 -0
  37. package/dist/commands/statusline-toggle.js +114 -0
  38. package/dist/commands/statusline-toggle.js.map +1 -0
  39. package/dist/commands/statusline.d.ts +24 -0
  40. package/dist/commands/statusline.d.ts.map +1 -0
  41. package/dist/commands/statusline.js +79 -0
  42. package/dist/commands/statusline.js.map +1 -0
  43. package/dist/commands/uninstall.d.ts +2 -3
  44. package/dist/commands/uninstall.d.ts.map +1 -1
  45. package/dist/commands/uninstall.js +3 -4
  46. package/dist/commands/uninstall.js.map +1 -1
  47. package/dist/commands/unregister.d.ts +0 -1
  48. package/dist/commands/unregister.d.ts.map +1 -1
  49. package/dist/commands/unregister.js +3 -24
  50. package/dist/commands/unregister.js.map +1 -1
  51. package/dist/hooks/core/session-state.d.ts +25 -0
  52. package/dist/hooks/core/session-state.d.ts.map +1 -1
  53. package/dist/hooks/core/session-state.js +49 -1
  54. package/dist/hooks/core/session-state.js.map +1 -1
  55. package/dist/index.js +35 -15
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/config.d.ts +64 -0
  58. package/dist/lib/config.d.ts.map +1 -1
  59. package/dist/lib/config.js +48 -0
  60. package/dist/lib/config.js.map +1 -1
  61. package/dist/lib/event.d.ts +60 -0
  62. package/dist/lib/event.d.ts.map +1 -1
  63. package/dist/lib/event.js +1 -0
  64. package/dist/lib/event.js.map +1 -1
  65. package/dist/lib/fs-prune.d.ts +20 -0
  66. package/dist/lib/fs-prune.d.ts.map +1 -0
  67. package/dist/lib/fs-prune.js +72 -0
  68. package/dist/lib/fs-prune.js.map +1 -0
  69. package/dist/lib/gitignore.d.ts.map +1 -1
  70. package/dist/lib/gitignore.js +11 -0
  71. package/dist/lib/gitignore.js.map +1 -1
  72. package/dist/lib/install-snapshots.d.ts +70 -0
  73. package/dist/lib/install-snapshots.d.ts.map +1 -0
  74. package/dist/lib/install-snapshots.js +168 -0
  75. package/dist/lib/install-snapshots.js.map +1 -0
  76. package/dist/lib/projects-registry.d.ts +6 -13
  77. package/dist/lib/projects-registry.d.ts.map +1 -1
  78. package/dist/lib/projects-registry.js +11 -46
  79. package/dist/lib/projects-registry.js.map +1 -1
  80. package/dist/tui/command.d.ts +18 -0
  81. package/dist/tui/command.d.ts.map +1 -0
  82. package/dist/tui/command.js +87 -0
  83. package/dist/tui/command.js.map +1 -0
  84. package/dist/tui/config/area.d.ts +6 -0
  85. package/dist/tui/config/area.d.ts.map +1 -0
  86. package/dist/tui/config/area.js +16 -0
  87. package/dist/tui/config/area.js.map +1 -0
  88. package/dist/tui/config/docs.d.ts +28 -0
  89. package/dist/tui/config/docs.d.ts.map +1 -0
  90. package/dist/tui/config/docs.js +68 -0
  91. package/dist/tui/config/docs.js.map +1 -0
  92. package/dist/tui/config/edit.d.ts +36 -0
  93. package/dist/tui/config/edit.d.ts.map +1 -0
  94. package/dist/tui/config/edit.js +69 -0
  95. package/dist/tui/config/edit.js.map +1 -0
  96. package/dist/tui/config/introspect.d.ts +58 -0
  97. package/dist/tui/config/introspect.d.ts.map +1 -0
  98. package/dist/tui/config/introspect.js +93 -0
  99. package/dist/tui/config/introspect.js.map +1 -0
  100. package/dist/tui/config/schema.d.ts +81 -0
  101. package/dist/tui/config/schema.d.ts.map +1 -0
  102. package/dist/tui/config/schema.js +534 -0
  103. package/dist/tui/config/schema.js.map +1 -0
  104. package/dist/tui/config/tree.d.ts +39 -0
  105. package/dist/tui/config/tree.d.ts.map +1 -0
  106. package/dist/tui/config/tree.js +59 -0
  107. package/dist/tui/config/tree.js.map +1 -0
  108. package/dist/tui/config/value.d.ts +75 -0
  109. package/dist/tui/config/value.d.ts.map +1 -0
  110. package/dist/tui/config/value.js +228 -0
  111. package/dist/tui/config/value.js.map +1 -0
  112. package/dist/tui/config/view.d.ts +13 -0
  113. package/dist/tui/config/view.d.ts.map +1 -0
  114. package/dist/tui/config/view.js +423 -0
  115. package/dist/tui/config/view.js.map +1 -0
  116. package/dist/tui/import/area.d.ts +11 -0
  117. package/dist/tui/import/area.d.ts.map +1 -0
  118. package/dist/tui/import/area.js +202 -0
  119. package/dist/tui/import/area.js.map +1 -0
  120. package/dist/tui/index.d.ts +9 -0
  121. package/dist/tui/index.d.ts.map +1 -0
  122. package/dist/tui/index.js +14 -0
  123. package/dist/tui/index.js.map +1 -0
  124. package/dist/tui/platforms/area.d.ts +12 -0
  125. package/dist/tui/platforms/area.d.ts.map +1 -0
  126. package/dist/tui/platforms/area.js +228 -0
  127. package/dist/tui/platforms/area.js.map +1 -0
  128. package/dist/tui/projects/area.d.ts +26 -0
  129. package/dist/tui/projects/area.d.ts.map +1 -0
  130. package/dist/tui/projects/area.js +588 -0
  131. package/dist/tui/projects/area.js.map +1 -0
  132. package/dist/tui/queue/area.d.ts +11 -0
  133. package/dist/tui/queue/area.d.ts.map +1 -0
  134. package/dist/tui/queue/area.js +338 -0
  135. package/dist/tui/queue/area.js.map +1 -0
  136. package/dist/tui/queue/read.d.ts +49 -0
  137. package/dist/tui/queue/read.d.ts.map +1 -0
  138. package/dist/tui/queue/read.js +261 -0
  139. package/dist/tui/queue/read.js.map +1 -0
  140. package/dist/tui/sessions/area.d.ts +10 -0
  141. package/dist/tui/sessions/area.d.ts.map +1 -0
  142. package/dist/tui/sessions/area.js +266 -0
  143. package/dist/tui/sessions/area.js.map +1 -0
  144. package/dist/tui/sessions/read.d.ts +79 -0
  145. package/dist/tui/sessions/read.d.ts.map +1 -0
  146. package/dist/tui/sessions/read.js +202 -0
  147. package/dist/tui/sessions/read.js.map +1 -0
  148. package/dist/tui/shell/area.d.ts +47 -0
  149. package/dist/tui/shell/area.d.ts.map +1 -0
  150. package/dist/tui/shell/area.js +13 -0
  151. package/dist/tui/shell/area.js.map +1 -0
  152. package/dist/tui/shell/frame.d.ts +23 -0
  153. package/dist/tui/shell/frame.d.ts.map +1 -0
  154. package/dist/tui/shell/frame.js +91 -0
  155. package/dist/tui/shell/frame.js.map +1 -0
  156. package/dist/tui/shell/registry.d.ts +11 -0
  157. package/dist/tui/shell/registry.d.ts.map +1 -0
  158. package/dist/tui/shell/registry.js +29 -0
  159. package/dist/tui/shell/registry.js.map +1 -0
  160. package/dist/tui/shell/rerender.d.ts +16 -0
  161. package/dist/tui/shell/rerender.d.ts.map +1 -0
  162. package/dist/tui/shell/rerender.js +34 -0
  163. package/dist/tui/shell/rerender.js.map +1 -0
  164. package/dist/tui/shell/session.d.ts +75 -0
  165. package/dist/tui/shell/session.d.ts.map +1 -0
  166. package/dist/tui/shell/session.js +333 -0
  167. package/dist/tui/shell/session.js.map +1 -0
  168. package/dist/tui/shell/shell.d.ts +16 -0
  169. package/dist/tui/shell/shell.d.ts.map +1 -0
  170. package/dist/tui/shell/shell.js +213 -0
  171. package/dist/tui/shell/shell.js.map +1 -0
  172. package/dist/tui/shell/util.d.ts +18 -0
  173. package/dist/tui/shell/util.d.ts.map +1 -0
  174. package/dist/tui/shell/util.js +31 -0
  175. package/dist/tui/shell/util.js.map +1 -0
  176. package/package.json +3 -1
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Config area view (mounted inside the TUI shell)
4
+ *
5
+ * Collapsible, segment-grouped key tree on the left; per-key detail (all three
6
+ * layers + env + merged effective) or a group summary on the right. Edit / unset
7
+ * any layer in place. Mounts into the shell's content region; it does NOT own
8
+ * the screen, the exit flow, or the artifact rerender — artifact-affecting edits
9
+ * call `ctx.session.markRerenderNeeded()` and the shell re-renders once on exit.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.mountConfigView = mountConfigView;
46
+ const blessed = __importStar(require("blessed"));
47
+ const registry_1 = require("../../clients/registry");
48
+ const install_1 = require("../../commands/install");
49
+ const config_1 = require("../../lib/config");
50
+ const projects_registry_1 = require("../../lib/projects-registry");
51
+ const util_1 = require("../shell/util");
52
+ const edit_1 = require("./edit");
53
+ const introspect_1 = require("./introspect");
54
+ const schema_1 = require("./schema");
55
+ const tree_1 = require("./tree");
56
+ const value_1 = require("./value");
57
+ const LAYER_LABELS = {
58
+ global: "global ",
59
+ project: "project",
60
+ local: "local ",
61
+ };
62
+ const STATUS = " {bold}↑/↓{/bold} move {bold}Enter{/bold} expand/collapse "
63
+ + "{bold}e{/bold}/{bold}g{/bold}/{bold}l{/bold} edit project/global/local "
64
+ + "{bold}x{/bold} unset {bold}/{/bold} search {bold}Esc{/bold} back {bold}q{/bold} quit";
65
+ /** Short label for where a key's effective value comes from. */
66
+ function sourceLabel(eff) {
67
+ return eff === "none" ? "default" : eff;
68
+ }
69
+ /** Mount the config browser into `ctx.container`. Returns an unmount handle. */
70
+ function mountConfigView(ctx) {
71
+ const projectDir = ctx.session.projectDir;
72
+ const allEntries = (0, schema_1.orderedEntries)();
73
+ let layers = (0, introspect_1.loadLayers)(projectDir);
74
+ let searchTerm = "";
75
+ let buckets = [];
76
+ let rows = [];
77
+ let index = 0;
78
+ const collapsed = new Set((0, tree_1.groupEntries)(allEntries).map((b) => b.group));
79
+ const list = blessed.list({
80
+ parent: ctx.container,
81
+ top: 0,
82
+ left: 0,
83
+ width: "46%",
84
+ height: "100%",
85
+ border: { type: "line" },
86
+ label: " Config keys ",
87
+ tags: true,
88
+ keys: false,
89
+ mouse: false,
90
+ scrollbar: { ch: " " },
91
+ style: { selected: { bg: "blue", fg: "white" }, border: { fg: "cyan" } },
92
+ items: [],
93
+ });
94
+ const detail = blessed.box({
95
+ parent: ctx.container,
96
+ top: 0,
97
+ left: "46%",
98
+ width: "54%",
99
+ height: "100%",
100
+ border: { type: "line" },
101
+ label: " Detail ",
102
+ tags: true,
103
+ scrollable: true,
104
+ alwaysScroll: true,
105
+ scrollbar: { ch: " " },
106
+ style: { border: { fg: "cyan" } },
107
+ content: "",
108
+ });
109
+ function currentRow() {
110
+ return rows.length === 0 ? undefined : rows[(0, util_1.clamp)(index, 0, rows.length - 1)];
111
+ }
112
+ function currentEntry() {
113
+ const row = currentRow();
114
+ return row !== undefined && row.kind === "key" ? row.entry : undefined;
115
+ }
116
+ function currentGroup() {
117
+ return currentRow()?.group;
118
+ }
119
+ function effectiveTag(intro, layer) {
120
+ return intro.effective === layer ? " {green-fg}← effective{/green-fg}" : "";
121
+ }
122
+ function buildKeyDetail(entry) {
123
+ const intro = (0, introspect_1.introspectKey)(entry.path, layers);
124
+ const lines = [];
125
+ const artifact = entry.artifactAffecting
126
+ ? "{yellow-fg}artifact-affecting{/yellow-fg}"
127
+ : "{gray-fg}runtime-only{/gray-fg}";
128
+ lines.push(`{bold}{cyan-fg}${(0, util_1.escapeTags)(entry.path)}{/cyan-fg}{/bold} {gray-fg}[${entry.type}]{/gray-fg} ${artifact}`);
129
+ lines.push("{gray-fg}" + "─".repeat(48) + "{/gray-fg}");
130
+ lines.push((0, util_1.escapeTags)(entry.description));
131
+ lines.push("");
132
+ lines.push(`{gray-fg}default:{/gray-fg} ${(0, util_1.escapeTags)(entry.def)}`);
133
+ lines.push("");
134
+ lines.push("{bold}Layers{/bold}");
135
+ for (const lv of intro.layers) {
136
+ const valStr = lv.present
137
+ ? (0, util_1.escapeTags)((0, value_1.formatValueShort)(lv.value, 200))
138
+ : "{gray-fg}(unset){/gray-fg}";
139
+ lines.push(` ${LAYER_LABELS[lv.layer]} ${valStr}${effectiveTag(intro, lv.layer)}`);
140
+ }
141
+ if (intro.envOverride !== undefined) {
142
+ const envVal = (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.envOverride.value, 40));
143
+ const eff = intro.effective === "env" ? " {green-fg}← effective{/green-fg}" : "";
144
+ lines.push(` {magenta-fg}env {/magenta-fg} ${(0, util_1.escapeTags)(intro.envOverride.envVar)} = ${envVal}${eff}`);
145
+ lines.push(" {gray-fg}(env overrides every file layer until unset){/gray-fg}");
146
+ }
147
+ lines.push("");
148
+ const source = intro.effective === "none"
149
+ ? "{gray-fg}unset everywhere{/gray-fg}"
150
+ : `{green-fg}${intro.effective}{/green-fg}`;
151
+ lines.push(`{bold}Effective (merged):{/bold} ${source}`);
152
+ const mergedStr = intro.merged === undefined
153
+ ? "{gray-fg}(unset — runtime falls back to the default above){/gray-fg}"
154
+ : (0, util_1.escapeTags)((0, value_1.formatValue)(intro.merged));
155
+ lines.push(mergedStr);
156
+ return lines.join("\n");
157
+ }
158
+ function buildGroupDetail(group) {
159
+ const bucket = buckets.find((b) => b.group === group);
160
+ const lines = [];
161
+ const title = bucket?.title ?? group;
162
+ const count = bucket?.entries.length ?? 0;
163
+ lines.push(`{bold}${(0, util_1.escapeTags)(title)}{/bold} {gray-fg}(${count} ${count === 1 ? "key" : "keys"}){/gray-fg}`);
164
+ lines.push("{gray-fg}" + "─".repeat(48) + "{/gray-fg}");
165
+ lines.push("{gray-fg}Enter / → expand · ← collapse{/gray-fg}");
166
+ lines.push("");
167
+ if (bucket !== undefined) {
168
+ for (const e of bucket.entries) {
169
+ const intro = (0, introspect_1.introspectKey)(e.path, layers);
170
+ const val = intro.merged === undefined
171
+ ? "{gray-fg}(unset){/gray-fg}"
172
+ : (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.merged, 26));
173
+ const src = `{gray-fg}[${sourceLabel(intro.effective)}]{/gray-fg}`;
174
+ lines.push(` {cyan-fg}${(0, util_1.escapeTags)(e.path)}{/cyan-fg}`);
175
+ lines.push(` ${val} ${src}`);
176
+ }
177
+ }
178
+ return lines.join("\n");
179
+ }
180
+ function rowLabel(row) {
181
+ if (row.kind === "header") {
182
+ const arrow = row.collapsed ? "▸" : "▾";
183
+ return `{bold}${arrow} ${(0, util_1.escapeTags)(row.title)}{/bold} {gray-fg}(${row.count}){/gray-fg}`;
184
+ }
185
+ const entry = row.entry;
186
+ const intro = (0, introspect_1.introspectKey)(entry.path, layers);
187
+ const raw = entry.path.length > 24 ? entry.path.slice(0, 23) + "…" : entry.path.padEnd(24, " ");
188
+ const val = intro.effective === "none"
189
+ ? "{gray-fg}(unset){/gray-fg}"
190
+ : "{gray-fg}" + (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.merged, 40)) + "{/gray-fg}";
191
+ return ` ${(0, util_1.escapeTags)(raw)} ${val}`;
192
+ }
193
+ function rebuild() {
194
+ const term = searchTerm.trim().toLowerCase();
195
+ const filtered = term.length === 0
196
+ ? allEntries
197
+ : allEntries.filter((e) => e.path.toLowerCase().includes(term));
198
+ buckets = (0, tree_1.groupEntries)(filtered);
199
+ rows = (0, tree_1.buildTreeRows)(buckets, collapsed);
200
+ index = (0, util_1.clamp)(index, 0, Math.max(0, rows.length - 1));
201
+ }
202
+ function rebuildRowsOnly() {
203
+ rows = (0, tree_1.buildTreeRows)(buckets, collapsed);
204
+ index = (0, util_1.clamp)(index, 0, Math.max(0, rows.length - 1));
205
+ }
206
+ function renderList() {
207
+ list.setItems(rows.map((r) => rowLabel(r)));
208
+ if (rows.length > 0) {
209
+ list.select((0, util_1.clamp)(index, 0, rows.length - 1));
210
+ }
211
+ }
212
+ function renderDetail() {
213
+ const row = currentRow();
214
+ if (row === undefined) {
215
+ detail.setContent("{gray-fg}No keys match the current filter.{/gray-fg}");
216
+ }
217
+ else if (row.kind === "header") {
218
+ detail.setContent(buildGroupDetail(row.group));
219
+ }
220
+ else {
221
+ detail.setContent(buildKeyDetail(row.entry));
222
+ }
223
+ detail.setScroll(0);
224
+ }
225
+ function renderView() {
226
+ renderList();
227
+ renderDetail();
228
+ ctx.screen.render();
229
+ }
230
+ function reloadAndRender() {
231
+ layers = (0, introspect_1.loadLayers)(projectDir);
232
+ renderView();
233
+ }
234
+ function move(delta) {
235
+ if (rows.length === 0) {
236
+ return;
237
+ }
238
+ index = (0, util_1.clamp)(index + delta, 0, rows.length - 1);
239
+ renderView();
240
+ }
241
+ function headerIndexOf(group) {
242
+ return rows.findIndex((r) => r.kind === "header" && r.group === group);
243
+ }
244
+ function toggleGroup() {
245
+ const group = currentGroup();
246
+ if (group === undefined) {
247
+ return;
248
+ }
249
+ if (collapsed.has(group)) {
250
+ collapsed.delete(group);
251
+ }
252
+ else {
253
+ collapsed.add(group);
254
+ }
255
+ rebuildRowsOnly();
256
+ const hi = headerIndexOf(group);
257
+ if (hi >= 0) {
258
+ index = hi;
259
+ }
260
+ renderView();
261
+ }
262
+ function collapseCurrent() {
263
+ const group = currentGroup();
264
+ if (group === undefined || collapsed.has(group)) {
265
+ return;
266
+ }
267
+ collapsed.add(group);
268
+ rebuildRowsOnly();
269
+ const hi = headerIndexOf(group);
270
+ if (hi >= 0) {
271
+ index = hi;
272
+ }
273
+ renderView();
274
+ }
275
+ function expandCurrent() {
276
+ const group = currentGroup();
277
+ if (group === undefined || !collapsed.has(group)) {
278
+ return;
279
+ }
280
+ collapsed.delete(group);
281
+ rebuildRowsOnly();
282
+ renderView();
283
+ }
284
+ function performUnset(layer, entry) {
285
+ const targetPath = (0, config_1.getTargetConfigPath)(layer, projectDir);
286
+ try {
287
+ const result = (0, edit_1.unsetLayerValue)(targetPath, entry.path);
288
+ if (result.removed && result.artifactAffecting) {
289
+ ctx.session.markRerenderNeeded(projectDir);
290
+ }
291
+ reloadAndRender();
292
+ if (!result.removed) {
293
+ ctx.session.message(`${entry.path} was not set in the ${layer} layer.`);
294
+ }
295
+ }
296
+ catch (e) {
297
+ ctx.session.message(`Unset failed: ${e instanceof Error ? e.message : String(e)}`);
298
+ }
299
+ }
300
+ function offerApplyToOtherProjects() {
301
+ const here = (0, projects_registry_1.canonicalizePath)(projectDir);
302
+ const others = (0, registry_1.listActiveProjects)().filter((p) => p.path !== here);
303
+ if (others.length === 0) {
304
+ return;
305
+ }
306
+ ctx.session.confirm(`Global change saved. Apply it to ${others.length} other registered project(s) now?`, (yes) => {
307
+ if (!yes) {
308
+ return;
309
+ }
310
+ void ctx.session.runWithOutput("Apply global config to all registered projects", async () => {
311
+ await (0, install_1.runInstallAll)({});
312
+ });
313
+ });
314
+ }
315
+ function editLayer(layer) {
316
+ const entry = currentEntry();
317
+ if (entry === undefined) {
318
+ return;
319
+ }
320
+ const targetPath = (0, config_1.getTargetConfigPath)(layer, projectDir);
321
+ const intro = (0, introspect_1.introspectKey)(entry.path, layers);
322
+ const layerVal = intro.layers.find((l) => l.layer === layer);
323
+ const present = layerVal !== undefined && layerVal.present;
324
+ const prefill = (0, value_1.editorPrefill)(entry.editor, layerVal?.value, present);
325
+ const label = `Set ${entry.path} in ${layer} (${(0, value_1.editorHint)(entry.editor, entry.enumValues)}) — Enter to save, Esc to cancel`;
326
+ ctx.session.prompt(label, prefill, (raw) => {
327
+ if (raw === null) {
328
+ return;
329
+ }
330
+ try {
331
+ const parsed = (0, value_1.parseEditorInput)(entry.editor, raw);
332
+ const result = (0, edit_1.setLayerValue)(targetPath, entry.path, parsed.raw, parsed.json);
333
+ if (result.artifactAffecting) {
334
+ ctx.session.markRerenderNeeded(projectDir);
335
+ }
336
+ reloadAndRender();
337
+ if (layer === "global" && result.artifactAffecting) {
338
+ offerApplyToOtherProjects();
339
+ }
340
+ }
341
+ catch (e) {
342
+ ctx.session.message(`Write failed: ${e instanceof Error ? e.message : String(e)}`);
343
+ }
344
+ });
345
+ }
346
+ function unsetFlow() {
347
+ const entry = currentEntry();
348
+ if (entry === undefined) {
349
+ return;
350
+ }
351
+ const intro = (0, introspect_1.introspectKey)(entry.path, layers);
352
+ const present = intro.layers.filter((l) => l.present);
353
+ if (present.length === 0) {
354
+ ctx.session.message(`${entry.path} is not set in any file layer.`);
355
+ return;
356
+ }
357
+ if (present.length === 1) {
358
+ performUnset(present[0].layer, entry);
359
+ return;
360
+ }
361
+ ctx.session.pick("Unset from which layer?", present.map((l) => l.layer), (idx) => {
362
+ if (idx >= 0 && idx < present.length) {
363
+ performUnset(present[idx].layer, entry);
364
+ }
365
+ });
366
+ }
367
+ function searchFlow() {
368
+ ctx.session.prompt("Filter keys by substring (empty clears):", searchTerm, (raw) => {
369
+ if (raw === null) {
370
+ return;
371
+ }
372
+ searchTerm = raw;
373
+ index = 0;
374
+ if (raw.trim().length === 0) {
375
+ for (const b of (0, tree_1.groupEntries)(allEntries)) {
376
+ collapsed.add(b.group);
377
+ }
378
+ }
379
+ else {
380
+ collapsed.clear();
381
+ }
382
+ rebuild();
383
+ renderView();
384
+ });
385
+ }
386
+ // Functional keys are bound to the list (the focused widget), so they only
387
+ // fire while the list has focus — i.e. NOT while a shared modal (prompt /
388
+ // pick / message) is up, since those steal focus. `list.destroy()` on
389
+ // unmount removes them. The shell owns the only global keys (Esc=back,
390
+ // q=quit) via `screen.key`.
391
+ list.key(["up", "k"], () => move(-1));
392
+ list.key(["down", "j"], () => move(1));
393
+ list.key(["pageup"], () => move(-10));
394
+ list.key(["pagedown"], () => move(10));
395
+ list.key(["home"], () => {
396
+ index = 0;
397
+ renderView();
398
+ });
399
+ list.key(["end"], () => {
400
+ index = rows.length - 1;
401
+ renderView();
402
+ });
403
+ list.key(["enter", "space"], () => toggleGroup());
404
+ list.key(["right"], () => expandCurrent());
405
+ list.key(["left"], () => collapseCurrent());
406
+ list.key(["e"], () => editLayer("project"));
407
+ list.key(["g"], () => editLayer("global"));
408
+ list.key(["l"], () => editLayer("local"));
409
+ list.key(["x", "d"], () => unsetFlow());
410
+ list.key(["/"], () => searchFlow());
411
+ ctx.setStatus(STATUS);
412
+ rebuild();
413
+ renderView();
414
+ list.focus();
415
+ ctx.screen.render();
416
+ return {
417
+ unmount() {
418
+ list.destroy();
419
+ detail.destroy();
420
+ },
421
+ };
422
+ }
423
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/tui/config/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * IronBee — Import area
3
+ *
4
+ * Backfill historical Claude sessions → collector, from the TUI. Pick a scope
5
+ * (current project / all projects) and see a dry-run estimate; running it goes
6
+ * through the shared foreground runner (blocks the TUI, captures per-session
7
+ * progress, shows the summary). Uses only the public `src/import` barrel.
8
+ */
9
+ import { TuiArea } from "../shell/area";
10
+ export declare const importArea: TuiArea;
11
+ //# sourceMappingURL=area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/import/area.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,EAA2B,OAAO,EAAE,MAAM,eAAe,CAAC;AAgKjE,eAAO,MAAM,UAAU,EAAE,OAOxB,CAAC"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Import area
4
+ *
5
+ * Backfill historical Claude sessions → collector, from the TUI. Pick a scope
6
+ * (current project / all projects) and see a dry-run estimate; running it goes
7
+ * through the shared foreground runner (blocks the TUI, captures per-session
8
+ * progress, shows the summary). Uses only the public `src/import` barrel.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.importArea = void 0;
45
+ const blessed = __importStar(require("blessed"));
46
+ const import_1 = require("../../import");
47
+ const util_1 = require("../shell/util");
48
+ const CONCURRENCY = 4;
49
+ /** Preset time ranges (newest-first cycle). `since` uses parseSinceDuration forms. */
50
+ const RANGES = [
51
+ { label: "all time", since: null },
52
+ { label: "last 7 days", since: "7d" },
53
+ { label: "last 30 days", since: "30d" },
54
+ { label: "last 90 days", since: "90d" },
55
+ { label: "last 6 months", since: "6m" },
56
+ { label: "last 12 months", since: "12m" },
57
+ ];
58
+ const STATUS = " {bold}s{/bold} scope {bold}t{/bold} time range {bold}f{/bold} force {bold}i{/bold} run import "
59
+ + "{bold}r{/bold} refresh {bold}Esc{/bold} back {bold}q{/bold} quit";
60
+ function mountImportView(ctx) {
61
+ // Respect the switchable active project (consistent with Config / Sessions /
62
+ // Queue): the non-all scope targets the active project's Claude transcripts
63
+ // via `{ kind: "projects", paths: [projectDir] }` — NOT the raw cwd that the
64
+ // `current-project` scope would use.
65
+ const projectDir = ctx.session.projectDir;
66
+ let allProjects = false;
67
+ let force = false;
68
+ let rangeIdx = 0;
69
+ function timeRange() {
70
+ const since = RANGES[rangeIdx].since;
71
+ if (since === null) {
72
+ return null;
73
+ }
74
+ const sinceMs = (0, import_1.parseSinceDuration)(since);
75
+ if (sinceMs === null) {
76
+ return null;
77
+ }
78
+ return (0, import_1.buildTimeRange)({ sinceMs, nowMs: Date.now() });
79
+ }
80
+ const box = blessed.box({
81
+ parent: ctx.container,
82
+ top: 0,
83
+ left: 0,
84
+ width: "100%",
85
+ height: "100%",
86
+ border: { type: "line" },
87
+ label: " Import ",
88
+ tags: true,
89
+ scrollable: true,
90
+ alwaysScroll: true,
91
+ scrollbar: { ch: " " },
92
+ style: { border: { fg: "cyan" } },
93
+ content: "",
94
+ });
95
+ function scope() {
96
+ return allProjects ? { kind: "all-projects" } : { kind: "projects", paths: [projectDir] };
97
+ }
98
+ function render() {
99
+ const lines = [];
100
+ lines.push("{bold}Import historical Claude sessions → collector{/bold}");
101
+ lines.push("{gray-fg}" + "─".repeat(56) + "{/gray-fg}");
102
+ lines.push(` {gray-fg}scope:{/gray-fg} ${allProjects ? "all Claude projects" : "active project"} {gray-fg}(s){/gray-fg}`);
103
+ lines.push(` {gray-fg}time range:{/gray-fg} ${RANGES[rangeIdx].label} {gray-fg}(t){/gray-fg}`);
104
+ lines.push(` {gray-fg}force:{/gray-fg} ${force ? "{yellow-fg}on{/yellow-fg} — re-import already-imported" : "off"} {gray-fg}(f){/gray-fg}`);
105
+ lines.push(` {gray-fg}concurrency:{/gray-fg} ${CONCURRENCY}`);
106
+ lines.push("");
107
+ const range = timeRange();
108
+ let summary;
109
+ try {
110
+ // estimateImport projects analytics and logs warnings to stdout —
111
+ // suppress them so they don't corrupt the screen during render.
112
+ summary = ctx.session.silently(() => {
113
+ const targets = (0, import_1.applyTimeRange)((0, import_1.findTranscripts)(scope()), range);
114
+ return (0, import_1.estimateImport)({ targets, timeRange: range, concurrency: CONCURRENCY, force });
115
+ });
116
+ }
117
+ catch (e) {
118
+ lines.push(`{red-fg}Estimate failed:{/red-fg} ${(0, util_1.escapeTags)(e instanceof Error ? e.message : String(e))}`);
119
+ }
120
+ if (summary !== undefined) {
121
+ const collector = summary.collectorUrl !== null
122
+ ? (0, util_1.escapeTags)(summary.collectorUrl)
123
+ : "{red-fg}not configured — import will not send events{/red-fg}";
124
+ lines.push(` {gray-fg}collector:{/gray-fg} ${collector}`);
125
+ lines.push(` {gray-fg}to import:{/gray-fg} {bold}${summary.toImportCount}{/bold} sessions {gray-fg}skipped:{/gray-fg} ${summary.skippedCount}`);
126
+ lines.push(` {gray-fg}est. cost:{/gray-fg} $${summary.estimatedCostUsd.toFixed(4)}`);
127
+ lines.push(` {gray-fg}est. events:{/gray-fg} ${(0, util_1.escapeTags)(JSON.stringify(summary.estimatedEvents))}`);
128
+ }
129
+ lines.push("");
130
+ lines.push("{gray-fg}i = run import (blocking, output shown) · r = refresh estimate{/gray-fg}");
131
+ box.setContent(lines.join("\n"));
132
+ box.setScroll(0);
133
+ ctx.screen.render();
134
+ }
135
+ async function runImport() {
136
+ const sc = scope();
137
+ const range = timeRange();
138
+ await ctx.session.runWithOutput("Import", async () => {
139
+ const targets = (0, import_1.applyTimeRange)((0, import_1.findTranscripts)(sc), range);
140
+ if (targets.length === 0) {
141
+ return "No transcripts found for this scope / time range.";
142
+ }
143
+ let imported = 0;
144
+ let skipped = 0;
145
+ let failed = 0;
146
+ let done = 0;
147
+ await (0, import_1.runConcurrentPool)({
148
+ items: targets,
149
+ concurrency: CONCURRENCY,
150
+ process: (t) => (0, import_1.importSession)({ target: t, force }),
151
+ onComplete: (res) => {
152
+ done += 1;
153
+ if (res.status === "imported") {
154
+ imported += 1;
155
+ }
156
+ else if (res.status === "failed") {
157
+ failed += 1;
158
+ }
159
+ else {
160
+ skipped += 1;
161
+ }
162
+ const reason = res.reason !== undefined ? ` — ${res.reason}` : "";
163
+ console.log(`[${done}/${targets.length}] ${res.sessionId}: ${res.status}${reason}`);
164
+ },
165
+ });
166
+ return `\nDone: ${imported} imported, ${skipped} skipped, ${failed} failed (of ${targets.length}).`;
167
+ });
168
+ render();
169
+ }
170
+ box.key(["s"], () => {
171
+ allProjects = !allProjects;
172
+ render();
173
+ });
174
+ box.key(["t"], () => {
175
+ rangeIdx = (rangeIdx + 1) % RANGES.length;
176
+ render();
177
+ });
178
+ box.key(["f"], () => {
179
+ force = !force;
180
+ render();
181
+ });
182
+ box.key(["i"], () => { void runImport(); });
183
+ box.key(["r"], () => render());
184
+ ctx.setStatus(STATUS);
185
+ render();
186
+ box.focus();
187
+ ctx.screen.render();
188
+ return {
189
+ unmount() {
190
+ box.destroy();
191
+ },
192
+ };
193
+ }
194
+ exports.importArea = {
195
+ id: "import",
196
+ title: "Import",
197
+ summary: "Backfill historical Claude sessions → collector (current / all projects)",
198
+ mount(ctx) {
199
+ return mountImportView(ctx);
200
+ },
201
+ };
202
+ //# sourceMappingURL=area.js.map