claude-mission-control 1.20.0 → 1.21.0
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/package.json +1 -1
- package/public/index.html +84 -2
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -950,6 +950,34 @@
|
|
|
950
950
|
#palette-list li.sel .pl { color: var(--accent); }
|
|
951
951
|
#palette-empty { color: var(--faint); font-size: 12px; padding: 12px 16px; }
|
|
952
952
|
|
|
953
|
+
/* ---------- first-run guide ---------- */
|
|
954
|
+
#guide {
|
|
955
|
+
background: var(--surface); border: 1px solid var(--line); border-radius: 10px;
|
|
956
|
+
padding: 16px 18px 14px; margin-bottom: 22px;
|
|
957
|
+
}
|
|
958
|
+
#guide .g-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 12px; }
|
|
959
|
+
#guide .g-head h2 { font-size: 14px; font-weight: 600; }
|
|
960
|
+
#guide .g-head .g-sub { color: var(--faint); font-size: 12.5px; }
|
|
961
|
+
#guide .g-head .spacer { flex: 1; }
|
|
962
|
+
#guide .g-done {
|
|
963
|
+
font: 500 12.5px var(--ui-font); color: var(--amber-ink); background: var(--accent);
|
|
964
|
+
border: none; border-radius: 6px; padding: 5px 12px; cursor: pointer;
|
|
965
|
+
}
|
|
966
|
+
#guide .g-done:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
|
|
967
|
+
#guide .g-grid { display: grid; gap: 12px 24px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
|
|
968
|
+
#guide .g-item { font-size: 13px; color: var(--muted); line-height: 1.5; }
|
|
969
|
+
#guide .g-item b { display: block; color: var(--ink); font-weight: 600; margin-bottom: 4px; }
|
|
970
|
+
#guide .g-lamps { gap: 6px; }
|
|
971
|
+
#guide .g-lamps li { align-items: flex-start; }
|
|
972
|
+
#guide .g-lamps .flap { flex: none; min-width: 84px; justify-content: center; }
|
|
973
|
+
#guide kbd {
|
|
974
|
+
font-size: 11.5px; color: var(--ink); background: var(--surface2);
|
|
975
|
+
border: 1px solid var(--line); border-bottom-width: 2px; border-radius: 4px; padding: 0 5px;
|
|
976
|
+
}
|
|
977
|
+
#guide .g-icons { list-style: none; padding: 0; margin: 0; display: grid; gap: 3px; }
|
|
978
|
+
#guide .g-icons li { display: flex; align-items: center; gap: 8px; }
|
|
979
|
+
#guide .g-icons svg { flex: none; color: var(--ink); }
|
|
980
|
+
|
|
953
981
|
/* welcome card for fresh installs */
|
|
954
982
|
#welcome {
|
|
955
983
|
grid-column: 1 / -1; background: var(--surface); border: 1px solid var(--line);
|
|
@@ -976,7 +1004,7 @@
|
|
|
976
1004
|
header .spacer, #open-pref-wrap { display: none; } /* opening terminals is a desk thing; still in settings */
|
|
977
1005
|
#quota { order: 10; flex: 1 1 100%; flex-wrap: wrap; gap: 8px 14px; }
|
|
978
1006
|
.meter .bar { width: 52px; }
|
|
979
|
-
#live { padding: 12px 16px; }
|
|
1007
|
+
#live { padding: 12px 16px; position: static; } /* a sticky rail would cover most of a phone screen */
|
|
980
1008
|
main { padding: 14px 16px; }
|
|
981
1009
|
.dep-row { grid-template-columns: 1fr; padding: 10px 12px; }
|
|
982
1010
|
.dep-proj { font-size: 15px; }
|
|
@@ -1031,6 +1059,7 @@
|
|
|
1031
1059
|
|
|
1032
1060
|
<section id="live"></section>
|
|
1033
1061
|
<main>
|
|
1062
|
+
<section id="guide" hidden aria-label="How to read this board"></section>
|
|
1034
1063
|
<div id="pinned" hidden></div>
|
|
1035
1064
|
<div id="git-attn" hidden></div>
|
|
1036
1065
|
<details id="digest" open>
|
|
@@ -1623,7 +1652,7 @@ function render(state) {
|
|
|
1623
1652
|
: `<div id="welcome">
|
|
1624
1653
|
<h2><span class="tilde">❯</span> Welcome to Claude Mission Control</h2>
|
|
1625
1654
|
<p>No Claude Code projects found yet. Run <code>claude</code> in any folder and it appears here automatically — live status, transcripts, git state, costs, the lot.</p>
|
|
1626
|
-
<p>Tip: press <code>⌘K</code> to jump anywhere, <code>/</code> to search, and
|
|
1655
|
+
<p>Tip: press <code>⌘K</code> to jump anywhere, <code>/</code> to search, and <code>?</code> for a quick guide.</p>
|
|
1627
1656
|
</div>`);
|
|
1628
1657
|
const d = $('#dormant');
|
|
1629
1658
|
d.hidden = dormant.length === 0;
|
|
@@ -3761,6 +3790,7 @@ function paletteItems(q) {
|
|
|
3761
3790
|
const items = [];
|
|
3762
3791
|
const st = lastState || { projects: [], liveSessions: [] };
|
|
3763
3792
|
items.push({ k: '⚙', label: 'Settings', hint: 'rename, hide, terminal, notifications', run: openSettings });
|
|
3793
|
+
items.push({ k: '?', label: 'Show the guide', hint: 'what the lamps, rows and buttons do', run: () => { showGuide(true, true); window.scrollTo({ top: 0 }); } });
|
|
3764
3794
|
items.push({ k: '▦', label: 'Mission Control', hint: 'every live session at once', run: openMissionControl });
|
|
3765
3795
|
items.push({ k: '⬢', label: 'Hive', hint: 'live sessions as characters · who is winning', run: openHive });
|
|
3766
3796
|
items.push({ k: '★', label: 'Hall of Fame', hint: 'your best sessions by award · share cards', run: () => openFame() });
|
|
@@ -3864,6 +3894,58 @@ document.addEventListener('keydown', (e) => {
|
|
|
3864
3894
|
}
|
|
3865
3895
|
});
|
|
3866
3896
|
|
|
3897
|
+
// ---------- first-run guide: shown until dismissed, back with ? or the palette ----------
|
|
3898
|
+
const isMac = /Mac|iPhone|iPad/.test(navigator.platform || navigator.userAgent);
|
|
3899
|
+
function guideSeen() { try { return localStorage.getItem('guideSeen') === '1'; } catch { return true; } }
|
|
3900
|
+
function renderGuide() {
|
|
3901
|
+
const icon = (id) => $(`#${id} svg`)?.outerHTML || '';
|
|
3902
|
+
const mod = isMac ? '⌘' : 'Ctrl';
|
|
3903
|
+
return `<div class="g-head">
|
|
3904
|
+
<h2>How to read this board</h2>
|
|
3905
|
+
<span class="g-sub">Press <kbd>?</kbd> to bring this back.</span>
|
|
3906
|
+
<span class="spacer"></span>
|
|
3907
|
+
<button class="g-done" id="guide-done">Got it</button>
|
|
3908
|
+
</div>
|
|
3909
|
+
<div class="g-grid">
|
|
3910
|
+
<div class="g-item"><b>Status lamps</b>
|
|
3911
|
+
<ul class="g-icons g-lamps">
|
|
3912
|
+
<li><span class="flap st st-waiting">needs you</span> Claude is waiting on you. What it's asking shows under the title.</li>
|
|
3913
|
+
<li><span class="flap st st-busy">busy</span> Claude is working.</li>
|
|
3914
|
+
</ul></div>
|
|
3915
|
+
<div class="g-item"><b>Sessions</b>
|
|
3916
|
+
Click a session title to read its transcript, live if it's running. Hover a row to rename it, open it in your terminal, or copy its resume command.</div>
|
|
3917
|
+
<div class="g-item"><b>Find anything</b>
|
|
3918
|
+
<kbd>${mod}</kbd> <kbd>K</kbd> jumps to any project, session or view. <kbd>/</kbd> searches inside every transcript. Click a project name for its details.</div>
|
|
3919
|
+
<div class="g-item"><b>Top-right buttons</b>
|
|
3920
|
+
<ul class="g-icons">
|
|
3921
|
+
<li>${icon('mc-btn')} Mission Control: every live session side by side</li>
|
|
3922
|
+
<li>${icon('hive-btn')} Hive: live sessions ranked, plus Hall of Fame</li>
|
|
3923
|
+
<li>${icon('bell-btn')} Catch up on what happened while you were away</li>
|
|
3924
|
+
<li>${icon('gear')} Settings, themes and your phone view</li>
|
|
3925
|
+
</ul></div>
|
|
3926
|
+
</div>`;
|
|
3927
|
+
}
|
|
3928
|
+
function showGuide(show, focus = false) {
|
|
3929
|
+
const g = $('#guide');
|
|
3930
|
+
if (show) {
|
|
3931
|
+
g.innerHTML = renderGuide();
|
|
3932
|
+
g.hidden = false;
|
|
3933
|
+
if (focus) $('#guide-done').focus({ preventScroll: true });
|
|
3934
|
+
} else g.hidden = true;
|
|
3935
|
+
}
|
|
3936
|
+
document.addEventListener('click', (e) => {
|
|
3937
|
+
if (!e.target.closest('#guide-done')) return;
|
|
3938
|
+
try { localStorage.setItem('guideSeen', '1'); } catch {}
|
|
3939
|
+
showGuide(false);
|
|
3940
|
+
});
|
|
3941
|
+
document.addEventListener('keydown', (e) => {
|
|
3942
|
+
if (e.key !== '?' || e.metaKey || e.ctrlKey || /^(INPUT|TEXTAREA|SELECT)$/.test(document.activeElement?.tagName || '')) return;
|
|
3943
|
+
e.preventDefault();
|
|
3944
|
+
showGuide($('#guide').hidden, true);
|
|
3945
|
+
if (!$('#guide').hidden) window.scrollTo({ top: 0 });
|
|
3946
|
+
});
|
|
3947
|
+
if (!guideSeen()) showGuide(true);
|
|
3948
|
+
|
|
3867
3949
|
poll();
|
|
3868
3950
|
connect();
|
|
3869
3951
|
setInterval(poll, 60_000);
|