@tacuchi/agent-workflow-cli 9.0.0 → 9.2.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 (77) hide show
  1. package/dist/application/mcp-test-connection-service.d.ts +19 -0
  2. package/dist/application/mcp-test-connection-service.d.ts.map +1 -0
  3. package/dist/application/mcp-test-connection-service.js +71 -0
  4. package/dist/application/mcp-test-connection-service.js.map +1 -0
  5. package/dist/application/self/install-skill.d.ts +2 -0
  6. package/dist/application/self/install-skill.d.ts.map +1 -1
  7. package/dist/application/self/install-skill.js +75 -3
  8. package/dist/application/self/install-skill.js.map +1 -1
  9. package/dist/application/self/uninstall.d.ts.map +1 -1
  10. package/dist/application/self/uninstall.js +37 -1
  11. package/dist/application/self/uninstall.js.map +1 -1
  12. package/dist/cli/tui/app.d.ts.map +1 -1
  13. package/dist/cli/tui/app.js +132 -148
  14. package/dist/cli/tui/app.js.map +1 -1
  15. package/dist/cli/tui/components/activity-feed.d.ts.map +1 -1
  16. package/dist/cli/tui/components/activity-feed.js +2 -2
  17. package/dist/cli/tui/components/activity-feed.js.map +1 -1
  18. package/dist/cli/tui/components/command-palette.d.ts +1 -0
  19. package/dist/cli/tui/components/command-palette.d.ts.map +1 -1
  20. package/dist/cli/tui/components/command-palette.js +3 -3
  21. package/dist/cli/tui/components/command-palette.js.map +1 -1
  22. package/dist/cli/tui/components/family-card.d.ts.map +1 -1
  23. package/dist/cli/tui/components/family-card.js +5 -4
  24. package/dist/cli/tui/components/family-card.js.map +1 -1
  25. package/dist/cli/tui/components/home-footer.d.ts +6 -0
  26. package/dist/cli/tui/components/home-footer.d.ts.map +1 -0
  27. package/dist/cli/tui/components/home-footer.js +15 -0
  28. package/dist/cli/tui/components/home-footer.js.map +1 -0
  29. package/dist/cli/tui/components/home-header.d.ts +9 -0
  30. package/dist/cli/tui/components/home-header.d.ts.map +1 -0
  31. package/dist/cli/tui/components/home-header.js +32 -0
  32. package/dist/cli/tui/components/home-header.js.map +1 -0
  33. package/dist/cli/tui/components/list-row.d.ts.map +1 -1
  34. package/dist/cli/tui/components/list-row.js +3 -3
  35. package/dist/cli/tui/components/list-row.js.map +1 -1
  36. package/dist/cli/tui/components/notification-banner.d.ts +17 -0
  37. package/dist/cli/tui/components/notification-banner.d.ts.map +1 -0
  38. package/dist/cli/tui/components/notification-banner.js +38 -0
  39. package/dist/cli/tui/components/notification-banner.js.map +1 -0
  40. package/dist/cli/tui/components/notification-stack.d.ts +17 -0
  41. package/dist/cli/tui/components/notification-stack.d.ts.map +1 -0
  42. package/dist/cli/tui/components/notification-stack.js +21 -0
  43. package/dist/cli/tui/components/notification-stack.js.map +1 -0
  44. package/dist/cli/tui/components/screen-frame.js +1 -1
  45. package/dist/cli/tui/components/screen-frame.js.map +1 -1
  46. package/dist/cli/tui/components/tab-bar.d.ts +17 -0
  47. package/dist/cli/tui/components/tab-bar.d.ts.map +1 -0
  48. package/dist/cli/tui/components/tab-bar.js +20 -0
  49. package/dist/cli/tui/components/tab-bar.js.map +1 -0
  50. package/dist/cli/tui/components/tabs-config.d.ts +19 -0
  51. package/dist/cli/tui/components/tabs-config.d.ts.map +1 -0
  52. package/dist/cli/tui/components/tabs-config.js +14 -0
  53. package/dist/cli/tui/components/tabs-config.js.map +1 -0
  54. package/dist/cli/tui/notification-center.d.ts +61 -0
  55. package/dist/cli/tui/notification-center.d.ts.map +1 -0
  56. package/dist/cli/tui/notification-center.js +102 -0
  57. package/dist/cli/tui/notification-center.js.map +1 -0
  58. package/dist/cli/tui/tabs/mcp-tab.d.ts.map +1 -1
  59. package/dist/cli/tui/tabs/mcp-tab.js +42 -29
  60. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  61. package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -1
  62. package/dist/cli/tui/tabs/project-tab.js +67 -10
  63. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  64. package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
  65. package/dist/cli/tui/tabs/skills-tab.js +4 -6
  66. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  67. package/dist/cli/tui/tabs/status-tab.d.ts +1 -4
  68. package/dist/cli/tui/tabs/status-tab.d.ts.map +1 -1
  69. package/dist/cli/tui/tabs/status-tab.js +6 -94
  70. package/dist/cli/tui/tabs/status-tab.js.map +1 -1
  71. package/dist/cli/tui/tabs/workflow-tab.d.ts.map +1 -1
  72. package/dist/cli/tui/tabs/workflow-tab.js +1 -5
  73. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  74. package/dist/domain/harnesses.d.ts.map +1 -1
  75. package/dist/domain/harnesses.js +6 -1
  76. package/dist/domain/harnesses.js.map +1 -1
  77. package/package.json +1 -1
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors, icons } from "../theme.js";
4
+ const DEFAULT_HANDLE = "@tacuchi";
5
+ const DOT = "·";
6
+ /**
7
+ * Sync coloreado según estado:
8
+ * - "in sync" → ok (verde)
9
+ * - "dirty" → warn (ámbar)
10
+ * - "N↑ M↓" → info (azul) — divergencia con upstream
11
+ * - fallback → dim
12
+ */
13
+ function syncColor(sync) {
14
+ if (sync === "in sync")
15
+ return colors.ok;
16
+ if (sync === "dirty")
17
+ return colors.warn;
18
+ if (/[↑↓]/.test(sync))
19
+ return colors.info;
20
+ return colors.dim;
21
+ }
22
+ function parseBranchLabel(branchLabel) {
23
+ const idx = branchLabel.indexOf(" · ");
24
+ if (idx < 0)
25
+ return { branch: branchLabel, sync: "" };
26
+ return { branch: branchLabel.slice(0, idx), sync: branchLabel.slice(idx + 3) };
27
+ }
28
+ export function HomeHeader({ brand, version, handle = DEFAULT_HANDLE, workspaceContext, }) {
29
+ const { branch, sync } = parseBranchLabel(workspaceContext.branchLabel);
30
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: colors.accent, bold: true, children: icons.brand }), _jsxs(Text, { color: colors.bright, bold: true, children: [" ", "AGENT WORKFLOW"] }), _jsxs(Text, { color: colors.faint, children: [" ", "v", version] })] }), _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: colors.dim, children: brand || "—" }), _jsx(Text, { color: colors.faint, children: ` ${DOT} ` }), _jsx(Text, { color: colors.dim, children: handle }), branch ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: colors.faint, children: ` ${DOT} ` }), _jsxs(Text, { color: colors.dim, children: [icons.branch, " ", branch] }), sync ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: colors.faint, children: " " }), _jsx(Text, { color: syncColor(sync), children: sync })] })) : null] })) : null, _jsx(Text, { color: colors.faint, children: ` ${DOT} ` }), _jsx(Text, { color: colors.dim, children: workspaceContext.sessionsLabel })] })] }));
31
+ }
32
+ //# sourceMappingURL=home-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-header.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/home-header.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-row.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/list-row.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,wBAAgB,OAAO,CAAC,EACtB,IAAmB,EACnB,UAAkB,EAClB,KAAK,EACL,QAAQ,EACR,IAAS,EACT,KAAK,EACL,OAAe,EACf,MAAc,EACd,MAAc,EACd,SAAS,GACV,EAAE,YAAY,2CAwHd"}
1
+ {"version":3,"file":"list-row.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/list-row.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,wBAAgB,OAAO,CAAC,EACtB,IAAmB,EACnB,UAAkB,EAClB,KAAK,EACL,QAAQ,EACR,IAAS,EACT,KAAK,EACL,OAAe,EACf,MAAc,EACd,MAAc,EACd,SAAS,GACV,EAAE,YAAY,2CAsHd"}
@@ -78,8 +78,8 @@ export function ListRow({ icon = icons.bullet, iconActive = false, title, subtit
78
78
  const spacerLen = Math.max(1, available - leftLen - rightLen);
79
79
  const spacer = " ".repeat(spacerLen);
80
80
  const innerPad = " ".repeat(INNER_PAD);
81
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { flexDirection: "row", paddingX: 0, children: [_jsx(Text, { color: focusBarColor, bold: focused, children: focused ? icons.focusBar : " " }), _jsx(Text, { children: " " }), _jsx(Text, { ...bgProp, children: innerPad }), _jsx(Text, { ...bgProp, color: iconColor, bold: focused, children: icon }), _jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: titleColor, bold: focused, children: title }), displaySubtitle ? (_jsxs(_Fragment, { children: [_jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: subColor, bold: focused, wrap: "truncate-end", children: displaySubtitle })] })) : null, _jsx(Text, { ...bgProp, wrap: "truncate-end", children: spacer }), meta.length > 0
82
- ? meta.map((m, i) => (_jsxs(Box, { children: [_jsx(Text, { ...bgProp, color: metaBaseColor ?? toneColor(m.tone), bold: focused, children: m.label }), _jsx(Text, { ...bgProp, children: " " })] }, `${m.label}-${i}`)))
83
- : null, state ? (_jsx(Text, { ...bgProp, color: stateColor, bold: focused || !dimmed, children: state.label })) : null, chevron ? (_jsxs(_Fragment, { children: [_jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: chevronColor, bold: focused, children: icons.chevron })] })) : null, _jsx(Text, { ...bgProp, children: innerPad })] }) }));
81
+ return (_jsxs(Box, { flexDirection: "row", paddingX: 0, children: [_jsx(Text, { color: focusBarColor, bold: focused, children: focused ? icons.focusBar : " " }), _jsx(Text, { children: " " }), _jsx(Text, { ...bgProp, children: innerPad }), _jsx(Text, { ...bgProp, color: iconColor, bold: focused, children: icon }), _jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: titleColor, bold: focused, children: title }), displaySubtitle ? (_jsxs(_Fragment, { children: [_jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: subColor, bold: focused, wrap: "truncate-end", children: displaySubtitle })] })) : null, _jsx(Text, { ...bgProp, wrap: "truncate-end", children: spacer }), meta.length > 0
82
+ ? meta.map((m, i) => (_jsxs(Box, { children: [_jsx(Text, { ...bgProp, color: metaBaseColor ?? toneColor(m.tone), bold: focused, children: m.label }), _jsx(Text, { ...bgProp, children: " " })] }, `${m.label}-${i}`)))
83
+ : null, state ? (_jsx(Text, { ...bgProp, color: stateColor, bold: focused || !dimmed, children: state.label })) : null, chevron ? (_jsxs(_Fragment, { children: [_jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: chevronColor, bold: focused, children: icons.chevron })] })) : null, _jsx(Text, { ...bgProp, children: innerPad })] }));
84
84
  }
