()
+ for (const session of projectSessions) {
+ if (session.workdir) set.add(session.workspace ?? session.workdir)
+ }
+ return Array.from(set).sort().join('|')
+ }, [projectSessions])
+
+ // Hydrate dev-server status once per unique workdir referenced by visible sessions.
+ useEffect(() => {
+ if (!uniqueWorkdirSignature) return
+ for (const workdir of uniqueWorkdirSignature.split('|')) {
+ void fetchDevServerStatus(workdir)
+ }
+ }, [currentProject?.id, uniqueWorkdirSignature, fetchDevServerStatus])
+
const [favoriteSessions, otherSessions] = useMemo(() => {
const favs: SessionSummary[] = []
const others: SessionSummary[] = []
@@ -452,7 +519,7 @@ function renderSessionList(
@@ -525,6 +592,7 @@ function renderSessionList(
{session.messageCount} messages
+ {session.workdir && }
)
}
diff --git a/web/src/components/shared/icons/ServerIcon.tsx b/web/src/components/shared/icons/ServerIcon.tsx
new file mode 100644
index 00000000..7b25b359
--- /dev/null
+++ b/web/src/components/shared/icons/ServerIcon.tsx
@@ -0,0 +1,23 @@
+interface ServerIconProps {
+ className?: string
+}
+
+export function ServerIcon({ className = 'w-3.5 h-3.5' }: ServerIconProps) {
+ return (
+
+ )
+}
diff --git a/web/src/components/shared/icons/index.ts b/web/src/components/shared/icons/index.ts
index c3fc3e23..42fe5cfa 100644
--- a/web/src/components/shared/icons/index.ts
+++ b/web/src/components/shared/icons/index.ts
@@ -36,6 +36,7 @@ export { PauseIcon } from './PauseIcon'
export { TerminalIcon } from './TerminalIcon'
export { TrashIcon } from './TrashIcon'
export { SearchIcon } from './SearchIcon'
+export { ServerIcon } from './ServerIcon'
export { WarningIcon } from './WarningIcon'
export { WarningSmallIcon } from './WarningSmallIcon'
export { XCloseIcon, XCloseSmallIcon } from './XCloseIcon'