@triedotdev/mcp 1.0.104 → 1.0.105

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.
@@ -1258,28 +1258,36 @@ import { Box, Text } from "ink";
1258
1258
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
1259
1259
  function Header() {
1260
1260
  const { state } = useDashboard();
1261
- const time = (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit" });
1262
1261
  const { signalExtraction, watch, alerts } = state;
1263
1262
  const totalExtracted = signalExtraction.decisionsExtracted + signalExtraction.factsExtracted + signalExtraction.blockersExtracted + signalExtraction.questionsExtracted;
1264
1263
  let statusLabel;
1265
1264
  if (watch.watching) {
1266
1265
  statusLabel = totalExtracted > 0 ? /* @__PURE__ */ jsxs(Text, { children: [
1267
- /* @__PURE__ */ jsx2(Text, { color: "green", bold: true, children: "\u25CF LEARNING" }),
1266
+ /* @__PURE__ */ jsx2(Text, { color: "green", children: "\u25CF" }),
1267
+ " ",
1268
+ /* @__PURE__ */ jsx2(Text, { color: "green", bold: true, children: "Learning" }),
1268
1269
  " ",
1269
1270
  /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
1270
1271
  totalExtracted,
1271
1272
  " signals"
1272
1273
  ] })
1273
- ] }) : /* @__PURE__ */ jsx2(Text, { children: /* @__PURE__ */ jsx2(Text, { color: "yellow", bold: true, children: "\u25CF WATCHING" }) });
1274
+ ] }) : /* @__PURE__ */ jsxs(Text, { children: [
1275
+ /* @__PURE__ */ jsx2(Text, { color: "green", children: "\u25CF" }),
1276
+ " ",
1277
+ /* @__PURE__ */ jsx2(Text, { bold: true, children: "Watching" })
1278
+ ] });
1274
1279
  } else {
1275
- statusLabel = /* @__PURE__ */ jsx2(Text, { dimColor: true, children: "\u25CB IDLE" });
1280
+ statusLabel = /* @__PURE__ */ jsxs(Text, { children: [
1281
+ /* @__PURE__ */ jsx2(Text, { dimColor: true, children: "\u25CB" }),
1282
+ " ",
1283
+ /* @__PURE__ */ jsx2(Text, { dimColor: true, children: "Idle" })
1284
+ ] });
1276
1285
  }
1277
- return /* @__PURE__ */ jsxs(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, justifyContent: "space-between", children: [
1278
- /* @__PURE__ */ jsx2(Box, { children: /* @__PURE__ */ jsx2(Text, { color: "green", bold: true, children: "trie" }) }),
1286
+ return /* @__PURE__ */ jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [
1287
+ /* @__PURE__ */ jsx2(Text, { color: "green", bold: true, children: "trie" }),
1279
1288
  /* @__PURE__ */ jsxs(Box, { gap: 2, children: [
1280
1289
  statusLabel,
1281
- alerts.hasCritical && /* @__PURE__ */ jsx2(Text, { color: "red", bold: true, children: "\u2502 ALERT" }),
1282
- /* @__PURE__ */ jsx2(Text, { dimColor: true, children: time })
1290
+ alerts.hasCritical && /* @__PURE__ */ jsx2(Text, { color: "red", bold: true, children: "\u25CF Alert" })
1283
1291
  ] })
1284
1292
  ] });
1285
1293
  }
@@ -1295,82 +1303,39 @@ var VIEW_LABELS = {
1295
1303
  hypotheses: "Hypotheses",
1296
1304
  memory: "Memory"
1297
1305
  };
1298
- function Hint({ k, label }) {
1299
- return /* @__PURE__ */ jsxs2(Text2, { children: [
1300
- /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: "[" }),
1301
- /* @__PURE__ */ jsx3(Text2, { bold: true, children: k }),
1302
- /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: "]" }),
1303
- /* @__PURE__ */ jsxs2(Text2, { dimColor: true, children: [
1304
- " ",
1305
- label
1306
- ] })
1307
- ] });
1308
- }
1309
1306
  function Footer() {
1310
1307
  const { state } = useDashboard();
1311
1308
  const { view } = state;
1312
- const viewTabs = ["overview", "memory", "goals", "hypotheses", "agent"].map((v) => {
1313
- const isActive = v === view;
1314
- const label = VIEW_LABELS[v];
1315
- return isActive ? /* @__PURE__ */ jsx3(Text2, { color: "green", bold: true, children: ` ${label} ` }, v) : /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: ` ${label} ` }, v);
1316
- });
1317
- let hints;
1309
+ const label = VIEW_LABELS[view];
1310
+ let contextHints;
1318
1311
  if (view === "goals" && state.goalsPanel.inputMode === "add") {
1319
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1320
- /* @__PURE__ */ jsx3(Hint, { k: "Enter", label: "Save" }),
1321
- /* @__PURE__ */ jsx3(Hint, { k: "Esc", label: "Cancel" })
1322
- ] });
1312
+ contextHints = "enter save \xB7 esc cancel";
1323
1313
  } else if (view === "hypotheses" && state.hypothesesPanel.inputMode === "add") {
1324
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1325
- /* @__PURE__ */ jsx3(Hint, { k: "Enter", label: "Save" }),
1326
- /* @__PURE__ */ jsx3(Hint, { k: "Esc", label: "Cancel" })
1327
- ] });
1314
+ contextHints = "enter save \xB7 esc cancel";
1328
1315
  } else if (view === "goals") {
1329
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1330
- /* @__PURE__ */ jsx3(Hint, { k: "j/k", label: "Nav" }),
1331
- /* @__PURE__ */ jsx3(Hint, { k: "a", label: "Add" }),
1332
- /* @__PURE__ */ jsx3(Hint, { k: "Enter", label: "Complete" }),
1333
- /* @__PURE__ */ jsx3(Hint, { k: "d", label: "Delete" })
1334
- ] });
1316
+ contextHints = "j/k nav \xB7 a add \xB7 enter complete \xB7 d delete";
1335
1317
  } else if (view === "hypotheses") {
1336
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1337
- /* @__PURE__ */ jsx3(Hint, { k: "j/k", label: "Nav" }),
1338
- /* @__PURE__ */ jsx3(Hint, { k: "a", label: "Add" }),
1339
- /* @__PURE__ */ jsx3(Hint, { k: "v", label: "Validate" }),
1340
- /* @__PURE__ */ jsx3(Hint, { k: "x", label: "Invalidate" })
1341
- ] });
1318
+ contextHints = "j/k nav \xB7 a add \xB7 v validate \xB7 x invalidate";
1342
1319
  } else if (view === "agent") {
1343
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1344
- /* @__PURE__ */ jsx3(Hint, { k: "j/k", label: "Nav" }),
1345
- /* @__PURE__ */ jsx3(Hint, { k: "Enter", label: "Expand" }),
1346
- /* @__PURE__ */ jsx3(Hint, { k: "d", label: "Dismiss" }),
1347
- /* @__PURE__ */ jsx3(Hint, { k: "i", label: "Ignore" }),
1348
- /* @__PURE__ */ jsx3(Hint, { k: "x", label: "Clear" })
1349
- ] });
1320
+ contextHints = "j/k nav \xB7 enter expand \xB7 d dismiss";
1350
1321
  } else if (view === "memory") {
1351
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1352
- /* @__PURE__ */ jsx3(Hint, { k: "j/k", label: "Nav" }),
1353
- /* @__PURE__ */ jsx3(Hint, { k: "Enter", label: "Expand" }),
1354
- /* @__PURE__ */ jsx3(Hint, { k: "b", label: "Back" })
1355
- ] });
1322
+ contextHints = "j/k nav \xB7 enter expand \xB7 b back";
1356
1323
  } else if (view === "rawlog") {
1357
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1358
- /* @__PURE__ */ jsx3(Hint, { k: "n/p", label: "Pages" }),
1359
- /* @__PURE__ */ jsx3(Hint, { k: "b", label: "Back" })
1360
- ] });
1324
+ contextHints = "n/p pages \xB7 b back";
1361
1325
  } else {
1362
- hints = /* @__PURE__ */ jsxs2(Box2, { gap: 2, children: [
1363
- /* @__PURE__ */ jsx3(Hint, { k: "Tab", label: "Views" }),
1364
- /* @__PURE__ */ jsx3(Hint, { k: "n/p", label: "Pages" }),
1365
- /* @__PURE__ */ jsx3(Hint, { k: "h", label: "Help" })
1366
- ] });
1326
+ contextHints = "n/p pages \xB7 h help";
1367
1327
  }
