@burtson-labs/agent-ui 1.0.11

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 (144) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +45 -0
  3. package/dist/components/AgentConsole.d.ts +11 -0
  4. package/dist/components/AgentConsole.d.ts.map +1 -0
  5. package/dist/components/AgentConsole.js +139 -0
  6. package/dist/components/AgentConsole.js.map +1 -0
  7. package/dist/components/AgentSummaryCard.d.ts +9 -0
  8. package/dist/components/AgentSummaryCard.d.ts.map +1 -0
  9. package/dist/components/AgentSummaryCard.js +96 -0
  10. package/dist/components/AgentSummaryCard.js.map +1 -0
  11. package/dist/components/ChatComposer.d.ts +134 -0
  12. package/dist/components/ChatComposer.d.ts.map +1 -0
  13. package/dist/components/ChatComposer.js +411 -0
  14. package/dist/components/ChatComposer.js.map +1 -0
  15. package/dist/components/ChatConversation.d.ts +28 -0
  16. package/dist/components/ChatConversation.d.ts.map +1 -0
  17. package/dist/components/ChatConversation.js +82 -0
  18. package/dist/components/ChatConversation.js.map +1 -0
  19. package/dist/components/ChatMessage.d.ts +38 -0
  20. package/dist/components/ChatMessage.d.ts.map +1 -0
  21. package/dist/components/ChatMessage.js +208 -0
  22. package/dist/components/ChatMessage.js.map +1 -0
  23. package/dist/components/DiffBlock.d.ts +7 -0
  24. package/dist/components/DiffBlock.d.ts.map +1 -0
  25. package/dist/components/DiffBlock.js +58 -0
  26. package/dist/components/DiffBlock.js.map +1 -0
  27. package/dist/components/DiffReview/DiffBlock.d.ts +7 -0
  28. package/dist/components/DiffReview/DiffBlock.d.ts.map +1 -0
  29. package/dist/components/DiffReview/DiffBlock.js +13 -0
  30. package/dist/components/DiffReview/DiffBlock.js.map +1 -0
  31. package/dist/components/DiffReview/DiffFileGroup.d.ts +14 -0
  32. package/dist/components/DiffReview/DiffFileGroup.d.ts.map +1 -0
  33. package/dist/components/DiffReview/DiffFileGroup.js +44 -0
  34. package/dist/components/DiffReview/DiffFileGroup.js.map +1 -0
  35. package/dist/components/DiffReview/DiffReviewPanel.d.ts +16 -0
  36. package/dist/components/DiffReview/DiffReviewPanel.d.ts.map +1 -0
  37. package/dist/components/DiffReview/DiffReviewPanel.js +25 -0
  38. package/dist/components/DiffReview/DiffReviewPanel.js.map +1 -0
  39. package/dist/components/DiffReview/index.d.ts +3 -0
  40. package/dist/components/DiffReview/index.d.ts.map +1 -0
  41. package/dist/components/DiffReview/index.js +19 -0
  42. package/dist/components/DiffReview/index.js.map +1 -0
  43. package/dist/components/DiffReviewCard.d.ts +10 -0
  44. package/dist/components/DiffReviewCard.d.ts.map +1 -0
  45. package/dist/components/DiffReviewCard.js +36 -0
  46. package/dist/components/DiffReviewCard.js.map +1 -0
  47. package/dist/components/DiffStream.d.ts +12 -0
  48. package/dist/components/DiffStream.d.ts.map +1 -0
  49. package/dist/components/DiffStream.js +43 -0
  50. package/dist/components/DiffStream.js.map +1 -0
  51. package/dist/components/MarkdownMessage.d.ts +17 -0
  52. package/dist/components/MarkdownMessage.d.ts.map +1 -0
  53. package/dist/components/MarkdownMessage.js +158 -0
  54. package/dist/components/MarkdownMessage.js.map +1 -0
  55. package/dist/components/PermissionCard.d.ts +64 -0
  56. package/dist/components/PermissionCard.d.ts.map +1 -0
  57. package/dist/components/PermissionCard.js +156 -0
  58. package/dist/components/PermissionCard.js.map +1 -0
  59. package/dist/components/PlanActivity.d.ts +20 -0
  60. package/dist/components/PlanActivity.d.ts.map +1 -0
  61. package/dist/components/PlanActivity.js +186 -0
  62. package/dist/components/PlanActivity.js.map +1 -0
  63. package/dist/components/PlanTree.d.ts +13 -0
  64. package/dist/components/PlanTree.d.ts.map +1 -0
  65. package/dist/components/PlanTree.js +70 -0
  66. package/dist/components/PlanTree.js.map +1 -0
  67. package/dist/components/TaskList.d.ts +9 -0
  68. package/dist/components/TaskList.d.ts.map +1 -0
  69. package/dist/components/TaskList.js +26 -0
  70. package/dist/components/TaskList.js.map +1 -0
  71. package/dist/components/TelemetryPanel.d.ts +9 -0
  72. package/dist/components/TelemetryPanel.d.ts.map +1 -0
  73. package/dist/components/TelemetryPanel.js +54 -0
  74. package/dist/components/TelemetryPanel.js.map +1 -0
  75. package/dist/components/index.d.ts +15 -0
  76. package/dist/components/index.d.ts.map +1 -0
  77. package/dist/components/index.js +31 -0
  78. package/dist/components/index.js.map +1 -0
  79. package/dist/context/BanditContext.d.ts +14 -0
  80. package/dist/context/BanditContext.d.ts.map +1 -0
  81. package/dist/context/BanditContext.js +18 -0
  82. package/dist/context/BanditContext.js.map +1 -0
  83. package/dist/context/index.d.ts +2 -0
  84. package/dist/context/index.d.ts.map +1 -0
  85. package/dist/context/index.js +18 -0
  86. package/dist/context/index.js.map +1 -0
  87. package/dist/hooks/index.d.ts +3 -0
  88. package/dist/hooks/index.d.ts.map +1 -0
  89. package/dist/hooks/index.js +19 -0
  90. package/dist/hooks/index.js.map +1 -0
  91. package/dist/hooks/useAgentEvents.d.ts +13 -0
  92. package/dist/hooks/useAgentEvents.d.ts.map +1 -0
  93. package/dist/hooks/useAgentEvents.js +54 -0
  94. package/dist/hooks/useAgentEvents.js.map +1 -0
  95. package/dist/hooks/useTelemetry.d.ts +4 -0
  96. package/dist/hooks/useTelemetry.d.ts.map +1 -0
  97. package/dist/hooks/useTelemetry.js +198 -0
  98. package/dist/hooks/useTelemetry.js.map +1 -0
  99. package/dist/index.d.ts +12 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +29 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/theme/BanditThemeProvider.d.ts +26 -0
  104. package/dist/theme/BanditThemeProvider.d.ts.map +1 -0
  105. package/dist/theme/BanditThemeProvider.js +138 -0
  106. package/dist/theme/BanditThemeProvider.js.map +1 -0
  107. package/dist/theme/catppuccin-mocha.json +23 -0
  108. package/dist/theme/charcoal.json +23 -0
  109. package/dist/theme/dark.json +23 -0
  110. package/dist/theme/dracula.json +23 -0
  111. package/dist/theme/index.d.ts +5 -0
  112. package/dist/theme/index.d.ts.map +1 -0
  113. package/dist/theme/index.js +21 -0
  114. package/dist/theme/index.js.map +1 -0
  115. package/dist/theme/light.json +23 -0
  116. package/dist/theme/midnight.json +23 -0
  117. package/dist/theme/nord.json +23 -0
  118. package/dist/theme/onyx.json +23 -0
  119. package/dist/theme/sepia.json +23 -0
  120. package/dist/theme/solarized-dark.json +23 -0
  121. package/dist/theme/solarized-light.json +23 -0
  122. package/dist/theme/theme-base.d.ts +37 -0
  123. package/dist/theme/theme-base.d.ts.map +1 -0
  124. package/dist/theme/theme-base.js +141 -0
  125. package/dist/theme/theme-base.js.map +1 -0
  126. package/dist/theme/theme-registry.d.ts +22 -0
  127. package/dist/theme/theme-registry.d.ts.map +1 -0
  128. package/dist/theme/theme-registry.js +52 -0
  129. package/dist/theme/theme-registry.js.map +1 -0
  130. package/dist/theme/tokyo-night.json +23 -0
  131. package/dist/theme/vscode-theme.d.ts +3 -0
  132. package/dist/theme/vscode-theme.d.ts.map +1 -0
  133. package/dist/theme/vscode-theme.js +128 -0
  134. package/dist/theme/vscode-theme.js.map +1 -0
  135. package/dist/types/ui-schema.d.ts +114 -0
  136. package/dist/types/ui-schema.d.ts.map +1 -0
  137. package/dist/types/ui-schema.js +3 -0
  138. package/dist/types/ui-schema.js.map +1 -0
  139. package/dist/utils/classNames.d.ts +2 -0
  140. package/dist/utils/classNames.d.ts.map +1 -0
  141. package/dist/utils/classNames.js +8 -0
  142. package/dist/utils/classNames.js.map +1 -0
  143. package/package.json +55 -0
  144. package/styles/agent-ui.css +3844 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PermissionCard = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const clsx_1 = __importDefault(require("clsx"));
