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.
|
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
|
### 🐳 Run with Docker
|
||||||
Alternatively, you can run the entire application using Docker Compose. This method simplifies dependency management and provides a consistent environment.
|
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
|
<CollapsibleMessage
|
||||||
v-if="message.text"
|
v-if="message.text"
|
||||||
:html-content="renderMarkdown(message.text)"
|
:html-content="message.htmlContent || renderMarkdown(message.text)"
|
||||||
:raw-content="message.text"
|
:raw-content="message.text"
|
||||||
:default-expanded="configStore.AUTO_EXPAND_MESSAGES"
|
:default-expanded="configStore.AUTO_EXPAND_MESSAGES"
|
||||||
/>
|
/>
|
||||||
@ -540,6 +540,7 @@ const addTotalLoadingMessage = (nodeId) => {
|
|||||||
type: 'dialogue',
|
type: 'dialogue',
|
||||||
name: nodeId,
|
name: nodeId,
|
||||||
text: '',
|
text: '',
|
||||||
|
htmlContent: '',
|
||||||
avatar,
|
avatar,
|
||||||
isRight: false,
|
isRight: false,
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
@ -614,6 +615,20 @@ const finalizeAllLoadingEntries = (nodeState, endedAt = Date.now()) => {
|
|||||||
// Global timer for updating loading bubble durations
|
// Global timer for updating loading bubble durations
|
||||||
const now = ref(Date.now())
|
const now = ref(Date.now())
|
||||||
let loadingTimerInterval = null
|
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
|
// Map sprites for different roles
|
||||||
const nameToSpriteMap = ref(new Map())
|
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)
|
_DYNAMIC_TOOLS_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _safe_tool_filename(filename: str) -> str:
|
def _safe_tool_filename(filename: str) -> str:
|
||||||
name = Path(filename).name
|
name = Path(filename).name
|
||||||
if not name.endswith(".py"):
|
if not name.endswith(".py"):
|
||||||
@ -184,6 +182,6 @@ if _bootstrap["errors"]:
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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")
|
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