1368
- return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
1369
- /* @__PURE__ */ jsx3(Box2, { borderStyle: "single", borderColor: "gray", borderTop: false, borderLeft: false, borderRight: false, children: /* @__PURE__ */ jsx3(Box2, { gap: 0, children: viewTabs }) }),
1370
- /* @__PURE__ */ jsxs2(Box2, { paddingX: 1, justifyContent: "space-between", children: [
1371
- hints,
1372
- /* @__PURE__ */ jsx3(Hint, { k: "q", label: "Quit" })
1373
- ] })
1328
+ return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 1, children: [
1329
+ /* @__PURE__ */ jsxs2(Box2, { justifyContent: "space-between", children: [
1330
+ /* @__PURE__ */ jsxs2(Text2, { children: [
1331
+ /* @__PURE__ */ jsx3(Text2, { color: "green", children: "\u25CF" }),
1332
+ " ",
1333
+ /* @__PURE__ */ jsx3(Text2, { color: "green", bold: true, children: label }),
1334
+ /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: " (tab to cycle)" })
1335
+ ] }),
1336
+ /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: "q quit" })
1337
+ ] }),
1338
+ /* @__PURE__ */ jsx3(Text2, { dimColor: true, children: contextHints })
1374
1339
  ] });
1375
1340
  }
1376
1341
 
@@ -1496,25 +1461,28 @@ function ConfigDialog({ onClose }) {
1496
1461
  items.map((item, idx) => {
1497
1462
  const isSelected = selectedIndex === idx;
1498
1463
  return /* @__PURE__ */ jsxs4(Text4, { children: [
1499
- isSelected ? /* @__PURE__ */ jsx5(Text4, { bold: true, color: "green", children: "\u25B6 " }) : /* @__PURE__ */ jsx5(Text4, { children: " " }),
1464
+ isSelected ? /* @__PURE__ */ jsxs4(Text4, { bold: true, color: "green", children: [
1465
+ ">",
1466
+ " "
1467
+ ] }) : /* @__PURE__ */ jsx5(Text4, { children: " " }),
1500
1468
  /* @__PURE__ */ jsxs4(Text4, { bold: isSelected, children: [
1501
1469
  item.label,
1502
1470
  ": "
1503
1471
  ] }),
1504
1472
  editing && isSelected ? /* @__PURE__ */ jsxs4(Text4, { children: [
1505
1473
  editBuffer,
1506
- /* @__PURE__ */ jsx5(Text4, { bold: true, color: "green", children: "\u258C" })
1474
+ /* @__PURE__ */ jsx5(Text4, { bold: true, color: "green", children: "|" })
1507
1475
  ] }) : /* @__PURE__ */ jsx5(Text4, { dimColor: true, children: item.value })
1508
1476
  ] }, item.key);
1509
1477
  }),
1510
1478
  /* @__PURE__ */ jsx5(Text4, { children: " " }),
1511
- /* @__PURE__ */ jsx5(Text4, { dimColor: true, children: section === "main" ? "Enter to select \u2022 Esc to close" : "Enter to edit \u2022 Esc/b to go back" })
1479
+ /* @__PURE__ */ jsx5(Text4, { dimColor: true, children: section === "main" ? "enter select \xB7 esc close" : "enter edit \xB7 esc/b back" })
1512
1480
  ] });
1513
1481
  }
1514
1482
 
1515
1483
  // src/cli/dashboard/views/OverviewView.tsx
1516
1484
  import { Box as Box5, Text as Text5 } from "ink";
1517
- import { Fragment, jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1485
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1518
1486
  function OverviewView() {
1519
1487
  const { state } = useDashboard();
1520
1488
  const { progress, signalExtraction, watch, issues, activityLog, activityPage } = state;
@@ -1527,87 +1495,69 @@ function OverviewView() {
1527
1495
  const pageActivities = activityLog.slice(startIdx, startIdx + activityRows);
1528
1496
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", paddingX: 1, children: [
1529
1497
  /* @__PURE__ */ jsxs5(Text5, { children: [
1498
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "\u25CF" }),
1499
+ " Scanned ",
1530
1500
  /* @__PURE__ */ jsx6(Text5, { bold: true, children: processedFiles }),
1501
+ " files ",
1531
1502
  /* @__PURE__ */ jsxs5(Text5, { dimColor: true, children: [
1532
- " files scanned in ",
1533
1503
  elapsed,
1534
1504
  "s"
1535
1505
  ] })
1536
1506
  ] }),
1537
- watch.watching && signalExtraction.enabled && /* @__PURE__ */ jsxs5(Fragment, { children: [
1538
- /* @__PURE__ */ jsx6(Text5, { children: " " }),
1539
- /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1540
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: "Decision Ledger" }),
1541
- /* @__PURE__ */ jsxs5(Text5, { children: [
1542
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: "Agent Learning" }),
1543
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " - Building institutional knowledge" })
1544
- ] }),
1545
- /* @__PURE__ */ jsx6(Text5, { children: " " }),
1546
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "Signals Extracted:" }),
1547
- /* @__PURE__ */ jsxs5(Text5, { children: [
1548
- " ",
1549
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.decisionsExtracted }),
1550
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " decisions" })
1551
- ] }),
1552
- /* @__PURE__ */ jsxs5(Text5, { children: [
1553
- " ",
1554
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.factsExtracted }),
1555
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " facts" })
1556
- ] }),
1557
- /* @__PURE__ */ jsxs5(Text5, { children: [
1558
- " ",
1559
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.blockersExtracted }),
1560
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " blockers" })
1561
- ] }),
1562
- /* @__PURE__ */ jsxs5(Text5, { children: [
1563
- " ",
1564
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.questionsExtracted }),
1565
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " questions" })
1566
- ] }),
1567
- /* @__PURE__ */ jsx6(Text5, { children: " " }),
1568
- /* @__PURE__ */ jsxs5(Text5, { children: [
1569
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "Use " }),
1570
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: "trie gotcha" }),
1571
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " to query the ledger" })
1572
- ] })
1507
+ watch.watching && signalExtraction.enabled && /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1508
+ /* @__PURE__ */ jsxs5(Text5, { children: [
1509
+ /* @__PURE__ */ jsx6(Text5, { color: "green", children: "\u25CF" }),
1510
+ " Signal extraction ",
1511
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "enabled" })
1512
+ ] }),
1513
+ (signalExtraction.decisionsExtracted > 0 || signalExtraction.factsExtracted > 0 || signalExtraction.blockersExtracted > 0) && /* @__PURE__ */ jsxs5(Text5, { children: [
1514
+ " ",
1515
+ /* @__PURE__ */ jsx6(Text5, { color: "green", children: "\u25CB" }),
1516
+ " ",
1517
+ /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.decisionsExtracted }),
1518
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " decisions" }),
1519
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " \xB7 " }),
1520
+ /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.factsExtracted }),
1521
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " facts" }),
1522
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " \xB7 " }),
1523
+ /* @__PURE__ */ jsx6(Text5, { bold: true, children: signalExtraction.blockersExtracted }),
1524
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " blockers" })
1573
1525
  ] })
1574
1526
  ] }),
