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.
@@ -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 syncBtn = `<button class="agent-card-btn doc-agent-btn" data-task="sync-docs-structure" data-key="${f.key}" style="margin-top:8px" title="Создать скелет / обновить список файлов">Актуализировать структуру</button>`;
3669
- const fillBtn = f.docExists
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)">Документация актуальна</div>${syncBtn}`
3674
- : `<div style="display:flex;flex-direction:column">${syncBtn}${fillBtn}</div>`;
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: ![alt](screenshots/file.png)
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
- // Two-step action buttons
3825
- const detailSyncBtn = `<button class="agent-card-btn doc-detail-agent-btn" data-task="sync-docs-structure" data-key="${f.key}" title="Создать скелет / обновить список файлов фичи">Актуализировать структуру</button>`;
3826
- const detailFillTask = f.isStale ? 'update-docs' : 'generate-docs';
3827
- const detailFillLabel = f.isStale
3828
- ? `Обновить содержимое (${f.changedFilesSinceDoc.length} изм. файл.)`
3829
- : 'Заполнить содержимое';
3830
- const detailFillBtn = `<button class="agent-card-btn doc-detail-agent-btn doc-fill-btn" data-task="${detailFillTask}" data-key="${f.key}">${detailFillLabel}</button>`;
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">${f.isStale ? 'Обновить содержимое' : 'Заполнить содержимое'}</div>
3845
- <div class="doc-step-hint">${f.isStale ? 'Агент читает изменившиеся файлы и обновляет доку.' : 'Агент читает файлы и заполняет все секции.'}</div>
3846
- ${detailFillBtn}
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>`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viberadar",
3
- "version": "0.3.84",
3
+ "version": "0.3.86",
4
4
  "description": "Live module map with test coverage for vibecoding projects",
5
5
  "main": "./dist/cli.js",
6
6
  "bin": {