codesesh 0.9.0 → 0.9.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/dist/{chunk-LXHUIQZI.js → chunk-5UOLRSFH.js} +53 -29
- package/dist/chunk-5UOLRSFH.js.map +1 -0
- package/dist/{dist-3Q4YTTEX.js → dist-VEIV33FR.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/scan-refresh-worker.js +1 -1
- package/dist/search-index-worker.js +1 -1
- package/dist/smart-tag-worker.js +1 -1
- package/dist/web/assets/{index-CahEAHys.js → index-CT4gLIAq.js} +2 -2
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/chunk-LXHUIQZI.js.map +0 -1
- /package/dist/{dist-3Q4YTTEX.js.map → dist-VEIV33FR.js.map} +0 -0
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
syncSessionSearchIndexChanges,
|
|
80
80
|
upsertBookmark,
|
|
81
81
|
withEstimatedSessionCost
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-5UOLRSFH.js";
|
|
83
83
|
export {
|
|
84
84
|
BaseAgent,
|
|
85
85
|
BookmarkStorageUnavailableError,
|
|
@@ -161,4 +161,4 @@ export {
|
|
|
161
161
|
upsertBookmark,
|
|
162
162
|
withEstimatedSessionCost
|
|
163
163
|
};
|
|
164
|
-
//# sourceMappingURL=dist-
|
|
164
|
+
//# sourceMappingURL=dist-VEIV33FR.js.map
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
searchFileActivitySessions,
|
|
30
30
|
searchSessions,
|
|
31
31
|
upsertBookmark
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-5UOLRSFH.js";
|
|
33
33
|
|
|
34
34
|
// src/index.ts
|
|
35
35
|
import { defineCommand, runMain } from "citty";
|
|
@@ -2445,7 +2445,7 @@ var main = defineCommand({
|
|
|
2445
2445
|
log_path: appLogger.getLogPath()
|
|
2446
2446
|
});
|
|
2447
2447
|
if (clearCache) {
|
|
2448
|
-
const { clearCache: clear } = await import("./dist-
|
|
2448
|
+
const { clearCache: clear } = await import("./dist-VEIV33FR.js");
|
|
2449
2449
|
clear();
|
|
2450
2450
|
appLogger.info("cache.clear");
|
|
2451
2451
|
console.log("Cache cleared.");
|
package/dist/smart-tag-worker.js
CHANGED
|
@@ -40,7 +40,7 @@ ${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:n
|
|
|
40
40
|
`)}
|
|
41
41
|
}
|
|
42
42
|
`).join(`
|
|
43
|
-
`)}}):null},wa=oe;function Ta({active:e,payload:t,className:n,indicator:r=`dot`,hideLabel:i=!1,hideIndicator:a=!1,label:o,labelFormatter:s,labelClassName:c,formatter:l,color:u,nameKey:d,labelKey:f}){let{config:p}=xa(),m=O.useMemo(()=>{if(i||!t?.length)return null;let[e]=t,n=Ea(p,e,`${f??e?.dataKey??e?.name??`value`}`),r=!f&&typeof o==`string`?p[o]?.label??o:n?.label;return s?(0,M.jsx)(`div`,{className:_a(`font-medium`,c),children:s(r,t)}):r?(0,M.jsx)(`div`,{className:_a(`font-medium`,c),children:r}):null},[o,s,t,i,c,p,f]);if(!e||!t?.length)return null;let h=t.length===1&&r!==`dot`;return(0,M.jsxs)(`div`,{className:_a(`grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,n),children:[h?null:m,(0,M.jsx)(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let n=Ea(p,e,`${d??e.name??e.dataKey??`value`}`),i=u??e.payload?.fill??e.color;return(0,M.jsx)(`div`,{className:_a(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,r===`dot`&&`items-center`),children:l&&e?.value!==void 0&&e.name?l(e.value,e.name,e,t,e.payload):(0,M.jsxs)(M.Fragment,{children:[n?.icon?(0,M.jsx)(n.icon,{}):!a&&(0,M.jsx)(`div`,{className:_a(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":r===`dot`,"w-1":r===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":r===`dashed`,"my-0.5":h&&r===`dashed`}),style:{"--color-bg":i,"--color-border":i}}),(0,M.jsxs)(`div`,{className:_a(`flex flex-1 justify-between leading-none`,h?`items-end`:`items-center`),children:[(0,M.jsxs)(`div`,{className:`grid gap-1.5`,children:[h?m:null,(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:n?.label??e.name})]}),e.value!=null&&(0,M.jsx)(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:typeof e.value==`number`?e.value.toLocaleString():String(e.value)})]})]})},t)})})]})}function Ea(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}function Da(e){return e.toLocaleString(`en-US`)}function Oa(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:Da(e)}function ka(e){return e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function Aa(e){if(e===`recorded`)return`recorded`;if(e===`estimated`)return`estimated`}function ja(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Ma({label:e,value:t,hint:n}){return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-wider text-[var(--console-muted)]`,children:e}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:t}),n?(0,M.jsx)(`p`,{className:`mt-1 text-xs text-[var(--console-muted)]`,children:n}):null]})}function Na(e){return e.length>=10?e.slice(5):e}function Pa({buckets:e}){let[t,n]=(0,O.useState)(null),r=(0,O.useMemo)(()=>Math.max(1,...e.map(e=>e.sessions)),[e]),i=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.sessions,0),[e]),a=(0,O.useMemo)(()=>{if(e.length===0)return new Set;let t=Math.min(6,e.length);if(t===1)return new Set([0]);let n=new Set;for(let r=0;r<t;r+=1)n.add(Math.round(r*(e.length-1)/(t-1)));return n},[e.length]);return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Daily Activity`}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`Session activity · last `,e.length,` days`]})]}),(0,M.jsx)(`span`,{className:`console-mono text-right text-[11px] text-[var(--console-muted)]`,children:t?`${t.date} · ${Da(t.sessions)} sessions · ${Da(t.messages)} msgs`:`${Da(i)} in range`})]}),(0,M.jsx)(`div`,{className:`flex h-32 items-end gap-[2px]`,onMouseLeave:()=>n(null),children:e.map(e=>{let i=e.sessions>0?Math.max(Math.round(e.sessions/r*128),4):2,a=`${e.date} · ${e.sessions} sessions · ${e.messages} msgs`,o=t?.date===e.date;return(0,M.jsx)(`div`,{title:a,onMouseEnter:()=>n(e),className:`flex-1 cursor-default rounded-t-[1px] transition-opacity ${e.sessions>0?`bg-[var(--console-accent)]`:`bg-[var(--console-surface-muted)]`} ${o?`opacity-70`:`opacity-100`}`,style:{height:`${i}px`}},e.date)})}),(0,M.jsx)(`div`,{className:`console-mono mt-2 flex text-[10px] text-[var(--console-muted)]`,children:e.map((e,t)=>(0,M.jsx)(`span`,{className:`flex-1 text-center`,children:a.has(t)?Na(e.date):``},e.date))})]})}var Fa={input:`#4A9EFF`,output:`#7C5CFF`,cache_read:`#3FB68B`,cache_create:`#E8A23B`},Ia={input:`Input`,output:`Output`,cache_read:`Cache Read`,cache_create:`Cache Create`};function La({buckets:e}){let[t,n]=(0,O.useState)(null),r=(0,O.useMemo)(()=>Math.max(1,...e.map(e=>e.input+e.output+e.cache_read+e.cache_create)),[e]),i=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.input+t.output+t.cache_read+t.cache_create,0),[e]),a=(0,O.useMemo)(()=>{if(e.length===0)return new Set;let t=Math.min(6,e.length);if(t===1)return new Set([0]);let n=new Set;for(let r=0;r<t;r+=1)n.add(Math.round(r*(e.length-1)/(t-1)));return n},[e.length]);return i===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Daily Token Activity`}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`Token breakdown · last `,e.length,` days`]})]}),(0,M.jsx)(`span`,{className:`console-mono text-right text-[11px] text-[var(--console-muted)]`,children:t?`${t.date} · ${Oa(t.input+t.output+t.cache_read+t.cache_create)} total`:`${Oa(i)} in range`})]}),t?(0,M.jsx)(`div`,{className:`mb-2 flex gap-4`,children:[`input`,`output`,`cache_read`,`cache_create`].map(e=>(0,M.jsxs)(`span`,{className:`console-mono flex items-center gap-1.5 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2 rounded-full`,style:{backgroundColor:Fa[e]}}),Ia[e],`: `,Oa(t[e])]},e))}):(0,M.jsx)(`div`,{className:`mb-2 flex gap-4`,children:[`input`,`output`,`cache_read`,`cache_create`].map(e=>(0,M.jsxs)(`span`,{className:`console-mono flex items-center gap-1.5 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2 rounded-full`,style:{backgroundColor:Fa[e]}}),Ia[e]]},e))}),(0,M.jsx)(`div`,{className:`flex h-32 items-end gap-[2px]`,onMouseLeave:()=>n(null),children:e.map(e=>{let i=e.input+e.output+e.cache_read+e.cache_create,a=i>0?Math.max(Math.round(i/r*128),4):2,o=t?.date===e.date,s=i>0?[{key:`input`,value:e.input},{key:`output`,value:e.output},{key:`cache_read`,value:e.cache_read},{key:`cache_create`,value:e.cache_create}]:[];return(0,M.jsx)(`div`,{onMouseEnter:()=>n(e),className:`flex flex-1 cursor-default flex-col justify-end overflow-hidden rounded-t-[1px] transition-opacity ${o?`opacity-70`:`opacity-100`}`,style:{height:`${a}px`},children:i>0?s.map(e=>{let t=Math.max(Math.round(e.value/i*a),0);return t===0?null:(0,M.jsx)(`div`,{style:{height:`${t}px`,backgroundColor:Fa[e.key]}},e.key)}):(0,M.jsx)(`div`,{className:`h-full bg-[var(--console-surface-muted)]`})},e.date)})}),(0,M.jsx)(`div`,{className:`console-mono mt-2 flex text-[10px] text-[var(--console-muted)]`,children:e.map((e,t)=>(0,M.jsx)(`span`,{className:`flex-1 text-center`,children:a.has(t)?Na(e.date):``},e.date))})]})}var Ra=[`#4A9EFF`,`#7C5CFF`,`#3FB68B`,`#E8A23B`,`#E5484D`,`#5BCEDA`,`#F472B6`,`#A78BFA`,`#FB923C`,`#6EE7B7`];function za({entries:e}){let t=(0,O.useMemo)(()=>e.filter(e=>e.tokens>0),[e]),n=(0,O.useMemo)(()=>t.reduce((e,t)=>e+t.tokens,0),[t]);if(t.length===0||n===0)return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No model data yet`});let r=t.map((e,t)=>({...e,chartKey:`model${t}`,fraction:e.tokens/n,fill:Ra[t%Ra.length]})),i=r.reduce((e,t)=>(e[t.chartKey]={label:t.model,color:t.fill},e),{});return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Model Distribution`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[t.length,` models`]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,M.jsx)(Sa,{config:i,className:`aspect-square size-[160px]`,children:(0,M.jsxs)(ue,{children:[(0,M.jsx)(wa,{content:(0,M.jsx)(Ta,{hideLabel:!0,nameKey:`chartKey`,formatter:e=>(0,M.jsxs)(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:[Da(Number(e)),` tokens`]})})}),(0,M.jsx)(pe,{data:r,dataKey:`tokens`,nameKey:`chartKey`,outerRadius:70,paddingAngle:1,strokeWidth:0,isAnimationActive:!1})]})}),(0,M.jsxs)(`div`,{className:`console-mono -mt-1 text-center`,children:[(0,M.jsx)(`div`,{className:`text-xs font-semibold text-[var(--console-text)]`,children:Oa(n)}),(0,M.jsx)(`div`,{className:`text-[10px] text-[var(--console-muted)]`,children:`tokens`})]})]}),(0,M.jsx)(`ul`,{className:`min-w-0 flex-1 space-y-1.5`,children:r.map(e=>(0,M.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.fill}}),(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.model}),(0,M.jsxs)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:[(e.fraction*100).toFixed(1),`%`]})]},e.model))})]})]})}function Ba({perAgent:e}){let t=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.sessions,0),[e]);return t===0||e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No agent data yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Agent Distribution`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` agents`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let n=t>0?e.sessions/t*100:0;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.name.toLowerCase()}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.icon?(0,M.jsx)(`img`,{src:e.icon,alt:e.displayName,className:`size-4 object-contain`}):null,(0,M.jsx)(`span`,{className:`console-mono flex-1 text-xs text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[Da(e.sessions),` · `,n.toFixed(1),`%`]})]}),(0,M.jsx)(`div`,{className:`mt-1.5 h-1.5 overflow-hidden rounded-sm bg-[var(--console-surface-muted)]`,children:(0,M.jsx)(`div`,{className:`h-full bg-[var(--console-accent)]`,style:{width:`${n}%`}})}),(0,M.jsxs)(`div`,{className:`console-mono mt-1 flex gap-3 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsxs)(`span`,{children:[Da(e.messages),` msgs`]}),(0,M.jsxs)(`span`,{children:[Oa(e.tokens),` tokens`]})]})]})},e.name)})})]})}function Va({projects:e}){return e.length===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Projects`}),(0,M.jsx)(d,{to:`/projects`,className:`console-mono text-[11px] text-[var(--console-muted)] transition-colors hover:text-[var(--console-text)]`,children:`View all`})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.slice(0,5).map(e=>{let t=e.agentStats.slice(0,3);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga({kind:e.identityKind,key:e.identityKey}),className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:[Da(e.sessionCount),` · `,ka(e.cost)]})]}),(0,M.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-1.5`,children:[t.map(e=>{let t=A.agents[e.name];return(0,M.jsxs)(`span`,{className:`console-mono inline-flex items-center gap-1 rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] text-[var(--console-muted)]`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3 object-contain`}):null,t?.name??e.name,` · `,e.sessions]},e.name)}),(0,M.jsxs)(`span`,{className:`console-mono min-w-0 truncate text-[10px] text-[var(--console-muted)]`,children:[Oa(e.tokens),` tokens`]})]})]})},`${e.identityKind}:${e.identityKey}`)})})]})}function Ha({sessions:e,onToggleBookmark:t}){return e.length===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Bookmarked Sessions`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` items`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let n=A.agents[e.agentKey],r=e.time_updated??e.time_created;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`flex min-w-0 flex-1 items-start gap-2`,children:[n?.icon?(0,M.jsx)(`img`,{src:n.icon,alt:n.name,className:`mt-0.5 size-3.5 shrink-0 object-contain`}):null,(0,M.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,M.jsx)(`p`,{className:`line-clamp-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsxs)(`p`,{className:`console-mono mt-0.5 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.fullPath,` · `,ja(r)]})]})]}),(0,M.jsx)(Wi,{active:!0,onToggle:()=>t(e)})]})},oa(e.agentKey,e.sessionId))})})]})}function Ua({sessions:e,isBookmarked:t,onToggleBookmark:n}){return e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No sessions yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Recent Activity`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` items`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let r=e.agentName.toLowerCase(),i=A.agents[r],a=e.time_updated??e.time_created,o=t(r,e.id);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(d,{to:`/${e.slug}`,className:`min-w-0 flex-1`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i?.icon?(0,M.jsx)(`img`,{src:i.icon,alt:i.name,className:`size-3.5 shrink-0 object-contain`}):null,(0,M.jsx)(`p`,{className:`line-clamp-1 flex-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:ja(a)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-0.5 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.slug]}),(0,M.jsx)(et,{tags:e.smart_tags,className:`mt-1.5`})]}),(0,M.jsx)(Wi,{active:o,onToggle:()=>n(e,r)})]})},e.id)})})]})}function Wa({activity:e}){return e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No file activity yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Recently Touched Files`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` files`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let t=e.latest_time;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.session.slug}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:e.kind}),(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.path}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:ja(t)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[e.session.project_identity?.displayName??e.session.directory,` ·`,` `,e.session.title,` · `,e.count,` events`]})]})},`${e.agent_name}/${e.session_id}/${e.kind}/${e.path}`)})})]})}function Ga({data:e,projects:t=[],bookmarkedSessions:n,isBookmarked:r,onToggleBookmark:i}){let{totals:a,perAgent:o,dailyActivity:s,dailyTokenActivity:c,modelDistribution:l,recentSessions:u,recentFileActivities:d=[]}=e;return(0,M.jsxs)(`div`,{"data-testid":`dashboard`,className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-5`,children:[(0,M.jsx)(Ma,{label:`Total Sessions`,value:Da(a.sessions)}),(0,M.jsx)(Ma,{label:`Total Messages`,value:Da(a.messages)}),(0,M.jsx)(Ma,{label:`Total Tokens`,value:Oa(a.tokens)}),(0,M.jsx)(Ma,{label:`Total Cost`,value:ka(a.cost),hint:Aa(a.cost_source)}),(0,M.jsx)(Ma,{label:`Latest Activity`,value:ja(a.latestActivity),hint:a.latestActivity?new Date(a.latestActivity).toLocaleString(`zh-CN`):void 0})]}),(0,M.jsx)(Pa,{buckets:s}),(0,M.jsx)(La,{buckets:c}),(0,M.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,M.jsx)(za,{entries:l}),(0,M.jsx)(Ba,{perAgent:o})]}),(0,M.jsx)(Va,{projects:t}),(0,M.jsx)(Ua,{sessions:u,isBookmarked:r,onToggleBookmark:i}),(0,M.jsx)(Wa,{activity:d}),(0,M.jsx)(Ha,{sessions:n,onToggleBookmark:e=>i(e)})]})}function Ka(e){return e.toLocaleString(`en-US`)}function qa(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:Ka(e)}function Ja(e){return e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function Ya(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Xa(e){return e.stats.total_tokens??e.stats.total_input_tokens+e.stats.total_output_tokens}function Za({label:e,value:t,hint:n}){return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-wider text-[var(--console-muted)]`,children:e}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:t}),n?(0,M.jsx)(`p`,{className:`mt-1 text-xs text-[var(--console-muted)]`,children:n}):null]})}function Qa({agents:e}){return e.length===0?null:(0,M.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:e.slice(0,4).map(e=>{let t=A.agents[e.name];return(0,M.jsxs)(`span`,{className:`console-mono inline-flex items-center gap-1 rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] text-[var(--console-muted)]`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3 object-contain`}):null,t?.name??e.name,` · `,e.sessions]},e.name)})})}function $a({project:e}){return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga({kind:e.identityKind,key:e.identityKey}),className:`block rounded-sm border border-[var(--console-border)] bg-white/85 p-4 transition-colors hover:border-[var(--console-border-strong)] hover:bg-white`,children:[(0,M.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-start md:justify-between`,children:[(0,M.jsxs)(`div`,{className:`min-w-0`,children:[(0,M.jsx)(`h2`,{className:`console-mono line-clamp-1 text-sm font-semibold text-[var(--console-text)]`,children:e.displayName}),(0,M.jsx)(`p`,{className:`console-mono mt-1 break-all text-[11px] text-[var(--console-muted)]`,children:e.identityKey})]}),(0,M.jsxs)(`div`,{className:`console-mono flex shrink-0 flex-wrap gap-2 text-[11px] text-[var(--console-muted)]`,children:[(0,M.jsxs)(`span`,{children:[Ka(e.sessionCount),` sessions`]}),(0,M.jsxs)(`span`,{children:[qa(e.tokens),` tokens`]}),(0,M.jsx)(`span`,{children:Ja(e.cost)}),(0,M.jsx)(`span`,{children:Ya(e.lastActivity)})]})]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-col gap-2 md:flex-row md:items-center md:justify-between`,children:[(0,M.jsx)(Qa,{agents:e.agentStats}),(0,M.jsx)(`span`,{className:`console-mono text-[10px] uppercase text-[var(--console-muted)]`,children:e.identityKind})]})]})})}function eo({projects:e}){let t=e.reduce((e,t)=>e+t.sessionCount,0),n=e.reduce((e,t)=>e+t.tokens,0),r=e.reduce((e,t)=>e+t.cost,0),i=Math.max(0,...e.map(e=>e.lastActivity??0));return e.length===0?(0,M.jsx)(`div`,{className:`mx-auto max-w-5xl rounded-sm border border-[var(--console-border)] bg-white p-6 text-sm text-[var(--console-muted)]`,children:`No projects found`}):(0,M.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-4`,children:[(0,M.jsx)(Za,{label:`Projects`,value:Ka(e.length)}),(0,M.jsx)(Za,{label:`Sessions`,value:Ka(t)}),(0,M.jsx)(Za,{label:`Tokens`,value:qa(n)}),(0,M.jsx)(Za,{label:`Total Cost`,value:Ja(r),hint:i?`Latest ${Ya(i)}`:void 0})]}),(0,M.jsx)(`ul`,{className:`grid gap-3`,children:e.map(e=>(0,M.jsx)($a,{project:e},`${e.identityKind}:${e.identityKey}`))})]})}function to({agents:e,activeAgent:t,onChange:n}){return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-3`,children:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Agent`}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(void 0),className:`console-mono rounded-sm border px-2 py-1 text-[10px] transition-colors ${t?`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`:`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`}`,children:`All Agents`}),e.map(e=>{let r=A.agents[e.name],i=t===e.name;return(0,M.jsxs)(`button`,{type:`button`,onClick:()=>n(i?void 0:e.name),className:`console-mono inline-flex items-center gap-1 rounded-sm border px-2 py-1 text-[10px] transition-colors ${i?`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`}`,children:[r?.icon?(0,M.jsx)(`img`,{src:r.icon,alt:r.name,className:`size-3 object-contain`}):null,r?.name??e.name,` · `,e.sessions]},e.name)})]})})}function no({project:e}){return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:(0,M.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-start md:justify-between`,children:[(0,M.jsxs)(`div`,{className:`min-w-0`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-base font-semibold text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 break-all text-[11px] text-[var(--console-muted)]`,children:[e.identityKind,`: `,e.identityKey]})]}),(0,M.jsx)(Qa,{agents:e.agentStats})]})})}function ro({sessions:e}){if(e.length===0)return null;let t=e.toSorted((e,t)=>t.stats.total_cost-e.stats.total_cost).slice(0,5);return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Top Cost`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[t.length,` sessions`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:t.map(e=>{let t=A.agents[e.agentKey];return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3.5 object-contain`}):null,(0,M.jsx)(`span`,{className:`line-clamp-1 flex-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:Ja(e.stats.total_cost)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.fullPath,` · `,qa(Xa(e)),` tokens`]})]})},e.fullPath)})})]})}function io({project:e,projectKey:t,dashboard:n,loading:r,error:i,sessions:a,activeAgent:o,onChangeAgent:s,isBookmarked:c,onToggleSessionBookmark:l}){if(!e)return(0,M.jsxs)(`div`,{className:`mx-auto max-w-4xl rounded-sm border border-[var(--console-border)] bg-white p-6`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-sm font-semibold text-[var(--console-text)]`,children:`Project Not Found`}),(0,M.jsx)(`p`,{className:`console-mono mt-2 break-all text-xs text-[var(--console-muted)]`,children:t}),(0,M.jsx)(d,{to:`/projects`,className:`console-mono mt-4 inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Back to Projects`})]});let u=o?a.filter(e=>e.agentKey===o):a;return(0,M.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsx)(no,{project:e}),(0,M.jsx)(to,{agents:e.agentStats,activeAgent:o,onChange:s}),r?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-6 text-sm text-[var(--console-muted)]`,children:`Loading project dashboard`}):i?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6 text-sm text-[var(--console-error)]`,children:i}):n?(0,M.jsx)(Ga,{data:n,projects:[],bookmarkedSessions:[],isBookmarked:c,onToggleBookmark:(e,t)=>{`agentName`in e&&l(e,t??e.agentName.toLowerCase())}}):null,(0,M.jsx)(ro,{sessions:u})]})}var ao=class extends O.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`ErrorBoundary caught error:`,e,t)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6`,children:[(0,M.jsx)(`h3`,{className:`console-mono mb-2 text-sm font-semibold text-[var(--console-error)]`,children:`Something went wrong`}),(0,M.jsx)(`p`,{className:`console-mono text-xs text-[var(--console-muted)]`,children:this.state.error?.message||`Unknown error`})]}):this.props.children}};function oo(e){return`'${e.replace(/'/g,`'\\''`)}'`}var so={claudecode:`claude --resume`,codex:`codex resume`,kimi:`kimi -r`,opencode:`opencode -s`};function co(e){let t=e.toLowerCase();return t in so?so[t]:null}function lo({agentName:e,sessionId:t,directory:n}){let r=co(e);if(!r)return null;let i=`${r} ${oo(t)}`,a=n??``;return a.trim()?`cd ${oo(a)} && ${i}`:i}async function uo(e){if(typeof navigator<`u`&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(e),!0}catch{}if(typeof document>`u`)return!1;let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=!1;try{n=document.execCommand(`copy`)}catch{n=!1}return document.body.removeChild(t),n}function fo({agentName:e,sessionId:t,directory:n,className:r=``}){let[i,a]=(0,O.useState)(!1),o=lo({agentName:e,sessionId:t,directory:n});return(0,O.useEffect)(()=>{if(!i)return;let e=window.setTimeout(()=>a(!1),1500);return()=>window.clearTimeout(e)},[i]),o?(0,M.jsxs)(`button`,{type:`button`,onClick:e=>{e.preventDefault(),e.stopPropagation(),uo(o).then(e=>{e&&a(!0)})},"aria-label":i?`Resume command copied: ${o}`:`Copy resume command: ${o}`,title:i?`Copied: ${o}`:`Copy: ${o}`,className:`console-mono inline-flex items-center gap-1.5 rounded-sm border px-2 py-1 text-[11px] transition-colors ${r} ${i?`border-[var(--console-border-strong)] bg-[var(--console-surface-muted)] text-[var(--console-text)]`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:border-[var(--console-border-strong)] hover:text-[var(--console-text)]`}`,children:[i?(0,M.jsx)(se,{className:`size-3`,strokeWidth:1.8}):(0,M.jsx)(c,{className:`size-3`,strokeWidth:1.8}),(0,M.jsx)(`span`,{children:i?`Copied`:`Copy resume`})]}):null}var po=`
|
|
43
|
+
`)}}):null},wa=oe;function Ta({active:e,payload:t,className:n,indicator:r=`dot`,hideLabel:i=!1,hideIndicator:a=!1,label:o,labelFormatter:s,labelClassName:c,formatter:l,color:u,nameKey:d,labelKey:f}){let{config:p}=xa(),m=O.useMemo(()=>{if(i||!t?.length)return null;let[e]=t,n=Ea(p,e,`${f??e?.dataKey??e?.name??`value`}`),r=!f&&typeof o==`string`?p[o]?.label??o:n?.label;return s?(0,M.jsx)(`div`,{className:_a(`font-medium`,c),children:s(r,t)}):r?(0,M.jsx)(`div`,{className:_a(`font-medium`,c),children:r}):null},[o,s,t,i,c,p,f]);if(!e||!t?.length)return null;let h=t.length===1&&r!==`dot`;return(0,M.jsxs)(`div`,{className:_a(`grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,n),children:[h?null:m,(0,M.jsx)(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let n=Ea(p,e,`${d??e.name??e.dataKey??`value`}`),i=u??e.payload?.fill??e.color;return(0,M.jsx)(`div`,{className:_a(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,r===`dot`&&`items-center`),children:l&&e?.value!==void 0&&e.name?l(e.value,e.name,e,t,e.payload):(0,M.jsxs)(M.Fragment,{children:[n?.icon?(0,M.jsx)(n.icon,{}):!a&&(0,M.jsx)(`div`,{className:_a(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":r===`dot`,"w-1":r===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":r===`dashed`,"my-0.5":h&&r===`dashed`}),style:{"--color-bg":i,"--color-border":i}}),(0,M.jsxs)(`div`,{className:_a(`flex flex-1 justify-between leading-none`,h?`items-end`:`items-center`),children:[(0,M.jsxs)(`div`,{className:`grid gap-1.5`,children:[h?m:null,(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:n?.label??e.name})]}),e.value!=null&&(0,M.jsx)(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:typeof e.value==`number`?e.value.toLocaleString():String(e.value)})]})]})},t)})})]})}function Ea(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}function Da(e){return e.toLocaleString(`en-US`)}function Oa(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:Da(e)}function ka(e){return e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function Aa(e){if(e===`recorded`)return`recorded`;if(e===`estimated`)return`estimated`}function ja(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Ma({label:e,value:t,hint:n}){return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-wider text-[var(--console-muted)]`,children:e}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:t}),n?(0,M.jsx)(`p`,{className:`mt-1 text-xs text-[var(--console-muted)]`,children:n}):null]})}function Na(e){return e.length>=10?e.slice(5):e}function Pa({buckets:e}){let[t,n]=(0,O.useState)(null),r=(0,O.useMemo)(()=>Math.max(1,...e.map(e=>e.sessions)),[e]),i=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.sessions,0),[e]),a=(0,O.useMemo)(()=>{if(e.length===0)return new Set;let t=Math.min(6,e.length);if(t===1)return new Set([0]);let n=new Set;for(let r=0;r<t;r+=1)n.add(Math.round(r*(e.length-1)/(t-1)));return n},[e.length]);return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Daily Activity`}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`Session activity · last `,e.length,` days`]})]}),(0,M.jsx)(`span`,{className:`console-mono text-right text-[11px] text-[var(--console-muted)]`,children:t?`${t.date} · ${Da(t.sessions)} sessions · ${Da(t.messages)} msgs`:`${Da(i)} in range`})]}),(0,M.jsx)(`div`,{className:`flex h-32 items-end gap-[2px]`,onMouseLeave:()=>n(null),children:e.map(e=>{let i=e.sessions>0?Math.max(Math.round(e.sessions/r*128),4):2,a=`${e.date} · ${e.sessions} sessions · ${e.messages} msgs`,o=t?.date===e.date;return(0,M.jsx)(`div`,{title:a,onMouseEnter:()=>n(e),className:`flex-1 cursor-default rounded-t-[1px] transition-opacity ${e.sessions>0?`bg-[var(--console-accent)]`:`bg-[var(--console-surface-muted)]`} ${o?`opacity-70`:`opacity-100`}`,style:{height:`${i}px`}},e.date)})}),(0,M.jsx)(`div`,{className:`console-mono mt-2 flex text-[10px] text-[var(--console-muted)]`,children:e.map((e,t)=>(0,M.jsx)(`span`,{className:`flex-1 text-center`,children:a.has(t)?Na(e.date):``},e.date))})]})}var Fa={input:`#4A9EFF`,output:`#7C5CFF`,cache_read:`#3FB68B`,cache_create:`#E8A23B`},Ia={input:`Input`,output:`Output`,cache_read:`Cache Read`,cache_create:`Cache Create`};function La({buckets:e}){let[t,n]=(0,O.useState)(null),r=(0,O.useMemo)(()=>Math.max(1,...e.map(e=>e.input+e.output+e.cache_read+e.cache_create)),[e]),i=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.input+t.output+t.cache_read+t.cache_create,0),[e]),a=(0,O.useMemo)(()=>{if(e.length===0)return new Set;let t=Math.min(6,e.length);if(t===1)return new Set([0]);let n=new Set;for(let r=0;r<t;r+=1)n.add(Math.round(r*(e.length-1)/(t-1)));return n},[e.length]);return i===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Daily Token Activity`}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`Token breakdown · last `,e.length,` days`]})]}),(0,M.jsx)(`span`,{className:`console-mono text-right text-[11px] text-[var(--console-muted)]`,children:t?`${t.date} · ${Oa(t.input+t.output+t.cache_read+t.cache_create)} total`:`${Oa(i)} in range`})]}),t?(0,M.jsx)(`div`,{className:`mb-2 flex gap-4`,children:[`input`,`output`,`cache_read`,`cache_create`].map(e=>(0,M.jsxs)(`span`,{className:`console-mono flex items-center gap-1.5 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2 rounded-full`,style:{backgroundColor:Fa[e]}}),Ia[e],`: `,Oa(t[e])]},e))}):(0,M.jsx)(`div`,{className:`mb-2 flex gap-4`,children:[`input`,`output`,`cache_read`,`cache_create`].map(e=>(0,M.jsxs)(`span`,{className:`console-mono flex items-center gap-1.5 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2 rounded-full`,style:{backgroundColor:Fa[e]}}),Ia[e]]},e))}),(0,M.jsx)(`div`,{className:`flex h-32 items-end gap-[2px]`,onMouseLeave:()=>n(null),children:e.map(e=>{let i=e.input+e.output+e.cache_read+e.cache_create,a=i>0?Math.max(Math.round(i/r*128),4):2,o=t?.date===e.date,s=i>0?[{key:`input`,value:e.input},{key:`output`,value:e.output},{key:`cache_read`,value:e.cache_read},{key:`cache_create`,value:e.cache_create}]:[];return(0,M.jsx)(`div`,{onMouseEnter:()=>n(e),className:`flex flex-1 cursor-default flex-col justify-end overflow-hidden rounded-t-[1px] transition-opacity ${o?`opacity-70`:`opacity-100`}`,style:{height:`${a}px`},children:i>0?s.map(e=>{let t=Math.max(Math.round(e.value/i*a),0);return t===0?null:(0,M.jsx)(`div`,{style:{height:`${t}px`,backgroundColor:Fa[e.key]}},e.key)}):(0,M.jsx)(`div`,{className:`h-full bg-[var(--console-surface-muted)]`})},e.date)})}),(0,M.jsx)(`div`,{className:`console-mono mt-2 flex text-[10px] text-[var(--console-muted)]`,children:e.map((e,t)=>(0,M.jsx)(`span`,{className:`flex-1 text-center`,children:a.has(t)?Na(e.date):``},e.date))})]})}var Ra=[`#4A9EFF`,`#7C5CFF`,`#3FB68B`,`#E8A23B`,`#E5484D`,`#5BCEDA`,`#F472B6`,`#A78BFA`,`#FB923C`,`#6EE7B7`];function za({entries:e}){let t=(0,O.useMemo)(()=>e.filter(e=>e.tokens>0),[e]),n=(0,O.useMemo)(()=>t.reduce((e,t)=>e+t.tokens,0),[t]);if(t.length===0||n===0)return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No model data yet`});let r=t.map((e,t)=>({...e,chartKey:`model${t}`,fraction:e.tokens/n,fill:Ra[t%Ra.length]})),i=r.reduce((e,t)=>(e[t.chartKey]={label:t.model,color:t.fill},e),{});return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Model Distribution`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[t.length,` models`]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,M.jsx)(Sa,{config:i,className:`aspect-square size-[160px]`,children:(0,M.jsxs)(ue,{children:[(0,M.jsx)(wa,{content:(0,M.jsx)(Ta,{hideLabel:!0,nameKey:`chartKey`,formatter:e=>(0,M.jsxs)(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:[Da(Number(e)),` tokens`]})})}),(0,M.jsx)(pe,{data:r,dataKey:`tokens`,nameKey:`chartKey`,outerRadius:70,paddingAngle:1,strokeWidth:0,isAnimationActive:!1})]})}),(0,M.jsxs)(`div`,{className:`console-mono -mt-1 text-center`,children:[(0,M.jsx)(`div`,{className:`text-xs font-semibold text-[var(--console-text)]`,children:Oa(n)}),(0,M.jsx)(`div`,{className:`text-[10px] text-[var(--console-muted)]`,children:`tokens`})]})]}),(0,M.jsx)(`ul`,{className:`min-w-0 flex-1 space-y-1.5`,children:r.map(e=>(0,M.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`inline-block size-2.5 shrink-0 rounded-full`,style:{backgroundColor:e.fill}}),(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.model}),(0,M.jsxs)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:[(e.fraction*100).toFixed(1),`%`]})]},e.model))})]})]})}function Ba({perAgent:e}){let t=(0,O.useMemo)(()=>e.reduce((e,t)=>e+t.sessions,0),[e]);return t===0||e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No agent data yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Agent Distribution`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` agents`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let n=t>0?e.sessions/t*100:0;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.name.toLowerCase()}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.icon?(0,M.jsx)(`img`,{src:e.icon,alt:e.displayName,className:`size-4 object-contain`}):null,(0,M.jsx)(`span`,{className:`console-mono flex-1 text-xs text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[Da(e.sessions),` · `,n.toFixed(1),`%`]})]}),(0,M.jsx)(`div`,{className:`mt-1.5 h-1.5 overflow-hidden rounded-sm bg-[var(--console-surface-muted)]`,children:(0,M.jsx)(`div`,{className:`h-full bg-[var(--console-accent)]`,style:{width:`${n}%`}})}),(0,M.jsxs)(`div`,{className:`console-mono mt-1 flex gap-3 text-[10px] text-[var(--console-muted)]`,children:[(0,M.jsxs)(`span`,{children:[Da(e.messages),` msgs`]}),(0,M.jsxs)(`span`,{children:[Oa(e.tokens),` tokens`]})]})]})},e.name)})})]})}function Va({projects:e}){return e.length===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Projects`}),(0,M.jsx)(d,{to:`/projects`,className:`console-mono text-[11px] text-[var(--console-muted)] transition-colors hover:text-[var(--console-text)]`,children:`View all`})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.slice(0,5).map(e=>{let t=e.agentStats.slice(0,3);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga({kind:e.identityKind,key:e.identityKey}),className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:[Da(e.sessionCount),` · `,ka(e.cost)]})]}),(0,M.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-1.5`,children:[t.map(e=>{let t=A.agents[e.name];return(0,M.jsxs)(`span`,{className:`console-mono inline-flex items-center gap-1 rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] text-[var(--console-muted)]`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3 object-contain`}):null,t?.name??e.name,` · `,e.sessions]},e.name)}),(0,M.jsxs)(`span`,{className:`console-mono min-w-0 truncate text-[10px] text-[var(--console-muted)]`,children:[Oa(e.tokens),` tokens`]})]})]})},`${e.identityKind}:${e.identityKey}`)})})]})}function Ha({sessions:e,onToggleBookmark:t}){return e.length===0?null:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Bookmarked Sessions`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` items`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let n=A.agents[e.agentKey],r=e.time_updated??e.time_created;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`flex min-w-0 flex-1 items-start gap-2`,children:[n?.icon?(0,M.jsx)(`img`,{src:n.icon,alt:n.name,className:`mt-0.5 size-3.5 shrink-0 object-contain`}):null,(0,M.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,M.jsx)(`p`,{className:`line-clamp-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsxs)(`p`,{className:`console-mono mt-0.5 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.fullPath,` · `,ja(r)]})]})]}),(0,M.jsx)(Wi,{active:!0,onToggle:()=>t(e)})]})},oa(e.agentKey,e.sessionId))})})]})}function Ua({sessions:e,isBookmarked:t,onToggleBookmark:n}){return e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No sessions yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Recent Activity`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` items`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let r=e.agentName.toLowerCase(),i=A.agents[r],a=e.time_updated??e.time_created,o=t(r,e.id);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(d,{to:`/${e.slug}`,className:`min-w-0 flex-1`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i?.icon?(0,M.jsx)(`img`,{src:i.icon,alt:i.name,className:`size-3.5 shrink-0 object-contain`}):null,(0,M.jsx)(`p`,{className:`line-clamp-1 flex-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:ja(a)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-0.5 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.slug]}),(0,M.jsx)(et,{tags:e.smart_tags,className:`mt-1.5`})]}),(0,M.jsx)(Wi,{active:o,onToggle:()=>n(e,r)})]})},e.id)})})]})}function Wa({activity:e}){return e.length===0?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4 text-sm text-[var(--console-muted)]`,children:`No file activity yet`}):(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Recently Touched Files`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[e.length,` files`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:e.map(e=>{let t=e.latest_time;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.session.slug}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:e.kind}),(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs text-[var(--console-text)]`,children:e.path}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:ja(t)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 line-clamp-1 text-[11px] text-[var(--console-muted)]`,children:[e.session.project_identity?.displayName??e.session.directory,` ·`,` `,e.session.title,` · `,e.count,` events`]})]})},`${e.agent_name}/${e.session_id}/${e.kind}/${e.path}`)})})]})}function Ga({data:e,projects:t=[],bookmarkedSessions:n,isBookmarked:r,onToggleBookmark:i}){let{totals:a,perAgent:o,dailyActivity:s,dailyTokenActivity:c,modelDistribution:l,recentSessions:u,recentFileActivities:d=[]}=e;return(0,M.jsxs)(`div`,{"data-testid":`dashboard`,className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-5`,children:[(0,M.jsx)(Ma,{label:`Total Sessions`,value:Da(a.sessions)}),(0,M.jsx)(Ma,{label:`Total Messages`,value:Da(a.messages)}),(0,M.jsx)(Ma,{label:`Total Tokens`,value:Oa(a.tokens)}),(0,M.jsx)(Ma,{label:`Total Cost`,value:ka(a.cost),hint:Aa(a.cost_source)}),(0,M.jsx)(Ma,{label:`Latest Activity`,value:ja(a.latestActivity),hint:a.latestActivity?new Date(a.latestActivity).toLocaleString(`zh-CN`):void 0})]}),(0,M.jsx)(Pa,{buckets:s}),(0,M.jsx)(La,{buckets:c}),(0,M.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,M.jsx)(za,{entries:l}),(0,M.jsx)(Ba,{perAgent:o})]}),(0,M.jsx)(Va,{projects:t}),(0,M.jsx)(Ua,{sessions:u,isBookmarked:r,onToggleBookmark:i}),(0,M.jsx)(Wa,{activity:d}),(0,M.jsx)(Ha,{sessions:n,onToggleBookmark:e=>i(e)})]})}function Ka(e){return e.toLocaleString(`en-US`)}function qa(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:Ka(e)}function Ja(e){return e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function Ya(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Xa(e){return e.stats.total_tokens??e.stats.total_input_tokens+e.stats.total_output_tokens}function Za({label:e,value:t,hint:n}){return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-wider text-[var(--console-muted)]`,children:e}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:t}),n?(0,M.jsx)(`p`,{className:`mt-1 text-xs text-[var(--console-muted)]`,children:n}):null]})}function Qa({agents:e}){return e.length===0?null:(0,M.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:e.slice(0,4).map(e=>{let t=A.agents[e.name];return(0,M.jsxs)(`span`,{className:`console-mono inline-flex items-center gap-1 rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] text-[var(--console-muted)]`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3 object-contain`}):null,t?.name??e.name,` · `,e.sessions]},e.name)})})}function $a({project:e}){return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga({kind:e.identityKind,key:e.identityKey}),className:`block rounded-sm border border-[var(--console-border)] bg-white/85 p-4 transition-colors hover:border-[var(--console-border-strong)] hover:bg-white`,children:[(0,M.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-start md:justify-between`,children:[(0,M.jsxs)(`div`,{className:`min-w-0`,children:[(0,M.jsx)(`h2`,{className:`console-mono line-clamp-1 text-sm font-semibold text-[var(--console-text)]`,children:e.displayName}),(0,M.jsx)(`p`,{className:`console-mono mt-1 break-all text-[11px] text-[var(--console-muted)]`,children:e.identityKey})]}),(0,M.jsxs)(`div`,{className:`console-mono flex shrink-0 flex-wrap gap-2 text-[11px] text-[var(--console-muted)]`,children:[(0,M.jsxs)(`span`,{children:[Ka(e.sessionCount),` sessions`]}),(0,M.jsxs)(`span`,{children:[qa(e.tokens),` tokens`]}),(0,M.jsx)(`span`,{children:Ja(e.cost)}),(0,M.jsx)(`span`,{children:Ya(e.lastActivity)})]})]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-col gap-2 md:flex-row md:items-center md:justify-between`,children:[(0,M.jsx)(Qa,{agents:e.agentStats}),(0,M.jsx)(`span`,{className:`console-mono text-[10px] uppercase text-[var(--console-muted)]`,children:e.identityKind})]})]})})}function eo({projects:e}){let t=e.reduce((e,t)=>e+t.sessionCount,0),n=e.reduce((e,t)=>e+t.tokens,0),r=e.reduce((e,t)=>e+t.cost,0),i=Math.max(0,...e.map(e=>e.lastActivity??0));return e.length===0?(0,M.jsx)(`div`,{className:`mx-auto max-w-5xl rounded-sm border border-[var(--console-border)] bg-white p-6 text-sm text-[var(--console-muted)]`,children:`No projects found`}):(0,M.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-4`,children:[(0,M.jsx)(Za,{label:`Projects`,value:Ka(e.length)}),(0,M.jsx)(Za,{label:`Sessions`,value:Ka(t)}),(0,M.jsx)(Za,{label:`Tokens`,value:qa(n)}),(0,M.jsx)(Za,{label:`Total Cost`,value:Ja(r),hint:i?`Latest ${Ya(i)}`:void 0})]}),(0,M.jsx)(`ul`,{className:`grid gap-3`,children:e.map(e=>(0,M.jsx)($a,{project:e},`${e.identityKind}:${e.identityKey}`))})]})}function to({agents:e,activeAgent:t,onChange:n}){return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-3`,children:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Agent`}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(void 0),className:`console-mono rounded-sm border px-2 py-1 text-[10px] transition-colors ${t?`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`:`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`}`,children:`All Agents`}),e.map(e=>{let r=A.agents[e.name],i=t===e.name;return(0,M.jsxs)(`button`,{type:`button`,onClick:()=>n(i?void 0:e.name),className:`console-mono inline-flex items-center gap-1 rounded-sm border px-2 py-1 text-[10px] transition-colors ${i?`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`}`,children:[r?.icon?(0,M.jsx)(`img`,{src:r.icon,alt:r.name,className:`size-3 object-contain`}):null,r?.name??e.name,` · `,e.sessions]},e.name)})]})})}function no({project:e}){return(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:(0,M.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-start md:justify-between`,children:[(0,M.jsxs)(`div`,{className:`min-w-0`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-base font-semibold text-[var(--console-text)]`,children:e.displayName}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 break-all text-[11px] text-[var(--console-muted)]`,children:[e.identityKind,`: `,e.identityKey]})]}),(0,M.jsx)(Qa,{agents:e.agentStats})]})})}function ro({sessions:e}){if(e.length===0)return null;let t=e.toSorted((e,t)=>t.stats.total_cost-e.stats.total_cost).slice(0,5);return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-4`,children:[(0,M.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:`Top Cost`}),(0,M.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[t.length,` sessions`]})]}),(0,M.jsx)(`ul`,{className:`space-y-2`,children:t.map(e=>{let t=A.agents[e.agentKey];return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`block rounded-sm border border-transparent px-2 py-1.5 transition-colors hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[t?.icon?(0,M.jsx)(`img`,{src:t.icon,alt:t.name,className:`size-3.5 object-contain`}):null,(0,M.jsx)(`span`,{className:`line-clamp-1 flex-1 text-sm text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:Ja(e.stats.total_cost)})]}),(0,M.jsxs)(`p`,{className:`console-mono mt-1 text-[11px] text-[var(--console-muted)]`,children:[`/`,e.fullPath,` · `,qa(Xa(e)),` tokens`]})]})},e.fullPath)})})]})}function io({project:e,projectKey:t,dashboard:n,loading:r,error:i,sessions:a,activeAgent:o,onChangeAgent:s,isBookmarked:c,onToggleSessionBookmark:l}){if(!e)return(0,M.jsxs)(`div`,{className:`mx-auto max-w-4xl rounded-sm border border-[var(--console-border)] bg-white p-6`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-sm font-semibold text-[var(--console-text)]`,children:`Project Not Found`}),(0,M.jsx)(`p`,{className:`console-mono mt-2 break-all text-xs text-[var(--console-muted)]`,children:t}),(0,M.jsx)(d,{to:`/projects`,className:`console-mono mt-4 inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Back to Projects`})]});let u=o?a.filter(e=>e.agentKey===o):a;return(0,M.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-4`,children:[(0,M.jsx)(no,{project:e}),(0,M.jsx)(to,{agents:e.agentStats,activeAgent:o,onChange:s}),r?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white p-6 text-sm text-[var(--console-muted)]`,children:`Loading project dashboard`}):i?(0,M.jsx)(`div`,{className:`rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6 text-sm text-[var(--console-error)]`,children:i}):n?(0,M.jsx)(Ga,{data:n,projects:[],bookmarkedSessions:[],isBookmarked:c,onToggleBookmark:(e,t)=>{`agentName`in e&&l(e,t??e.agentName.toLowerCase())}}):null,(0,M.jsx)(ro,{sessions:u})]})}var ao=class extends O.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`ErrorBoundary caught error:`,e,t)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6`,children:[(0,M.jsx)(`h3`,{className:`console-mono mb-2 text-sm font-semibold text-[var(--console-error)]`,children:`Something went wrong`}),(0,M.jsx)(`p`,{className:`console-mono text-xs text-[var(--console-muted)]`,children:this.state.error?.message||`Unknown error`})]}):this.props.children}};function oo(e){return`'${e.replace(/'/g,`'\\''`)}'`}var so={claudecode:`claude --resume`,codex:`codex resume`,kimi:`kimi -r`,opencode:`opencode -s`,pi:`pi --session`};function co(e){let t=e.toLowerCase();return t in so?so[t]:null}function lo({agentName:e,sessionId:t,directory:n}){let r=co(e);if(!r)return null;let i=`${r} ${oo(t)}`,a=n??``;return a.trim()?`cd ${oo(a)} && ${i}`:i}async function uo(e){if(typeof navigator<`u`&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(e),!0}catch{}if(typeof document>`u`)return!1;let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=!1;try{n=document.execCommand(`copy`)}catch{n=!1}return document.body.removeChild(t),n}function fo({agentName:e,sessionId:t,directory:n,className:r=``}){let[i,a]=(0,O.useState)(!1),o=lo({agentName:e,sessionId:t,directory:n});return(0,O.useEffect)(()=>{if(!i)return;let e=window.setTimeout(()=>a(!1),1500);return()=>window.clearTimeout(e)},[i]),o?(0,M.jsxs)(`button`,{type:`button`,onClick:e=>{e.preventDefault(),e.stopPropagation(),uo(o).then(e=>{e&&a(!0)})},"aria-label":i?`Resume command copied: ${o}`:`Copy resume command: ${o}`,title:i?`Copied: ${o}`:`Copy: ${o}`,className:`console-mono inline-flex items-center gap-1.5 rounded-sm border px-2 py-1 text-[11px] transition-colors ${r} ${i?`border-[var(--console-border-strong)] bg-[var(--console-surface-muted)] text-[var(--console-text)]`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:border-[var(--console-border-strong)] hover:text-[var(--console-text)]`}`,children:[i?(0,M.jsx)(se,{className:`size-3`,strokeWidth:1.8}):(0,M.jsx)(c,{className:`size-3`,strokeWidth:1.8}),(0,M.jsx)(`span`,{children:i?`Copied`:`Copy resume`})]}):null}var po=`
|
|
44
44
|
[data-type='item'][data-item-type='file'] > [data-item-section='icon'] {
|
|
45
45
|
display: none;
|
|
46
46
|
}
|
|
@@ -108,4 +108,4 @@ ${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:n
|
|
|
108
108
|
[data-type='item'][data-item-type='file'] [data-truncate-marker] {
|
|
109
109
|
display: none;
|
|
110
110
|
}
|
|
111
|
-
`;function mo(e){return e.replaceAll(`/`,`∕`).trim()||`(untitled)`}function ho(e){return e.replace(/\/+$/,``).split(`/`).at(-1)?.trim()||`(unknown)`}function go(e){let t=e.project_identity;if(t)return{key:`${t.kind}:${t.key}`,label:t.displayName||ho(e.directory)};let n=ho(e.directory);return{key:n===`(unknown)`?`__unknown__`:`path:${e.directory||n}`,label:n}}function _o(e){return e.time_updated??e.time_created}function vo(e,t,n){let r=e.get(t.path)??2**53-1,i=e.get(n.path)??2**53-1;return r===i?t.path.localeCompare(n.path):r-i}function yo(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,s=new Set,c=[],l=new Map;for(let t of e){let{key:e,label:n}=go(t),r=l.get(e);r?r.sessions.push(t):l.set(e,{label:n,sessions:[t]})}let u=[...l.entries()].sort(([,e],[,t])=>{if(e.label===`(unknown)`)return 1;if(t.label===`(unknown)`)return-1;let n=Math.max(...e.sessions.map(_o));return Math.max(...t.sessions.map(_o))-n}),d=0,f=new Set;for(let[,e]of u){let l=mo(e.label),u=`${l}/`,p=2;for(;f.has(u);)u=`${l} (${p})/`,p+=1;f.add(u);let m=u.slice(0,-1),h=new Map;t.set(u,d),t.set(m,d),d+=1,a.set(u,`${e.sessions.length}`),a.set(m,`${e.sessions.length}`);for(let t of e.sessions)h.set(t.title,(h.get(t.title)??0)+1);for(let a of e.sessions){let e=(h.get(a.title)??0)>1?`${mo(a.title)} #${a.id.slice(0,8)}`:mo(a.title),l=`${u}${e}`,f=2;for(;s.has(l);)l=`${u}${e} (${f})`,f+=1;s.add(l),c.push(l),t.set(l,d),d+=1,n.set(a.id,l),r.set(a.id,u),i.set(l,a.id),o.set(l,a)}}return{paths:c,sortOrderByPath:t,pathBySessionId:n,groupPathBySessionId:r,sessionIdByPath:i,groupCountByPath:a,sessionByPath:o}}function bo(e,t){if(!Ot())return t();let n=performance.now(),r=t(),i=performance.now();return kt({id:e,source:`custom-timing`,phase:`measure`,actualDuration:Math.round((i-n)*100)/100,baseDuration:0,startTime:n,commitTime:i}),r}var xo=(0,O.memo)(function({sessions:e,activeSessionId:t,selectedSessionId:n,onSelectSession:r,bookmarkedSessionIds:a,onToggleBookmark:s}){let c=(0,O.useMemo)(()=>bo(`SessionTreeSidebar:buildTreeModel`,()=>yo(e)),[e]),l=(0,O.useRef)(c.sortOrderByPath),u=(0,O.useRef)(c.sessionIdByPath),d=(0,O.useRef)(c.groupCountByPath),f=(0,O.useRef)(c.sessionByPath),p=(0,O.useRef)(a),m=(0,O.useRef)(r),h=(0,O.useRef)(s),g={"--trees-bg-override":`transparent`,"--trees-border-color-override":`var(--console-border)`,"--trees-fg-override":`var(--console-text)`,"--trees-fg-muted-override":`var(--console-muted)`,"--trees-font-family-override":`"JetBrains Mono", "IBM Plex Mono", "SFMono-Regular", Menlo, Monaco, Consolas, monospace`,"--trees-font-size-override":`12px`,"--trees-item-margin-x-override":`0px`,"--trees-item-padding-x-override":`8px`,"--trees-selected-bg-override":`var(--console-surface-muted)`},{model:_}=o({flattenEmptyDirectories:!1,initialExpansion:`closed`,paths:c.paths,sort:(e,t)=>vo(l.current,e,t),density:`compact`,unsafeCSS:po,onSelectionChange(e){let t=u.current.get(e[0]??``);t&&m.current(t)},renderRowDecoration({item:e}){let t=f.current.get(e.path);if(t){let e=p.current.has(t.id);return{text:e?`★`:`☆`,title:e?`Remove bookmark`:`Add bookmark`}}return d.current.get(e.path)?{text:d.current.get(e.path),title:`Sessions`}:null}});(0,O.useEffect)(()=>{l.current=c.sortOrderByPath,u.current=c.sessionIdByPath,d.current=c.groupCountByPath,f.current=c.sessionByPath,_.resetPaths(c.paths)},[_,c]),(0,O.useEffect)(()=>{m.current=r},[r]),(0,O.useEffect)(()=>{p.current=a,_.resetPaths(c.paths)},[a,_,c.paths]),(0,O.useEffect)(()=>{h.current=s},[s]);function v(e){let t=e.nativeEvent.composedPath(),n=t.find(e=>e instanceof HTMLElement&&e.parentElement?.getAttribute(`data-item-section`)===`decoration`),r=t.find(e=>e instanceof HTMLElement&&e.getAttribute(`data-type`)===`item`),i=r?f.current.get(r.getAttribute(`data-item-path`)??``):null;!n||!i||(e.preventDefault(),e.stopPropagation(),h.current(i))}return(0,O.useEffect)(()=>{let e=c.pathBySessionId.get(t??``),r=c.pathBySessionId.get(n??``)??e,i=n??t??``,a=c.groupPathBySessionId.get(i);if(e&&_.getItem(e)?.select(),r&&t){let e=a?_.getItem(a):null;e&&`expand`in e&&e.expand(),_.focusPath(r);return}a&&_.focusPath(a)},[t,_,c,n]),(0,M.jsx)(`div`,{className:`session-tree h-[min(560px,calc(100vh-410px))] min-h-56 overflow-hidden`,style:g,onClickCapture:v,children:(0,M.jsx)(i,{model:_,style:{height:`100%`},"aria-label":`Sessions`})})});function So(e,t){return(t.time_updated??t.time_created)-(e.time_updated??e.time_created)}function Co(e){return e.slug.split(`/`)[0]?.toLowerCase()||`unknown`}function wo(e,t){return`${e.toLowerCase()}/${t}`}function To(e,t){return`${e}\0${t.toLowerCase()}`}function Eo(e,t,n){let r=e.get(t);if(r){r.push(n);return}e.set(t,[n])}function Do(e,t){let n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,s=new Map,c=new Map,l=new Map,u=[],d=new Set(t.map(e=>e.name.toLowerCase()));for(let e of d)r.set(e,[]),s.set(e,[]);for(let t of e){let e=Co(t),r={...t,agentKey:e,sessionSlug:t.id,fullPath:t.slug};u.push(r);let i=wo(e,t.id);n.has(i)||n.set(i,t),d.has(e)&&s.get(e).push(r);let a=t.project_identity;if(!a?.key)continue;Eo(c,ma(a),r);let o=l.get(a.key);o?o.count+=1:l.set(a.key,{key:a.key,label:a.displayName||t.directory,count:1})}let f=e.toSorted(So);for(let e of f){let t=Co(e);d.has(t)&&r.get(t).push(e);let n=e.project_identity;if(!n?.key)continue;let s=ma(n);Eo(i,s,e),Eo(a,To(s,t),e),Eo(o,n.key,e)}return{byRouteKey:n,byAgent:r,byProjectIdentityKey:i,byProjectAgentKey:a,byProjectKey:o,byLandingAgent:s,byLandingProjectIdentityKey:c,landingSessions:u,sessionsByActivity:f,projectOptions:[...l.values()].toSorted((e,t)=>t.count-e.count).slice(0,8)}}function Oo(e){let t=new Map,n=new Map;for(let r=0;r<e.length;r+=1){let i=e[r];t.has(i.id)||(t.set(i.id,i),n.set(i.id,r))}return{byId:t,indexById:n}}function ko(e,t){let n=e.replace(/^\/+|\/+$/g,``),r=n?n.split(`/`).map(e=>e.trim()).filter(Boolean):[];if(r.length===0)return{mode:`root`,activeAgentKey:null,activeSessionSlug:null};if(r[0]?.toLowerCase()===`projects`){if(r.length===1)return{mode:`projects`,activeAgentKey:null,activeSessionSlug:null};if(r.length===3)try{let e=decodeURIComponent(r[1]);return pa(e)?{mode:`project`,activeAgentKey:null,activeSessionSlug:null,activeProjectKind:e,activeProjectKey:ha(r[2])}:{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}catch{return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}if(r.length===1){let e=r[0].toLowerCase();return t.has(e)?{mode:`agent`,activeAgentKey:e,activeSessionSlug:null}:{mode:`missingAgent`,activeAgentKey:null,activeSessionSlug:null,attemptedKey:e}}if(r.length===2){let e=r[0].toLowerCase(),n=r[1];return t.has(e)&&n?{mode:`session`,activeAgentKey:e,activeSessionSlug:n}:t.has(e)?{mode:`missingSession`,activeAgentKey:e,activeSessionSlug:n,attemptedSessionSlug:n}:{mode:`missingAgent`,activeAgentKey:null,activeSessionSlug:null,attemptedKey:e}}return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}function Ao(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function jo(e){if(!e)return null;let{from:t,to:n,days:r}=e.window;if(t==null)return`All time`;let i=Ao(t),a=Ao(n??Date.now());return r?`Last ${r}d · ${i} → ${a}`:`${i} → ${a}`}function Mo(e,t,n){return t?e?`Searching for "${e}"`:`Loading recent sessions`:e?`${n} matches for "${e}"`:`${n} recent sessions`}function No(e){if(!e?.active)return null;let t=e.completedAgents.length,n=e.totalAgents,r=e.scanningAgents[0],i=r?e.agentStatuses[r]:null,a=i?.total&&i.processed!=null?` · ${i.processed}/${i.total}`:``,o=n>0?r?` · ${r}${a} · ${t}/${n} agents ready`:` · ${t}/${n} agents ready`:``;return e.phase===`initializing`?`First-run setup: indexing all local sessions${o}. Your selected time window appears after this finishes.`:e.phase===`indexing`?`Preparing local session index`:n>0?r?`Checking for new or changed sessions · ${r}${a} · ${t}/${n} agents ready`:`Checking for new or changed sessions · ${t}/${n} agents ready`:`Checking for new or changed sessions`}function Po(e,t){let n=e?.agentStatuses[t];return!n||n.status===`complete`?null:n.total&&n.processed!=null?`${n.processed}/${n.total}`:n.status===`scanning`?`Scanning`:`Pending`}function Fo(e,t,n){let r=e?.agentStatuses[t];return r?.status===`complete`&&r.sessions!=null?r.sessions:n}function Io(e){return{kind:e.identityKind,key:e.identityKey}}function Lo(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Ro(e,t){return(t.time_updated??t.time_created)-(e.time_updated??e.time_created)}function zo(e,t){if(!t.changedSessionHeads||!t.removedSessionRefs)return null;let n=new Map(e.map(e=>[wo(Co(e),e.id),e]));for(let{agentName:e,sessionId:r}of t.removedSessionRefs)n.delete(wo(e,r));for(let{agentName:e,session:r}of t.changedSessionHeads)n.set(wo(e,r.id),r);return[...n.values()].sort(Ro)}function Bo(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`).replaceAll(`<mark>`,`<mark>`).replaceAll(`</mark>`,`</mark>`)}var Vo=`codesesh.shortcuts-hint-dismissed`,Ho=[`bugfix`,`refactoring`,`feature-dev`,`testing`,`docs`,`git-ops`,`build-deploy`,`exploration`,`planning`],Uo=[`apply_patch`,`bash`,`read`,`edit`,`grep`],Wo=[{kind:`read`,label:`Read`},{kind:`edit`,label:`Edit`},{kind:`write`,label:`Write`},{kind:`delete`,label:`Delete`}],Go=[{id:`paid`,label:`Cost > $0`,costMin:1e-6},{id:`one_plus`,label:`Cost >= $1`,costMin:1},{id:`ten_plus`,label:`Cost >= $10`,costMin:10}],Ko={recent:`Recent`,title:`Title`,user_message:`User message`,assistant_reply:`Assistant reply`,tool_output:`Tool output`,file_path:`File path`},qo=[{title:`Navigation`,items:[{keys:`j / k`,description:`Move through sessions or search results`},{keys:`Enter`,description:`Open the current selection`},{keys:`g / G`,description:`Jump to the first or last item`}]},{title:`Search`,items:[{keys:`Cmd/Ctrl K`,description:`Open global search`},{keys:`/`,description:`Focus the search box`},{keys:`Esc`,description:`Exit search or close the current detail view`}]},{title:`Groups`,items:[{keys:`g / G`,description:`Jump to the first or last session`},{keys:`?`,description:`Open this shortcuts panel`}]}];function Jo(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function Yo({value:e,onChange:t,projectsDisabled:n=!1}){return(0,M.jsx)(`div`,{role:`radiogroup`,"aria-label":`Browse by`,className:`grid gap-1.5`,children:[{value:`projects`,label:`Projects`},{value:`agents`,label:`Agents`}].map(r=>{let i=e===r.value,a=r.value===`projects`&&n;return(0,M.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":i,disabled:a,onClick:()=>t(r.value),className:`console-mono flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left text-xs transition-colors ${a?`cursor-not-allowed border-transparent text-[var(--console-muted)] opacity-45`:i?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,title:a?`Project grouping is available after the current scan finishes`:void 0,children:[(0,M.jsx)(`span`,{className:`flex size-3 shrink-0 items-center justify-center rounded-full border ${i?`border-[var(--console-accent)]`:`border-[var(--console-border-strong)]`}`,children:i?(0,M.jsx)(`span`,{className:`size-1.5 rounded-full bg-[var(--console-accent)]`}):null}),(0,M.jsx)(`span`,{children:r.label})]},r.value)})})}function Xo({sessions:e,activeSessionId:t,selectedSessionId:n,bookmarkedSessionIds:r,onSelectSession:i,onToggleBookmark:a}){return(0,M.jsx)(`div`,{className:`console-scrollbar h-[min(560px,calc(100vh-410px))] min-h-56 overflow-y-auto`,children:(0,M.jsx)(`ul`,{className:`space-y-1`,children:e.map(e=>{let o=Co(e),s=A.agents[o],c=t===e.id,l=n===e.id;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-1 rounded-sm border px-2 py-1.5 transition-colors ${c||l?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>i(e),className:`min-w-0 flex-1 text-left`,children:[(0,M.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[s?.icon?(0,M.jsx)(`img`,{src:s.icon,alt:s.name,className:`size-3.5 shrink-0 object-contain`}):null,(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 text-xs text-[var(--console-text)]`,children:e.title})]}),(0,M.jsx)(`span`,{className:`console-mono mt-0.5 block truncate text-[10px] text-[var(--console-muted)]`,children:Lo(e.time_updated??e.time_created)})]}),(0,M.jsx)(Wi,{active:r.has(e.id),onToggle:()=>a(e)})]})},e.slug)})})})}function Zo(){let e=p(),[t,n]=(0,O.useState)([]),[r,i]=(0,O.useState)([]),[a,o]=(0,O.useState)([]),[s,c]=(0,O.useState)(!0),[l,u]=(0,O.useState)(null),[m,h]=(0,O.useState)(null),[g,_]=(0,O.useState)(!1),[v,ee]=(0,O.useState)(null),[te,ne]=(0,O.useState)(null),[y,re]=(0,O.useState)(null),[b,ie]=(0,O.useState)([]),[x,ae]=(0,O.useState)(`agents`),[oe,S]=(0,O.useState)(null),[se,ce]=(0,O.useState)(null),[le,ue]=(0,O.useState)(!1),[de,fe]=(0,O.useState)(null),[pe,me]=(0,O.useState)(void 0),[he,ge]=(0,O.useState)(null),[_e,ve]=(0,O.useState)(``),[C,ye]=(0,O.useState)(``),[w,be]=(0,O.useState)(!1),[T,xe]=(0,O.useState)({}),[E,Se]=(0,O.useState)([]),[Ce,we]=(0,O.useState)(!1),[D,Te]=(0,O.useState)(null),[Ee,De]=(0,O.useState)(null),[Oe,ke]=(0,O.useState)(0),[Ae,je]=(0,O.useState)(!1),[Me,Ne]=(0,O.useState)(!0),Pe=(0,O.useRef)(null),Fe=(0,O.useRef)(new Map);(0,O.useEffect)(()=>{let e=new AbortController,t=performance.now();return j(`app.load.start`,{path:window.location.pathname}),(async()=>{try{let e=await ze();ge(e);let[r,a,s,c,l,u]=await Promise.all([Ve(),Ue({from:e.window.from,to:e.window.to}),Ge(e.window).catch(e=>(console.error(`Failed to load dashboard:`,e),null)),He().catch(e=>(console.error(`Failed to load projects:`,e),{projects:[]})),qe(),Be().catch(e=>(console.error(`Failed to load scan status:`,e),null))]);n(r),i(a.sessions),ie(c.projects),o(l.bookmarks),u&&Te(u),s&&re(s),j(`app.load.done`,{duration_ms:Math.round(performance.now()-t),agents:r.length,sessions:a.sessions.length,projects:c.projects.length,dashboard:!!s})}catch(e){console.error(`Failed to load data:`,e),j(`app.load.error`,{duration_ms:Math.round(performance.now()-t),error:e instanceof Error?e.message:String(e)}),u(`Failed to load data. Is the CLI server running?`)}finally{c(!1)}})(),()=>e.abort()},[]);let Ie=f(),Le=(0,O.useMemo)(()=>new Set(t.map(e=>e.name.toLowerCase())),[t]),Re=(0,O.useMemo)(()=>new Map(t.map(e=>[e.name.toLowerCase(),e.displayName])),[t]),k=w,N=(0,O.useMemo)(()=>ko(Ie.pathname,Le),[Ie.pathname,Le]);(0,O.useEffect)(()=>{j(`route.change`,{path:Ie.pathname,mode:N.mode,agent:N.activeAgentKey,session:N.activeSessionSlug})},[Ie.pathname,N.mode,N.activeAgentKey,N.activeSessionSlug]),(0,O.useEffect)(()=>{if(N.mode===`projects`||N.mode===`project`){ae(`projects`),N.mode===`project`&&S({kind:N.activeProjectKind,key:N.activeProjectKey});return}(N.mode===`agent`||N.mode===`missingAgent`)&&ae(`agents`)},[N]);let Qe=k?C:typeof Ie.state==`object`&&Ie.state!==null&&`searchQuery`in Ie.state&&typeof Ie.state.searchQuery==`string`?Ie.state.searchQuery:``,P=(0,O.useMemo)(()=>Do(r,t),[r,t]);(0,O.useEffect)(()=>{let e=!1;return o(t=>{let n=da(t,r);return n===t?t:(Ye(n.map(({bookmarked_at:e,...t})=>t)).catch(t=>{e||console.error(`Failed to sync bookmark snapshots:`,t)}),n)}),()=>{e=!0}},[r]),(0,O.useEffect)(()=>{let e=!1;return(async()=>{let t=ca();if(t.length!==0)try{let n=await Ye(t.map(({bookmarked_at:e,...t})=>t));if(e)return;o(n.bookmarks),la()}catch(t){e||console.error(`Failed to migrate legacy bookmarks:`,t)}})(),()=>{e=!0}},[]);let $e=(0,O.useMemo)(()=>new Set(a.map(e=>oa(e.agentKey,e.sessionId))),[a]),tt=(0,O.useCallback)((e,t)=>$e.has(oa(e,t)),[$e]),F=(0,O.useCallback)(e=>{let t=oa(e.agentKey,e.sessionId),n=$e.has(t),r=a;o(n?r.filter(e=>oa(e.agentKey,e.sessionId)!==t):[...r,e].toSorted((e,t)=>{let n=e.time_updated??e.time_created;return(t.time_updated??t.time_created)-n})),j(n?`bookmark.delete`:`bookmark.add`,{agent:e.agentKey,session:e.sessionId}),(n?Xe(e.agentKey,e.sessionId):Je({agentKey:e.agentKey,sessionId:e.sessionId,fullPath:e.fullPath,title:e.title,directory:e.directory,time_created:e.time_created,time_updated:e.time_updated,stats:e.stats})).catch(e=>{console.error(`Failed to toggle bookmark:`,e),o(r)})},[$e,a]),I=(0,O.useCallback)((e,t)=>{F(sa(e,t))},[F]),L=N.activeAgentKey,R=N.mode===`project`?N.activeProjectKind:null,z=N.mode===`project`?N.activeProjectKey:null,nt=(0,O.useMemo)(()=>R&&z?{kind:R,key:z}:null,[R,z]),rt=nt?ma(nt):null,it=(0,O.useMemo)(()=>N.mode===`session`?P.byRouteKey.get(wo(N.activeAgentKey,N.activeSessionSlug))??null:null,[P,N]),at=(N.mode===`session`&&m?.id===N.activeSessionSlug?m:null)?.project_identity??it?.project_identity??null,ot=x===`projects`?nt??(N.mode===`session`?at:oe):null,st=ot?ma(ot):null,ct=(0,O.useMemo)(()=>L?P.byAgent.get(L)??[]:[],[L,P]),lt=(0,O.useMemo)(()=>st?pe?P.byProjectAgentKey.get(To(st,pe))??[]:P.byProjectIdentityKey.get(st)??[]:[],[pe,st,P]),B=x===`projects`?lt:ct,V=(0,O.useMemo)(()=>Oo(B),[B]),ut=(0,O.useMemo)(()=>B.length===0?new Set:new Set(B.filter(e=>$e.has(oa(Co(e),e.id))).map(e=>e.id)),[$e,B]),dt=(0,O.useMemo)(()=>a.toSorted((e,t)=>(t.time_updated??t.time_created)-(e.time_updated??e.time_created)),[a]),ft=(0,O.useCallback)(t=>{De(t.id),e(`/${t.slug}`)},[e]),H=(0,O.useCallback)(e=>{I(e,Co(e))},[I]),pt=(0,O.useCallback)(t=>{De(t);let n=V.byId.get(t);n&&e(`/${n.slug}`)},[e,V]),mt=(0,O.useMemo)(()=>{let e=Go.find(e=>e.id===T.costRange);return{agent:T.agent,projectKey:T.projectKey,tag:T.tag,tool:T.tool,fileKind:T.fileKind,costMin:e?.costMin}},[T]),ht=C.trim().length>0||!!(T.tool||T.fileKind),gt=No(D),_t=D?.active===!0,vt=(0,O.useMemo)(()=>{let e=Go.find(e=>e.id===T.costRange),t=T.agent?P.byAgent.get(T.agent)??[]:null,n=T.projectKey?P.byProjectKey.get(T.projectKey)??[]:null,r=t&&n?t.length<=n.length?t:n:t??n??P.sessionsByActivity,i=[];for(let t of r)if(!(T.agent&&Co(t)!==T.agent)&&!(T.projectKey&&t.project_identity?.key!==T.projectKey)&&!(T.tag&&!t.smart_tags?.includes(T.tag))&&!(e&&t.stats.total_cost<e.costMin)&&(i.push({agentName:Co(t),session:t,snippet:`Recent session · ${t.directory}`,matchType:`recent`}),i.length>=50))break;return i},[T,P]),yt=N.mode===`session`?`${N.activeAgentKey}/${N.activeSessionSlug}`:``,bt=(0,O.useEffectEvent)(async e=>{try{let t=!!(e.changedSessionHeads&&e.removedSessionRefs);t&&i(t=>zo(t,e)??t);let[r,a,o,s,c,l]=await Promise.all([Ve(),t?Promise.resolve(null):Ue({from:he?.window.from,to:he?.window.to}),Ge(he?.window).catch(e=>(console.error(`Failed to refresh dashboard:`,e),null)),He().catch(e=>(console.error(`Failed to refresh projects:`,e),{projects:[]})),N.mode===`project`?Ge(he?.window,{projectKind:N.activeProjectKind,projectKey:N.activeProjectKey,agent:pe}).catch(e=>(console.error(`Failed to refresh project dashboard:`,e),null)):Promise.resolve(null),k&&ht?Ke(C,mt).catch(e=>(console.error(`Failed to refresh search results:`,e),{results:[]})):Promise.resolve(null)]);if(n(r),a&&i(a.sessions),ie(s.projects),o&&re(o),c&&ce(c),l&&Se(l.results),N.mode===`session`)try{h(await We(N.activeAgentKey,N.activeSessionSlug)),ee(null)}catch{h(null),ee(`Session not found`)}e.newSessions>0&&ne(`发现 ${e.newSessions} 个新会话,列表已自动刷新`)}catch(e){console.error(`Failed to sync live session update:`,e)}});(0,O.useEffect)(()=>{if(!k){Se([]),we(!1);return}if(!ht){Se(vt),we(!1);return}let e=!1;we(!0);let t=performance.now();return j(`search.start`,{query_length:C.length}),Ke(C,mt).then(n=>{e||(Se(n.results),j(`search.done`,{duration_ms:Math.round(performance.now()-t),results:n.results.length}))}).catch(n=>{e||(console.error(`Failed to load search results:`,n),j(`search.error`,{duration_ms:Math.round(performance.now()-t),error:n instanceof Error?n.message:String(n)}),Se([]))}).finally(()=>{e||we(!1)}),()=>{e=!0}},[C,k,vt,mt,ht]),(0,O.useEffect)(()=>{if(N.mode!==`session`){h(null),ee(null);return}let e=new AbortController;_(!0),ee(null);let t=performance.now();return j(`session.open.start`,{agent:N.activeAgentKey,session:N.activeSessionSlug}),(async()=>{try{let e=await We(N.activeAgentKey,N.activeSessionSlug);h(e),j(`session.open.done`,{agent:N.activeAgentKey,session:N.activeSessionSlug,duration_ms:Math.round(performance.now()-t),messages:e.messages.length})}catch(e){j(`session.open.error`,{agent:N.activeAgentKey,session:N.activeSessionSlug,duration_ms:Math.round(performance.now()-t),error:e instanceof Error?e.message:String(e)}),ee(`Session not found`),h(null)}finally{_(!1)}})(),()=>e.abort()},[yt,N.activeAgentKey,N.activeSessionSlug,N.mode]),(0,O.useEffect)(()=>{rt&&me(void 0)},[rt]),(0,O.useEffect)(()=>{if(!z||!he){ce(null),fe(null),ue(!1);return}let e=!1;return ue(!0),fe(null),Ge(he.window,{projectKind:R??void 0,projectKey:z,agent:pe}).then(t=>{e||ce(t)}).catch(t=>{e||(console.error(`Failed to load project dashboard:`,t),ce(null),fe(`Failed to load project dashboard`))}).finally(()=>{e||ue(!1)}),()=>{e=!0}},[R,z,he,pe]),(0,O.useEffect)(()=>Ze(e=>{bt(e)},e=>{Te(e)}),[]),(0,O.useEffect)(()=>{if(!te)return;let e=window.setTimeout(()=>{ne(null)},3500);return()=>{window.clearTimeout(e)}},[te]),(0,O.useEffect)(()=>{try{Ne(window.localStorage.getItem(Vo)===`1`)}catch{Ne(!0)}},[]),(0,O.useEffect)(()=>{if(k){ke(e=>E.length===0?0:Math.min(e,E.length-1));return}if(N.mode===`session`){De(N.activeSessionSlug);return}if(N.mode===`agent`){De(null);return}De(null)},[k,E.length,N.mode,N.activeSessionSlug,B]),(0,O.useEffect)(()=>{if(!k)return;let e=E[Oe];if(!e)return;let t=`${e.agentName}/${e.session.id}`;Fe.current.get(t)?.scrollIntoView({block:`nearest`})},[k,E,Oe]);let xt=P.landingSessions,St=(0,O.useMemo)(()=>rt?P.byLandingProjectIdentityKey.get(rt)??[]:[],[rt,P]),Ct=(0,O.useMemo)(()=>t.filter(e=>e.count>0).map(e=>({key:e.name.toLowerCase(),name:e.displayName,icon:e.icon,count:e.count})),[t]),wt=(0,O.useMemo)(()=>t.find(e=>e.name.toLowerCase()===L)??null,[L,t]),Tt=(0,O.useMemo)(()=>b.find(e=>rt===ma(Io(e)))??null,[rt,b]),Et=(0,O.useMemo)(()=>b.find(e=>st===ma(Io(e)))??null,[b,st]),Dt=P.projectOptions,Ot=(0,O.useMemo)(()=>{if(!ht)return Dt;let e=new Map,t=Ce?[]:E;for(let n of t){let t=n.session.project_identity;if(!t?.key)continue;let r=e.get(t.key);r?r.count+=1:e.set(t.key,{key:t.key,label:t.displayName||n.session.directory,count:1,showCount:!1})}if(T.projectKey&&!e.has(T.projectKey)){let t=Dt.find(e=>e.key===T.projectKey);t&&e.set(t.key,{...t,count:0,showCount:!1})}return[...e.values()].toSorted((e,t)=>t.count-e.count).slice(0,8)},[Dt,T.projectKey,Ce,E,ht]),U=`CodeSesh`,W=`Select an agent to browse sessions`;if(N.mode===`root`&&(U=k?`Search`:`Dashboard`,W=k?Mo(C,Ce,E.length):y?`${y.totals.sessions.toLocaleString(`en-US`)} total sessions across ${y.perAgent.length} agents`:`Aggregated view across all agents`),N.mode===`projects`&&(U=`Projects`,W=`${b.length.toLocaleString(`en-US`)} projects across ${r.length.toLocaleString(`en-US`)} sessions`),N.mode===`project`&&(U=Tt?.displayName??`Project`,W=Tt?`${Tt.sessionCount.toLocaleString(`en-US`)} sessions · ${Tt.agentStats.length} agents`:N.activeProjectKey),N.mode===`agent`&&L&&(U=wt?.displayName??L,W=`${B.length} sessions`),N.mode===`session`){if(v)U=`Session Not Found`,W=`Requested /${L}/${N.activeSessionSlug}`;else if(m){U=m.title||`Conversation`;let e=m.time_updated??m.time_created;W=(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{children:[`ID: #`,m.id.slice(0,8)]}),(0,M.jsx)(`span`,{children:`·`}),(0,M.jsxs)(`span`,{children:[`Updated `,Lo(e)]}),(0,M.jsx)(et,{tags:m.smart_tags,limit:9,className:`inline-flex`})]})}}N.mode===`missingAgent`&&(U=`Agent Not Found`,W=`Requested /${N.attemptedKey}`),N.mode===`missingSession`&&(U=`Session Not Found`,W=`Session not found in /${L}`),k&&(U=`Search`,W=Mo(C,Ce,E.length));let kt=(0,O.useMemo)(()=>{if(k)return[{label:`Search`}];let e={label:`Dashboard`,to:x===`agents`&&N.mode===`root`||x===`projects`&&N.mode===`projects`?void 0:x===`projects`?`/projects`:`/`};if(N.mode===`root`)return[{label:`Dashboard`}];let t={label:`Projects`,to:N.mode===`project`?`/projects`:void 0};if(N.mode===`projects`)return[e,{label:`Projects`}];if(N.mode===`project`)return[e,t,{label:Tt?.displayName??N.activeProjectKey}];if(N.mode===`session`&&x===`projects`&&ot)return[e,{label:`Projects`,to:`/projects`},{label:Et?.displayName??ot.key,to:ga(ot)},{label:m?.title||N.activeSessionSlug||`Conversation`}];if(N.mode===`missingAgent`)return[e,{label:N.attemptedKey}];let n=wt?.displayName??L??`Unknown Agent`,r={label:n,to:N.mode===`session`?`/${L}`:void 0};return N.mode===`agent`?[e,{label:n}]:N.mode===`missingSession`?[e,r,{label:N.attemptedSessionSlug}]:N.mode===`session`?[e,r,{label:m?.title||N.activeSessionSlug||`Conversation`}]:[e,{label:`Invalid Route`}]},[wt,L,Tt,x,k,Et,ot,m?.title,N]),G;G=s?(0,M.jsx)(Ui,{}):k?(0,M.jsx)(At,{id:`SearchResultsPanel`,detail:{results:E.length,loading:Ce},children:(0,M.jsx)(Qo,{query:C,loading:Ce,results:E,agentNameMap:Re,agents:t,projects:Ot,filters:T,onChangeFilters:xe,onOpenResult:()=>{be(!1),ye(``)},selectedIndex:Oe,registerResultRef:(e,t)=>{t?Fe.current.set(e,t):Fe.current.delete(e)}})}):l?(0,M.jsx)(`div`,{className:`mx-auto max-w-4xl rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6 text-sm text-[var(--console-error)]`,children:l}):N.mode===`root`?y?(0,M.jsx)(At,{id:`Dashboard`,detail:{sessions:y.totals.sessions,projects:b.length},children:(0,M.jsx)(Ga,{data:y,projects:b,bookmarkedSessions:dt,isBookmarked:tt,onToggleBookmark:(e,t)=>{if(`agentName`in e){I(e,t??e.agentName.toLowerCase());return}F(e)}})}):(0,M.jsx)(ta,{type:`global`,sessions:xt,agentItems:Ct,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):N.mode===`projects`?(0,M.jsx)(eo,{projects:b}):N.mode===`project`?(0,M.jsx)(io,{project:Tt,projectKey:N.activeProjectKey,dashboard:se,loading:le,error:de,sessions:St,activeAgent:pe,onChangeAgent:me,isBookmarked:tt,onToggleSessionBookmark:I}):N.mode===`agent`&&L?(0,M.jsx)(ta,{type:`agent`,sessions:P.byLandingAgent.get(L)??[],agentItems:Ct,activeAgentKey:L,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):N.mode===`session`?g?(0,M.jsx)(Ui,{}):v||!m?(0,M.jsx)(ta,{type:`missing-session`,sessions:P.byLandingAgent.get(N.activeAgentKey)??[],agentItems:Ct,activeAgentKey:N.activeAgentKey,attemptedSessionSlug:N.activeSessionSlug,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):(0,M.jsx)(At,{id:`SessionDetail`,detail:{messages:m.messages.length,session:m.id},children:(0,M.jsx)(wi,{session:m,highlightQuery:Qe})}):N.mode===`missingAgent`?(0,M.jsx)(ta,{type:`missing-agent`,sessions:xt,agentItems:Ct,attemptedAgentKey:N.attemptedKey,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):(0,M.jsx)(`div`,{className:`text-sm text-[var(--console-muted)]`,children:`Invalid route.`});function jt(){ye(_e.trim()),be(!0),ke(0)}function K(){Ne(!0);try{window.localStorage.setItem(Vo,`1`)}catch{}}function Mt(t){if(!(t===`projects`&&_t)){if(ae(t),De(null),t===`projects`){let t=at??(N.mode===`session`?null:oe);e(t?ga(t):`/projects`);return}e(`/`)}}let Nt=(0,O.useEffectEvent)(t=>{let n=t.key;if((t.metaKey||t.ctrlKey)&&n.toLowerCase()===`k`){t.preventDefault(),be(!0),ke(0),window.setTimeout(()=>{Pe.current?.focus(),Pe.current?.select()},0);return}if(t.defaultPrevented||t.metaKey||t.ctrlKey||t.altKey||t.isComposing)return;let r=t.target,i=Jo(r);if(Ae){n===`Escape`&&(t.preventDefault(),je(!1));return}if(i){n===`Escape`&&(t.preventDefault(),r instanceof HTMLElement&&r.blur());return}if(n===`?`){t.preventDefault(),je(!0),K();return}if(n===`/`){t.preventDefault(),K(),be(!0),Pe.current?.focus(),Pe.current?.select();return}if(n===`Escape`){if(t.preventDefault(),k){be(!1),ye(``),ve(``);return}if(N.mode===`session`&&N.activeAgentKey){if(x===`projects`&&ot){e(ga(ot));return}e(`/${N.activeAgentKey}`)}return}if(k){if(E.length===0)return;if(n===`j`){t.preventDefault(),K(),ke(e=>Math.min(e+1,E.length-1));return}if(n===`k`){t.preventDefault(),K(),ke(e=>Math.max(e-1,0));return}if(n===`g`){t.preventDefault(),K(),ke(0);return}if(n===`G`){t.preventDefault(),K(),ke(E.length-1);return}if(n===`Enter`){let n=E[Oe];if(!n)return;t.preventDefault(),K(),be(!1),ye(``),e(`/${n.agentName.toLowerCase()}/${n.session.id}`,{state:{searchQuery:C}})}return}if(x===`agents`&&!L||B.length===0)return;let a=e=>{K();let t=Ee==null?-1:V.indexById.get(Ee)??-1,n=t>=0?t:e>=0?-1:B.length;De(B[Math.max(0,Math.min(n+e,B.length-1))]?.id??null)};if(n===`j`){t.preventDefault(),a(1);return}if(n===`k`){t.preventDefault(),a(-1);return}if(n===`g`){t.preventDefault(),K(),De(B[0]?.id??null);return}if(n===`G`){t.preventDefault(),K(),De(B.at(-1)?.id??null);return}if(n===`Enter`){let n=Ee==null?null:V.byId.get(Ee);if(!n)return;t.preventDefault(),K(),e(x===`projects`?`/${n.slug}`:`/${L}/${n.id}`)}});return(0,O.useEffect)(()=>(window.addEventListener(`keydown`,Nt),()=>window.removeEventListener(`keydown`,Nt)),[]),(0,M.jsxs)(`div`,{className:`console-ui flex h-screen flex-col overflow-hidden bg-[var(--console-bg)] text-[var(--console-text)]`,children:[(0,M.jsx)(`header`,{className:`shrink-0 border-b border-[var(--console-border)] bg-white/85 backdrop-blur-sm`,children:(0,M.jsxs)(`div`,{className:`grid min-h-14 grid-cols-[auto_1fr] items-center gap-3 px-4 py-2 sm:grid-cols-[auto_1fr_auto] sm:py-0`,children:[(0,M.jsxs)(d,{to:`/`,className:`flex items-center gap-2 text-[var(--console-text)]`,children:[(0,M.jsx)(`img`,{src:`/logo.svg?v=3`,alt:`CodeSesh`,className:`h-6 w-6 rounded-sm`}),(0,M.jsx)(`span`,{className:`console-mono text-sm font-semibold uppercase tracking-[0.05em]`,children:`CodeSesh`})]}),(0,M.jsxs)(`form`,{className:`order-3 col-span-2 flex w-full items-center justify-center gap-2 sm:order-none sm:col-span-1 sm:mx-auto sm:max-w-[560px]`,onSubmit:e=>{e.preventDefault(),jt()},children:[(0,M.jsx)(`label`,{className:`flex min-w-0 flex-1 items-center rounded-sm border border-[var(--console-border)] bg-white px-2 py-1`,children:(0,M.jsx)(`input`,{ref:Pe,value:_e,onChange:e=>ve(e.target.value),placeholder:`Search sessions /`,className:`console-mono w-full min-w-0 bg-transparent text-xs text-[var(--console-text)] outline-none placeholder:text-[var(--console-muted)]`})}),(0,M.jsx)(`button`,{type:`submit`,className:`console-mono rounded-sm border border-[var(--console-border-strong)] bg-[var(--console-surface-muted)] px-3 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Search`})]}),(0,M.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>{je(!0),K()},className:`console-mono rounded-sm border border-[var(--console-border)] bg-white px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-[var(--console-surface-muted)]`,title:`Show keyboard shortcuts`,children:[`?`,(0,M.jsx)(`span`,{className:`hidden sm:inline`,children:` Shortcuts`})]}),jo(he)?(0,M.jsx)(`span`,{className:`console-mono hidden rounded-sm border border-[var(--console-border)] bg-white px-2 py-1 text-xs text-[var(--console-text)] md:inline-flex`,title:`Time window applied to agent counts, dashboard, and session list`,children:jo(he)}):null,(0,M.jsxs)(`span`,{className:`console-mono hidden rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-muted)] sm:inline-flex`,children:[`v`,`0.9.0`]})]})]})}),(0,M.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,M.jsx)(`aside`,{className:`hidden w-64 shrink-0 flex-col border-r border-[var(--console-border)] bg-[var(--console-sidebar-bg)] lg:flex`,children:(0,M.jsxs)(`div`,{className:`console-scrollbar flex-1 space-y-8 overflow-y-auto px-4 py-6`,children:[(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`BROWSE BY`}),(0,M.jsx)(Yo,{value:x,onChange:Mt,projectsDisabled:_t})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`NAVIGATION`}),(0,M.jsxs)(`ul`,{className:`space-y-1 ${x===`projects`?`console-scrollbar max-h-[min(280px,calc(100vh-440px))] overflow-y-auto pr-1`:``}`,children:[(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:x===`projects`?`/projects`:`/`,className:`flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${x===`agents`&&N.mode===`root`||x===`projects`&&N.mode===`projects`?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsx)(`img`,{src:`/logo.svg?v=3`,alt:`Dashboard`,className:`size-3.5 rounded-[2px]`}),(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 flex-1 text-xs`,children:`Dashboard`})]})}),x===`agents`?t.map(e=>{let t=e.name.toLowerCase(),n=t===L,r=A.agents[t],i=Po(D,e.name),a=_t&&i!==null,o=`ml-4 flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${a?`cursor-not-allowed border-transparent text-[var(--console-muted)] opacity-50`:n?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,s=(0,M.jsxs)(M.Fragment,{children:[r?.icon&&(0,M.jsx)(`img`,{src:r.icon,alt:e.displayName,className:`size-3.5 object-contain`}),(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 flex-1 text-xs`,children:e.displayName}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:i??Fo(D,e.name,e.count)})]});return(0,M.jsxs)(`li`,{children:[a?(0,M.jsx)(`span`,{className:o,title:`Available after this agent scan completes`,children:s}):(0,M.jsx)(d,{to:`/${t}`,className:o,children:s}),i?(0,M.jsx)(`span`,{className:`ml-4 mt-1 block h-1 overflow-hidden rounded-sm bg-[var(--console-surface-muted)]`,children:(0,M.jsx)(`span`,{className:`block h-full bg-[var(--console-accent)]`,style:{width:`${D?.agentStatuses[e.name]?.total?Math.round((D.agentStatuses[e.name]?.processed??0)/D.agentStatuses[e.name].total*100):8}%`}})}):null]},e.name)}):b.map(e=>{let t=Io(e),n=st===ma(t);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga(t),onClick:()=>S(t),className:`ml-4 flex min-w-0 items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${n?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs`,children:e.displayName}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:e.sessionCount})]})},`${e.identityKind}:${e.identityKey}`)}),x===`agents`&&t.length===0&&!s?(0,M.jsx)(`li`,{children:(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning agents...`:`No agents found`})}):null,x===`projects`&&b.length===0&&!s?(0,M.jsx)(`li`,{children:(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning projects...`:`No projects found`})}):null]})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`BOOKMARKS`}),dt.length===0?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`No bookmarks yet`}):(0,M.jsx)(`ul`,{className:`space-y-1`,children:dt.map(e=>{let t=N.mode===`session`&&N.activeAgentKey===e.agentKey&&N.activeSessionSlug===e.sessionId,n=A.agents[e.agentKey];return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border px-2 py-1.5 transition-colors ${t?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`flex min-w-0 flex-1 items-start gap-2`,children:[n?.icon?(0,M.jsx)(`img`,{src:n.icon,alt:n.name,className:`mt-0.5 size-3.5 shrink-0 object-contain`}):null,(0,M.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 block text-xs`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono mt-0.5 line-clamp-1 block text-[10px] text-[var(--console-muted)]`,children:n?.name??e.agentKey})]})]}),(0,M.jsx)(Wi,{active:!0,onToggle:()=>F(e)})]})},oa(e.agentKey,e.sessionId))})})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsxs)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:[`SESSIONS`,B.length>0?(0,M.jsx)(`span`,{className:`ml-2 text-[10px] font-normal text-[var(--console-muted)]`,children:`Navigate j k · Open Enter`}):null]}),x===`agents`&&!L?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`Select an agent`}):x===`projects`&&!st?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`Select a project`}):B.length===0?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning sessions...`:`No sessions yet`}):x===`projects`?(0,M.jsx)(Xo,{sessions:B,activeSessionId:N.mode===`session`?N.activeSessionSlug:null,selectedSessionId:Ee,bookmarkedSessionIds:ut,onSelectSession:ft,onToggleBookmark:H}):(0,M.jsx)(At,{id:`SessionTreeSidebar`,detail:{sessions:B.length},children:(0,M.jsx)(xo,{sessions:B,activeSessionId:N.mode===`session`?N.activeSessionSlug:null,selectedSessionId:Ee,onSelectSession:pt,bookmarkedSessionIds:ut,onToggleBookmark:H})})]})]})}),(0,M.jsxs)(`main`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,M.jsx)(`section`,{className:`shrink-0 border-b border-[var(--console-border)] bg-white/70 px-4 py-4 backdrop-blur-sm md:px-8`,children:(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`nav`,{"aria-label":`Breadcrumb`,className:`console-mono mb-2 flex flex-wrap items-center gap-1 text-[11px] text-[var(--console-muted)]`,children:kt.map((e,t)=>(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.to?(0,M.jsx)(d,{to:e.to,className:`transition-colors hover:text-[var(--console-text)]`,children:e.label}):(0,M.jsx)(`span`,{className:`text-[var(--console-text)]`,children:e.label}),t<kt.length-1?(0,M.jsx)(`span`,{children:`/`}):null]},`${e.label}-${t}`))}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] font-bold uppercase text-[var(--console-muted)]`,children:N.mode===`session`?`Session`:N.mode===`root`?`Dashboard`:N.mode===`projects`?`Projects`:N.mode===`project`?`Project`:`Landing`}),(0,M.jsx)(`h1`,{className:`console-mono text-xl font-semibold tracking-tight text-[var(--console-text)]`,children:U})]}),(0,M.jsx)(`div`,{className:`console-mono mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[var(--console-muted)]`,children:W}),(0,M.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[Me?null:(0,M.jsxs)(`div`,{className:`console-mono inline-flex items-center gap-2 rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-text)]`,children:[(0,M.jsx)(`span`,{children:`Keyboard navigation available`}),(0,M.jsx)(`span`,{className:`rounded-sm border border-[var(--console-border)] bg-white px-1`,children:`?`}),(0,M.jsx)(`button`,{type:`button`,onClick:K,className:`text-[var(--console-muted)] transition-colors hover:text-[var(--console-text)]`,"aria-label":`Dismiss keyboard shortcuts hint`,children:`×`})]}),!k&&N.mode===`session`?(0,M.jsx)(`span`,{className:`console-mono inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-muted)]`,children:`Esc back`}):null,!k&&N.mode===`session`&&m?(0,M.jsx)(fo,{agentName:N.activeAgentKey,sessionId:m.id,directory:m.directory}):null]}),te?(0,M.jsx)(`p`,{className:`console-mono mt-2 inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-text)]`,children:te}):null,gt&&N.mode===`root`?(0,M.jsx)(`p`,{className:`console-mono mt-2 inline-flex max-w-4xl rounded-sm border border-[var(--console-warning-border)] bg-[var(--console-warning-bg)] px-2 py-1 text-[11px] leading-relaxed text-[var(--console-warning)]`,children:gt}):null]})}),(0,M.jsx)(`section`,{className:`console-scrollbar bg-grid min-h-0 flex-1 overflow-y-auto px-4 py-6 md:px-8`,children:(0,M.jsx)(ao,{children:(0,M.jsx)(At,{id:`MainContent`,detail:{mode:N.mode,search:k,sessions:r.length},children:G})})})]})]}),Ae?(0,M.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/35 px-4`,onClick:()=>je(!1),children:(0,M.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Keyboard shortcuts`,className:`w-full max-w-2xl rounded-sm border border-[var(--console-border-strong)] bg-white p-5 shadow-2xl`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-[0.16em] text-[var(--console-muted)]`,children:`Keyboard Shortcuts`}),(0,M.jsx)(`h2`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:`Navigate without leaving the keyboard`})]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>je(!1),className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Esc`})]}),(0,M.jsx)(`div`,{className:`mt-5 grid gap-4 md:grid-cols-3`,children:qo.map(e=>(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] p-4`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`div`,{className:`mt-3 space-y-3`,children:e.items.map(e=>(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`console-mono text-xs text-[var(--console-text)]`,children:e.keys}),(0,M.jsx)(`p`,{className:`mt-1 text-sm leading-6 text-[var(--console-muted)]`,children:e.description})]},e.keys))})]},e.title))})]})}):null]})}function Qo({query:e,loading:t,results:n,agentNameMap:r,agents:i,projects:a,filters:o,onChangeFilters:s,onOpenResult:c,selectedIndex:l,registerResultRef:u}){let f=(0,M.jsx)($o,{agents:i,projects:a,filters:o,onChangeFilters:s});return t?(0,M.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[f,(0,M.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:4}).map((e,t)=>(0,M.jsxs)(`div`,{className:`animate-pulse rounded-sm border border-[var(--console-border)] bg-white/80 p-4`,children:[(0,M.jsx)(`div`,{className:`h-3 w-32 rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-3 h-4 w-2/3 rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-2 h-3 w-full rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-1 h-3 w-5/6 rounded bg-[var(--console-surface-muted)]`})]},t))})]}):n.length===0?(0,M.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[f,(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white/80 p-6`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-sm font-semibold text-[var(--console-text)]`,children:e?`No matches`:`No recent sessions`}),e?(0,M.jsxs)(`p`,{className:`console-mono mt-2 text-xs text-[var(--console-muted)]`,children:[`Query: `,e]}):null]})]}):(0,M.jsxs)(`div`,{className:`grid gap-3`,children:[f,(0,M.jsx)(`div`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:`Navigate j k · Open Enter · Exit Esc`}),n.map((t,n)=>{let i=t.agentName.toLowerCase(),a=r.get(i)??t.agentName,o=`${t.agentName}/${t.session.id}`;return(0,M.jsxs)(d,{ref:e=>u(o,e),to:`/${i}/${t.session.id}`,state:{searchQuery:e},onClick:c,className:`rounded-sm border bg-white/85 p-4 transition-colors hover:border-[var(--console-border-strong)] hover:bg-white ${n===l?`border-[var(--console-border-strong)]`:`border-[var(--console-border)]`}`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:a}),(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:Ko[t.matchType]}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:t.session.directory})]}),(0,M.jsx)(`h2`,{className:`console-mono mt-3 text-sm font-semibold text-[var(--console-text)]`,children:t.session.title}),(0,M.jsx)(et,{tags:t.session.smart_tags,className:`mt-2`}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xs leading-6 text-[var(--console-muted)] [&_mark]:bg-[var(--console-accent)] [&_mark]:px-0.5 [&_mark]:text-white`,dangerouslySetInnerHTML:{__html:Bo(t.snippet||t.session.title)}})]},o)})]})}function $o({agents:e,projects:t,filters:n,onChangeFilters:r}){let i=Object.values(n).some(Boolean),a=(e,t)=>{r(n=>({...n,[e]:n[e]===t?void 0:t}))};return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white/85 p-3`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Scope`}),(0,M.jsx)(es,{active:!n.projectKey,label:`All`,onClick:()=>r(e=>({...e,projectKey:void 0}))}),t.map(e=>(0,M.jsx)(es,{active:n.projectKey===e.key,label:e.showCount===!1?e.label:`${e.label} · ${e.count}`,onClick:()=>a(`projectKey`,e.key)},e.key))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Agent`}),(0,M.jsx)(es,{active:!n.agent,label:`All Agents`,onClick:()=>r(e=>({...e,agent:void 0}))}),e.map(e=>(0,M.jsx)(es,{active:n.agent===e.name,label:e.displayName,onClick:()=>a(`agent`,e.name)},e.name))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Tag`}),Ho.map(e=>(0,M.jsx)(es,{active:n.tag===e,label:N[e],onClick:()=>a(`tag`,e)},e))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Signal`}),Uo.map(e=>(0,M.jsx)(es,{active:n.tool===e,label:`tool:${e}`,onClick:()=>a(`tool`,e)},e))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`File Activity`}),Wo.map(e=>(0,M.jsx)(es,{active:n.fileKind===e.kind,label:e.label,onClick:()=>a(`fileKind`,e.kind)},e.kind))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Cost Range`}),(0,M.jsx)(es,{active:!n.costRange,label:`Any Cost`,onClick:()=>r(e=>({...e,costRange:void 0}))}),Go.map(e=>(0,M.jsx)(es,{active:n.costRange===e.id,label:e.label,onClick:()=>a(`costRange`,e.id)},e.id)),i?(0,M.jsx)(`button`,{type:`button`,onClick:()=>r({}),className:`console-mono ml-auto rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[10px] text-[var(--console-muted)] transition-colors hover:bg-white`,children:`Clear`}):null]})]})}function es({active:e,label:t,onClick:n}){return(0,M.jsx)(`button`,{type:`button`,onClick:n,className:`console-mono rounded-sm border px-2 py-1 text-[10px] transition-colors ${e?`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`}`,children:t})}k.createRoot(document.getElementById(`root`)).render((0,M.jsx)(O.StrictMode,{children:(0,M.jsx)(_,{children:(0,M.jsx)(At,{id:`App`,children:(0,M.jsx)(Zo,{})})})}));
|
|
111
|
+
`;function mo(e){return e.replaceAll(`/`,`∕`).trim()||`(untitled)`}function ho(e){return e.replace(/\/+$/,``).split(`/`).at(-1)?.trim()||`(unknown)`}function go(e){let t=e.project_identity;if(t)return{key:`${t.kind}:${t.key}`,label:t.displayName||ho(e.directory)};let n=ho(e.directory);return{key:n===`(unknown)`?`__unknown__`:`path:${e.directory||n}`,label:n}}function _o(e){return e.time_updated??e.time_created}function vo(e,t,n){let r=e.get(t.path)??2**53-1,i=e.get(n.path)??2**53-1;return r===i?t.path.localeCompare(n.path):r-i}function yo(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,s=new Set,c=[],l=new Map;for(let t of e){let{key:e,label:n}=go(t),r=l.get(e);r?r.sessions.push(t):l.set(e,{label:n,sessions:[t]})}let u=[...l.entries()].sort(([,e],[,t])=>{if(e.label===`(unknown)`)return 1;if(t.label===`(unknown)`)return-1;let n=Math.max(...e.sessions.map(_o));return Math.max(...t.sessions.map(_o))-n}),d=0,f=new Set;for(let[,e]of u){let l=mo(e.label),u=`${l}/`,p=2;for(;f.has(u);)u=`${l} (${p})/`,p+=1;f.add(u);let m=u.slice(0,-1),h=new Map;t.set(u,d),t.set(m,d),d+=1,a.set(u,`${e.sessions.length}`),a.set(m,`${e.sessions.length}`);for(let t of e.sessions)h.set(t.title,(h.get(t.title)??0)+1);for(let a of e.sessions){let e=(h.get(a.title)??0)>1?`${mo(a.title)} #${a.id.slice(0,8)}`:mo(a.title),l=`${u}${e}`,f=2;for(;s.has(l);)l=`${u}${e} (${f})`,f+=1;s.add(l),c.push(l),t.set(l,d),d+=1,n.set(a.id,l),r.set(a.id,u),i.set(l,a.id),o.set(l,a)}}return{paths:c,sortOrderByPath:t,pathBySessionId:n,groupPathBySessionId:r,sessionIdByPath:i,groupCountByPath:a,sessionByPath:o}}function bo(e,t){if(!Ot())return t();let n=performance.now(),r=t(),i=performance.now();return kt({id:e,source:`custom-timing`,phase:`measure`,actualDuration:Math.round((i-n)*100)/100,baseDuration:0,startTime:n,commitTime:i}),r}var xo=(0,O.memo)(function({sessions:e,activeSessionId:t,selectedSessionId:n,onSelectSession:r,bookmarkedSessionIds:a,onToggleBookmark:s}){let c=(0,O.useMemo)(()=>bo(`SessionTreeSidebar:buildTreeModel`,()=>yo(e)),[e]),l=(0,O.useRef)(c.sortOrderByPath),u=(0,O.useRef)(c.sessionIdByPath),d=(0,O.useRef)(c.groupCountByPath),f=(0,O.useRef)(c.sessionByPath),p=(0,O.useRef)(a),m=(0,O.useRef)(r),h=(0,O.useRef)(s),g={"--trees-bg-override":`transparent`,"--trees-border-color-override":`var(--console-border)`,"--trees-fg-override":`var(--console-text)`,"--trees-fg-muted-override":`var(--console-muted)`,"--trees-font-family-override":`"JetBrains Mono", "IBM Plex Mono", "SFMono-Regular", Menlo, Monaco, Consolas, monospace`,"--trees-font-size-override":`12px`,"--trees-item-margin-x-override":`0px`,"--trees-item-padding-x-override":`8px`,"--trees-selected-bg-override":`var(--console-surface-muted)`},{model:_}=o({flattenEmptyDirectories:!1,initialExpansion:`closed`,paths:c.paths,sort:(e,t)=>vo(l.current,e,t),density:`compact`,unsafeCSS:po,onSelectionChange(e){let t=u.current.get(e[0]??``);t&&m.current(t)},renderRowDecoration({item:e}){let t=f.current.get(e.path);if(t){let e=p.current.has(t.id);return{text:e?`★`:`☆`,title:e?`Remove bookmark`:`Add bookmark`}}return d.current.get(e.path)?{text:d.current.get(e.path),title:`Sessions`}:null}});(0,O.useEffect)(()=>{l.current=c.sortOrderByPath,u.current=c.sessionIdByPath,d.current=c.groupCountByPath,f.current=c.sessionByPath,_.resetPaths(c.paths)},[_,c]),(0,O.useEffect)(()=>{m.current=r},[r]),(0,O.useEffect)(()=>{p.current=a,_.resetPaths(c.paths)},[a,_,c.paths]),(0,O.useEffect)(()=>{h.current=s},[s]);function v(e){let t=e.nativeEvent.composedPath(),n=t.find(e=>e instanceof HTMLElement&&e.parentElement?.getAttribute(`data-item-section`)===`decoration`),r=t.find(e=>e instanceof HTMLElement&&e.getAttribute(`data-type`)===`item`),i=r?f.current.get(r.getAttribute(`data-item-path`)??``):null;!n||!i||(e.preventDefault(),e.stopPropagation(),h.current(i))}return(0,O.useEffect)(()=>{let e=c.pathBySessionId.get(t??``),r=c.pathBySessionId.get(n??``)??e,i=n??t??``,a=c.groupPathBySessionId.get(i);if(e&&_.getItem(e)?.select(),r&&t){let e=a?_.getItem(a):null;e&&`expand`in e&&e.expand(),_.focusPath(r);return}a&&_.focusPath(a)},[t,_,c,n]),(0,M.jsx)(`div`,{className:`session-tree h-[min(560px,calc(100vh-410px))] min-h-56 overflow-hidden`,style:g,onClickCapture:v,children:(0,M.jsx)(i,{model:_,style:{height:`100%`},"aria-label":`Sessions`})})});function So(e,t){return(t.time_updated??t.time_created)-(e.time_updated??e.time_created)}function Co(e){return e.slug.split(`/`)[0]?.toLowerCase()||`unknown`}function wo(e,t){return`${e.toLowerCase()}/${t}`}function To(e,t){return`${e}\0${t.toLowerCase()}`}function Eo(e,t,n){let r=e.get(t);if(r){r.push(n);return}e.set(t,[n])}function Do(e,t){let n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,s=new Map,c=new Map,l=new Map,u=[],d=new Set(t.map(e=>e.name.toLowerCase()));for(let e of d)r.set(e,[]),s.set(e,[]);for(let t of e){let e=Co(t),r={...t,agentKey:e,sessionSlug:t.id,fullPath:t.slug};u.push(r);let i=wo(e,t.id);n.has(i)||n.set(i,t),d.has(e)&&s.get(e).push(r);let a=t.project_identity;if(!a?.key)continue;Eo(c,ma(a),r);let o=l.get(a.key);o?o.count+=1:l.set(a.key,{key:a.key,label:a.displayName||t.directory,count:1})}let f=e.toSorted(So);for(let e of f){let t=Co(e);d.has(t)&&r.get(t).push(e);let n=e.project_identity;if(!n?.key)continue;let s=ma(n);Eo(i,s,e),Eo(a,To(s,t),e),Eo(o,n.key,e)}return{byRouteKey:n,byAgent:r,byProjectIdentityKey:i,byProjectAgentKey:a,byProjectKey:o,byLandingAgent:s,byLandingProjectIdentityKey:c,landingSessions:u,sessionsByActivity:f,projectOptions:[...l.values()].toSorted((e,t)=>t.count-e.count).slice(0,8)}}function Oo(e){let t=new Map,n=new Map;for(let r=0;r<e.length;r+=1){let i=e[r];t.has(i.id)||(t.set(i.id,i),n.set(i.id,r))}return{byId:t,indexById:n}}function ko(e,t){let n=e.replace(/^\/+|\/+$/g,``),r=n?n.split(`/`).map(e=>e.trim()).filter(Boolean):[];if(r.length===0)return{mode:`root`,activeAgentKey:null,activeSessionSlug:null};if(r[0]?.toLowerCase()===`projects`){if(r.length===1)return{mode:`projects`,activeAgentKey:null,activeSessionSlug:null};if(r.length===3)try{let e=decodeURIComponent(r[1]);return pa(e)?{mode:`project`,activeAgentKey:null,activeSessionSlug:null,activeProjectKind:e,activeProjectKey:ha(r[2])}:{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}catch{return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}if(r.length===1){let e=r[0].toLowerCase();return t.has(e)?{mode:`agent`,activeAgentKey:e,activeSessionSlug:null}:{mode:`missingAgent`,activeAgentKey:null,activeSessionSlug:null,attemptedKey:e}}if(r.length===2){let e=r[0].toLowerCase(),n=r[1];return t.has(e)&&n?{mode:`session`,activeAgentKey:e,activeSessionSlug:n}:t.has(e)?{mode:`missingSession`,activeAgentKey:e,activeSessionSlug:n,attemptedSessionSlug:n}:{mode:`missingAgent`,activeAgentKey:null,activeSessionSlug:null,attemptedKey:e}}return{mode:`invalidRoute`,activeAgentKey:null,activeSessionSlug:null}}function Ao(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function jo(e){if(!e)return null;let{from:t,to:n,days:r}=e.window;if(t==null)return`All time`;let i=Ao(t),a=Ao(n??Date.now());return r?`Last ${r}d · ${i} → ${a}`:`${i} → ${a}`}function Mo(e,t,n){return t?e?`Searching for "${e}"`:`Loading recent sessions`:e?`${n} matches for "${e}"`:`${n} recent sessions`}function No(e){if(!e?.active)return null;let t=e.completedAgents.length,n=e.totalAgents,r=e.scanningAgents[0],i=r?e.agentStatuses[r]:null,a=i?.total&&i.processed!=null?` · ${i.processed}/${i.total}`:``,o=n>0?r?` · ${r}${a} · ${t}/${n} agents ready`:` · ${t}/${n} agents ready`:``;return e.phase===`initializing`?`First-run setup: indexing all local sessions${o}. Your selected time window appears after this finishes.`:e.phase===`indexing`?`Preparing local session index`:n>0?r?`Checking for new or changed sessions · ${r}${a} · ${t}/${n} agents ready`:`Checking for new or changed sessions · ${t}/${n} agents ready`:`Checking for new or changed sessions`}function Po(e,t){let n=e?.agentStatuses[t];return!n||n.status===`complete`?null:n.total&&n.processed!=null?`${n.processed}/${n.total}`:n.status===`scanning`?`Scanning`:`Pending`}function Fo(e,t,n){let r=e?.agentStatuses[t];return r?.status===`complete`&&r.sessions!=null?r.sessions:n}function Io(e){return{kind:e.identityKind,key:e.identityKey}}function Lo(e){if(!e)return`unknown`;let t=Date.now()-e;if(Number.isNaN(t)||t<0)return`just now`;let n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Ro(e,t){return(t.time_updated??t.time_created)-(e.time_updated??e.time_created)}function zo(e,t){if(!t.changedSessionHeads||!t.removedSessionRefs)return null;let n=new Map(e.map(e=>[wo(Co(e),e.id),e]));for(let{agentName:e,sessionId:r}of t.removedSessionRefs)n.delete(wo(e,r));for(let{agentName:e,session:r}of t.changedSessionHeads)n.set(wo(e,r.id),r);return[...n.values()].sort(Ro)}function Bo(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`).replaceAll(`<mark>`,`<mark>`).replaceAll(`</mark>`,`</mark>`)}var Vo=`codesesh.shortcuts-hint-dismissed`,Ho=[`bugfix`,`refactoring`,`feature-dev`,`testing`,`docs`,`git-ops`,`build-deploy`,`exploration`,`planning`],Uo=[`apply_patch`,`bash`,`read`,`edit`,`grep`],Wo=[{kind:`read`,label:`Read`},{kind:`edit`,label:`Edit`},{kind:`write`,label:`Write`},{kind:`delete`,label:`Delete`}],Go=[{id:`paid`,label:`Cost > $0`,costMin:1e-6},{id:`one_plus`,label:`Cost >= $1`,costMin:1},{id:`ten_plus`,label:`Cost >= $10`,costMin:10}],Ko={recent:`Recent`,title:`Title`,user_message:`User message`,assistant_reply:`Assistant reply`,tool_output:`Tool output`,file_path:`File path`},qo=[{title:`Navigation`,items:[{keys:`j / k`,description:`Move through sessions or search results`},{keys:`Enter`,description:`Open the current selection`},{keys:`g / G`,description:`Jump to the first or last item`}]},{title:`Search`,items:[{keys:`Cmd/Ctrl K`,description:`Open global search`},{keys:`/`,description:`Focus the search box`},{keys:`Esc`,description:`Exit search or close the current detail view`}]},{title:`Groups`,items:[{keys:`g / G`,description:`Jump to the first or last session`},{keys:`?`,description:`Open this shortcuts panel`}]}];function Jo(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function Yo({value:e,onChange:t,projectsDisabled:n=!1}){return(0,M.jsx)(`div`,{role:`radiogroup`,"aria-label":`Browse by`,className:`grid gap-1.5`,children:[{value:`projects`,label:`Projects`},{value:`agents`,label:`Agents`}].map(r=>{let i=e===r.value,a=r.value===`projects`&&n;return(0,M.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":i,disabled:a,onClick:()=>t(r.value),className:`console-mono flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left text-xs transition-colors ${a?`cursor-not-allowed border-transparent text-[var(--console-muted)] opacity-45`:i?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,title:a?`Project grouping is available after the current scan finishes`:void 0,children:[(0,M.jsx)(`span`,{className:`flex size-3 shrink-0 items-center justify-center rounded-full border ${i?`border-[var(--console-accent)]`:`border-[var(--console-border-strong)]`}`,children:i?(0,M.jsx)(`span`,{className:`size-1.5 rounded-full bg-[var(--console-accent)]`}):null}),(0,M.jsx)(`span`,{children:r.label})]},r.value)})})}function Xo({sessions:e,activeSessionId:t,selectedSessionId:n,bookmarkedSessionIds:r,onSelectSession:i,onToggleBookmark:a}){return(0,M.jsx)(`div`,{className:`console-scrollbar h-[min(560px,calc(100vh-410px))] min-h-56 overflow-y-auto`,children:(0,M.jsx)(`ul`,{className:`space-y-1`,children:e.map(e=>{let o=Co(e),s=A.agents[o],c=t===e.id,l=n===e.id;return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-1 rounded-sm border px-2 py-1.5 transition-colors ${c||l?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>i(e),className:`min-w-0 flex-1 text-left`,children:[(0,M.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[s?.icon?(0,M.jsx)(`img`,{src:s.icon,alt:s.name,className:`size-3.5 shrink-0 object-contain`}):null,(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 text-xs text-[var(--console-text)]`,children:e.title})]}),(0,M.jsx)(`span`,{className:`console-mono mt-0.5 block truncate text-[10px] text-[var(--console-muted)]`,children:Lo(e.time_updated??e.time_created)})]}),(0,M.jsx)(Wi,{active:r.has(e.id),onToggle:()=>a(e)})]})},e.slug)})})})}function Zo(){let e=p(),[t,n]=(0,O.useState)([]),[r,i]=(0,O.useState)([]),[a,o]=(0,O.useState)([]),[s,c]=(0,O.useState)(!0),[l,u]=(0,O.useState)(null),[m,h]=(0,O.useState)(null),[g,_]=(0,O.useState)(!1),[v,ee]=(0,O.useState)(null),[te,ne]=(0,O.useState)(null),[y,re]=(0,O.useState)(null),[b,ie]=(0,O.useState)([]),[x,ae]=(0,O.useState)(`agents`),[oe,S]=(0,O.useState)(null),[se,ce]=(0,O.useState)(null),[le,ue]=(0,O.useState)(!1),[de,fe]=(0,O.useState)(null),[pe,me]=(0,O.useState)(void 0),[he,ge]=(0,O.useState)(null),[_e,ve]=(0,O.useState)(``),[C,ye]=(0,O.useState)(``),[w,be]=(0,O.useState)(!1),[T,xe]=(0,O.useState)({}),[E,Se]=(0,O.useState)([]),[Ce,we]=(0,O.useState)(!1),[D,Te]=(0,O.useState)(null),[Ee,De]=(0,O.useState)(null),[Oe,ke]=(0,O.useState)(0),[Ae,je]=(0,O.useState)(!1),[Me,Ne]=(0,O.useState)(!0),Pe=(0,O.useRef)(null),Fe=(0,O.useRef)(new Map);(0,O.useEffect)(()=>{let e=new AbortController,t=performance.now();return j(`app.load.start`,{path:window.location.pathname}),(async()=>{try{let e=await ze();ge(e);let[r,a,s,c,l,u]=await Promise.all([Ve(),Ue({from:e.window.from,to:e.window.to}),Ge(e.window).catch(e=>(console.error(`Failed to load dashboard:`,e),null)),He().catch(e=>(console.error(`Failed to load projects:`,e),{projects:[]})),qe(),Be().catch(e=>(console.error(`Failed to load scan status:`,e),null))]);n(r),i(a.sessions),ie(c.projects),o(l.bookmarks),u&&Te(u),s&&re(s),j(`app.load.done`,{duration_ms:Math.round(performance.now()-t),agents:r.length,sessions:a.sessions.length,projects:c.projects.length,dashboard:!!s})}catch(e){console.error(`Failed to load data:`,e),j(`app.load.error`,{duration_ms:Math.round(performance.now()-t),error:e instanceof Error?e.message:String(e)}),u(`Failed to load data. Is the CLI server running?`)}finally{c(!1)}})(),()=>e.abort()},[]);let Ie=f(),Le=(0,O.useMemo)(()=>new Set(t.map(e=>e.name.toLowerCase())),[t]),Re=(0,O.useMemo)(()=>new Map(t.map(e=>[e.name.toLowerCase(),e.displayName])),[t]),k=w,N=(0,O.useMemo)(()=>ko(Ie.pathname,Le),[Ie.pathname,Le]);(0,O.useEffect)(()=>{j(`route.change`,{path:Ie.pathname,mode:N.mode,agent:N.activeAgentKey,session:N.activeSessionSlug})},[Ie.pathname,N.mode,N.activeAgentKey,N.activeSessionSlug]),(0,O.useEffect)(()=>{if(N.mode===`projects`||N.mode===`project`){ae(`projects`),N.mode===`project`&&S({kind:N.activeProjectKind,key:N.activeProjectKey});return}(N.mode===`agent`||N.mode===`missingAgent`)&&ae(`agents`)},[N]);let Qe=k?C:typeof Ie.state==`object`&&Ie.state!==null&&`searchQuery`in Ie.state&&typeof Ie.state.searchQuery==`string`?Ie.state.searchQuery:``,P=(0,O.useMemo)(()=>Do(r,t),[r,t]);(0,O.useEffect)(()=>{let e=!1;return o(t=>{let n=da(t,r);return n===t?t:(Ye(n.map(({bookmarked_at:e,...t})=>t)).catch(t=>{e||console.error(`Failed to sync bookmark snapshots:`,t)}),n)}),()=>{e=!0}},[r]),(0,O.useEffect)(()=>{let e=!1;return(async()=>{let t=ca();if(t.length!==0)try{let n=await Ye(t.map(({bookmarked_at:e,...t})=>t));if(e)return;o(n.bookmarks),la()}catch(t){e||console.error(`Failed to migrate legacy bookmarks:`,t)}})(),()=>{e=!0}},[]);let $e=(0,O.useMemo)(()=>new Set(a.map(e=>oa(e.agentKey,e.sessionId))),[a]),tt=(0,O.useCallback)((e,t)=>$e.has(oa(e,t)),[$e]),F=(0,O.useCallback)(e=>{let t=oa(e.agentKey,e.sessionId),n=$e.has(t),r=a;o(n?r.filter(e=>oa(e.agentKey,e.sessionId)!==t):[...r,e].toSorted((e,t)=>{let n=e.time_updated??e.time_created;return(t.time_updated??t.time_created)-n})),j(n?`bookmark.delete`:`bookmark.add`,{agent:e.agentKey,session:e.sessionId}),(n?Xe(e.agentKey,e.sessionId):Je({agentKey:e.agentKey,sessionId:e.sessionId,fullPath:e.fullPath,title:e.title,directory:e.directory,time_created:e.time_created,time_updated:e.time_updated,stats:e.stats})).catch(e=>{console.error(`Failed to toggle bookmark:`,e),o(r)})},[$e,a]),I=(0,O.useCallback)((e,t)=>{F(sa(e,t))},[F]),L=N.activeAgentKey,R=N.mode===`project`?N.activeProjectKind:null,z=N.mode===`project`?N.activeProjectKey:null,nt=(0,O.useMemo)(()=>R&&z?{kind:R,key:z}:null,[R,z]),rt=nt?ma(nt):null,it=(0,O.useMemo)(()=>N.mode===`session`?P.byRouteKey.get(wo(N.activeAgentKey,N.activeSessionSlug))??null:null,[P,N]),at=(N.mode===`session`&&m?.id===N.activeSessionSlug?m:null)?.project_identity??it?.project_identity??null,ot=x===`projects`?nt??(N.mode===`session`?at:oe):null,st=ot?ma(ot):null,ct=(0,O.useMemo)(()=>L?P.byAgent.get(L)??[]:[],[L,P]),lt=(0,O.useMemo)(()=>st?pe?P.byProjectAgentKey.get(To(st,pe))??[]:P.byProjectIdentityKey.get(st)??[]:[],[pe,st,P]),B=x===`projects`?lt:ct,V=(0,O.useMemo)(()=>Oo(B),[B]),ut=(0,O.useMemo)(()=>B.length===0?new Set:new Set(B.filter(e=>$e.has(oa(Co(e),e.id))).map(e=>e.id)),[$e,B]),dt=(0,O.useMemo)(()=>a.toSorted((e,t)=>(t.time_updated??t.time_created)-(e.time_updated??e.time_created)),[a]),ft=(0,O.useCallback)(t=>{De(t.id),e(`/${t.slug}`)},[e]),H=(0,O.useCallback)(e=>{I(e,Co(e))},[I]),pt=(0,O.useCallback)(t=>{De(t);let n=V.byId.get(t);n&&e(`/${n.slug}`)},[e,V]),mt=(0,O.useMemo)(()=>{let e=Go.find(e=>e.id===T.costRange);return{agent:T.agent,projectKey:T.projectKey,tag:T.tag,tool:T.tool,fileKind:T.fileKind,costMin:e?.costMin}},[T]),ht=C.trim().length>0||!!(T.tool||T.fileKind),gt=No(D),_t=D?.active===!0,vt=(0,O.useMemo)(()=>{let e=Go.find(e=>e.id===T.costRange),t=T.agent?P.byAgent.get(T.agent)??[]:null,n=T.projectKey?P.byProjectKey.get(T.projectKey)??[]:null,r=t&&n?t.length<=n.length?t:n:t??n??P.sessionsByActivity,i=[];for(let t of r)if(!(T.agent&&Co(t)!==T.agent)&&!(T.projectKey&&t.project_identity?.key!==T.projectKey)&&!(T.tag&&!t.smart_tags?.includes(T.tag))&&!(e&&t.stats.total_cost<e.costMin)&&(i.push({agentName:Co(t),session:t,snippet:`Recent session · ${t.directory}`,matchType:`recent`}),i.length>=50))break;return i},[T,P]),yt=N.mode===`session`?`${N.activeAgentKey}/${N.activeSessionSlug}`:``,bt=(0,O.useEffectEvent)(async e=>{try{let t=!!(e.changedSessionHeads&&e.removedSessionRefs);t&&i(t=>zo(t,e)??t);let[r,a,o,s,c,l]=await Promise.all([Ve(),t?Promise.resolve(null):Ue({from:he?.window.from,to:he?.window.to}),Ge(he?.window).catch(e=>(console.error(`Failed to refresh dashboard:`,e),null)),He().catch(e=>(console.error(`Failed to refresh projects:`,e),{projects:[]})),N.mode===`project`?Ge(he?.window,{projectKind:N.activeProjectKind,projectKey:N.activeProjectKey,agent:pe}).catch(e=>(console.error(`Failed to refresh project dashboard:`,e),null)):Promise.resolve(null),k&&ht?Ke(C,mt).catch(e=>(console.error(`Failed to refresh search results:`,e),{results:[]})):Promise.resolve(null)]);if(n(r),a&&i(a.sessions),ie(s.projects),o&&re(o),c&&ce(c),l&&Se(l.results),N.mode===`session`)try{h(await We(N.activeAgentKey,N.activeSessionSlug)),ee(null)}catch{h(null),ee(`Session not found`)}e.newSessions>0&&ne(`发现 ${e.newSessions} 个新会话,列表已自动刷新`)}catch(e){console.error(`Failed to sync live session update:`,e)}});(0,O.useEffect)(()=>{if(!k){Se([]),we(!1);return}if(!ht){Se(vt),we(!1);return}let e=!1;we(!0);let t=performance.now();return j(`search.start`,{query_length:C.length}),Ke(C,mt).then(n=>{e||(Se(n.results),j(`search.done`,{duration_ms:Math.round(performance.now()-t),results:n.results.length}))}).catch(n=>{e||(console.error(`Failed to load search results:`,n),j(`search.error`,{duration_ms:Math.round(performance.now()-t),error:n instanceof Error?n.message:String(n)}),Se([]))}).finally(()=>{e||we(!1)}),()=>{e=!0}},[C,k,vt,mt,ht]),(0,O.useEffect)(()=>{if(N.mode!==`session`){h(null),ee(null);return}let e=new AbortController;_(!0),ee(null);let t=performance.now();return j(`session.open.start`,{agent:N.activeAgentKey,session:N.activeSessionSlug}),(async()=>{try{let e=await We(N.activeAgentKey,N.activeSessionSlug);h(e),j(`session.open.done`,{agent:N.activeAgentKey,session:N.activeSessionSlug,duration_ms:Math.round(performance.now()-t),messages:e.messages.length})}catch(e){j(`session.open.error`,{agent:N.activeAgentKey,session:N.activeSessionSlug,duration_ms:Math.round(performance.now()-t),error:e instanceof Error?e.message:String(e)}),ee(`Session not found`),h(null)}finally{_(!1)}})(),()=>e.abort()},[yt,N.activeAgentKey,N.activeSessionSlug,N.mode]),(0,O.useEffect)(()=>{rt&&me(void 0)},[rt]),(0,O.useEffect)(()=>{if(!z||!he){ce(null),fe(null),ue(!1);return}let e=!1;return ue(!0),fe(null),Ge(he.window,{projectKind:R??void 0,projectKey:z,agent:pe}).then(t=>{e||ce(t)}).catch(t=>{e||(console.error(`Failed to load project dashboard:`,t),ce(null),fe(`Failed to load project dashboard`))}).finally(()=>{e||ue(!1)}),()=>{e=!0}},[R,z,he,pe]),(0,O.useEffect)(()=>Ze(e=>{bt(e)},e=>{Te(e)}),[]),(0,O.useEffect)(()=>{if(!te)return;let e=window.setTimeout(()=>{ne(null)},3500);return()=>{window.clearTimeout(e)}},[te]),(0,O.useEffect)(()=>{try{Ne(window.localStorage.getItem(Vo)===`1`)}catch{Ne(!0)}},[]),(0,O.useEffect)(()=>{if(k){ke(e=>E.length===0?0:Math.min(e,E.length-1));return}if(N.mode===`session`){De(N.activeSessionSlug);return}if(N.mode===`agent`){De(null);return}De(null)},[k,E.length,N.mode,N.activeSessionSlug,B]),(0,O.useEffect)(()=>{if(!k)return;let e=E[Oe];if(!e)return;let t=`${e.agentName}/${e.session.id}`;Fe.current.get(t)?.scrollIntoView({block:`nearest`})},[k,E,Oe]);let xt=P.landingSessions,St=(0,O.useMemo)(()=>rt?P.byLandingProjectIdentityKey.get(rt)??[]:[],[rt,P]),Ct=(0,O.useMemo)(()=>t.filter(e=>e.count>0).map(e=>({key:e.name.toLowerCase(),name:e.displayName,icon:e.icon,count:e.count})),[t]),wt=(0,O.useMemo)(()=>t.find(e=>e.name.toLowerCase()===L)??null,[L,t]),Tt=(0,O.useMemo)(()=>b.find(e=>rt===ma(Io(e)))??null,[rt,b]),Et=(0,O.useMemo)(()=>b.find(e=>st===ma(Io(e)))??null,[b,st]),Dt=P.projectOptions,Ot=(0,O.useMemo)(()=>{if(!ht)return Dt;let e=new Map,t=Ce?[]:E;for(let n of t){let t=n.session.project_identity;if(!t?.key)continue;let r=e.get(t.key);r?r.count+=1:e.set(t.key,{key:t.key,label:t.displayName||n.session.directory,count:1,showCount:!1})}if(T.projectKey&&!e.has(T.projectKey)){let t=Dt.find(e=>e.key===T.projectKey);t&&e.set(t.key,{...t,count:0,showCount:!1})}return[...e.values()].toSorted((e,t)=>t.count-e.count).slice(0,8)},[Dt,T.projectKey,Ce,E,ht]),U=`CodeSesh`,W=`Select an agent to browse sessions`;if(N.mode===`root`&&(U=k?`Search`:`Dashboard`,W=k?Mo(C,Ce,E.length):y?`${y.totals.sessions.toLocaleString(`en-US`)} total sessions across ${y.perAgent.length} agents`:`Aggregated view across all agents`),N.mode===`projects`&&(U=`Projects`,W=`${b.length.toLocaleString(`en-US`)} projects across ${r.length.toLocaleString(`en-US`)} sessions`),N.mode===`project`&&(U=Tt?.displayName??`Project`,W=Tt?`${Tt.sessionCount.toLocaleString(`en-US`)} sessions · ${Tt.agentStats.length} agents`:N.activeProjectKey),N.mode===`agent`&&L&&(U=wt?.displayName??L,W=`${B.length} sessions`),N.mode===`session`){if(v)U=`Session Not Found`,W=`Requested /${L}/${N.activeSessionSlug}`;else if(m){U=m.title||`Conversation`;let e=m.time_updated??m.time_created;W=(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{children:[`ID: #`,m.id.slice(0,8)]}),(0,M.jsx)(`span`,{children:`·`}),(0,M.jsxs)(`span`,{children:[`Updated `,Lo(e)]}),(0,M.jsx)(et,{tags:m.smart_tags,limit:9,className:`inline-flex`})]})}}N.mode===`missingAgent`&&(U=`Agent Not Found`,W=`Requested /${N.attemptedKey}`),N.mode===`missingSession`&&(U=`Session Not Found`,W=`Session not found in /${L}`),k&&(U=`Search`,W=Mo(C,Ce,E.length));let kt=(0,O.useMemo)(()=>{if(k)return[{label:`Search`}];let e={label:`Dashboard`,to:x===`agents`&&N.mode===`root`||x===`projects`&&N.mode===`projects`?void 0:x===`projects`?`/projects`:`/`};if(N.mode===`root`)return[{label:`Dashboard`}];let t={label:`Projects`,to:N.mode===`project`?`/projects`:void 0};if(N.mode===`projects`)return[e,{label:`Projects`}];if(N.mode===`project`)return[e,t,{label:Tt?.displayName??N.activeProjectKey}];if(N.mode===`session`&&x===`projects`&&ot)return[e,{label:`Projects`,to:`/projects`},{label:Et?.displayName??ot.key,to:ga(ot)},{label:m?.title||N.activeSessionSlug||`Conversation`}];if(N.mode===`missingAgent`)return[e,{label:N.attemptedKey}];let n=wt?.displayName??L??`Unknown Agent`,r={label:n,to:N.mode===`session`?`/${L}`:void 0};return N.mode===`agent`?[e,{label:n}]:N.mode===`missingSession`?[e,r,{label:N.attemptedSessionSlug}]:N.mode===`session`?[e,r,{label:m?.title||N.activeSessionSlug||`Conversation`}]:[e,{label:`Invalid Route`}]},[wt,L,Tt,x,k,Et,ot,m?.title,N]),G;G=s?(0,M.jsx)(Ui,{}):k?(0,M.jsx)(At,{id:`SearchResultsPanel`,detail:{results:E.length,loading:Ce},children:(0,M.jsx)(Qo,{query:C,loading:Ce,results:E,agentNameMap:Re,agents:t,projects:Ot,filters:T,onChangeFilters:xe,onOpenResult:()=>{be(!1),ye(``)},selectedIndex:Oe,registerResultRef:(e,t)=>{t?Fe.current.set(e,t):Fe.current.delete(e)}})}):l?(0,M.jsx)(`div`,{className:`mx-auto max-w-4xl rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-6 text-sm text-[var(--console-error)]`,children:l}):N.mode===`root`?y?(0,M.jsx)(At,{id:`Dashboard`,detail:{sessions:y.totals.sessions,projects:b.length},children:(0,M.jsx)(Ga,{data:y,projects:b,bookmarkedSessions:dt,isBookmarked:tt,onToggleBookmark:(e,t)=>{if(`agentName`in e){I(e,t??e.agentName.toLowerCase());return}F(e)}})}):(0,M.jsx)(ta,{type:`global`,sessions:xt,agentItems:Ct,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):N.mode===`projects`?(0,M.jsx)(eo,{projects:b}):N.mode===`project`?(0,M.jsx)(io,{project:Tt,projectKey:N.activeProjectKey,dashboard:se,loading:le,error:de,sessions:St,activeAgent:pe,onChangeAgent:me,isBookmarked:tt,onToggleSessionBookmark:I}):N.mode===`agent`&&L?(0,M.jsx)(ta,{type:`agent`,sessions:P.byLandingAgent.get(L)??[],agentItems:Ct,activeAgentKey:L,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):N.mode===`session`?g?(0,M.jsx)(Ui,{}):v||!m?(0,M.jsx)(ta,{type:`missing-session`,sessions:P.byLandingAgent.get(N.activeAgentKey)??[],agentItems:Ct,activeAgentKey:N.activeAgentKey,attemptedSessionSlug:N.activeSessionSlug,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):(0,M.jsx)(At,{id:`SessionDetail`,detail:{messages:m.messages.length,session:m.id},children:(0,M.jsx)(wi,{session:m,highlightQuery:Qe})}):N.mode===`missingAgent`?(0,M.jsx)(ta,{type:`missing-agent`,sessions:xt,agentItems:Ct,attemptedAgentKey:N.attemptedKey,isBookmarked:tt,onToggleBookmark:e=>I(e,e.agentKey)}):(0,M.jsx)(`div`,{className:`text-sm text-[var(--console-muted)]`,children:`Invalid route.`});function jt(){ye(_e.trim()),be(!0),ke(0)}function K(){Ne(!0);try{window.localStorage.setItem(Vo,`1`)}catch{}}function Mt(t){if(!(t===`projects`&&_t)){if(ae(t),De(null),t===`projects`){let t=at??(N.mode===`session`?null:oe);e(t?ga(t):`/projects`);return}e(`/`)}}let Nt=(0,O.useEffectEvent)(t=>{let n=t.key;if((t.metaKey||t.ctrlKey)&&n.toLowerCase()===`k`){t.preventDefault(),be(!0),ke(0),window.setTimeout(()=>{Pe.current?.focus(),Pe.current?.select()},0);return}if(t.defaultPrevented||t.metaKey||t.ctrlKey||t.altKey||t.isComposing)return;let r=t.target,i=Jo(r);if(Ae){n===`Escape`&&(t.preventDefault(),je(!1));return}if(i){n===`Escape`&&(t.preventDefault(),r instanceof HTMLElement&&r.blur());return}if(n===`?`){t.preventDefault(),je(!0),K();return}if(n===`/`){t.preventDefault(),K(),be(!0),Pe.current?.focus(),Pe.current?.select();return}if(n===`Escape`){if(t.preventDefault(),k){be(!1),ye(``),ve(``);return}if(N.mode===`session`&&N.activeAgentKey){if(x===`projects`&&ot){e(ga(ot));return}e(`/${N.activeAgentKey}`)}return}if(k){if(E.length===0)return;if(n===`j`){t.preventDefault(),K(),ke(e=>Math.min(e+1,E.length-1));return}if(n===`k`){t.preventDefault(),K(),ke(e=>Math.max(e-1,0));return}if(n===`g`){t.preventDefault(),K(),ke(0);return}if(n===`G`){t.preventDefault(),K(),ke(E.length-1);return}if(n===`Enter`){let n=E[Oe];if(!n)return;t.preventDefault(),K(),be(!1),ye(``),e(`/${n.agentName.toLowerCase()}/${n.session.id}`,{state:{searchQuery:C}})}return}if(x===`agents`&&!L||B.length===0)return;let a=e=>{K();let t=Ee==null?-1:V.indexById.get(Ee)??-1,n=t>=0?t:e>=0?-1:B.length;De(B[Math.max(0,Math.min(n+e,B.length-1))]?.id??null)};if(n===`j`){t.preventDefault(),a(1);return}if(n===`k`){t.preventDefault(),a(-1);return}if(n===`g`){t.preventDefault(),K(),De(B[0]?.id??null);return}if(n===`G`){t.preventDefault(),K(),De(B.at(-1)?.id??null);return}if(n===`Enter`){let n=Ee==null?null:V.byId.get(Ee);if(!n)return;t.preventDefault(),K(),e(x===`projects`?`/${n.slug}`:`/${L}/${n.id}`)}});return(0,O.useEffect)(()=>(window.addEventListener(`keydown`,Nt),()=>window.removeEventListener(`keydown`,Nt)),[]),(0,M.jsxs)(`div`,{className:`console-ui flex h-screen flex-col overflow-hidden bg-[var(--console-bg)] text-[var(--console-text)]`,children:[(0,M.jsx)(`header`,{className:`shrink-0 border-b border-[var(--console-border)] bg-white/85 backdrop-blur-sm`,children:(0,M.jsxs)(`div`,{className:`grid min-h-14 grid-cols-[auto_1fr] items-center gap-3 px-4 py-2 sm:grid-cols-[auto_1fr_auto] sm:py-0`,children:[(0,M.jsxs)(d,{to:`/`,className:`flex items-center gap-2 text-[var(--console-text)]`,children:[(0,M.jsx)(`img`,{src:`/logo.svg?v=3`,alt:`CodeSesh`,className:`h-6 w-6 rounded-sm`}),(0,M.jsx)(`span`,{className:`console-mono text-sm font-semibold uppercase tracking-[0.05em]`,children:`CodeSesh`})]}),(0,M.jsxs)(`form`,{className:`order-3 col-span-2 flex w-full items-center justify-center gap-2 sm:order-none sm:col-span-1 sm:mx-auto sm:max-w-[560px]`,onSubmit:e=>{e.preventDefault(),jt()},children:[(0,M.jsx)(`label`,{className:`flex min-w-0 flex-1 items-center rounded-sm border border-[var(--console-border)] bg-white px-2 py-1`,children:(0,M.jsx)(`input`,{ref:Pe,value:_e,onChange:e=>ve(e.target.value),placeholder:`Search sessions /`,className:`console-mono w-full min-w-0 bg-transparent text-xs text-[var(--console-text)] outline-none placeholder:text-[var(--console-muted)]`})}),(0,M.jsx)(`button`,{type:`submit`,className:`console-mono rounded-sm border border-[var(--console-border-strong)] bg-[var(--console-surface-muted)] px-3 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Search`})]}),(0,M.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>{je(!0),K()},className:`console-mono rounded-sm border border-[var(--console-border)] bg-white px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-[var(--console-surface-muted)]`,title:`Show keyboard shortcuts`,children:[`?`,(0,M.jsx)(`span`,{className:`hidden sm:inline`,children:` Shortcuts`})]}),jo(he)?(0,M.jsx)(`span`,{className:`console-mono hidden rounded-sm border border-[var(--console-border)] bg-white px-2 py-1 text-xs text-[var(--console-text)] md:inline-flex`,title:`Time window applied to agent counts, dashboard, and session list`,children:jo(he)}):null,(0,M.jsxs)(`span`,{className:`console-mono hidden rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-muted)] sm:inline-flex`,children:[`v`,`0.9.1`]})]})]})}),(0,M.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,M.jsx)(`aside`,{className:`hidden w-64 shrink-0 flex-col border-r border-[var(--console-border)] bg-[var(--console-sidebar-bg)] lg:flex`,children:(0,M.jsxs)(`div`,{className:`console-scrollbar flex-1 space-y-8 overflow-y-auto px-4 py-6`,children:[(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`BROWSE BY`}),(0,M.jsx)(Yo,{value:x,onChange:Mt,projectsDisabled:_t})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`NAVIGATION`}),(0,M.jsxs)(`ul`,{className:`space-y-1 ${x===`projects`?`console-scrollbar max-h-[min(280px,calc(100vh-440px))] overflow-y-auto pr-1`:``}`,children:[(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:x===`projects`?`/projects`:`/`,className:`flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${x===`agents`&&N.mode===`root`||x===`projects`&&N.mode===`projects`?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsx)(`img`,{src:`/logo.svg?v=3`,alt:`Dashboard`,className:`size-3.5 rounded-[2px]`}),(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 flex-1 text-xs`,children:`Dashboard`})]})}),x===`agents`?t.map(e=>{let t=e.name.toLowerCase(),n=t===L,r=A.agents[t],i=Po(D,e.name),a=_t&&i!==null,o=`ml-4 flex items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${a?`cursor-not-allowed border-transparent text-[var(--console-muted)] opacity-50`:n?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,s=(0,M.jsxs)(M.Fragment,{children:[r?.icon&&(0,M.jsx)(`img`,{src:r.icon,alt:e.displayName,className:`size-3.5 object-contain`}),(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 flex-1 text-xs`,children:e.displayName}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:i??Fo(D,e.name,e.count)})]});return(0,M.jsxs)(`li`,{children:[a?(0,M.jsx)(`span`,{className:o,title:`Available after this agent scan completes`,children:s}):(0,M.jsx)(d,{to:`/${t}`,className:o,children:s}),i?(0,M.jsx)(`span`,{className:`ml-4 mt-1 block h-1 overflow-hidden rounded-sm bg-[var(--console-surface-muted)]`,children:(0,M.jsx)(`span`,{className:`block h-full bg-[var(--console-accent)]`,style:{width:`${D?.agentStatuses[e.name]?.total?Math.round((D.agentStatuses[e.name]?.processed??0)/D.agentStatuses[e.name].total*100):8}%`}})}):null]},e.name)}):b.map(e=>{let t=Io(e),n=st===ma(t);return(0,M.jsx)(`li`,{children:(0,M.jsxs)(d,{to:ga(t),onClick:()=>S(t),className:`ml-4 flex min-w-0 items-center gap-2 rounded-sm border px-3 py-1.5 text-left transition-colors ${n?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-xs`,children:e.displayName}),(0,M.jsx)(`span`,{className:`console-mono shrink-0 text-[11px] text-[var(--console-muted)]`,children:e.sessionCount})]})},`${e.identityKind}:${e.identityKey}`)}),x===`agents`&&t.length===0&&!s?(0,M.jsx)(`li`,{children:(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning agents...`:`No agents found`})}):null,x===`projects`&&b.length===0&&!s?(0,M.jsx)(`li`,{children:(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning projects...`:`No projects found`})}):null]})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsx)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:`BOOKMARKS`}),dt.length===0?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`No bookmarks yet`}):(0,M.jsx)(`ul`,{className:`space-y-1`,children:dt.map(e=>{let t=N.mode===`session`&&N.activeAgentKey===e.agentKey&&N.activeSessionSlug===e.sessionId,n=A.agents[e.agentKey];return(0,M.jsx)(`li`,{children:(0,M.jsxs)(`div`,{className:`flex items-start gap-2 rounded-sm border px-2 py-1.5 transition-colors ${t?`border-[var(--console-border-strong)] bg-white text-[var(--console-text)]`:`border-transparent text-[var(--console-muted)] hover:border-[var(--console-border)] hover:bg-[var(--console-surface-muted)]`}`,children:[(0,M.jsxs)(d,{to:`/${e.fullPath}`,className:`flex min-w-0 flex-1 items-start gap-2`,children:[n?.icon?(0,M.jsx)(`img`,{src:n.icon,alt:n.name,className:`mt-0.5 size-3.5 shrink-0 object-contain`}):null,(0,M.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,M.jsx)(`span`,{className:`console-mono line-clamp-1 block text-xs`,children:e.title}),(0,M.jsx)(`span`,{className:`console-mono mt-0.5 line-clamp-1 block text-[10px] text-[var(--console-muted)]`,children:n?.name??e.agentKey})]})]}),(0,M.jsx)(Wi,{active:!0,onToggle:()=>F(e)})]})},oa(e.agentKey,e.sessionId))})})]}),(0,M.jsxs)(`section`,{children:[(0,M.jsxs)(`h3`,{className:`console-mono mb-3 text-xs font-bold uppercase text-[var(--console-text)]`,children:[`SESSIONS`,B.length>0?(0,M.jsx)(`span`,{className:`ml-2 text-[10px] font-normal text-[var(--console-muted)]`,children:`Navigate j k · Open Enter`}):null]}),x===`agents`&&!L?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`Select an agent`}):x===`projects`&&!st?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:`Select a project`}):B.length===0?(0,M.jsx)(`span`,{className:`console-mono block rounded-sm px-3 py-1.5 text-xs text-[var(--console-muted)]`,children:D?.active?`Scanning sessions...`:`No sessions yet`}):x===`projects`?(0,M.jsx)(Xo,{sessions:B,activeSessionId:N.mode===`session`?N.activeSessionSlug:null,selectedSessionId:Ee,bookmarkedSessionIds:ut,onSelectSession:ft,onToggleBookmark:H}):(0,M.jsx)(At,{id:`SessionTreeSidebar`,detail:{sessions:B.length},children:(0,M.jsx)(xo,{sessions:B,activeSessionId:N.mode===`session`?N.activeSessionSlug:null,selectedSessionId:Ee,onSelectSession:pt,bookmarkedSessionIds:ut,onToggleBookmark:H})})]})]})}),(0,M.jsxs)(`main`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,M.jsx)(`section`,{className:`shrink-0 border-b border-[var(--console-border)] bg-white/70 px-4 py-4 backdrop-blur-sm md:px-8`,children:(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`nav`,{"aria-label":`Breadcrumb`,className:`console-mono mb-2 flex flex-wrap items-center gap-1 text-[11px] text-[var(--console-muted)]`,children:kt.map((e,t)=>(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.to?(0,M.jsx)(d,{to:e.to,className:`transition-colors hover:text-[var(--console-text)]`,children:e.label}):(0,M.jsx)(`span`,{className:`text-[var(--console-text)]`,children:e.label}),t<kt.length-1?(0,M.jsx)(`span`,{children:`/`}):null]},`${e.label}-${t}`))}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] font-bold uppercase text-[var(--console-muted)]`,children:N.mode===`session`?`Session`:N.mode===`root`?`Dashboard`:N.mode===`projects`?`Projects`:N.mode===`project`?`Project`:`Landing`}),(0,M.jsx)(`h1`,{className:`console-mono text-xl font-semibold tracking-tight text-[var(--console-text)]`,children:U})]}),(0,M.jsx)(`div`,{className:`console-mono mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-[var(--console-muted)]`,children:W}),(0,M.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[Me?null:(0,M.jsxs)(`div`,{className:`console-mono inline-flex items-center gap-2 rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-text)]`,children:[(0,M.jsx)(`span`,{children:`Keyboard navigation available`}),(0,M.jsx)(`span`,{className:`rounded-sm border border-[var(--console-border)] bg-white px-1`,children:`?`}),(0,M.jsx)(`button`,{type:`button`,onClick:K,className:`text-[var(--console-muted)] transition-colors hover:text-[var(--console-text)]`,"aria-label":`Dismiss keyboard shortcuts hint`,children:`×`})]}),!k&&N.mode===`session`?(0,M.jsx)(`span`,{className:`console-mono inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-muted)]`,children:`Esc back`}):null,!k&&N.mode===`session`&&m?(0,M.jsx)(fo,{agentName:N.activeAgentKey,sessionId:m.id,directory:m.directory}):null]}),te?(0,M.jsx)(`p`,{className:`console-mono mt-2 inline-flex rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[11px] text-[var(--console-text)]`,children:te}):null,gt&&N.mode===`root`?(0,M.jsx)(`p`,{className:`console-mono mt-2 inline-flex max-w-4xl rounded-sm border border-[var(--console-warning-border)] bg-[var(--console-warning-bg)] px-2 py-1 text-[11px] leading-relaxed text-[var(--console-warning)]`,children:gt}):null]})}),(0,M.jsx)(`section`,{className:`console-scrollbar bg-grid min-h-0 flex-1 overflow-y-auto px-4 py-6 md:px-8`,children:(0,M.jsx)(ao,{children:(0,M.jsx)(At,{id:`MainContent`,detail:{mode:N.mode,search:k,sessions:r.length},children:G})})})]})]}),Ae?(0,M.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/35 px-4`,onClick:()=>je(!1),children:(0,M.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Keyboard shortcuts`,className:`w-full max-w-2xl rounded-sm border border-[var(--console-border-strong)] bg-white p-5 shadow-2xl`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`console-mono text-[11px] uppercase tracking-[0.16em] text-[var(--console-muted)]`,children:`Keyboard Shortcuts`}),(0,M.jsx)(`h2`,{className:`console-mono mt-2 text-xl font-semibold text-[var(--console-text)]`,children:`Navigate without leaving the keyboard`})]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>je(!1),className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-xs text-[var(--console-text)] transition-colors hover:bg-white`,children:`Esc`})]}),(0,M.jsx)(`div`,{className:`mt-5 grid gap-4 md:grid-cols-3`,children:qo.map(e=>(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] p-4`,children:[(0,M.jsx)(`h3`,{className:`console-mono text-xs font-bold uppercase text-[var(--console-text)]`,children:e.title}),(0,M.jsx)(`div`,{className:`mt-3 space-y-3`,children:e.items.map(e=>(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`console-mono text-xs text-[var(--console-text)]`,children:e.keys}),(0,M.jsx)(`p`,{className:`mt-1 text-sm leading-6 text-[var(--console-muted)]`,children:e.description})]},e.keys))})]},e.title))})]})}):null]})}function Qo({query:e,loading:t,results:n,agentNameMap:r,agents:i,projects:a,filters:o,onChangeFilters:s,onOpenResult:c,selectedIndex:l,registerResultRef:u}){let f=(0,M.jsx)($o,{agents:i,projects:a,filters:o,onChangeFilters:s});return t?(0,M.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[f,(0,M.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:4}).map((e,t)=>(0,M.jsxs)(`div`,{className:`animate-pulse rounded-sm border border-[var(--console-border)] bg-white/80 p-4`,children:[(0,M.jsx)(`div`,{className:`h-3 w-32 rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-3 h-4 w-2/3 rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-2 h-3 w-full rounded bg-[var(--console-surface-muted)]`}),(0,M.jsx)(`div`,{className:`mt-1 h-3 w-5/6 rounded bg-[var(--console-surface-muted)]`})]},t))})]}):n.length===0?(0,M.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[f,(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white/80 p-6`,children:[(0,M.jsx)(`h2`,{className:`console-mono text-sm font-semibold text-[var(--console-text)]`,children:e?`No matches`:`No recent sessions`}),e?(0,M.jsxs)(`p`,{className:`console-mono mt-2 text-xs text-[var(--console-muted)]`,children:[`Query: `,e]}):null]})]}):(0,M.jsxs)(`div`,{className:`grid gap-3`,children:[f,(0,M.jsx)(`div`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:`Navigate j k · Open Enter · Exit Esc`}),n.map((t,n)=>{let i=t.agentName.toLowerCase(),a=r.get(i)??t.agentName,o=`${t.agentName}/${t.session.id}`;return(0,M.jsxs)(d,{ref:e=>u(o,e),to:`/${i}/${t.session.id}`,state:{searchQuery:e},onClick:c,className:`rounded-sm border bg-white/85 p-4 transition-colors hover:border-[var(--console-border-strong)] hover:bg-white ${n===l?`border-[var(--console-border-strong)]`:`border-[var(--console-border)]`}`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:a}),(0,M.jsx)(`span`,{className:`console-mono rounded-sm border border-[var(--console-border)] bg-white px-1.5 py-0.5 text-[10px] uppercase text-[var(--console-muted)]`,children:Ko[t.matchType]}),(0,M.jsx)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:t.session.directory})]}),(0,M.jsx)(`h2`,{className:`console-mono mt-3 text-sm font-semibold text-[var(--console-text)]`,children:t.session.title}),(0,M.jsx)(et,{tags:t.session.smart_tags,className:`mt-2`}),(0,M.jsx)(`p`,{className:`console-mono mt-2 text-xs leading-6 text-[var(--console-muted)] [&_mark]:bg-[var(--console-accent)] [&_mark]:px-0.5 [&_mark]:text-white`,dangerouslySetInnerHTML:{__html:Bo(t.snippet||t.session.title)}})]},o)})]})}function $o({agents:e,projects:t,filters:n,onChangeFilters:r}){let i=Object.values(n).some(Boolean),a=(e,t)=>{r(n=>({...n,[e]:n[e]===t?void 0:t}))};return(0,M.jsxs)(`div`,{className:`rounded-sm border border-[var(--console-border)] bg-white/85 p-3`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Scope`}),(0,M.jsx)(es,{active:!n.projectKey,label:`All`,onClick:()=>r(e=>({...e,projectKey:void 0}))}),t.map(e=>(0,M.jsx)(es,{active:n.projectKey===e.key,label:e.showCount===!1?e.label:`${e.label} · ${e.count}`,onClick:()=>a(`projectKey`,e.key)},e.key))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Agent`}),(0,M.jsx)(es,{active:!n.agent,label:`All Agents`,onClick:()=>r(e=>({...e,agent:void 0}))}),e.map(e=>(0,M.jsx)(es,{active:n.agent===e.name,label:e.displayName,onClick:()=>a(`agent`,e.name)},e.name))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Tag`}),Ho.map(e=>(0,M.jsx)(es,{active:n.tag===e,label:N[e],onClick:()=>a(`tag`,e)},e))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Signal`}),Uo.map(e=>(0,M.jsx)(es,{active:n.tool===e,label:`tool:${e}`,onClick:()=>a(`tool`,e)},e))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`File Activity`}),Wo.map(e=>(0,M.jsx)(es,{active:n.fileKind===e.kind,label:e.label,onClick:()=>a(`fileKind`,e.kind)},e.kind))]}),(0,M.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`console-mono text-[10px] font-semibold uppercase text-[var(--console-muted)]`,children:`Cost Range`}),(0,M.jsx)(es,{active:!n.costRange,label:`Any Cost`,onClick:()=>r(e=>({...e,costRange:void 0}))}),Go.map(e=>(0,M.jsx)(es,{active:n.costRange===e.id,label:e.label,onClick:()=>a(`costRange`,e.id)},e.id)),i?(0,M.jsx)(`button`,{type:`button`,onClick:()=>r({}),className:`console-mono ml-auto rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)] px-2 py-1 text-[10px] text-[var(--console-muted)] transition-colors hover:bg-white`,children:`Clear`}):null]})]})}function es({active:e,label:t,onClick:n}){return(0,M.jsx)(`button`,{type:`button`,onClick:n,className:`console-mono rounded-sm border px-2 py-1 text-[10px] transition-colors ${e?`border-[var(--console-border-strong)] bg-[var(--console-accent)] text-white`:`border-[var(--console-border)] bg-[var(--console-surface-muted)] text-[var(--console-muted)] hover:bg-white`}`,children:t})}k.createRoot(document.getElementById(`root`)).render((0,M.jsx)(O.StrictMode,{children:(0,M.jsx)(_,{children:(0,M.jsx)(At,{id:`App`,children:(0,M.jsx)(Zo,{})})})}));
|
package/dist/web/index.html
CHANGED
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
</style>
|
|
161
|
-
<script type="module" crossorigin src="/assets/index-
|
|
161
|
+
<script type="module" crossorigin src="/assets/index-CT4gLIAq.js"></script>
|
|
162
162
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="/assets/markdown-Bm__FT1K.js">
|
|
164
164
|
<link rel="modulepreload" crossorigin href="/assets/react-CGUTVnhO.js">
|
package/package.json
CHANGED