1575
- criticalIssues.length > 0 && /* @__PURE__ */ jsxs5(Fragment, { children: [
1527
+ criticalIssues.length > 0 && /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1576
1528
  /* @__PURE__ */ jsx6(Text5, { children: " " }),
1577
- /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1578
- /* @__PURE__ */ jsx6(Text5, { color: "red", bold: true, children: "TOP CRITICAL ISSUES" }),
1579
- criticalIssues.map((issue, i) => {
1580
- const filename = issue.file.split("/").pop() || issue.file;
1581
- const lineNum = issue.line ? `:${issue.line}` : "";
1582
- const desc = issue.issue.slice(0, 50) + (issue.issue.length > 50 ? "..." : "");
1583
- return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1584
- /* @__PURE__ */ jsxs5(Text5, { children: [
1585
- /* @__PURE__ */ jsx6(Text5, { color: "red", children: "\u25B8" }),
1586
- " ",
1587
- /* @__PURE__ */ jsx6(Text5, { color: "red", children: desc })
1588
- ] }),
1589
- /* @__PURE__ */ jsxs5(Text5, { dimColor: true, children: [
1590
- " ",
1591
- filename,
1592
- lineNum
1593
- ] })
1594
- ] }, i);
1595
- })
1596
- ] })
1529
+ criticalIssues.map((issue, i) => {
1530
+ const filename = issue.file.split("/").pop() || issue.file;
1531
+ const lineNum = issue.line ? `:${issue.line}` : "";
1532
+ const desc = issue.issue.slice(0, 50) + (issue.issue.length > 50 ? "..." : "");
1533
+ return /* @__PURE__ */ jsxs5(Text5, { children: [
1534
+ /* @__PURE__ */ jsx6(Text5, { color: "red", children: "\u25CF" }),
1535
+ " ",
1536
+ /* @__PURE__ */ jsx6(Text5, { color: "red", children: desc }),
1537
+ /* @__PURE__ */ jsxs5(Text5, { dimColor: true, children: [
1538
+ " ",
1539
+ filename,
1540
+ lineNum
1541
+ ] })
1542
+ ] }, i);
1543
+ })
1597
1544
  ] }),
1598
- totalIssues === 0 && criticalIssues.length === 0 && /* @__PURE__ */ jsxs5(Fragment, { children: [
1599
- /* @__PURE__ */ jsx6(Text5, { children: " " }),
1600
- /* @__PURE__ */ jsx6(Text5, { color: "green", children: "[ok] No issues found" })
1545
+ totalIssues === 0 && criticalIssues.length === 0 && /* @__PURE__ */ jsxs5(Text5, { children: [
1546
+ /* @__PURE__ */ jsx6(Text5, { color: "green", children: "\u25CF" }),
1547
+ " No issues found"
1601
1548
  ] }),
1602
1549
  /* @__PURE__ */ jsx6(Text5, { children: " " }),
1603
1550
  /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
1604
1551
  /* @__PURE__ */ jsx6(Text5, { bold: true, children: "Activity" }),
1605
1552
  pageActivities.map((entry, i) => /* @__PURE__ */ jsxs5(Text5, { children: [
1606
- /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: entry.time }),
1607
1553
  " ",
1608
- entry.message
1554
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "\u25CF" }),
1555
+ " ",
1556
+ entry.message,
1557
+ " ",
1558
+ /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: entry.time })
1609
1559
  ] }, i)),
1610
- pageActivities.length === 0 && /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: "No activity yet." })
1560
+ pageActivities.length === 0 && /* @__PURE__ */ jsx6(Text5, { dimColor: true, children: " No activity yet." })
1611
1561
  ] })
1612
1562
  ] });
1613
1563
  }
@@ -1646,25 +1596,25 @@ function formatTimeAgo(timestamp) {
1646
1596
  function insightIcon(type) {
1647
1597
  switch (type) {
1648
1598
  case "warning":
1649
- return { icon: "[!]", color: colors.critical };
1599
+ return { icon: "\u25CF", color: colors.critical };
1650
1600
  case "observation":
1651
- return { icon: "[>]", color: colors.serious };
1601
+ return { icon: "\u25CB", color: colors.serious };
1652
1602
  case "suggestion":
1653
- return { icon: "[?]", color: colors.highlight };
1603
+ return { icon: "\u25CB", color: colors.highlight };
1654
1604
  case "celebration":
1655
- return { icon: "[+]", color: colors.success };
1605
+ return { icon: "\u25CF", color: colors.success };
1656
1606
  case "question":
1657
- return { icon: "[?]", color: colors.moderate };
1607
+ return { icon: "\u25CB", color: colors.moderate };
1658
1608
  default:
1659
- return { icon: "[>]", color: colors.dim };
1609
+ return { icon: "\u25CB", color: colors.dim };
1660
1610
  }
1661
1611
  }
1662
1612
  function progressBar(current, total, width = 10) {
1663
- if (total <= 0) return colors.dim("[" + "\u2591".repeat(width) + "]");
1613
+ if (total <= 0) return colors.dim("\u2591".repeat(width));
1664
1614
  const progress = Math.min(1, current / total);
1665
1615
  const filled = Math.round(width * progress);
1666
1616
  const empty = width - filled;
1667
- return colors.dim("[") + colors.success("\u2588".repeat(filled)) + colors.dim("\u2591".repeat(empty)) + colors.dim("]");
1617
+ return colors.success("\u2588".repeat(filled)) + colors.dim("\u2591".repeat(empty));
1668
1618
  }
1669
1619
  function stripEmojis(s) {
1670
1620
  return s.replace(/[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{FE00}-\u{FE0F}\u{200D}\u{20E3}\u{FE0F}\u{E0020}-\u{E007F}]/gu, "").trim();
@@ -1697,67 +1647,52 @@ function AgentView() {
1697
1647
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", paddingX: 1, children: [
1698
1648
  /* @__PURE__ */ jsxs6(Text6, { children: [
1699
1649
  /* @__PURE__ */ jsx7(Text6, { bold: true, children: "Agent Insights" }),
1700
- activeCount > 0 ? /* @__PURE__ */ jsxs6(Text6, { color: "red", bold: true, children: [
1701
- " (",
1650
+ activeCount > 0 ? /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1651
+ " ",
1702
1652
  activeCount,
1703
- " active)"
1653
+ " active"
1704
1654
  ] }) : /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1705
- " (",
1655
+ " ",
1706
1656
  totalInsights,
1707
- " total)"
1708
- ] }),
1709
- " ",
1710
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Your autonomous code companion" })
1657
+ " total"
1658
+ ] })
1711
1659
  ] }),
1712
- agency && /* @__PURE__ */ jsxs6(Box6, { gap: 2, children: [
1713
- /* @__PURE__ */ jsxs6(Text6, { children: [
1714
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Goals:" }),
1715
- " ",
1716
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: agency.goals.active }),
1717
- "/",
1718
- agency.goals.completed + agency.goals.active
1719
- ] }),
1720
- /* @__PURE__ */ jsxs6(Text6, { children: [
1721
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Hypo:" }),
1722
- " ",
1723
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: agency.hypotheses.testing }),
1724
- " testing"
1725
- ] }),
1726
- /* @__PURE__ */ jsxs6(Text6, { children: [
1727
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Risk:" }),
1728
- " ",
1729
- /* @__PURE__ */ jsx7(Text6, { color: agency.riskLevel === "critical" ? "red" : agency.riskLevel === "high" ? "yellow" : agency.riskLevel === "medium" ? "yellow" : "green", children: agency.riskLevel.toUpperCase() })
1730
- ] }),
1731
- /* @__PURE__ */ jsxs6(Text6, { children: [
1732
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Effect:" }),
1733
- " ",
1734
- /* @__PURE__ */ jsxs6(Text6, { color: agency.effectiveness >= 80 ? "green" : agency.effectiveness >= 50 ? "yellow" : "yellow", children: [
1735
- agency.effectiveness,
1736
- "%"
1737
- ] })
1738
- ] }),
1739
- agency.isQuietHours && /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "[quiet]" })
1660
+ agency && /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1661
+ "Goals ",
1662
+ agency.goals.active,
1663
+ "/",
1664
+ agency.goals.completed + agency.goals.active,
1665
+ " \xB7 ",
1666
+ "Hypo ",
1667
+ agency.hypotheses.testing,
1668
+ " testing",
1669
+ " \xB7 ",
1670
+ "Risk ",
1671
+ agency.riskLevel,
1672
+ " \xB7 ",
1673
+ agency.effectiveness,
1674
+ "% effective",
1675
+ agency.isQuietHours ? " \xB7 quiet" : ""
1740
1676
  ] }),
