@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 @@
1
+ {"version":3,"file":"install-snapshots.js","sourceRoot":"","sources":["../../src/lib/install-snapshots.ts"],"names":[],"mappings":"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"}
@@ -39,8 +39,6 @@
39
39
  export interface ProjectEntry {
40
40
  /** Absolute, realpath-canonicalized project directory. Identity key. */
41
41
  path: string;
42
- /** Client names (claude, cursor, …) installed into this project. */
43
- clients: string[];
44
42
  /** ISO 8601 timestamp of the first install. */
45
43
  installedAt: string;
46
44
  }
@@ -79,19 +77,14 @@ export declare function canonicalizePath(projectDir: string): string;
79
77
  * Failures are swallowed and logged — registry maintenance must not break
80
78
  * the user-visible `install` / `register` flow.
81
79
  */
82
- export declare function upsertProject(projectDir: string, clients: string[]): void;
80
+ export declare function upsertProject(projectDir: string): void;
83
81
  /**
84
- * Remove `clients` from a project entry. When the resulting `clients` list
85
- * is empty (every client uninstalled), the entry itself is dropped. When
86
- * `clients` is omitted, the entry is removed regardless of which clients
87
- * are recorded used by ad-hoc cleanup paths.
88
- *
89
- * Idempotent. Returns `true` when something was actually removed (entry
90
- * dropped or clients trimmed); `false` when there was nothing matching to
91
- * change. Lets callers like `ironbee unregister` distinguish "removed
92
- * vs. nothing-to-remove" without re-implementing the `pathMatches` lookup.
82
+ * Remove a project entry from the inventory entirely. Idempotent — returns
83
+ * `true` when an entry was removed, `false` when there was no matching entry.
84
+ * Lets callers like `ironbee unregister` distinguish "removed vs nothing to
85
+ * remove" without re-implementing the `pathMatches` lookup.
93
86
  */
94
- export declare function removeProject(projectDir: string, clients?: string[]): boolean;
87
+ export declare function removeProject(projectDir: string): boolean;
95
88
  /**
96
89
  * Return every registered project, raw (no staleness filtering). Callers
97
90
  * that want pruned results compose this with their own active-check —
@@ -1 +1 @@
1
- {"version":3,"file":"projects-registry.d.ts","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AASH,MAAM,WAAW,YAAY;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAsC3C;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO3D;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA4BzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAgC7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAE7C"}
1
+ {"version":3,"file":"projects-registry.d.ts","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AASH,MAAM,WAAW,YAAY;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAqC3C;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO3D;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqBtD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAezD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAE7C"}
@@ -89,11 +89,10 @@ function loadRegistry() {
89
89
  }
90
90
  const projects = obj.projects
91
91
  .filter((p) => p !== null && typeof p === "object")
92
+ // A legacy `clients` field on disk is ignored — the registry is now a
93
+ // set of project paths; client decisions follow live detection.
92
94
  .map((p) => ({
93
95
  path: typeof p.path === "string" ? p.path : "",
94
- clients: Array.isArray(p.clients)
95
- ? p.clients.filter((c) => typeof c === "string")
96
- : [],
97
96
  installedAt: typeof p.installedAt === "string" ? p.installedAt : "",
98
97
  }))
99
98
  .filter((p) => p.path.length > 0);
@@ -190,27 +189,20 @@ function pathMatches(stored, canonical) {
190
189
  * Failures are swallowed and logged — registry maintenance must not break
191
190
  * the user-visible `install` / `register` flow.
192
191
  */
