mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-25 11:18:06 +00:00
update readme & solve frontend efficiency
This commit is contained in:
parent
54ad9a57ee
commit
55f565d53f
23
README.md
23
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.
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
>
|
||||
<CollapsibleMessage
|
||||
v-if="message.text"
|
||||
:html-content="renderMarkdown(message.text)"
|
||||
:html-content="message.htmlContent || renderMarkdown(message.text)"
|
||||
:raw-content="message.text"
|
||||
:default-expanded="configStore.AUTO_EXPAND_MESSAGES"
|
||||
/>
|
||||
@ -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())
|
||||
|
||||
@ -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()
|
||||
Loading…
x
Reference in New Issue
Block a user