1741
1677
  /* @__PURE__ */ jsx7(Text6, { children: " " }),
1742
1678
  visibleInsights.length === 0 && state.notificationHistory.length === 0 ? /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
1743
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: "The Trie Agent is watching over your code." }),
1744
- /* @__PURE__ */ jsx7(Text6, { children: " " }),
1745
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Unlike a log viewer, the Trie Agent:" }),
1746
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " \u2022 Synthesizes insights from all skills" }),
1747
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " \u2022 Speaks conversationally about what matters" }),
1748
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " \u2022 Suggests specific actions to take" }),
1749
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " \u2022 Celebrates when you fix issues" }),
1750
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " \u2022 Tracks patterns over time" }),
1679
+ /* @__PURE__ */ jsxs6(Text6, { children: [
1680
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: "\u25CF" }),
1681
+ " The Trie Agent is watching over your code."
1682
+ ] }),
1751
1683
  /* @__PURE__ */ jsx7(Text6, { children: " " }),
1752
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "When the Trie Agent has something to say, it'll appear here." }),
1684
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " Synthesizes insights from all skills" }),
1685
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " Suggests specific actions to take" }),
1686
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " Tracks patterns over time" }),
1753
1687
  /* @__PURE__ */ jsx7(Text6, { children: " " }),
1754
1688
  isAIAvailable() ? /* @__PURE__ */ jsxs6(Text6, { children: [
1755
- /* @__PURE__ */ jsx7(Text6, { color: "green", children: "[+]" }),
1689
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: "\u25CF" }),
1756
1690
  /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " AI-enhanced insights enabled" })
1757
1691
  ] }) : /* @__PURE__ */ jsxs6(Text6, { children: [
1758
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "Want smarter insights? Set " }),
1692
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u25CB" }),
1693
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " Set " }),
1759
1694
  /* @__PURE__ */ jsx7(Text6, { bold: true, children: "ANTHROPIC_API_KEY" }),
1760
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " for AI enhancement" })
1695
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " for AI insights" })
1761
1696
  ] })
1762
1697
  ] }) : /* @__PURE__ */ jsx7(Box6, { flexDirection: "column", children: visibleInsights.map((insight, idx) => {
1763
1698
  const isSelected = idx === selectedInsight;
@@ -1765,66 +1700,47 @@ function AgentView() {
1765
1700
  const ago = formatTimeAgo(insight.timestamp);
1766
1701
  const { icon, color } = insightIcon(insight.type);
1767
1702
  const cleanMessage = stripEmojis(insight.message);
1768
- const msgMaxLen = 70;
1703
+ const msgMaxLen = 65;
1769
1704
  const msg = cleanMessage.length > msgMaxLen ? cleanMessage.slice(0, msgMaxLen - 3) + "..." : cleanMessage;
1770
- const status = isExpanded ? "v" : ">";
1771
1705
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", marginBottom: 1, children: [
1772
1706
  /* @__PURE__ */ jsxs6(Text6, { children: [
1773
- isSelected ? /* @__PURE__ */ jsx7(Text6, { bold: true, color: "green", children: "\u25B6 " }) : /* @__PURE__ */ jsx7(Text6, { children: " " }),
1774
- /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1775
- status,
1707
+ isSelected ? /* @__PURE__ */ jsxs6(Text6, { bold: true, color: "green", children: [
1708
+ ">",
1776
1709
  " "
1777
- ] }),
1778
- isSelected ? /* @__PURE__ */ jsx7(Text6, { inverse: true, children: ` ${icon} ${msg} ` }) : /* @__PURE__ */ jsxs6(Text6, { children: [
1779
- icon,
1710
+ ] }) : /* @__PURE__ */ jsx7(Text6, { children: " " }),
1711
+ isSelected ? /* @__PURE__ */ jsxs6(Text6, { children: [
1712
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: icon }),
1713
+ " ",
1714
+ /* @__PURE__ */ jsx7(Text6, { bold: true, children: msg })
1715
+ ] }) : /* @__PURE__ */ jsxs6(Text6, { children: [
1716
+ color(icon),
1780
1717
  " ",
1781
1718
  color(msg)
1719
+ ] }),
1720
+ /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1721
+ " ",
1722
+ insight.category,
1723
+ " \xB7 ",
1724
+ ago
1782
1725
  ] })
1783
1726
  ] }),
1784
- /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1785
- " ",
1786
- ago,
1787
- " \u2022 ",
1788
- insight.category,
1789
- isSelected && !isExpanded ? " \u2022 Press Enter to expand" : ""
1790
- ] }),
1791
- isExpanded && insight.details && /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", marginLeft: 7, children: [
1792
- insight.details.issueBreakdown && Object.keys(insight.details.issueBreakdown).length > 0 && /* @__PURE__ */ jsxs6(Text6, { children: [
1793
- insight.details.issueBreakdown["critical"] ? /* @__PURE__ */ jsxs6(Text6, { color: "red", children: [
1794
- insight.details.issueBreakdown["critical"],
1795
- " critical"
1796
- ] }) : null,
1797
- insight.details.issueBreakdown["serious"] ? /* @__PURE__ */ jsxs6(Text6, { color: "yellow", children: [
1798
- " \u2022 ",
1799
- insight.details.issueBreakdown["serious"],
1800
- " serious"
1801
- ] }) : null,
1802
- insight.details.issueBreakdown["moderate"] ? /* @__PURE__ */ jsxs6(Text6, { color: "blue", children: [
1803
- " \u2022 ",
1804
- insight.details.issueBreakdown["moderate"],
1805
- " moderate"
1806
- ] }) : null
1727
+ isExpanded && insight.details && /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", marginLeft: 4, children: [
1728
+ insight.details.issueBreakdown && Object.keys(insight.details.issueBreakdown).length > 0 && /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1729
+ insight.details.issueBreakdown["critical"] ? `${insight.details.issueBreakdown["critical"]} critical` : "",
1730
+ insight.details.issueBreakdown["serious"] ? ` \xB7 ${insight.details.issueBreakdown["serious"]} serious` : "",
1731
+ insight.details.issueBreakdown["moderate"] ? ` \xB7 ${insight.details.issueBreakdown["moderate"]} moderate` : ""
1807
1732
  ] }),
1808
1733
  insight.details.affectedFiles && insight.details.affectedFiles.length > 0 && /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
1809
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: "Files:" }),
1810
- insight.details.affectedFiles.slice(0, 8).map((f, fi) => /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1811
- " \u2022 ",
1734
+ insight.details.affectedFiles.slice(0, 5).map((f, fi) => /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1735
+ " ",
1812
1736
  f
1813
1737
  ] }, fi)),
1814
- insight.details.affectedFiles.length > 8 && /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1815
- " ... +",
1816
- insight.details.affectedFiles.length - 8,
1738
+ insight.details.affectedFiles.length > 5 && /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1739
+ " +",
1740
+ insight.details.affectedFiles.length - 5,
1817
1741
  " more"
1818
1742
  ] })
1819
1743
  ] }),
1820
- insight.details.examples && insight.details.examples.length > 0 && /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
1821
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: "Examples:" }),
1822
- insight.details.examples.slice(0, 5).map((ex, ei) => /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1823
- " \u2022 ",
1824
- ex.slice(0, 60),
1825
- ex.length > 60 ? "..." : ""
1826
- ] }, ei))
1827
- ] }),
1828
1744
  insight.details.comparison && /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1829
1745
  insight.details.trend === "improving" ? "\u2193" : insight.details.trend === "worsening" ? "\u2191" : "\u2192",
1830
1746
  " ",
@@ -1832,35 +1748,50 @@ function AgentView() {
1832
1748
  ] })