193
- function upsertProject(projectDir, clients) {
194
- if (clients.length === 0) {
195
- return;
196
- }
192
+ function upsertProject(projectDir) {
197
193
  try {
198
194
  const canonical = canonicalizePath(projectDir);
199
195
  const file = loadRegistry();
200
196
  const now = new Date().toISOString();
201
197
  const idx = file.projects.findIndex((p) => pathMatches(p.path, canonical));
202
198
  if (idx === -1) {
203
- file.projects.push({
204
- path: canonical,
205
- clients: dedupe(clients),
206
- installedAt: now,
207
- });
199
+ file.projects.push({ path: canonical, installedAt: now });
208
200
  }
209
201
  else {
202
+ // Rewrite canonical (legacy paths get canonicalized on re-touch); keep installedAt.
210
203
  const existing = file.projects[idx];
211
204
  file.projects[idx] = {
212
205
  path: canonical,
213
- clients: dedupe([...existing.clients, ...clients]),
214
206
  installedAt: existing.installedAt.length > 0 ? existing.installedAt : now,
215
207
  };
216
208
  }
@@ -221,17 +213,12 @@ function upsertProject(projectDir, clients) {
221
213
  }
222
214
  }
223
215
  /**
224
- * Remove `clients` from a project entry. When the resulting `clients` list
225
- * is empty (every client uninstalled), the entry itself is dropped. When
226
- * `clients` is omitted, the entry is removed regardless of which clients
227
- * are recorded used by ad-hoc cleanup paths.
228
- *
229
- * Idempotent. Returns `true` when something was actually removed (entry
230
- * dropped or clients trimmed); `false` when there was nothing matching to
231
- * change. Lets callers like `ironbee unregister` distinguish "removed
232
- * vs. nothing-to-remove" without re-implementing the `pathMatches` lookup.
216
+ * Remove a project entry from the inventory entirely. Idempotent — returns
217
+ * `true` when an entry was removed, `false` when there was no matching entry.
218
+ * Lets callers like `ironbee unregister` distinguish "removed vs nothing to
219
+ * remove" without re-implementing the `pathMatches` lookup.
233
220
  */
234
- function removeProject(projectDir, clients) {
221
+ function removeProject(projectDir) {
235
222
  try {
236
223
  const canonical = canonicalizePath(projectDir);
237
224
  const file = loadRegistry();
@@ -239,26 +226,7 @@ function removeProject(projectDir, clients) {
239
226
  if (idx === -1) {
240
227
  return false;
241
228
  }
242
- if (clients === undefined || clients.length === 0) {
243
- file.projects.splice(idx, 1);
244
- }
245
- else {
246
- const existing = file.projects[idx];
247
- const remaining = existing.clients.filter((c) => !clients.includes(c));
248
- if (remaining.length === existing.clients.length) {
249
- // None of the requested clients were in the entry — nothing changed.
250
- return false;
251
- }
252
- if (remaining.length === 0) {
253
- file.projects.splice(idx, 1);
254
- }
255
- else {
256
- file.projects[idx] = {
257
- ...existing,
258
- clients: remaining,
259
- };
260
- }
261
- }
229
+ file.projects.splice(idx, 1);
262
230
  writeRegistry(file);
263
231
  return true;
264
232
  }
@@ -276,7 +244,4 @@ function removeProject(projectDir, clients) {
276
244
  function listProjects() {
277
245
  return loadRegistry().projects;
278
246
  }
279
- function dedupe(items) {
280
- return Array.from(new Set(items));
281
- }
282
247
  //# sourceMappingURL=projects-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects-registry.js","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects-registry.js","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * IronBee — `ironbee tui` command
3
+ *
4
+ * Umbrella entry for the interactive full-screen TUI. Builds the shared screen
5
+ * + session, runs the shell (home menu over the area registry, or deep-linked
6
+ * straight into `[area]`), and on exit performs the one-shot artifact rerender
7
+ * if any area changed artifact-affecting config.
8
+ *
9
+ * blessed and the whole TUI stack are required lazily inside the action so a
10
+ * normal `ironbee <other-command>` invocation never loads them.
11
+ */
12
+ import { Command } from "commander";
13
+ export interface TuiOpts {
14
+ projectDir?: string;
15
+ }
16
+ export declare function runTui(area: string | undefined, opts: TuiOpts): Promise<void>;
17
+ export declare const tuiCommand: Command;
18
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/tui/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAkBD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCnF;AAED,eAAO,MAAM,UAAU,EAAE,OAenB,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — `ironbee tui` command
4
+ *
5
+ * Umbrella entry for the interactive full-screen TUI. Builds the shared screen
6
+ * + session, runs the shell (home menu over the area registry, or deep-linked
7
+ * straight into `[area]`), and on exit performs the one-shot artifact rerender
8
+ * if any area changed artifact-affecting config.
9
+ *
10
+ * blessed and the whole TUI stack are required lazily inside the action so a
11
+ * normal `ironbee <other-command>` invocation never loads them.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.tuiCommand = void 0;
15
+ exports.runTui = runTui;
16
+ const commander_1 = require("commander");
17
+ const path_1 = require("path");
18
+ const output_1 = require("../lib/output");
19
+ const prompt_1 = require("../lib/prompt");
20
+ function reportRerender(projectDir) {
21
+ const rerenderMod = require("./shell/rerender");
22
+ try {
23
+ const clients = rerenderMod.rerenderArtifacts(projectDir);
24
+ if (clients.length > 0) {
25
+ console.log(`${output_1.pc.green("✓")} Re-rendered ${output_1.pc.bold(clients.join(", "))} artifacts in ${output_1.pc.dim(projectDir)}`);
26
+ console.log(` ${output_1.pc.yellow("⚠")} Restart your editor / agent session for the changes to take effect.`);
27
+ }
28
+ else {
29
+ console.log(` ${output_1.pc.dim("· no clients detected in")} ${output_1.pc.dim(projectDir)} ${output_1.pc.dim("— skipped rerender")}`);
30
+ }
31
+ }
32
+ catch (e) {
33
+ console.error(`${output_1.pc.red("✗")} Artifact rerender failed: ${e instanceof Error ? e.message : String(e)}`);
34
+ console.error(` ${output_1.pc.dim("Run")} ${output_1.pc.cyan("ironbee install")} ${output_1.pc.dim("to resync artifacts with config.")}`);
35
+ }
36
+ }
37
+ async function runTui(area, opts) {
38
+ if (!(0, prompt_1.isInteractive)()) {
39
+ console.error(`${output_1.pc.red("✗")} ${output_1.pc.bold("ironbee tui")} requires an interactive terminal (TTY).`);
40
+ console.error(` ${output_1.pc.dim("In non-interactive contexts use")} ${output_1.pc.cyan("ironbee config get/set/list")} ${output_1.pc.dim("instead.")}`);
41
+ process.exitCode = 1;
42
+ return;
43
+ }
44
+ const projectDir = (0, path_1.resolve)(opts.projectDir ?? process.cwd());
45
+ // Lazy require — keeps blessed + the TUI stack out of every non-TUI command.
46
+ const registry = require("./shell/registry");
47
+ if (area !== undefined && registry.findArea(area) === undefined) {
48
+ const ids = registry.AREAS.map((a) => a.id).join(", ");
49
+ console.error(`${output_1.pc.red("✗")} Unknown TUI area ${output_1.pc.bold(area)}. Known areas: ${output_1.pc.cyan(ids)}.`);
50
+ process.exitCode = 1;
51
+ return;
52
+ }
53
+ const blessedMod = require("blessed");
54
+ const sessionMod = require("./shell/session");
55
+ const shellMod = require("./shell/shell");
56
+ const screen = blessedMod.screen({
57
+ smartCSR: true,
58
+ title: "IronBee TUI",
59
+ fullUnicode: true,
60
+ });
61
+ const session = new sessionMod.TuiSession(screen, projectDir);
62
+ await shellMod.runShell(session, area);
63
+ // The shell already tore down the screen; safe to print now. Re-render every
64
+ // project whose artifact-affecting config changed (the active project is
65
+ // switchable, so this can be more than one). Operational commands (install /
66
+ // uninstall / drain / import) run in the foreground inside the TUI, so
67
+ // there's nothing else to flush here.
68
+ for (const dir of session.rerenderProjects()) {
69
+ reportRerender(dir);
70
+ }
71
+ }
72
+ exports.tuiCommand = new commander_1.Command("tui")
73
+ .description("Interactive full-screen TUI. Home menu of areas (Configuration, Platforms, …); "
74
+ + "open one directly with `ironbee tui <area>`. The config area reads each key's description, "
75
+ + "shows global / project / local + merged values side by side, and edits/unsets any layer in place.")
76
+ .argument("[area]", "Open a specific area directly (e.g. `config`). Omit for the home menu.")
77
+ .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
78
+ .action(async (area, opts) => {
79
+ try {
80
+ await runTui(area, opts);
81
+ }
82
+ catch (e) {
83
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : String(e)}`);
84
+ process.exit(1);
85
+ }
86
+ });
87
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/tui/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * IronBee — Config area: the TuiArea wrapper around the config browser view.
3
+ */
4
+ import { TuiArea } from "../shell/area";
5
+ export declare const configArea: TuiArea;
6
+ //# sourceMappingURL=area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/config/area.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA2B,OAAO,EAAE,MAAM,eAAe,CAAC;AAGjE,eAAO,MAAM,UAAU,EAAE,OAOxB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Config area: the TuiArea wrapper around the config browser view.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configArea = void 0;
7
+ const view_1 = require("./view");
8
+ exports.configArea = {
9
+ id: "config",
10
+ title: "Configuration",
11
+ summary: "Browse & edit config keys across global / project / local layers",
12
+ mount(ctx) {
13
+ return (0, view_1.mountConfigView)(ctx);
14
+ },
15
+ };
16
+ //# sourceMappingURL=area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.js","sourceRoot":"","sources":["../../../src/tui/config/area.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,iCAAyC;AAE5B,QAAA,UAAU,GAAY;IAC/B,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,kEAAkE;IAC3E,KAAK,CAAC,GAAgB;QAClB,OAAO,IAAA,sBAAe,EAAC,GAAG,CAAC,CAAC;IAChC,CAAC;CACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * IronBee — Config TUI: docs generator (canonical source → docs table)
3
+ *
4
+ * `CONFIG_SCHEMA` is the single source of truth for config-key metadata. The
5
+ * key-reference table in `docs/claude-md/configuration.md` is GENERATED from it
6
+ * by `renderConfigDocsTable`, spliced between the marker comments below by
7
+ * `replaceConfigTable`. `scripts/generate-config-docs.js` regenerates the file;
8
+ * `tests/unit/tui/config-docs.test.ts` fails when the committed table drifts
9
+ * from the schema.
10
+ *
11
+ * Pure module — no fs / side effects. The script and test own the file I/O.
12
+ */
13
+ /** Marker that opens the generated table region in configuration.md. */
14
+ export declare const CONFIG_TABLE_START: string;
15
+ /** Marker that closes the generated table region. */
16
+ export declare const CONFIG_TABLE_END: string;
17
+ /**
18
+ * Render the full config-key reference as grouped markdown tables, ordered by
19
+ * `orderedEntries()`. One `### <group>` heading + table per group.
20
+ */
21
+ export declare function renderConfigDocsTable(): string;
22
+ /**
23
+ * Replace the table between the markers in `markdown` with a freshly-rendered
24
+ * one. Throws when the markers are missing or out of order. Idempotent — the
25
+ * region between the markers is fully replaced each call.
26
+ */
27
+ export declare function replaceConfigTable(markdown: string): string;
28
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/tui/config/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,EAAE,MACoH,CAAC;AAEtJ,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,EAAE,MAA4C,CAAC;AAO5E;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAoB9C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY3D"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Config TUI: docs generator (canonical source → docs table)
4
+ *
5
+ * `CONFIG_SCHEMA` is the single source of truth for config-key metadata. The
6
+ * key-reference table in `docs/claude-md/configuration.md` is GENERATED from it
7
+ * by `renderConfigDocsTable`, spliced between the marker comments below by
8
+ * `replaceConfigTable`. `scripts/generate-config-docs.js` regenerates the file;
9
+ * `tests/unit/tui/config-docs.test.ts` fails when the committed table drifts
10
+ * from the schema.
11
+ *
12
+ * Pure module — no fs / side effects. The script and test own the file I/O.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CONFIG_TABLE_END = exports.CONFIG_TABLE_START = void 0;
16
+ exports.renderConfigDocsTable = renderConfigDocsTable;
17
+ exports.replaceConfigTable = replaceConfigTable;
18
+ const schema_1 = require("./schema");
19
+ /** Marker that opens the generated table region in configuration.md. */
20
+ exports.CONFIG_TABLE_START = "<!-- IRONBEE:CONFIG-TABLE:START (generated from src/tui/config/schema.ts — run `node scripts/generate-config-docs.js`; do not edit by hand) -->";
21
+ /** Marker that closes the generated table region. */
22
+ exports.CONFIG_TABLE_END = "<!-- IRONBEE:CONFIG-TABLE:END -->";
23
+ /** Escape a value for safe placement inside a markdown table cell. */
24
+ function cell(s) {
25
+ return s.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
26
+ }
27
+ /**
28
+ * Render the full config-key reference as grouped markdown tables, ordered by
29
+ * `orderedEntries()`. One `### <group>` heading + table per group.
30
+ */
31
+ function renderConfigDocsTable() {
32
+ const entries = (0, schema_1.orderedEntries)();
33
+ const out = [];
34
+ let lastGroup = "";
35
+ for (const e of entries) {
36
+ const group = (0, schema_1.groupOf)(e.path);
37
+ if (group !== lastGroup) {
38
+ if (lastGroup !== "") {
39
+ out.push("");
40
+ }
41
+ out.push(`### ${(0, schema_1.groupTitle)(group)}`);
42
+ out.push("");
43
+ out.push("| Key | Type | Default | Artifacts | Description |");
44
+ out.push("| --- | --- | --- | --- | --- |");
45
+ lastGroup = group;
46
+ }
47
+ const artifacts = e.artifactAffecting ? "rerender" : "—";
48
+ out.push(`| \`${e.path}\` | \`${e.type}\` | ${cell(e.def)} | ${artifacts} | ${cell(e.description)} |`);
49
+ }
50
+ return out.join("\n");
51
+ }
52
+ /**
53
+ * Replace the table between the markers in `markdown` with a freshly-rendered
54
+ * one. Throws when the markers are missing or out of order. Idempotent — the
55
+ * region between the markers is fully replaced each call.
56
+ */
57
+ function replaceConfigTable(markdown) {
58
+ const startIdx = markdown.indexOf(exports.CONFIG_TABLE_START);
59
+ const endIdx = markdown.indexOf(exports.CONFIG_TABLE_END);
60
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) {
61
+ throw new Error("Config table markers not found (or out of order) in configuration.md. "
62
+ + `Expected ${exports.CONFIG_TABLE_START} … ${exports.CONFIG_TABLE_END}.`);
63
+ }
64
+ const head = markdown.slice(0, startIdx + exports.CONFIG_TABLE_START.length);
65
+ const tail = markdown.slice(endIdx);
66
+ return `${head}\n\n${renderConfigDocsTable()}\n\n${tail}`;
67
+ }
68
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/tui/config/docs.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAoBH,sDAoBC;AAOD,gDAYC;AAzDD,qCAAkF;AAElF,wEAAwE;AAC3D,QAAA,kBAAkB,GAC3B,iJAAiJ,CAAC;AAEtJ,qDAAqD;AACxC,QAAA,gBAAgB,GAAW,mCAAmC,CAAC;AAE5E,sEAAsE;AACtE,SAAS,IAAI,CAAC,CAAS;IACnB,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB;IACjC,MAAM,OAAO,GAAwB,IAAA,uBAAc,GAAE,CAAC;IACtD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAW,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,GAAW,IAAA,gBAAO,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,OAAO,IAAA,mBAAU,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC5C,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,SAAS,GAAW,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IAC/C,MAAM,QAAQ,GAAW,QAAQ,CAAC,OAAO,CAAC,0BAAkB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAW,QAAQ,CAAC,OAAO,CAAC,wBAAgB,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACX,wEAAwE;cACtE,YAAY,0BAAkB,MAAM,wBAAgB,GAAG,CAC5D,CAAC;IACN,CAAC;IACD,MAAM,IAAI,GAAW,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,0BAAkB,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAW,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,GAAG,IAAI,OAAO,qBAAqB,EAAE,OAAO,IAAI,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * IronBee — Config TUI: write core
3
+ *
4
+ * Layer-scoped set / unset that write the targeted config file ONLY (no
5
+ * console output, no prompts, no artifact rerender). The shell batches all
6
+ * edits and re-renders client artifacts once on exit (see
7
+ * `shell/rerender.ts`) — never mid-session, so the full-screen UI is never
8
+ * corrupted by `client.install` stdout.
9
+ *
10
+ * Depends only on the public `lib/` surface, never on the `commands/config.ts`
11
+ * command layer.
12
+ */
13
+ /** Whether changing this key requires re-rendering installed client artifacts. */
14
+ export declare function affectsArtifacts(key: string): boolean;
15
+ /** Result of a layer set. */
16
+ export interface LayerSetResult {
17
+ /** The coerced value that was written. */
18
+ value: unknown;
19
+ /** Whether this key triggers an artifact rerender on exit. */
20
+ artifactAffecting: boolean;
21
+ }
22
+ /**
23
+ * Set `key` to `rawValue` in the given layer file. `json` forces strict JSON
24
+ * parsing (otherwise heuristic: JSON-or-raw-string). Writes the file in place.
25
+ */
26
+ export declare function setLayerValue(layerPath: string, key: string, rawValue: string, json: boolean): LayerSetResult;
27
+ /** Result of a layer unset. */
28
+ export interface LayerUnsetResult {
29
+ /** `true` when the key was present and removed; `false` when it was absent. */
30
+ removed: boolean;
31
+ /** Whether this key triggers an artifact rerender on exit. */
32
+ artifactAffecting: boolean;
33
+ }
34
+ /** Remove `key` from the given layer file. Idempotent — no-op when absent. */
35
+ export declare function unsetLayerValue(layerPath: string, key: string): LayerUnsetResult;
36
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/tui/config/edit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AA2BD,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAM7G;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC7B,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAC;CAC9B;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAOhF"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Config TUI: write core
4
+ *
5
+ * Layer-scoped set / unset that write the targeted config file ONLY (no
6
+ * console output, no prompts, no artifact rerender). The shell batches all
7
+ * edits and re-renders client artifacts once on exit (see
8
+ * `shell/rerender.ts`) — never mid-session, so the full-screen UI is never
9
+ * corrupted by `client.install` stdout.
10
+ *
11
+ * Depends only on the public `lib/` surface, never on the `commands/config.ts`
12
+ * command layer.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.affectsArtifacts = affectsArtifacts;
16
+ exports.setLayerValue = setLayerValue;
17
+ exports.unsetLayerValue = unsetLayerValue;
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
20
+ const schema_1 = require("./schema");
21
+ const value_1 = require("./value");
22
+ /** Whether changing this key requires re-rendering installed client artifacts. */
23
+ function affectsArtifacts(key) {
24
+ return schema_1.ARTIFACT_AFFECTING_TOP_KEYS.has((0, schema_1.topKey)(key));
25
+ }
26
+ /**
27
+ * Read a config layer file as a plain object. Missing / empty → `{}`. Throws
28
+ * on malformed JSON or a non-object top-level so the TUI surfaces the problem
29
+ * instead of silently clobbering a hand-edited-but-broken file.
30
+ */
31
+ function readRawConfig(filePath) {
32
+ if (!(0, fs_1.existsSync)(filePath)) {
33
+ return {};
34
+ }
35
+ const raw = (0, fs_1.readFileSync)(filePath, "utf-8");
36
+ if (raw.trim().length === 0) {
37
+ return {};
38
+ }
39
+ const parsed = JSON.parse(raw);
40
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
41
+ throw new Error(`Config at ${filePath} is not a JSON object.`);
42
+ }
43
+ return parsed;
44
+ }
45
+ function writeRawConfig(filePath, config) {
46
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(filePath), { recursive: true });
47
+ (0, fs_1.writeFileSync)(filePath, JSON.stringify(config, null, 2) + "\n");
48
+ }
49
+ /**
50
+ * Set `key` to `rawValue` in the given layer file. `json` forces strict JSON
51
+ * parsing (otherwise heuristic: JSON-or-raw-string). Writes the file in place.
52
+ */
53
+ function setLayerValue(layerPath, key, rawValue, json) {
54
+ const value = (0, value_1.parseValue)(rawValue, json);
55
+ const config = readRawConfig(layerPath);
56
+ (0, value_1.setAtPath)(config, key, value);
57
+ writeRawConfig(layerPath, config);
58
+ return { value, artifactAffecting: affectsArtifacts(key) };
59
+ }
60
+ /** Remove `key` from the given layer file. Idempotent — no-op when absent. */
61
+ function unsetLayerValue(layerPath, key) {
62
+ const config = readRawConfig(layerPath);
63
+ const removed = (0, value_1.unsetAtPath)(config, key);
64
+ if (removed) {
65
+ writeRawConfig(layerPath, config);
66
+ }
67
+ return { removed, artifactAffecting: affectsArtifacts(key) };
68
+ }
69
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tui/config/edit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAQH,4CAEC;AAuCD,sCAMC;AAWD,0CAOC;AAvED,2BAAwE;AACxE,+BAA+B;AAC/B,qCAA+D;AAC/D,mCAA6D;AAE7D,kFAAkF;AAClF,SAAgB,gBAAgB,CAAC,GAAW;IACxC,OAAO,oCAA2B,CAAC,GAAG,CAAC,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,QAAgB;IACnC,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAW,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,wBAAwB,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAiC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,MAA+B;IACrE,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,IAAA,kBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAUD;;;GAGG;AACH,SAAgB,aAAa,CAAC,SAAiB,EAAE,GAAW,EAAE,QAAgB,EAAE,IAAa;IACzF,MAAM,KAAK,GAAY,IAAA,kBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAA4B,aAAa,CAAC,SAAS,CAAC,CAAC;IACjE,IAAA,iBAAS,EAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC;AAUD,8EAA8E;AAC9E,SAAgB,eAAe,CAAC,SAAiB,EAAE,GAAW;IAC1D,MAAM,MAAM,GAA4B,aAAa,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAY,IAAA,mBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACV,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * IronBee — Config TUI: layer introspection
3
+ *
4
+ * For a given dotted key, resolves what each of the three config layers
5
+ * (global / project / local) holds, what the merged effective value is, which
6
+ * layer that effective value comes from, and whether a live env-var override
7
+ * shadows the file layers. This is the read model the detail pane renders.
8
+ *
9
+ * Reads only the already-public lib surface (`loadConfig`, `getConfigLayerPaths`,
10
+ * `findActiveEnvOverride`) so the TUI stays decoupled from the command layer.
11
+ */
12
+ import { IronBeeConfig } from "../../lib/config";
13
+ /** Which source supplies the merged effective value for a key. */
14
+ export type EffectiveSource = "global" | "project" | "local" | "env" | "none";
15
+ /** A layer's recorded name. */
16
+ export type LayerName = "global" | "project" | "local";
17
+ /** One layer's raw on-disk value for a key. */
18
+ export interface LayerValue {
19
+ layer: LayerName;
20
+ /** Whether the key is an own-property at this layer (vs. absent). */
21
+ present: boolean;
22
+ /** The raw value at this layer (`undefined` when absent). */
23
+ value: unknown;
24
+ /** On-disk path of this layer's file (`undefined` for project/local with no projectDir). */
25
+ filePath: string | undefined;
26
+ }
27
+ /** A live env-var override shadowing the file layers for a key. */
28
+ export interface EnvOverrideValue {
29
+ envVar: string;
30
+ value: unknown;
31
+ }
32
+ /** The fully-resolved read model for one key. */
33
+ export interface KeyIntrospection {
34
+ path: string;
35
+ /** global, project, local — always in that order. */
36
+ layers: LayerValue[];
37
+ /** Set when an env var currently overrides this key. */
38
+ envOverride: EnvOverrideValue | undefined;
39
+ /** Merged effective value (file layers + env), or `undefined` when unset everywhere. */
40
+ merged: unknown;
41
+ /** Which source the merged value comes from. */
42
+ effective: EffectiveSource;
43
+ }
44
+ /** Parsed layers + on-disk paths + merged config, read once and reused. */
45
+ export interface LoadedLayers {
46
+ globalPath: string;
47
+ projectPath: string | undefined;
48
+ localPath: string | undefined;
49
+ global: Record<string, unknown>;
50
+ project: Record<string, unknown>;
51
+ local: Record<string, unknown>;
52
+ merged: IronBeeConfig;
53
+ }
54
+ /** Reads all three layer files + the merged config in one pass. */
55
+ export declare function loadLayers(projectDir?: string): LoadedLayers;
56
+ /** Builds the read model for one key from already-loaded layers. */
57
+ export declare function introspectKey(path: string, layers: LoadedLayers): KeyIntrospection;
58
+ //# sourceMappingURL=introspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../../src/tui/config/introspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAIH,aAAa,EAEhB,MAAM,kBAAkB,CAAC;AAG1B,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9E,+BAA+B;AAC/B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wDAAwD;IACxD,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,wFAAwF;IACxF,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;CACzB;AAqBD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAY5D;AAYD,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,gBAAgB,CA8BlF"}