85
85
  //# sourceMappingURL=list-row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-row.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/list-row.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-row.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/list-row.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { NotificationItem } from "../notification-center.js";
2
+ export interface NotificationBannerProps {
3
+ item: NotificationItem;
4
+ }
5
+ /**
6
+ * NotificationBanner — render visual de un item del NotificationCenter.
7
+ *
8
+ * Layout horizontal:
9
+ * ▎ <tone-icon> <title> <CTA primaria> <hints dim>
10
+ * <body opcional, dim>
11
+ *
12
+ * Si el item tiene acciones, la primera (o la que tenga `emphasis: true`) se
13
+ * resalta como `inverse bold`. El resto se muestra `dim` con la convención
14
+ * `key label · key label`. Si `dismissible !== false`, se anexa `x dismiss`.
15
+ */
16
+ export declare function NotificationBanner({ item }: NotificationBannerProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=notification-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-banner.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/notification-banner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,2BAA2B,CAAC;AAiBpF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,2CA8DnE"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors, icons } from "../theme.js";
4
+ const TONE_COLOR = {
5
+ ok: colors.ok,
6
+ info: colors.info,
7
+ warn: colors.warn,
8
+ err: colors.err,
9
+ };
10
+ const TONE_ICON = {
11
+ ok: icons.check,
12
+ info: icons.bullet,
13
+ warn: icons.refresh,
14
+ err: icons.cross,
15
+ };
16
+ /**
17
+ * NotificationBanner — render visual de un item del NotificationCenter.
18
+ *
19
+ * Layout horizontal:
20
+ * ▎ <tone-icon> <title> <CTA primaria> <hints dim>
21
+ * <body opcional, dim>
22
+ *
23
+ * Si el item tiene acciones, la primera (o la que tenga `emphasis: true`) se
24
+ * resalta como `inverse bold`. El resto se muestra `dim` con la convención
25
+ * `key label · key label`. Si `dismissible !== false`, se anexa `x dismiss`.
26
+ */
27
+ export function NotificationBanner({ item }) {
28
+ const toneColor = TONE_COLOR[item.tone];
29
+ const toneIcon = TONE_ICON[item.tone];
30
+ const actions = item.actions ?? [];
31
+ const dismissible = item.dismissible !== false;
32
+ // CTA primaria: la primera acción con emphasis, o la primera del array.
33
+ const primaryIdx = actions.findIndex((a) => a.emphasis);
34
+ const primary = primaryIdx >= 0 ? actions[primaryIdx] : actions[0];
35
+ const rest = actions.filter((a) => a !== primary);
36
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: toneColor, children: icons.focusBar }), _jsx(Text, { children: " " }), _jsx(Text, { color: toneColor, children: toneIcon }), _jsx(Text, { children: " " }), _jsx(Box, { flexGrow: 1, children: typeof item.title === "string" ? (_jsx(Text, { color: colors.bright, bold: true, children: item.title })) : (item.title) }), primary ? (_jsx(Box, { marginLeft: 1, children: _jsx(Text, { color: colors.accent, bold: true, inverse: true, children: ` ${primary.key} · ${primary.label} ` }) })) : null, rest.length > 0 || dismissible ? (_jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: colors.mute, children: [rest.map((a, idx) => (_jsxs(Text, { children: [idx > 0 ? " · " : "", _jsx(Text, { color: colors.accent, children: a.key }), _jsxs(Text, { color: colors.mute, children: [" ", a.label] })] }, `${a.key}-${a.label}`))), dismissible ? (_jsxs(_Fragment, { children: [rest.length > 0 ? _jsx(Text, { color: colors.mute, children: " \u00B7 " }) : null, _jsx(Text, { color: colors.accent, children: "x" }), _jsx(Text, { color: colors.mute, children: " dismiss" })] })) : null] }) })) : null] }), item.body ? (_jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: colors.dim, children: item.body }) })) : null] }));
37
+ }
38
+ //# sourceMappingURL=notification-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-banner.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/notification-banner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { NotificationItem } from "../notification-center.js";
2
+ export interface NotificationStackProps {
3
+ items: NotificationItem[];
4
+ /** Máximo de items visibles a la vez (los más nuevos primero). Default 3. */
5
+ max?: number;
6
+ }
7
+ /**
8
+ * NotificationStack — render del array de items del NotificationCenter.
9
+ *
10
+ * Vive entre `HomeHeader` y `TabBar`. Cuando `items` está vacío, no rinde nada
11
+ * (collapse total — no ocupa filas).
12
+ *
13
+ * Si hay más de `max` items, muestra los `max` más nuevos y un contador
14
+ * `+N more` debajo para señalizar el overflow.
15
+ */
16
+ export declare function NotificationStack({ items, max }: NotificationStackProps): import("react/jsx-runtime").JSX.Element | null;
17
+ //# sourceMappingURL=notification-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-stack.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/notification-stack.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAO,EAAE,EAAE,sBAAsB,kDAgB3E"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors } from "../theme.js";
4
+ import { NotificationBanner } from "./notification-banner.js";
5
+ /**
6
+ * NotificationStack — render del array de items del NotificationCenter.
7
+ *
8
+ * Vive entre `HomeHeader` y `TabBar`. Cuando `items` está vacío, no rinde nada
9
+ * (collapse total — no ocupa filas).
10
+ *
11
+ * Si hay más de `max` items, muestra los `max` más nuevos y un contador
12
+ * `+N more` debajo para señalizar el overflow.
13
+ */
14
+ export function NotificationStack({ items, max = 3 }) {
15
+ if (items.length === 0)
16
+ return null;
17
+ const visible = items.slice(-max).reverse();
18
+ const overflow = items.length - visible.length;
19
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [visible.map((item) => (_jsx(NotificationBanner, { item: item }, item.id))), overflow > 0 ? (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { color: colors.faint, children: ["+", overflow, " more"] }) })) : null] }));
20
+ }
21
+ //# sourceMappingURL=notification-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-stack.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/notification-stack.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQ9D;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAA0B;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACxC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,KAAC,kBAAkB,IAAe,IAAI,EAAE,IAAI,IAAnB,IAAI,CAAC,EAAE,CAAgB,CACjD,CAAC,EACD,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CACd,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,kBAAI,QAAQ,aAAa,GAC9C,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -2,6 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box } from "ink";
3
3
  import { colors } from "../theme.js";