1833
1749
  ] }),
1834
1750
  insight.suggestedAction && (isExpanded || isSelected) && /* @__PURE__ */ jsxs6(Text6, { children: [
1835
- " ",
1836
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u2192 " }),
1751
+ " ",
1752
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u2192" }),
1753
+ " ",
1837
1754
  /* @__PURE__ */ jsx7(Text6, { bold: true, children: insight.suggestedAction })
1838
1755
  ] }),
1839
1756
  insight.actionCommand && isExpanded && /* @__PURE__ */ jsxs6(Text6, { children: [
1840
- " ",
1841
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "$ " }),
1842
- /* @__PURE__ */ jsx7(Text6, { color: "green", children: insight.actionCommand }),
1843
- isSelected && /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: " " }),
1844
- isSelected && /* @__PURE__ */ jsx7(Text6, { bold: true, children: "[Enter to run]" })
1757
+ " ",
1758
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "$" }),
1759
+ " ",
1760
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: insight.actionCommand })
1845
1761
  ] })
1846
1762
  ] }, insight.id);
1847
1763
  }) }),
1848
1764
  /* @__PURE__ */ jsx7(Text6, { children: " " }),
1849
1765
  /* @__PURE__ */ jsxs6(Box6, { gap: 2, children: [
1850
- agentInsights.filter((i) => i.type === "warning").length > 0 && /* @__PURE__ */ jsxs6(Text6, { color: "red", children: [
1851
- agentInsights.filter((i) => i.type === "warning").length,
1852
- " warnings"
1766
+ agentInsights.filter((i) => i.type === "warning").length > 0 && /* @__PURE__ */ jsxs6(Text6, { children: [
1767
+ /* @__PURE__ */ jsx7(Text6, { color: "red", children: "\u25CF" }),
1768
+ " ",
1769
+ /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1770
+ agentInsights.filter((i) => i.type === "warning").length,
1771
+ " warnings"
1772
+ ] })
1853
1773
  ] }),
1854
- agentInsights.filter((i) => i.type === "suggestion").length > 0 && /* @__PURE__ */ jsxs6(Text6, { bold: true, children: [
1855
- agentInsights.filter((i) => i.type === "suggestion").length,
1856
- " suggestions"
1774
+ agentInsights.filter((i) => i.type === "suggestion").length > 0 && /* @__PURE__ */ jsxs6(Text6, { children: [
1775
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u25CB" }),
1776
+ " ",
1777
+ /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1778
+ agentInsights.filter((i) => i.type === "suggestion").length,
1779
+ " suggestions"
1780
+ ] })
1857
1781
  ] }),
1858
- agentInsights.filter((i) => i.type === "celebration").length > 0 && /* @__PURE__ */ jsxs6(Text6, { color: "green", children: [
1859
- agentInsights.filter((i) => i.type === "celebration").length,
1860
- " wins"
1782
+ agentInsights.filter((i) => i.type === "celebration").length > 0 && /* @__PURE__ */ jsxs6(Text6, { children: [
1783
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: "\u25CF" }),
1784
+ " ",
1785
+ /* @__PURE__ */ jsxs6(Text6, { dimColor: true, children: [
1786
+ agentInsights.filter((i) => i.type === "celebration").length,
1787
+ " wins"
1788
+ ] })
1861
1789
  ] }),
1862
- /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u2502" }),
1863
- isAIAvailable() ? /* @__PURE__ */ jsx7(Text6, { color: "green", children: "AI \u2713" }) : /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "AI off" })
1790
+ isAIAvailable() ? /* @__PURE__ */ jsxs6(Text6, { children: [
1791
+ /* @__PURE__ */ jsx7(Text6, { color: "green", children: "\u25CF" }),
1792
+ " ",
1793
+ /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "AI" })
1794
+ ] }) : /* @__PURE__ */ jsx7(Text6, { children: /* @__PURE__ */ jsx7(Text6, { dimColor: true, children: "\u25CB AI off" }) })
1864
1795
  ] })
1865
1796
  ] });
1866
1797
  }
@@ -1868,7 +1799,7 @@ function AgentView() {
1868
1799
  // src/cli/dashboard/views/GoalsView.tsx
1869
1800
  import { useCallback } from "react";
1870
1801
  import { Box as Box7, Text as Text7, useInput as useInput3 } from "ink";
1871
- import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1802
+ import { Fragment, jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1872
1803
  function calculateGoalProgress(goal) {
1873
1804
  if (goal.target <= 0) return 0;
1874
1805
  const startValue = goal.startValue ?? goal.currentValue;
@@ -2003,68 +1934,69 @@ function GoalsView() {
2003
1934
  ] }),
2004
1935
  /* @__PURE__ */ jsx8(Text7, { children: " " }),
2005
1936
  goalsPanel.inputMode === "add" ? /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2006
- /* @__PURE__ */ jsxs7(Text7, { children: [
2007
- /* @__PURE__ */ jsx8(Text7, { bold: true, children: "New goal:" }),
2008
- " ",
1937
+ /* @__PURE__ */ jsx8(Box7, { borderStyle: "round", borderColor: "green", paddingX: 1, children: /* @__PURE__ */ jsxs7(Text7, { children: [
2009
1938
  goalsPanel.inputBuffer,
2010
- /* @__PURE__ */ jsx8(Text7, { bold: true, color: "green", children: "\u258C" })
2011
- ] }),
2012
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: 'Examples: "Reduce auth bugs by 50%", "Eliminate critical issues"' }),
2013
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "Press Enter to add, Escape to cancel" })
2014
- ] }) : /* @__PURE__ */ jsx8(Fragment2, { children: goalsPanel.goals.length === 0 ? /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2015
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "No goals yet." }),
2016
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "Press [a] to add your first goal, or wait for auto-generated goals." })
1939
+ /* @__PURE__ */ jsx8(Text7, { bold: true, color: "green", children: "|" })
1940
+ ] }) }),
1941
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " enter save \xB7 esc cancel" })
1942
+ ] }) : /* @__PURE__ */ jsx8(Fragment, { children: goalsPanel.goals.length === 0 ? /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
1943
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " No goals yet." }),
1944
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " Press a to add your first goal." })
2017
1945
  ] }) : /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2018
1946
  activeGoals.length > 0 && /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2019
- /* @__PURE__ */ jsx8(Text7, { bold: true, children: "Active:" }),
2020
1947
  activeGoals.map((goal, idx) => {
2021
1948
  const isSelected = goalsPanel.selectedIndex === idx;
2022
1949
  const progress = calculateGoalProgress(goal);
2023
- const bar = progressBar(progress, 100, 10);
2024
- const source = goal.autoGenerated ? /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "[auto]" }) : /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "[manual]" });
1950
+ const bar = progressBar(progress, 100, 8);
1951
+ const source = goal.autoGenerated ? "auto" : "manual";
2025
1952
  return /* @__PURE__ */ jsxs7(Text7, { children: [
2026
- isSelected ? /* @__PURE__ */ jsx8(Text7, { bold: true, color: "green", children: "\u25B6 " }) : /* @__PURE__ */ jsx8(Text7, { children: " " }),
2027
- bar,
2028
- " ",
2029
- goal.description.slice(0, 50),
1953
+ isSelected ? /* @__PURE__ */ jsxs7(Text7, { bold: true, color: "green", children: [
1954
+ ">",
1955
+ " "
1956
+ ] }) : /* @__PURE__ */ jsx8(Text7, { children: " " }),
1957
+ /* @__PURE__ */ jsx8(Text7, { color: "green", children: "\u25CB" }),
2030
1958
  " ",
2031
- source
1959
+ goal.description.slice(0, 45),
1960
+ /* @__PURE__ */ jsxs7(Text7, { dimColor: true, children: [
1961
+ " ",
1962
+ source,
1963
+ " ",
1964
+ bar,
1965
+ " ",
1966
+ progress,
1967
+ "%"
1968
+ ] })
2032
1969
  ] }, goal.id);
2033
1970
  }),
