@geminixiang/mikan 1.0.0-beta.92 → 1.0.0-beta.94
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/CHANGELOG.md +19 -0
- package/dist/adapters/discord/bot.d.ts +2 -2
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +9 -3
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +2 -2
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +4 -3
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/shared.d.ts +0 -2
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +1 -17
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +2 -2
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +13 -22
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts.map +1 -1
- package/dist/adapters/slack/jev-context.js +3 -17
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +4 -9
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +2 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +9 -3
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/types.d.ts +4 -4
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -1
- package/dist/adapters/web/admin/client-assets.js +106 -18
- package/dist/adapters/web/admin/client-assets.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +0 -7
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +98 -66
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/harness/execution-resolver.d.ts.map +1 -1
- package/dist/harness/execution-resolver.js +1 -2
- package/dist/harness/execution-resolver.js.map +1 -1
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +5 -26
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -3
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +4 -38
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +14 -41
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +2 -9
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills.d.ts +11 -2
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +84 -25
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/tools/attach.d.ts +3 -0
- package/dist/harness/tools/attach.d.ts.map +1 -1
- package/dist/harness/tools/attach.js +36 -1
- package/dist/harness/tools/attach.js.map +1 -1
- package/dist/harness/tools/index.d.ts +3 -19
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +22 -11
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/types.d.ts +9 -1
- package/dist/harness/tools/types.d.ts.map +1 -1
- package/dist/harness/tools/types.js.map +1 -1
- package/dist/harness/types.d.ts +7 -14
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/office/log.d.ts +14 -0
- package/dist/office/log.d.ts.map +1 -0
- package/dist/office/log.js +46 -0
- package/dist/office/log.js.map +1 -0
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +17 -12
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +1 -0
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +1 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/registry.d.ts +1 -1
- package/dist/sandbox/registry.d.ts.map +1 -1
- package/dist/sandbox/registry.js +1 -1
- package/dist/sandbox/registry.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +48 -46
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/session-store.d.ts +2 -17
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +44 -34
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/types.d.ts +20 -1
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/index.d.ts +3 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +14 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -749,45 +749,112 @@ export const adminViewFunctionsScript = ` let activeConversationKey = default
|
|
|
749
749
|
});
|
|
750
750
|
|
|
751
751
|
let skillsCache = [];
|
|
752
|
+
let skillsPrompt = null;
|
|
752
753
|
|
|
753
|
-
function
|
|
754
|
+
function skillGroup(directory) {
|
|
755
|
+
const slash = directory.lastIndexOf('/');
|
|
756
|
+
return slash < 0 ? '' : directory.slice(0, slash);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
function skillCheckbox(s, scope) {
|
|
760
|
+
if (scope === 'global') return s.globalEnabled ? '[x]' : '[ ]';
|
|
761
|
+
if (s.conversationRule === '+') return '[+]';
|
|
762
|
+
if (s.conversationRule === '-') return '[-]';
|
|
763
|
+
return s.enabled ? '[x]' : '[ ]';
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
function skillSuffix(s, scope) {
|
|
767
|
+
if (scope === 'global') return s.globalRule === '!' ? 'excluded by pattern' : '';
|
|
768
|
+
if (s.conversationRule === '+') return 'conversation load';
|
|
769
|
+
if (s.conversationRule === '-') return 'conversation unload';
|
|
770
|
+
if (s.conversationRule === '!') return 'excluded by pattern';
|
|
771
|
+
return s.source === 'global' ? 'inherited global' : '';
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
function nextSkillState(s, scope) {
|
|
775
|
+
if (scope === 'global') return s.globalEnabled ? 'unload' : 'load';
|
|
776
|
+
if (s.conversationRule === '+') return 'unload';
|
|
777
|
+
if (s.conversationRule === '-') return 'inherit';
|
|
778
|
+
return 'load';
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
function renderSkillsInto(containerId, skills, scope) {
|
|
754
782
|
const container = document.getElementById(containerId);
|
|
755
783
|
if (!container) return;
|
|
756
|
-
const
|
|
784
|
+
const filterEl = document.getElementById(scope === 'global' ? 'global-skills-filter' : 'skills-filter');
|
|
785
|
+
const query = filterEl ? filterEl.value.trim().toLowerCase() : '';
|
|
786
|
+
const scoped = scope === 'global' ? skills.filter((s) => s.source === 'global') : skills;
|
|
787
|
+
const filtered = query
|
|
788
|
+
? scoped.filter((s) => (s.name + ' ' + s.directory + ' ' + s.description).toLowerCase().includes(query))
|
|
789
|
+
: scoped;
|
|
790
|
+
const summaryEl = document.getElementById(scope === 'global' ? 'global-skills-summary' : 'skills-summary');
|
|
791
|
+
if (summaryEl) {
|
|
792
|
+
summaryEl.textContent = scope === 'global'
|
|
793
|
+
? 'Enabled globally: ' + scoped.filter((s) => s.globalEnabled).length + ' / ' + scoped.length
|
|
794
|
+
: skillsPrompt ? 'In prompt: ' + skillsPrompt.listed + ' / ' + skillsPrompt.total + ' skills · ' + skillsPrompt.chars.toLocaleString() + ' chars' : '';
|
|
795
|
+
}
|
|
757
796
|
if (filtered.length === 0) {
|
|
758
797
|
container.innerHTML = '<div class="empty-state">No skills available</div>';
|
|
759
798
|
return;
|
|
760
799
|
}
|
|
800
|
+
const groups = new Map();
|
|
801
|
+
for (const s of filtered) {
|
|
802
|
+
const key = (s.source === 'conversation' ? 'conversation:' : '') + skillGroup(s.directory);
|
|
803
|
+
groups.set(key, [...(groups.get(key) || []), s]);
|
|
804
|
+
}
|
|
761
805
|
container.innerHTML = '<div class="skills-list">' +
|
|
762
|
-
|
|
763
|
-
'<div class="skill-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
'
|
|
768
|
-
|
|
769
|
-
'<button class="
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
806
|
+
[...groups.entries()].sort((a, b) => a[0].localeCompare(b[0])).map(([key, items]) =>
|
|
807
|
+
'<div class="skill-group">' + escHtml(key.startsWith('conversation:') ? 'This conversation' + (key.length > 13 ? ' · ' + key.slice(13) : '') : key || 'skills/') + '</div>' +
|
|
808
|
+
items.map((s) => {
|
|
809
|
+
const suffix = skillSuffix(s, scope);
|
|
810
|
+
const dimmed = scope === 'conversation' && s.source === 'global' && !s.conversationRule;
|
|
811
|
+
return '<div class="skill-row' + (dimmed ? ' skill-row-dim' : '') + '">' +
|
|
812
|
+
'<button class="skill-toggle" title="' + (scope === 'global' ? 'Toggle for every conversation' : 'Cycle inherit / + / -') + '" data-skill-toggle-scope="' + scope + '" data-skill-toggle-source="' + escAttr(s.source) + '" data-skill-toggle-directory="' + escAttr(s.directory) + '" data-skill-toggle-state="' + nextSkillState(s, scope) + '">' + skillCheckbox(s, scope) + '</button>' +
|
|
813
|
+
'<button class="skill-row-btn" data-skill-source="' + escAttr(s.source) + '" data-skill-directory="' + escAttr(s.directory) + '" data-skill-name="' + escAttr(s.name) + '">' +
|
|
814
|
+
'<div class="skill-name">' + escHtml(s.name) + '<span class="skill-source skill-source-' + s.source + '">' + s.source + '</span>' + (suffix ? '<span class="skill-state">' + escHtml(suffix) + '</span>' : '') + '</div>' +
|
|
815
|
+
(s.description ? '<div class="skill-desc">' + escHtml(s.description) + '</div>' : '') +
|
|
816
|
+
'</button>' +
|
|
817
|
+
(s.editable ?
|
|
818
|
+
'<div class="skill-row-actions">' +
|
|
819
|
+
'<button class="mcp-btn" data-skill-edit-source="' + escAttr(s.source) + '" data-skill-edit-directory="' + escAttr(s.directory) + '">Edit</button>' +
|
|
820
|
+
'<button class="mcp-btn mcp-btn-danger" data-skill-delete-source="' + escAttr(s.source) + '" data-skill-delete-directory="' + escAttr(s.directory) + '" data-skill-delete-name="' + escAttr(s.name) + '">Delete</button>' +
|
|
821
|
+
'</div>' : '') +
|
|
822
|
+
'</div>';
|
|
823
|
+
}).join('')
|
|
773
824
|
).join('') + '</div>';
|
|
774
825
|
}
|
|
775
826
|
|
|
827
|
+
function renderAllSkills() {
|
|
828
|
+
renderSkillsInto('skills-content', skillsCache, 'conversation');
|
|
829
|
+
renderSkillsInto('global-skills-content', skillsCache, 'global');
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
function applySkillsData(data) {
|
|
833
|
+
skillsCache = Array.isArray(data.skills) ? data.skills : [];
|
|
834
|
+
skillsPrompt = data.prompt || null;
|
|
835
|
+
renderAllSkills();
|
|
836
|
+
}
|
|
837
|
+
|
|
776
838
|
async function loadSkills() {
|
|
777
839
|
const container = document.getElementById('skills-content');
|
|
778
840
|
const previewEl = document.getElementById('skills-preview');
|
|
779
841
|
container.innerHTML = '<div class="loading-msg">Loading…</div>';
|
|
780
842
|
if (previewEl) previewEl.innerHTML = '<div class="placeholder-msg">Click a skill to preview SKILL.md</div>';
|
|
781
843
|
try {
|
|
782
|
-
|
|
783
|
-
skillsCache = Array.isArray(data.skills) ? data.skills : [];
|
|
784
|
-
renderSkillsInto('skills-content', skillsCache);
|
|
785
|
-
renderSkillsInto('global-skills-content', skillsCache, 'global');
|
|
844
|
+
applySkillsData(await apiGet('/admin/api/skills?' + scopeQuery()));
|
|
786
845
|
} catch (err) {
|
|
787
846
|
container.innerHTML = '<div class="err-msg">' + escHtml(err.message) + '</div>';
|
|
788
847
|
}
|
|
789
848
|
}
|
|
790
849
|
|
|
850
|
+
async function toggleSkill(scope, source, directory, state) {
|
|
851
|
+
try {
|
|
852
|
+
applySkillsData(await apiPost('/admin/api/skills/toggle', { scope: scope, source: source, directory: directory, state: state, ...scopeBody() }));
|
|
853
|
+
} catch (err) {
|
|
854
|
+
alert(err.message);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
|
|
791
858
|
const loadGlobalSkills = loadSkills;
|
|
792
859
|
|
|
793
860
|
async function previewSkillInto(previewId, source, directory, name) {
|
|
@@ -820,6 +887,11 @@ export const adminViewFunctionsScript = ` let activeConversationKey = default
|
|
|
820
887
|
const el = document.getElementById(containerId);
|
|
821
888
|
if (!el) return;
|
|
822
889
|
el.addEventListener('click', (event) => {
|
|
890
|
+
const toggleBtn = event.target.closest('[data-skill-toggle-scope]');
|
|
891
|
+
if (toggleBtn) {
|
|
892
|
+
void toggleSkill(toggleBtn.dataset.skillToggleScope, toggleBtn.dataset.skillToggleSource, toggleBtn.dataset.skillToggleDirectory, toggleBtn.dataset.skillToggleState);
|
|
893
|
+
return;
|
|
894
|
+
}
|
|
823
895
|
const previewBtn = event.target.closest('[data-skill-source]');
|
|
824
896
|
if (previewBtn) {
|
|
825
897
|
previewSkillInto(previewId, previewBtn.dataset.skillSource, previewBtn.dataset.skillDirectory, previewBtn.dataset.skillName);
|
|
@@ -1422,8 +1494,24 @@ export const adminViewStyles = `
|
|
|
1422
1494
|
.skill-row {
|
|
1423
1495
|
padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px;
|
|
1424
1496
|
background: rgba(0,0,0,0.02);
|
|
1425
|
-
display: flex; flex-direction:
|
|
1497
|
+
display: flex; flex-direction: row; align-items: flex-start; gap: 10px;
|
|
1498
|
+
}
|
|
1499
|
+
.skill-row-dim { opacity: 0.6; }
|
|
1500
|
+
.skill-toggle {
|
|
1501
|
+
flex-shrink: 0; cursor: pointer; border: none; background: transparent; padding: 0;
|
|
1502
|
+
font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.85rem; color: var(--text);
|
|
1503
|
+
}
|
|
1504
|
+
.skill-group {
|
|
1505
|
+
margin-top: 8px; font-family: 'JetBrains Mono', ui-monospace, monospace;
|
|
1506
|
+
font-size: 0.75rem; color: var(--subtle);
|
|
1507
|
+
}
|
|
1508
|
+
.skill-state { font-size: 0.72rem; font-weight: 500; color: var(--subtle); }
|
|
1509
|
+
.skills-toolbar { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
|
|
1510
|
+
.skills-filter {
|
|
1511
|
+
flex: 0 1 260px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 8px;
|
|
1512
|
+
background: var(--card); font-size: 0.82rem; color: var(--text);
|
|
1426
1513
|
}
|
|
1514
|
+
.skills-summary { font-size: 0.8rem; color: var(--muted); }
|
|
1427
1515
|
.skill-row-btn {
|
|
1428
1516
|
flex: 1 1 auto; min-width: 0; text-align: left; cursor: pointer; font-family: inherit;
|
|
1429
1517
|
background: transparent; border: none; padding: 0;
|