* feat: Add shimmer text animation for processing state indicators * feat: Redesign CollapsibleContentBlock component with improved UX * feat: Add conditional setting display support with dependsOn field * feat: Add showAgenticTurnStats setting for per-turn statistics * feat: Update ChatMessageAgenticContent with improved UI and new features * feat: Enhance file read tool UI/UX * feat: Refine styling of collapsible content and code preview blocks * feat: add terminal variant to CollapsibleContentBlock * feat: add built-in tools UI registry * feat: extract ChatMessageReasoningBlock and ChatMessageToolCallBlock * refactor: simplify ChatMessageAgenticContent to use extracted blocks * fix: correct markdown content block margin spacing * fix: reorganize SettingsChatFields layout and reset button positioning * fix: use direct map access in agentic store session methods * refactor: remove reasoning preview/throttle system from CollapsibleContentBlock * feat: add auto-scroll to reasoning block and remove showThoughtInProgress * feat: add ChatMessageToolCallDateTime component and support for new tool types * feat: improve auto-scroll reliability in reasoning block with RAF coalescing and MutationObserver * feat: show MCP server favicon for tools without a built-in icon * feat: add search-results parsing utilities and tests * feat: add ChatMessageToolCallSearchResults component * feat: integrate search results rendering into ChatMessageAgenticContent * feat: display tool call input alongside output in ChatMessageToolCallBlock * style: use muted foreground color in reasoning block content * chore: Format * feat: Refine reasoning block layout and make pending thoughts display configurable * feat: Stream tool call code blocks with auto-scroll and handle partial JSON * feat: add streaming permission gate infrastructure * feat: wire permission gate into the agentic loop * fix: bail out on abort and skip already-approved tool calls * fix: clear partial tool calls on abort and savePartialResponse * test: cover partial tool call cleanup end-to-end * refactor: Remove streaming permission gate logic * fix: Correct autoscroll and streaming gates for tool calls and reasoning blocks * refactor: Chat Message Assistant componentization * fix: Show health metadata for disabled MCP servers and promote connections on enable * fix: Inherit global enabled state for missing MCP per-chat overrides * refactor: Cleanup * refactor: Split ChatMessageToolCallBlock into dedicated components * feat: Add live streaming and auto-scroll for tool execution output * feat: Add line numbers and change markers to file edit diffs * chore: Formatting * feat: Add type definitions and utilities for recommended MCP servers * feat: Add recommended MCP servers configuration and storage key * feat: Add McpServerCardCompact component for recommended servers * feat: Add recommended servers section to Add New Server dialog * feat: Update McpServerForm to support authorization requirements * feat: Add select-none classes for text selection prevention * feat: Add recommended MCP server icon assets * refactor: Store dismissed MCP recommendations as a boolean flag * feat: Render tool results as JSON or Markdown based on detected content type * feat: UI improvement * feat: Render search block early and update heading to show execution state * fix: Prevent non-web-search tools from triggering the search UI block * refactor: Cleanup * refactor: Extract hardcoded icon size classes into shared constants * refactor: Extract hardcoded tool result separator into a shared constant * refactor: Tool Calls UI/logic * refactor: Cleanup * refactor: Cleanup * refactor: Cleanup
190 lines
2.9 KiB
TypeScript
190 lines
2.9 KiB
TypeScript
const STD = ['com', 'net', 'org', 'gov', 'edu'] as const;
|
|
|
|
const STD_MIL = [...STD, 'mil'] as const;
|
|
|
|
const ccTLD_PREFIXES: Record<string, readonly string[]> = {
|
|
// --- Standard 5 only ---
|
|
ar: STD,
|
|
bd: STD,
|
|
bg: STD,
|
|
cn: STD_MIL,
|
|
eg: STD,
|
|
gr: STD,
|
|
hk: STD,
|
|
hr: STD,
|
|
lk: STD,
|
|
mx: STD_MIL,
|
|
my: STD_MIL,
|
|
ng: STD,
|
|
ph: STD,
|
|
pk: STD,
|
|
pl: STD,
|
|
ro: STD,
|
|
ru: STD,
|
|
sa: STD,
|
|
si: STD,
|
|
tr: STD,
|
|
tw: STD,
|
|
ua: STD,
|
|
ve: STD,
|
|
|
|
au: [...STD_MIL, 'id', 'asn', 'csiro'],
|
|
br: [
|
|
...STD_MIL,
|
|
'art',
|
|
'eco',
|
|
'eng',
|
|
'inf',
|
|
'med',
|
|
'psi',
|
|
'tmp',
|
|
'etc',
|
|
'adm',
|
|
'adv',
|
|
'arq',
|
|
'bio',
|
|
'bmd',
|
|
'cim',
|
|
'cng',
|
|
'cnt',
|
|
'coop',
|
|
'ecn',
|
|
'esp',
|
|
'far',
|
|
'fm',
|
|
'fnd',
|
|
'fot',
|
|
'fst',
|
|
'g12',
|
|
'ggf',
|
|
'imb',
|
|
'ind',
|
|
'jor',
|
|
'jus',
|
|
'leg',
|
|
'lel',
|
|
'mat',
|
|
'mp',
|
|
'mus',
|
|
'not',
|
|
'ntr',
|
|
'odo',
|
|
'ppg',
|
|
'pro',
|
|
'psc',
|
|
'qsl',
|
|
'rec',
|
|
'slg',
|
|
'srv',
|
|
'trd',
|
|
'tur',
|
|
'tv',
|
|
'vet',
|
|
'vlog',
|
|
'wiki',
|
|
'zlg'
|
|
],
|
|
id: [...STD_MIL, 'co', 'go', 'or', 'web', 'sch'],
|
|
in: [...STD_MIL, 'co', 'gen', 'ind', 'firm', 'ernet', 'nic'],
|
|
kr: [...STD_MIL, 'co', 'go', 'or', 'ac', 're'],
|
|
nz: [
|
|
...STD_MIL,
|
|
'co',
|
|
'gen',
|
|
'geek',
|
|
'kiwi',
|
|
'maori',
|
|
'school',
|
|
'govt',
|
|
'health',
|
|
'iwi',
|
|
'parliament'
|
|
],
|
|
sg: [...STD, 'per'],
|
|
th: ['co', 'go', 'or', 'in', 'ac', 'mi', 'net'],
|
|
|
|
ae: ['co', 'net', 'org', 'gov', 'ac', 'sch'],
|
|
hu: ['co', 'net', 'org', 'gov', 'edu'],
|
|
il: ['co', 'net', 'org', 'gov', 'ac', 'muni'],
|
|
jp: ['ac', 'ad', 'co', 'ed', 'go', 'gr', 'lg', 'ne', 'or'],
|
|
ke: ['co', 'or', 'ne', 'go', 'ac', 'sc'],
|
|
rs: ['co', 'net', 'org', 'gov', 'edu'],
|
|
uk: ['co', 'org', 'net', 'ac', 'gov', 'mil', 'nhs', 'police', 'mod', 'ltd', 'plc', 'me', 'sch'],
|
|
za: ['co', 'org', 'net', 'web', 'law', 'mil']
|
|
};
|
|
|
|
const WILDCARD_BASES: Record<string, readonly string[]> = {
|
|
br: ['nom', 'blog'],
|
|
jp: [
|
|
'kobe',
|
|
'kyoto',
|
|
'nagoya',
|
|
'osaka',
|
|
'sapporo',
|
|
'sendai',
|
|
'tokyo',
|
|
'yokohama',
|
|
'aichi',
|
|
'akita',
|
|
'aomori',
|
|
'chiba',
|
|
'ehime',
|
|
'fukui',
|
|
'fukuoka',
|
|
'fukushima',
|
|
'gifu',
|
|
'gunma',
|
|
'hiroshima',
|
|
'hokkaido',
|
|
'hyogo',
|
|
'ibaraki',
|
|
'ishikawa',
|
|
'iwate',
|
|
'kagawa',
|
|
'kagoshima',
|
|
'kanagawa',
|
|
'kochi',
|
|
'kumamoto',
|
|
'mie',
|
|
'miyagi',
|
|
'miyazaki',
|
|
'nagano',
|
|
'nara',
|
|
'niigata',
|
|
'oita',
|
|
'okayama',
|
|
'okinawa',
|
|
'saga',
|
|
'saitama',
|
|
'shiga',
|
|
'shimane',
|
|
'shizuoka',
|
|
'tochigi',
|
|
'tokushima',
|
|
'tottori',
|
|
'toyama',
|
|
'wakayama',
|
|
'yamagata',
|
|
'yamaguchi',
|
|
'yamanashi'
|
|
]
|
|
};
|
|
|
|
function buildSuffixSet(suffixes: Record<string, readonly string[]>): Set<string> {
|
|
const set = new Set<string>();
|
|
|
|
for (const [tld, parts] of Object.entries(suffixes)) {
|
|
for (const part of parts) {
|
|
set.add(`${part}.${tld}`);
|
|
}
|
|
}
|
|
|
|
return set;
|
|
}
|
|
|
|
export const TWO_PART_PUBLIC_SUFFIXES = buildSuffixSet(ccTLD_PREFIXES);
|
|
export const WILDCARD_PUBLIC_SUFFIXES = buildSuffixSet(WILDCARD_BASES);
|
|
|
|
// Matches one or more trailing "/" characters at the end of a URL/path.
|
|
export const TRAILING_SLASHES_REGEX = /\/+$/;
|