2034
1971
  /* @__PURE__ */ jsx8(Text7, { children: " " })
2035
1972
  ] }),
2036
1973
  achievedGoals.length > 0 && /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2037
- /* @__PURE__ */ jsxs7(Text7, { children: [
2038
- /* @__PURE__ */ jsx8(Text7, { color: "green", children: "Achieved:" }),
2039
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " [x to remove]" })
2040
- ] }),
2041
- achievedGoals.slice(0, 5).map((g) => /* @__PURE__ */ jsxs7(Text7, { color: "green", children: [
2042
- " [+] ",
1974
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " Achieved" }),
1975
+ achievedGoals.slice(0, 5).map((g) => /* @__PURE__ */ jsxs7(Text7, { children: [
1976
+ " ",
1977
+ /* @__PURE__ */ jsx8(Text7, { color: "green", children: "\u25CF" }),
1978
+ " ",
2043
1979
  g.description.slice(0, 50)
2044
1980
  ] }, g.id)),
2045
1981
  achievedGoals.length > 5 && /* @__PURE__ */ jsxs7(Text7, { dimColor: true, children: [
2046
- " +",
1982
+ " +",
2047
1983
  achievedGoals.length - 5,
2048
1984
  " more"
2049
1985
  ] }),
2050
1986
  /* @__PURE__ */ jsx8(Text7, { children: " " })
2051
1987
  ] }),
2052
1988
  otherGoals.length > 0 && /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
2053
- /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "Other:" }),
2054
- otherGoals.slice(0, 2).map((g) => {
2055
- const icon = g.status === "failed" ? "[X]" : g.status === "paused" ? "[P]" : "\u2022";
2056
- return /* @__PURE__ */ jsxs7(Text7, { children: [
1989
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: " Other" }),
1990
+ otherGoals.slice(0, 2).map((g) => /* @__PURE__ */ jsxs7(Text7, { children: [
1991
+ " ",
1992
+ /* @__PURE__ */ jsx8(Text7, { dimColor: true, children: "\u25CB" }),
1993
+ " ",
1994
+ g.description.slice(0, 50),
1995
+ /* @__PURE__ */ jsxs7(Text7, { dimColor: true, children: [
2057
1996
  " ",
2058
- icon,
2059
- " ",
2060
- g.description.slice(0, 50),
2061
- /* @__PURE__ */ jsxs7(Text7, { dimColor: true, children: [
2062
- " (",
2063
- g.status,
2064
- ")"
2065
- ] })
2066
- ] }, g.id);
2067
- })
1997
+ g.status
1998
+ ] })
1999
+ ] }, g.id))
2068
2000
  ] })
2069
2001
  ] }) })
2070
2002
  ] });
@@ -2073,7 +2005,7 @@ function GoalsView() {
2073
2005
  // src/cli/dashboard/views/HypothesesView.tsx
2074
2006
  import { useCallback as useCallback2 } from "react";
2075
2007
  import { Box as Box8, Text as Text8, useInput as useInput4 } from "ink";
2076
- import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
2008
+ import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
2077
2009
  function HypothesesView() {
2078
2010
  const { state, dispatch } = useDashboard();
2079
2011
  const { hypothesesPanel } = state;
@@ -2184,74 +2116,63 @@ function HypothesesView() {
2184
2116
  ] }),
2185
2117
  /* @__PURE__ */ jsx9(Text8, { children: " " }),
2186
2118
  hypothesesPanel.inputMode === "add" ? /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2187
- /* @__PURE__ */ jsxs8(Text8, { children: [
2188
- /* @__PURE__ */ jsx9(Text8, { bold: true, children: "New hypothesis:" }),
2189
- " ",
2119
+ /* @__PURE__ */ jsx9(Box8, { borderStyle: "round", borderColor: "green", paddingX: 1, children: /* @__PURE__ */ jsxs8(Text8, { children: [
2190
2120
  hypothesesPanel.inputBuffer,
2191
- /* @__PURE__ */ jsx9(Text8, { bold: true, color: "green", children: "\u258C" })
2192
- ] }),
2193
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: 'Examples: "Mondays have more bugs", "Code reviews reduce issues"' }),
2194
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: "Press Enter to add, Escape to cancel" })
2195
- ] }) : /* @__PURE__ */ jsx9(Fragment3, { children: hypothesesPanel.hypotheses.length === 0 ? /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2196
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: "No hypotheses yet." }),
2197
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: "Press [a] to add your first hypothesis." }),
2198
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: "The agent will collect evidence and update confidence over time." })
2121
+ /* @__PURE__ */ jsx9(Text8, { bold: true, color: "green", children: "|" })
2122
+ ] }) }),
2123
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " enter save \xB7 esc cancel" })
2124
+ ] }) : /* @__PURE__ */ jsx9(Fragment2, { children: hypothesesPanel.hypotheses.length === 0 ? /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2125
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " No hypotheses yet." }),
2126
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " Press a to add your first hypothesis." })
2199
2127
  ] }) : /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2200
2128
  testing.length > 0 && /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2201
- /* @__PURE__ */ jsx9(Text8, { bold: true, children: "Testing:" }),
2202
2129
  testing.map((hypo, idx) => {
2203
2130
  const isSelected = hypothesesPanel.selectedIndex === idx;
2204
2131
  const conf = Math.round(hypo.confidence * 100);
2205
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2206
- /* @__PURE__ */ jsxs8(Text8, { children: [
2207
- isSelected ? /* @__PURE__ */ jsx9(Text8, { bold: true, color: "green", children: "\u25B6 " }) : /* @__PURE__ */ jsx9(Text8, { children: " " }),
2208
- '[?] "',
2209
- hypo.statement.slice(0, 50),
2210
- '" ',
2211
- /* @__PURE__ */ jsxs8(Text8, { color: conf >= 70 ? "green" : conf >= 40 ? "yellow" : "yellow", children: [
2212
- "(",
2213
- conf,
2214
- "%)"
2215
- ] })
2216
- ] }),
2132
+ return /* @__PURE__ */ jsx9(Box8, { flexDirection: "column", children: /* @__PURE__ */ jsxs8(Text8, { children: [
2133
+ isSelected ? /* @__PURE__ */ jsxs8(Text8, { bold: true, color: "green", children: [
2134
+ ">",
2135
+ " "
2136
+ ] }) : /* @__PURE__ */ jsx9(Text8, { children: " " }),
2137
+ /* @__PURE__ */ jsx9(Text8, { color: "yellow", children: "\u25CB" }),
2138
+ " ",
2139
+ hypo.statement.slice(0, 50),
2217
2140
  /* @__PURE__ */ jsxs8(Text8, { dimColor: true, children: [
2218
- " Evidence: ",
2141
+ " ",
2142
+ conf,
2143
+ "% \xB7 ",
2219
2144
  hypo.evidenceCount,
2220
- " points"
2145
+ " evidence"
2221
2146
  ] })
2222
- ] }, hypo.id);
2147
+ ] }) }, hypo.id);
2223
2148
  }),
2224
2149
  /* @__PURE__ */ jsx9(Text8, { children: " " })
2225
2150
  ] }),
2226
2151
  validated.length > 0 && /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2227
- /* @__PURE__ */ jsxs8(Text8, { children: [
2228
- /* @__PURE__ */ jsx9(Text8, { color: "green", children: "Validated:" }),
2229
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " [r to remove]" })
2230
- ] }),
2231
- validated.slice(0, 3).map((h) => /* @__PURE__ */ jsxs8(Text8, { color: "green", children: [
2232
- ' [+] "',
2233
- h.statement.slice(0, 50),
2234
- '"'
2152
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " Validated" }),
2153
+ validated.slice(0, 3).map((h) => /* @__PURE__ */ jsxs8(Text8, { children: [
2154
+ " ",
2155
+ /* @__PURE__ */ jsx9(Text8, { color: "green", children: "\u25CF" }),
2156
+ " ",
2157
+ h.statement.slice(0, 50)
2235
2158
  ] }, h.id)),
2236
2159
  validated.length > 3 && /* @__PURE__ */ jsxs8(Text8, { dimColor: true, children: [
2237
- " +",
2160
+ " +",
2238
2161
  validated.length - 3,
2239
2162
  " more"
2240
2163
  ] }),
2241
2164
  /* @__PURE__ */ jsx9(Text8, { children: " " })
2242
2165
  ] }),
