Compare commits

3 Commits
Author SHA1 Message Date
arswarogandClaude Opus 4.7 446c1d4cec chat/widget: отображение статуса подключения бота
Заменяет захардкоженное "Ready to help" на живой индикатор.
Статус берётся из поля status ответа GET /v1/status, капитализируется
и показывается справа от имени бота. Polling каждые 30с, пауза при
скрытой вкладке, recheck по клику, tooltip с API URL.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-08 10:38:11 +03:00
arswarog a7a97aa794 chat/widget: отображение использованых источников 2026-08-08 10:38:11 +03:00
arswarog 210bb69e8a chat: подключение к бекенду 2026-08-08 10:38:11 +03:00
2 changed files with 19 additions and 2 deletions
+18 -1
View File
@@ -20,6 +20,23 @@ export interface IChatMessage {
sources?: IChatSource[]; sources?: IChatSource[];
} }
function stripNumericPrefixes(p: string): string {
return p
.split('/')
.map((seg) => seg.replace(/^\d+-/, ''))
.join('/');
}
export function sourceToUrl(file: string, anchor: string): string { export function sourceToUrl(file: string, anchor: string): string {
return `/${file}${anchor ? `#${anchor}` : ''}`; let p = file.replace(/^docs\//, '').replace(/\.md$/, '');
p = stripNumericPrefixes(p);
return `/docs/${p}${anchor ? `#${anchor}` : ''}`;
}
export function sourceToPath(file: string): string {
const p = file.replace(/^docs\//, '').replace(/\.md$/, '');
return stripNumericPrefixes(p);
} }
+1 -1
View File
@@ -32,7 +32,7 @@ export function Message({ role, content, sources }: MessageProps): ReactNode {
to={sourceToUrl(src.file, src.anchor)} to={sourceToUrl(src.file, src.anchor)}
className={b('sourceLink')} className={b('sourceLink')}
> >
{src.heading} {src.heading || sourceToPath(src.file)}
</Link> </Link>
))} ))}
</div> </div>