4
4
  export function ScreenFrame({ children }) {
5
- return (_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: colors.border, paddingX: 2, paddingY: 1, children: children }));
5
+ return (_jsx(Box, { flexDirection: "column", borderStyle: "bold", borderColor: colors.accent, paddingX: 2, paddingY: 1, children: children }));
6
6
  }
7
7
  //# sourceMappingURL=screen-frame.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen-frame.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/screen-frame.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAC1B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,YAEV,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"screen-frame.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/screen-frame.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,MAAM,EAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAC1B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,YAEV,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type TabConfig, type TabId } from "./tabs-config.js";
2
+ export interface TabBarProps {
3
+ /** Tab activa actualmente; null cuando estamos en la palette home. */
4
+ activeTabId: TabId | null;
5
+ /** Override de la lista de tabs (default TABS_LIST). */
6
+ tabs?: readonly TabConfig[];
7
+ }
8
+ /**
9
+ * TabBar — fila horizontal con la lista de tabs accesibles.
10
+ *
11
+ * Layout: `<Status> <Workflow> <Project> <MCP> <Skills>`
12
+ *
13
+ * Activa: highlight inverse violet (estilo CTA pill).
14
+ * Inactiva: `dim`.
15
+ */
16
+ export declare function TabBar({ activeTabId, tabs }: TabBarProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=tab-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;IAC1B,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EAAE,WAAW,EAAE,IAAgB,EAAE,EAAE,WAAW,2CAoBpE"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors } from "../theme.js";
4
+ import { TABS_LIST } from "./tabs-config.js";
5
+ /**
6
+ * TabBar — fila horizontal con la lista de tabs accesibles.
7
+ *
8
+ * Layout: `<Status> <Workflow> <Project> <MCP> <Skills>`
9
+ *
10
+ * Activa: highlight inverse violet (estilo CTA pill).
11
+ * Inactiva: `dim`.
12
+ */
13
+ export function TabBar({ activeTabId, tabs = TABS_LIST }) {
14
+ return (_jsx(Box, { flexDirection: "row", borderStyle: "single", borderColor: colors.accent, paddingX: 2, children: tabs.map((tab, idx) => {
15
+ const isActive = tab.id === activeTabId;
16
+ const isLast = idx === tabs.length - 1;
17
+ return (_jsx(Box, { marginRight: isLast ? 0 : 2, children: isActive ? (_jsx(Text, { color: colors.accent, bold: true, inverse: true, children: ` ${tab.label} ` })) : (_jsx(Text, { color: colors.dim, children: tab.label })) }, tab.id));
18
+ }) }));
19
+ }
20
+ //# sourceMappingURL=tab-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-bar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAA8B,MAAM,kBAAkB,CAAC;AASzE;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,SAAS,EAAe;IACnE,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,YAClF,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC;YACxC,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACvC,OAAO,CACL,KAAC,GAAG,IAAc,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAC1C,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,QAAC,OAAO,kBACrC,IAAI,GAAG,CAAC,KAAK,GAAG,GACZ,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,GAAG,YAAG,GAAG,CAAC,KAAK,GAAQ,CAC5C,IAPO,GAAG,CAAC,EAAE,CAQV,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type TabId = "status" | "workflow" | "project" | "mcp" | "skills";
2
+ export interface TabConfig {
3
+ id: TabId;
4
+ key: string;
5
+ label: string;
6
+ badge?: string;
7
+ alert?: boolean;
8
+ }
9
+ /** Lista canónica de tabs en orden de presentación + atajo numérico. */
10
+ export declare const TABS_LIST: readonly TabConfig[];
11
+ export interface WorkspaceContext {
12
+ branchLabel: string;
13
+ sessionsLabel: string;
14
+ }
15
+ export interface KeymapEntry {
16
+ key: string;
17
+ action: string;
18
+ }
19
+ //# sourceMappingURL=tabs-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs-config.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/tabs-config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wEAAwE;AACxE,eAAO,MAAM,SAAS,EAAE,SAAS,SAAS,EAMhC,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,14 @@
1
+ // Tipos compartidos del shell TUI — origen único para la lista de tabs,
2
+ // el contexto de workspace y el keymap global.
3
+ //
4
+ // Antes vivían en `components/sidebar.tsx`. Con la migración a "palette como
5
+ // home" (session089) la sidebar fue eliminada y los tipos quedan acá, neutros.
6
+ /** Lista canónica de tabs en orden de presentación + atajo numérico. */
7
+ export const TABS_LIST = [
8
+ { id: "status", key: "1", label: "Status" },
9
+ { id: "workflow", key: "2", label: "Workflow" },
10
+ { id: "project", key: "3", label: "Project" },
11
+ { id: "mcp", key: "4", label: "MCP" },
12
+ { id: "skills", key: "5", label: "Skills" },
13
+ ];
14
+ //# sourceMappingURL=tabs-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs-config.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/tabs-config.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,+CAA+C;AAC/C,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAY/E,wEAAwE;AACxE,MAAM,CAAC,MAAM,SAAS,GAAyB;IAC7C,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC3C,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;IAC/C,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;IAC7C,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;IACrC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;CACnC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * NotificationCenter — estado global unificado para banners persistentes
4
+ * (update available, doctor check) y mensajes efímeros (antes "toasts").
5
+ *
6
+ * - Items con `duration` definido se auto-dismiss tras `duration` ms (toasts).
7
+ * - Items sin `duration` persisten hasta `dismiss(id)` o `x dismiss` del usuario.
8
+ * - `push` es idempotente por `id`: re-pushear `update-available` reemplaza al
9
+ * item existente sin duplicar.
10
+ */
11
+ export type NotificationTone = "ok" | "info" | "warn" | "err";
12
+ export interface NotificationAction {
13
+ /** Tecla que dispara la acción (single char). */
14
+ key: string;
15
+ label: string;
16
+ /** Resalta como CTA primaria (inverse bold). Por default la primera. */
17
+ emphasis?: boolean;
18
+ run: () => void;
19
+ }
20
+ export interface NotificationItem {
21
+ id: string;
22
+ tone: NotificationTone;
23
+ title: string | ReactNode;
24
+ body?: string;
25
+ actions?: NotificationAction[];
26
+ /** Si se define, auto-dismiss tras `duration` ms. */
27
+ duration?: number;
28
+ /** Default true. Cuando false oculta `x dismiss` y no responde a 'x'. */
29
+ dismissible?: boolean;
30
+ }
31
+ export interface NotificationInput {
32
+ id?: string;
33
+ tone?: NotificationTone;
34
+ title: string | ReactNode;
35
+ body?: string;
36
+ actions?: NotificationAction[];
37
+ duration?: number;
38
+ dismissible?: boolean;
39
+ }
40
+ /** Firma legacy compatible con el viejo `useToasts.push`. */
41
+ export interface ToastBridgeInput {
42
+ tone?: "ok" | "info" | "err";
43
+ title: string;
44
+ body?: string;
45
+ duration?: number;
46
+ }
47
+ interface NotificationCenterApi {
48
+ items: NotificationItem[];
49
+ push: (input: NotificationInput) => string;
50
+ pushToast: (input: ToastBridgeInput) => string;
51
+ dismiss: (id: string) => void;
52
+ dismissTop: () => boolean;
53
+ triggerAction: (key: string) => boolean;
54
+ }
55
+ export interface NotificationCenterProviderProps {
56
+ children: ReactNode;
57
+ }
58
+ export declare function NotificationCenterProvider({ children }: NotificationCenterProviderProps): import("react/jsx-runtime").JSX.Element;
59
+ export declare function useNotifications(): NotificationCenterApi;
60
+ export {};
61
+ //# sourceMappingURL=notification-center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/notification-center.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAEf;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACzC;AAMD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,+BAA+B,2CAkHvF;AAED,wBAAgB,gBAAgB,IAAI,qBAAqB,CAMxD"}
@@ -0,0 +1,102 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useMemo, useRef, useState, } from "react";
3
+ const NotificationCenterContext = createContext(null);
4
+ const DEFAULT_TOAST_DURATION_MS = 3200;
5
+ export function NotificationCenterProvider({ children }) {
6
+ const [items, setItems] = useState([]);
7
+ const seq = useRef(0);
8
+ const timers = useRef(new Map());
9
+ const clearTimer = useCallback((id) => {
10
+ const t = timers.current.get(id);
11
+ if (t) {
12
+ clearTimeout(t);
13
+ timers.current.delete(id);
14
+ }
15
+ }, []);
16
+ const dismiss = useCallback((id) => {
17
+ clearTimer(id);
18
+ setItems((prev) => prev.filter((i) => i.id !== id));
19
+ }, [clearTimer]);
20
+ const scheduleAutoDismiss = useCallback((id, duration) => {
21
+ clearTimer(id);
22
+ const handle = setTimeout(() => dismiss(id), duration);
23
+ timers.current.set(id, handle);
24
+ }, [clearTimer, dismiss]);
25
+ const push = useCallback((input) => {
26
+ const id = input.id ?? `n${++seq.current}`;
27
+ const item = {
28
+ id,
29
+ tone: input.tone ?? "info",
30
+ title: input.title,
31
+ ...(input.body !== undefined ? { body: input.body } : {}),
32
+ ...(input.actions !== undefined ? { actions: input.actions } : {}),
33
+ ...(input.duration !== undefined ? { duration: input.duration } : {}),
34
+ ...(input.dismissible !== undefined ? { dismissible: input.dismissible } : {}),
35
+ };
36
+ setItems((prev) => {
37
+ const existingIdx = prev.findIndex((i) => i.id === id);
38
+ if (existingIdx === -1)
39
+ return [...prev, item];
40
+ const next = prev.slice();
41
+ next[existingIdx] = item;
42
+ return next;
43
+ });
44
+ if (item.duration !== undefined)
45
+ scheduleAutoDismiss(id, item.duration);
46
+ return id;
47
+ }, [scheduleAutoDismiss]);
48
+ const pushToast = useCallback((input) => {
49
+ const tone = input.tone === "ok" ? "ok" : input.tone === "err" ? "err" : "info";
50
+ return push({
51
+ tone,
52
+ title: input.title,
53
+ ...(input.body !== undefined ? { body: input.body } : {}),
54
+ duration: input.duration ?? DEFAULT_TOAST_DURATION_MS,
55
+ });
56
+ }, [push]);
57
+ const dismissTop = useCallback(() => {
58
+ let didDismiss = false;
59
+ setItems((prev) => {
60
+ // Top = el más nuevo y dismissible (último en el array).
61
+ for (let i = prev.length - 1; i >= 0; i--) {
62
+ const item = prev[i];
63
+ if (item && item.dismissible !== false) {
64
+ clearTimer(item.id);
65
+ didDismiss = true;
66
+ return prev.filter((_, idx) => idx !== i);
67
+ }
68
+ }
69
+ return prev;
70
+ });
71
+ return didDismiss;
72
+ }, [clearTimer]);
73
+ const triggerAction = useCallback((key) => {
74
+ const normalized = key.toLowerCase();
75
+ let actionRan = false;
76
+ // Buscar la acción en el item más nuevo primero (LIFO).
77
+ setItems((prev) => {
78
+ for (let i = prev.length - 1; i >= 0; i--) {
79
+ const item = prev[i];
80
+ const match = item?.actions?.find((a) => a.key.toLowerCase() === normalized);
81
+ if (match) {
82
+ actionRan = true;
83
+ // Ejecutar fuera del setState callback para evitar side-effects en render.
84
+ queueMicrotask(() => match.run());
85
+ break;
86
+ }
87
+ }
88
+ return prev;
89
+ });
90
+ return actionRan;
91
+ }, []);
92
+ const api = useMemo(() => ({ items, push, pushToast, dismiss, dismissTop, triggerAction }), [items, push, pushToast, dismiss, dismissTop, triggerAction]);
93
+ return (_jsx(NotificationCenterContext.Provider, { value: api, children: children }));
94
+ }
95
+ export function useNotifications() {
96
+ const ctx = useContext(NotificationCenterContext);
97
+ if (!ctx) {
98
+ throw new Error("useNotifications must be used within a NotificationCenterProvider");
99
+ }
100
+ return ctx;
101
+ }
102
+ //# sourceMappingURL=notification-center.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-center.js","sourceRoot":"","sources":["../../../src/cli/tui/notification-center.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tab.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/mcp-tab.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gCAAgC,CAAC;AAqBlF,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;CAChC;AA+BD,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,WAAW,2CA4a3E"}
1
+ {"version":3,"file":"mcp-tab.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/mcp-tab.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gCAAgC,CAAC;AAqBlF,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;CAChC;AA6BD,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,WAAW,2CAqb3E"}