@noir-ai/cli 1.9.1-beta.1 → 1.9.2-beta.1

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 (37) hide show
  1. package/dist/bin.js +8 -8
  2. package/dist/{chunk-BM3VEJ2J.js → chunk-CN3KUSQT.js} +2 -2
  3. package/dist/{chunk-JUVY6L3F.js → chunk-PED37JWV.js} +3 -3
  4. package/dist/{chunk-3NT7RW6K.js → chunk-S2PDLS4C.js} +1 -1
  5. package/dist/{chunk-3NT7RW6K.js.map → chunk-S2PDLS4C.js.map} +1 -1
  6. package/dist/{chunk-L7XR7EA3.js → chunk-US567S5T.js} +2 -2
  7. package/dist/{create-UO3QTGL7.js → create-DJ6B5K36.js} +3 -3
  8. package/dist/index.js +2 -2
  9. package/dist/{install-4XEGT4GR.js → install-X7QSYLLS.js} +3 -3
  10. package/dist/{sync-MZETGPOJ.js → sync-FKWXQOWT.js} +3 -3
  11. package/dist/tui/{chunk-XFBZ5X3B.js → chunk-2KJ27HGA.js} +2 -2
  12. package/dist/tui/{chunk-A2Q74DOV.js → chunk-MD6WXZBF.js} +9 -2
  13. package/dist/tui/{chunk-A2Q74DOV.js.map → chunk-MD6WXZBF.js.map} +1 -1
  14. package/dist/tui/{chunk-X2CROVY6.js → chunk-R6246ISQ.js} +2 -2
  15. package/dist/tui/{chunk-FQCYGUCG.js → chunk-RCMEIONF.js} +3 -3
  16. package/dist/tui/{create-Z5HEBB7K.js → create-CFAXIIYW.js} +3 -3
  17. package/dist/tui/index.js +112 -86
  18. package/dist/tui/index.js.map +1 -1
  19. package/dist/tui/{install-LZQUUIFK.js → install-HZKZXBQD.js} +3 -3
  20. package/dist/tui/{sync-5M2UEOKW.js → sync-Y7MTQ4JC.js} +3 -3
  21. package/dist/tui/{update-CHPJMWOV.js → update-VIQUC3DT.js} +4 -4
  22. package/dist/{update-7JNJ7JF3.js → update-6P7SEZ67.js} +4 -4
  23. package/package.json +11 -11
  24. /package/dist/{chunk-BM3VEJ2J.js.map → chunk-CN3KUSQT.js.map} +0 -0
  25. /package/dist/{chunk-JUVY6L3F.js.map → chunk-PED37JWV.js.map} +0 -0
  26. /package/dist/{chunk-L7XR7EA3.js.map → chunk-US567S5T.js.map} +0 -0
  27. /package/dist/{create-UO3QTGL7.js.map → create-DJ6B5K36.js.map} +0 -0
  28. /package/dist/{install-4XEGT4GR.js.map → install-X7QSYLLS.js.map} +0 -0
  29. /package/dist/{sync-MZETGPOJ.js.map → sync-FKWXQOWT.js.map} +0 -0
  30. /package/dist/tui/{chunk-XFBZ5X3B.js.map → chunk-2KJ27HGA.js.map} +0 -0
  31. /package/dist/tui/{chunk-X2CROVY6.js.map → chunk-R6246ISQ.js.map} +0 -0
  32. /package/dist/tui/{chunk-FQCYGUCG.js.map → chunk-RCMEIONF.js.map} +0 -0
  33. /package/dist/tui/{create-Z5HEBB7K.js.map → create-CFAXIIYW.js.map} +0 -0
  34. /package/dist/tui/{install-LZQUUIFK.js.map → install-HZKZXBQD.js.map} +0 -0
  35. /package/dist/tui/{sync-5M2UEOKW.js.map → sync-Y7MTQ4JC.js.map} +0 -0
  36. /package/dist/tui/{update-CHPJMWOV.js.map → update-VIQUC3DT.js.map} +0 -0
  37. /package/dist/{update-7JNJ7JF3.js.map → update-6P7SEZ67.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  installManagedNode
3
- } from "./chunk-X2CROVY6.js";
3
+ } from "./chunk-R6246ISQ.js";
4
4
  import {
5
5
  EXIT,
6
6
  fail,
@@ -8,7 +8,7 @@ import {
8
8
  spinner,
9
9
  success,
10
10
  warn
11
- } from "./chunk-A2Q74DOV.js";
11
+ } from "./chunk-MD6WXZBF.js";
12
12
 
