viberadar 0.3.84 → 0.3.86
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.
- package/dist/scanner/index.d.ts +4 -0
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +27 -7
- package/dist/scanner/index.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +133 -147
- package/dist/server/index.js.map +1 -1
- package/dist/ui/dashboard.html +37 -24
- package/package.json +1 -1
package/dist/ui/dashboard.html
CHANGED
|
@@ -3665,13 +3665,13 @@ function renderDocFeatureCards(c) {
|
|
|
3665
3665
|
const progressPct = f.sourceFileCount > 0 ? Math.round((freshFiles / f.sourceFileCount) * 100) : 0;
|
|
3666
3666
|
const progressColor = !f.docExists ? 'var(--red)' : f.isStale ? 'var(--yellow)' : 'var(--green)';
|
|
3667
3667
|
|
|
3668
|
-
const
|
|
3669
|
-
|
|
3670
|
-
? `<button class="agent-card-btn doc-agent-btn doc-agent-btn-secondary" data-task="${f.isStale ? 'update-docs' : 'generate-docs'}" data-key="${f.key}" style="margin-top:4px">${f.isStale ? 'Обновить содержимое' : 'Заполнить содержимое'}</button>`
|
|
3668
|
+
const versionBadge = f.latestVersion
|
|
3669
|
+
? `<span style="font-size:10px;color:var(--muted);margin-left:6px">v${f.latestVersion}</span>`
|
|
3671
3670
|
: '';
|
|
3671
|
+
const actualizeBtn = `<button class="agent-card-btn doc-agent-btn" data-task="actualize-docs" data-key="${f.key}" style="margin-top:8px">Актуализировать документацию</button>`;
|
|
3672
3672
|
const agentBtn = (f.docExists && !f.isStale)
|
|
3673
|
-
? `<div style="margin-top:8px;font-size:11px;color:var(--green)"
|
|
3674
|
-
:
|
|
3673
|
+
? `<div style="margin-top:8px;font-size:11px;color:var(--green)">✓ Актуальна${versionBadge}</div>${actualizeBtn}`
|
|
3674
|
+
: actualizeBtn;
|
|
3675
3675
|
|
|
3676
3676
|
html += `
|
|
3677
3677
|
<div class="feature-card doc-feature-card" data-key="${f.key}">
|
|
@@ -3784,6 +3784,20 @@ function renderMarkdownToHtml(md) {
|
|
|
3784
3784
|
// Empty line
|
|
3785
3785
|
if (line.trim() === '') continue;
|
|
3786
3786
|
|
|
3787
|
+
// Image line: 
|
|
3788
|
+
const imgMatch = line.trim().match(/^!\[([^\]]*)\]\(([^)]+)\)$/);
|
|
3789
|
+
if (imgMatch) {
|
|
3790
|
+
if (inList) { html += listType === 'ul' ? '</ul>' : '</ol>'; inList = false; }
|
|
3791
|
+
const alt = escapeHtml(imgMatch[1]);
|
|
3792
|
+
let src = imgMatch[2];
|
|
3793
|
+
// Rewrite relative screenshot paths to API endpoint
|
|
3794
|
+
if (src.startsWith('screenshots/') && drillFeatureKey) {
|
|
3795
|
+
src = '/api/docs/screenshot/' + drillFeatureKey + '/' + src;
|
|
3796
|
+
}
|
|
3797
|
+
html += `<div style="margin:12px 0;text-align:center"><img src="${src}" alt="${alt}" style="max-width:100%;border-radius:8px;border:1px solid var(--border)"><div style="font-size:11px;color:var(--muted);margin-top:4px">${alt}</div></div>`;
|
|
3798
|
+
continue;
|
|
3799
|
+
}
|
|
3800
|
+
|
|
3787
3801
|
// Paragraph
|
|
3788
3802
|
if (!inList) {
|
|
3789
3803
|
html += `<p class="doc-p">${inlineFormat(line)}</p>`;
|
|
@@ -3821,29 +3835,28 @@ async function renderDocFeatureDetail(c) {
|
|
|
3821
3835
|
const statusDot = `<span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:${statusColor};margin-right:6px"></span>`;
|
|
3822
3836
|
const lastUpd = f.lastUpdated ? new Date(f.lastUpdated).toLocaleDateString('ru-RU') : '—';
|
|
3823
3837
|
|
|
3824
|
-
//
|
|
3825
|
-
const
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
const
|
|
3838
|
+
// Single action button
|
|
3839
|
+
const detailActualizeLabel = !f.docExists
|
|
3840
|
+
? 'Актуализировать документацию'
|
|
3841
|
+
: f.isStale
|
|
3842
|
+
? `Актуализировать документацию (${f.changedFilesSinceDoc.length} изм. файл.) → v${(f.latestVersion || 0) + 1}`
|
|
3843
|
+
: `Актуализировать документацию → v${(f.latestVersion || 0) + 1}`;
|
|
3844
|
+
const detailActualizeHint = !f.docExists
|
|
3845
|
+
? 'Агент читает все файлы фичи и создаёт v1 пользовательской документации.'
|
|
3846
|
+
: f.isStale
|
|
3847
|
+
? 'Агент читает изменившиеся файлы и создаёт новую версию документации.'
|
|
3848
|
+
: 'Агент перечитывает файлы и создаёт обновлённую версию документации.';
|
|
3849
|
+
const versionsHtml = f.docVersions && f.docVersions.length > 0
|
|
3850
|
+
? `<div style="font-size:11px;color:var(--muted);margin-top:6px">Версии: ${f.docVersions.map((v, i) => `<span style="${i === f.docVersions.length - 1 ? 'color:var(--text)' : ''}">${v.split('/').pop()}</span>`).join(' · ')}</div>`
|
|
3851
|
+
: '';
|
|
3831
3852
|
const detailActionsHtml = `
|
|
3832
3853
|
<div class="doc-detail-actions">
|
|
3833
3854
|
<div class="doc-action-step">
|
|
3834
|
-
<span class="doc-step-num">1</span>
|
|
3835
|
-
<div>
|
|
3836
|
-
<div class="doc-step-label">Актуализировать структуру</div>
|
|
3837
|
-
<div class="doc-step-hint">Создаёт скелет / обновляет список файлов. Не читает содержимое.</div>
|
|
3838
|
-
${detailSyncBtn}
|
|
3839
|
-
</div>
|
|
3840
|
-
</div>
|
|
3841
|
-
<div class="doc-action-step">
|
|
3842
|
-
<span class="doc-step-num">2</span>
|
|
3843
3855
|
<div>
|
|
3844
|
-
<div class="doc-step-label">${
|
|
3845
|
-
<div class="doc-step-hint">${
|
|
3846
|
-
${
|
|
3856
|
+
<div class="doc-step-label">${detailActualizeLabel}</div>
|
|
3857
|
+
<div class="doc-step-hint">${detailActualizeHint}</div>
|
|
3858
|
+
<button class="agent-card-btn doc-detail-agent-btn" data-task="actualize-docs" data-key="${f.key}" style="margin-top:8px">Актуализировать документацию</button>
|
|
3859
|
+
${versionsHtml}
|
|
3847
3860
|
</div>
|
|
3848
3861
|
</div>
|
|
3849
3862
|
</div>`;
|