2243
2166
  invalidated.length > 0 && /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
2244
- /* @__PURE__ */ jsxs8(Text8, { children: [
2245
- /* @__PURE__ */ jsx9(Text8, { color: "yellow", children: "Invalidated:" }),
2246
- /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " [r to remove]" })
2247
- ] }),
2248
- invalidated.slice(0, 2).map((h) => /* @__PURE__ */ jsx9(Text8, { children: /* @__PURE__ */ jsxs8(Text8, { color: "yellow", children: [
2249
- ' [X] "',
2250
- h.statement.slice(0, 50),
2251
- '"'
2252
- ] }) }, h.id)),
2167
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: " Invalidated" }),
2168
+ invalidated.slice(0, 2).map((h) => /* @__PURE__ */ jsxs8(Text8, { children: [
2169
+ " ",
2170
+ /* @__PURE__ */ jsx9(Text8, { color: "red", children: "\u25CF" }),
2171
+ " ",
2172
+ /* @__PURE__ */ jsx9(Text8, { dimColor: true, children: h.statement.slice(0, 50) })
2173
+ ] }, h.id)),
2253
2174
  invalidated.length > 2 && /* @__PURE__ */ jsxs8(Text8, { dimColor: true, children: [
2254
- " +",
2175
+ " +",
2255
2176
  invalidated.length - 2,
2256
2177
  " more"
2257
2178
  ] })
@@ -2320,19 +2241,21 @@ function MemoryTreeView() {
2320
2241
  /* @__PURE__ */ jsx10(Text9, { bold: true, children: "Memory" }),
2321
2242
  " ",
2322
2243
  /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2323
- "[",
2324
2244
  totalIssues,
2325
- " issues]"
2245
+ " issues"
2326
2246
  ] })
2327
2247
  ] }),
2328
2248
  /* @__PURE__ */ jsx10(Text9, { children: " " }),
2329
- !loaded ? /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "Loading memory data..." }) : issues.length === 0 && globalPatterns.length === 0 ? /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
2330
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "No issues in memory yet." }),
2331
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "Run a scan to populate the memory tree." })
2249
+ !loaded ? /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: " Loading memory data..." }) : issues.length === 0 && globalPatterns.length === 0 ? /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
2250
+ /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: " No issues in memory yet." }),
2251
+ /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: " Run a scan to populate the memory tree." })
2332
2252
  ] }) : /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
2333
2253
  /* @__PURE__ */ jsxs9(Text9, { children: [
2334
- sel("severity") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u25B6 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2335
- expandedNodes.has("severity") ? "\u25BC" : "\u25B6",
2254
+ sel("severity") ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2255
+ ">",
2256
+ " "
2257
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2258
+ expandedNodes.has("severity") ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u25CF" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u25CB" }),
2336
2259
  " ",
2337
2260
  sel("severity") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "By Severity" }) : /* @__PURE__ */ jsx10(Text9, { bold: true, children: "By Severity" })
2338
2261
  ] }),
@@ -2340,17 +2263,33 @@ function MemoryTreeView() {
2340
2263
  const count = bySeverity[sev]?.length || 0;
2341
2264
  const nodeId = `severity-${sev}`;
2342
2265
  const barStr = severityBar(count, maxCount);
2343
- const isLow = sev === "low";
2344
- const sevColorMap = { critical: "red", serious: "yellow", moderate: "blue" };
2345
- const sevColor = isLow ? void 0 : sevColorMap[sev];
2346
- const SevText = ({ children }) => isLow ? /* @__PURE__ */ jsx10(Text9, { dimColor: true, children }) : sevColor ? /* @__PURE__ */ jsx10(Text9, { color: sevColor, children }) : /* @__PURE__ */ jsx10(Text9, { children });
2266
+ const sevColorMap = { critical: "red", serious: "yellow", moderate: "blue", low: void 0 };
2267
+ const sevColor = sevColorMap[sev];
2347
2268
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
2348
2269
  /* @__PURE__ */ jsxs9(Text9, { children: [
2349
- sel(nodeId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2350
- " \u2502 ",
2351
- sel(nodeId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: sev }) : /* @__PURE__ */ jsx10(SevText, { children: sev }),
2352
- ` (${count}) `,
2353
- /* @__PURE__ */ jsx10(SevText, { children: barStr })
2270
+ sel(nodeId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2271
+ ">",
2272
+ " "
2273
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2274
+ " ",
2275
+ sel(nodeId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2276
+ sev,
2277
+ " (",
2278
+ count,
2279
+ ")"
2280
+ ] }) : sevColor ? /* @__PURE__ */ jsxs9(Text9, { color: sevColor, children: [
2281
+ sev,
2282
+ " (",
2283
+ count,
2284
+ ")"
2285
+ ] }) : /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2286
+ sev,
2287
+ " (",
2288
+ count,
2289
+ ")"
2290
+ ] }),
2291
+ " ",
2292
+ sevColor ? /* @__PURE__ */ jsx10(Text9, { color: sevColor, children: barStr }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: barStr })
2354
2293
  ] }),
2355
2294
  expandedNodes.has(nodeId) && (bySeverity[sev] || []).slice(0, 5).map((issue, i) => {
2356
2295
  const issueId = `severity-${sev}-${issue.id}`;
@@ -2358,58 +2297,79 @@ function MemoryTreeView() {
2358
2297
  const line = issue.line ? `:${issue.line}` : "";
2359
2298
  const desc = issue.issue.slice(0, 35) + (issue.issue.length > 35 ? "..." : "");
2360
2299
  return /* @__PURE__ */ jsxs9(Text9, { children: [
2361
- sel(issueId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2362
- " \u2502 ",
2363
- i === Math.min(5, bySeverity[sev]?.length || 0) - 1 ? "\u2514\u2500 " : "\u251C\u2500 ",
2300
+ sel(issueId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2301
+ ">",
2302
+ " "
2303
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2304
+ " ",
2364
2305
  /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2365
2306
  filename,
2366
2307
  line
2367
2308
  ] }),
2368
- " - ",
2369
- /* @__PURE__ */ jsx10(SevText, { children: desc })
2309
+ " ",
2310
+ /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: desc })
2370
2311
  ] }, i);
2371
2312
  })
2372
2313
  ] }, sev);
2373
2314
  }),
2374
2315
  /* @__PURE__ */ jsxs9(Text9, { children: [
2375
- sel("files") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2376
- expandedNodes.has("files") ? "\u25BC" : "\u25B6",
2316
+ sel("files") ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2317
+ ">",
2318
+ " "
2319
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2320
+ expandedNodes.has("files") ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u25CF" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u25CB" }),
2377
2321
  " ",
2378
2322
  sel("files") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "By File (Hot Spots)" }) : /* @__PURE__ */ jsx10(Text9, { bold: true, children: "By File (Hot Spots)" })
2379
2323
  ] }),
2380
- expandedNodes.has("files") && sortedFiles.map(([file, fileIssues], idx) => {
2324
+ expandedNodes.has("files") && sortedFiles.map(([file, fileIssues]) => {
2381
2325
  const fileId = `file-${file}`;
2382
2326
  const filename = file.split("/").pop() || file;
2383
2327
  const count = fileIssues.length;
2384
- const isLast = idx === sortedFiles.length - 1;
2385
2328
  return /* @__PURE__ */ jsxs9(Text9, { children: [
2386
- sel(fileId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2329
+ sel(fileId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2330
+ ">",
2331
+ " "
2332
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2387
2333
  " ",
2388
- isLast ? "\u2514\u2500 " : "\u251C\u2500 ",
2389
2334
  sel(fileId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: filename }) : /* @__PURE__ */ jsx10(Text9, { children: filename }),
2390
- ` (${count})`
2335
+ /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2336
+ " (",
2337
+ count,
2338
+ ")"
2339
+ ] })
2391
2340
  ] }, file);
2392
2341
  }),
