source dump of claude code
at main 121 lines 12 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import type { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'; 3import * as React from 'react'; 4import { REFRESH_ARROW } from '../../constants/figures.js'; 5import { Box, Text } from '../../ink.js'; 6type Props = { 7 addMargin: boolean; 8 param: TextBlockParam; 9}; 10type ParsedUpdate = { 11 kind: 'resource' | 'polling'; 12 server: string; 13 /** URI for resource updates, tool name for polling updates */ 14 target: string; 15 reason?: string; 16}; 17 18// Parse resource and polling updates from XML format 19function parseUpdates(text: string): ParsedUpdate[] { 20 const updates: ParsedUpdate[] = []; 21 22 // Match <mcp-resource-update server="..." uri="..."> 23 const resourceRegex = /<mcp-resource-update\s+server="([^"]+)"\s+uri="([^"]+)"[^>]*>(?:[\s\S]*?<reason>([^<]+)<\/reason>)?/g; 24 let match; 25 while ((match = resourceRegex.exec(text)) !== null) { 26 updates.push({ 27 kind: 'resource', 28 server: match[1] ?? '', 29 target: match[2] ?? '', 30 reason: match[3] 31 }); 32 } 33 34 // Match <mcp-polling-update type="tool" server="..." tool="..."> 35 const pollingRegex = /<mcp-polling-update\s+type="([^"]+)"\s+server="([^"]+)"\s+tool="([^"]+)"[^>]*>(?:[\s\S]*?<reason>([^<]+)<\/reason>)?/g; 36 while ((match = pollingRegex.exec(text)) !== null) { 37 updates.push({ 38 kind: 'polling', 39 server: match[2] ?? '', 40 target: match[3] ?? '', 41 reason: match[4] 42 }); 43 } 44 return updates; 45} 46 47// Format URI for display - show just the meaningful part 48function formatUri(uri: string): string { 49 // For file:// URIs, show just the filename 50 if (uri.startsWith('file://')) { 51 const path = uri.slice(7); 52 const parts = path.split('/'); 53 return parts[parts.length - 1] || path; 54 } 55 // For other URIs, show the whole thing but truncated 56 if (uri.length > 40) { 57 return uri.slice(0, 39) + '\u2026'; 58 } 59 return uri; 60} 61export function UserResourceUpdateMessage(t0) { 62 const $ = _c(12); 63 const { 64 addMargin, 65 param: t1 66 } = t0; 67 const { 68 text 69 } = t1; 70 let T0; 71 let t2; 72 let t3; 73 let t4; 74 let t5; 75 if ($[0] !== addMargin || $[1] !== text) { 76 t5 = Symbol.for("react.early_return_sentinel"); 77 bb0: { 78 const updates = parseUpdates(text); 79 if (updates.length === 0) { 80 t5 = null; 81 break bb0; 82 } 83 T0 = Box; 84 t2 = "column"; 85 t3 = addMargin ? 1 : 0; 86 t4 = updates.map(_temp); 87 } 88 $[0] = addMargin; 89 $[1] = text; 90 $[2] = T0; 91 $[3] = t2; 92 $[4] = t3; 93 $[5] = t4; 94 $[6] = t5; 95 } else { 96 T0 = $[2]; 97 t2 = $[3]; 98 t3 = $[4]; 99 t4 = $[5]; 100 t5 = $[6]; 101 } 102 if (t5 !== Symbol.for("react.early_return_sentinel")) { 103 return t5; 104 } 105 let t6; 106 if ($[7] !== T0 || $[8] !== t2 || $[9] !== t3 || $[10] !== t4) { 107 t6 = <T0 flexDirection={t2} marginTop={t3}>{t4}</T0>; 108 $[7] = T0; 109 $[8] = t2; 110 $[9] = t3; 111 $[10] = t4; 112 $[11] = t6; 113 } else { 114 t6 = $[11]; 115 } 116 return t6; 117} 118function _temp(update, i) { 119 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>; 120} 121//# 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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