ccdesk 0.2.0 → 0.2.1
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
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.1](https://github.com/ayagmar/ccdesk/compare/v0.2.0...v0.2.1) (2026-10-12)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **ui:** add a text size control and raise the default sizes ([1a9fe82](https://github.com/ayagmar/ccdesk/commit/1a9fe82b35cc4743936b7bf3c7a6d4244c86779a)), references [#root](https://github.com/ayagmar/ccdesk/issues/root)
|
|
8
|
+
* **ui:** open the docs from the ccdesk logo ([834986a](https://github.com/ayagmar/ccdesk/commit/834986a40df7801e6b4cf12588fd69f65411458a))
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* **ui:** keep the section links on one row with the larger text ([f349f19](https://github.com/ayagmar/ccdesk/commit/f349f19c5e81ba3c498ff9f0751f4e3d5d99ade1))
|
|
13
|
+
|
|
3
14
|
## [0.2.0](https://github.com/ayagmar/ccdesk/compare/v0.1.0...v0.2.0) (2026-10-12)
|
|
4
15
|
|
|
5
16
|
### Features
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-cyrillic-ext-wght-normal-D_UHSL_T.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-vietnamese-wght-normal-CHiFlh_0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-ext-wght-normal-EocZY2iu.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#fbfbf7;--panel:#fff;--sunk:#f1f0ea;--ink:#141414;--ink-2:#4a4a45;--muted:#6b6a63;--rule:#dcdad1;--rule-strong:#141414;--sel:#fff3c4;--sel-ink:#141414;--hover:#f4f3ec;--focus:#0072b2;--ok:#1d6b47;--warn:#8a5a00;--warn-bg:#fff1d6;--bad:#a3361c;--bad-bg:#fde7e0;--on-bad:#fff;--line-managed:#b84f00;--line-user:#0072b2;--line-project:#007a5a;--line-local:#e69f00;--line-memory:#cc79a7;--line-plugin:#5f5f5a;--on-managed:#fff;--on-user:#fff;--on-project:#fff;--on-local:#141414;--on-memory:#141414;--on-plugin:#fff;--sans:"Hanken Grotesk Variable", "Helvetica Neue", Helvetica, "Nimbus Sans", "Liberation Sans", Arial, sans-serif;--mono:"JetBrains Mono Variable", ui-monospace, "JetBrains Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--row:32px;--head:92px;--rail:248px;--inspector:clamp(440px, 30vw, 600px);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#131312;--panel:#1a1a18;--sunk:#222220;--ink:#ece8de;--ink-2:#c7c2b6;--muted:#938f84;--rule:#2c2b28;--rule-strong:#ece8de;--sel:#33302a;--sel-ink:#fff6e0;--hover:#1d1d1b;--focus:#f2c14e;--ok:#6fcf97;--warn:#f2c14e;--warn-bg:#2b2512;--bad:#ff8a73;--bad-bg:#371b15;--on-bad:#131312;--line-managed:#ff7a3d;--line-user:#4aa8e8;--line-project:#2fbf8f;--line-local:#f2b233;--line-memory:#e391bd;--line-plugin:#8d95a5;--on-managed:#131312;--on-user:#131312;--on-project:#131312;--on-plugin:#131312;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--paper:#131312;--panel:#1a1a18;--sunk:#222220;--ink:#ece8de;--ink-2:#c7c2b6;--muted:#938f84;--rule:#2c2b28;--rule-strong:#ece8de;--sel:#33302a;--sel-ink:#fff6e0;--hover:#1d1d1b;--focus:#f2c14e;--ok:#6fcf97;--warn:#f2c14e;--warn-bg:#2b2512;--bad:#ff8a73;--bad-bg:#371b15;--on-bad:#131312;--line-managed:#ff7a3d;--line-user:#4aa8e8;--line-project:#2fbf8f;--line-local:#f2b233;--line-memory:#e391bd;--line-plugin:#8d95a5;--on-managed:#131312;--on-user:#131312;--on-project:#131312;--on-plugin:#131312;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--paper);color:var(--ink);font:15px / 1.45 var(--sans);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;margin:0}::selection{background:var(--sel);color:var(--sel-ink)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:var(--rule) transparent}button,input{font:inherit;color:inherit}button{cursor:pointer}.mono,code,pre,kbd{font-family:var(--mono);font-size:13.5px}kbd{border:1px solid var(--rule);color:var(--muted);background:var(--panel);border-bottom-width:2px;border-radius:4px;padding:0 5px;font-size:12px}.muted{color:var(--muted)}.small{font-size:13.5px}.icon{flex-shrink:0;display:block}.app{grid-template-columns:var(--rail) minmax(0, 1fr);height:100%;display:grid;overflow:hidden}.main{flex-direction:column;min-width:0;display:flex;overflow:hidden}.workspace{grid-template-columns:minmax(0, 1fr) var(--inspector);height:100%;min-height:0;display:grid}.workspace.no-details{grid-template-columns:minmax(0,1fr)}.work-main{min-width:0;padding:0 28px 64px;overflow-y:auto;container-type:inline-size}.rail{background:var(--panel);border-right:1px solid var(--rule);flex-direction:column;gap:2px;padding:14px 10px 32px;display:flex;overflow-y:auto}.brand{letter-spacing:-.01em;align-items:center;gap:8px;padding:2px 6px 14px;font-size:16px;font-weight:700;display:flex}.brand-link{color:inherit;align-items:center;gap:8px;text-decoration:none;display:inline-flex}.brand-link:hover span{text-underline-offset:3px;text-decoration:underline}.brand .text-size{margin-left:auto}.brand .text-size button{justify-content:center;width:24px;padding:0}.brand .text-size button.smaller{font-size:11px}.brand .text-size button.larger{font-size:15px}html[data-text-size=smaller] #root{zoom:.9}html[data-text-size=larger] #root{zoom:1.15}.rail-group{color:var(--muted);justify-content:space-between;align-items:center;margin:14px 6px 4px;font-size:13px;font-weight:600;display:flex}.rail-group.toggle{text-align:left;background:0 0;border:0;padding:0}.rail-group.toggle:hover{color:var(--ink)}.rail-list{margin:0;padding:0;list-style:none}.rail-item{text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;width:100%;height:30px;padding:0 8px;font-size:14.5px;display:flex}.rail-item:hover{background:var(--hover)}.rail-item.current{background:var(--sel);color:var(--sel-ink);font-weight:600}.rail-item.gone .rail-label{text-decoration:line-through;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}.rail-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.rail-count{font-family:var(--mono);color:var(--muted);font-size:12.5px}.rail-item.current .rail-count{color:inherit;opacity:.75}.rail-filter,.filter,.palette-input{border:1px solid var(--rule);background:var(--paper);height:30px;color:var(--muted);border-radius:6px;align-items:center;gap:6px;padding:0 8px;display:flex}.rail-filter{margin:12px 0 0}.rail-filter input,.filter input,.palette-input input{min-width:0;color:var(--ink);background:0 0;border:0;outline:0;flex:1}.rail-filter:focus-within,.filter:focus-within{border-color:var(--focus)}input::placeholder{color:var(--muted)}.dir-head{z-index:3;background:var(--paper);height:var(--head);grid-template-rows:32px 28px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 16px;padding:16px 0 8px;display:grid;position:sticky;top:0}.dir-title{align-items:center;gap:10px;min-width:0;display:flex}.dir-title h1{letter-spacing:-.01em;white-space:nowrap;text-overflow:ellipsis;min-width:0;margin:0;font-size:19px;font-weight:700;overflow:hidden}.dir-title .flag,.session-line{color:var(--muted);align-items:center;gap:8px;margin:4px 0 12px;font-size:14px;display:flex}.section-index{scrollbar-width:none;grid-column:1/-1;gap:2px;display:flex;overflow-x:auto}.section-index a{height:26px;color:var(--ink-2);white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:0 6px;font-size:14px;text-decoration:none;display:inline-flex}.section-index a:hover{background:var(--hover);color:var(--ink)}.section-index a.empty{color:var(--muted)}.section-index kbd{padding:0 4px}@container (width<=1100px){.section-index kbd{display:none}}@container (width<=840px){.section-index .seg-count{display:none}}@container (width<=680px){.section-index a{padding:0 3px;font-size:12.5px}}.seg-count{font-family:var(--mono);color:var(--muted);font-size:12px}[aria-pressed=true] .seg-count{color:inherit;opacity:.75}.tt-section{scroll-margin-top:var(--head)}.via-agents{vertical-align:middle;font-family:var(--mono);margin-left:8px}.vis-personal{color:var(--muted)}.toolbar{align-items:center;gap:8px;display:flex}.filter{width:240px}@container (width<=960px){.filter{width:140px}.palette-label{display:none}}.palette-button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;align-items:center;gap:8px;height:30px;padding:0 10px;font-size:14px;display:flex}.palette-button:hover{border-color:var(--ink-2)}.route{border-top:2px solid var(--rule-strong);border-bottom:1px solid var(--rule);margin:4px 0 8px}.route-stops{margin:0;padding:0;list-style:none;display:flex;position:relative}.stop{flex:2 1 0;min-width:0}.stop.idle{flex:1 1 0}.route-stops:before{content:"";background:var(--ink);height:3px;position:absolute;top:25px;left:22px;right:22px}.stop button{text-align:left;background:0 0;border:0;border-radius:6px;grid-template-rows:22px auto auto;justify-items:start;gap:4px;width:100%;padding:14px 8px 12px;display:grid;position:relative}.stop button:hover{background:var(--hover)}.stop button.on{background:var(--sunk)}.stop-node{background:var(--paper);border-radius:999px;padding:0 6px 0 0;display:flex}.stop button:hover .stop-node,.stop button.on .stop-node{background:0 0}.stop-name{font-size:14.5px;font-weight:700}.stop-facts{font-family:var(--mono);color:var(--muted);font-size:12.5px}.stop.idle .stop-name{color:var(--muted);font-weight:500}.stop.lit .bullet{box-shadow:0 0 0 2px var(--paper), 0 0 0 4px var(--ink)}.stop button.on .stop-name{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:2px}.bullet{width:22px;height:22px;font:700 11.5px / 1 var(--sans);background:var(--bullet);color:var(--bullet-ink);border:2px solid var(--bullet);border-radius:999px;flex-shrink:0;place-items:center;transition:box-shadow .16s cubic-bezier(.16,1,.3,1);display:inline-grid}.bullet.hollow{background:var(--paper);color:var(--bullet)}.bullet.hollow.bullet-local,.bullet.hollow.bullet-memory{color:var(--ink)}.bullet-managed{--bullet:var(--line-managed);--bullet-ink:var(--on-managed)}.bullet-user{--bullet:var(--line-user);--bullet-ink:var(--on-user)}.bullet-project{--bullet:var(--line-project);--bullet-ink:var(--on-project)}.bullet-local{--bullet:var(--line-local);--bullet-ink:var(--on-local)}.bullet-memory{--bullet:var(--line-memory);--bullet-ink:var(--on-memory)}.bullet-plugin{--bullet:var(--line-plugin);--bullet-ink:var(--on-plugin)}.tt .bullet{vertical-align:middle}.tt .bullet,.palette .bullet,.layers .bullet{width:20px;height:20px;font-size:10.5px}.tt-section{margin-top:26px}.tt-head{border-top:2px solid var(--rule-strong);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 0 6px;display:flex}.tt-head h2{letter-spacing:-.005em;margin:0;font-size:15px;font-weight:700}.tt-count{font-family:var(--mono);color:var(--muted);font-size:13px}.tt-empty{color:var(--muted);margin:4px 0 0;padding:6px 0}.tt{border-collapse:collapse;table-layout:fixed;width:100%}.tt th{top:var(--head);z-index:1;background:var(--paper);text-align:left;color:var(--muted);border-bottom:1px solid var(--rule-strong);white-space:nowrap;height:26px;box-shadow:0 -16px 0 var(--paper);padding:0 8px;font-size:13px;font-weight:600;position:sticky}.tt td{height:var(--row);border-bottom:1px solid var(--rule);white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;padding:0 8px;overflow:hidden}.tt tbody tr{cursor:pointer}.tt tbody tr:hover td{background:var(--hover)}.tt tbody tr.selected td{background:var(--sel);color:var(--sel-ink)}.tt tbody tr.selected .row-name{font-weight:700}.tt tbody tr.dim td{color:var(--muted)}.tt td.num{text-align:right;font-family:var(--mono);color:var(--muted);font-size:13px}.tt td.num.used{color:var(--ink)}.tt th:first-child,.tt td:first-child{padding-left:2px}.row-name{font:inherit;text-overflow:ellipsis;white-space:nowrap;text-align:left;vertical-align:middle;background:0 0;border:0;max-width:100%;padding:0;overflow:hidden}.via{vertical-align:middle;color:var(--muted);margin-left:6px;display:inline-flex}.value,.why,.desc{color:var(--ink-2)}.tt-instructions th:first-child,.tt-instructions th:nth-child(2){width:40px}.tt-instructions th:nth-child(3){width:32%}.tt-instructions th:nth-child(4){width:86px}.tt-instructions th:nth-child(6){text-align:right;width:58px}.tt-instructions th:nth-child(7){width:108px}.tt-settings th:first-child{width:76px}.tt-settings th:nth-child(2),.tt-settings th:nth-child(4){width:30%}.tt-memory th:first-child{width:40px}.tt-memory th:nth-child(2){width:24%}.tt-memory th:nth-child(3){width:98px}.tt-memory th:nth-child(5){width:200px}.tt-memory th:nth-child(6){text-align:right;width:82px}.tt-hooks th:first-child,.tt-permissions th:first-child,.tt-mcp th:first-child,.tt-extensions th:first-child{width:40px}.tt-hooks th:nth-child(2){width:140px}.tt-hooks th:nth-child(3){width:26%}.tt-permissions th:nth-child(2){width:120px}.tt-permissions th:nth-child(4){width:34%}.tt-mcp th:nth-child(2){width:26%}.tt-mcp th:nth-child(3){width:92px}.tt-extensions th:nth-child(2){width:104px}.tt-extensions th:nth-child(3){width:30%}.tt-tools th:first-child{width:40px}.tt-tools th:nth-child(2){width:190px}.tt-tools th:nth-child(3){width:150px}.tt-tools th:nth-child(4){width:190px}.tt-tools th:nth-child(5){text-align:right;width:64px}.tt-dirs th:nth-child(2),.tt-dirs th:nth-child(3){text-align:right;width:96px}.tt-dirs th:nth-child(4){text-align:right;width:110px}.tt-shared th:first-child{width:40px}.tt-shared th:nth-child(2){width:30%}.tt-shared th:nth-child(3){width:130px}.bullets>*+*{margin-left:3px}.beat{color:var(--muted)}.beaten{font-family:var(--mono);align-items:center;gap:4px;margin-right:10px;font-size:13px;display:inline-flex}.beaten s{text-decoration-thickness:1.5px}.status{font-size:13.5px;font-weight:600}.status-loaded{color:var(--ok)}.status-skipped{color:var(--muted)}.status-on-match{color:var(--ink-2)}.vis{font-size:13.5px}.vis-tracked{color:var(--ok);font-weight:600}.vis-untracked{color:var(--warn)}.vis-ignored,.vis-no-git{color:var(--muted)}.type{align-items:center;gap:6px;font-size:14px;display:inline-flex}.type-dot{background:var(--ink-2);flex-shrink:0;width:8px;height:8px}.type-user{border-radius:999px}.type-feedback{clip-path:polygon(50% 0,100% 100%,0 100%)}.type-reference{transform:rotate(45deg)scale(.85)}.type-unknown{box-shadow:inset 0 0 0 1.5px var(--muted);background:0 0}.checks>*+*{margin-left:4px}.flag{background:var(--sunk);color:var(--ink-2);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding:0 6px;font-size:12.5px;line-height:18px;display:inline-flex}.flag .icon{width:13px;height:13px}.flag.warn{background:var(--warn-bg);color:var(--warn)}.flag.bad{background:var(--bad-bg);color:var(--bad)}.segmented{border:1px solid var(--rule);scrollbar-width:none;border-radius:6px;min-width:0;max-width:100%;margin:0 0 0 6px;padding:0;display:inline-flex;overflow-x:auto}.segmented button{white-space:nowrap;border:0;border-right:1px solid var(--rule);background:var(--panel);flex:none;align-items:center;gap:5px;height:24px;padding:0 9px;font-size:13.5px;display:inline-flex}.segmented button:last-child{border-right:0}.segmented button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.segmented.small button{height:22px;font-size:13px}.inspector{border-left:1px solid var(--rule);background:var(--panel);min-width:0;overflow-y:auto}.insp-head{z-index:2;background:var(--panel);border-bottom:2px solid var(--rule-strong);align-items:center;gap:10px;padding:16px 18px 12px;display:flex;position:sticky;top:0}.insp-head h2{overflow-wrap:anywhere;flex:1;min-width:0;margin:0;font-size:16px;font-weight:700}.insp-body{padding:14px 18px 40px}.verdict{color:var(--ink-2);margin:0 0 14px}.verdict.ok{color:var(--ink)}.verdict.off{color:var(--muted)}.fields{grid-template-columns:104px minmax(0,1fr);gap:6px 12px;margin:0 0 16px;font-size:14px;display:grid}.fields dt{color:var(--muted)}.fields dd{min-width:0;margin:0}.path{flex-wrap:wrap;align-items:center;gap:2px 6px;max-width:100%;display:inline-flex}.path .mono{overflow-wrap:anywhere}.copied{color:var(--ok);flex-basis:100%;font-size:13px}.wrap{overflow-wrap:anywhere;white-space:normal}.icon-button{width:28px;height:28px;color:var(--muted);background:0 0;border:0;border-radius:6px;flex-shrink:0;place-items:center;display:inline-grid}.icon-button:hover{background:var(--hover);color:var(--ink)}.icon-button.small{width:22px;height:22px}.sub{margin:0 0 16px}.sub h3,.sub-title{margin:0 0 6px;font-size:14px;font-weight:700}.plain{gap:4px;margin:0;padding:0;list-style:none;display:grid}.plain li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.layers{border-collapse:collapse;width:100%;margin-bottom:14px}.layers th{text-align:left;width:40px;padding:4px 0}.layers td{border-bottom:1px solid var(--rule);overflow-wrap:anywhere;padding:4px 8px}.layers tr.wins td{font-weight:600}.layers tr.lost td{color:var(--muted);text-decoration:line-through}.layers tr.unset td{color:var(--muted)}.contents{border-top:1px solid var(--rule-strong);margin-top:8px}.contents-bar{justify-content:space-between;align-items:center;padding:8px 0;font-size:14px;font-weight:700;display:flex}pre.raw{background:var(--sunk);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:0 0 12px;padding:12px;line-height:1.5;overflow-x:auto}.prose{overflow-wrap:anywhere;max-width:68ch;font-size:14.5px;line-height:1.6}.prose h1,.prose h2,.prose h3{margin:18px 0 6px;font-size:14px}.prose p,.prose ul,.prose ol{margin:8px 0}.prose ul,.prose ol{padding-left:20px}.prose code{background:var(--sunk);border-radius:3px;padding:1px 4px}.prose pre{background:var(--sunk);border-radius:6px;padding:10px;overflow-x:auto}.prose pre code{background:0 0;padding:0}.prose a,.link{color:var(--focus);text-underline-offset:2px}.prose table{border-collapse:collapse;display:block;overflow-x:auto}.prose td,.prose th{border:1px solid var(--rule);padding:3px 6px}.link{text-align:left;background:0 0;border:0;padding:0;text-decoration:underline}.actions{margin:4px 0 16px}.quiet-danger{border:1px solid var(--rule);background:var(--panel);height:30px;color:var(--bad);border-radius:6px;align-items:center;gap:6px;padding:0 10px;font-size:14px;display:inline-flex}.quiet-danger:hover{border-color:var(--bad)}.confirm{border:1px solid var(--bad);background:var(--bad-bg);border-radius:8px;padding:12px}.confirm p{margin:0 0 10px;font-size:14px}.confirm-buttons{gap:8px;display:flex}.confirm-buttons button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;height:30px;padding:0 12px;font-size:14px}.confirm-buttons button.danger{background:var(--bad);border-color:var(--bad);color:var(--on-bad);font-weight:600}button:disabled{opacity:.6;cursor:progress}.page{height:100%;padding:22px 28px 64px;overflow-y:auto}.page-head h1{letter-spacing:-.015em;margin:0 0 4px;font-size:22px}.lede{color:var(--ink-2);max-width:72ch;margin:0}.page .tt th{top:-22px}.stores>*+*{margin-left:12px}.palette-backdrop{z-index:20;background:color-mix(in srgb, var(--paper) 55%, transparent);place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.palette{background:var(--panel);border:1px solid var(--rule-strong);border-radius:10px;width:min(640px,100vw - 32px);animation:.18s cubic-bezier(.16,1,.3,1) rise;overflow:hidden;box-shadow:0 18px 48px -12px #00000059}.palette-input{border:0;border-bottom:1px solid var(--rule);background:var(--panel);border-radius:0;height:46px;padding:0 14px}.palette-results{max-height:50vh;margin:0;padding:6px;list-style:none;overflow-y:auto}.palette-results [role=option]{height:var(--row);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:10px;padding:0 10px;display:flex;overflow:hidden}.palette-results [role=option].active{background:var(--sel);color:var(--sel-ink)}.palette-empty{color:var(--muted);padding:8px 10px}.toast-region{z-index:30;position:fixed}.toast{z-index:30;background:var(--ink);color:var(--paper);border-radius:8px;align-items:center;gap:14px;padding:8px 8px 8px 14px;font-size:14.5px;animation:.22s cubic-bezier(.16,1,.3,1) rise;display:flex;position:fixed;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 12px 32px -10px #0006}.toast button{border:1px solid color-mix(in srgb, var(--paper) 40%, transparent);color:inherit;background:0 0;border-radius:6px;align-items:center;gap:6px;height:28px;padding:0 10px;font-weight:600;display:inline-flex}@keyframes rise{0%{opacity:0;translate:0 6px}}.loading{color:var(--muted);flex-direction:column;gap:12px;padding:48px 28px;display:flex}.loading-line{background:linear-gradient(90deg, var(--ink) 0 30%, var(--rule) 30% 100%);background-size:200% 100%;width:220px;height:3px;animation:1.2s cubic-bezier(.65,0,.35,1) infinite travel;display:block}@keyframes travel{0%{background-position:100% 0}to{background-position:-40% 0}}.problem{max-width:64ch;padding:48px 28px}.problem h1{margin:0 0 8px;font-size:18px}.tt-note{color:var(--muted);font-size:13.5px}.perm{font-size:13.5px;font-weight:600}.perm-allow{color:var(--ok)}.perm-ask{color:var(--warn)}.perm-deny{color:var(--bad)}.fix{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.fix .head-action{height:22px;margin-left:0;padding:0 8px}.tt-head .fix{margin-left:4px}.view-switch{flex-shrink:0;margin-left:0}.view-switch button{height:28px}.filter.hidden{display:none}.section-index.hidden{visibility:hidden}.context{border-top:2px solid var(--rule-strong);margin-top:4px;padding-top:12px}.context-summary{margin:0 0 4px;font-size:15px}.context>.muted{max-width:80ch;margin:0 0 12px}.context-large{white-space:normal;margin:0 0 12px;padding:6px 10px;line-height:1.5}.context-bar{gap:2px;height:8px;margin:0 0 8px;display:flex}.context-bar span{border-radius:2px;min-width:3px}.bar-managed{background:var(--line-managed)}.bar-user{background:var(--line-user)}.bar-project{background:var(--line-project)}.bar-local{background:var(--line-local)}.bar-memory{background:var(--line-memory)}.context-list{margin:0;padding:0;list-style:none}.context-list li{border-bottom:1px solid var(--rule)}.context-list summary{min-height:var(--row);cursor:pointer;grid-template-columns:28px 26px minmax(0,1fr) 84px 64px 64px;align-items:center;gap:8px;padding:6px 4px;list-style:none;display:grid}.context-list summary::-webkit-details-marker{display:none}.context-list summary:hover{background:var(--hover)}.context-list summary .num{font-family:var(--mono);text-align:right;color:var(--ink-2);font-size:13px}.context-list summary .num:first-child{text-align:left;color:var(--muted)}.context-name{flex-direction:column;min-width:0;display:flex}.context-name .mono{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.context-list details[open] summary{background:var(--sunk)}.context-list pre.raw{max-height:60vh;margin:8px 0 12px;overflow-y:auto}.context-hidden{margin:8px 4px 12px}.sharing{flex-wrap:wrap;gap:6px 24px;margin:0 0 4px;font-size:13.5px;display:flex}.sharing-group{align-items:baseline;gap:8px;min-width:0;display:flex}.sharing dt{white-space:nowrap}.sharing dd{color:var(--ink-2);flex-wrap:wrap;gap:2px 14px;margin:0;display:flex}.sharing dd span{white-space:nowrap}.problems{background:var(--warn-bg);color:var(--warn);border-radius:6px;align-items:flex-start;gap:8px;margin:0 0 12px;padding:8px 12px;font-size:13.5px;display:flex}.problems ul{overflow-wrap:anywhere;margin:0}@media (prefers-reduced-motion:reduce){*,:before{transition:none!important;animation:none!important}}@media (width>=1181px) and (width<=1400px){:root{--rail:220px;--inspector:360px}.tt-instructions :is(th,td):nth-child(6){display:none}}@media (width<=1180px){.workspace{grid-template-columns:minmax(0,1fr)}.inspector{width:min(var(--inspector), 100vw);z-index:10;position:fixed;top:0;bottom:0;right:0;box-shadow:-16px 0 40px -16px #00000059}.rail-keys{display:none}}@media (width<=760px){.app{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.rail{border-right:0;border-bottom:1px solid var(--rule);max-height:34vh}.work-main,.page{padding-left:16px;padding-right:16px}.filter{flex:160px;width:auto}.toolbar{flex-wrap:wrap;width:100%}.section-index{flex-wrap:wrap}.sharing-group{flex-direction:column;gap:2px}.dir-head{grid-template-rows:auto;grid-template-columns:minmax(0,1fr);height:auto;padding-top:18px;position:static}.dir-title{flex-wrap:wrap}.tt-section{scroll-margin-top:0}.palette-button{display:none}.context-list summary{grid-template-columns:22px 26px minmax(0,1fr) 56px}.context-list summary .num:nth-child(4),.context-list summary .num:last-child{display:none}.route-stops{flex-direction:column}.route-stops:before{width:3px;height:auto;inset:22px auto 22px 19px}.stop button{grid-template-rows:auto;grid-template-columns:30px auto 1fr;align-items:center;padding:6px 8px}.tt th:nth-child(n){width:auto}.tt th:first-child:nth-child(n),.tt-instructions th:nth-child(2):nth-child(n){width:40px}.tt-settings th:first-child:nth-child(n){width:64px}.tt-compare,.tt-compare :is(thead,tbody){display:block}.tt-compare tr{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.tt-compare th:first-child{display:none}.tt-compare td:first-child{border-bottom:0;grid-column:1/-1;padding-bottom:0}.tt-instructions th:first-child,.tt-instructions td:first-child,.tt-instructions :is(th,td):is(:nth-child(5),:nth-child(6)),.tt-settings :is(th,td):nth-child(4),.tt-memory :is(th,td):is(:nth-child(3),:nth-child(4),:nth-child(6)),.tt-permissions :is(th,td):nth-child(4),.tt-tools :is(th,td):is(:nth-child(4),:nth-child(6)),.tt-hooks :is(th,td):nth-child(4),.tt-mcp :is(th,td):nth-child(4),.tt-extensions :is(th,td):nth-child(4),.tt-shared :is(th,td):nth-child(n+4){display:none}.tt-instructions th:nth-child(4):nth-child(n){width:72px}.tt-instructions th:nth-child(7):nth-child(n){width:84px}.tt th{box-shadow:none;position:static}}.head-action{border:1px solid var(--rule);background:var(--panel);border-radius:6px;align-items:center;gap:6px;height:26px;margin-left:auto;padding:0 10px;font-size:13.5px;display:inline-flex}.head-action:hover{border-color:var(--ink-2)}.editor{gap:10px;margin:0 0 18px;display:grid}.editor>p{margin:0}.hint{color:var(--ink-2);font-size:14px}.editor .segmented{justify-self:start;margin-left:0}.field{color:var(--muted);gap:4px;font-size:13.5px;display:grid}.field input:not([type=checkbox]),.field select,.field textarea,.path-form input{border:1px solid var(--rule);background:var(--paper);width:100%;color:var(--ink);border-radius:6px;padding:6px 8px;font-size:14px}.field input:not([type=checkbox]),.field select,.path-form input{height:32px}.field textarea{resize:vertical;line-height:1.5}.field input:focus,.field select:focus,.field textarea:focus,.path-form input:focus{outline:2px solid var(--focus);outline-offset:-1px}.check{color:var(--ink);align-items:center;gap:8px;font-size:14px;display:inline-flex}.check input{width:16px;height:16px;accent-color:var(--ink);margin:0}.editor-buttons{flex-wrap:wrap;gap:8px;display:flex}.editor-buttons button,.path-form button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;height:30px;padding:0 12px;font-size:14px}.editor-buttons button:hover,.path-form button:hover{border-color:var(--ink-2)}.editor-buttons button.primary{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}.key-picker{position:relative}.key-results{border:1px solid var(--rule);background:var(--panel);border-radius:6px;max-height:280px;margin-top:4px;padding:4px;overflow-y:auto}.key-results [role=option]{cursor:pointer;border-radius:4px;gap:1px;padding:6px 8px;font-size:13.5px;display:grid}.key-results [role=option] .muted{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.key-results [role=option].active{background:var(--sel);color:var(--sel-ink)}.review{border-top:1px solid var(--rule-strong);gap:8px;padding-top:10px;display:grid}.suggestions{border:0;flex-wrap:wrap;align-items:center;gap:4px;margin:0;padding:0;display:flex}.suggestions .muted{margin-right:4px}.suggestions button{border:1px solid var(--rule);background:var(--panel);border-radius:4px;height:24px;padding:0 8px;font-size:13px}.suggestions button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--paper)}.docs-link{align-items:center;gap:4px;display:inline-flex}.facet-select{border:1px solid var(--rule);background:var(--panel);max-width:260px;height:26px;color:var(--ink);border-radius:6px;padding:0 6px;font-size:13.5px}.catalog-files{white-space:nowrap}.catalog-files .bullet+.bullet{margin-left:2px}.docs-text>:first-child{margin-top:0}.docs-text>:last-child{margin-bottom:0}.tool-switch-rule{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 0;display:flex}.tool-switch-rule .head-action{margin-left:auto}.tt-head .memory-review{flex-basis:100%}.memory-review-file{gap:4px;display:grid}.editor-buttons button.danger{background:var(--bad);border-color:var(--bad);color:var(--on-bad);font-weight:600}.review .sub-title{overflow-wrap:anywhere;margin:0}pre.diff{background:var(--sunk);border-radius:6px;max-height:360px;margin:0;padding:8px 0;line-height:1.5;overflow-x:auto}pre.diff span{white-space:pre;padding:0 10px;display:block}.diff-add{background:color-mix(in srgb, var(--ok) 16%, transparent);color:var(--ink)}.diff-remove{background:color-mix(in srgb, var(--bad) 16%, transparent);color:var(--ink);text-decoration:line-through;-webkit-text-decoration-color:color-mix(in srgb, var(--bad) 60%, transparent);text-decoration-color:color-mix(in srgb, var(--bad) 60%, transparent)}.diff-same{color:var(--muted)}.rail-empty{color:var(--muted);margin:2px 8px;font-size:14px}.rail-keys{color:var(--muted);gap:6px;margin:auto 8px 0;padding:24px 0 0;font-size:13px;list-style:none;display:grid}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.tt th .sort{height:100%;font:inherit;color:inherit;background:0 0;border:0;align-items:center;gap:4px;padding:0;display:inline-flex}.tt th .sort:hover,.tt th[aria-sort] .sort{color:var(--ink)}.sort-mark{font-family:var(--mono);opacity:0;font-size:12px;transition:opacity .12s}.tt th .sort:hover .sort-mark,.tt th .sort:focus-visible .sort-mark,.sort-mark.on{opacity:1}.show-more{border:0;border-bottom:1px solid var(--rule);text-align:left;background:0 0;width:100%;margin:0;padding:7px 8px;font-size:13.5px;font-weight:600;display:block}.show-more:hover{background:var(--hover)}.tt-head .filter{height:28px;margin-left:auto}.tool-outcome{font-size:13.5px}.tool-denied{color:var(--bad);font-weight:600}.tool-asks{color:var(--warn)}.tool-allowed{color:var(--ok);font-weight:600}.tool-free{color:var(--muted)}.diff-skip{color:var(--muted);font-style:italic}.tt-settings.no-overrides :is(th,td):nth-child(4){display:none}.head-action+.head-action{margin-left:0}.tt-compare th:first-child{width:28%}.tt-compare tbody tr{cursor:default}.tt-compare td{vertical-align:top;height:auto;padding-top:5px;padding-bottom:5px}.cmp-value,.cmp-from{text-overflow:ellipsis;display:block;overflow:hidden}.cmp-from{color:var(--muted);font-size:13px}.cmp-from>*+*{margin-left:8px}.change-day{max-width:980px;margin-top:22px}.change-day h2{border-top:2px solid var(--rule-strong);margin:0 0 4px;padding-top:8px;font-size:14px;font-weight:700}.changes{grid-template-columns:minmax(0,1fr);max-width:980px;display:grid}.changes .change{border-top:1px solid var(--rule);grid-template-columns:minmax(0,1fr);gap:10px;padding:10px 0;display:grid}.change-row{grid-template-columns:11rem minmax(0,1fr) 6rem 9rem;grid-template-areas:"what file when action";align-items:baseline;gap:6px 12px;font-size:14px;display:grid}.change-what{grid-area:what;font-weight:600}.change-file{grid-area:file;gap:2px;min-width:0;display:grid}.change-file .muted{font-size:12.5px}.change-row .num{grid-area:when}.change-row .head-action{grid-area:action;justify-self:end;margin-left:0}@media (width<=720px){.change-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"what when""file file""action action"}.change-row .head-action{justify-self:start}}.path-tester{border-top:1px solid var(--rule);gap:8px;max-width:760px;margin-top:28px;padding-top:14px;display:grid}.path-tester .sub-title{margin:0}.path-form{gap:8px;display:flex}.path-form input{flex:1;min-width:0}.path-matches{gap:6px;font-size:14px;display:grid}.path-matches li{flex-wrap:wrap;align-items:baseline;gap:4px 10px;display:flex}
|
|
@@ -57,4 +57,4 @@ You are …
|
|
|
57
57
|
`,inConstruct:`tableCell`},{atBreak:!0,character:`|`,after:`[ :-]`},{character:`|`,inConstruct:`tableCell`},{atBreak:!0,character:`:`,after:`-`},{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{inlineCode:f,table:o,tableCell:c,tableRow:s}};function o(e,t,n,r){return l(u(e,n,r),e.align)}function s(e,t,n,r){let i=l([d(e,n,r)]);return i.slice(0,i.indexOf(`
|
|
58
58
|
`))}function c(e,t,n,r){let i=n.enter(`tableCell`),o=n.enter(`phrasing`),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function l(e,t){return qc(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function u(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`table`);for(;++i<r.length;)a[i]=d(r[i],t,n);return o(),a}function d(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`tableRow`);for(;++i<r.length;)a[i]=c(r[i],e,t,n);return o(),a}function f(e,t,n){let r=Gl.inlineCode(e,t,n);return n.stack.includes(`tableCell`)&&(r=r.replace(/\|/g,`\\$&`)),r}}function tu(){return{exit:{taskListCheckValueChecked:ru,taskListCheckValueUnchecked:ru,paragraph:K}}}function nu(){return{unsafe:[{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{listItem:iu}}}function ru(e){let t=this.stack[this.stack.length-2];t.type,t.checked=e.type===`taskListCheckValueChecked`}function K(e){let t=this.stack[this.stack.length-2];if(t&&t.type===`listItem`&&typeof t.checked==`boolean`){let e=this.stack[this.stack.length-1];e.type;let n=e.children[0];if(n&&n.type===`text`){let r=t.children,i=-1,a;for(;++i<r.length;){let e=r[i];if(e.type===`paragraph`){a=e;break}}a===e&&(n.value=n.value.slice(1),n.value.length===0?e.children.shift():e.position&&n.position&&typeof n.position.start.offset==`number`&&(n.position.start.column++,n.position.start.offset++,e.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function iu(e,t,n,r){let i=e.children[0],a=typeof e.checked==`boolean`&&i&&i.type===`paragraph`,o=`[`+(e.checked?`x`:` `)+`] `,s=n.createTracker(r);a&&s.move(o);let c=Gl.listItem(e,t,n,{...r,...s.current()});return a&&(c=c.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,l)),c;function l(e){return e+o}}function au(){return[uc(),Pc(),zc(),Kl(),tu()]}function ou(e){return{extensions:[dc(),Fc(e),Bc(),eu(e),nu()]}}var su={tokenize:xu,partial:!0},cu={tokenize:Su,partial:!0},lu={tokenize:Cu,partial:!0},uu={tokenize:wu,partial:!0},du={tokenize:Tu,partial:!0},fu={name:`wwwAutolink`,tokenize:yu,previous:Eu},pu={name:`protocolAutolink`,tokenize:bu,previous:Du},mu={name:`emailAutolink`,tokenize:vu,previous:Ou},hu={};function gu(){return{text:hu}}for(var _u=48;_u<123;)hu[_u]=mu,_u++,_u===58?_u=65:_u===91&&(_u=97);hu[43]=mu,hu[45]=mu,hu[46]=mu,hu[95]=mu,hu[72]=[mu,pu],hu[104]=[mu,pu],hu[87]=[mu,fu],hu[119]=[mu,fu];function vu(e,t,n){let r=this,i,a;return o;function o(t){return!ku(t)||!Ou.call(r,r.previous)||Au(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkEmail`),s(t))}function s(t){return ku(t)?(e.consume(t),s):t===64?(e.consume(t),c):n(t)}function c(t){return t===46?e.check(du,u,l)(t):t===45||t===95||dr(t)?(a=!0,e.consume(t),c):u(t)}function l(t){return e.consume(t),i=!0,c}function u(o){return a&&i&&ur(r.previous)?(e.exit(`literalAutolinkEmail`),e.exit(`literalAutolink`),t(o)):n(o)}}function yu(e,t,n){let r=this;return i;function i(t){return t!==87&&t!==119||!Eu.call(r,r.previous)||Au(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkWww`),e.check(su,e.attempt(cu,e.attempt(lu,a),n),n)(t))}function a(n){return e.exit(`literalAutolinkWww`),e.exit(`literalAutolink`),t(n)}}function bu(e,t,n){let r=this,i=``,a=!1;return o;function o(t){return(t===72||t===104)&&Du.call(r,r.previous)&&!Au(r.events)?(e.enter(`literalAutolink`),e.enter(`literalAutolinkHttp`),i+=String.fromCodePoint(t),e.consume(t),s):n(t)}function s(t){if(ur(t)&&i.length<5)return i+=String.fromCodePoint(t),e.consume(t),s;if(t===58){let n=i.toLowerCase();if(n===`http`||n===`https`)return e.consume(t),c}return n(t)}function c(t){return t===47?(e.consume(t),a?l:(a=!0,c)):n(t)}function l(t){return t===null||pr(t)||V(t)||vr(t)||_r(t)?n(t):e.attempt(cu,e.attempt(lu,u),n)(t)}function u(n){return e.exit(`literalAutolinkHttp`),e.exit(`literalAutolink`),t(n)}}function xu(e,t,n){let r=0;return i;function i(t){return(t===87||t===119)&&r<3?(r++,e.consume(t),i):t===46&&r===3?(e.consume(t),a):n(t)}function a(e){return e===null?n(e):t(e)}}function Su(e,t,n){let r,i,a;return o;function o(t){return t===46||t===95?e.check(uu,c,s)(t):t===null||V(t)||vr(t)||t!==45&&_r(t)?c(t):(a=!0,e.consume(t),o)}function s(t){return t===95?r=!0:(i=r,r=void 0),e.consume(t),o}function c(e){return i||r||!a?n(e):t(e)}}function Cu(e,t){let n=0,r=0;return i;function i(o){return o===40?(n++,e.consume(o),i):o===41&&r<n?a(o):o===33||o===34||o===38||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===60||o===63||o===93||o===95||o===126?e.check(uu,t,a)(o):o===null||V(o)||vr(o)?t(o):(e.consume(o),i)}function a(t){return t===41&&r++,e.consume(t),i}}function wu(e,t,n){return r;function r(o){return o===33||o===34||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===63||o===95||o===126?(e.consume(o),r):o===38?(e.consume(o),a):o===93?(e.consume(o),i):o===60||o===null||V(o)||vr(o)?t(o):n(o)}function i(e){return e===null||e===40||e===91||V(e)||vr(e)?t(e):r(e)}function a(e){return ur(e)?o(e):n(e)}function o(t){return t===59?(e.consume(t),r):ur(t)?(e.consume(t),o):n(t)}}function Tu(e,t,n){return r;function r(t){return e.consume(t),i}function i(e){return dr(e)?n(e):t(e)}}function Eu(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||V(e)}function Du(e){return!ur(e)}function Ou(e){return!(e===47||ku(e))}function ku(e){return e===43||e===45||e===46||e===95||dr(e)}function Au(e){let t=e.length,n=!1;for(;t--;){let r=e[t][1];if((r.type===`labelLink`||r.type===`labelImage`)&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var ju={tokenize:zu,partial:!0};function Mu(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:Iu,continuation:{tokenize:Lu},exit:Ru}},text:{91:{name:`gfmFootnoteCall`,tokenize:Fu},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:Nu,resolveTo:Pu}}}}function Nu(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=lr(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function Pu(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function Fu(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||V(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(lr(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return V(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function Iu(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||V(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=lr(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return V(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),U(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function Lu(e,t,n){return e.check(Rr,t,e.attempt(ju,t,n))}function Ru(e){e.exit(`gfmFootnoteDefinition`)}function zu(e,t,n){let r=this;return U(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function Bu(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n<e.length;)if(e[n][0]===`enter`&&e[n][1].type===`strikethroughSequenceTemporary`&&e[n][1]._close){let r=n;for(;r--;)if(e[r][0]===`exit`&&e[r][1].type===`strikethroughSequenceTemporary`&&e[r][1]._open&&e[n][1].end.offset-e[n][1].start.offset===e[r][1].end.offset-e[r][1].start.offset){e[n][1].type=`strikethroughSequence`,e[r][1].type=`strikethroughSequence`;let i={type:`strikethrough`,start:Object.assign({},e[r][1].start),end:Object.assign({},e[n][1].end)},a={type:`strikethroughText`,start:Object.assign({},e[r][1].end),end:Object.assign({},e[n][1].start)},o=[[`enter`,i,t],[`enter`,e[r][1],t],[`exit`,e[r][1],t],[`enter`,a,t]],s=t.parser.constructs.insideSpan.null;s&&nr(o,o.length,0,jr(s,e.slice(r+1,n),t)),nr(o,o.length,0,[[`exit`,a,t],[`enter`,e[n][1],t],[`exit`,e[n][1],t],[`exit`,i,t]]),nr(e,r-1,n-r+3,o),n=r+o.length-2;break}}for(n=-1;++n<e.length;)e[n][1].type===`strikethroughSequenceTemporary`&&(e[n][1].type=`data`);return e}function i(e,n,r){let i=this.previous,a=this.events,o=0;return s;function s(t){return i===126&&a[a.length-1][1].type!==`characterEscape`?r(t):(e.enter(`strikethroughSequenceTemporary`),c(t))}function c(a){let s=Ar(i);if(a===126)return o>1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=Ar(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var Vu=class{constructor(){this.map=[],this.index=new Map}add(e,t,n){Hu(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0,this.index.clear()}};function Hu(e,t,n,r){if(n===0&&r.length===0)return;let i=e.index.get(t);if(i){i[1]+=n,i[2].push(...r);return}let a=[t,n,r];e.map.push(a),e.index.set(t,a)}function Uu(e,t){let n=!1,r=[];for(;t<e.length;){let i=e[t];if(n){if(i[0]===`enter`)i[1].type===`tableContent`&&r.push(e[t+1][1].type===`tableDelimiterMarker`?`left`:`none`);else if(i[1].type===`tableContent`){if(e[t-1][1].type===`tableDelimiterMarker`){let e=r.length-1;r[e]=r[e]===`left`?`center`:`right`}}else if(i[1].type===`tableDelimiterRow`)break}else i[0]===`enter`&&i[1].type===`tableDelimiterRow`&&(n=!0);t+=1}return r}function Wu(){return{flow:{null:{name:`table`,tokenize:Gu,resolveAll:Ku}}}}function Gu(e,t,n){let r=this,i=0,a=0,o;return s;function s(e){let t=r.events.length-1;for(;t>-1;){let{type:e}=r.events[t][1];if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124||(o=!0,a+=1),u(e)}function u(t){return t===null?n(t):B(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):H(t)?U(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||V(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,H(t)?U(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return H(t)?U(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||B(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return H(t)?U(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||B(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||B(n)?(e.exit(`tableRow`),t(n)):H(n)?U(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||V(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function Ku(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new Vu;for(;++n<e.length;){let p=e[n],m=p[1];p[0]===`enter`?m.type===`tableHead`?(s=!1,c!==0&&(Ju(f,t,c,l,u),u=void 0,c=0),l={type:`table`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,l,t]])):m.type===`tableRow`||m.type===`tableDelimiterRow`?(r=!0,d=void 0,a=[0,0,0,0],o=[0,n+1,0,0],s&&(s=!1,u={type:`tableBody`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,u,t]])),i=m.type===`tableDelimiterRow`?2:u?3:1):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)?(r=!1,o[2]===0&&(a[1]!==0&&(o[0]=o[1],d=qu(f,t,a,i,void 0,d),a=[0,0,0,0]),o[2]=n)):m.type===`tableCellDivider`&&(r?r=!1:(a[1]!==0&&(o[0]=o[1],d=qu(f,t,a,i,void 0,d)),a=o,o=[a[1],n,0,0])):m.type===`tableHead`?(s=!0,c=n):m.type===`tableRow`||m.type===`tableDelimiterRow`?(c=n,a[1]===0?o[1]!==0&&(d=qu(f,t,o,i,n,d)):(o[0]=o[1],d=qu(f,t,a,i,n,d)),i=0):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)&&(o[3]=n)}for(c!==0&&Ju(f,t,c,l,u),f.consume(t.events),n=-1;++n<t.events.length;){let e=t.events[n];e[0]===`enter`&&e[1].type===`table`&&(e[1]._align=Uu(t.events,n))}return e}function qu(e,t,n,r,i,a){let o=r===1?`tableHeader`:r===2?`tableDelimiter`:`tableData`;n[0]!==0&&(a.end=Object.assign({},Yu(t.events,n[0])),e.add(n[0],0,[[`exit`,a,t]]));let s=Yu(t.events,n[1]);if(a={type:o,start:Object.assign({},s),end:Object.assign({},s)},e.add(n[1],0,[[`enter`,a,t]]),n[2]!==0){let i=Yu(t.events,n[2]),a=Yu(t.events,n[3]),o={type:`tableContent`,start:Object.assign({},i),end:Object.assign({},a)};if(e.add(n[2],0,[[`enter`,o,t]]),r!==2){let r=t.events[n[2]],i=t.events[n[3]];if(r[1].end=Object.assign({},i[1].end),r[1].type=`chunkText`,r[1].contentType=`text`,n[3]>n[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},Yu(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function Ju(e,t,n,r,i){let a=[],o=Yu(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function Yu(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var Xu={name:`tasklistCheck`,tokenize:Qu};function Zu(){return{text:{91:Xu}}}function Qu(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return V(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return B(r)?t(r):H(r)?e.check({tokenize:q},t,n)(r):n(r)}}function q(e,t,n){return U(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function $u(e){return ar([gu(),Mu(),Bu(e),Wu(),Zu()])}var J={};function Y(e){let t=this,n=e||J,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push($u(n)),a.push(au()),o.push(ou(n))}function X({children:e,onClick:t,current:n}){return(0,k.jsx)(`button`,{type:`button`,className:`row-name`,"aria-current":n?`true`:void 0,onClick:e=>{e.stopPropagation(),t()},children:e})}function ed({realPath:e}){return e?pe(e)?(0,k.jsxs)(`span`,{className:`flag via-agents`,title:`Links to ${A(e)}; other agents read ~/.agents too`,children:[(0,k.jsx)(j,{name:`link`}),` ~/.agents`]}):(0,k.jsx)(`span`,{className:`via`,title:`Links to ${A(e)}`,children:(0,k.jsx)(j,{name:`link`})}):null}var td={tracked:`tracked in git`,untracked:`untracked`,ignored:`git-ignored`,"no-git":`outside git`};function nd({value:e,scope:t}){return t===`managed`?(0,k.jsx)(`span`,{className:`vis vis-personal`,children:`organisation`}):e?(0,k.jsx)(`span`,{className:`vis vis-${e}`,children:td[e]}):(0,k.jsx)(`span`,{className:`vis vis-personal`,children:`only you`})}function Z({label:e,children:t}){return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`dt`,{children:e}),(0,k.jsx)(`dd`,{children:t})]})}function rd({path:e}){let[t,n]=(0,v.useState)(null),r=(e,t)=>{n(e),setTimeout(()=>n(null),t)};return(0,k.jsxs)(`span`,{className:`path`,children:[(0,k.jsx)(`span`,{className:`mono`,children:A(e)}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button small`,"aria-label":`Copy path`,onClick:()=>{navigator.clipboard.writeText(e).then(()=>r(`copied`,1200),()=>r(`could not copy`,2400))},children:(0,k.jsx)(j,{name:`copy`})}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button small`,"aria-label":`Open in editor`,title:`Open in editor`,onClick:()=>{T.open(e).then(({editor:e})=>r(`opened with ${e}`,2400),e=>r(e instanceof Error?e.message:String(e),6e3))},children:(0,k.jsx)(j,{name:`open`})}),t&&(0,k.jsx)(`span`,{className:`copied`,role:`status`,children:t})]})}function id({text:e,markdown:t=!0}){let[n,r]=(0,v.useState)(!t);return(0,k.jsxs)(`section`,{className:`contents`,children:[(0,k.jsxs)(`div`,{className:`contents-bar`,children:[(0,k.jsx)(`span`,{children:`Contents`}),t&&(0,k.jsxs)(`fieldset`,{className:`segmented small`,"aria-label":`Contents view`,children:[(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":!n,onClick:()=>r(!1),children:[(0,k.jsx)(j,{name:`eye`}),` Read`]}),(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>r(!0),children:[(0,k.jsx)(j,{name:`code`}),` Raw`]})]})]}),n?(0,k.jsx)(`pre`,{className:`raw`,children:e}):(0,k.jsx)(`div`,{className:`prose`,children:(0,k.jsx)(Zs,{remarkPlugins:[Y],children:e})})]})}function ad(e){return e.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,``)}function od(e){return e}function sd(e,t){let[n=``,...r]=t.split(`.`),i=e.effective.find(e=>e.key===n&&e.from.length>0);if(!i)return{};let a=i.value;for(let e of r)a=typeof a==`object`&&a?a[e]:void 0;return a===void 0?{}:{set:i,value:a}}function cd({text:e}){return(0,k.jsx)(`div`,{className:`prose docs-text`,children:(0,k.jsx)(Zs,{components:{a:({href:e,children:t})=>(0,k.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,children:t})},children:e})})}function ld(e){return e.replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/[`*]/g,``)}function ud(e){return e.length===0?`~/.claude.json only`:e.length===4?`any settings file`:e.map(e=>xe(e).toLowerCase()).join(`, `)}var dd=od({id:`catalog`,title:`All settings`,rows:e=>Ke.map(t=>{let{set:n}=sd(e,t.key),r=n?.from.at(-1)??null;return{id:`cat:${t.key}`,section:`catalog`,line:r,item:t,...n?{set:n}:{}}}),columns:[{label:``,sort:e=>+!e.set},{label:`Setting`,sort:e=>e.item.key},{label:`What it does`},{label:`Files`,sort:e=>-e.item.scopes.length},{label:`Here`,sort:e=>+!e.set}],cells:(e,{view:t},n)=>{let r=e.item,{value:i}=sd(t,r.key);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:e.line&&(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:r.key})}),(0,k.jsx)(`td`,{className:`desc`,children:ld(r.summary)}),(0,k.jsx)(`td`,{className:`catalog-files`,children:r.scopes.length===0?(0,k.jsx)(`span`,{className:`muted small`,children:`~/.claude.json`}):Fe.filter(e=>r.scopes.includes(e)).map(e=>(0,k.jsx)(P,{line:e,hollow:!0},e))}),(0,k.jsx)(`td`,{className:`mono value`,children:i===void 0?(0,k.jsx)(`span`,{className:`muted`,children:`default`}):le(de(i))})]})},empty:()=>`ccdesk has no list of Claude Code's settings.`,text:e=>`${e.item.key} ${ld(e.item.summary)} ${e.item.category}`,label:e=>`setting ${e.item.key} (all settings)`,heading:e=>e.item.key,facet:{label:`Filter settings by area`,of:e=>e.item.category,order:Ye},Head:()=>(0,k.jsx)(`span`,{className:`tt-note`,children:`Every setting in Claude Code's settings reference; the ones set here show their value`}),Details:({row:e,actions:t})=>{let n=e.item,{view:r}=t,{set:i,value:a}=sd(r,n.key),[o=n.key,s]=n.key.split(`.`,2),c=n.scopes.filter(e=>Ie.includes(e)),l=We(o)!==void 0;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`verdict`,children:(0,k.jsx)(cd,{text:n.summary})}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Area`,children:n.category}),(0,k.jsx)(Z,{label:`Read from`,children:ud(n.scopes)}),(0,k.jsx)(Z,{label:`Here`,children:a===void 0?`not set, so the default applies`:(0,k.jsxs)(`span`,{className:`mono`,children:[le(de(a)),i&&` (${i.from.map(e=>xe(e).toLowerCase()).join(`, `)})`]})})]}),n.about&&n.about!==n.summary&&(0,k.jsx)(cd,{text:n.about}),n.type&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Values`}),(0,k.jsx)(cd,{text:n.type})]}),n.default&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Default`}),(0,k.jsx)(cd,{text:n.default})]}),(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:a===void 0?`Set it`:`Change it`}),n.scopes.length===0?(0,k.jsxs)(`p`,{className:`muted small`,children:[`Claude Code keeps this in ~/.claude.json, which ccdesk never changes. Use`,` `,(0,k.jsx)(`code`,{children:`/config`}),` in Claude Code.`]}):c.length===0?(0,k.jsx)(`p`,{className:`muted small`,children:`Only managed settings can set this.`}):s?(0,k.jsxs)(`p`,{className:`muted small`,children:[`It is a field of `,(0,k.jsx)(`code`,{children:o}),`; edit that setting to change it.`]}):l?(0,k.jsx)($e,{view:r,settingKey:n.key,defaultScope:[...i?.from??[]].reverse().find(e=>c.includes(e))??(c.includes(`user`)?`user`:c[0]??`user`),onSaved:t.onSaved},n.key):(0,k.jsx)(`p`,{className:`muted small`,children:`This key is not in the settings schema ccdesk ships, so it cannot be edited here.`})]}),(0,k.jsx)(`p`,{className:`muted small`,children:(0,k.jsxs)(`a`,{className:`docs-link`,href:n.docs,target:`_blank`,rel:`noreferrer`,children:[`Read it in the settings reference `,(0,k.jsx)(j,{name:`open`})]})})]})}}),fd=[`agent`,`skill`,`command`,`output style`,`plugin`];function pd(e){return e.skipped?`skipped by Claude Code: ${e.skipped}`:e.shadowedBy?`not used: ${A(e.shadowedBy)} defines this name with higher priority`:e.override===`off`?`hidden by skillOverrides`:e.override===`user-invocable-only`?`only when you call it: skillOverrides hides it from Claude`:e.override===`name-only`?`listed to Claude by name only (skillOverrides)`:null}var md=od({id:`extensions`,title:`Agents, skills & plugins`,short:`Extensions`,rows:e=>{let t=e.inventory;return[...[[`agent`,t.agents],[`skill`,t.skills],[`command`,t.commands],[`output style`,t.outputStyles]].flatMap(([e,t])=>t.map(t=>({id:`ent:${e}:${t.path}`,section:`extensions`,line:t.scope,item:t,kind:e}))),...t.plugins.map(e=>({id:`plug:${e.id}`,section:`extensions`,line:`plugin`,item:e,kind:`plugin`}))]},columns:[{label:``,sort:e=>e.line},{label:`Kind`,sort:e=>fd.indexOf(e.kind)},{label:`Name`,sort:e=>e.kind===`plugin`?e.item.id:e.item.id??e.item.name},{label:`Description`}],cells:(e,t,n)=>{if(e.kind===`plugin`){let t=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:`plugin`,hollow:!t.enabled})}),(0,k.jsx)(`td`,{children:`plugin`}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:t.id})}),(0,k.jsxs)(`td`,{className:`desc`,children:[`v`,t.version,` · `,t.note]})]})}let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{children:e.kind}),(0,k.jsxs)(`td`,{className:`mono`,children:[(0,k.jsx)(X,{onClick:n,children:r.id??r.name}),(0,k.jsx)(ed,{realPath:r.realPath})]}),(0,k.jsxs)(`td`,{className:`desc`,children:[pd(r)&&(0,k.jsx)(`span`,{className:`flag warn`,children:pd(r)}),` `,r.description]})]})},empty:()=>`No subagents, skills, commands or plugins.`,dimmed:e=>e.kind===`plugin`?!e.item.enabled:!!(e.item.shadowedBy||e.item.skipped)||e.item.override===`off`,text:e=>e.kind===`plugin`?`plugin ${e.item.id}`:`${e.kind} ${e.item.id??e.item.name} ${e.item.description}`,label:e=>e.kind===`plugin`?`plugin ${e.item.id}`:`${e.kind} ${e.item.id??e.item.name}`,heading:e=>e.kind===`plugin`?e.item.id:e.item.id??e.item.name,facet:{label:`Filter by kind`,of:e=>e.kind,order:fd},Head:({actions:e})=>(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>e.onAdd(`agent`),children:[(0,k.jsx)(j,{name:`plus`}),` Create agent`]}),Details:({row:e,actions:t})=>{if(e.kind===`plugin`){let t=e.item;return(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Version`,children:t.version}),(0,k.jsx)(Z,{label:`Status`,children:t.note}),(0,k.jsx)(Z,{label:`Installed for`,children:t.scope}),(0,k.jsx)(Z,{label:`Updated`,children:ce(t.updated)}),(0,k.jsx)(Z,{label:`Folder`,children:(0,k.jsx)(rd,{path:t.installPath})})]})}let n=e.item;return(0,k.jsxs)(k.Fragment,{children:[n.description&&(0,k.jsx)(`p`,{className:`verdict`,children:n.description}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Kind`,children:e.kind}),(0,k.jsx)(Z,{label:`Path`,children:(0,k.jsx)(rd,{path:n.path})}),n.realPath&&(0,k.jsx)(Z,{label:`Links to`,children:(0,k.jsx)(rd,{path:n.realPath})}),pd(n)?(0,k.jsx)(Z,{label:`Offered`,children:pd(n)}):n.listed===!1&&(0,k.jsx)(Z,{label:`Invoked`,children:`only when you call it; Claude does not pick it on its own`}),n.paths&&(0,k.jsx)(Z,{label:`Applies to`,children:(0,k.jsx)(`span`,{className:`mono`,children:n.paths.join(`, `)})}),n.model&&(0,k.jsx)(Z,{label:`Model`,children:n.model}),n.plugin&&(0,k.jsx)(Z,{label:`Plugin`,children:n.plugin})]}),e.kind===`agent`&&(n.scope===`user`||n.scope===`project`)?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change this agent`}),(0,k.jsx)(ot,{view:t.view,agent:n,onSaved:t.onSaved},e.id)]}):(0,k.jsx)(id,{text:ad(n.text)})]})}}),hd=od({id:`hooks`,title:`Hooks`,rows:e=>{let t=new Map;return e.inventory.hooks.map(e=>{let n=`hook:${e.sourcePath}:${e.event}:${e.matcher??``}:${e.command}`,r=t.get(n)??0;return t.set(n,r+1),{id:r===0?n:`${n}:${r}`,section:`hooks`,line:e.source,item:e}})},columns:[{label:``,sort:e=>e.item.source},{label:`Event`,sort:e=>e.item.event},{label:`Matcher`,sort:e=>e.item.matcher??``},{label:`Runs`}],cells:(e,t,n)=>{let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{children:(0,k.jsx)(X,{onClick:n,children:r.event})}),(0,k.jsx)(`td`,{className:`mono`,children:r.matcher??(0,k.jsx)(`span`,{className:`muted`,children:`any`})}),(0,k.jsxs)(`td`,{className:`mono value`,children:[le(r.command),!r.active&&(0,k.jsx)(`span`,{className:`flag warn`,title:r.note,children:`off`})]})]})},empty:()=>`No hooks run here.`,dimmed:e=>!e.item.active,text:e=>`${e.item.event} ${e.item.matcher??``} ${e.item.command}`,label:e=>`${e.item.event} hook: ${e.item.command}`,heading:e=>`${e.item.event} hook`,facet:{label:`Filter hooks by event`,of:e=>e.item.event},Head:({actions:e})=>(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>e.onAdd(`hook`),children:[(0,k.jsx)(j,{name:`plus`}),` Add hook`]}),Details:({row:e,actions:t})=>{let n=e.item;return(0,k.jsxs)(k.Fragment,{children:[!n.active&&(0,k.jsx)(`p`,{className:`verdict off`,children:n.note}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Event`,children:n.event}),(0,k.jsx)(Z,{label:`Matcher`,children:(0,k.jsx)(`span`,{className:`mono`,children:n.matcher??`any`})}),(0,k.jsx)(Z,{label:`Type`,children:n.type}),(0,k.jsx)(Z,{label:`Runs`,children:(0,k.jsx)(`span`,{className:`mono wrap`,children:le(n.command)})}),(0,k.jsx)(Z,{label:`Defined in`,children:(0,k.jsx)(rd,{path:n.sourcePath})}),n.plugin&&(0,k.jsx)(Z,{label:`Plugin`,children:n.plugin})]}),(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change this hook`}),(0,k.jsx)(mt,{view:t.view,hook:n,onSaved:t.onSaved},e.id)]})}}),gd={loaded:`loaded`,"on-match":`on match`,skipped:`skipped`},_d={loaded:`ok`,"on-match":``,skipped:`off`},vd=od({id:`instructions`,title:`Instructions`,rows:e=>e.instructions.map((e,t)=>({id:`ins:${e.path}`,section:`instructions`,line:e.scope,item:e,order:t+1})),columns:[{label:`#`,sort:e=>e.order},{label:``},{label:`File`,sort:e=>e.item.path},{label:`Status`,sort:e=>e.item.status},{label:`Why`},{label:`Lines`,sort:e=>e.item.lines},{label:`Visibility`,sort:e=>e.item.visibility??``}],cells:(e,{view:t},n)=>{let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{className:`num`,children:e.order}),(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:e.line,hollow:r.status!==`loaded`})}),(0,k.jsxs)(`td`,{className:`mono`,children:[(0,k.jsx)(X,{onClick:n,children:se(r.path,t.path)}),(0,k.jsx)(ed,{realPath:r.realPath}),r.checks.length>0&&(0,k.jsxs)(`span`,{className:`flag warn`,title:r.checks.join(`
|
|
59
59
|
`),children:[(0,k.jsx)(j,{name:`warn`}),` `,r.checks.length]})]}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:`status status-${r.status}`,children:gd[r.status]})}),(0,k.jsx)(`td`,{className:`why`,children:r.reason}),(0,k.jsx)(`td`,{className:`num`,children:r.lines}),(0,k.jsx)(`td`,{children:(0,k.jsx)(nd,{value:r.visibility,scope:r.scope})})]})},empty:()=>`No CLAUDE.md, AGENTS.md or rules apply here.`,dimmed:e=>e.item.status===`skipped`,text:e=>`${e.item.path} ${e.item.reason}`,label:e=>A(e.item.path),heading:e=>{let t=A(e.item.path),n=t.split(/[/\\]/);return n.length<=3?t:n.slice(-2).join(`/`)},facet:{label:`Filter instructions by status`,of:e=>gd[e.item.status],order:Object.values(gd)},Details:({row:e})=>{let t=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`verdict ${_d[t.status]}`,children:t.reason}),t.checks.length>0&&(0,k.jsx)(`ul`,{className:`plain checks-list`,children:t.checks.map(e=>(0,k.jsxs)(`li`,{className:`flag warn`,children:[(0,k.jsx)(j,{name:`warn`}),` `,e]},e))}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`File`,children:(0,k.jsx)(rd,{path:t.path})}),t.realPath&&(0,k.jsx)(Z,{label:`Links to`,children:(0,k.jsx)(rd,{path:t.realPath})}),pe(t.realPath)&&(0,k.jsx)(Z,{label:`Shared with`,children:`other coding agents that read ~/.agents`}),(0,k.jsx)(Z,{label:`Visibility`,children:(0,k.jsx)(nd,{value:t.visibility,scope:t.scope})}),(0,k.jsxs)(Z,{label:`Size`,children:[t.lines,` lines · `,(t.bytes/1024).toFixed(1),` KB`]}),t.mtime&&(0,k.jsx)(Z,{label:`Changed`,children:ce(t.mtime)}),t.paths&&(0,k.jsx)(Z,{label:`Applies to`,children:(0,k.jsx)(`span`,{className:`mono`,children:t.paths.join(`, `)})})]}),t.imports.length>0&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Imports`}),(0,k.jsx)(`ul`,{className:`plain`,children:t.imports.map(e=>(0,k.jsxs)(`li`,{className:`mono`,children:[`@`,e.raw,e.via!==t.path&&(0,k.jsxs)(`span`,{className:`muted`,children:[` via `,e.via.split(/[/\\]/).pop()]}),!e.exists&&(0,k.jsx)(`span`,{className:`flag bad`,children:`missing`}),e.tooLarge&&(0,k.jsx)(`span`,{className:`flag warn`,children:`over 4 MiB, not loaded`}),e.external&&(0,k.jsx)(`span`,{className:`flag`,children:`outside this project`}),e.pending&&(0,k.jsx)(`span`,{className:`flag warn`,title:`Claude Code asks before loading imports from outside the project`,children:`waits for your approval`})]},`${e.via}:${e.resolved}`))})]}),(0,k.jsx)(id,{text:t.text})]})}}),yd={active:`configured`,pending:`needs approval`,shadowed:`overridden`,disabled:`turned off`,rejected:`rejected`,blocked:`blocked`,invalid:`invalid`},bd=od({id:`mcp`,title:`MCP servers`,rows:e=>e.inventory.mcpServers.map(e=>({id:`mcp:${e.scope}:${e.plugin??``}:${e.name}`,section:`mcp`,line:e.scope,item:e})),columns:[{label:``,sort:e=>e.item.scope},{label:`Server`,sort:e=>e.item.name},{label:`Transport`,sort:e=>e.item.transport},{label:`Target`},{label:`Status`,sort:e=>Object.keys(yd).indexOf(e.item.status)}],cells:(e,t,n)=>{let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:r.name})}),(0,k.jsx)(`td`,{children:r.transport}),(0,k.jsx)(`td`,{className:`mono value`,children:le(r.target)}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:r.status===`active`?`muted`:`flag warn`,title:r.note,children:yd[r.status]})})]})},empty:()=>`No MCP servers are configured for this directory.`,dimmed:e=>e.item.status!==`active`,text:e=>`${e.item.name} ${e.item.target}`,label:e=>`MCP ${e.item.name}`,heading:e=>e.item.name,facet:{label:`Filter MCP servers by status`,of:e=>yd[e.item.status],order:Object.values(yd)},Head:({actions:e})=>(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>e.onAdd(`mcp`),children:[(0,k.jsx)(j,{name:`plus`}),` Add server`]}),Details:({row:e,actions:t})=>{let n=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`verdict ${n.status===`active`?`ok`:`off`}`,children:n.note??`Configured and allowed here, so Claude Code starts it with each session. ccdesk does not connect, so it cannot tell whether the server works.`}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Defined for`,children:n.scope}),n.plugin&&(0,k.jsx)(Z,{label:`Plugin`,children:n.plugin}),(0,k.jsx)(Z,{label:`Transport`,children:n.transport}),(0,k.jsx)(Z,{label:`Target`,children:(0,k.jsx)(`span`,{className:`mono wrap`,children:le(n.target)})}),(0,k.jsx)(Z,{label:`Defined in`,children:(0,k.jsx)(rd,{path:n.sourcePath})}),n.approvals&&(0,k.jsx)(Z,{label:`Approval`,children:(0,k.jsx)(`ul`,{className:`plain`,children:n.approvals.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`span`,{className:`mono`,children:e.key}),` `,e.source===`claude-json`?`from your answer to Claude Code's prompt`:`in ${e.source} settings`,!e.counts&&`, which counts once you trust this folder`,(0,k.jsx)(`br`,{}),(0,k.jsx)(rd,{path:e.path})]},`${e.key}:${e.path}`))})})]}),(0,k.jsx)(`p`,{className:`muted small`,children:`Environment variables and headers are hidden.`}),(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change this server`}),(0,k.jsx)(yt,{view:t.view,server:n,onSaved:t.onSaved},e.id)]})}});function xd(e){return e.replace(/[^a-zA-Z0-9]/g,`-`)}var Sd=[`user`,`feedback`,`project`,`reference`,`unknown`];function Cd({type:e}){return(0,k.jsxs)(`span`,{className:`type`,children:[(0,k.jsx)(`span`,{className:`type-dot type-${e}`,"aria-hidden":`true`}),e]})}var wd=od({id:`memory`,title:`Memory`,rows:e=>e.memory.memories.map(e=>({id:`mem:${e.path}`,section:`memory`,line:`memory`,item:e})),columns:[{label:``},{label:`Name`,sort:e=>e.item.name},{label:`Type`,sort:e=>Sd.indexOf(e.item.type)},{label:`Description`},{label:`Checks`,sort:e=>Number(!e.item.inIndex)*10+e.item.brokenLinks.length},{label:`Updated`,sort:e=>e.item.mtime}],cells:(e,{sharedNames:t},n)=>{let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:`memory`})}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:r.name})}),(0,k.jsx)(`td`,{children:(0,k.jsx)(Cd,{type:r.type})}),(0,k.jsx)(`td`,{className:`desc`,children:r.description}),(0,k.jsxs)(`td`,{className:`checks`,children:[!r.inIndex&&(0,k.jsx)(`span`,{className:`flag bad`,title:`MEMORY.md does not mention it`,children:`not in index`}),r.brokenLinks.length>0&&(0,k.jsxs)(`span`,{className:`flag warn`,children:[r.brokenLinks.length,` broken link`,r.brokenLinks.length===1?``:`s`]}),t.has(r.name)&&(0,k.jsx)(`span`,{className:`flag`,children:`also elsewhere`})]}),(0,k.jsx)(`td`,{className:`num`,title:new Date(r.mtime).toLocaleString(),children:ce(r.mtime)})]})},empty:e=>e.memory.index?`MEMORY.md is here, but no memory files.`:`Claude hasn't saved any memory for this directory yet.`,text:e=>`${e.item.name} ${e.item.description} ${e.item.type} ${e.item.body}`,label:e=>`memory ${e.item.name}`,heading:e=>e.item.name,facet:{label:`Filter memory by type`,of:e=>e.item.type,order:Sd,render:e=>(0,k.jsx)(Cd,{type:e})},Head:Td,Details:Od});function Td({actions:e}){let t=e.view.memory,n=t.index,[r,i]=(0,v.useState)(!1);return(0,k.jsxs)(k.Fragment,{children:[t.note&&(0,k.jsxs)(`span`,{className:`flag${t.loaded?``:` warn`}`,title:A(t.dir),children:[!t.loaded&&(0,k.jsx)(j,{name:`warn`}),` `,t.note]}),n?.truncated&&(0,k.jsxs)(`span`,{className:`flag warn`,title:`Claude Code reads only the first 200 lines or 25KB of MEMORY.md`,children:[(0,k.jsx)(j,{name:`warn`}),` MEMORY.md: lines past `,n.loadedLines,` are not loaded`]}),n&&n.missingFiles.length>0&&(0,k.jsxs)(`span`,{className:`fix`,children:[(0,k.jsxs)(`span`,{className:`flag warn`,title:n.missingFiles.join(`, `),children:[(0,k.jsx)(j,{name:`warn`}),` `,n.missingFiles.length,` index`,` `,n.missingFiles.length===1?`line points`:`lines point`,` at missing files`]}),!t.custom&&!r&&(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>i(!0),children:[(0,k.jsx)(j,{name:`trash`}),` Remove `,n.missingFiles.length===1?`line`:`lines`,`…`]})]}),n&&r&&(0,k.jsx)(Dd,{action:`remove-dead`,path:n.path,verb:`Remove lines`,busyVerb:`Removing…`,message:`Removed ${n.missingFiles.length===1?`the dead line`:`dead lines`} from MEMORY.md`,actions:e,onClose:()=>i(!1)})]})}function Ed(e){return e.split(/[/\\]/).at(-1)??e}function Dd({action:e,path:t,verb:n,busyVerb:r,message:i,danger:a=!1,select:o,actions:s,onClose:c}){let[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(!1);return(0,v.useEffect)(()=>{T.previewMemory(e,t).then(u,e=>f(e instanceof Error?e.message:String(e)))},[e,t]),(0,k.jsxs)(`section`,{className:`review memory-review`,"aria-label":`Review memory change`,children:[d?(0,k.jsx)(`p`,{className:`flag bad`,role:`alert`,children:d}):l?l.files.map(e=>(0,k.jsxs)(`div`,{className:`memory-review-file`,children:[(0,k.jsxs)(`p`,{className:`sub-title small`,title:A(e.path),children:[(0,k.jsx)(`span`,{className:`mono`,children:Ed(e.path)}),e.after===null&&(0,k.jsx)(`span`,{className:`muted`,children:` is deleted; a backup is kept and you can undo it`})]}),(0,k.jsx)(re,{before:e.before??``,after:e.after??``})]},e.path)):(0,k.jsx)(`p`,{className:`muted small`,children:`Reading the files…`}),(0,k.jsxs)(`div`,{className:`editor-buttons`,children:[l&&!d&&(0,k.jsx)(`button`,{type:`button`,className:a?`danger`:`primary`,disabled:p,onClick:()=>{m(!0),s.onChange(()=>T.changeMemory(e,t,l.revision),i,o).finally(c)},children:p?r:n}),(0,k.jsx)(`button`,{type:`button`,onClick:c,disabled:p,children:`Cancel`})]})]})}function Od({row:e,actions:t}){let n=e.item,r=t.view.memory.custom===!0,[i,a]=(0,v.useState)(!1),[o,s]=(0,v.useState)(!1),c=t.overview?.sharedMemories.find(e=>e.name===n.name)?.stores??[],l=n.path.split(/[/\\]/).at(-3),u=c.filter(e=>xd(e.projectPath)!==l);return(0,k.jsxs)(k.Fragment,{children:[n.description&&(0,k.jsx)(`p`,{className:`verdict`,children:n.description}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Type`,children:(0,k.jsx)(Cd,{type:n.type})}),(0,k.jsx)(Z,{label:`File`,children:(0,k.jsx)(rd,{path:n.path})}),(0,k.jsx)(Z,{label:`Changed`,children:ce(n.mtime)}),(0,k.jsx)(Z,{label:`In MEMORY.md`,children:n.inIndex?`yes`:(0,k.jsxs)(`span`,{className:`fix`,children:[(0,k.jsx)(`span`,{className:`flag bad`,children:`no, so Claude won't see it at session start`}),!r&&!o&&(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>s(!0),children:[(0,k.jsx)(j,{name:`plus`}),` Add to MEMORY.md…`]})]})}),n.linkedFrom.length>0&&(0,k.jsx)(Z,{label:`Linked from`,children:(0,k.jsx)(`span`,{className:`mono`,children:n.linkedFrom.join(`, `)})}),n.brokenLinks.length>0&&(0,k.jsx)(Z,{label:`Broken links`,children:(0,k.jsx)(`span`,{className:`mono`,children:n.brokenLinks.map(e=>`[[${e}]]`).join(`, `)})})]}),o&&(0,k.jsx)(Dd,{action:`add`,path:n.path,verb:`Add to MEMORY.md`,busyVerb:`Adding…`,message:`Added ${n.name} to MEMORY.md`,actions:t,onClose:()=>s(!1)}),u.length>0&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Also saved in`}),(0,k.jsx)(`ul`,{className:`plain`,children:u.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`button`,{type:`button`,className:`link`,onClick:()=>t.onOpenDirectory(e.projectPath),children:A(e.projectPath)}),(0,k.jsx)(`span`,{className:`flag ${e.hash===n.hash?``:`warn`}`,children:e.hash===n.hash?`identical`:`different text`})]},e.projectPath))}),u.some(e=>e.hash===n.hash)&&(0,k.jsx)(`p`,{className:`muted small`,children:`Deleting this copy keeps the identical one saved elsewhere.`})]}),!r&&(0,k.jsx)(`div`,{className:`actions`,children:i?(0,k.jsxs)(`section`,{className:`confirm`,"aria-label":`Confirm delete`,children:[(0,k.jsxs)(`p`,{children:[`Delete `,(0,k.jsx)(`strong`,{children:n.file}),n.inIndex?` and its line in MEMORY.md`:``,`?`,n.linkedFrom.length>0&&` ${n.linkedFrom.length} other ${n.linkedFrom.length===1?`memory links`:`memories link`} here and will have a broken link.`]}),(0,k.jsx)(Dd,{action:`delete`,path:n.path,verb:`Delete memory`,busyVerb:`Deleting…`,message:`Deleted ${n.file}`,danger:!0,select:null,actions:t,onClose:()=>a(!1)})]}):(0,k.jsxs)(`button`,{type:`button`,className:`quiet-danger`,onClick:()=>a(!0),children:[(0,k.jsx)(j,{name:`trash`}),` Delete memory…`]})}),(0,k.jsx)(id,{text:n.body})]})}function kd(e){let t=e.since?` since ${new Date(e.since).toLocaleDateString(void 0,{day:`numeric`,month:`short`})}`:``,n=e.repository?`in this repository`:`here`;return`${e.sessions===1?`the session`:`the ${me(e.sessions,`session`)}`} started ${n}${t}`}function Ad(e){let t=new Set(e.permissions.flatMap(e=>e.kind===`rule`&&e.inEffect?[e.rule]:[]));return(e.usage?.approvals??[]).filter(e=>!t.has(e.rule))}function jd(e){return`suggested`in e}function Md(e,t){return e.kind===`rule`&&e.list===`allow`&&e.inEffect&&!e.decidedBy&&!!t&&t.sessions>0&&t.matches[e.rule]===0}var Nd={allow:`runs without asking`,ask:`asks you first`,deny:`blocked`},Pd=[`deny`,`ask`,`allow`],Fd=od({id:`permissions`,title:`Permissions`,rows:e=>{let t=new Set,n=e.permissions.map(e=>{let n=`perm:${e.scope}:${e.kind===`rule`?`${e.list}:${e.rule}`:`${e.kind}:${e.value}`}`,r=n;for(let e=2;t.has(r);e++)r=`${n}#${e}`;return t.add(r),{id:r,section:`permissions`,line:e.scope,item:e}}),r=Ad(e).map(e=>({id:`perm:suggested:${e.rule}`,section:`permissions`,line:null,item:e,suggested:!0}));return[...n,...r]},columns:[{label:``,sort:e=>jd(e)?`~`:e.item.scope},{label:`List`,sort:e=>jd(e)?4:e.item.kind===`rule`?Pd.indexOf(e.item.list):3},{label:`Rule`,sort:e=>`rule`in e.item?e.item.rule:e.item.value},{label:`Outcome`}],cells:(e,t,n)=>{if(jd(e))return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:`muted`,children:`suggested`})}),(0,k.jsx)(`td`,{className:`mono value`,children:(0,k.jsx)(X,{onClick:n,children:e.item.rule})}),(0,k.jsxs)(`td`,{className:`desc`,children:[`you allowed it `,me(e.item.approved,`time`),(0,k.jsxs)(`span`,{className:`muted`,children:[` · `,ce(e.item.last)]})]})]});let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{children:r.kind===`rule`?(0,k.jsx)(`span`,{className:`perm perm-${r.list}`,children:r.list}):(0,k.jsx)(`span`,{className:`muted`,children:r.kind===`defaultMode`?`default mode`:`extra folder`})}),(0,k.jsx)(`td`,{className:`mono value`,children:(0,k.jsx)(X,{onClick:n,children:r.kind===`rule`?r.rule:le(r.value)})}),(0,k.jsx)(`td`,{className:`desc`,children:r.inEffect?r.kind===`rule`&&r.decidedBy?(0,k.jsxs)(`span`,{className:`flag warn`,children:[r.decidedBy.list===`deny`?`denied`:`asks first`,`: same rule in`,` `,r.decidedBy.list,` (`,r.decidedBy.scope,`)`]}):r.kind===`rule`?(0,k.jsxs)(k.Fragment,{children:[Nd[r.list],Md(r,t.view.usage)&&(0,k.jsx)(`span`,{className:`flag`,children:`covered no call here`})]}):r.kind===`defaultMode`?`how sessions start`:`Claude may read and edit here`:(0,k.jsx)(`span`,{className:`flag warn`,children:r.note??`not in effect`})})]})},empty:()=>`No settings file sets permissions here, so Claude asks before using tools that need it.`,dimmed:e=>!jd(e)&&(!e.item.inEffect||e.item.kind===`rule`&&!!e.item.decidedBy),text:e=>jd(e)?`permission suggested allow ${e.item.rule}`:e.item.kind===`rule`?`permission ${e.item.list} ${e.item.rule}`:`permission ${e.item.kind} ${e.item.value}`,label:e=>jd(e)?`suggested allow ${e.item.rule}`:e.item.kind===`rule`?`${e.item.list} ${e.item.rule}`:`${e.item.kind} ${e.item.value}`,heading:e=>`rule`in e.item?e.item.rule:e.item.kind===`defaultMode`?`Default permission mode`:`Extra folder`,facet:{label:`Filter permissions by list`,of:e=>jd(e)?`suggested`:e.item.kind===`rule`?e.item.list:`other`,order:[`deny`,`ask`,`allow`,`other`,`suggested`]},Head:({actions:e})=>(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`span`,{className:`tt-note`,children:`Checked deny, then ask, then allow, across every file`}),(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>e.onAdd(`permission`),children:[(0,k.jsx)(j,{name:`plus`}),` Add rule`]})]}),Details:({row:e,actions:t})=>{if(jd(e))return(0,k.jsx)(Ld,{row:e,actions:t},e.id);let n=e.item,{view:r}=t,i=n.kind===`rule`?n.path:r.settings.find(e=>e.scope===n.scope&&!e.legacy)?.path;return(0,k.jsxs)(k.Fragment,{children:[n.inEffect?n.kind===`rule`?(0,k.jsx)(`p`,{className:`verdict ${n.decidedBy?`off`:n.list===`deny`?``:`ok`}`,children:n.decidedBy?`This ${n.list} rule never applies: the same rule is in ${n.decidedBy.list} (${n.decidedBy.scope} settings), which is checked first.`:{allow:`Claude uses matching tools without asking, unless a deny or ask rule matches first.`,ask:`Claude asks before using matching tools, unless a deny rule matches first.`,deny:`Claude may not use matching tools. No allow rule in any file can undo this.`}[n.list]}):(0,k.jsx)(`p`,{className:`verdict`,children:n.kind===`defaultMode`?`Sessions here start in ${n.value} mode.`:`Claude may read and edit files in this folder as well as the project.`}):(0,k.jsx)(`p`,{className:`verdict off`,children:n.note}),(0,k.jsxs)(`dl`,{className:`fields`,children:[n.kind===`rule`&&(0,k.jsx)(Z,{label:`List`,children:n.list}),(0,k.jsx)(Z,{label:n.kind===`rule`?`Rule`:`Value`,children:(0,k.jsx)(`span`,{className:`mono wrap`,children:n.kind===`rule`?n.rule:le(n.value)})}),(0,k.jsxs)(Z,{label:`Set in`,children:[xe(n.scope),` settings`]}),n.kind===`rule`&&n.list!==`deny`&&n.inEffect&&(0,k.jsx)(Z,{label:`Covered here`,children:(0,k.jsx)(Id,{rule:n,usage:r.usage})}),i&&(0,k.jsx)(Z,{label:`File`,children:(0,k.jsx)(rd,{path:i})})]}),(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`How Claude Code decides`}),(0,k.jsx)(`p`,{className:`muted small`,children:`Rules from every settings file are pooled and checked in order: deny, then ask, then allow. The first match decides, so a deny in any file beats an allow in any other.`})]}),n.kind===`rule`?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change this rule`}),(0,k.jsx)(dt,{view:r,rule:n,onSaved:t.onSaved},e.id)]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change permissions`}),(0,k.jsx)($e,{view:r,settingKey:`permissions`,defaultScope:Ie.includes(n.scope)?n.scope:`user`,onSaved:t.onSaved},n.scope)]})]})}});function Id({rule:e,usage:t}){if(t===void 0)return(0,k.jsx)(`span`,{className:`muted`,children:`counting…`});if(t===null)return(0,k.jsx)(`span`,{className:`muted`,children:`ccdesk could not finish counting the transcripts`});let n=t.matches[e.rule];return n===void 0?(0,k.jsx)(`span`,{className:`muted`,children:`counting…`}):n===null?(0,k.jsx)(`span`,{className:`muted`,children:`not counted: ccdesk matches tool, command and domain rules`}):t.sessions===0?(0,k.jsx)(`span`,{className:`muted`,children:`no sessions here yet`}):(0,k.jsxs)(k.Fragment,{children:[me(n,`call`),` in `,kd(t),n===0&&e.list===`allow`&&(0,k.jsxs)(`span`,{className:`muted small`,children:[` `,e.scope===`user`?`Your user settings apply in every directory, so others may still use it.`:`If Claude no longer needs it here, removing it narrows what runs without asking.`]})]})}function Ld({row:e,actions:t}){let{view:n}=t,r=ct(n,t.onSaved),[i,a]=(0,v.useState)(`local`),o=lt(n,i),{rule:s,approved:c,last:l}=e.item,u=/^Bash\((.+) \*\)$/.exec(s)?.[1];return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`p`,{className:`verdict`,children:[`Claude Code asked you `,me(c,`time`),` about calls this rule covers, and you allowed each one, refusing none of the calls it covers. An allow rule lets Claude make them without asking, unless a deny or ask rule matches first.`]}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Rule`,children:(0,k.jsx)(`span`,{className:`mono wrap`,children:s})}),(0,k.jsx)(Z,{label:`You allowed`,children:me(c,`call`)}),(0,k.jsx)(Z,{label:`Last asked`,children:ce(l)})]}),u&&(0,k.jsxs)(`p`,{className:`muted small`,children:[`It allows every command that starts with `,(0,k.jsx)(`code`,{children:u}),`, with any arguments.`]}),(0,k.jsxs)(`section`,{className:`sub editor`,"aria-label":`Allow this rule`,children:[(0,k.jsx)(`h3`,{children:`Allow it`}),(0,k.jsx)(`p`,{className:`muted small`,children:`In local settings it applies only for you here; in project settings, for everyone working in this repository; in your user settings, in every project.`}),(0,k.jsx)(ft,{view:n,scope:i,onPick:e=>{a(e),r.cancel()}}),(0,k.jsx)(`p`,{className:`muted small mono wrap`,children:o?A(o):``}),!r.reviewing&&(0,k.jsx)(`div`,{className:`editor-buttons`,children:(0,k.jsx)(`button`,{type:`button`,className:`primary`,disabled:r.busy||!o,onClick:()=>o&&void r.start(o,void 0,{list:`allow`,rule:s},`Allowed ${s} in ${xe(i).toLowerCase()} settings`),children:`Review change`})}),r.shown]}),(0,k.jsxs)(`p`,{className:`muted small`,children:[`Counted from Claude Code's transcripts for`,` `,n.usage?kd(n.usage):`this directory`,`. ccdesk reads each call's tool, command or address and whether you allowed it, and shows only counts and rule patterns, never what was in a session.`]})]})}var Rd=od({id:`settings`,title:`Settings`,rows:e=>e.effective.map(e=>{let t=e.from;return{id:`set:${e.key}`,section:`settings`,line:t[t.length-1]??`user`,item:e,lines:t}}),columns:[{label:``,sort:e=>Fe.indexOf(e.item.from[0]??`user`)},{label:`Key`,sort:e=>e.item.key},{label:`Value`},{label:`Overrides`}],cells:(e,t,n)=>{let r=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{className:`bullets`,children:e.lines.map(e=>(0,k.jsx)(P,{line:e},e))}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:r.key})}),(0,k.jsx)(`td`,{className:`mono value`,children:r.from.length===0?(0,k.jsx)(`span`,{className:`muted`,children:`ignored`}):le(de(r.value))}),(0,k.jsxs)(`td`,{className:`beat`,children:[r.merged?(0,k.jsx)(`span`,{className:`muted`,children:`merged`}):r.overridden.map(e=>(0,k.jsxs)(`span`,{className:`beaten`,children:[(0,k.jsx)(P,{line:e.scope,hollow:!0}),` `,(0,k.jsx)(`s`,{children:le(de(e.value))})]},e.scope)),r.ignored.map(e=>(0,k.jsxs)(`span`,{className:`beaten`,title:e.reason,children:[(0,k.jsx)(P,{line:e.scope,hollow:!0}),` `,(0,k.jsx)(`s`,{children:le(de(e.value))}),` `,(0,k.jsx)(`span`,{className:`flag warn`,children:`ignored`})]},`ignored-${e.scope}`))]})]})},empty:()=>`No settings files set anything here.`,tableClass:e=>e.some(e=>e.item.merged||e.item.overridden.length>0||e.item.ignored.length>0)?``:`no-overrides`,dimmed:e=>e.item.from.length===0,text:e=>`${e.item.key} ${JSON.stringify(e.item.value)}`,label:e=>`setting ${e.item.key}`,heading:e=>e.item.key,Head:({actions:e})=>(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`button`,{type:`button`,className:`head-action`,onClick:e.onCompare,children:`Compare with…`}),(0,k.jsxs)(`button`,{type:`button`,className:`head-action`,onClick:()=>e.onAdd(`setting`),children:[(0,k.jsx)(j,{name:`plus`}),` Add setting`]})]}),Details:({row:e,actions:t})=>{let n=e.item,{view:r}=t,i=e=>{let t=r.settings.filter(t=>t.scope===e);return t.find(e=>e.data?.[n.key]!==void 0)??t.find(e=>!e.legacy)};return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`verdict ${n.from.length===0?`off`:`ok`}`,children:n.from.length===0?`Claude Code ignores this value: ${n.ignored[0]?.reason??``}.`:n.merged?`Lists and objects from these files are combined.`:`${xe(n.from[0]??`user`)} settings decide this value.`}),(0,k.jsx)(`h3`,{className:`sub-title`,children:`Every file that sets it`}),(0,k.jsx)(`table`,{className:`layers`,children:(0,k.jsx)(`tbody`,{children:Fe.map(e=>{let t=i(e),r=t?.data?.[n.key],a=n.ignored.find(t=>t.scope===e);return(0,k.jsxs)(`tr`,{className:r===void 0?`unset`:n.from.includes(e)?`wins`:`lost`,title:a?.reason,children:[(0,k.jsx)(`th`,{scope:`row`,children:(0,k.jsx)(P,{line:e,hollow:r===void 0})}),(0,k.jsx)(`td`,{className:`mono`,children:r===void 0?t?.exists?`not set`:`no file`:`${de(r)}${a?` (ignored)`:``}`})]},e)})})}),(0,k.jsx)(`h3`,{className:`sub-title`,children:`Value Claude Code uses`}),n.note&&(0,k.jsx)(`p`,{className:`muted small`,children:n.note}),(0,k.jsx)(`pre`,{className:`raw`,children:JSON.stringify(n.value,null,2)}),(0,k.jsx)(`h3`,{className:`sub-title`,children:`Change it`}),(0,k.jsx)($e,{view:r,settingKey:n.key,defaultScope:[...n.from].reverse().find(e=>Ie.includes(e))??`user`,onSaved:t.onSaved},n.key),(0,k.jsx)(`dl`,{className:`fields`,children:n.from.map(e=>{let t=i(e);return t?(0,k.jsx)(Z,{label:`${xe(e)} file`,children:(0,k.jsx)(rd,{path:t.path})},e):null})})]})}});function zd(e,t){return e&&(e.tools.find(e=>e.tool===t)?.calls??0)}function Bd(e,t){if(e===void 0)return`counting…`;if(e===null)return`ccdesk could not finish counting the transcripts`;if(e.sessions===0)return`no sessions here yet`;let n=e.tools.find(e=>e.tool===t);if(!n)return`not called in ${kd(e)}`;let r=n.approved+n.refused;return`${me(n.calls,`call`)} in ${kd(e)}${r>0?`; asked you ${me(r,`time`)}, you refused ${n.refused}`:``}`}function Vd(e){switch(e.verdict){case`denied`:return`removed`;case`asks`:return`asks every time`;case`allowed`:return`runs without asking`;case`default`:return e.asks?`asks first`:`no approval needed`}}function Hd(e){let t=e.decidedBy,n=t?`${t.rule} in ${xe(t.scope).toLowerCase()} settings`:``;switch(e.verdict){case`denied`:return`Denied by ${n}, so Claude Code removes the tool from Claude's context.`;case`asks`:return`Claude asks you every time it wants this tool, because of ${n}.`;case`allowed`:return`Claude uses it without asking, because of ${n}, unless a rule below for some uses denies or asks first.`;case`default`:return e.name===`EndConversation`?`No permission rule or PreToolUse hook applies to this tool while Claude has any other tool, so it is never blocked and never asks.`:e.asks?`No rule names the whole tool, so Claude asks before using it.`:`No rule names the whole tool, and it needs no approval. File tools still ask for paths outside the working directories.`}}function Ud(e){let t=e.permissions.find(e=>e.kind===`defaultMode`&&e.inEffect);return t?.kind===`defaultMode`?t.value:`default`}function Wd(e,t){return e.permissions.filter(e=>e.kind===`rule`&&e.inEffect&&(t.removedBy??[]).some(t=>t.list===e.list&&t.rule===e.rule&&t.scope===e.scope))}function Gd({tool:e,actions:t}){let{view:n}=t,r=ct(n,t.onSaved),[i,a]=(0,v.useState)(!1),[o,s]=(0,v.useState)(`user`);if(e.name===`EndConversation`)return null;let c=Wd(n,e);if(e.verdict===`denied`&&c.length>0){let e=c.filter(e=>!Ie.includes(e.scope));return(0,k.jsxs)(`section`,{className:`sub editor`,"aria-label":`Turn back on`,children:[(0,k.jsx)(`h3`,{children:`Turn back on`}),e.length>0?(0,k.jsx)(`p`,{className:`muted small`,children:`Managed settings turn it off, so it stays off whatever your files say.`}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`muted small`,children:c.length===1?`Removing this rule gives Claude the tool again.`:`Each of these rules turns it off; remove all of them to give Claude the tool again.`}),(0,k.jsx)(`ul`,{className:`plain`,children:c.map(e=>(0,k.jsxs)(`li`,{className:`tool-switch-rule`,children:[(0,k.jsx)(P,{line:e.scope}),` `,(0,k.jsx)(`span`,{className:`mono`,children:e.rule}),(0,k.jsxs)(`span`,{className:`muted small`,children:[` `,`in `,xe(e.scope).toLowerCase(),` settings`]}),!e.rule.includes(`(`)&&e.rule.includes(`*`)&&(0,k.jsx)(`span`,{className:`flag warn`,children:`also turns off every other tool it matches`}),(0,k.jsx)(`button`,{type:`button`,className:`head-action`,disabled:r.busy||r.reviewing,onClick:()=>void r.start(e.path,{list:`deny`,rule:e.rule},void 0,`Removed ${e.rule} from deny`),children:`Remove…`})]},`${e.path}:${e.rule}`))})]}),r.shown]})}let l=lt(n,o);return(0,k.jsx)(`section`,{className:`sub editor`,"aria-label":`Turn off for Claude`,children:i?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h3`,{children:`Turn off for Claude`}),(0,k.jsx)(`p`,{className:`muted small`,children:`A deny rule naming the whole tool removes it from Claude's context. In your user settings it applies in every project; in project settings, for everyone working in this repository; in local settings, only for you here.`}),(0,k.jsx)(ft,{view:n,scope:o,onPick:e=>{s(e),r.cancel()}}),(0,k.jsx)(`p`,{className:`muted small mono wrap`,children:l?A(l):``}),!r.reviewing&&(0,k.jsxs)(`div`,{className:`editor-buttons`,children:[(0,k.jsx)(`button`,{type:`button`,className:`primary`,disabled:r.busy||!l,onClick:()=>l&&void r.start(l,void 0,{list:`deny`,rule:e.name},`Turned off ${e.name} in ${xe(o).toLowerCase()} settings`),children:`Review change`}),(0,k.jsx)(`button`,{type:`button`,onClick:()=>a(!1),children:`Cancel`})]}),r.shown]}):(0,k.jsxs)(`button`,{type:`button`,className:`quiet-danger`,onClick:()=>a(!0),children:[(0,k.jsx)(j,{name:`block`}),` Turn off for Claude…`]})})}function Kd({text:e}){return e.split(/`([^`]+)`/).map((e,t)=>t%2==1?(0,k.jsx)(`code`,{children:e},t):e)}var qd=[vd,Rd,Fd,od({id:`tools`,title:`Built-in tools`,short:`Tools`,rows:e=>e.tools.map(t=>({id:`tool:${t.name}`,section:`tools`,line:t.decidedBy?.scope??null,item:t,calls:zd(e.usage,t.name)})),columns:[{label:``},{label:`Tool`,sort:e=>e.item.name},{label:`Outcome`,sort:e=>Vd(e.item)},{label:`Rules and hooks`,sort:e=>e.item.scoped.length+e.item.hooks},{label:`Used`,sort:e=>e.calls??-1},{label:`Description`}],cells:(e,t,n)=>{let r=e.item,i=r.scoped.filter(e=>!e.unchecked);return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`td`,{children:e.line&&(0,k.jsx)(P,{line:e.line})}),(0,k.jsx)(`td`,{className:`mono`,children:(0,k.jsx)(X,{onClick:n,children:r.name})}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:`tool-outcome tool-${r.verdict==="default"?r.asks?`asks`:`free`:r.verdict}`,children:Vd(r)})}),(0,k.jsxs)(`td`,{className:`checks`,children:[i.length>0&&(0,k.jsxs)(`span`,{className:`flag`,title:i.map(e=>`${e.list} ${e.rule}`).join(`
|
|
60
|
-
`),children:[me(i.length,`rule`),` for some uses`]}),i.length<r.scoped.length&&(0,k.jsx)(`span`,{className:`flag warn`,title:`Claude Code never checks a path rule on this tool`,children:me(r.scoped.length-i.length,`unchecked rule`)}),r.hooks>0&&(0,k.jsx)(`span`,{className:`flag`,children:me(r.hooks,`hook`)})]}),(0,k.jsx)(`td`,{className:`num${e.calls?` used`:``}`,children:e.calls===void 0?`…`:e.calls===null?(0,k.jsx)(`span`,{className:`muted`,title:`ccdesk could not finish counting the transcripts`,children:`?`}):e.calls}),(0,k.jsx)(`td`,{className:`desc`,children:(0,k.jsx)(Kd,{text:r.description.split(/(?<=\.)\s/)[0]??``})})]})},empty:()=>`ccdesk has no list of built-in tools.`,dimmed:e=>e.item.verdict===`denied`,text:e=>`tool ${e.item.name} ${Vd(e.item)} ${e.item.description}`,label:e=>`tool ${e.item.name}`,heading:e=>e.item.name,facet:{label:`Filter tools by outcome`,of:e=>Vd(e.item),order:[`removed`,`asks every time`,`asks first`,`runs without asking`,`no approval needed`]},Head:({actions:e})=>(0,k.jsxs)(`span`,{className:`tt-note`,children:[`As in Manual mode; sessions here start in `,Ud(e.view),` mode`]}),Details:({row:e,actions:t})=>{let n=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`verdict ${n.verdict===`denied`?`off`:n.verdict===`allowed`||!n.asks&&n.verdict==="default"?`ok`:``}`,children:Hd(n)}),(0,k.jsx)(`p`,{children:(0,k.jsx)(Kd,{text:n.description})}),n.scoped.length>0&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Rules for some uses`}),(0,k.jsx)(`ul`,{className:`plain`,children:n.scoped.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(P,{line:e.scope}),` `,(0,k.jsx)(`span`,{className:`perm perm-${e.list}`,children:e.list}),` `,(0,k.jsx)(`span`,{className:`mono`,children:e.rule}),e.unchecked&&(0,k.jsx)(`span`,{className:`flag warn`,children:`never checked: Claude Code checks paths against Edit and Read rules only`})]},`${e.scope}:${e.list}:${e.rule}`))}),(0,k.jsx)(`p`,{className:`muted small`,children:`Checked deny, then ask, then allow, before the rule for the whole tool applies.`})]}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Manual mode`,children:n.asks?`asks before using it`:`no approval needed`}),(0,k.jsx)(Z,{label:`Used here`,children:Bd(t.view.usage,n.name)}),(0,k.jsx)(Z,{label:`PreToolUse hooks`,children:n.hooks===0?`none`:`${me(n.hooks,`hook`)} run before each use`})]}),(0,k.jsx)(Gd,{tool:n,actions:t},`${n.name}:${n.verdict}`),(0,k.jsx)(`p`,{className:`muted small`,children:`Permission modes other than Manual change which uses ask. Tool names and descriptions come from Claude Code's tools reference.`})]})}}),wd,hd,bd,md,dd];function Jd(e){let t=qd.find(t=>t.id===e);if(!t)throw Error(`Unknown section ${e}`);return t}function Yd(e){return qd.flatMap(t=>t.rows(e))}var Xd={setting:`Add a setting`,permission:`Add a permission rule`,hook:`Add a hook`,mcp:`Add an MCP server`,agent:`Create an agent`};function Zd({row:e,adding:t,actions:n,onClose:r}){let i=(0,v.useRef)(null),a=t??e?.id??null;if((0,v.useEffect)(()=>{a&&matchMedia(`(max-width: 1180px)`).matches&&i.current?.focus()},[a]),t){let e=Xd[t];return(0,k.jsxs)(`aside`,{className:`inspector`,"aria-label":e,children:[(0,k.jsxs)(`header`,{className:`insp-head`,children:[(0,k.jsx)(j,{name:`plus`}),(0,k.jsx)(`h2`,{ref:i,tabIndex:-1,children:e}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:r,"aria-label":`Close`,children:(0,k.jsx)(j,{name:`close`})})]}),(0,k.jsxs)(`div`,{className:`insp-body`,children:[t===`setting`&&(0,k.jsx)($e,{view:n.view,settingKey:null,defaultScope:`user`,onSaved:n.onSaved}),t===`permission`&&(0,k.jsx)(dt,{view:n.view,rule:null,onSaved:n.onSaved}),t===`agent`&&(0,k.jsx)(ot,{view:n.view,agent:null,onSaved:n.onSaved}),t===`mcp`&&(0,k.jsx)(yt,{view:n.view,server:null,onSaved:n.onSaved}),t===`hook`&&(0,k.jsx)(mt,{view:n.view,hook:null,onSaved:n.onSaved})]})]})}if(!e)return null;let o=Jd(e.section),{Details:s}=o;return(0,k.jsxs)(`aside`,{className:`inspector`,"aria-label":`Details`,children:[(0,k.jsxs)(`header`,{className:`insp-head`,children:[e.line?(0,k.jsx)(P,{line:e.line}):(0,k.jsx)(j,{name:`command`}),(0,k.jsx)(`h2`,{ref:i,tabIndex:-1,children:o.heading(e)}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:r,"aria-label":`Close details`,children:(0,k.jsx)(j,{name:`close`})})]}),(0,k.jsx)(`div`,{className:`insp-body`,children:(0,k.jsx)(s,{row:e,actions:n},e.id)})]})}var Qd={query:``,line:null,sort:{},only:{}};function $d(){let e=new URLSearchParams(location.search);if(e.has(`changes`))return{kind:`changes`};if(e.has(`all`))return{kind:`all`};let t=e.get(`dir`),n=e.get(`compare`);return t&&n?{kind:`compare`,dir:t,other:n}:{kind:`directory`,dir:t??void 0,profile:e.get(`profile`)===`print`?`print`:`interactive`}}function ef(){let e=new URLSearchParams(location.search),t={...Qd,sort:{},only:{}};t.query=e.get(`q`)??``;let n=e.get(`line`);t.line=be.find(e=>e.line===n)?.line??null;for(let[n,r]of e){let[e,i]=n.split(`.`);if(i){if(e===`sort`){let e=/^(\d+)(d?)$/.exec(r);e&&(t.sort[i]={column:Number(e[1]),descending:e[2]===`d`})}else e===`only`&&(t.only[i]=r)}}return t}function tf(e){if(e.kind===`changes`)return new URLSearchParams(`changes`);if(e.kind===`all`)return new URLSearchParams(`all`);if(e.kind===`compare`)return new URLSearchParams({dir:e.dir,compare:e.other});let t=new URLSearchParams(e.dir?{dir:e.dir}:{});return e.profile!==`interactive`&&t.set(`profile`,e.profile),t}function nf(e,t){let n=e.toString().replace(/^(changes|all)=(&|$)/,`$1$2`),r=n?`?${n}`:location.pathname;t?history.pushState(null,``,r):history.replaceState(null,``,r)}function rf(e){nf(tf(e),!0)}function af(e,t){let n=tf(e);t.query&&n.set(`q`,t.query),t.line&&n.set(`line`,t.line);for(let[e,r]of Object.entries(t.sort))r&&n.set(`sort.${e}`,`${r.column}${r.descending?`d`:``}`);for(let[e,r]of Object.entries(t.only))r&&n.set(`only.${e}`,r);nf(n,!1)}function of(e,t){return typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t),void 0,{numeric:!0,sensitivity:`base`})}function sf(e,t,n,r){let i=n.query.trim().toLowerCase();return e.map(e=>{let a=t.filter(t=>t.section===e.id),o=n.only[e.id],s=a.filter(t=>(!n.line||t.line===n.line||t.section===`settings`&&t.lines.includes(n.line))&&(!o||e.facet?.of(t)===o)&&(!i||e.text(t).toLowerCase().includes(i))),c=n.sort[e.id],l=c?e.columns[c.column]?.sort:void 0;return c&&l&&s.sort((e,t)=>of(l(e),l(t))*(c.descending?-1:1)),{section:e,all:a,matching:s,shown:s.slice(0,r[e.id]??50)}})}function cf(e){return!!(e.query.trim()||e.line||Object.values(e.only).some(Boolean))}function lf(e){let t=e.inventory;return be.filter(e=>e.line!==`plugin`||t.plugins.some(e=>e.enabled)).map(({line:n,name:r})=>{let i=[];if(n===`memory`){let t=e.memory.memories.length;return t&&i.push(me(t,`memory`,`memories`)),{line:n,name:r,facts:i,active:t>0}}if(n===`plugin`){let e=t.plugins.filter(e=>e.enabled).length;return e&&i.push(me(e,`plugin`)),{line:n,name:r,facts:i,active:e>0}}let a=e.instructions.filter(e=>e.scope===n),o=a.filter(e=>e.status!==`skipped`).length,s=a.length-o;o&&i.push(me(o,`file`)),s&&i.push(`${s} skipped`);let c=e.effective.filter(e=>e.from.includes(n)).length;c&&i.push(me(c,`setting`));let l=t.hooks.filter(e=>e.source===n).length;l&&i.push(me(l,`hook`));let u=t.mcpServers.filter(e=>e.scope===n).length;u&&i.push(`${u} MCP`);let d=[...t.agents,...t.skills,...t.commands,...t.outputStyles].filter(e=>e.scope===n).length;d&&i.push(me(d,`extension`));let f=l+u+d;return{line:n,name:r,facts:i,active:o>0||c>0||f>0}})}function uf({view:e,lit:t,filter:n,onFilter:r}){let i=lf(e);return(0,k.jsx)(`nav`,{className:`route`,"aria-label":`Load order for this directory`,children:(0,k.jsx)(`ol`,{className:`route-stops`,children:i.map(e=>{let i=n===e.line;return(0,k.jsx)(`li`,{className:`stop${e.active?``:` idle`}${t===e.line?` lit`:``}`,children:(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":i,className:i?`on`:``,onClick:()=>r(i?null:e.line),title:i?`Show every scope`:`Show only ${e.name.toLowerCase()} items`,children:[(0,k.jsx)(`span`,{className:`stop-node`,children:(0,k.jsx)(P,{line:e.line,hollow:!e.active})}),(0,k.jsx)(`span`,{className:`stop-name`,children:e.name}),(0,k.jsx)(`span`,{className:`stop-facts`,children:e.facts.length?e.facts.join(` · `):`not used`})]})},e.line)})})})}function df({view:e}){let t=e.sharing;if(!t)return null;let n=[[`tracked`,`Tracked in git: everyone who clones gets these`,t.tracked],[`untracked`,`Not tracked yet`,t.untracked],[`ignored`,`Git-ignored: only you`,t.ignored]];return n.every(([,,e])=>e.length===0)?null:(0,k.jsx)(`dl`,{className:`sharing`,"aria-label":`What this repository shares`,children:n.filter(([,,e])=>e.length>0).map(([e,t,n])=>(0,k.jsxs)(`div`,{className:`sharing-group vis-${e}`,children:[(0,k.jsx)(`dt`,{children:t}),(0,k.jsx)(`dd`,{className:`mono`,children:n.map(e=>(0,k.jsx)(`span`,{children:e},e))})]},e))})}function ff(e,t){return e?.column===t?e.descending?void 0:{column:t,descending:!0}:{column:t,descending:!1}}function Q({columns:e,sort:t,onSort:n}){return(0,k.jsx)(`thead`,{children:(0,k.jsx)(`tr`,{children:e.map((e,r)=>{let i=t?.column===r;return(0,k.jsx)(`th`,{scope:`col`,"aria-sort":i?t.descending?`descending`:`ascending`:void 0,children:e.sort?(0,k.jsxs)(`button`,{type:`button`,className:`sort`,onClick:()=>n(ff(t,r)),children:[e.label||(0,k.jsx)(`span`,{className:`visually-hidden`,children:`Scope`}),(0,k.jsx)(`span`,{className:`sort-mark${i?` on`:``}`,"aria-hidden":`true`,children:i?t.descending?`↓`:`↑`:`↕`})]}):e.label},e.label||`scope`)})})})}function pf({shown:e,total:t,page:n,onMore:r}){return e>=t?null:(0,k.jsxs)(`button`,{type:`button`,className:`show-more`,onClick:r,children:[`Show `,Math.min(n,t-e),` more`,(0,k.jsxs)(`span`,{className:`muted`,children:[` `,`· `,e,` of `,t,` shown`]})]})}function mf({groups:e,actions:t,state:n,selected:r,onSelect:i,onSort:a,onOnly:o,onShowMore:s,filtered:c}){return(0,k.jsx)(`div`,{className:`timetable`,children:e.map(({section:e,all:l,matching:u,shown:d})=>{if(c&&u.length===0)return null;let f=n.sort[e.id],{Head:p}=e;return(0,k.jsxs)(`section`,{id:`section-${e.id}`,className:`tt-section`,"aria-labelledby":`h-${e.id}`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-${e.id}`,children:e.title}),(0,k.jsx)(`span`,{className:`tt-count`,children:u.length===l.length?l.length:`${u.length} of ${l.length}`}),e.facet&&(0,k.jsx)(_f,{label:e.facet.label,values:hf(l,e.facet.of,e.facet.order),current:n.only[e.id],render:e.facet.render,onPick:t=>o(e.id,t)}),p&&(0,k.jsx)(p,{actions:t})]}),l.length===0?(0,k.jsx)(`p`,{className:`tt-empty`,children:e.empty(t.view)}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`table`,{className:`tt tt-${e.id} ${e.tableClass?.(l)??``}`,children:[(0,k.jsx)(Q,{columns:e.columns,sort:f,onSort:t=>a(e.id,t)}),(0,k.jsx)(`tbody`,{children:d.map(n=>(0,k.jsx)(`tr`,{id:`row-${n.id}`,className:`${n.id===r?`selected`:``}${e.dimmed?.(n)?` dim`:``}`,onClick:()=>i(n.id),children:e.cells(n,t,()=>i(n.id))},n.id))})]}),(0,k.jsx)(pf,{shown:d.length,total:u.length,page:50,onMore:()=>s(e.id)})]})]},e.id)})})}function hf(e,t,n=[]){let r=new Map;for(let n of e)r.set(t(n),(r.get(t(n))??0)+1);let i=e=>n.includes(e)?n.indexOf(e):n.length;return[...r].sort(([e],[t])=>i(e)-i(t)||e.localeCompare(t))}var gf=8;function _f({label:e,values:t,current:n,render:r,onPick:i}){return t.length<2&&!n?null:t.length>gf?(0,k.jsxs)(`select`,{className:`facet-select`,"aria-label":e,value:n??``,onChange:e=>i(e.target.value||void 0),children:[(0,k.jsxs)(`option`,{value:``,children:[`All (`,t.reduce((e,[,t])=>e+t,0),`)`]}),n&&!t.some(([e])=>e===n)&&(0,k.jsxs)(`option`,{value:n,children:[n,` (0)`]}),t.map(([e,t])=>(0,k.jsxs)(`option`,{value:e,children:[e,` (`,t,`)`]},e))]}):(0,k.jsxs)(`fieldset`,{className:`segmented`,"aria-label":e,children:[(0,k.jsx)(`button`,{type:`button`,"aria-pressed":!n,onClick:()=>i(void 0),children:`All`}),t.map(([e,t])=>(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":n===e,onClick:()=>i(n===e?void 0:e),children:[r?r(e):e,` `,(0,k.jsx)(`span`,{className:`seg-count`,children:t})]},e))]})}function vf({toast:e,onDone:t}){return(0,v.useEffect)(()=>{if(!e)return;let n=setTimeout(t,e.undo?12e3:4e3);return()=>clearTimeout(n)},[e,t]),(0,k.jsx)(`div`,{className:`toast-region`,role:`status`,"aria-live":`polite`,children:e&&(0,k.jsxs)(`div`,{className:`toast`,children:[(0,k.jsx)(`span`,{children:e.text}),e.undo&&(0,k.jsxs)(`button`,{type:`button`,onClick:()=>void e.undo?.(),children:[(0,k.jsx)(j,{name:`undo`}),` Undo`]})]})})}function yf(e){return e instanceof C&&e.status===401?`This page lost its access token. Open the link ccdesk printed in your terminal again.`:e instanceof Error?e.message:String(e)}function bf(e,t){let[n,r]=(0,v.useState)({state:`loading`}),[i,a]=(0,v.useState)({state:`loading`}),[o,s]=(0,v.useState)(null),c=e===void 0?n.state===`ready`?n.data.launchDir:null:e,l=(0,v.useCallback)(()=>{T.overview().then(e=>{ae(e.home),r({state:`ready`,data:e})},e=>r({state:`error`,message:yf(e)}))},[]);(0,v.useEffect)(l,[l]);let u=(0,v.useRef)(0),d=(0,v.useCallback)((e,t,n)=>{let r=++u.current;n||a({state:`loading`}),T.directory(e,t).then(t=>{r===u.current&&(a({state:`ready`,data:t}),s(e))},e=>{r===u.current&&a({state:`error`,message:yf(e)})})},[]);(0,v.useEffect)(()=>{c!==null&&d(c,t,!1)},[c,t,d]);let f=(0,v.useRef)(c);f.current=c;let p=(0,v.useRef)(t);p.current=t;let m=(0,v.useCallback)(()=>{f.current!==null&&d(f.current,p.current,!0),l()},[d,l]);(0,v.useEffect)(()=>{if(c===null)return;let e=new AbortController;return(async()=>{let t=Date.now();for(;!e.signal.aborted;)try{let{changed:n,at:r}=await T.watch(c,t,e.signal);t=Math.max(t,r),n&&!e.signal.aborted&&m()}catch{await new Promise(e=>setTimeout(e,5e3))}})(),()=>e.abort()},[c,m]),(0,v.useEffect)(()=>{let e=Date.now(),t=()=>{document.visibilityState!==`visible`||Date.now()-e<1500||(e=Date.now(),m())};return addEventListener(`focus`,t),document.addEventListener(`visibilitychange`,t),()=>{removeEventListener(`focus`,t),document.removeEventListener(`visibilitychange`,t)}},[m]);let h=i.state===`ready`&&o===c&&i.data.profile===t?i.data:null,[g,_]=(0,v.useState)(null);return(0,v.useEffect)(()=>{if(!h)return;let e=new AbortController,t=h.permissions.flatMap(e=>e.kind===`rule`&&e.inEffect?[{list:e.list,rule:e.rule}]:[]);return T.usage(h.path,t,e.signal).then(t=>!e.signal.aborted&&_({path:h.path,data:t}),()=>!e.signal.aborted&&_({path:h.path,data:null})),()=>e.abort()},[h]),{overview:n,view:i,data:(0,v.useMemo)(()=>h&&g?.path===h.path?{...h,usage:g.data}:h,[h,g]),dir:c,reload:m}}function xf(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable}function Sf({view:e,overview:t,rows:n,jump:r,onJumped:i,reload:a,onToast:o,onOpenDirectory:s,onOpenPalette:c,onProfile:l,onCompare:u}){let[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),[h,g]=(0,v.useState)(!1),[_,y]=(0,v.useState)(ef),[b,x]=(0,v.useState)({}),S=(0,v.useRef)(null);(0,v.useEffect)(()=>af({kind:`directory`,dir:e.path,profile:e.profile},_),[_,e.path,e.profile]);let C=e=>{y(e),x({})},w=(0,v.useMemo)(()=>sf(qd,n,_,b),[n,_,b]),E=(0,v.useMemo)(()=>w.flatMap(e=>e.shown),[w]),D=cf(_),O=n.find(e=>e.id===d)??null,ee=(0,v.useCallback)((e,t=!1)=>{m(null),f(e),requestAnimationFrame(()=>{let n=document.getElementById(`row-${e}`);n?.scrollIntoView({block:`nearest`}),t&&n?.querySelector(`button`)?.focus({preventScroll:!0})})},[]);(0,v.useEffect)(()=>{if(r||!matchMedia(`(min-width: 1181px)`).matches)return;let t=e.instructions.find(e=>e.status===`loaded`);t&&f(`ins:${t.path}`)},[]),(0,v.useEffect)(()=>{if(!r)return;let e=n.find(e=>e.id===r.id);if(!e)return;i(),g(!1);let t=w.find(t=>t.section.id===e.section);t&&!t.matching.includes(e)?C(Qd):t&&!t.shown.includes(e)&&x(n=>({...n,[e.section]:t.matching.indexOf(e)+50})),requestAnimationFrame(()=>ee(r.id))},[r]),(0,v.useEffect)(()=>{let e=e=>e&&document.getElementById(`section-${e}`)?.scrollIntoView({block:`start`}),t=t=>{if(!(xf(t.target)||t.altKey||t.ctrlKey||t.metaKey)){if(t.key===`/`)t.preventDefault(),g(!1),requestAnimationFrame(()=>S.current?.focus());else if((t.key===`j`||t.key===`k`)&&!h){let e=E.findIndex(e=>e.id===d),n=E[t.key===`j`?e+1:Math.max(e-1,0)]??E[0];n&&ee(n.id,!0)}else/^[1-9]$/.test(t.key)&&!h?e(qd[Number(t.key)-1]?.id):t.key===`Escape`&&(f(null),m(null))}};return addEventListener(`keydown`,t),()=>removeEventListener(`keydown`,t)},[E,d,ee,h]);let te=(0,v.useCallback)(async e=>{try{await T.restore(e.id,e.revision);let t=e.target.split(/[/\\]/).pop();o({text:e.created?`Removed ${t}`:`Put ${t} back`})}catch(e){o({text:`Could not undo: ${yf(e)}. Recent changes keeps the backup.`})}a()},[o,a]),ne=(0,v.useCallback)(({change:e,message:t,select:n})=>{m(null),n!==void 0&&f(n),o({text:t,...e?{undo:()=>te(e)}:{}}),a()},[o,a,te]),re=(0,v.useMemo)(()=>({view:e,overview:t,sharedNames:new Set(t?.sharedMemories.map(e=>e.name)??[]),onOpenDirectory:s,onCompare:()=>u(e.path),onAdd:e=>{f(null),m(e)},onSaved:ne,onChange:async(e,t,n)=>{try{ne({change:await e(),message:t,...n===void 0?{}:{select:n}})}catch(e){o({text:`Could not do that: ${yf(e)}`}),a()}}}),[e,t,s,u,ne,o,a]),{trust:ie}=e;return(0,k.jsxs)(`div`,{className:`workspace${O||p?``:` no-details`}`,children:[(0,k.jsxs)(`div`,{className:`work-main`,children:[(0,k.jsxs)(`header`,{className:`dir-head`,children:[(0,k.jsxs)(`div`,{className:`dir-title`,children:[(0,k.jsx)(`h1`,{className:`mono`,title:A(e.path),children:A(e.path)}),!e.exists&&(0,k.jsx)(`span`,{className:`flag bad`,children:`folder no longer exists`}),e.gitRoot&&e.gitRoot!==e.path&&(0,k.jsxs)(`span`,{className:`flag`,children:[`inside `,A(e.gitRoot)]}),ie.sessionOnly?(0,k.jsx)(`span`,{className:`flag`,title:`In your home directory Claude Code asks for trust each session and saves no answer.`,children:`trust asked each session`}):!ie.trusted&&(0,k.jsx)(`span`,{className:`flag warn`,title:e.profile===`print`?`claude -p and the SDK never show the trust dialog. Until you accept it for ${A(ie.root)} in an interactive session, they leave out allow rules and extra folders from repository settings.`:`Until you accept Claude Code's trust dialog for ${A(ie.root)}, ${ie.inheritedFrom?`its allow rules, extra folders and .mcp.json approvals wait. You trusted ${A(ie.inheritedFrom)}, which covers hooks but not those grants.`:`hooks from every settings file, its allow rules, extra folders and .mcp.json approvals wait.`}`,children:`not trusted yet`})]}),(0,k.jsxs)(`div`,{className:`toolbar`,children:[(0,k.jsxs)(`fieldset`,{className:`segmented view-switch`,"aria-label":`View`,children:[(0,k.jsx)(`button`,{type:`button`,"aria-pressed":!h,onClick:()=>g(!1),children:`Config`}),(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":h,onClick:()=>g(!0),children:[(0,k.jsx)(j,{name:`eye`}),` What Claude sees`]})]}),(0,k.jsxs)(`label`,{className:`filter${h?` hidden`:``}`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{ref:S,value:_.query,onChange:e=>C({..._,query:e.target.value}),onKeyDown:e=>{e.key===`Escape`&&(C({..._,query:``}),e.currentTarget.blur())},placeholder:`Filter rows`,"aria-label":`Filter rows`}),(0,k.jsx)(`kbd`,{children:`/`})]}),(0,k.jsxs)(`button`,{type:`button`,className:`palette-button`,"aria-label":`Jump to`,onClick:c,children:[(0,k.jsx)(`span`,{className:`palette-label`,children:`Jump to`}),` `,(0,k.jsx)(`kbd`,{children:`Ctrl K`})]})]}),(0,k.jsx)(`nav`,{className:`section-index${h?` hidden`:``}`,"aria-label":`Sections`,children:w.map(({section:e,all:t},n)=>(0,k.jsxs)(`a`,{href:`#section-${e.id}`,className:t.length===0?`empty`:``,onClick:t=>{t.preventDefault(),document.getElementById(`section-${e.id}`)?.scrollIntoView({block:`start`})},children:[(0,k.jsx)(`kbd`,{children:n+1}),` `,e.short??e.title,(0,k.jsx)(`span`,{className:`seg-count`,children:t.length})]},e.id))})]}),(0,k.jsxs)(`div`,{className:`session-line`,children:[(0,k.jsx)(`span`,{children:`Describes`}),(0,k.jsx)(`fieldset`,{className:`segmented small profile-switch`,"aria-label":`Session`,title:`Interactive claude asks for workspace trust and .mcp.json approval. claude -p and the SDK never show the trust dialog: they run settings-file hooks and connect .mcp.json servers without asking.`,children:[`interactive`,`print`].map(t=>(0,k.jsx)(`button`,{type:`button`,"aria-pressed":e.profile===t,onClick:()=>l(t),children:t===`print`?`claude -p / SDK`:`interactive session`},t))})]}),e.problems.length>0&&(0,k.jsxs)(`section`,{className:`problems`,role:`alert`,"aria-label":`Files ccdesk could not read`,children:[(0,k.jsx)(j,{name:`warn`}),(0,k.jsx)(`ul`,{className:`plain`,children:e.problems.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`span`,{className:`mono`,children:A(e.path)}),`: `,e.error,`.`,` `,e.blocksStart?`Claude Code refuses to start until your organisation's settings are fixed, so nothing below applies yet.`:`Claude Code may skip this file.`]},e.path))})]}),h?(0,k.jsx)(Ae,{view:e}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(uf,{view:e,lit:O?.line??null,filter:_.line,onFilter:e=>C({..._,line:e})}),(0,k.jsx)(df,{view:e}),(0,k.jsx)(mf,{groups:w,actions:re,state:_,selected:d,onSelect:ee,onSort:(e,t)=>y({..._,sort:{..._.sort,[e]:t}}),onOnly:(e,t)=>C({..._,only:{..._.only,[e]:t}}),onShowMore:e=>x(t=>({...t,[e]:(t[e]??50)+50})),filtered:D}),D&&E.length===0&&(0,k.jsxs)(`p`,{className:`tt-empty`,children:[`Nothing matches.`,` `,(0,k.jsx)(`button`,{type:`button`,className:`link`,onClick:()=>C(Qd),children:`Clear filters`})]})]})]}),(0,k.jsx)(Zd,{row:O,adding:p,actions:re,onClose:()=>{f(null),m(null)}})]})}var Cf=[{label:`Directory`,sort:e=>e.path},{label:`Sessions`,sort:e=>e.sessions},{label:`Memories`,sort:e=>e.memories},{label:`Last used`,sort:e=>e.lastActive??``}];function wf({overview:e,onOpen:t}){let n=(0,v.useMemo)(()=>e.projects.filter(e=>!e.ephemeral),[e]),r=n.reduce((e,t)=>e+t.memories,0),[i,a]=(0,v.useState)(()=>ef().query),[o,s]=(0,v.useState)(()=>ef().sort.dirs),[c,l]=(0,v.useState)(50);(0,v.useEffect)(()=>af({kind:`all`},{...Qd,query:i,sort:o?{dirs:o}:{}}),[i,o]);let u=(0,v.useMemo)(()=>{let e=i.trim().toLowerCase(),t=n.filter(t=>!e||t.path.toLowerCase().includes(e)),r=o&&Cf[o.column]?.sort;return o&&r&&t.sort((e,t)=>{let[n,i]=[r(e),r(t)],a=typeof n==`number`&&typeof i==`number`?n-i:String(n).localeCompare(String(i));return o.descending?-a:a}),t},[n,i,o]);return(0,k.jsxs)(`div`,{className:`page`,children:[(0,k.jsxs)(`header`,{className:`page-head`,children:[(0,k.jsx)(`h1`,{children:`All directories`}),(0,k.jsxs)(`p`,{className:`lede`,children:[n.length,` directories used with Claude Code, `,r,` memories, config from`,` `,(0,k.jsx)(`span`,{className:`mono`,children:A(e.claudeDir)}),`.`]})]}),(0,k.jsxs)(`section`,{className:`tt-section`,"aria-labelledby":`h-dirs`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-dirs`,children:`Directories`}),(0,k.jsx)(`span`,{className:`tt-count`,children:u.length===n.length?n.length:`${u.length} of ${n.length}`}),(0,k.jsxs)(`label`,{className:`filter`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{value:i,onChange:e=>{a(e.target.value),l(50)},placeholder:`Filter directories`,"aria-label":`Filter directories`})]})]}),(0,k.jsxs)(`table`,{className:`tt tt-dirs`,children:[(0,k.jsx)(Q,{columns:Cf,sort:o,onSort:s}),(0,k.jsx)(`tbody`,{children:u.slice(0,c).map(e=>(0,k.jsxs)(`tr`,{onClick:()=>t(e.path),className:e.exists?``:`dim`,children:[(0,k.jsxs)(`td`,{className:`mono`,children:[(0,k.jsx)(`button`,{type:`button`,className:`row-name`,onClick:n=>{n.stopPropagation(),t(e.path)},children:A(e.path)}),!e.exists&&(0,k.jsx)(`span`,{className:`flag`,children:`folder gone`})]}),(0,k.jsx)(`td`,{className:`num`,children:e.sessions||`—`}),(0,k.jsx)(`td`,{className:`num`,children:e.memories||`—`}),(0,k.jsx)(`td`,{className:`num`,children:ce(e.lastActive)})]},e.path))})]}),u.length===0&&(0,k.jsx)(`p`,{className:`tt-empty`,children:n.length===0?`No directories yet. Temporary and test directories are listed in the sidebar.`:`No directory matches.`}),(0,k.jsx)(pf,{shown:Math.min(c,u.length),total:u.length,page:50,onMore:()=>l(c+50)})]}),(0,k.jsxs)(`section`,{className:`tt-section`,"aria-labelledby":`h-shared`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-shared`,children:`Memory saved in more than one directory`}),(0,k.jsx)(`span`,{className:`tt-count`,children:e.sharedMemories.length})]}),e.sharedMemories.length===0?(0,k.jsx)(`p`,{className:`tt-empty`,children:`Every memory lives in exactly one directory.`}):(0,k.jsxs)(`table`,{className:`tt tt-shared`,children:[(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{scope:`col`}),(0,k.jsx)(`th`,{scope:`col`,children:`Memory`}),(0,k.jsx)(`th`,{scope:`col`,children:`Copies`}),(0,k.jsx)(`th`,{scope:`col`,children:`Saved in`})]})}),(0,k.jsx)(`tbody`,{children:e.sharedMemories.map(e=>{let n=new Set(e.stores.map(e=>e.hash)).size===1;return(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:`memory`})}),(0,k.jsx)(`td`,{className:`mono`,children:e.name}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:`flag ${n?``:`warn`}`,children:n?`identical`:`drifted apart`})}),(0,k.jsx)(`td`,{className:`stores`,children:e.stores.map(e=>(0,k.jsx)(`button`,{type:`button`,className:`link mono`,onClick:()=>t(e.projectPath),children:A(e.projectPath)},e.projectPath))})]},e.name)})})]})]})]})}function Tf(e,t){let n=e.trim();return t&&(n===`~`||n.startsWith(`~/`))?t+n.slice(1):n.startsWith(`/`)||/^[A-Za-z]:[\\/]/.test(n)?n:null}function Ef({overview:e,rows:t,compareFrom:n,onClose:r,onOpenDirectory:i,onSelectRow:a,onOpenMemory:o,onCompare:s}){let[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(0),f=(0,v.useRef)(null);(0,v.useEffect)(()=>f.current?.focus(),[]),(0,v.useEffect)(()=>{document.getElementById(`pal-${u}`)?.scrollIntoView({block:`nearest`})},[u]);let p=(0,v.useMemo)(()=>{let r=c.trim().toLowerCase(),i=(e?.projects??[]).filter(e=>!e.ephemeral&&e.path!==n&&(!r||e.path.toLowerCase().includes(r))).map(e=>({kind:`dir`,key:`dir:${e.path}`,label:A(e.path),path:e.path}));if(n!==void 0){let t=Tf(c,e?.home),n=i.some(e=>e.kind===`dir`&&e.path===t);return[...t&&!n?[{kind:`dir`,key:`typed:${t}`,label:A(t),path:t}]:[],...i].slice(0,40)}let a=t.filter(e=>r&&Jd(e.section).text(e).toLowerCase().includes(r)).map(e=>({kind:`row`,key:e.id,label:Jd(e.section).label(e),row:e})),o=new Set(t.map(e=>e.id)),s=(e?.memoryCatalog??[]).filter(e=>r&&!o.has(`mem:${e.path}`)&&`${e.name} ${e.description} ${e.type}`.toLowerCase().includes(r)).map(e=>({kind:`memory`,key:`cat:${e.path}`,label:`memory ${e.name} · ${A(e.projectPath)}`,projectPath:e.projectPath,path:e.path}));return[...a,...s,...i].slice(0,40)},[c,e,t,n]),m=e=>{e&&(e.kind===`dir`&&n!==void 0?s(n,e.path):e.kind===`dir`?i(e.path):e.kind===`memory`?o(e.projectPath,e.path):a(e.row.id),r())};return(0,k.jsx)(`div`,{className:`palette-backdrop`,onMouseDown:r,children:(0,k.jsxs)(`div`,{className:`palette`,role:`dialog`,"aria-modal":`true`,"aria-label":n===void 0?`Jump to`:`Compare settings with`,onMouseDown:e=>e.stopPropagation(),children:[(0,k.jsxs)(`label`,{className:`palette-input`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{ref:f,role:`combobox`,"aria-expanded":`true`,value:c,onChange:e=>{l(e.target.value),d(0)},placeholder:n===void 0?`Jump to a directory, file, setting or memory`:`Compare settings with a directory, or type its path`,"aria-controls":`palette-results`,"aria-activedescendant":p[u]?`pal-${u}`:void 0,onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),d(e=>Math.min(e+1,p.length-1))):e.key===`ArrowUp`?(e.preventDefault(),d(e=>Math.max(e-1,0))):e.key===`Enter`?(e.preventDefault(),m(p[u])):e.key===`Escape`?r():e.key===`Tab`&&e.preventDefault()}})]}),(0,k.jsxs)(`div`,{id:`palette-results`,className:`palette-results`,role:`listbox`,"aria-label":`Results`,children:[p.length===0&&(0,k.jsx)(`div`,{className:`palette-empty`,children:c.trim()?`Nothing matches “${c}”.`:n===void 0?`Type to search directories, files, settings and memories.`:`No other directories yet. Type a full path.`}),p.map((e,t)=>(0,k.jsxs)(`div`,{id:`pal-${t}`,role:`option`,tabIndex:-1,"aria-selected":t===u,className:t===u?`active`:``,onMouseEnter:()=>d(t),onClick:()=>m(e),children:[e.kind===`row`?e.row.line?(0,k.jsx)(P,{line:e.row.line}):(0,k.jsx)(j,{name:`command`}):e.kind===`memory`?(0,k.jsx)(P,{line:`memory`}):(0,k.jsx)(j,{name:`folder`}),(0,k.jsx)(`span`,{className:e.kind===`dir`?`mono`:``,children:e.label})]},e.key))]})]})})}function Df(e,t){return e===t?`~ (home)`:A(e)}function Of({overview:e,current:t,changesOpen:n,dark:r,onOpen:i,onChanges:a,onToggleTheme:o}){let[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(!1),d=e?.projects??[],f=e=>!s||e.path.toLowerCase().includes(s.toLowerCase()),p=d.find(t=>t.path===e?.launchDir),m=d.filter(e=>!e.ephemeral&&e!==p&&f(e)),h=d.filter(e=>e.ephemeral&&e!==p&&f(e)),g=n=>(0,k.jsx)(`li`,{children:(0,k.jsxs)(`button`,{type:`button`,className:`rail-item${t===n.path?` current`:``}${n.exists?``:` gone`}`,"aria-current":t===n.path?`page`:void 0,onClick:()=>i(n.path),title:n.exists?A(n.path):`${A(n.path)} (folder no longer exists)`,children:[(0,k.jsx)(`span`,{className:`rail-label`,children:Df(n.path,e?.home??``)}),n.memories>0&&(0,k.jsx)(`span`,{className:`rail-count`,children:n.memories})]})},n.path);return(0,k.jsxs)(`nav`,{className:`rail`,"aria-label":`Directories`,children:[(0,k.jsxs)(`div`,{className:`brand`,children:[(0,k.jsx)(`img`,{src:`/logo.png`,width:`26`,height:`26`,alt:``}),(0,k.jsx)(`span`,{children:`ccdesk`}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:o,"aria-label":`Dark theme`,"aria-pressed":r,children:(0,k.jsx)(j,{name:`sun`})})]}),(0,k.jsxs)(`button`,{type:`button`,className:`rail-item overview-link${t===null?` current`:``}`,"aria-current":t===null?`page`:void 0,onClick:()=>i(null),children:[(0,k.jsx)(j,{name:`folder`}),` `,(0,k.jsx)(`span`,{className:`rail-label`,children:`All directories`})]}),(0,k.jsxs)(`button`,{type:`button`,className:`rail-item overview-link${n?` current`:``}`,"aria-current":n?`page`:void 0,onClick:a,children:[(0,k.jsx)(j,{name:`undo`}),` `,(0,k.jsx)(`span`,{className:`rail-label`,children:`Recent changes`})]}),p&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h2`,{className:`rail-group`,children:`Opened from`}),(0,k.jsx)(`ul`,{className:`rail-list`,children:g(p)})]}),(0,k.jsxs)(`label`,{className:`rail-filter`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),placeholder:`Find a directory`,"aria-label":`Find a directory`})]}),(0,k.jsx)(`h2`,{className:`rail-group`,children:`Used with Claude`}),m.length>0?(0,k.jsx)(`ul`,{className:`rail-list`,children:m.map(g)}):(0,k.jsx)(`p`,{className:`rail-empty`,children:s?`No directory matches.`:`No other directories yet.`}),h.length>0&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`button`,{type:`button`,className:`rail-group toggle`,"aria-expanded":l,onClick:()=>u(!l),children:[`Temporary and test dirs `,(0,k.jsx)(`span`,{className:`rail-count`,children:h.length})]}),l&&(0,k.jsx)(`ul`,{className:`rail-list`,children:h.map(g)})]}),typeof t==`string`&&(0,k.jsxs)(`ul`,{className:`rail-keys`,"aria-label":`Keyboard shortcuts`,children:[(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`j`}),` `,(0,k.jsx)(`kbd`,{children:`k`}),` rows`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`1`}),`–`,(0,k.jsx)(`kbd`,{children:qd.length}),` sections`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`/`}),` filter`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`Ctrl`}),` `,(0,k.jsx)(`kbd`,{children:`K`}),` jump anywhere`]})]})]})}function kf(){let e=document.documentElement.dataset.theme;return e?e===`dark`:matchMedia(`(prefers-color-scheme: dark)`).matches}function Af(){let[e,t]=(0,v.useState)($d),[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(kf),[u,d]=(0,v.useState)(0),f=e.kind===`directory`?e.profile:`interactive`,p=bf(e.kind===`directory`?e.dir:null,f),{view:m,data:h,dir:g,reload:_}=p,y=p.overview.state===`ready`?p.overview.data:null,b=(0,v.useMemo)(()=>h?Yd(h):[],[h]),x=(0,v.useCallback)(e=>{t(e),d(e=>e+1),rf(e)},[]),S=(0,v.useCallback)(e=>x(e===null?{kind:`all`}:{kind:`directory`,dir:e,profile:f}),[x,f]),C=(0,v.useCallback)(e=>t(t=>t.kind===`directory`?{...t,profile:e}:t),[]);(0,v.useEffect)(()=>{let e=()=>{t($d()),d(e=>e+1)};return addEventListener(`popstate`,e),()=>removeEventListener(`popstate`,e)},[]),(0,v.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),r(e=>e?null:{}))};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]);let w=()=>{let e=kf()?`light`:`dark`;document.documentElement.dataset.theme=e,l(e===`dark`);try{localStorage.setItem(`ccdesk-theme`,e)}catch{}},T=(0,v.useCallback)(()=>a(null),[]),E=(0,v.useCallback)(e=>r({compareFrom:e}),[]);return(0,k.jsxs)(`div`,{className:`app`,children:[(0,k.jsx)(Of,{overview:y,current:e.kind===`directory`?h?.path??g:e.kind===`all`?null:void 0,changesOpen:e.kind===`changes`,dark:c,onOpen:S,onChanges:()=>x({kind:`changes`}),onToggleTheme:w}),(0,k.jsx)(`main`,{className:`main`,children:p.overview.state===`error`?(0,k.jsx)(Mf,{message:p.overview.message}):e.kind===`changes`?(0,k.jsx)(M,{onRestored:e=>{a({text:e}),_()}}):e.kind===`compare`?(0,k.jsx)(Ce,{dir:e.dir,other:e.other,onOpen:S,onPickOther:()=>E(e.dir)},u):e.kind===`all`?y?(0,k.jsx)(wf,{overview:y,onOpen:S},u):(0,k.jsx)(jf,{}):m.state===`error`?(0,k.jsx)(Mf,{message:m.message}):h?(0,k.jsx)(Sf,{view:h,overview:y,rows:b,jump:o,onJumped:()=>s(null),reload:_,onToast:a,onOpenDirectory:S,onOpenPalette:()=>r({}),onProfile:C,onCompare:E},`${h.path}:${u}`):(0,k.jsx)(jf,{})}),n&&(0,k.jsx)(Ef,{overview:y,rows:b,compareFrom:n.compareFrom,onClose:()=>r(null),onCompare:(e,t)=>x({kind:`compare`,dir:e,other:t}),onOpenDirectory:S,onSelectRow:e=>s({id:e}),onOpenMemory:(e,t)=>{e!==g&&S(e),s({id:`mem:${t}`})}}),(0,k.jsx)(vf,{toast:i,onDone:T})]})}function jf(){return(0,k.jsxs)(`div`,{className:`loading`,role:`status`,children:[(0,k.jsx)(`span`,{className:`loading-line`,"aria-hidden":`true`}),`Reading your config…`]})}function Mf({message:e}){return(0,k.jsxs)(`div`,{className:`problem`,role:`alert`,children:[(0,k.jsx)(`h1`,{children:`Something went wrong`}),(0,k.jsx)(`p`,{children:e})]})}try{let e=localStorage.getItem(`ccdesk-theme`);(e===`light`||e===`dark`)&&(document.documentElement.dataset.theme=e)}catch{}var Nf=document.getElementById(`root`);Nf&&(0,y.createRoot)(Nf).render((0,k.jsx)(v.StrictMode,{children:(0,k.jsx)(Af,{})}));
|
|
60
|
+
`),children:[me(i.length,`rule`),` for some uses`]}),i.length<r.scoped.length&&(0,k.jsx)(`span`,{className:`flag warn`,title:`Claude Code never checks a path rule on this tool`,children:me(r.scoped.length-i.length,`unchecked rule`)}),r.hooks>0&&(0,k.jsx)(`span`,{className:`flag`,children:me(r.hooks,`hook`)})]}),(0,k.jsx)(`td`,{className:`num${e.calls?` used`:``}`,children:e.calls===void 0?`…`:e.calls===null?(0,k.jsx)(`span`,{className:`muted`,title:`ccdesk could not finish counting the transcripts`,children:`?`}):e.calls}),(0,k.jsx)(`td`,{className:`desc`,children:(0,k.jsx)(Kd,{text:r.description.split(/(?<=\.)\s/)[0]??``})})]})},empty:()=>`ccdesk has no list of built-in tools.`,dimmed:e=>e.item.verdict===`denied`,text:e=>`tool ${e.item.name} ${Vd(e.item)} ${e.item.description}`,label:e=>`tool ${e.item.name}`,heading:e=>e.item.name,facet:{label:`Filter tools by outcome`,of:e=>Vd(e.item),order:[`removed`,`asks every time`,`asks first`,`runs without asking`,`no approval needed`]},Head:({actions:e})=>(0,k.jsxs)(`span`,{className:`tt-note`,children:[`As in Manual mode; sessions here start in `,Ud(e.view),` mode`]}),Details:({row:e,actions:t})=>{let n=e.item;return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`verdict ${n.verdict===`denied`?`off`:n.verdict===`allowed`||!n.asks&&n.verdict==="default"?`ok`:``}`,children:Hd(n)}),(0,k.jsx)(`p`,{children:(0,k.jsx)(Kd,{text:n.description})}),n.scoped.length>0&&(0,k.jsxs)(`section`,{className:`sub`,children:[(0,k.jsx)(`h3`,{children:`Rules for some uses`}),(0,k.jsx)(`ul`,{className:`plain`,children:n.scoped.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(P,{line:e.scope}),` `,(0,k.jsx)(`span`,{className:`perm perm-${e.list}`,children:e.list}),` `,(0,k.jsx)(`span`,{className:`mono`,children:e.rule}),e.unchecked&&(0,k.jsx)(`span`,{className:`flag warn`,children:`never checked: Claude Code checks paths against Edit and Read rules only`})]},`${e.scope}:${e.list}:${e.rule}`))}),(0,k.jsx)(`p`,{className:`muted small`,children:`Checked deny, then ask, then allow, before the rule for the whole tool applies.`})]}),(0,k.jsxs)(`dl`,{className:`fields`,children:[(0,k.jsx)(Z,{label:`Manual mode`,children:n.asks?`asks before using it`:`no approval needed`}),(0,k.jsx)(Z,{label:`Used here`,children:Bd(t.view.usage,n.name)}),(0,k.jsx)(Z,{label:`PreToolUse hooks`,children:n.hooks===0?`none`:`${me(n.hooks,`hook`)} run before each use`})]}),(0,k.jsx)(Gd,{tool:n,actions:t},`${n.name}:${n.verdict}`),(0,k.jsx)(`p`,{className:`muted small`,children:`Permission modes other than Manual change which uses ask. Tool names and descriptions come from Claude Code's tools reference.`})]})}}),wd,hd,bd,md,dd];function Jd(e){let t=qd.find(t=>t.id===e);if(!t)throw Error(`Unknown section ${e}`);return t}function Yd(e){return qd.flatMap(t=>t.rows(e))}var Xd={setting:`Add a setting`,permission:`Add a permission rule`,hook:`Add a hook`,mcp:`Add an MCP server`,agent:`Create an agent`};function Zd({row:e,adding:t,actions:n,onClose:r}){let i=(0,v.useRef)(null),a=t??e?.id??null;if((0,v.useEffect)(()=>{a&&matchMedia(`(max-width: 1180px)`).matches&&i.current?.focus()},[a]),t){let e=Xd[t];return(0,k.jsxs)(`aside`,{className:`inspector`,"aria-label":e,children:[(0,k.jsxs)(`header`,{className:`insp-head`,children:[(0,k.jsx)(j,{name:`plus`}),(0,k.jsx)(`h2`,{ref:i,tabIndex:-1,children:e}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:r,"aria-label":`Close`,children:(0,k.jsx)(j,{name:`close`})})]}),(0,k.jsxs)(`div`,{className:`insp-body`,children:[t===`setting`&&(0,k.jsx)($e,{view:n.view,settingKey:null,defaultScope:`user`,onSaved:n.onSaved}),t===`permission`&&(0,k.jsx)(dt,{view:n.view,rule:null,onSaved:n.onSaved}),t===`agent`&&(0,k.jsx)(ot,{view:n.view,agent:null,onSaved:n.onSaved}),t===`mcp`&&(0,k.jsx)(yt,{view:n.view,server:null,onSaved:n.onSaved}),t===`hook`&&(0,k.jsx)(mt,{view:n.view,hook:null,onSaved:n.onSaved})]})]})}if(!e)return null;let o=Jd(e.section),{Details:s}=o;return(0,k.jsxs)(`aside`,{className:`inspector`,"aria-label":`Details`,children:[(0,k.jsxs)(`header`,{className:`insp-head`,children:[e.line?(0,k.jsx)(P,{line:e.line}):(0,k.jsx)(j,{name:`command`}),(0,k.jsx)(`h2`,{ref:i,tabIndex:-1,children:o.heading(e)}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:r,"aria-label":`Close details`,children:(0,k.jsx)(j,{name:`close`})})]}),(0,k.jsx)(`div`,{className:`insp-body`,children:(0,k.jsx)(s,{row:e,actions:n},e.id)})]})}var Qd={query:``,line:null,sort:{},only:{}};function $d(){let e=new URLSearchParams(location.search);if(e.has(`changes`))return{kind:`changes`};if(e.has(`all`))return{kind:`all`};let t=e.get(`dir`),n=e.get(`compare`);return t&&n?{kind:`compare`,dir:t,other:n}:{kind:`directory`,dir:t??void 0,profile:e.get(`profile`)===`print`?`print`:`interactive`}}function ef(){let e=new URLSearchParams(location.search),t={...Qd,sort:{},only:{}};t.query=e.get(`q`)??``;let n=e.get(`line`);t.line=be.find(e=>e.line===n)?.line??null;for(let[n,r]of e){let[e,i]=n.split(`.`);if(i){if(e===`sort`){let e=/^(\d+)(d?)$/.exec(r);e&&(t.sort[i]={column:Number(e[1]),descending:e[2]===`d`})}else e===`only`&&(t.only[i]=r)}}return t}function tf(e){if(e.kind===`changes`)return new URLSearchParams(`changes`);if(e.kind===`all`)return new URLSearchParams(`all`);if(e.kind===`compare`)return new URLSearchParams({dir:e.dir,compare:e.other});let t=new URLSearchParams(e.dir?{dir:e.dir}:{});return e.profile!==`interactive`&&t.set(`profile`,e.profile),t}function nf(e,t){let n=e.toString().replace(/^(changes|all)=(&|$)/,`$1$2`),r=n?`?${n}`:location.pathname;t?history.pushState(null,``,r):history.replaceState(null,``,r)}function rf(e){nf(tf(e),!0)}function af(e,t){let n=tf(e);t.query&&n.set(`q`,t.query),t.line&&n.set(`line`,t.line);for(let[e,r]of Object.entries(t.sort))r&&n.set(`sort.${e}`,`${r.column}${r.descending?`d`:``}`);for(let[e,r]of Object.entries(t.only))r&&n.set(`only.${e}`,r);nf(n,!1)}function of(e,t){return typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t),void 0,{numeric:!0,sensitivity:`base`})}function sf(e,t,n,r){let i=n.query.trim().toLowerCase();return e.map(e=>{let a=t.filter(t=>t.section===e.id),o=n.only[e.id],s=a.filter(t=>(!n.line||t.line===n.line||t.section===`settings`&&t.lines.includes(n.line))&&(!o||e.facet?.of(t)===o)&&(!i||e.text(t).toLowerCase().includes(i))),c=n.sort[e.id],l=c?e.columns[c.column]?.sort:void 0;return c&&l&&s.sort((e,t)=>of(l(e),l(t))*(c.descending?-1:1)),{section:e,all:a,matching:s,shown:s.slice(0,r[e.id]??50)}})}function cf(e){return!!(e.query.trim()||e.line||Object.values(e.only).some(Boolean))}function lf(e){let t=e.inventory;return be.filter(e=>e.line!==`plugin`||t.plugins.some(e=>e.enabled)).map(({line:n,name:r})=>{let i=[];if(n===`memory`){let t=e.memory.memories.length;return t&&i.push(me(t,`memory`,`memories`)),{line:n,name:r,facts:i,active:t>0}}if(n===`plugin`){let e=t.plugins.filter(e=>e.enabled).length;return e&&i.push(me(e,`plugin`)),{line:n,name:r,facts:i,active:e>0}}let a=e.instructions.filter(e=>e.scope===n),o=a.filter(e=>e.status!==`skipped`).length,s=a.length-o;o&&i.push(me(o,`file`)),s&&i.push(`${s} skipped`);let c=e.effective.filter(e=>e.from.includes(n)).length;c&&i.push(me(c,`setting`));let l=t.hooks.filter(e=>e.source===n).length;l&&i.push(me(l,`hook`));let u=t.mcpServers.filter(e=>e.scope===n).length;u&&i.push(`${u} MCP`);let d=[...t.agents,...t.skills,...t.commands,...t.outputStyles].filter(e=>e.scope===n).length;d&&i.push(me(d,`extension`));let f=l+u+d;return{line:n,name:r,facts:i,active:o>0||c>0||f>0}})}function uf({view:e,lit:t,filter:n,onFilter:r}){let i=lf(e);return(0,k.jsx)(`nav`,{className:`route`,"aria-label":`Load order for this directory`,children:(0,k.jsx)(`ol`,{className:`route-stops`,children:i.map(e=>{let i=n===e.line;return(0,k.jsx)(`li`,{className:`stop${e.active?``:` idle`}${t===e.line?` lit`:``}`,children:(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":i,className:i?`on`:``,onClick:()=>r(i?null:e.line),title:i?`Show every scope`:`Show only ${e.name.toLowerCase()} items`,children:[(0,k.jsx)(`span`,{className:`stop-node`,children:(0,k.jsx)(P,{line:e.line,hollow:!e.active})}),(0,k.jsx)(`span`,{className:`stop-name`,children:e.name}),(0,k.jsx)(`span`,{className:`stop-facts`,children:e.facts.length?e.facts.join(` · `):`not used`})]})},e.line)})})})}function df({view:e}){let t=e.sharing;if(!t)return null;let n=[[`tracked`,`Tracked in git: everyone who clones gets these`,t.tracked],[`untracked`,`Not tracked yet`,t.untracked],[`ignored`,`Git-ignored: only you`,t.ignored]];return n.every(([,,e])=>e.length===0)?null:(0,k.jsx)(`dl`,{className:`sharing`,"aria-label":`What this repository shares`,children:n.filter(([,,e])=>e.length>0).map(([e,t,n])=>(0,k.jsxs)(`div`,{className:`sharing-group vis-${e}`,children:[(0,k.jsx)(`dt`,{children:t}),(0,k.jsx)(`dd`,{className:`mono`,children:n.map(e=>(0,k.jsx)(`span`,{children:e},e))})]},e))})}function ff(e,t){return e?.column===t?e.descending?void 0:{column:t,descending:!0}:{column:t,descending:!1}}function Q({columns:e,sort:t,onSort:n}){return(0,k.jsx)(`thead`,{children:(0,k.jsx)(`tr`,{children:e.map((e,r)=>{let i=t?.column===r;return(0,k.jsx)(`th`,{scope:`col`,"aria-sort":i?t.descending?`descending`:`ascending`:void 0,children:e.sort?(0,k.jsxs)(`button`,{type:`button`,className:`sort`,onClick:()=>n(ff(t,r)),children:[e.label||(0,k.jsx)(`span`,{className:`visually-hidden`,children:`Scope`}),(0,k.jsx)(`span`,{className:`sort-mark${i?` on`:``}`,"aria-hidden":`true`,children:i?t.descending?`↓`:`↑`:`↕`})]}):e.label},e.label||`scope`)})})})}function pf({shown:e,total:t,page:n,onMore:r}){return e>=t?null:(0,k.jsxs)(`button`,{type:`button`,className:`show-more`,onClick:r,children:[`Show `,Math.min(n,t-e),` more`,(0,k.jsxs)(`span`,{className:`muted`,children:[` `,`· `,e,` of `,t,` shown`]})]})}function mf({groups:e,actions:t,state:n,selected:r,onSelect:i,onSort:a,onOnly:o,onShowMore:s,filtered:c}){return(0,k.jsx)(`div`,{className:`timetable`,children:e.map(({section:e,all:l,matching:u,shown:d})=>{if(c&&u.length===0)return null;let f=n.sort[e.id],{Head:p}=e;return(0,k.jsxs)(`section`,{id:`section-${e.id}`,className:`tt-section`,"aria-labelledby":`h-${e.id}`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-${e.id}`,children:e.title}),(0,k.jsx)(`span`,{className:`tt-count`,children:u.length===l.length?l.length:`${u.length} of ${l.length}`}),e.facet&&(0,k.jsx)(_f,{label:e.facet.label,values:hf(l,e.facet.of,e.facet.order),current:n.only[e.id],render:e.facet.render,onPick:t=>o(e.id,t)}),p&&(0,k.jsx)(p,{actions:t})]}),l.length===0?(0,k.jsx)(`p`,{className:`tt-empty`,children:e.empty(t.view)}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`table`,{className:`tt tt-${e.id} ${e.tableClass?.(l)??``}`,children:[(0,k.jsx)(Q,{columns:e.columns,sort:f,onSort:t=>a(e.id,t)}),(0,k.jsx)(`tbody`,{children:d.map(n=>(0,k.jsx)(`tr`,{id:`row-${n.id}`,className:`${n.id===r?`selected`:``}${e.dimmed?.(n)?` dim`:``}`,onClick:()=>i(n.id),children:e.cells(n,t,()=>i(n.id))},n.id))})]}),(0,k.jsx)(pf,{shown:d.length,total:u.length,page:50,onMore:()=>s(e.id)})]})]},e.id)})})}function hf(e,t,n=[]){let r=new Map;for(let n of e)r.set(t(n),(r.get(t(n))??0)+1);let i=e=>n.includes(e)?n.indexOf(e):n.length;return[...r].sort(([e],[t])=>i(e)-i(t)||e.localeCompare(t))}var gf=8;function _f({label:e,values:t,current:n,render:r,onPick:i}){return t.length<2&&!n?null:t.length>gf?(0,k.jsxs)(`select`,{className:`facet-select`,"aria-label":e,value:n??``,onChange:e=>i(e.target.value||void 0),children:[(0,k.jsxs)(`option`,{value:``,children:[`All (`,t.reduce((e,[,t])=>e+t,0),`)`]}),n&&!t.some(([e])=>e===n)&&(0,k.jsxs)(`option`,{value:n,children:[n,` (0)`]}),t.map(([e,t])=>(0,k.jsxs)(`option`,{value:e,children:[e,` (`,t,`)`]},e))]}):(0,k.jsxs)(`fieldset`,{className:`segmented`,"aria-label":e,children:[(0,k.jsx)(`button`,{type:`button`,"aria-pressed":!n,onClick:()=>i(void 0),children:`All`}),t.map(([e,t])=>(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":n===e,onClick:()=>i(n===e?void 0:e),children:[r?r(e):e,` `,(0,k.jsx)(`span`,{className:`seg-count`,children:t})]},e))]})}function vf({toast:e,onDone:t}){return(0,v.useEffect)(()=>{if(!e)return;let n=setTimeout(t,e.undo?12e3:4e3);return()=>clearTimeout(n)},[e,t]),(0,k.jsx)(`div`,{className:`toast-region`,role:`status`,"aria-live":`polite`,children:e&&(0,k.jsxs)(`div`,{className:`toast`,children:[(0,k.jsx)(`span`,{children:e.text}),e.undo&&(0,k.jsxs)(`button`,{type:`button`,onClick:()=>void e.undo?.(),children:[(0,k.jsx)(j,{name:`undo`}),` Undo`]})]})})}function yf(e){return e instanceof C&&e.status===401?`This page lost its access token. Open the link ccdesk printed in your terminal again.`:e instanceof Error?e.message:String(e)}function bf(e,t){let[n,r]=(0,v.useState)({state:`loading`}),[i,a]=(0,v.useState)({state:`loading`}),[o,s]=(0,v.useState)(null),c=e===void 0?n.state===`ready`?n.data.launchDir:null:e,l=(0,v.useCallback)(()=>{T.overview().then(e=>{ae(e.home),r({state:`ready`,data:e})},e=>r({state:`error`,message:yf(e)}))},[]);(0,v.useEffect)(l,[l]);let u=(0,v.useRef)(0),d=(0,v.useCallback)((e,t,n)=>{let r=++u.current;n||a({state:`loading`}),T.directory(e,t).then(t=>{r===u.current&&(a({state:`ready`,data:t}),s(e))},e=>{r===u.current&&a({state:`error`,message:yf(e)})})},[]);(0,v.useEffect)(()=>{c!==null&&d(c,t,!1)},[c,t,d]);let f=(0,v.useRef)(c);f.current=c;let p=(0,v.useRef)(t);p.current=t;let m=(0,v.useCallback)(()=>{f.current!==null&&d(f.current,p.current,!0),l()},[d,l]);(0,v.useEffect)(()=>{if(c===null)return;let e=new AbortController;return(async()=>{let t=Date.now();for(;!e.signal.aborted;)try{let{changed:n,at:r}=await T.watch(c,t,e.signal);t=Math.max(t,r),n&&!e.signal.aborted&&m()}catch{await new Promise(e=>setTimeout(e,5e3))}})(),()=>e.abort()},[c,m]),(0,v.useEffect)(()=>{let e=Date.now(),t=()=>{document.visibilityState!==`visible`||Date.now()-e<1500||(e=Date.now(),m())};return addEventListener(`focus`,t),document.addEventListener(`visibilitychange`,t),()=>{removeEventListener(`focus`,t),document.removeEventListener(`visibilitychange`,t)}},[m]);let h=i.state===`ready`&&o===c&&i.data.profile===t?i.data:null,[g,_]=(0,v.useState)(null);return(0,v.useEffect)(()=>{if(!h)return;let e=new AbortController,t=h.permissions.flatMap(e=>e.kind===`rule`&&e.inEffect?[{list:e.list,rule:e.rule}]:[]);return T.usage(h.path,t,e.signal).then(t=>!e.signal.aborted&&_({path:h.path,data:t}),()=>!e.signal.aborted&&_({path:h.path,data:null})),()=>e.abort()},[h]),{overview:n,view:i,data:(0,v.useMemo)(()=>h&&g?.path===h.path?{...h,usage:g.data}:h,[h,g]),dir:c,reload:m}}function xf(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable}function Sf({view:e,overview:t,rows:n,jump:r,onJumped:i,reload:a,onToast:o,onOpenDirectory:s,onOpenPalette:c,onProfile:l,onCompare:u}){let[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),[h,g]=(0,v.useState)(!1),[_,y]=(0,v.useState)(ef),[b,x]=(0,v.useState)({}),S=(0,v.useRef)(null);(0,v.useEffect)(()=>af({kind:`directory`,dir:e.path,profile:e.profile},_),[_,e.path,e.profile]);let C=e=>{y(e),x({})},w=(0,v.useMemo)(()=>sf(qd,n,_,b),[n,_,b]),E=(0,v.useMemo)(()=>w.flatMap(e=>e.shown),[w]),D=cf(_),O=n.find(e=>e.id===d)??null,ee=(0,v.useCallback)((e,t=!1)=>{m(null),f(e),requestAnimationFrame(()=>{let n=document.getElementById(`row-${e}`);n?.scrollIntoView({block:`nearest`}),t&&n?.querySelector(`button`)?.focus({preventScroll:!0})})},[]);(0,v.useEffect)(()=>{if(r||!matchMedia(`(min-width: 1181px)`).matches)return;let t=e.instructions.find(e=>e.status===`loaded`);t&&f(`ins:${t.path}`)},[]),(0,v.useEffect)(()=>{if(!r)return;let e=n.find(e=>e.id===r.id);if(!e)return;i(),g(!1);let t=w.find(t=>t.section.id===e.section);t&&!t.matching.includes(e)?C(Qd):t&&!t.shown.includes(e)&&x(n=>({...n,[e.section]:t.matching.indexOf(e)+50})),requestAnimationFrame(()=>ee(r.id))},[r]),(0,v.useEffect)(()=>{let e=e=>e&&document.getElementById(`section-${e}`)?.scrollIntoView({block:`start`}),t=t=>{if(!(xf(t.target)||t.altKey||t.ctrlKey||t.metaKey)){if(t.key===`/`)t.preventDefault(),g(!1),requestAnimationFrame(()=>S.current?.focus());else if((t.key===`j`||t.key===`k`)&&!h){let e=E.findIndex(e=>e.id===d),n=E[t.key===`j`?e+1:Math.max(e-1,0)]??E[0];n&&ee(n.id,!0)}else/^[1-9]$/.test(t.key)&&!h?e(qd[Number(t.key)-1]?.id):t.key===`Escape`&&(f(null),m(null))}};return addEventListener(`keydown`,t),()=>removeEventListener(`keydown`,t)},[E,d,ee,h]);let te=(0,v.useCallback)(async e=>{try{await T.restore(e.id,e.revision);let t=e.target.split(/[/\\]/).pop();o({text:e.created?`Removed ${t}`:`Put ${t} back`})}catch(e){o({text:`Could not undo: ${yf(e)}. Recent changes keeps the backup.`})}a()},[o,a]),ne=(0,v.useCallback)(({change:e,message:t,select:n})=>{m(null),n!==void 0&&f(n),o({text:t,...e?{undo:()=>te(e)}:{}}),a()},[o,a,te]),re=(0,v.useMemo)(()=>({view:e,overview:t,sharedNames:new Set(t?.sharedMemories.map(e=>e.name)??[]),onOpenDirectory:s,onCompare:()=>u(e.path),onAdd:e=>{f(null),m(e)},onSaved:ne,onChange:async(e,t,n)=>{try{ne({change:await e(),message:t,...n===void 0?{}:{select:n}})}catch(e){o({text:`Could not do that: ${yf(e)}`}),a()}}}),[e,t,s,u,ne,o,a]),{trust:ie}=e;return(0,k.jsxs)(`div`,{className:`workspace${O||p?``:` no-details`}`,children:[(0,k.jsxs)(`div`,{className:`work-main`,children:[(0,k.jsxs)(`header`,{className:`dir-head`,children:[(0,k.jsxs)(`div`,{className:`dir-title`,children:[(0,k.jsx)(`h1`,{className:`mono`,title:A(e.path),children:A(e.path)}),!e.exists&&(0,k.jsx)(`span`,{className:`flag bad`,children:`folder no longer exists`}),e.gitRoot&&e.gitRoot!==e.path&&(0,k.jsxs)(`span`,{className:`flag`,children:[`inside `,A(e.gitRoot)]}),ie.sessionOnly?(0,k.jsx)(`span`,{className:`flag`,title:`In your home directory Claude Code asks for trust each session and saves no answer.`,children:`trust asked each session`}):!ie.trusted&&(0,k.jsx)(`span`,{className:`flag warn`,title:e.profile===`print`?`claude -p and the SDK never show the trust dialog. Until you accept it for ${A(ie.root)} in an interactive session, they leave out allow rules and extra folders from repository settings.`:`Until you accept Claude Code's trust dialog for ${A(ie.root)}, ${ie.inheritedFrom?`its allow rules, extra folders and .mcp.json approvals wait. You trusted ${A(ie.inheritedFrom)}, which covers hooks but not those grants.`:`hooks from every settings file, its allow rules, extra folders and .mcp.json approvals wait.`}`,children:`not trusted yet`})]}),(0,k.jsxs)(`div`,{className:`toolbar`,children:[(0,k.jsxs)(`fieldset`,{className:`segmented view-switch`,"aria-label":`View`,children:[(0,k.jsx)(`button`,{type:`button`,"aria-pressed":!h,onClick:()=>g(!1),children:`Config`}),(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":h,onClick:()=>g(!0),children:[(0,k.jsx)(j,{name:`eye`}),` What Claude sees`]})]}),(0,k.jsxs)(`label`,{className:`filter${h?` hidden`:``}`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{ref:S,value:_.query,onChange:e=>C({..._,query:e.target.value}),onKeyDown:e=>{e.key===`Escape`&&(C({..._,query:``}),e.currentTarget.blur())},placeholder:`Filter rows`,"aria-label":`Filter rows`}),(0,k.jsx)(`kbd`,{children:`/`})]}),(0,k.jsxs)(`button`,{type:`button`,className:`palette-button`,"aria-label":`Jump to`,onClick:c,children:[(0,k.jsx)(`span`,{className:`palette-label`,children:`Jump to`}),` `,(0,k.jsx)(`kbd`,{children:`Ctrl K`})]})]}),(0,k.jsx)(`nav`,{className:`section-index${h?` hidden`:``}`,"aria-label":`Sections`,children:w.map(({section:e,all:t},n)=>(0,k.jsxs)(`a`,{href:`#section-${e.id}`,className:t.length===0?`empty`:``,onClick:t=>{t.preventDefault(),document.getElementById(`section-${e.id}`)?.scrollIntoView({block:`start`})},children:[(0,k.jsx)(`kbd`,{children:n+1}),` `,e.short??e.title,(0,k.jsx)(`span`,{className:`seg-count`,children:t.length})]},e.id))})]}),(0,k.jsxs)(`div`,{className:`session-line`,children:[(0,k.jsx)(`span`,{children:`Describes`}),(0,k.jsx)(`fieldset`,{className:`segmented small profile-switch`,"aria-label":`Session`,title:`Interactive claude asks for workspace trust and .mcp.json approval. claude -p and the SDK never show the trust dialog: they run settings-file hooks and connect .mcp.json servers without asking.`,children:[`interactive`,`print`].map(t=>(0,k.jsx)(`button`,{type:`button`,"aria-pressed":e.profile===t,onClick:()=>l(t),children:t===`print`?`claude -p / SDK`:`interactive session`},t))})]}),e.problems.length>0&&(0,k.jsxs)(`section`,{className:`problems`,role:`alert`,"aria-label":`Files ccdesk could not read`,children:[(0,k.jsx)(j,{name:`warn`}),(0,k.jsx)(`ul`,{className:`plain`,children:e.problems.map(e=>(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`span`,{className:`mono`,children:A(e.path)}),`: `,e.error,`.`,` `,e.blocksStart?`Claude Code refuses to start until your organisation's settings are fixed, so nothing below applies yet.`:`Claude Code may skip this file.`]},e.path))})]}),h?(0,k.jsx)(Ae,{view:e}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(uf,{view:e,lit:O?.line??null,filter:_.line,onFilter:e=>C({..._,line:e})}),(0,k.jsx)(df,{view:e}),(0,k.jsx)(mf,{groups:w,actions:re,state:_,selected:d,onSelect:ee,onSort:(e,t)=>y({..._,sort:{..._.sort,[e]:t}}),onOnly:(e,t)=>C({..._,only:{..._.only,[e]:t}}),onShowMore:e=>x(t=>({...t,[e]:(t[e]??50)+50})),filtered:D}),D&&E.length===0&&(0,k.jsxs)(`p`,{className:`tt-empty`,children:[`Nothing matches.`,` `,(0,k.jsx)(`button`,{type:`button`,className:`link`,onClick:()=>C(Qd),children:`Clear filters`})]})]})]}),(0,k.jsx)(Zd,{row:O,adding:p,actions:re,onClose:()=>{f(null),m(null)}})]})}var Cf=[{label:`Directory`,sort:e=>e.path},{label:`Sessions`,sort:e=>e.sessions},{label:`Memories`,sort:e=>e.memories},{label:`Last used`,sort:e=>e.lastActive??``}];function wf({overview:e,onOpen:t}){let n=(0,v.useMemo)(()=>e.projects.filter(e=>!e.ephemeral),[e]),r=n.reduce((e,t)=>e+t.memories,0),[i,a]=(0,v.useState)(()=>ef().query),[o,s]=(0,v.useState)(()=>ef().sort.dirs),[c,l]=(0,v.useState)(50);(0,v.useEffect)(()=>af({kind:`all`},{...Qd,query:i,sort:o?{dirs:o}:{}}),[i,o]);let u=(0,v.useMemo)(()=>{let e=i.trim().toLowerCase(),t=n.filter(t=>!e||t.path.toLowerCase().includes(e)),r=o&&Cf[o.column]?.sort;return o&&r&&t.sort((e,t)=>{let[n,i]=[r(e),r(t)],a=typeof n==`number`&&typeof i==`number`?n-i:String(n).localeCompare(String(i));return o.descending?-a:a}),t},[n,i,o]);return(0,k.jsxs)(`div`,{className:`page`,children:[(0,k.jsxs)(`header`,{className:`page-head`,children:[(0,k.jsx)(`h1`,{children:`All directories`}),(0,k.jsxs)(`p`,{className:`lede`,children:[n.length,` directories used with Claude Code, `,r,` memories, config from`,` `,(0,k.jsx)(`span`,{className:`mono`,children:A(e.claudeDir)}),`.`]})]}),(0,k.jsxs)(`section`,{className:`tt-section`,"aria-labelledby":`h-dirs`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-dirs`,children:`Directories`}),(0,k.jsx)(`span`,{className:`tt-count`,children:u.length===n.length?n.length:`${u.length} of ${n.length}`}),(0,k.jsxs)(`label`,{className:`filter`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{value:i,onChange:e=>{a(e.target.value),l(50)},placeholder:`Filter directories`,"aria-label":`Filter directories`})]})]}),(0,k.jsxs)(`table`,{className:`tt tt-dirs`,children:[(0,k.jsx)(Q,{columns:Cf,sort:o,onSort:s}),(0,k.jsx)(`tbody`,{children:u.slice(0,c).map(e=>(0,k.jsxs)(`tr`,{onClick:()=>t(e.path),className:e.exists?``:`dim`,children:[(0,k.jsxs)(`td`,{className:`mono`,children:[(0,k.jsx)(`button`,{type:`button`,className:`row-name`,onClick:n=>{n.stopPropagation(),t(e.path)},children:A(e.path)}),!e.exists&&(0,k.jsx)(`span`,{className:`flag`,children:`folder gone`})]}),(0,k.jsx)(`td`,{className:`num`,children:e.sessions||`—`}),(0,k.jsx)(`td`,{className:`num`,children:e.memories||`—`}),(0,k.jsx)(`td`,{className:`num`,children:ce(e.lastActive)})]},e.path))})]}),u.length===0&&(0,k.jsx)(`p`,{className:`tt-empty`,children:n.length===0?`No directories yet. Temporary and test directories are listed in the sidebar.`:`No directory matches.`}),(0,k.jsx)(pf,{shown:Math.min(c,u.length),total:u.length,page:50,onMore:()=>l(c+50)})]}),(0,k.jsxs)(`section`,{className:`tt-section`,"aria-labelledby":`h-shared`,children:[(0,k.jsxs)(`header`,{className:`tt-head`,children:[(0,k.jsx)(`h2`,{id:`h-shared`,children:`Memory saved in more than one directory`}),(0,k.jsx)(`span`,{className:`tt-count`,children:e.sharedMemories.length})]}),e.sharedMemories.length===0?(0,k.jsx)(`p`,{className:`tt-empty`,children:`Every memory lives in exactly one directory.`}):(0,k.jsxs)(`table`,{className:`tt tt-shared`,children:[(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{scope:`col`}),(0,k.jsx)(`th`,{scope:`col`,children:`Memory`}),(0,k.jsx)(`th`,{scope:`col`,children:`Copies`}),(0,k.jsx)(`th`,{scope:`col`,children:`Saved in`})]})}),(0,k.jsx)(`tbody`,{children:e.sharedMemories.map(e=>{let n=new Set(e.stores.map(e=>e.hash)).size===1;return(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`td`,{children:(0,k.jsx)(P,{line:`memory`})}),(0,k.jsx)(`td`,{className:`mono`,children:e.name}),(0,k.jsx)(`td`,{children:(0,k.jsx)(`span`,{className:`flag ${n?``:`warn`}`,children:n?`identical`:`drifted apart`})}),(0,k.jsx)(`td`,{className:`stores`,children:e.stores.map(e=>(0,k.jsx)(`button`,{type:`button`,className:`link mono`,onClick:()=>t(e.projectPath),children:A(e.projectPath)},e.projectPath))})]},e.name)})})]})]})]})}function Tf(e,t){let n=e.trim();return t&&(n===`~`||n.startsWith(`~/`))?t+n.slice(1):n.startsWith(`/`)||/^[A-Za-z]:[\\/]/.test(n)?n:null}function Ef({overview:e,rows:t,compareFrom:n,onClose:r,onOpenDirectory:i,onSelectRow:a,onOpenMemory:o,onCompare:s}){let[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(0),f=(0,v.useRef)(null);(0,v.useEffect)(()=>f.current?.focus(),[]),(0,v.useEffect)(()=>{document.getElementById(`pal-${u}`)?.scrollIntoView({block:`nearest`})},[u]);let p=(0,v.useMemo)(()=>{let r=c.trim().toLowerCase(),i=(e?.projects??[]).filter(e=>!e.ephemeral&&e.path!==n&&(!r||e.path.toLowerCase().includes(r))).map(e=>({kind:`dir`,key:`dir:${e.path}`,label:A(e.path),path:e.path}));if(n!==void 0){let t=Tf(c,e?.home),n=i.some(e=>e.kind===`dir`&&e.path===t);return[...t&&!n?[{kind:`dir`,key:`typed:${t}`,label:A(t),path:t}]:[],...i].slice(0,40)}let a=t.filter(e=>r&&Jd(e.section).text(e).toLowerCase().includes(r)).map(e=>({kind:`row`,key:e.id,label:Jd(e.section).label(e),row:e})),o=new Set(t.map(e=>e.id)),s=(e?.memoryCatalog??[]).filter(e=>r&&!o.has(`mem:${e.path}`)&&`${e.name} ${e.description} ${e.type}`.toLowerCase().includes(r)).map(e=>({kind:`memory`,key:`cat:${e.path}`,label:`memory ${e.name} · ${A(e.projectPath)}`,projectPath:e.projectPath,path:e.path}));return[...a,...s,...i].slice(0,40)},[c,e,t,n]),m=e=>{e&&(e.kind===`dir`&&n!==void 0?s(n,e.path):e.kind===`dir`?i(e.path):e.kind===`memory`?o(e.projectPath,e.path):a(e.row.id),r())};return(0,k.jsx)(`div`,{className:`palette-backdrop`,onMouseDown:r,children:(0,k.jsxs)(`div`,{className:`palette`,role:`dialog`,"aria-modal":`true`,"aria-label":n===void 0?`Jump to`:`Compare settings with`,onMouseDown:e=>e.stopPropagation(),children:[(0,k.jsxs)(`label`,{className:`palette-input`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{ref:f,role:`combobox`,"aria-expanded":`true`,value:c,onChange:e=>{l(e.target.value),d(0)},placeholder:n===void 0?`Jump to a directory, file, setting or memory`:`Compare settings with a directory, or type its path`,"aria-controls":`palette-results`,"aria-activedescendant":p[u]?`pal-${u}`:void 0,onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),d(e=>Math.min(e+1,p.length-1))):e.key===`ArrowUp`?(e.preventDefault(),d(e=>Math.max(e-1,0))):e.key===`Enter`?(e.preventDefault(),m(p[u])):e.key===`Escape`?r():e.key===`Tab`&&e.preventDefault()}})]}),(0,k.jsxs)(`div`,{id:`palette-results`,className:`palette-results`,role:`listbox`,"aria-label":`Results`,children:[p.length===0&&(0,k.jsx)(`div`,{className:`palette-empty`,children:c.trim()?`Nothing matches “${c}”.`:n===void 0?`Type to search directories, files, settings and memories.`:`No other directories yet. Type a full path.`}),p.map((e,t)=>(0,k.jsxs)(`div`,{id:`pal-${t}`,role:`option`,tabIndex:-1,"aria-selected":t===u,className:t===u?`active`:``,onMouseEnter:()=>d(t),onClick:()=>m(e),children:[e.kind===`row`?e.row.line?(0,k.jsx)(P,{line:e.row.line}):(0,k.jsx)(j,{name:`command`}):e.kind===`memory`?(0,k.jsx)(P,{line:`memory`}):(0,k.jsx)(j,{name:`folder`}),(0,k.jsx)(`span`,{className:e.kind===`dir`?`mono`:``,children:e.label})]},e.key))]})]})})}var Df=`https://ayagmar.github.io/ccdesk/`,Of=[{size:`smaller`,label:`Smaller text`},{size:`default`,label:`Default text size`},{size:`larger`,label:`Larger text`}];function kf(e,t){return e===t?`~ (home)`:A(e)}function Af({overview:e,current:t,changesOpen:n,dark:r,onOpen:i,onChanges:a,onToggleTheme:o,textSize:s,onTextSize:c}){let[l,u]=(0,v.useState)(``),[d,f]=(0,v.useState)(!1),p=e?.projects??[],m=e=>!l||e.path.toLowerCase().includes(l.toLowerCase()),h=p.find(t=>t.path===e?.launchDir),g=p.filter(e=>!e.ephemeral&&e!==h&&m(e)),_=p.filter(e=>e.ephemeral&&e!==h&&m(e)),y=n=>(0,k.jsx)(`li`,{children:(0,k.jsxs)(`button`,{type:`button`,className:`rail-item${t===n.path?` current`:``}${n.exists?``:` gone`}`,"aria-current":t===n.path?`page`:void 0,onClick:()=>i(n.path),title:n.exists?A(n.path):`${A(n.path)} (folder no longer exists)`,children:[(0,k.jsx)(`span`,{className:`rail-label`,children:kf(n.path,e?.home??``)}),n.memories>0&&(0,k.jsx)(`span`,{className:`rail-count`,children:n.memories})]})},n.path);return(0,k.jsxs)(`nav`,{className:`rail`,"aria-label":`Directories`,children:[(0,k.jsxs)(`div`,{className:`brand`,children:[(0,k.jsxs)(`a`,{className:`brand-link`,href:Df,target:`_blank`,rel:`noreferrer`,title:`ccdesk docs`,children:[(0,k.jsx)(`img`,{src:`/logo.png`,width:`26`,height:`26`,alt:``}),(0,k.jsx)(`span`,{children:`ccdesk`})]}),(0,k.jsx)(`fieldset`,{className:`segmented small text-size`,"aria-label":`Text size`,children:Of.map(({size:e,label:t})=>(0,k.jsx)(`button`,{type:`button`,className:e,"aria-label":t,title:t,"aria-pressed":s===e,onClick:()=>c(e),children:`A`},e))}),(0,k.jsx)(`button`,{type:`button`,className:`icon-button`,onClick:o,"aria-label":`Dark theme`,"aria-pressed":r,children:(0,k.jsx)(j,{name:`sun`})})]}),(0,k.jsxs)(`button`,{type:`button`,className:`rail-item overview-link${t===null?` current`:``}`,"aria-current":t===null?`page`:void 0,onClick:()=>i(null),children:[(0,k.jsx)(j,{name:`folder`}),` `,(0,k.jsx)(`span`,{className:`rail-label`,children:`All directories`})]}),(0,k.jsxs)(`button`,{type:`button`,className:`rail-item overview-link${n?` current`:``}`,"aria-current":n?`page`:void 0,onClick:a,children:[(0,k.jsx)(j,{name:`undo`}),` `,(0,k.jsx)(`span`,{className:`rail-label`,children:`Recent changes`})]}),h&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`h2`,{className:`rail-group`,children:`Opened from`}),(0,k.jsx)(`ul`,{className:`rail-list`,children:y(h)})]}),(0,k.jsxs)(`label`,{className:`rail-filter`,children:[(0,k.jsx)(j,{name:`search`}),(0,k.jsx)(`input`,{value:l,onChange:e=>u(e.target.value),placeholder:`Find a directory`,"aria-label":`Find a directory`})]}),(0,k.jsx)(`h2`,{className:`rail-group`,children:`Used with Claude`}),g.length>0?(0,k.jsx)(`ul`,{className:`rail-list`,children:g.map(y)}):(0,k.jsx)(`p`,{className:`rail-empty`,children:l?`No directory matches.`:`No other directories yet.`}),_.length>0&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`button`,{type:`button`,className:`rail-group toggle`,"aria-expanded":d,onClick:()=>f(!d),children:[`Temporary and test dirs `,(0,k.jsx)(`span`,{className:`rail-count`,children:_.length})]}),d&&(0,k.jsx)(`ul`,{className:`rail-list`,children:_.map(y)})]}),typeof t==`string`&&(0,k.jsxs)(`ul`,{className:`rail-keys`,"aria-label":`Keyboard shortcuts`,children:[(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`j`}),` `,(0,k.jsx)(`kbd`,{children:`k`}),` rows`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`1`}),`–`,(0,k.jsx)(`kbd`,{children:qd.length}),` sections`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`/`}),` filter`]}),(0,k.jsxs)(`li`,{children:[(0,k.jsx)(`kbd`,{children:`Ctrl`}),` `,(0,k.jsx)(`kbd`,{children:`K`}),` jump anywhere`]})]})]})}function jf(){let e=document.documentElement.dataset.theme;return e?e===`dark`:matchMedia(`(prefers-color-scheme: dark)`).matches}function Mf(){let[e,t]=(0,v.useState)($d),[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(jf),[u,d]=(0,v.useState)(()=>document.documentElement.dataset.textSize??`default`),[f,p]=(0,v.useState)(0),m=e.kind===`directory`?e.profile:`interactive`,h=bf(e.kind===`directory`?e.dir:null,m),{view:g,data:_,dir:y,reload:b}=h,x=h.overview.state===`ready`?h.overview.data:null,S=(0,v.useMemo)(()=>_?Yd(_):[],[_]),C=(0,v.useCallback)(e=>{t(e),p(e=>e+1),rf(e)},[]),w=(0,v.useCallback)(e=>C(e===null?{kind:`all`}:{kind:`directory`,dir:e,profile:m}),[C,m]),T=(0,v.useCallback)(e=>t(t=>t.kind===`directory`?{...t,profile:e}:t),[]);(0,v.useEffect)(()=>{let e=()=>{t($d()),p(e=>e+1)};return addEventListener(`popstate`,e),()=>removeEventListener(`popstate`,e)},[]),(0,v.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),r(e=>e?null:{}))};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]);let E=()=>{let e=jf()?`light`:`dark`;document.documentElement.dataset.theme=e,l(e===`dark`);try{localStorage.setItem(`ccdesk-theme`,e)}catch{}},D=e=>{e==="default"?delete document.documentElement.dataset.textSize:document.documentElement.dataset.textSize=e,d(e);try{localStorage.setItem(`ccdesk-text-size`,e)}catch{}},O=(0,v.useCallback)(()=>a(null),[]),ee=(0,v.useCallback)(e=>r({compareFrom:e}),[]);return(0,k.jsxs)(`div`,{className:`app`,children:[(0,k.jsx)(Af,{overview:x,current:e.kind===`directory`?_?.path??y:e.kind===`all`?null:void 0,changesOpen:e.kind===`changes`,dark:c,onOpen:w,onChanges:()=>C({kind:`changes`}),onToggleTheme:E,textSize:u,onTextSize:D}),(0,k.jsx)(`main`,{className:`main`,children:h.overview.state===`error`?(0,k.jsx)(Pf,{message:h.overview.message}):e.kind===`changes`?(0,k.jsx)(M,{onRestored:e=>{a({text:e}),b()}}):e.kind===`compare`?(0,k.jsx)(Ce,{dir:e.dir,other:e.other,onOpen:w,onPickOther:()=>ee(e.dir)},f):e.kind===`all`?x?(0,k.jsx)(wf,{overview:x,onOpen:w},f):(0,k.jsx)(Nf,{}):g.state===`error`?(0,k.jsx)(Pf,{message:g.message}):_?(0,k.jsx)(Sf,{view:_,overview:x,rows:S,jump:o,onJumped:()=>s(null),reload:b,onToast:a,onOpenDirectory:w,onOpenPalette:()=>r({}),onProfile:T,onCompare:ee},`${_.path}:${f}`):(0,k.jsx)(Nf,{})}),n&&(0,k.jsx)(Ef,{overview:x,rows:S,compareFrom:n.compareFrom,onClose:()=>r(null),onCompare:(e,t)=>C({kind:`compare`,dir:e,other:t}),onOpenDirectory:w,onSelectRow:e=>s({id:e}),onOpenMemory:(e,t)=>{e!==y&&w(e),s({id:`mem:${t}`})}}),(0,k.jsx)(vf,{toast:i,onDone:O})]})}function Nf(){return(0,k.jsxs)(`div`,{className:`loading`,role:`status`,children:[(0,k.jsx)(`span`,{className:`loading-line`,"aria-hidden":`true`}),`Reading your config…`]})}function Pf({message:e}){return(0,k.jsxs)(`div`,{className:`problem`,role:`alert`,children:[(0,k.jsx)(`h1`,{children:`Something went wrong`}),(0,k.jsx)(`p`,{children:e})]})}try{let e=localStorage.getItem(`ccdesk-theme`);(e===`light`||e===`dark`)&&(document.documentElement.dataset.theme=e);let t=localStorage.getItem(`ccdesk-text-size`);(t===`smaller`||t===`larger`)&&(document.documentElement.dataset.textSize=t)}catch{}var Ff=document.getElementById(`root`);Ff&&(0,y.createRoot)(Ff).render((0,k.jsx)(v.StrictMode,{children:(0,k.jsx)(Mf,{})}));
|
package/dist/ui/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<meta name="color-scheme" content="light dark" />
|
|
7
7
|
<title>ccdesk</title>
|
|
8
8
|
<link rel="icon" href="/logo.png" type="image/png" />
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-XqJwI3k9.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D5XqP5c_.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccdesk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "See and change everything Claude Code loads on your machine: instruction files, settings, permissions, hooks, MCP servers, subagents, skills, plugins and auto memory",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-cyrillic-ext-wght-normal-D_UHSL_T.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-vietnamese-wght-normal-CHiFlh_0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-ext-wght-normal-EocZY2iu.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#fbfbf7;--panel:#fff;--sunk:#f1f0ea;--ink:#141414;--ink-2:#4a4a45;--muted:#6b6a63;--rule:#dcdad1;--rule-strong:#141414;--sel:#fff3c4;--sel-ink:#141414;--hover:#f4f3ec;--focus:#0072b2;--ok:#1d6b47;--warn:#8a5a00;--warn-bg:#fff1d6;--bad:#a3361c;--bad-bg:#fde7e0;--on-bad:#fff;--line-managed:#b84f00;--line-user:#0072b2;--line-project:#007a5a;--line-local:#e69f00;--line-memory:#cc79a7;--line-plugin:#5f5f5a;--on-managed:#fff;--on-user:#fff;--on-project:#fff;--on-local:#141414;--on-memory:#141414;--on-plugin:#fff;--sans:"Hanken Grotesk Variable", "Helvetica Neue", Helvetica, "Nimbus Sans", "Liberation Sans", Arial, sans-serif;--mono:"JetBrains Mono Variable", ui-monospace, "JetBrains Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--row:32px;--head:92px;--rail:248px;--inspector:clamp(440px, 30vw, 600px);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#131312;--panel:#1a1a18;--sunk:#222220;--ink:#ece8de;--ink-2:#c7c2b6;--muted:#938f84;--rule:#2c2b28;--rule-strong:#ece8de;--sel:#33302a;--sel-ink:#fff6e0;--hover:#1d1d1b;--focus:#f2c14e;--ok:#6fcf97;--warn:#f2c14e;--warn-bg:#2b2512;--bad:#ff8a73;--bad-bg:#371b15;--on-bad:#131312;--line-managed:#ff7a3d;--line-user:#4aa8e8;--line-project:#2fbf8f;--line-local:#f2b233;--line-memory:#e391bd;--line-plugin:#8d95a5;--on-managed:#131312;--on-user:#131312;--on-project:#131312;--on-plugin:#131312;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--paper:#131312;--panel:#1a1a18;--sunk:#222220;--ink:#ece8de;--ink-2:#c7c2b6;--muted:#938f84;--rule:#2c2b28;--rule-strong:#ece8de;--sel:#33302a;--sel-ink:#fff6e0;--hover:#1d1d1b;--focus:#f2c14e;--ok:#6fcf97;--warn:#f2c14e;--warn-bg:#2b2512;--bad:#ff8a73;--bad-bg:#371b15;--on-bad:#131312;--line-managed:#ff7a3d;--line-user:#4aa8e8;--line-project:#2fbf8f;--line-local:#f2b233;--line-memory:#e391bd;--line-plugin:#8d95a5;--on-managed:#131312;--on-user:#131312;--on-project:#131312;--on-plugin:#131312;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--paper);color:var(--ink);font:14px / 1.45 var(--sans);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;margin:0}::selection{background:var(--sel);color:var(--sel-ink)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:var(--rule) transparent}button,input{font:inherit;color:inherit}button{cursor:pointer}.mono,code,pre,kbd{font-family:var(--mono);font-size:12.5px}kbd{border:1px solid var(--rule);color:var(--muted);background:var(--panel);border-bottom-width:2px;border-radius:4px;padding:0 5px;font-size:11px}.muted{color:var(--muted)}.small{font-size:12.5px}.icon{flex-shrink:0;display:block}.app{grid-template-columns:var(--rail) minmax(0, 1fr);height:100vh;display:grid;overflow:hidden}.main{flex-direction:column;min-width:0;display:flex;overflow:hidden}.workspace{grid-template-columns:minmax(0, 1fr) var(--inspector);height:100%;min-height:0;display:grid}.workspace.no-details{grid-template-columns:minmax(0,1fr)}.work-main{min-width:0;padding:0 28px 64px;overflow-y:auto;container-type:inline-size}.rail{background:var(--panel);border-right:1px solid var(--rule);flex-direction:column;gap:2px;padding:14px 10px 32px;display:flex;overflow-y:auto}.brand{letter-spacing:-.01em;align-items:center;gap:8px;padding:2px 6px 14px;font-size:16px;font-weight:700;display:flex}.brand .icon-button{margin-left:auto}.rail-group{color:var(--muted);justify-content:space-between;align-items:center;margin:14px 6px 4px;font-size:12px;font-weight:600;display:flex}.rail-group.toggle{text-align:left;background:0 0;border:0;padding:0}.rail-group.toggle:hover{color:var(--ink)}.rail-list{margin:0;padding:0;list-style:none}.rail-item{text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;width:100%;height:30px;padding:0 8px;font-size:13.5px;display:flex}.rail-item:hover{background:var(--hover)}.rail-item.current{background:var(--sel);color:var(--sel-ink);font-weight:600}.rail-item.gone .rail-label{text-decoration:line-through;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}.rail-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.rail-count{font-family:var(--mono);color:var(--muted);font-size:11.5px}.rail-item.current .rail-count{color:inherit;opacity:.75}.rail-filter,.filter,.palette-input{border:1px solid var(--rule);background:var(--paper);height:30px;color:var(--muted);border-radius:6px;align-items:center;gap:6px;padding:0 8px;display:flex}.rail-filter{margin:12px 0 0}.rail-filter input,.filter input,.palette-input input{min-width:0;color:var(--ink);background:0 0;border:0;outline:0;flex:1}.rail-filter:focus-within,.filter:focus-within{border-color:var(--focus)}input::placeholder{color:var(--muted)}.dir-head{z-index:3;background:var(--paper);height:var(--head);grid-template-rows:32px 28px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 16px;padding:16px 0 8px;display:grid;position:sticky;top:0}.dir-title{align-items:center;gap:10px;min-width:0;display:flex}.dir-title h1{letter-spacing:-.01em;white-space:nowrap;text-overflow:ellipsis;min-width:0;margin:0;font-size:19px;font-weight:700;overflow:hidden}.dir-title .flag,.session-line{color:var(--muted);align-items:center;gap:8px;margin:4px 0 12px;font-size:13px;display:flex}.section-index{scrollbar-width:none;grid-column:1/-1;gap:2px;display:flex;overflow-x:auto}.section-index a{height:26px;color:var(--ink-2);white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:0 6px;font-size:13px;text-decoration:none;display:inline-flex}.section-index a:hover{background:var(--hover);color:var(--ink)}.section-index a.empty{color:var(--muted)}.section-index kbd{padding:0 4px}@container (width<=960px){.section-index kbd{display:none}}@container (width<=700px){.section-index .seg-count{display:none}}@container (width<=560px){.section-index a{padding:0 4px;font-size:12px}}.seg-count{font-family:var(--mono);color:var(--muted);font-size:11px}[aria-pressed=true] .seg-count{color:inherit;opacity:.75}.tt-section{scroll-margin-top:var(--head)}.via-agents{vertical-align:middle;font-family:var(--mono);margin-left:8px}.vis-personal{color:var(--muted)}.toolbar{align-items:center;gap:8px;display:flex}.filter{width:240px}@container (width<=960px){.filter{width:140px}.palette-label{display:none}}.palette-button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;align-items:center;gap:8px;height:30px;padding:0 10px;font-size:13px;display:flex}.palette-button:hover{border-color:var(--ink-2)}.route{border-top:2px solid var(--rule-strong);border-bottom:1px solid var(--rule);margin:4px 0 8px}.route-stops{margin:0;padding:0;list-style:none;display:flex;position:relative}.stop{flex:2 1 0;min-width:0}.stop.idle{flex:1 1 0}.route-stops:before{content:"";background:var(--ink);height:3px;position:absolute;top:25px;left:22px;right:22px}.stop button{text-align:left;background:0 0;border:0;border-radius:6px;grid-template-rows:22px auto auto;justify-items:start;gap:4px;width:100%;padding:14px 8px 12px;display:grid;position:relative}.stop button:hover{background:var(--hover)}.stop button.on{background:var(--sunk)}.stop-node{background:var(--paper);border-radius:999px;padding:0 6px 0 0;display:flex}.stop button:hover .stop-node,.stop button.on .stop-node{background:0 0}.stop-name{font-size:13.5px;font-weight:700}.stop-facts{font-family:var(--mono);color:var(--muted);font-size:11.5px}.stop.idle .stop-name{color:var(--muted);font-weight:500}.stop.lit .bullet{box-shadow:0 0 0 2px var(--paper), 0 0 0 4px var(--ink)}.stop button.on .stop-name{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:2px}.bullet{width:22px;height:22px;font:700 11.5px / 1 var(--sans);background:var(--bullet);color:var(--bullet-ink);border:2px solid var(--bullet);border-radius:999px;flex-shrink:0;place-items:center;transition:box-shadow .16s cubic-bezier(.16,1,.3,1);display:inline-grid}.bullet.hollow{background:var(--paper);color:var(--bullet)}.bullet.hollow.bullet-local,.bullet.hollow.bullet-memory{color:var(--ink)}.bullet-managed{--bullet:var(--line-managed);--bullet-ink:var(--on-managed)}.bullet-user{--bullet:var(--line-user);--bullet-ink:var(--on-user)}.bullet-project{--bullet:var(--line-project);--bullet-ink:var(--on-project)}.bullet-local{--bullet:var(--line-local);--bullet-ink:var(--on-local)}.bullet-memory{--bullet:var(--line-memory);--bullet-ink:var(--on-memory)}.bullet-plugin{--bullet:var(--line-plugin);--bullet-ink:var(--on-plugin)}.tt .bullet{vertical-align:middle}.tt .bullet,.palette .bullet,.layers .bullet{width:20px;height:20px;font-size:10.5px}.tt-section{margin-top:26px}.tt-head{border-top:2px solid var(--rule-strong);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 0 6px;display:flex}.tt-head h2{letter-spacing:-.005em;margin:0;font-size:15px;font-weight:700}.tt-count{font-family:var(--mono);color:var(--muted);font-size:12px}.tt-empty{color:var(--muted);margin:4px 0 0;padding:6px 0}.tt{border-collapse:collapse;table-layout:fixed;width:100%}.tt th{top:var(--head);z-index:1;background:var(--paper);text-align:left;color:var(--muted);border-bottom:1px solid var(--rule-strong);white-space:nowrap;height:26px;box-shadow:0 -16px 0 var(--paper);padding:0 8px;font-size:12px;font-weight:600;position:sticky}.tt td{height:var(--row);border-bottom:1px solid var(--rule);white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;padding:0 8px;overflow:hidden}.tt tbody tr{cursor:pointer}.tt tbody tr:hover td{background:var(--hover)}.tt tbody tr.selected td{background:var(--sel);color:var(--sel-ink)}.tt tbody tr.selected .row-name{font-weight:700}.tt tbody tr.dim td{color:var(--muted)}.tt td.num{text-align:right;font-family:var(--mono);color:var(--muted);font-size:12px}.tt td.num.used{color:var(--ink)}.tt th:first-child,.tt td:first-child{padding-left:2px}.row-name{font:inherit;text-overflow:ellipsis;white-space:nowrap;text-align:left;vertical-align:middle;background:0 0;border:0;max-width:100%;padding:0;overflow:hidden}.via{vertical-align:middle;color:var(--muted);margin-left:6px;display:inline-flex}.value,.why,.desc{color:var(--ink-2)}.tt-instructions th:first-child,.tt-instructions th:nth-child(2){width:40px}.tt-instructions th:nth-child(3){width:32%}.tt-instructions th:nth-child(4){width:86px}.tt-instructions th:nth-child(6){text-align:right;width:58px}.tt-instructions th:nth-child(7){width:108px}.tt-settings th:first-child{width:76px}.tt-settings th:nth-child(2),.tt-settings th:nth-child(4){width:30%}.tt-memory th:first-child{width:40px}.tt-memory th:nth-child(2){width:24%}.tt-memory th:nth-child(3){width:98px}.tt-memory th:nth-child(5){width:200px}.tt-memory th:nth-child(6){text-align:right;width:82px}.tt-hooks th:first-child,.tt-permissions th:first-child,.tt-mcp th:first-child,.tt-extensions th:first-child{width:40px}.tt-hooks th:nth-child(2){width:140px}.tt-hooks th:nth-child(3){width:26%}.tt-permissions th:nth-child(2){width:120px}.tt-permissions th:nth-child(4){width:34%}.tt-mcp th:nth-child(2){width:26%}.tt-mcp th:nth-child(3){width:92px}.tt-extensions th:nth-child(2){width:104px}.tt-extensions th:nth-child(3){width:30%}.tt-tools th:first-child{width:40px}.tt-tools th:nth-child(2){width:190px}.tt-tools th:nth-child(3){width:150px}.tt-tools th:nth-child(4){width:190px}.tt-tools th:nth-child(5){text-align:right;width:64px}.tt-dirs th:nth-child(2),.tt-dirs th:nth-child(3){text-align:right;width:96px}.tt-dirs th:nth-child(4){text-align:right;width:110px}.tt-shared th:first-child{width:40px}.tt-shared th:nth-child(2){width:30%}.tt-shared th:nth-child(3){width:130px}.bullets>*+*{margin-left:3px}.beat{color:var(--muted)}.beaten{font-family:var(--mono);align-items:center;gap:4px;margin-right:10px;font-size:12px;display:inline-flex}.beaten s{text-decoration-thickness:1.5px}.status{font-size:12.5px;font-weight:600}.status-loaded{color:var(--ok)}.status-skipped{color:var(--muted)}.status-on-match{color:var(--ink-2)}.vis{font-size:12.5px}.vis-tracked{color:var(--ok);font-weight:600}.vis-untracked{color:var(--warn)}.vis-ignored,.vis-no-git{color:var(--muted)}.type{align-items:center;gap:6px;font-size:13px;display:inline-flex}.type-dot{background:var(--ink-2);flex-shrink:0;width:8px;height:8px}.type-user{border-radius:999px}.type-feedback{clip-path:polygon(50% 0,100% 100%,0 100%)}.type-reference{transform:rotate(45deg)scale(.85)}.type-unknown{box-shadow:inset 0 0 0 1.5px var(--muted);background:0 0}.checks>*+*{margin-left:4px}.flag{background:var(--sunk);color:var(--ink-2);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding:0 6px;font-size:11.5px;line-height:18px;display:inline-flex}.flag .icon{width:13px;height:13px}.flag.warn{background:var(--warn-bg);color:var(--warn)}.flag.bad{background:var(--bad-bg);color:var(--bad)}.segmented{border:1px solid var(--rule);scrollbar-width:none;border-radius:6px;min-width:0;max-width:100%;margin:0 0 0 6px;padding:0;display:inline-flex;overflow-x:auto}.segmented button{white-space:nowrap;border:0;border-right:1px solid var(--rule);background:var(--panel);flex:none;align-items:center;gap:5px;height:24px;padding:0 9px;font-size:12.5px;display:inline-flex}.segmented button:last-child{border-right:0}.segmented button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.segmented.small button{height:22px;font-size:12px}.inspector{border-left:1px solid var(--rule);background:var(--panel);min-width:0;overflow-y:auto}.insp-head{z-index:2;background:var(--panel);border-bottom:2px solid var(--rule-strong);align-items:center;gap:10px;padding:16px 18px 12px;display:flex;position:sticky;top:0}.insp-head h2{overflow-wrap:anywhere;flex:1;min-width:0;margin:0;font-size:16px;font-weight:700}.insp-body{padding:14px 18px 40px}.verdict{color:var(--ink-2);margin:0 0 14px}.verdict.ok{color:var(--ink)}.verdict.off{color:var(--muted)}.fields{grid-template-columns:104px minmax(0,1fr);gap:6px 12px;margin:0 0 16px;font-size:13px;display:grid}.fields dt{color:var(--muted)}.fields dd{min-width:0;margin:0}.path{flex-wrap:wrap;align-items:center;gap:2px 6px;max-width:100%;display:inline-flex}.path .mono{overflow-wrap:anywhere}.copied{color:var(--ok);flex-basis:100%;font-size:12px}.wrap{overflow-wrap:anywhere;white-space:normal}.icon-button{width:28px;height:28px;color:var(--muted);background:0 0;border:0;border-radius:6px;flex-shrink:0;place-items:center;display:inline-grid}.icon-button:hover{background:var(--hover);color:var(--ink)}.icon-button.small{width:22px;height:22px}.sub{margin:0 0 16px}.sub h3,.sub-title{margin:0 0 6px;font-size:13px;font-weight:700}.plain{gap:4px;margin:0;padding:0;list-style:none;display:grid}.plain li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.layers{border-collapse:collapse;width:100%;margin-bottom:14px}.layers th{text-align:left;width:40px;padding:4px 0}.layers td{border-bottom:1px solid var(--rule);overflow-wrap:anywhere;padding:4px 8px}.layers tr.wins td{font-weight:600}.layers tr.lost td{color:var(--muted);text-decoration:line-through}.layers tr.unset td{color:var(--muted)}.contents{border-top:1px solid var(--rule-strong);margin-top:8px}.contents-bar{justify-content:space-between;align-items:center;padding:8px 0;font-size:13px;font-weight:700;display:flex}pre.raw{background:var(--sunk);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;margin:0 0 12px;padding:12px;line-height:1.5;overflow-x:auto}.prose{overflow-wrap:anywhere;max-width:68ch;font-size:13.5px;line-height:1.6}.prose h1,.prose h2,.prose h3{margin:18px 0 6px;font-size:14px}.prose p,.prose ul,.prose ol{margin:8px 0}.prose ul,.prose ol{padding-left:20px}.prose code{background:var(--sunk);border-radius:3px;padding:1px 4px}.prose pre{background:var(--sunk);border-radius:6px;padding:10px;overflow-x:auto}.prose pre code{background:0 0;padding:0}.prose a,.link{color:var(--focus);text-underline-offset:2px}.prose table{border-collapse:collapse;display:block;overflow-x:auto}.prose td,.prose th{border:1px solid var(--rule);padding:3px 6px}.link{text-align:left;background:0 0;border:0;padding:0;text-decoration:underline}.actions{margin:4px 0 16px}.quiet-danger{border:1px solid var(--rule);background:var(--panel);height:30px;color:var(--bad);border-radius:6px;align-items:center;gap:6px;padding:0 10px;font-size:13px;display:inline-flex}.quiet-danger:hover{border-color:var(--bad)}.confirm{border:1px solid var(--bad);background:var(--bad-bg);border-radius:8px;padding:12px}.confirm p{margin:0 0 10px;font-size:13px}.confirm-buttons{gap:8px;display:flex}.confirm-buttons button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;height:30px;padding:0 12px;font-size:13px}.confirm-buttons button.danger{background:var(--bad);border-color:var(--bad);color:var(--on-bad);font-weight:600}button:disabled{opacity:.6;cursor:progress}.page{height:100%;padding:22px 28px 64px;overflow-y:auto}.page-head h1{letter-spacing:-.015em;margin:0 0 4px;font-size:22px}.lede{color:var(--ink-2);max-width:72ch;margin:0}.page .tt th{top:-22px}.stores>*+*{margin-left:12px}.palette-backdrop{z-index:20;background:color-mix(in srgb, var(--paper) 55%, transparent);place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.palette{background:var(--panel);border:1px solid var(--rule-strong);border-radius:10px;width:min(640px,100vw - 32px);animation:.18s cubic-bezier(.16,1,.3,1) rise;overflow:hidden;box-shadow:0 18px 48px -12px #00000059}.palette-input{border:0;border-bottom:1px solid var(--rule);background:var(--panel);border-radius:0;height:46px;padding:0 14px}.palette-results{max-height:50vh;margin:0;padding:6px;list-style:none;overflow-y:auto}.palette-results [role=option]{height:var(--row);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:10px;padding:0 10px;display:flex;overflow:hidden}.palette-results [role=option].active{background:var(--sel);color:var(--sel-ink)}.palette-empty{color:var(--muted);padding:8px 10px}.toast-region{z-index:30;position:fixed}.toast{z-index:30;background:var(--ink);color:var(--paper);border-radius:8px;align-items:center;gap:14px;padding:8px 8px 8px 14px;font-size:13.5px;animation:.22s cubic-bezier(.16,1,.3,1) rise;display:flex;position:fixed;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 12px 32px -10px #0006}.toast button{border:1px solid color-mix(in srgb, var(--paper) 40%, transparent);color:inherit;background:0 0;border-radius:6px;align-items:center;gap:6px;height:28px;padding:0 10px;font-weight:600;display:inline-flex}@keyframes rise{0%{opacity:0;translate:0 6px}}.loading{color:var(--muted);flex-direction:column;gap:12px;padding:48px 28px;display:flex}.loading-line{background:linear-gradient(90deg, var(--ink) 0 30%, var(--rule) 30% 100%);background-size:200% 100%;width:220px;height:3px;animation:1.2s cubic-bezier(.65,0,.35,1) infinite travel;display:block}@keyframes travel{0%{background-position:100% 0}to{background-position:-40% 0}}.problem{max-width:64ch;padding:48px 28px}.problem h1{margin:0 0 8px;font-size:18px}.tt-note{color:var(--muted);font-size:12.5px}.perm{font-size:12.5px;font-weight:600}.perm-allow{color:var(--ok)}.perm-ask{color:var(--warn)}.perm-deny{color:var(--bad)}.fix{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.fix .head-action{height:22px;margin-left:0;padding:0 8px}.tt-head .fix{margin-left:4px}.view-switch{flex-shrink:0;margin-left:0}.view-switch button{height:28px}.filter.hidden{display:none}.section-index.hidden{visibility:hidden}.context{border-top:2px solid var(--rule-strong);margin-top:4px;padding-top:12px}.context-summary{margin:0 0 4px;font-size:15px}.context>.muted{max-width:80ch;margin:0 0 12px}.context-large{white-space:normal;margin:0 0 12px;padding:6px 10px;line-height:1.5}.context-bar{gap:2px;height:8px;margin:0 0 8px;display:flex}.context-bar span{border-radius:2px;min-width:3px}.bar-managed{background:var(--line-managed)}.bar-user{background:var(--line-user)}.bar-project{background:var(--line-project)}.bar-local{background:var(--line-local)}.bar-memory{background:var(--line-memory)}.context-list{margin:0;padding:0;list-style:none}.context-list li{border-bottom:1px solid var(--rule)}.context-list summary{min-height:var(--row);cursor:pointer;grid-template-columns:28px 26px minmax(0,1fr) 84px 64px 64px;align-items:center;gap:8px;padding:6px 4px;list-style:none;display:grid}.context-list summary::-webkit-details-marker{display:none}.context-list summary:hover{background:var(--hover)}.context-list summary .num{font-family:var(--mono);text-align:right;color:var(--ink-2);font-size:12px}.context-list summary .num:first-child{text-align:left;color:var(--muted)}.context-name{flex-direction:column;min-width:0;display:flex}.context-name .mono{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.context-list details[open] summary{background:var(--sunk)}.context-list pre.raw{max-height:60vh;margin:8px 0 12px;overflow-y:auto}.context-hidden{margin:8px 4px 12px}.sharing{flex-wrap:wrap;gap:6px 24px;margin:0 0 4px;font-size:12.5px;display:flex}.sharing-group{align-items:baseline;gap:8px;min-width:0;display:flex}.sharing dt{white-space:nowrap}.sharing dd{color:var(--ink-2);flex-wrap:wrap;gap:2px 14px;margin:0;display:flex}.sharing dd span{white-space:nowrap}.problems{background:var(--warn-bg);color:var(--warn);border-radius:6px;align-items:flex-start;gap:8px;margin:0 0 12px;padding:8px 12px;font-size:12.5px;display:flex}.problems ul{overflow-wrap:anywhere;margin:0}@media (prefers-reduced-motion:reduce){*,:before{transition:none!important;animation:none!important}}@media (width>=1181px) and (width<=1400px){:root{--rail:220px;--inspector:360px}.tt-instructions :is(th,td):nth-child(6){display:none}}@media (width<=1180px){.workspace{grid-template-columns:minmax(0,1fr)}.inspector{width:min(var(--inspector), 100vw);z-index:10;position:fixed;top:0;bottom:0;right:0;box-shadow:-16px 0 40px -16px #00000059}.rail-keys{display:none}}@media (width<=760px){.app{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.rail{border-right:0;border-bottom:1px solid var(--rule);max-height:34vh}.work-main,.page{padding-left:16px;padding-right:16px}.filter{flex:160px;width:auto}.toolbar{flex-wrap:wrap;width:100%}.section-index{flex-wrap:wrap}.sharing-group{flex-direction:column;gap:2px}.dir-head{grid-template-rows:auto;grid-template-columns:minmax(0,1fr);height:auto;padding-top:18px;position:static}.dir-title{flex-wrap:wrap}.tt-section{scroll-margin-top:0}.palette-button{display:none}.context-list summary{grid-template-columns:22px 26px minmax(0,1fr) 56px}.context-list summary .num:nth-child(4),.context-list summary .num:last-child{display:none}.route-stops{flex-direction:column}.route-stops:before{width:3px;height:auto;inset:22px auto 22px 19px}.stop button{grid-template-rows:auto;grid-template-columns:30px auto 1fr;align-items:center;padding:6px 8px}.tt th:nth-child(n){width:auto}.tt th:first-child:nth-child(n),.tt-instructions th:nth-child(2):nth-child(n){width:40px}.tt-settings th:first-child:nth-child(n){width:64px}.tt-compare,.tt-compare :is(thead,tbody){display:block}.tt-compare tr{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.tt-compare th:first-child{display:none}.tt-compare td:first-child{border-bottom:0;grid-column:1/-1;padding-bottom:0}.tt-instructions th:first-child,.tt-instructions td:first-child,.tt-instructions :is(th,td):is(:nth-child(5),:nth-child(6)),.tt-settings :is(th,td):nth-child(4),.tt-memory :is(th,td):is(:nth-child(3),:nth-child(4),:nth-child(6)),.tt-permissions :is(th,td):nth-child(4),.tt-tools :is(th,td):is(:nth-child(4),:nth-child(6)),.tt-hooks :is(th,td):nth-child(4),.tt-mcp :is(th,td):nth-child(4),.tt-extensions :is(th,td):nth-child(4),.tt-shared :is(th,td):nth-child(n+4){display:none}.tt-instructions th:nth-child(4):nth-child(n){width:72px}.tt-instructions th:nth-child(7):nth-child(n){width:84px}.tt th{box-shadow:none;position:static}}.head-action{border:1px solid var(--rule);background:var(--panel);border-radius:6px;align-items:center;gap:6px;height:26px;margin-left:auto;padding:0 10px;font-size:12.5px;display:inline-flex}.head-action:hover{border-color:var(--ink-2)}.editor{gap:10px;margin:0 0 18px;display:grid}.editor>p{margin:0}.hint{color:var(--ink-2);font-size:13px}.editor .segmented{justify-self:start;margin-left:0}.field{color:var(--muted);gap:4px;font-size:12.5px;display:grid}.field input:not([type=checkbox]),.field select,.field textarea,.path-form input{border:1px solid var(--rule);background:var(--paper);width:100%;color:var(--ink);border-radius:6px;padding:6px 8px;font-size:13px}.field input:not([type=checkbox]),.field select,.path-form input{height:32px}.field textarea{resize:vertical;line-height:1.5}.field input:focus,.field select:focus,.field textarea:focus,.path-form input:focus{outline:2px solid var(--focus);outline-offset:-1px}.check{color:var(--ink);align-items:center;gap:8px;font-size:13px;display:inline-flex}.check input{width:16px;height:16px;accent-color:var(--ink);margin:0}.editor-buttons{flex-wrap:wrap;gap:8px;display:flex}.editor-buttons button,.path-form button{border:1px solid var(--rule);background:var(--panel);border-radius:6px;height:30px;padding:0 12px;font-size:13px}.editor-buttons button:hover,.path-form button:hover{border-color:var(--ink-2)}.editor-buttons button.primary{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}.key-picker{position:relative}.key-results{border:1px solid var(--rule);background:var(--panel);border-radius:6px;max-height:280px;margin-top:4px;padding:4px;overflow-y:auto}.key-results [role=option]{cursor:pointer;border-radius:4px;gap:1px;padding:6px 8px;font-size:12.5px;display:grid}.key-results [role=option] .muted{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.key-results [role=option].active{background:var(--sel);color:var(--sel-ink)}.review{border-top:1px solid var(--rule-strong);gap:8px;padding-top:10px;display:grid}.suggestions{border:0;flex-wrap:wrap;align-items:center;gap:4px;margin:0;padding:0;display:flex}.suggestions .muted{margin-right:4px}.suggestions button{border:1px solid var(--rule);background:var(--panel);border-radius:4px;height:24px;padding:0 8px;font-size:12px}.suggestions button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--paper)}.docs-link{align-items:center;gap:4px;display:inline-flex}.facet-select{border:1px solid var(--rule);background:var(--panel);max-width:260px;height:26px;color:var(--ink);border-radius:6px;padding:0 6px;font-size:12.5px}.catalog-files{white-space:nowrap}.catalog-files .bullet+.bullet{margin-left:2px}.docs-text>:first-child{margin-top:0}.docs-text>:last-child{margin-bottom:0}.tool-switch-rule{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 0;display:flex}.tool-switch-rule .head-action{margin-left:auto}.tt-head .memory-review{flex-basis:100%}.memory-review-file{gap:4px;display:grid}.editor-buttons button.danger{background:var(--bad);border-color:var(--bad);color:var(--on-bad);font-weight:600}.review .sub-title{overflow-wrap:anywhere;margin:0}pre.diff{background:var(--sunk);border-radius:6px;max-height:360px;margin:0;padding:8px 0;line-height:1.5;overflow-x:auto}pre.diff span{white-space:pre;padding:0 10px;display:block}.diff-add{background:color-mix(in srgb, var(--ok) 16%, transparent);color:var(--ink)}.diff-remove{background:color-mix(in srgb, var(--bad) 16%, transparent);color:var(--ink);text-decoration:line-through;-webkit-text-decoration-color:color-mix(in srgb, var(--bad) 60%, transparent);text-decoration-color:color-mix(in srgb, var(--bad) 60%, transparent)}.diff-same{color:var(--muted)}.rail-empty{color:var(--muted);margin:2px 8px;font-size:13px}.rail-keys{color:var(--muted);gap:6px;margin:auto 8px 0;padding:24px 0 0;font-size:12px;list-style:none;display:grid}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.tt th .sort{height:100%;font:inherit;color:inherit;background:0 0;border:0;align-items:center;gap:4px;padding:0;display:inline-flex}.tt th .sort:hover,.tt th[aria-sort] .sort{color:var(--ink)}.sort-mark{font-family:var(--mono);opacity:0;font-size:11px;transition:opacity .12s}.tt th .sort:hover .sort-mark,.tt th .sort:focus-visible .sort-mark,.sort-mark.on{opacity:1}.show-more{border:0;border-bottom:1px solid var(--rule);text-align:left;background:0 0;width:100%;margin:0;padding:7px 8px;font-size:12.5px;font-weight:600;display:block}.show-more:hover{background:var(--hover)}.tt-head .filter{height:28px;margin-left:auto}.tool-outcome{font-size:12.5px}.tool-denied{color:var(--bad);font-weight:600}.tool-asks{color:var(--warn)}.tool-allowed{color:var(--ok);font-weight:600}.tool-free{color:var(--muted)}.diff-skip{color:var(--muted);font-style:italic}.tt-settings.no-overrides :is(th,td):nth-child(4){display:none}.head-action+.head-action{margin-left:0}.tt-compare th:first-child{width:28%}.tt-compare tbody tr{cursor:default}.tt-compare td{vertical-align:top;height:auto;padding-top:5px;padding-bottom:5px}.cmp-value,.cmp-from{text-overflow:ellipsis;display:block;overflow:hidden}.cmp-from{color:var(--muted);font-size:12px}.cmp-from>*+*{margin-left:8px}.change-day{max-width:980px;margin-top:22px}.change-day h2{border-top:2px solid var(--rule-strong);margin:0 0 4px;padding-top:8px;font-size:13px;font-weight:700}.changes{grid-template-columns:minmax(0,1fr);max-width:980px;display:grid}.changes .change{border-top:1px solid var(--rule);grid-template-columns:minmax(0,1fr);gap:10px;padding:10px 0;display:grid}.change-row{grid-template-columns:11rem minmax(0,1fr) 6rem 9rem;grid-template-areas:"what file when action";align-items:baseline;gap:6px 12px;font-size:13px;display:grid}.change-what{grid-area:what;font-weight:600}.change-file{grid-area:file;gap:2px;min-width:0;display:grid}.change-file .muted{font-size:11.5px}.change-row .num{grid-area:when}.change-row .head-action{grid-area:action;justify-self:end;margin-left:0}@media (width<=720px){.change-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"what when""file file""action action"}.change-row .head-action{justify-self:start}}.path-tester{border-top:1px solid var(--rule);gap:8px;max-width:760px;margin-top:28px;padding-top:14px;display:grid}.path-tester .sub-title{margin:0}.path-form{gap:8px;display:flex}.path-form input{flex:1;min-width:0}.path-matches{gap:6px;font-size:13px;display:grid}.path-matches li{flex-wrap:wrap;align-items:baseline;gap:4px 10px;display:flex}
|