πŸ“„ File detail

components/messages/UserResourceUpdateMessage.tsx

🧩 .tsxπŸ“ 121 linesπŸ’Ύ 12,363 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œcomponents/”, which covers shared React UI pieces. On the API surface it exposes UserResourceUpdateMessage β€” mainly types, interfaces, or factory objects. Dependencies touch React UI and @anthropic-ai. It composes internal code from constants and ink (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { c as _c } from "react/compiler-runtime"; import type { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'; import * as React from 'react'; import { REFRESH_ARROW } from '../../constants/figures.js'; import { Box, Text } from '../../ink.js';

πŸ“€ Exports (heuristic)

  • UserResourceUpdateMessage

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react
  • @anthropic-ai

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import type { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs';
import * as React from 'react';
import { REFRESH_ARROW } from '../../constants/figures.js';
import { Box, Text } from '../../ink.js';
type Props = {
  addMargin: boolean;
  param: TextBlockParam;
};
type ParsedUpdate = {
  kind: 'resource' | 'polling';
  server: string;
  /** URI for resource updates, tool name for polling updates */
  target: string;
  reason?: string;
};

// Parse resource and polling updates from XML format
function parseUpdates(text: string): ParsedUpdate[] {
  const updates: ParsedUpdate[] = [];

  // Match <mcp-resource-update server="..." uri="...">
  const resourceRegex = /<mcp-resource-update\s+server="([^"]+)"\s+uri="([^"]+)"[^>]*>(?:[\s\S]*?<reason>([^<]+)<\/reason>)?/g;
  let match;
  while ((match = resourceRegex.exec(text)) !== null) {
    updates.push({
      kind: 'resource',
      server: match[1] ?? '',
      target: match[2] ?? '',
      reason: match[3]
    });
  }

  // Match <mcp-polling-update type="tool" server="..." tool="...">
  const pollingRegex = /<mcp-polling-update\s+type="([^"]+)"\s+server="([^"]+)"\s+tool="([^"]+)"[^>]*>(?:[\s\S]*?<reason>([^<]+)<\/reason>)?/g;
  while ((match = pollingRegex.exec(text)) !== null) {
    updates.push({
      kind: 'polling',
      server: match[2] ?? '',
      target: match[3] ?? '',
      reason: match[4]
    });
  }
  return updates;
}

// Format URI for display - show just the meaningful part
function formatUri(uri: string): string {
  // For file:// URIs, show just the filename
  if (uri.startsWith('file://')) {
    const path = uri.slice(7);
    const parts = path.split('/');
    return parts[parts.length - 1] || path;
  }
  // For other URIs, show the whole thing but truncated
  if (uri.length > 40) {
    return uri.slice(0, 39) + '\u2026';
  }
  return uri;
}
export function UserResourceUpdateMessage(t0) {
  const $ = _c(12);
  const {
    addMargin,
    param: t1
  } = t0;
  const {
    text
  } = t1;
  let T0;
  let t2;
  let t3;
  let t4;
  let t5;
  if ($[0] !== addMargin || $[1] !== text) {
    t5 = Symbol.for("react.early_return_sentinel");
    bb0: {
      const updates = parseUpdates(text);
      if (updates.length === 0) {
        t5 = null;
        break bb0;
      }
      T0 = Box;
      t2 = "column";
      t3 = addMargin ? 1 : 0;
      t4 = updates.map(_temp);
    }
    $[0] = addMargin;
    $[1] = text;
    $[2] = T0;
    $[3] = t2;
    $[4] = t3;
    $[5] = t4;
    $[6] = t5;
  } else {
    T0 = $[2];
    t2 = $[3];
    t3 = $[4];
    t4 = $[5];
    t5 = $[6];
  }
  if (t5 !== Symbol.for("react.early_return_sentinel")) {
    return t5;
  }
  let t6;
  if ($[7] !== T0 || $[8] !== t2 || $[9] !== t3 || $[10] !== t4) {
    t6 = <T0 flexDirection={t2} marginTop={t3}>{t4}</T0>;
    $[7] = T0;
    $[8] = t2;
    $[9] = t3;
    $[10] = t4;
    $[11] = t6;
  } else {
    t6 = $[11];
  }
  return t6;
}
function _temp(update, i) {
  return <Box key={i}><Text><Text color="success">{REFRESH_ARROW}</Text>{" "}<Text dimColor={true}>{update.server}:</Text>{" "}<Text color="suggestion">{update.kind === "resource" ? formatUri(update.target) : update.target}</Text>{update.reason && <Text dimColor={true}> Β· {update.reason}</Text>}</Text></Box>;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZXh0QmxvY2tQYXJhbSIsIlJlYWN0IiwiUkVGUkVTSF9BUlJPVyIsIkJveCIsIlRleHQiLCJQcm9wcyIsImFkZE1hcmdpbiIsInBhcmFtIiwiUGFyc2VkVXBkYXRlIiwia2luZCIsInNlcnZlciIsInRhcmdldCIsInJlYXNvbiIsInBhcnNlVXBkYXRlcyIsInRleHQiLCJ1cGRhdGVzIiwicmVzb3VyY2VSZWdleCIsIm1hdGNoIiwiZXhlYyIsInB1c2giLCJwb2xsaW5nUmVnZXgiLCJmb3JtYXRVcmkiLCJ1cmkiLCJzdGFydHNXaXRoIiwicGF0aCIsInNsaWNlIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIlVzZXJSZXNvdXJjZVVwZGF0ZU1lc3NhZ2UiLCJ0MCIsIiQiLCJfYyIsInQxIiwiVDAiLCJ0MiIsInQzIiwidDQiLCJ0NSIsIlN5bWJvbCIsImZvciIsImJiMCIsIm1hcCIsIl90ZW1wIiwidDYiLCJ1cGRhdGUiLCJpIl0sInNvdXJjZXMiOlsiVXNlclJlc291cmNlVXBkYXRlTWVzc2FnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUZXh0QmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJFRlJFU0hfQVJST1cgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZmlndXJlcy5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgYWRkTWFyZ2luOiBib29sZWFuXG4gIHBhcmFtOiBUZXh0QmxvY2tQYXJhbVxufVxuXG50eXBlIFBhcnNlZFVwZGF0ZSA9IHtcbiAga2luZDogJ3Jlc291cmNlJyB8ICdwb2xsaW5nJ1xuICBzZXJ2ZXI6IHN0cmluZ1xuICAvKiogVVJJIGZvciByZXNvdXJjZSB1cGRhdGVzLCB0b29sIG5hbWUgZm9yIHBvbGxpbmcgdXBkYXRlcyAqL1xuICB0YXJnZXQ6IHN0cmluZ1xuICByZWFzb24/OiBzdHJpbmdcbn1cblxuLy8gUGFyc2UgcmVzb3VyY2UgYW5kIHBvbGxpbmcgdXBkYXRlcyBmcm9tIFhNTCBmb3JtYXRcbmZ1bmN0aW9uIHBhcnNlVXBkYXRlcyh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRVcGRhdGVbXSB7XG4gIGNvbnN0IHVwZGF0ZXM6IFBhcnNlZFVwZGF0ZVtdID0gW11cblxuICAvLyBNYXRjaCA8bWNwLXJlc291cmNlLXVwZGF0ZSBzZXJ2ZXI9XCIuLi5cIiB1cmk9XCIuLi5cIj5cbiAgY29uc3QgcmVzb3VyY2VSZWdleCA9XG4gICAgLzxtY3AtcmVzb3VyY2UtdXBkYXRlXFxzK3NlcnZlcj1cIihbXlwiXSspXCJcXHMrdXJpPVwiKFteXCJdKylcIltePl0qPig/OltcXHNcXFNdKj88cmVhc29uPihbXjxdKyk8XFwvcmVhc29uPik/L2dcbiAgbGV0IG1hdGNoXG4gIHdoaWxlICgobWF0Y2ggPSByZXNvdXJjZVJlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgIGtpbmQ6ICdyZXNvdXJjZScsXG4gICAgICBzZXJ2ZXI6IG1hdGNoWzFdID8/ICcnLFxuICAgICAgdGFyZ2V0OiBtYXRjaFsyXSA/PyAnJyxcbiAgICAgIHJlYXNvbjogbWF0Y2hbM10sXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1hdGNoIDxtY3AtcG9sbGluZy11cGRhdGUgdHlwZT1cInRvb2xcIiBzZXJ2ZXI9XCIuLi5cIiB0b29sPVwiLi4uXCI+XG4gIGNvbnN0IHBvbGxpbmdSZWdleCA9XG4gICAgLzxtY3AtcG9sbGluZy11cGRhdGVcXHMrdHlwZT1cIihbXlwiXSspXCJcXHMrc2VydmVyPVwiKFteXCJdKylcIlxccyt0b29sPVwiKFteXCJdKylcIltePl0qPig/OltcXHNcXFNdKj88cmVhc29uPihbXjxdKyk8XFwvcmVhc29uPik/L2dcbiAgd2hpbGUgKChtYXRjaCA9IHBvbGxpbmdSZWdleC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgIHVwZGF0ZXMucHVzaCh7XG4gICAgICBraW5kOiAncG9sbGluZycsXG4gICAgICBzZXJ2ZXI6IG1hdGNoWzJdID8/ICcnLFxuICAgICAgdGFyZ2V0OiBtYXRjaFszXSA/PyAnJyxcbiAgICAgIHJlYXNvbjogbWF0Y2hbNF0sXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVzXG59XG5cbi8vIEZvcm1hdCBVUkkgZm9yIGRpc3BsYXkgLSBzaG93IGp1c3QgdGhlIG1lYW5pbmdmdWwgcGFydFxuZnVuY3Rpb24gZm9ybWF0VXJpKHVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRm9yIGZpbGU6Ly8gVVJJcywgc2hvdyBqdXN0IHRoZSBmaWxlbmFtZVxuICBpZiAodXJpLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgIGNvbnN0IHBhdGggPSB1cmkuc2xpY2UoNylcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKVxuICAgIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCBwYXRoXG4gIH1cbiAgLy8gRm9yIG90aGVyIFVSSXMsIHNob3cgdGhlIHdob2xlIHRoaW5nIGJ1dCB0cnVuY2F0ZWRcbiAgaWYgKHVyaS5sZW5ndGggPiA0MCkge1xuICAgIHJldHVybiB1cmkuc2xpY2UoMCwgMzkpICsgJ1xcdTIwMjYnXG4gIH1cbiAgcmV0dXJuIHVyaVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXNlclJlc291cmNlVXBkYXRlTWVzc2FnZSh7XG4gIGFkZE1hcmdpbixcbiAgcGFyYW06IHsgdGV4dCB9LFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB1cGRhdGVzID0gcGFyc2VVcGRhdGVzKHRleHQpXG4gIGlmICh1cGRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17YWRkTWFyZ2luID8gMSA6IDB9PlxuICAgICAge3VwZGF0ZXMubWFwKCh1cGRhdGUsIGkpID0+IChcbiAgICAgICAgPEJveCBrZXk9e2l9PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJzdWNjZXNzXCI+e1JFRlJFU0hfQVJST1d9PC9UZXh0PnsnICd9XG4gICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57dXBkYXRlLnNlcnZlcn06PC9UZXh0PnsnICd9XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInN1Z2dlc3Rpb25cIj5cbiAgICAgICAgICAgICAge3VwZGF0ZS5raW5kID09PSAncmVzb3VyY2UnXG4gICAgICAgICAgICAgICAgPyBmb3JtYXRVcmkodXBkYXRlLnRhcmdldClcbiAgICAgICAgICAgICAgICA6IHVwZGF0ZS50YXJnZXR9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB7dXBkYXRlLnJlYXNvbiAmJiA8VGV4dCBkaW1Db2xvcj4gwrcge3VwZGF0ZS5yZWFzb259PC9UZXh0Pn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgKSl9XG4gICAgPC9Cb3g+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLGNBQWNBLGNBQWMsUUFBUSx1Q0FBdUM7QUFDM0UsT0FBTyxLQUFLQyxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxhQUFhLFFBQVEsNEJBQTRCO0FBQzFELFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxRQUFRLGNBQWM7QUFFeEMsS0FBS0MsS0FBSyxHQUFHO0VBQ1hDLFNBQVMsRUFBRSxPQUFPO0VBQ2xCQyxLQUFLLEVBQUVQLGNBQWM7QUFDdkIsQ0FBQztBQUVELEtBQUtRLFlBQVksR0FBRztFQUNsQkMsSUFBSSxFQUFFLFVBQVUsR0FBRyxTQUFTO0VBQzVCQyxNQUFNLEVBQUUsTUFBTTtFQUNkO0VBQ0FDLE1BQU0sRUFBRSxNQUFNO0VBQ2RDLE1BQU0sQ0FBQyxFQUFFLE1BQU07QUFDakIsQ0FBQzs7QUFFRDtB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