10
+ /**
11
+ * Vertical-stacked buttons with numbered keyboard shortcuts. Order
12
+ * matches Claude Code's convention (Yes options first, No last) but
13
+ * we keep all four of our scopes because "session" and "save" are
14
+ * distinct use cases for Bandit — one is per-window, the other
15
+ * persists across restarts via .bandit/settings.json.
16
+ */
17
+ const CHOICE_ORDER = ["once", "session", "save", "deny"];
18
+ const CHOICE_LABELS = {
19
+ once: { label: "Allow once", hint: "Run this single tool call", key: "1" },
20
+ session: { label: "Allow session", hint: "Allow this tool until you close the window", key: "2" },
21
+ save: { label: "Always for target", hint: "Save this target to .bandit/settings.json", key: "3" },
22
+ deny: { label: "Deny", hint: "Abort the tool call", key: "4" }
23
+ };
24
+ const PermissionCard = ({ payload, onChoice }) => {
25
+ const [resolved, setResolved] = (0, react_1.useState)(null);
26
+ const [resolvedNotes, setResolvedNotes] = (0, react_1.useState)(undefined);
27
+ const [notesDraft, setNotesDraft] = (0, react_1.useState)("");
28
+ const cardRef = (0, react_1.useRef)(null);
29
+ // Auto-focus the card so the numbered keyboard shortcuts work without
30
+ // the user having to click first. Matches Claude's "press 1/2/3 to
31
+ // pick, Esc to cancel" muscle memory out of the box.
32
+ (0, react_1.useEffect)(() => {
33
+ if (!resolved)
34
+ cardRef.current?.focus();
35
+ }, [resolved]);
36
+ const pick = (choice, notes) => {
37
+ if (resolved)
38
+ return;
39
+ const trimmed = notes?.trim() || undefined;
40
+ setResolved(choice);
41
+ setResolvedNotes(trimmed);
42
+ onChoice(payload.id, choice, trimmed);
43
+ };
44
+ const handleKeyDown = (e) => {
45
+ if (resolved)
46
+ return;
47
+ // Number keys map to the choice order. 1/2/3/4 = once/session/save/deny.
48
+ // Only fire when the focus target isn't a text input — otherwise
49
+ // typing "1" in the notes textarea would accidentally approve.
50
+ const target = e.target;
51
+ const isInput = target && (target.tagName === "TEXTAREA" || target.tagName === "INPUT");
52
+ if (!isInput) {
53
+ if (e.key === "1") {
54
+ e.preventDefault();
55
+ pick("once");
56
+ return;
57
+ }
58
+ if (e.key === "2") {
59
+ e.preventDefault();
60
+ pick("session");
61
+ return;
62
+ }
63
+ if (e.key === "3") {
64
+ e.preventDefault();
65
+ pick("save");
66
+ return;
67
+ }
68
+ if (e.key === "4") {
69
+ e.preventDefault();
70
+ pick("deny", notesDraft);
71
+ return;
72
+ }
73
+ }
74
+ if (e.key === "Escape") {
75
+ e.preventDefault();
76
+ pick("deny", notesDraft);
77
+ }
78
+ };
79
+ const handleNotesKeyDown = (e) => {
80
+ // Cmd/Ctrl+Enter from the notes input submits a denial + the text.
81
+ // Plain Enter adds a newline so multi-line guidance is possible.
82
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
83
+ e.preventDefault();
84
+ pick("deny", notesDraft);
85
+ }
86
+ };
87
+ // Body preview selection: prefer the rich content the extension
88
+ // pre-computed for this specific tool type. `command` → raw shell
89
+ // string for run_command. `paramsPreview` → key=value dump for
90
+ // other tools (apply_edit, git_checkout, etc). `bodyPreview` with
91
+ // diff stats → write_file / apply_edit changes. Fallback: show
92
+ // nothing (the title line already mentions the tool + primary arg).
93
+ const hasCommand = typeof payload.command === "string" && payload.command.trim().length > 0;
94
+ const hasParams = !hasCommand && typeof payload.paramsPreview === "string" && payload.paramsPreview.trim().length > 0;
95
+ const hasDiff = !hasCommand && !hasParams && typeof payload.bodyPreview === "string" && payload.bodyPreview.trim().length > 0;
96
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: cardRef, tabIndex: -1, className: (0, clsx_1.default)("permission-card", resolved && "is-resolved", resolved === "deny" && "is-denied"), role: "group", "aria-label": `Permission prompt for ${payload.tool}`, onKeyDown: handleKeyDown, children: [(0, jsx_runtime_1.jsxs)("div", { className: "permission-card__header", children: [(0, jsx_runtime_1.jsx)("div", { className: "permission-card__icon", "aria-hidden": "true", children: "!" }), (0, jsx_runtime_1.jsx)("div", { className: "permission-card__title", children: (0, jsx_runtime_1.jsxs)("div", { className: "permission-card__tool", children: ["Allow this ", (0, jsx_runtime_1.jsx)("code", { children: payload.tool }), "?"] }) })] }), hasCommand && ((0, jsx_runtime_1.jsx)("pre", { className: "permission-card__command", "aria-label": "Command to run", children: (0, jsx_runtime_1.jsx)("code", { children: payload.command }) })), hasParams && ((0, jsx_runtime_1.jsx)("pre", { className: "permission-card__command", "aria-label": "Tool parameters", children: (0, jsx_runtime_1.jsx)("code", { children: payload.paramsPreview }) })), payload.description && payload.description !== `${payload.tool} ${payload.primary}`.trim() && ((0, jsx_runtime_1.jsx)("div", { className: "permission-card__desc", children: payload.description })), payload.risk && ((0, jsx_runtime_1.jsxs)("div", { className: "permission-card__risk", children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__risk-label", children: "Risk" }), (0, jsx_runtime_1.jsx)("span", { children: payload.risk })] })), payload.warning && ((0, jsx_runtime_1.jsxs)("div", { className: "permission-card__warning", role: "alert", children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__warning-icon", "aria-hidden": "true", children: "\u26A0" }), (0, jsx_runtime_1.jsx)("span", { children: payload.warning })] })), hasDiff && ((0, jsx_runtime_1.jsx)(CollapsibleDiff, { preview: payload.bodyPreview, stats: payload.diffStats })), (0, jsx_runtime_1.jsx)("div", { className: "permission-card__choices", role: "radiogroup", "aria-label": "Approval choices", children: CHOICE_ORDER.map((choice) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, clsx_1.default)("permission-card__choice", `permission-card__choice--${choice}`, resolved === choice && "is-selected"), disabled: resolved !== null, onClick: () => pick(choice, choice === "deny" ? notesDraft : undefined), title: CHOICE_LABELS[choice].hint, role: "radio", "aria-checked": resolved === choice, children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__choice-key", "aria-hidden": "true", children: CHOICE_LABELS[choice].key }), (0, jsx_runtime_1.jsx)("span", { className: "permission-card__choice-label", children: CHOICE_LABELS[choice].label })] }, choice))) }), !resolved && ((0, jsx_runtime_1.jsxs)("div", { className: "permission-card__notes", children: [(0, jsx_runtime_1.jsx)("textarea", { className: "permission-card__notes-input", value: notesDraft, onChange: (e) => setNotesDraft(e.target.value), onKeyDown: handleNotesKeyDown, placeholder: "Tell Bandit what to do instead (optional)", rows: 2 }), (0, jsx_runtime_1.jsx)("span", { className: "permission-card__notes-hint", children: "Esc to cancel \u00B7 Cmd+Enter to deny with notes" })] })), resolved && ((0, jsx_runtime_1.jsx)("div", { className: "permission-card__resolved", role: "status", children: resolved === "deny"
97
+ ? (resolvedNotes ? `Denied · "${resolvedNotes}"` : "Denied")
98
+ : resolved === "save" ? "Allowed (saved to .bandit/settings.json)"
99
+ : resolved === "session" ? "Allowed for this session"
100
+ : "Allowed once" }))] }));
101
+ };
102
+ exports.PermissionCard = PermissionCard;
103
+ /**
104
+ * Compact diff viewer: collapsed by default showing a "Modified · +N -M"
105
+ * summary with the first changed line as a preview. Click to expand and
106
+ * see the full diff. Matches the visual language of Claude's
107
+ * write-permission card so users get a consistent, low-noise review
108
+ * surface instead of a 2kb pre/code wall on every permission prompt.
109
+ */
110
+ function CollapsibleDiff({ preview, stats }) {
111
+ const [expanded, setExpanded] = (0, react_1.useState)(false);
112
+ const { added, removed, firstChange } = useDiffSummary(preview, stats);
113
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, clsx_1.default)("permission-card__diff", expanded && "is-expanded"), children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "permission-card__diff-summary", onClick: () => setExpanded(v => !v), "aria-expanded": expanded, "aria-label": expanded ? "Collapse diff" : "Expand diff", children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__diff-label", children: "Modified" }), (added > 0 || removed > 0) && ((0, jsx_runtime_1.jsxs)("span", { className: "permission-card__diff-stats", children: [added > 0 && (0, jsx_runtime_1.jsxs)("span", { className: "permission-card__diff-added", children: ["+", added] }), removed > 0 && (0, jsx_runtime_1.jsxs)("span", { className: "permission-card__diff-removed", children: ["-", removed] })] })), !expanded && firstChange && ((0, jsx_runtime_1.jsx)("span", { className: "permission-card__diff-first-line", title: firstChange, children: firstChange })), (0, jsx_runtime_1.jsx)("span", { className: "permission-card__diff-chevron", "aria-hidden": "true", children: expanded ? "▾" : "▸" })] }), expanded && ((0, jsx_runtime_1.jsx)("pre", { className: "permission-card__preview", children: (0, jsx_runtime_1.jsx)("code", { children: preview }) }))] }));
114
+ }
115
+ /**
116
+ * Parse a diff-like preview (our bodyPreview is produced by the extension
117
+ * with `+` / `-` / ` ` line prefixes) into a headline: +added / -removed
118
+ * and the first changed line (trimmed) for the collapsed view. We cap
119
+ * counts to 999 so an absurd rewrite doesn't overflow the pill.
120
+ */
121
+ function useDiffSummary(preview, stats) {
122
+ if (stats) {
123
+ const firstChange = firstChangedLine(preview);
124
+ return {
125
+ added: Math.min(stats.added, 999),
126
+ removed: Math.min(stats.removed, 999),
127
+ firstChange
128
+ };
129
+ }
130
+ let added = 0;
131
+ let removed = 0;
132
+ for (const line of preview.split(/\r?\n/)) {
133
+ if (line.startsWith("+") && !line.startsWith("+++"))
134
+ added++;
135
+ else if (line.startsWith("-") && !line.startsWith("---"))
136
+ removed++;
137
+ }
138
+ return {
139
+ added: Math.min(added, 999),
140
+ removed: Math.min(removed, 999),
141
+ firstChange: firstChangedLine(preview)
142
+ };
143
+ }
144
+ function firstChangedLine(preview) {
145
+ for (const raw of preview.split(/\r?\n/)) {
146
+ const trimmed = raw.trimEnd();
147
+ if ((trimmed.startsWith("+") && !trimmed.startsWith("+++")) ||
148
+ (trimmed.startsWith("-") && !trimmed.startsWith("---"))) {
149
+ const body = trimmed.slice(1).trim();
150
+ if (body)
151
+ return body.length > 80 ? body.slice(0, 77) + "…" : body;
152
+ }
153
+ }
154
+ return "";
155
+ }
156
+ //# sourceMappingURL=PermissionCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionCard.js","sourceRoot":"","sources":["../../src/components/PermissionCard.tsx"],"names":[],"mappings":";;;;;;;AAAA,iCAA8D;AAC9D,gDAAwB;AA+DxB;;;;;;GAMG;AACH,MAAM,YAAY,GAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7E,MAAM,aAAa,GAA2E;IAC5F,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,2BAA2B,EAAE,GAAG,EAAE,GAAG,EAAE;IAC1E,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,4CAA4C,EAAE,GAAG,EAAE,GAAG,EAAE;IACjG,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,2CAA2C,EAAE,GAAG,EAAE,GAAG,EAAE;IACjG,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,GAAG,EAAE;CAC/D,CAAC;AAEK,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAuB,EAAe,EAAE;IACxF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAA0B,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IAClF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IACpD,sEAAsE;IACtE,mEAAmE;IACnE,qDAAqD;IACrD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,IAAI,GAAG,CAAC,MAAwB,EAAE,KAAc,EAAQ,EAAE;QAC9D,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAC3C,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAsC,EAAQ,EAAE;QACrE,IAAI,QAAQ;YAAE,OAAO;QACrB,yEAAyE;QACzE,iEAAiE;QACjE,+DAA+D;QAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,MAA4B,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAChE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACnE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAChE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,CAA2C,EAAQ,EAAE;QAC/E,mEAAmE;QACnE,iEAAiE;QACjE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,gEAAgE;IAChE,kEAAkE;IAClE,+DAA+D;IAC/D,kEAAkE;IAClE,+DAA+D;IAC/D,oEAAoE;IACpE,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACtH,MAAM,OAAO,GAAG,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9H,OAAO,CACL,iCACE,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,IAAA,cAAI,EAAC,iBAAiB,EAAE,QAAQ,IAAI,aAAa,EAAE,QAAQ,KAAK,MAAM,IAAI,WAAW,CAAC,EACjG,IAAI,EAAC,OAAO,gBACA,yBAAyB,OAAO,CAAC,IAAI,EAAE,EACnD,SAAS,EAAE,aAAa,aAExB,iCAAK,SAAS,EAAC,yBAAyB,aACtC,gCAAK,SAAS,EAAC,uBAAuB,iBAAa,MAAM,kBAAQ,EACjE,gCAAK,SAAS,EAAC,wBAAwB,YACrC,iCAAK,SAAS,EAAC,uBAAuB,4BACzB,2CAAO,OAAO,CAAC,IAAI,GAAQ,SAClC,GACF,IACF,EAEL,UAAU,IAAI,CACb,gCAAK,SAAS,EAAC,0BAA0B,gBAAY,gBAAgB,YACnE,2CAAO,OAAO,CAAC,OAAO,GAAQ,GAC1B,CACP,EACA,SAAS,IAAI,CACZ,gCAAK,SAAS,EAAC,0BAA0B,gBAAY,iBAAiB,YACpE,2CAAO,OAAO,CAAC,aAAa,GAAQ,GAChC,CACP,EAEA,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAC7F,gCAAK,SAAS,EAAC,uBAAuB,YAAE,OAAO,CAAC,WAAW,GAAO,CACnE,EAEA,OAAO,CAAC,IAAI,IAAI,CACf,iCAAK,SAAS,EAAC,uBAAuB,aACpC,iCAAM,SAAS,EAAC,6BAA6B,qBAAY,EACzD,2CAAO,OAAO,CAAC,IAAI,GAAQ,IACvB,CACP,EAEA,OAAO,CAAC,OAAO,IAAI,CAClB,iCAAK,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAC,OAAO,aACpD,iCAAM,SAAS,EAAC,+BAA+B,iBAAa,MAAM,uBAAS,EAC3E,2CAAO,OAAO,CAAC,OAAO,GAAQ,IAC1B,CACP,EAEA,OAAO,IAAI,CACV,uBAAC,eAAe,IAAC,OAAO,EAAE,OAAO,CAAC,WAAY,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,GAAI,CAC7E,EAED,gCAAK,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAC,YAAY,gBAAY,kBAAkB,YACtF,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,oCAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,IAAA,cAAI,EACb,yBAAyB,EACzB,4BAA4B,MAAM,EAAE,EACpC,QAAQ,KAAK,MAAM,IAAI,aAAa,CACrC,EACD,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EACvE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EACjC,IAAI,EAAC,OAAO,kBACE,QAAQ,KAAK,MAAM,aAEjC,iCAAM,SAAS,EAAC,6BAA6B,iBAAa,MAAM,YAC7D,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,GACrB,EACP,iCAAM,SAAS,EAAC,+BAA+B,YAC5C,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,GACvB,KAlBF,MAAM,CAmBJ,CACV,CAAC,GACE,EAEL,CAAC,QAAQ,IAAI,CACZ,iCAAK,SAAS,EAAC,wBAAwB,aACrC,qCACE,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,SAAS,EAAE,kBAAkB,EAC7B,WAAW,EAAC,2CAA2C,EACvD,IAAI,EAAE,CAAC,GACP,EACF,iCAAM,SAAS,EAAC,6BAA6B,kEAEtC,IACH,CACP,EAEA,QAAQ,IAAI,CACX,gCAAK,SAAS,EAAC,2BAA2B,EAAC,IAAI,EAAC,QAAQ,YACrD,QAAQ,KAAK,MAAM;oBAClB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,aAAa,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC5D,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,0CAA0C;wBAClE,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B;4BACrD,CAAC,CAAC,cAAc,GACd,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAlKW,QAAA,cAAc,kBAkKzB;AAEF;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,KAAK,EAIN;IACC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IACzD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvE,OAAO,CACL,iCAAK,SAAS,EAAE,IAAA,cAAI,EAAC,uBAAuB,EAAE,QAAQ,IAAI,aAAa,CAAC,aACtE,oCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBACpB,QAAQ,gBACX,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,aAEtD,iCAAM,SAAS,EAAC,6BAA6B,yBAAgB,EAC5D,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAC7B,kCAAM,SAAS,EAAC,6BAA6B,aAC1C,KAAK,GAAG,CAAC,IAAI,kCAAM,SAAS,EAAC,6BAA6B,kBAAG,KAAK,IAAQ,EAC1E,OAAO,GAAG,CAAC,IAAI,kCAAM,SAAS,EAAC,+BAA+B,kBAAG,OAAO,IAAQ,IAC5E,CACR,EACA,CAAC,QAAQ,IAAI,WAAW,IAAI,CAC3B,iCAAM,SAAS,EAAC,kCAAkC,EAAC,KAAK,EAAE,WAAW,YAClE,WAAW,GACP,CACR,EACD,iCAAM,SAAS,EAAC,+BAA+B,iBAAa,MAAM,YAC/D,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAChB,IACA,EACR,QAAQ,IAAI,CACX,gCAAK,SAAS,EAAC,0BAA0B,YACvC,2CAAO,OAAO,GAAQ,GAClB,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,OAAe,EACf,KAA0C;IAE1C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC;YACrC,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,KAAK,EAAE,CAAC;aACxD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;IACtE,CAAC;IACD,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;QAC/B,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { JSX } from "react";
2
+ import type { AgentEvent } from "@burtson-labs/agent-core";
3
+ type ActivityStatus = "start" | "update" | "complete" | "error" | "needs-revision";
4
+ export interface PlanActivityEntry {
5
+ id: string;
6
+ title: string;
7
+ summary?: string;
8
+ status: ActivityStatus;
9
+ stepId?: string;
10
+ timestamp: number;
11
+ }
12
+ export interface PlanActivityProps {
13
+ events?: AgentEvent[];
14
+ limit?: number;
15
+ className?: string;
16
+ showEmptyState?: boolean;
17
+ }
18
+ export declare const PlanActivity: ({ events, limit, className, showEmptyState }: PlanActivityProps) => JSX.Element | null;
19
+ export {};
20
+ //# sourceMappingURL=PlanActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanActivity.d.ts","sourceRoot":"","sources":["../../src/components/PlanActivity.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,0BAA0B,CAAC;AAU5F,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8LD,eAAO,MAAM,YAAY,GAAI,8CAK1B,iBAAiB,KAAG,GAAG,CAAC,OAAO,GAAG,IAoDpC,CAAC"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlanActivity = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const classNames_1 = require("../utils/classNames");
7
+ const outline_1 = require("@heroicons/react/24/outline");
8
+ const TURN_TOKEN_REGEX = /<\/?\|?(?:im_start|im_end|start_of_turn|end_of_turn)\|?>/gi;
9
+ const stripTurnTokens = (value) => {
10
+ if (!value) {
11
+ return "";
12
+ }
13
+ return value.replace(TURN_TOKEN_REGEX, "").trim();
14
+ };
15
+ const formatSummary = (text) => {
16
+ const cleaned = stripTurnTokens(text);
17
+ return cleaned.length ? cleaned : undefined;
18
+ };
19
+ const mapStatusFromResult = (status) => {
20
+ switch (status) {
21
+ case "failed":
22
+ case "error":
23
+ return "error";
24
+ case "needs-revision":
25
+ case "warn":
26
+ return "needs-revision";
27
+ case "completed":
28
+ case "done":
29
+ return "complete";
30
+ default:
31
+ return "update";
32
+ }
33
+ };
34
+ const getTimelineColor = (status) => {
35
+ switch (status) {
36
+ case "complete":
37
+ return "rgba(123, 228, 149, 0.28)";
38
+ case "error":
39
+ return "rgba(255, 177, 153, 0.28)";
40
+ case "needs-revision":
41
+ return "rgba(255, 216, 130, 0.28)";
42
+ case "start":
43
+ return "rgba(149, 209, 255, 0.24)";
44
+ default:
45
+ return "rgba(149, 209, 255, 0.18)";
46
+ }
47
+ };
48
+ const getStatusLabel = (status) => {
49
+ switch (status) {
50
+ case "start":
51
+ return "In progress";
52
+ case "complete":
53
+ return "Completed";
54
+ case "error":
55
+ return "Blocked";
56
+ case "needs-revision":
57
+ return "Needs attention";
58
+ default:
59
+ return "Update";
60
+ }
61
+ };
62
+ const getStatusIcon = (status) => {
63
+ switch (status) {
64
+ case "start":
65
+ return (0, jsx_runtime_1.jsx)(outline_1.Cog6ToothIcon, {});
66
+ case "complete":
67
+ return (0, jsx_runtime_1.jsx)(outline_1.CheckCircleIcon, {});
68
+ case "error":
69
+ return (0, jsx_runtime_1.jsx)(outline_1.XCircleIcon, {});
70
+ case "needs-revision":
71
+ return (0, jsx_runtime_1.jsx)(outline_1.ExclamationTriangleIcon, {});
72
+ default:
73
+ return (0, jsx_runtime_1.jsx)(outline_1.BoltIcon, {});
74
+ }
75
+ };
76
+ const buildEntries = (events = [], limit = 50) => {
77
+ const entries = [];
78
+ for (const event of events) {
79
+ if (event.type === "plan:start") {
80
+ const payload = event.payload;
81
+ const goal = stripTurnTokens(payload?.goal);
82
+ entries.push({
83
+ id: `${event.type}:${event.timestamp}`,
84
+ title: goal ? `Plan: ${goal}` : "Agent plan started",
85
+ summary: formatSummary(goal) ?? "Preparing execution plan…",
86
+ status: "start",
87
+ timestamp: event.timestamp
88
+ });
89
+ continue;
90
+ }
91
+ if (event.type === "plan:complete") {
92
+ entries.push({
93
+ id: `${event.type}:${event.timestamp}`,
94
+ title: "Plan complete",
95
+ summary: "Steps are ready to execute.",
96
+ status: "complete",
97
+ timestamp: event.timestamp
98
+ });
99
+ continue;
100
+ }
101
+ if (event.type === "plan:chunk") {
102
+ const payload = event.payload;
103
+ if (payload?.chunk) {
104
+ entries.push({
105
+ id: `${event.type}:${event.timestamp}`,
106
+ title: "Planning update",
107
+ summary: payload.chunk,
108
+ status: "update",
109
+ timestamp: event.timestamp
110
+ });
111
+ }
112
+ continue;
113
+ }
114
+ if (event.type === "step:start") {
115
+ const payload = event.payload;
116
+ const title = stripTurnTokens(payload?.step?.title);
117
+ const description = stripTurnTokens(payload?.step?.description);
118
+ entries.push({
119
+ id: `${event.type}:${payload?.step?.id ?? event.timestamp}`,
120
+ title: title || "Executing step",
121
+ summary: formatSummary(description) ?? "Working…",
122
+ status: "update",
123
+ stepId: payload?.step?.id,
124
+ timestamp: event.timestamp
125
+ });
126
+ continue;
127
+ }
128
+ if (event.type === "step:complete") {
129
+ const payload = event.payload;
130
+ const resultStatus = mapStatusFromResult(payload?.result?.status);
131
+ const logs = stripTurnTokens(payload?.result?.logs?.join("\n"));
132
+ const title = stripTurnTokens(payload?.step?.title);
133
+ entries.push({
134
+ id: `${event.type}:${payload?.step?.id ?? event.timestamp}`,
135
+ title: title || "Step complete",
136
+ summary: formatSummary(logs) ?? `Status: ${payload?.result?.status ?? "completed"}`,
137
+ status: resultStatus,
138
+ stepId: payload?.step?.id,
139
+ timestamp: event.timestamp
140
+ });
141
+ continue;
142
+ }
143
+ if (event.type === "diff:apply") {
144
+ const payload = event.payload;
145
+ const diffPreview = payload?.diff
146
+ ?.map((diff) => stripTurnTokens(diff.path))
147
+ .filter(Boolean)
148
+ .join(", ");
149
+ const title = stripTurnTokens(payload?.step?.title);
150
+ entries.push({
151
+ id: `${event.type}:${event.timestamp}`,
152
+ title: title ? `Diff applied • ${title}` : "Diff applied",
153
+ summary: formatSummary(diffPreview) ?? "Changes enqueued for review.",
154
+ status: "update",
155
+ stepId: payload?.step?.id,
156
+ timestamp: event.timestamp
157
+ });
158
+ continue;
159
+ }
160
+ if (event.type === "report:complete") {
161
+ entries.push({
162
+ id: `${event.type}:${event.timestamp}`,
163
+ title: "Report ready",
164
+ summary: "Agent produced a final report.",
165
+ status: "complete",
166
+ timestamp: event.timestamp
167
+ });
168
+ }
169
+ }
170
+ if (limit > 0) {
171
+ return entries.slice(-limit);
172
+ }
173
+ return entries;
174
+ };
175
+ const PlanActivity = ({ events = [], limit = 50, className, showEmptyState = true }) => {
176
+ const entries = (0, react_1.useMemo)(() => buildEntries(events, limit), [events, limit]);
177
+ if (!entries.length) {
178
+ if (!showEmptyState) {
179
+ return null;
180
+ }
181
+ return ((0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)("agent-ui-panel agent-ui-empty-state", className), children: (0, jsx_runtime_1.jsx)("p", { children: "No live steps yet. Start a plan to see instant feedback." }) }));
182
+ }
183
+ return ((0, jsx_runtime_1.jsxs)("section", { className: (0, classNames_1.classNames)("agent-ui-panel agent-ui-plan-activity", className), children: [(0, jsx_runtime_1.jsxs)("header", { className: "agent-ui-panel__header", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "agent-ui-panel__eyebrow", children: "Instant Feedback" }), (0, jsx_runtime_1.jsx)("h3", { className: "agent-ui-panel__title", children: "Live Steps" })] }), (0, jsx_runtime_1.jsxs)("span", { className: "agent-ui-panel__meta", children: [entries.length, " updates"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "plan-activity-host", children: entries.map((entry) => ((0, jsx_runtime_1.jsx)("article", { className: "message assistant plan-activity", children: (0, jsx_runtime_1.jsx)("div", { className: "message-body assistant", children: (0, jsx_runtime_1.jsx)("div", { className: "message-content", children: (0, jsx_runtime_1.jsxs)("div", { className: "plan-activity-row", style: { ["--timeline-color"]: getTimelineColor(entry.status) }, children: [(0, jsx_runtime_1.jsx)("span", { className: (0, classNames_1.classNames)("plan-activity-icon", `plan-activity-${entry.status}`), children: getStatusIcon(entry.status) }), (0, jsx_runtime_1.jsxs)("div", { className: "plan-activity-text", children: [(0, jsx_runtime_1.jsx)("p", { className: "plan-activity-title", children: entry.title }), (0, jsx_runtime_1.jsx)("p", { className: "plan-activity-summary", children: entry.summary ?? getStatusLabel(entry.status) })] })] }) }) }) }, entry.id))) })] }));
184
+ };
185
+ exports.PlanActivity = PlanActivity;
186
+ //# sourceMappingURL=PlanActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanActivity.js","sourceRoot":"","sources":["../../src/components/PlanActivity.tsx"],"names":[],"mappings":";;;;AAAA,iCAAgC;AAGhC,oDAAiD;AACjD,yDAMqC;AAyBrC,MAAM,gBAAgB,GAAG,4DAA4D,CAAC;AAEtF,MAAM,eAAe,GAAG,CAAC,KAAqB,EAAU,EAAE;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAoB,EAAsB,EAAE;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAe,EAAkB,EAAE;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,gBAAgB,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,gBAAgB,CAAC;QAC1B,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAsB,EAAU,EAAE;IAC1D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,2BAA2B,CAAC;QACrC,KAAK,OAAO;YACV,OAAO,2BAA2B,CAAC;QACrC,KAAK,gBAAgB;YACnB,OAAO,2BAA2B,CAAC;QACrC,KAAK,OAAO;YACV,OAAO,2BAA2B,CAAC;QACrC;YACE,OAAO,2BAA2B,CAAC;IACvC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAsB,EAAU,EAAE;IACxD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAsB,EAAe,EAAE;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,uBAAC,uBAAa,KAAG,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,uBAAC,yBAAe,KAAG,CAAC;QAC7B,KAAK,OAAO;YACV,OAAO,uBAAC,qBAAW,KAAG,CAAC;QACzB,KAAK,gBAAgB;YACnB,OAAO,uBAAC,iCAAuB,KAAG,CAAC;QACrC;YACE,OAAO,uBAAC,kBAAQ,KAAG,CAAC;IACxB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAAuB,EAAE,EAAE,KAAK,GAAG,EAAE,EAAuB,EAAE;IAClF,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAwC,CAAC;YAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;gBACtC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB;gBACpD,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,2BAA2B;gBAC3D,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;gBACtC,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,6BAA6B;gBACtC,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAyC,CAAC;YAChE,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;oBACtC,KAAK,EAAE,iBAAiB;oBACxB,OAAO,EAAE,OAAO,CAAC,KAAK;oBACtB,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAA2C,CAAC;YAClE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE;gBAC3D,KAAK,EAAE,KAAK,IAAI,gBAAgB;gBAChC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,UAAU;gBACjD,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACzB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAA0C,CAAC;YACjE,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE;gBAC3D,KAAK,EAAE,KAAK,IAAI,eAAe;gBAC/B,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,WAAW,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE;gBACnF,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACzB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAuE,CAAC;YAC9F,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI;gBAC/B,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1C,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;gBACtC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc;gBACzD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,8BAA8B;gBACrE,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACzB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;gBACtC,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,gCAAgC;gBACzC,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,EAC3B,MAAM,GAAG,EAAE,EACX,KAAK,GAAG,EAAE,EACV,SAAS,EACT,cAAc,GAAG,IAAI,EACH,EAAsB,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CACL,gCAAK,SAAS,EAAE,IAAA,uBAAU,EAAC,qCAAqC,EAAE,SAAS,CAAC,YAC1E,qGAA+D,GAC3D,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,qCAAS,SAAS,EAAE,IAAA,uBAAU,EAAC,uCAAuC,EAAE,SAAS,CAAC,aAChF,oCAAQ,SAAS,EAAC,wBAAwB,aACxC,4CACE,8BAAG,SAAS,EAAC,yBAAyB,iCAAqB,EAC3D,+BAAI,SAAS,EAAC,uBAAuB,2BAAgB,IACjD,EACN,kCAAM,SAAS,EAAC,sBAAsB,aAAE,OAAO,CAAC,MAAM,gBAAgB,IAC/D,EAET,gCAAK,SAAS,EAAC,oBAAoB,YAChC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,oCAAwB,SAAS,EAAC,iCAAiC,YACjE,gCAAK,SAAS,EAAC,wBAAwB,YACrC,gCAAK,SAAS,EAAC,iBAAiB,YAC9B,iCACE,SAAS,EAAC,mBAAmB,EAC7B,KAAK,EAAE,EAAE,CAAC,kBAA4B,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAEzE,iCACE,SAAS,EAAE,IAAA,uBAAU,EAAC,oBAAoB,EAAE,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,YAE3E,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GACvB,EACP,iCAAK,SAAS,EAAC,oBAAoB,aACjC,8BAAG,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,KAAK,GAAK,EACpD,8BAAG,SAAS,EAAC,uBAAuB,YACjC,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAC5C,IACA,IACF,GACF,GACF,IApBM,KAAK,CAAC,EAAE,CAqBZ,CACX,CAAC,GACE,IACE,CACX,CAAC;AACJ,CAAC,CAAC;AAzDW,QAAA,YAAY,gBAyDvB"}
@@ -0,0 +1,13 @@
1
+ import type { JSX, ReactNode } from "react";
2
+ import type { AgentEvent, AgentPlan, AgentStep } from "@burtson-labs/agent-core";
3
+ export interface PlanTreeProps {
4
+ events?: AgentEvent[];
5
+ plan?: AgentPlan | null;
6
+ selectedStepId?: string;
7
+ onSelectStep?: (step: AgentStep) => void;
8
+ emptyState?: ReactNode;
9
+ title?: string;
10
+ className?: string;
11
+ }
12
+ export declare const PlanTree: ({ events, plan: planOverride, selectedStepId, onSelectStep, emptyState, title, className }: PlanTreeProps) => JSX.Element;
13
+ //# sourceMappingURL=PlanTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanTree.d.ts","sourceRoot":"","sources":["../../src/components/PlanTree.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAGlG,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2DD,eAAO,MAAM,QAAQ,GAAI,4FAQtB,aAAa,KAAG,GAAG,CAAC,OAsEtB,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlanTree = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const classNames_1 = require("../utils/classNames");
7
+ const STATUS_LABELS = {
8
+ pending: "Pending",
9
+ in_progress: "In Progress",
10
+ completed: "Completed",
11
+ failed: "Failed"
12
+ };
13
+ const STATUS_CLASS_MAP = {
14
+ pending: "is-pending",
15
+ in_progress: "is-active",
16
+ completed: "is-done",
17
+ failed: "is-error"
18
+ };
19
+ const extractPlanState = (events, explicitPlan) => {
20
+ const planFromEvents = [...events]
21
+ .reverse()
22
+ .find((event) => event.type === "plan:complete" && event.payload?.plan)
23
+ ?.payload;
24
+ const plan = explicitPlan ?? planFromEvents?.plan ?? null;
25
+ if (!plan) {
26
+ return { plan: null, stepStatuses: {} };
27
+ }
28
+ const baseStatuses = {};
29
+ for (const step of plan.steps) {
30
+ baseStatuses[step.id] = step.status ?? "pending";
31
+ }
32
+ for (const event of events) {
33
+ if (event.type === "step:start") {
34
+ const payload = event.payload;
35
+ if (payload?.step?.id) {
36
+ baseStatuses[payload.step.id] = "in_progress";
37
+ }
38
+ continue;
39
+ }
40
+ if (event.type === "step:complete") {
41
+ const payload = event.payload;
42
+ if (payload?.step?.id) {
43
+ baseStatuses[payload.step.id] = payload.result?.status ?? "completed";
44
+ }
45
+ continue;
46
+ }
47
+ if (event.type === "step:error") {
48
+ const payload = event.payload;
49
+ if (payload?.step?.id) {
50
+ baseStatuses[payload.step.id] = "failed";
51
+ }
52
+ }
53
+ }
54
+ return { plan, stepStatuses: baseStatuses };
55
+ };
56
+ const PlanTree = ({ events = [], plan: planOverride, selectedStepId, onSelectStep, emptyState, title = "Execution Plan", className }) => {
57
+ const { plan, stepStatuses } = (0, react_1.useMemo)(() => extractPlanState(events, planOverride ?? undefined), [events, planOverride]);
58
+ if (!plan) {
59
+ return ((0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)("agent-ui-panel agent-ui-empty-state", className), children: emptyState ?? (0, jsx_runtime_1.jsx)("p", { children: "No plan available yet. Trigger planning to populate this view." }) }));
60
+ }
61
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classNames_1.classNames)("agent-ui-panel agent-ui-plan-tree", className), children: [(0, jsx_runtime_1.jsxs)("header", { className: "agent-ui-panel__header", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "agent-ui-panel__eyebrow", children: title }), (0, jsx_runtime_1.jsx)("h3", { className: "agent-ui-panel__title", children: plan.goal }), plan.summary && (0, jsx_runtime_1.jsx)("p", { className: "agent-ui-panel__subtitle", children: plan.summary })] }), (0, jsx_runtime_1.jsxs)("span", { className: "agent-ui-panel__meta", children: [plan.steps.length, " step", plan.steps.length === 1 ? "" : "s"] })] }), (0, jsx_runtime_1.jsx)("ol", { className: "agent-ui-plan-list inline-plan-steps", children: plan.steps.map((step, index) => {
62
+ const status = stepStatuses[step.id] ?? "pending";
63
+ const isSelected = selectedStepId === step.id;
64
+ const command = step.metadata?.command;
65
+ const hasCommand = command !== undefined && command !== null;
66
+ return ((0, jsx_runtime_1.jsxs)("li", { className: (0, classNames_1.classNames)("agent-ui-plan-step", "plan-card-step", STATUS_CLASS_MAP[status], isSelected && "is-selected", onSelectStep && "is-clickable"), onClick: () => onSelectStep?.(step), children: [(0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__rail", "aria-hidden": "true" }), (0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__index plan-card-index", children: index + 1 }), (0, jsx_runtime_1.jsxs)("div", { className: "agent-ui-plan-step__body plan-card-step-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "agent-ui-plan-step__row", children: [(0, jsx_runtime_1.jsx)("p", { className: "agent-ui-plan-step__title plan-card-step-title", children: step.title }), (0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__badge", children: STATUS_LABELS[status] })] }), step.description && ((0, jsx_runtime_1.jsx)("p", { className: "agent-ui-plan-step__description plan-card-step-summary", children: step.description })), hasCommand && ((0, jsx_runtime_1.jsx)("pre", { className: "agent-ui-plan-step__command", children: (0, jsx_runtime_1.jsx)("code", { children: String(command) }) }))] })] }, step.id));
67
+ }) })] }));
68
+ };
69
+ exports.PlanTree = PlanTree;
70
+ //# sourceMappingURL=PlanTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanTree.js","sourceRoot":"","sources":["../../src/components/PlanTree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { JSX } from "react";
2
+ import type { Goal } from "@burtson-labs/agent-core";
3
+ export interface TaskListProps {
4
+ goal: Goal;
5
+ className?: string;
6
+ onCollapse?: () => void;
7
+ }
8
+ export declare const TaskList: ({ goal, className, onCollapse }: TaskListProps) => JSX.Element;
9
+ //# sourceMappingURL=TaskList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,IAAI,EAAoB,MAAM,0BAA0B,CAAC;AAGvE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAgBD,eAAO,MAAM,QAAQ,GAAI,iCAAiC,aAAa,KAAG,GAAG,CAAC,OA2D7E,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskList = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const outline_1 = require("@heroicons/react/24/outline");
6
+ const classNames_1 = require("../utils/classNames");
7
+ const STATUS_LABELS = {
8
+ pending: "Pending",
9
+ in_progress: "In progress",
10
+ completed: "Completed",
11
+ failed: "Failed"
12
+ };
13
+ const STATUS_CLASS_MAP = {
14
+ pending: "is-pending",
15
+ in_progress: "is-active",
16
+ completed: "is-done",
17
+ failed: "is-error"
18
+ };
19
+ const TaskList = ({ goal, className, onCollapse }) => {
20
+ const tasks = goal.tasks ?? [];
21
+ const completed = tasks.filter((task) => task.status === "completed").length;
22
+ const totalLabel = tasks.length > 0 ? `${completed}/${tasks.length} complete` : "No tasks yet";
23
+ return ((0, jsx_runtime_1.jsxs)("section", { className: (0, classNames_1.classNames)("agent-ui-panel agent-ui-task-list", className), children: [(0, jsx_runtime_1.jsxs)("header", { className: "agent-ui-panel__header", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "agent-ui-panel__eyebrow", children: "Goal" }), (0, jsx_runtime_1.jsx)("h3", { className: "agent-ui-panel__title", children: goal.title }), goal.summary && (0, jsx_runtime_1.jsx)("p", { className: "agent-ui-panel__subtitle", children: goal.summary })] }), (0, jsx_runtime_1.jsxs)("div", { className: "agent-ui-panel__meta", children: [totalLabel, onCollapse && ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "collapsible-toggle", onClick: onCollapse, "aria-label": "Collapse task list", children: (0, jsx_runtime_1.jsx)(outline_1.ArrowsPointingInIcon, { "aria-hidden": "true" }) }))] })] }), tasks.length === 0 ? ((0, jsx_runtime_1.jsx)("p", { className: "agent-ui-plan-step__description", children: "The agent has not created any tasks yet." })) : ((0, jsx_runtime_1.jsx)("ol", { className: "agent-ui-plan-list", children: tasks.map((task, index) => ((0, jsx_runtime_1.jsxs)("li", { className: (0, classNames_1.classNames)("agent-ui-plan-step", "plan-card-step", STATUS_CLASS_MAP[task.status]), children: [(0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__rail plan-card-step-rail", "aria-hidden": "true" }), (0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__index plan-card-index", children: index + 1 }), (0, jsx_runtime_1.jsxs)("div", { className: "agent-ui-plan-step__body plan-card-step-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "agent-ui-plan-step__row", children: [(0, jsx_runtime_1.jsx)("p", { className: "agent-ui-plan-step__title plan-card-step-title", children: task.title }), (0, jsx_runtime_1.jsx)("span", { className: "agent-ui-plan-step__badge", children: STATUS_LABELS[task.status] })] }), task.description && ((0, jsx_runtime_1.jsx)("p", { className: "agent-ui-plan-step__description plan-card-step-summary", children: task.description })), task.files && task.files.length > 0 && ((0, jsx_runtime_1.jsxs)("p", { className: "agent-ui-plan-step__description plan-card-step-summary", children: ["Files: ", task.files.join(", ")] }))] })] }, task.id))) }))] }));
24
+ };
25
+ exports.TaskList = TaskList;
26
+ //# sourceMappingURL=TaskList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { JSX } from "react";
2
+ import type { TelemetrySnapshot } from "../types/ui-schema";
3
+ export interface TelemetryPanelProps {
4
+ telemetry: TelemetrySnapshot;
5
+ title?: string;
6
+ className?: string;
7
+ }
8
+ export declare const TelemetryPanel: ({ telemetry, title, className }: TelemetryPanelProps) => JSX.Element;
9
+ //# sourceMappingURL=TelemetryPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryPanel.d.ts","sourceRoot":"","sources":["../../src/components/TelemetryPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,GAAG,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+CD,eAAO,MAAM,cAAc,GAAI,iCAI5B,mBAAmB,KAAG,GAAG,CAAC,OA+E5B,CAAC"}