13
13
  // src/commands/update.ts
14
14
  import {
@@ -192,4 +192,4 @@ export {
192
192
  update,
193
193
  runAsyncUpdateCheck
194
194
  };
195
- //# sourceMappingURL=chunk-FQCYGUCG.js.map
195
+ //# sourceMappingURL=chunk-RCMEIONF.js.map
@@ -3,10 +3,10 @@ import {
3
3
  buildConflictOpts,
4
4
  checkWritePathDedup,
5
5
  reportPlannedWrites
6
- } from "./chunk-XFBZ5X3B.js";
6
+ } from "./chunk-2KJ27HGA.js";
7
7
  import {
8
8
  resolveInteractive
9
- } from "./chunk-A2Q74DOV.js";
9
+ } from "./chunk-MD6WXZBF.js";
10
10
 
11
11
  // src/commands/create.ts
12
12
  import { resolve } from "path";
@@ -76,4 +76,4 @@ async function create(dir, opts) {
76
76
  export {
77
77
  create
78
78
  };
79
- //# sourceMappingURL=create-Z5HEBB7K.js.map
79
+ //# sourceMappingURL=create-CFAXIIYW.js.map
package/dist/tui/index.js CHANGED
@@ -1,19 +1,21 @@
1
1
  import {
2
2
  DEFAULT_UPDATE_CONFIG,
3
3
  runAsyncUpdateCheck
4
- } from "./chunk-FQCYGUCG.js";
5
- import "./chunk-X2CROVY6.js";
4
+ } from "./chunk-RCMEIONF.js";
5
+ import "./chunk-R6246ISQ.js";
6
6
  import {
7
7
  doctor,
8
8
  init
9
- } from "./chunk-XFBZ5X3B.js";
9
+ } from "./chunk-2KJ27HGA.js";
10
10
  import {
11
11
  EXIT,
12
12
  NoirCliError,
13
13
  accessibleMode,
14
14
  badge,
15
15
  c,
16
+ contentWidth,
16
17
  definitionList,
18
+ divider,
17
19
  fail,
18
20
  handleError,
19
21
  info,
@@ -23,11 +25,10 @@ import {
23
25
  requireInteractive,
24
26
  spinner,
25
27
  table,
26
- terminalWidth,
27
28
  tip,
28
29
  useColor,
29
30
  warn
30
- } from "./chunk-A2Q74DOV.js";
31
+ } from "./chunk-MD6WXZBF.js";
31
32
 
32
33
  // src/tui/index.tsx
33
34
  import { loadProjectInfo as loadProjectInfo8 } from "@noir-ai/core";
