From 55f565d53fbd2f1e263eff0be33ebd19d84fbeb4 Mon Sep 17 00:00:00 2001 From: NA-Wen Date: Wed, 11 Mar 2026 11:35:33 +0800 Subject: [PATCH] update readme & solve frontend efficiency --- README.md | 23 +++++++++++++++++++++++ frontend/src/pages/LaunchView.vue | 17 ++++++++++++++++- server/mcp_server.py | 6 ++---- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 15d0a8d3..c59a3426 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,29 @@ make dev ``` Checks all YAML files for syntax and schema errors. +### 🦞 Run with OpenClaw +OpenClaw can integrate with ChatDev by invoking existing agent teams or dynamically creating new agent teams within ChatDev. +To get started: +1. Start the ChatDev 2.0 backend. +2. Install the required skills for your OpenClaw instance: + ```bash + clawdbot install chatdev + ``` + +3. Ask your OpenClaw to create a ChatDev workflow. For example: + +* **Automated information collection and content publishing** + + ``` + Create a ChatDev workflow to automatically collect trending information, generate a Xiaohongshu post, and publish it. + ``` + +* **Multi-agent geopolitical simulation** + ``` + Create a ChatDev workflow with multiple agents to simulate possible future developments of the Middle East situation. + ``` + + ### 🐳 Run with Docker Alternatively, you can run the entire application using Docker Compose. This method simplifies dependency management and provides a consistent environment. diff --git a/frontend/src/pages/LaunchView.vue b/frontend/src/pages/LaunchView.vue index d8361b53..748c7a41 100755 --- a/frontend/src/pages/LaunchView.vue +++ b/frontend/src/pages/LaunchView.vue @@ -56,7 +56,7 @@ > @@ -540,6 +540,7 @@ const addTotalLoadingMessage = (nodeId) => { type: 'dialogue', name: nodeId, text: '', + htmlContent: '', avatar, isRight: false, isLoading: true, @@ -614,6 +615,20 @@ const finalizeAllLoadingEntries = (nodeState, endedAt = Date.now()) => { // Global timer for updating loading bubble durations const now = ref(Date.now()) let loadingTimerInterval = null +const runningLoadingEntries = ref(0) + +const startLoadingTimer = () => { + if (loadingTimerInterval) return + loadingTimerInterval = setInterval(() => { + now.value = Date.now() + }, 1000) +} + +const stopLoadingTimer = () => { + if (!loadingTimerInterval) return + clearInterval(loadingTimerInterval) + loadingTimerInterval = null +} // Map sprites for different roles const nameToSpriteMap = ref(new Map()) diff --git a/server/mcp_server.py b/server/mcp_server.py index c7d31fb3..6ec2fe20 100644 --- a/server/mcp_server.py +++ b/server/mcp_server.py @@ -24,8 +24,6 @@ _DYNAMIC_TOOLS_DIR = Path(__file__).parent / "dynamic_tools" _DYNAMIC_TOOLS_DIR.mkdir(parents=True, exist_ok=True) - - def _safe_tool_filename(filename: str) -> str: name = Path(filename).name if not name.endswith(".py"): @@ -184,6 +182,6 @@ if _bootstrap["errors"]: if __name__ == "__main__": - print("Starting DevAll MCP server...") + print("Starting MCP server...") print("Run standalone with: fastmcp run server/mcp_server.py --transport streamable-http --port 8010") - mcp.run() + mcp.run() \ No newline at end of file