2393
2342
  /* @__PURE__ */ jsxs9(Text9, { children: [
2394
- sel("agents") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2395
- expandedNodes.has("agents") ? "\u25BC" : "\u25B6",
2343
+ sel("agents") ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2344
+ ">",
2345
+ " "
2346
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2347
+ expandedNodes.has("agents") ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u25CF" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u25CB" }),
2396
2348
  " ",
2397
2349
  sel("agents") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "By Agent" }) : /* @__PURE__ */ jsx10(Text9, { bold: true, children: "By Agent" })
2398
2350
  ] }),
2399
- expandedNodes.has("agents") && sortedAgents.map(([agent, agentIssues], idx) => {
2351
+ expandedNodes.has("agents") && sortedAgents.map(([agent, agentIssues]) => {
2400
2352
  const agentId = `agent-${agent}`;
2401
- const isLast = idx === sortedAgents.length - 1;
2402
2353
  return /* @__PURE__ */ jsxs9(Text9, { children: [
2403
- sel(agentId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2354
+ sel(agentId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2355
+ ">",
2356
+ " "
2357
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2404
2358
  " ",
2405
- isLast ? "\u2514\u2500 " : "\u251C\u2500 ",
2406
2359
  sel(agentId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: agent }) : /* @__PURE__ */ jsx10(Text9, { children: agent }),
2407
- ` (${agentIssues.length})`
2360
+ /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2361
+ " (",
2362
+ agentIssues.length,
2363
+ ")"
2364
+ ] })
2408
2365
  ] }, agent);
2409
2366
  }),
2410
2367
  /* @__PURE__ */ jsxs9(Text9, { children: [
2411
- sel("patterns") ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2412
- expandedNodes.has("patterns") ? "\u25BC" : "\u25B6",
2368
+ sel("patterns") ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2369
+ ">",
2370
+ " "
2371
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2372
+ expandedNodes.has("patterns") ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u25CF" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u25CB" }),
2413
2373
  " ",
2414
2374
  sel("patterns") ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2415
2375
  "Patterns (",
@@ -2421,18 +2381,18 @@ function MemoryTreeView() {
2421
2381
  " recurring)"
2422
2382
  ] })
2423
2383
  ] }),
2424
- expandedNodes.has("patterns") && globalPatterns.slice(0, 5).map((pattern, idx) => {
2384
+ expandedNodes.has("patterns") && globalPatterns.slice(0, 5).map((pattern) => {
2425
2385
  const patternId = `pattern-${pattern.id}`;
2426
- const isLast = idx === Math.min(4, globalPatterns.length - 1);
2427
2386
  const desc = pattern.pattern.slice(0, 40) + (pattern.pattern.length > 40 ? "..." : "");
2428
2387
  return /* @__PURE__ */ jsxs9(Text9, { children: [
2429
- sel(patternId) ? /* @__PURE__ */ jsx10(Text9, { bold: true, color: "green", children: "\u2192 " }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2388
+ sel(patternId) ? /* @__PURE__ */ jsxs9(Text9, { bold: true, color: "green", children: [
2389
+ ">",
2390
+ " "
2391
+ ] }) : /* @__PURE__ */ jsx10(Text9, { children: " " }),
2430
2392
  " ",
2431
- isLast ? "\u2514\u2500 " : "\u251C\u2500 ",
2432
2393
  /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2433
- '"',
2434
2394
  desc,
2435
- '" - seen in ',
2395
+ " \xB7 ",
2436
2396
  pattern.projects.length,
2437
2397
  " projects"
2438
2398
  ] })
@@ -2440,19 +2400,14 @@ function MemoryTreeView() {
2440
2400
  }),
2441
2401
  /* @__PURE__ */ jsx10(Text9, { children: " " }),
2442
2402
  /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
2403
+ /* @__PURE__ */ jsx10(Text9, { children: stats?.improvementTrend === "improving" ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u25CF Improving" }) : stats?.improvementTrend === "declining" ? /* @__PURE__ */ jsx10(Text9, { color: "red", children: "\u25CF Declining" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u25CB Stable" }) }),
2443
2404
  /* @__PURE__ */ jsxs9(Text9, { children: [
2444
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "Trend: " }),
2445
- stats?.improvementTrend === "improving" ? /* @__PURE__ */ jsx10(Text9, { color: "green", children: "\u2191 Improving" }) : stats?.improvementTrend === "declining" ? /* @__PURE__ */ jsx10(Text9, { color: "red", children: "\u2193 Declining" }) : /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "\u2192 Stable" })
2405
+ /* @__PURE__ */ jsx10(Text9, { color: "green", children: stats?.resolvedCount || 0 }),
2406
+ /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: " resolved" })
2446
2407
  ] }),
2447
- /* @__PURE__ */ jsxs9(Text9, { children: [
2448
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "Resolved:" }),
2449
- " ",
2450
- /* @__PURE__ */ jsx10(Text9, { color: "green", children: stats?.resolvedCount || 0 })
2451
- ] }),
2452
- /* @__PURE__ */ jsxs9(Text9, { children: [
2453
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: "Historical:" }),
2454
- " ",
2455
- /* @__PURE__ */ jsx10(Text9, { dimColor: true, children: stats?.historicalIssues || 0 })
2408
+ /* @__PURE__ */ jsxs9(Text9, { dimColor: true, children: [
2409
+ stats?.historicalIssues || 0,
2410
+ " historical"
2456
2411
  ] })
2457
2412
  ] })
2458
2413
  ] })
@@ -2491,15 +2446,15 @@ function RawLogView() {
2491
2446
  /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: " entries" })
2492
2447
  ] }),
2493
2448
  /* @__PURE__ */ jsx11(Text10, { children: " " }),
2494
- rawLog.length === 0 ? /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: "No log entries yet." }) : /* @__PURE__ */ jsx11(Box10, { flexDirection: "column", children: logs.map((entry, i) => {
2495
- const levelTag = `[${entry.level.toUpperCase().padEnd(5)}]`;
2496
- const levelEl = entry.level === "error" ? /* @__PURE__ */ jsx11(Text10, { color: "red", children: levelTag }) : entry.level === "warn" ? /* @__PURE__ */ jsx11(Text10, { color: "yellow", children: levelTag }) : entry.level === "info" ? /* @__PURE__ */ jsx11(Text10, { color: "green", children: levelTag }) : /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: levelTag });
2449
+ rawLog.length === 0 ? /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: " No log entries yet." }) : /* @__PURE__ */ jsx11(Box10, { flexDirection: "column", children: logs.map((entry, i) => {
2450
+ const dot = entry.level === "error" ? /* @__PURE__ */ jsx11(Text10, { color: "red", children: "\u25CF" }) : entry.level === "warn" ? /* @__PURE__ */ jsx11(Text10, { color: "yellow", children: "\u25CF" }) : entry.level === "info" ? /* @__PURE__ */ jsx11(Text10, { color: "green", children: "\u25CF" }) : /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: "\u25CB" });
2497
2451
  return /* @__PURE__ */ jsxs10(Text10, { children: [
2498
- /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: entry.time }),
2499
- " ",
2500
- levelEl,
2452
+ " ",
2453
+ dot,
2501
2454
  " ",
2502
- entry.message.slice(0, 80)
2455
+ entry.message.slice(0, 70),
2456
+ " ",
2457
+ /* @__PURE__ */ jsx11(Text10, { dimColor: true, children: entry.time })
2503
2458
  ] }, i);
2504
2459
  }) })
2505
2460
  ] });
@@ -2761,4 +2716,4 @@ export {
2761
2716
  getOutputManager,
2762
2717
  InteractiveDashboard
2763
2718
  };
2764
- //# sourceMappingURL=chunk-M3WF7ZXI.js.map
2719
+ //# sourceMappingURL=chunk-HBPTBNFJ.js.map