refactor sse

This commit is contained in:
d-kimsuon
2025-09-21 07:50:50 +09:00
parent f299e8f8bb
commit 7211ddeb5a
7 changed files with 20 additions and 9 deletions

View File

@@ -25,8 +25,13 @@ export const SSEEventListeners: FC<PropsWithChildren> = ({ children }) => {
});
});
useServerEventListener("taskChanged", async (event) => {
setAliveTasks(event.aliveTasks);
useServerEventListener("taskChanged", async ({ aliveTasks, changed }) => {
setAliveTasks(aliveTasks);
await queryClient.invalidateQueries({
queryKey: sessionDetailQuery(changed.projectId, changed.sessionId)
.queryKey,
});
});
return <>{children}</>;

View File

@@ -1,5 +1,4 @@
import { QueryClient } from "@tanstack/react-query";
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Toaster } from "../components/ui/sonner";
@@ -24,7 +23,7 @@ const geistMono = Geist_Mono({
subsets: ["latin"],
});
export const metadata: Metadata = {
export const metadata = {
title: "Claude Code Viewer",
description: "Web Viewer for Claude Code history",
};
@@ -42,7 +41,7 @@ export default async function RootLayout({
});
return (
<html lang="ja">
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>

View File

@@ -218,7 +218,7 @@ export const SessionPageContent: FC<{
{/* Fixed Diff Button */}
<Button
onClick={() => setIsDiffModalOpen(true)}
className="fixed bottom-6 right-6 w-14 h-14 rounded-full shadow-lg hover:shadow-xl transition-all duration-200 z-50"
className="fixed bottom-15 right-6 w-14 h-14 rounded-full shadow-lg hover:shadow-xl transition-all duration-200 z-50"
size="lg"
>
<GitCompareIcon className="w-6 h-6" />

View File

@@ -444,6 +444,7 @@ export const routes = (app: HonoAppType) => {
) => {
stream.writeSSE("taskChanged", {
aliveTasks: event.aliveTasks,
changed: event.changed,
});
};
@@ -451,6 +452,7 @@ export const routes = (app: HonoAppType) => {
eventBus.on("sessionChanged", onSessionChanged);
eventBus.on("taskChanged", onTaskChanged);
const { connectionPromise } = adaptInternalEventToSSE(rawStream, {
timeout: 5 /* min */ * 60 /* sec */ * 1000,
cleanUp: () => {
eventBus.off("sessionListChanged", onSessionListChanged);
eventBus.off("sessionChanged", onSessionChanged);

View File

@@ -368,8 +368,11 @@ export class ClaudeCodeTaskController {
Object.assign(target, task);
this.eventBus.emit("taskChanged", {
aliveTasks: this.aliveTasks,
});
if (task.status === "paused" || task.status === "running") {
this.eventBus.emit("taskChanged", {
aliveTasks: this.aliveTasks,
changed: task,
});
}
}
}

View File

@@ -18,6 +18,7 @@ export type InternalEventDeclaration = {
taskChanged: {
aliveTasks: AliveClaudeCodeTask[];
changed: AliveClaudeCodeTask;
};
permissionRequested: {

View File

@@ -21,6 +21,7 @@ export type SSEEventDeclaration = {
taskChanged: {
aliveTasks: AliveClaudeCodeTask[];
changed: AliveClaudeCodeTask;
};
permission_requested: {