diff --git a/static/index.html b/static/index.html index 901b42510..7dca24e3c 100644 --- a/static/index.html +++ b/static/index.html @@ -2671,7 +2671,7 @@ - + diff --git a/static/js/chatRenderer.js b/static/js/chatRenderer.js index dceec9b24..99a1081ec 100644 --- a/static/js/chatRenderer.js +++ b/static/js/chatRenderer.js @@ -1941,7 +1941,7 @@ function _activateEntityAnchor(e, forcedAnchor = null) { else { const b = document.getElementById('tasks-btn'); if (b) b.click(); } }).catch(() => { const b = document.getElementById('tasks-btn'); if (b) b.click(); }); } else if (kind === 'skill') { - import('./skills.js?v=20260909kebabconsistency1').then(mod => { + import('./skills.js?v=20261028skillsourceready1').then(mod => { const open = mod.openSkill || (mod.default && mod.default.openSkill); if (open) open(id); }).catch(() => {}); diff --git a/static/js/memory.js b/static/js/memory.js index fe8f7a978..efbc422fc 100644 --- a/static/js/memory.js +++ b/static/js/memory.js @@ -272,7 +272,7 @@ export function openMemoryModal(tabName = 'browse') { if (tab) { tab.click(); } else if (target === 'skills') { - import('./skills.js?v=20260909kebabconsistency1').then(m => { + import('./skills.js?v=20261028skillsourceready1').then(m => { if (m.loadSkills) m.loadSkills(true); else if (m.default?.loadSkills) m.default.loadSkills(true); }); @@ -1613,7 +1613,7 @@ document.addEventListener('DOMContentLoaded', () => { }); // Lazy-load skills tab (cascade=true → play the domino-in entrance) if (target === 'skills') { - import('./skills.js?v=20260909kebabconsistency1').then(m => { if (m.loadSkills) m.loadSkills(true); else if (m.default?.loadSkills) m.default.loadSkills(true); }); + import('./skills.js?v=20261028skillsourceready1').then(m => { if (m.loadSkills) m.loadSkills(true); else if (m.default?.loadSkills) m.default.loadSkills(true); }); } }); }); diff --git a/static/js/skills.js b/static/js/skills.js index 413e68f37..8261b2f41 100644 --- a/static/js/skills.js +++ b/static/js/skills.js @@ -1260,6 +1260,9 @@ async function _expandSkillCard(card, name) { card._md = md || ''; } else { pre.textContent = 'Loading…'; + const editBtn = [...card.querySelectorAll('.skill-card-preview button')] + .find(button => button.textContent.trim() === 'Edit'); + if (editBtn) editBtn.disabled = true; try { const md = await _fetchSkillMarkdown(name); pre.textContent = md || '(empty)'; @@ -1267,6 +1270,8 @@ async function _expandSkillCard(card, name) { card._md = md; } catch (e) { pre.textContent = `Failed to load SKILL.md: ${e.message || 'Unknown error'}`; + } finally { + if (editBtn) editBtn.disabled = !card._mdLoaded; } } } @@ -1275,6 +1280,9 @@ async function _expandSkillCard(card, name) { // Swap the read-only
 for an editable