diff --git a/agent-team/web/src/App.tsx b/agent-team/web/src/App.tsx
index 56b1d9b..bd9e5ba 100644
--- a/agent-team/web/src/App.tsx
+++ b/agent-team/web/src/App.tsx
@@ -127,6 +127,7 @@ export default function App() {
value={view}
onValueChange={(v) => setView(v as View)}
className="flex min-w-0 flex-1 flex-col"
+ aria-label="Main view"
>
diff --git a/agent-team/web/src/components/TaskDrawer.tsx b/agent-team/web/src/components/TaskDrawer.tsx
index 7abfe8d..0470e82 100644
--- a/agent-team/web/src/components/TaskDrawer.tsx
+++ b/agent-team/web/src/components/TaskDrawer.tsx
@@ -264,9 +264,9 @@ function CollapsibleSection({
return (
-
+
{title}
-
+
diff --git a/agent-team/web/vite.config.ts b/agent-team/web/vite.config.ts
index c5a5e62..cbc3927 100644
--- a/agent-team/web/vite.config.ts
+++ b/agent-team/web/vite.config.ts
@@ -18,6 +18,36 @@ export default defineConfig({
outDir: "dist",
emptyOutDir: true,
sourcemap: false,
+ rollupOptions: {
+ output: {
+ // Split heavy vendors into their own chunks so the app/UI code isn't
+ // re-downloaded when only a component changes, and to clear the 500 kB
+ // single-chunk warning. Function form (not object) so react-dom and
+ // transitive deps bucket precisely instead of collapsing into a stub.
+ manualChunks(id) {
+ if (!id.includes("node_modules")) return;
+ if (/[\\/]node_modules[\\/](react|react-dom|scheduler)[\\/]/.test(id))
+ return "react";
+ if (id.includes("reactflow") || id.includes("dagre")) return "flow";
+ if (id.includes("@radix-ui")) return "radix";
+ if (
+ id.includes("react-markdown") ||
+ id.includes("micromark") ||
+ id.includes("mdast") ||
+ id.includes("hast") ||
+ id.includes("unist") ||
+ id.includes("unified") ||
+ id.includes("remark") ||
+ id.includes("vfile") ||
+ id.includes("property-information") ||
+ id.includes("/decode-named-character-reference/") ||
+ id.includes("character-entities")
+ )
+ return "markdown";
+ return "vendor";
+ },
+ },
+ },
},
server: {
proxy: {