@@ -2215,7 +2216,7 @@ function createProgram() {
2215
2216
  const force = opts.force === true;
2216
2217
  const host = parseHost(opts.host);
2217
2218
  const dryRun = opts.dryRun === true || opts.preview === true;
2218
- const { create } = await import("./create-Z5HEBB7K.js");
2219
+ const { create } = await import("./create-CFAXIIYW.js");
2219
2220
  const result = await create(dir, {
2220
2221
  transport,
2221
2222
  url: opts.url,
@@ -2254,7 +2255,7 @@ function createProgram() {
2254
2255
  ).choices(SUPPORTED_HOSTS)
2255
2256
  ).action(
2256
2257
  async (opts, cmd) => {
2257
- const { sync } = await import("./sync-5M2UEOKW.js");
2258
+ const { sync } = await import("./sync-Y7MTQ4JC.js");
2258
2259
  const host = parseHost(opts.host);
2259
2260
  const force = opts.force === true;
2260
2261
  const merge = opts.merge === true;
@@ -2461,7 +2462,7 @@ function createProgram() {
2461
2462
  "dismiss the migration banner for the current version (persists in install.json)"
2462
2463
  ).argument("[spec]", "channel ('latest'|'beta') or exact version (default: latest)").action(
2463
2464
  async (spec, opts, cmd) => {
2464
- const { install } = await import("./install-LZQUUIFK.js");
2465
+ const { install } = await import("./install-HZKZXBQD.js");
2465
2466
  const cli = cmd.optsWithGlobals();
2466
2467
  await install({
2467
2468
  ...cli,
@@ -2474,7 +2475,7 @@ function createProgram() {
2474
2475
  );
2475
2476
  installCmd.alias("migrate");
2476
2477
  program2.command("update").description("update Noir to the latest version via the active install method").option("--check", "check for a new version without changing anything").argument("[spec]", "channel ('latest'|'beta') or exact version (default: latest)").action(async (spec, opts, cmd) => {
2477
- const { update } = await import("./update-CHPJMWOV.js");
2478
+ const { update } = await import("./update-VIQUC3DT.js");
2478
2479
  const cli = cmd.optsWithGlobals();
2479
2480
  await update({ ...cli, spec, check: opts.check === true });
2480
2481
  });
@@ -2576,26 +2577,29 @@ if (isMainModule) {
2576
2577
  }
2577
2578
 
2578
2579
  // src/tui/App.tsx
2579
- import { Box as Box3, Text as Text9, useApp, useInput as useInput3 } from "ink";
2580
+ import { Box as Box5, Text as Text9, useApp, useInput as useInput3 } from "ink";
2580
2581
  import { useEffect, useState as useState4 } from "react";
2581
2582
 
2582
2583
  // src/tui/CommandInput.tsx
2583
- import { Text } from "ink";
2584
+ import { Box, Text } from "ink";
2584
2585
  import { jsx, jsxs } from "react/jsx-runtime";
2585
2586
  function CommandInput({ buffer, running }) {
2586
2587
  if (running) {
2587
- return /* @__PURE__ */ jsx(Text, { children: c.dim("\u2026") });
2588
+ return /* @__PURE__ */ jsx(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, width: contentWidth() + 4, children: /* @__PURE__ */ jsx(Text, { children: c.dim("\u2026") }) });
2588
2589
  }
2590
+ let body;
2589
2591
  if (buffer.length === 0) {
2590
- return /* @__PURE__ */ jsx(Text, { children: c.dim("type a /command (e.g. /status, /sync, /task next), or q to quit") });
2592
+ body = /* @__PURE__ */ jsx(Text, { children: c.dim("type a /command (e.g. /status, /sync, /task next), or q to quit") });
2593
+ } else {
2594
+ const isCommand = buffer.startsWith("/");
2595
+ body = /* @__PURE__ */ jsxs(Text, { children: [
2596
+ /* @__PURE__ */ jsx(Text, { children: isCommand ? c.accent("\u25B8") : c.dim("\u25B8") }),
2597
+ " ",
2598
+ buffer,
2599
+ /* @__PURE__ */ jsx(Text, { children: c.dim("\u258C") })
2600
+ ] });
2591
2601
  }
2592
- const isCommand = buffer.startsWith("/");
2593
- return /* @__PURE__ */ jsxs(Text, { children: [
2594
- /* @__PURE__ */ jsx(Text, { children: isCommand ? c.accent("\u25B8") : c.dim("\u25B8") }),
2595
- " ",
2596
- buffer,
2597
- /* @__PURE__ */ jsx(Text, { children: c.dim("\u258C") })
2598
- ] });
2602
+ return /* @__PURE__ */ jsx(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, width: contentWidth() + 4, children: body });
2599
2603
  }
2600
2604
 
2601
2605
  // src/tui/capture.ts
@@ -2665,7 +2669,7 @@ function Header({ tagline }) {
2665
2669
  }
2666
2670
 
2667
2671
  // src/tui/HomeMenu.tsx
2668
- import { Box, Text as Text4, useInput } from "ink";
2672
+ import { Box as Box2, Text as Text4, useInput } from "ink";
2669
2673
  import { useState } from "react";
2670
2674
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
2671
2675
  function flatten(sections) {
@@ -2727,12 +2731,14 @@ function HomeMenu({ sections, onSelect, onClose }) {
2727
2731
  ] }, action.id)
2728
2732
  );
2729
2733
  }
2730
- return /* @__PURE__ */ jsxs3(Box, { flexDirection: "column", children: [
2731
- /* @__PURE__ */ jsxs3(Text4, { children: [
2732
- c.bold("\u25B8 home "),
2733
- /* @__PURE__ */ jsx4(Text4, { children: c.dim(`quick actions (${rows.length})`) })
2734
+ return /* @__PURE__ */ jsxs3(Box2, { flexDirection: "column", children: [
2735
+ /* @__PURE__ */ jsxs3(Box2, { flexDirection: "column", borderStyle: "round", borderColor: "gray", width: contentWidth() + 4, children: [
2736
+ /* @__PURE__ */ jsx4(Box2, { paddingX: 1, children: /* @__PURE__ */ jsxs3(Text4, { children: [
2737
+ c.bold("\u25B8 home "),
2738
+ /* @__PURE__ */ jsx4(Text4, { children: c.dim(`quick actions (${rows.length})`) })
2739
+ ] }) }),
2740
+ rowsEl.map((row) => /* @__PURE__ */ jsx4(Box2, { paddingX: 1, children: row }, row.key ?? "row"))
2734
2741
  ] }),
2735
- rowsEl,
2736
2742
  /* @__PURE__ */ jsx4(Text4, { children: c.dim("\u2191/\u2193 navigate \xB7 Enter run \xB7 Esc close") })
2737
2743
  ] });
2738
2744
  }
@@ -2805,7 +2811,7 @@ function OutputPane({
2805
2811
  highlightQuery,
2806
2812
  activeLine
2807
2813
  }) {
2808
- const width = terminalWidth();
2814
+ const width = contentWidth();
2809
2815
  if (lines.length === 0) {
2810
2816
  return /* @__PURE__ */ jsx5(Text5, { children: c.dim("(no output \u2014 type a /command, or ? for help)") });
2811
2817
  }
@@ -2813,7 +2819,7 @@ function OutputPane({
2813
2819
  const offset = Math.min(Math.max(0, scrollOffset), maxOffset);
2814
2820
  const rows = toRows(lines.slice(offset, offset + height), offset);
2815
2821
  return /* @__PURE__ */ jsxs4(Fragment, { children: [
2816
- title !== void 0 ? /* @__PURE__ */ jsx5(Text5, { children: c.dim(`\u2500\u2500 ${title} \u2500\u2500`) }) : null,
2822
+ title !== void 0 ? /* @__PURE__ */ jsx5(Text5, { wrap: "truncate-end", children: c.dim(`\u2500\u2500 ${title} \u2500\u2500`) }) : null,
2817
2823
  rows.map((row) => {
2818
2824
  const truncated = row.text.length > width ? `${row.text.slice(0, Math.max(1, width - 1))}\u2026` : row.text;
2819
2825
  let body = truncated;
@@ -2822,19 +2828,19 @@ function OutputPane({
2822
2828
  } else if (highlightQuery !== void 0 && highlightQuery.length > 0) {
2823
2829
  body = highlightFirst(truncated, highlightQuery);
2824
2830
  }
2825
- return /* @__PURE__ */ jsx5(Text5, { children: body }, row.key);
2831
+ return /* @__PURE__ */ jsx5(Text5, { wrap: "truncate-end", children: body }, row.key);
2826
2832
  })
2827
2833
  ] });
2828
2834
  }
2829
2835
 
2830
2836
  // src/tui/overlays/ConfirmOverlay.tsx
2831
- import { Text as Text6 } from "ink";
2837
+ import { Box as Box3, Text as Text6 } from "ink";
2832
2838
  import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
2833
2839
  function ConfirmOverlay({ argv }) {
2834
- return /* @__PURE__ */ jsxs5(Text6, { children: [
2840
+ return /* @__PURE__ */ jsx6(Box3, { borderStyle: "round", borderColor: "yellow", paddingX: 1, width: contentWidth() + 4, children: /* @__PURE__ */ jsxs5(Text6, { children: [
2835
2841
  c.warn(`! run /${argv.join(" ")}? (y/N)`),
2836
2842
  /* @__PURE__ */ jsx6(Text6, { children: c.dim(" [y approve \xB7 n/Esc back to palette]") })
2837
- ] });
2843
+ ] }) });
2838
2844
  }
2839
2845
 
2840
2846
  // src/tui/overlays/SearchMode.ts
@@ -2941,7 +2947,7 @@ var handRolledMatcher = {
2941
2947
  };
2942
2948
 
2943
2949
  // src/tui/palette/Palette.tsx
2944
- import { Box as Box2, Text as Text7, useInput as useInput2 } from "ink";
2950
+ import { Box as Box4, Text as Text7, useInput as useInput2 } from "ink";
2945
2951
  import { useState as useState3 } from "react";
2946
2952
  import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
2947
2953
  var VISIBLE_ROWS = 10;
@@ -3013,40 +3019,46 @@ function Palette({
3013
3019
  }
3014
3020
  });
3015
3021
  const rows = [
3016
- /* @__PURE__ */ jsxs6(Text7, { children: [
3022
+ /* @__PURE__ */ jsx7(Box4, { paddingX: 1, children: /* @__PURE__ */ jsxs6(Text7, { children: [
3017
3023
  c.bold("\u25B8 palette "),
3018
3024
  /* @__PURE__ */ jsx7(Text7, { children: c.dim(`search (${visible.length} shown)`) })
3019
- ] }, "header"),
3020
- /* @__PURE__ */ jsxs6(Text7, { children: [
3025
+ ] }) }, "header"),
3026
+ /* @__PURE__ */ jsx7(Box4, { borderStyle: "round", borderColor: "gray", paddingX: 1, width: contentWidth() + 4, children: /* @__PURE__ */ jsxs6(Text7, { children: [
3021
3027
  c.dim("> "),
3022
3028
  query,
3023
3029
  /* @__PURE__ */ jsx7(Text7, { children: c.dim("\u258C") })
3024
- ] }, "query")
3030
+ ] }) }, "query")
3025
3031
  ];
3026
3032
  let lastCategory = null;
3027
3033
  for (const { cmd, indices } of visible) {
3028
3034
  const isRecent = recents.some((r) => r.id === cmd.id);
3029
3035
  if (query.length === 0) {
3030
3036
  if (isRecent && lastCategory !== "recent") {
3031
- rows.push(/* @__PURE__ */ jsx7(Text7, { children: c.dim("\u2500\u2500 recent \u2500\u2500") }, "cat:recent"));
3037
+ rows.push(
3038
+ /* @__PURE__ */ jsx7(Box4, { paddingX: 1, children: /* @__PURE__ */ jsx7(Text7, { children: c.dim("\u2500\u2500 recent \u2500\u2500") }) }, "cat:recent")
3039
+ );
3032
3040
  lastCategory = "recent";
3033
3041
  } else if (!isRecent && cmd.category !== lastCategory) {
3034
- rows.push(/* @__PURE__ */ jsx7(Text7, { children: c.dim(`\u2500\u2500 ${cmd.category} \u2500\u2500`) }, `cat:${cmd.category}`));
3042
+ rows.push(
3043
+ /* @__PURE__ */ jsx7(Box4, { paddingX: 1, children: /* @__PURE__ */ jsx7(Text7, { children: c.dim(`\u2500\u2500 ${cmd.category} \u2500\u2500`) }) }, `cat:${cmd.category}`)
3044
+ );
3035
3045
  lastCategory = cmd.category;
3036
3046
  }
3037
3047
  }
3038
3048
  const prefix = cmd.id === visible[active]?.cmd.id ? "\u25B8 " : " ";
3039
3049
  rows.push(
3040
- /* @__PURE__ */ jsxs6(Text7, { children: [
3050
+ /* @__PURE__ */ jsx7(Box4, { paddingX: 1, children: /* @__PURE__ */ jsxs6(Text7, { children: [
3041
3051
  isRecent && query.length === 0 ? /* @__PURE__ */ jsx7(Text7, { children: c.dim("\u21BA ") }) : null,
3042
3052
  prefix,
3043
3053
  highlight(cmd.label, indices),
3044
3054
  /* @__PURE__ */ jsx7(Text7, { children: c.dim(` ${cmd.description}`) })
3045
- ] }, cmd.id)
3055
+ ] }) }, cmd.id)
3046
3056
  );
3047
3057
  }
3048
- rows.push(/* @__PURE__ */ jsx7(Text7, { children: c.dim("\u2191/\u2193 navigate \xB7 Enter run \xB7 Esc close") }, "footer"));
3049
- return /* @__PURE__ */ jsx7(Box2, { flexDirection: "column", children: rows.map((row) => row) });
3058
+ return /* @__PURE__ */ jsxs6(Box4, { flexDirection: "column", children: [
3059
+ /* @__PURE__ */ jsx7(Box4, { flexDirection: "column", borderStyle: "round", borderColor: "gray", width: contentWidth() + 4, children: rows }),
3060
+ /* @__PURE__ */ jsx7(Text7, { children: c.dim("\u2191/\u2193 navigate \xB7 Enter run \xB7 Esc close") })
3061
+ ] });
3050
3062
  }
3051
3063
  function recentDeduped(recent, commands) {
3052
3064
  const known = new Set(commands.map((cmd) => cmd.id));
@@ -3391,7 +3403,7 @@ function App({
3391
3403
  return /* @__PURE__ */ jsx9(Help, {});
3392
3404
  }
3393
3405
  if (mode.kind === "palette") {
3394
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3406
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3395
3407
  /* @__PURE__ */ jsx9(Header, { tagline: "palette" }),
3396
3408
  /* @__PURE__ */ jsx9(
3397
3409
  Palette,
@@ -3407,7 +3419,7 @@ function App({
3407
3419
  ] });
3408
3420
  }
3409
3421
  if (mode.kind === "home") {
3410
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3422
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3411
3423
  /* @__PURE__ */ jsx9(Header, { tagline: "home" }),
3412
3424
  /* @__PURE__ */ jsx9(
3413
3425
  HomeMenu,
@@ -3421,7 +3433,7 @@ function App({
3421
3433
  ] });
3422
3434
  }
3423
3435
  if (mode.kind === "confirm") {
3424
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3436
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3425
3437
  /* @__PURE__ */ jsx9(Header, { tagline: "confirm" }),
3426
3438
  /* @__PURE__ */ jsx9(ConfirmOverlay, { argv: mode.argv }),
3427
3439
  /* @__PURE__ */ jsx9(Footer, { running: false })
@@ -3430,23 +3442,32 @@ function App({
3430
3442
  if (mode.kind === "search") {
3431
3443
  const activeLine = mode.active >= 0 ? mode.matches[mode.active] : void 0;
3432
3444
  const matchCount = mode.matches.length;
3433
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3445
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3434
3446
  /* @__PURE__ */ jsx9(Header, { tagline: "search" }),
3435
3447
  /* @__PURE__ */ jsx9(
3436
- OutputPane,
3448
+ Box5,
3437
3449
  {
3438
- lines: searchLines,
3439
- scrollOffset,
3440
- title: output?.title,
3441
- highlightQuery: mode.query,
3442
- activeLine
3450
+ flexDirection: "column",
3451
+ borderStyle: "round",
3452
+ borderColor: "gray",
3453
+ width: contentWidth() + 4,
3454
+ children: /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(
3455
+ OutputPane,
3456
+ {
3457
+ lines: searchLines,
3458
+ scrollOffset,
3459
+ title: output?.title,
3460
+ highlightQuery: mode.query,
3461
+ activeLine
3462
+ }
3463
+ ) })
3443
3464
  }
3444
3465
  ),
3445
- /* @__PURE__ */ jsxs8(Text9, { children: [
3466
+ /* @__PURE__ */ jsx9(Box5, { borderStyle: "round", borderColor: "gray", paddingX: 1, width: contentWidth() + 4, children: /* @__PURE__ */ jsxs8(Text9, { children: [
3446
3467
  c.dim("search: "),
3447
3468
  mode.query.length > 0 ? mode.query : c.dim("(type to filter output)"),
3448
3469
  /* @__PURE__ */ jsx9(Text9, { children: c.dim(" \u258C") })
3449
- ] }),
3470
+ ] }) }),
3450
3471
  /* @__PURE__ */ jsx9(Text9, { children: c.dim(
3451
3472
  matchCount === 0 ? "no matches \xB7 Esc exit" : `${mode.active + 1}/${matchCount} matches \xB7 n/Enter next \xB7 N prev \xB7 Esc exit`
3452
3473
  ) }),
@@ -3456,45 +3477,50 @@ function App({
3456
3477
  const snapshotLines = formatStatusPayload(payload);
3457
3478
  const paneLines = output?.lines ?? snapshotLines ?? [];
3458
3479
  const paneTitle = output?.title ?? "snapshot";
3459
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3480
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3460
3481
  /* @__PURE__ */ jsx9(Header, { tagline: "dashboard" }),
3461
- /* @__PURE__ */ jsx9(StatusBar, { payload, loading }),
3462
- /* @__PURE__ */ jsx9(OutputPane, { lines: paneLines, scrollOffset, title: paneTitle }),
3482
+ /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", borderStyle: "round", borderColor: "gray", width: contentWidth() + 4, children: [
3483
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(StatusBar, { payload, loading }) }),
3484
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: divider() }) }),
3485
+ /* @__PURE__ */ jsx9(Box5, { flexDirection: "column", paddingX: 1, children: /* @__PURE__ */ jsx9(OutputPane, { lines: paneLines, scrollOffset, title: paneTitle }) })
3486
+ ] }),
3463
3487
  /* @__PURE__ */ jsx9(CommandInput, { buffer, running }),
3464
3488
  notice !== null ? /* @__PURE__ */ jsx9(Text9, { children: c.dim(notice) }) : null,
3465
3489
  /* @__PURE__ */ jsx9(Footer, { running })
3466
3490
  ] });
3467
3491
  }
3468
3492
  function Help() {
3469
- return /* @__PURE__ */ jsxs8(Box3, { flexDirection: "column", children: [
3493
+ return /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", children: [
3470
3494
  /* @__PURE__ */ jsx9(Header, { tagline: "help" }),
3471
- /* @__PURE__ */ jsx9(Text9, { children: " " }),
3472
- /* @__PURE__ */ jsx9(Text9, { children: c.bold("Keybindings") }),
3473
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" /<command> run a Noir sub-command (e.g. /status, /sync, /task next)") }),
3474
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Enter run the typed /command") }),
3475
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Esc back: clear input \u2192 dismiss output \u2192 quit") }),
3476
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" q quit (when the input is empty)") }),
3477
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" h open the curated home quick-actions (home menu)") }),
3478
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" \u2191 / \u2193 scroll the output pane") }),
3479
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" ? toggle this help") }),
3480
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+K open the command palette") }),
3481
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+F find in the dispatched output pane") }),
3482
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" n / N next / previous match in search (Enter = next)") }),
3483
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" y / n approve / decline a destructive command prompt") }),
3484
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+C force exit") }),
3485
- /* @__PURE__ */ jsx9(Text9, { children: " " }),
3486
- /* @__PURE__ */ jsx9(Text9, { children: c.bold("Home menu (h)") }),
3487
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" The curated quick actions mirror the bare-`noir` home menu:") }),
3488
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Status & context \xB7 Memory \xB7 Workflow \xB7 Setup & maintenance \xB7 Dashboard") }),
3489
- /* @__PURE__ */ jsx9(Text9, { children: " " }),
3490
- /* @__PURE__ */ jsx9(Text9, { children: c.bold("Commands") }),
3491
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Dispatched through the same routing as `noir` at the prompt.") }),
3492
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(
3493
- " /status /sync /doctor /context search <q> /task next /memory recall <q>"
3494
- ) }),
3495
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Commands that need their own interactive prompts (e.g. a /sync with a") }),
3496
- /* @__PURE__ */ jsx9(Text9, { children: c.dim(" conflict) are best run directly \u2014 exit first with q.") }),
3497
- /* @__PURE__ */ jsx9(Text9, { children: " " }),
3495
+ /* @__PURE__ */ jsxs8(Box5, { flexDirection: "column", borderStyle: "round", borderColor: "gray", width: contentWidth() + 4, children: [
3496
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.bold("Keybindings") }) }),
3497
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" /<command> run a Noir sub-command (e.g. /status, /sync, /task next)") }) }),
3498
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Enter run the typed /command") }) }),
3499
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Esc back: clear input \u2192 dismiss output \u2192 quit") }) }),
3500
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" q quit (when the input is empty)") }) }),
3501
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" h open the curated home quick-actions (home menu)") }) }),
3502
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" \u2191 / \u2193 scroll the output pane") }) }),
3503
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" ? toggle this help") }) }),
3504
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+K open the command palette") }) }),
3505
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+F find in the dispatched output pane") }) }),
3506
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" n / N next / previous match in search (Enter = next)") }) }),
3507
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" y / n approve / decline a destructive command prompt") }) }),
3508
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Ctrl+C force exit") }) }),
3509
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: divider() }) }),
3510
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.bold("Home menu (h)") }) }),
3511
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" The curated quick actions mirror the bare-`noir` home menu:") }) }),
3512
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(
3513
+ " Status & context \xB7 Memory \xB7 Workflow \xB7 Setup & maintenance \xB7 Dashboard"
3514
+ ) }) }),
3515
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: divider() }) }),
3516
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.bold("Commands") }) }),
3517
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Dispatched through the same routing as `noir` at the prompt.") }) }),
3518
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(
3519
+ " /status /sync /doctor /context search <q> /task next /memory recall <q>"
3520
+ ) }) }),
3521
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" Commands that need their own interactive prompts (e.g. a /sync with a") }) }),
3522
+ /* @__PURE__ */ jsx9(Box5, { paddingX: 1, children: /* @__PURE__ */ jsx9(Text9, { children: c.dim(" conflict) are best run directly \u2014 exit first with q.") }) })
3523
+ ] }),
3498
3524
  /* @__PURE__ */ jsx9(Text9, { children: c.dim("press ? / Esc / q to close this help") })
3499
3525
  ] });
3500
3526
  }