agentgui 1.0.578 → 1.0.580
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -16
- package/database.js +0 -10
- package/package.json +1 -1
- package/static/js/client.js +11 -0
package/README.md
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
# AgentGUI
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/agentgui)
|
|
4
|
+
[](https://www.npmjs.com/package/agentgui)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://anentrypoint.github.io/agentgui/)
|
|
7
|
+
|
|
3
8
|
Multi-agent GUI client for AI coding agents (Claude Code, Gemini CLI, OpenCode, Goose, etc.) with real-time streaming, WebSocket sync, and SQLite persistence.
|
|
4
9
|
|
|
5
10
|

|
|
6
11
|
|
|
7
12
|
## Features
|
|
8
13
|
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **Session
|
|
12
|
-
- **WebSocket Sync** - Live updates across multiple clients
|
|
13
|
-
- **Voice Integration** - Speech-to-text and text-to-speech
|
|
14
|
-
- **Tool Management** - Install and update agent plugins from the UI
|
|
15
|
-
- **File Browser** -
|
|
14
|
+
- 🤖 **Multi-Agent Support** - Switch between Claude Code, Gemini CLI, OpenCode, Kilo, and more from one interface
|
|
15
|
+
- ⚡ **Real-Time Streaming** - Watch agents work with live streaming output and tool calls via WebSocket
|
|
16
|
+
- 💾 **Session Persistence** - Full conversation history stored in SQLite with WAL mode
|
|
17
|
+
- 🔄 **WebSocket Sync** - Live updates across multiple clients with automatic reconnection
|
|
18
|
+
- 🎤 **Voice Integration** - Speech-to-text and text-to-speech powered by Hugging Face Transformers (no API keys)
|
|
19
|
+
- 🛠️ **Tool Management** - Install and update agent plugins directly from the UI
|
|
20
|
+
- 📁 **File Browser** - Drag-and-drop uploads, direct file editing, and context-aware operations
|
|
21
|
+
- 🔌 **Developer Friendly** - Hot reload, REST API, WebSocket endpoints, and extensible plugin system
|
|
16
22
|
|
|
17
23
|
### Screenshots
|
|
18
24
|
|
|
@@ -30,7 +36,17 @@ Multi-agent GUI client for AI coding agents (Claude Code, Gemini CLI, OpenCode,
|
|
|
30
36
|
|
|
31
37
|
## Quick Start
|
|
32
38
|
|
|
39
|
+
### Using npx (Recommended)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx agentgui
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Manual Installation
|
|
46
|
+
|
|
33
47
|
```bash
|
|
48
|
+
git clone https://github.com/AnEntrypoint/agentgui.git
|
|
49
|
+
cd agentgui
|
|
34
50
|
npm install
|
|
35
51
|
npm run dev
|
|
36
52
|
```
|
|
@@ -39,9 +55,11 @@ Server starts on `http://localhost:3000/gm/`
|
|
|
39
55
|
|
|
40
56
|
## System Requirements
|
|
41
57
|
|
|
42
|
-
- Node.js 18+
|
|
58
|
+
- Node.js 18+ (LTS recommended)
|
|
43
59
|
- SQLite 3
|
|
44
60
|
- Modern browser (Chrome, Firefox, Safari, Edge)
|
|
61
|
+
- At least one AI coding agent installed (Claude Code, Gemini CLI, etc.)
|
|
62
|
+
- Optional: Python 3.9+ for text-to-speech on Windows
|
|
45
63
|
|
|
46
64
|
## Architecture
|
|
47
65
|
|
|
@@ -62,37 +80,89 @@ static/js/websocket-manager.js WebSocket connection handling
|
|
|
62
80
|
### Key Details
|
|
63
81
|
|
|
64
82
|
- Agent discovery scans PATH for known CLI binaries at startup
|
|
65
|
-
- Database lives at `~/.gmgui/data.db`
|
|
66
|
-
- WebSocket endpoint at `/gm/sync`
|
|
67
|
-
- ACP tools (OpenCode, Kilo) auto-launch as HTTP servers on startup
|
|
83
|
+
- Database lives at `~/.gmgui/data.db` (WAL mode for concurrent access)
|
|
84
|
+
- WebSocket endpoint at `/gm/sync` for real-time updates
|
|
85
|
+
- ACP tools (OpenCode, Kilo) auto-launch as HTTP servers on startup with health checks
|
|
68
86
|
|
|
69
87
|
## REST API
|
|
70
88
|
|
|
71
89
|
All routes prefixed with `/gm`:
|
|
72
90
|
|
|
91
|
+
**Conversations:**
|
|
73
92
|
- `GET /api/conversations` - List conversations
|
|
74
93
|
- `POST /api/conversations` - Create conversation
|
|
75
94
|
- `GET /api/conversations/:id` - Get conversation with streaming status
|
|
76
95
|
- `POST /api/conversations/:id/messages` - Send message
|
|
96
|
+
- `DELETE /api/conversations/:id` - Delete conversation
|
|
97
|
+
|
|
98
|
+
**Agents & Tools:**
|
|
77
99
|
- `GET /api/agents` - List discovered agents
|
|
78
100
|
- `GET /api/tools` - List detected tools with installation status
|
|
79
101
|
- `POST /api/tools/:id/install` - Install tool
|
|
80
|
-
- `POST /api/
|
|
81
|
-
|
|
102
|
+
- `POST /api/tools/:id/update` - Update tool
|
|
103
|
+
|
|
104
|
+
**Speech:**
|
|
105
|
+
- `POST /api/stt` - Speech-to-text (raw audio input)
|
|
106
|
+
- `POST /api/tts` - Text-to-speech (returns audio)
|
|
107
|
+
- `GET /api/speech-status` - Check model download progress
|
|
108
|
+
|
|
109
|
+
**WebSocket:** `/gm/sync` - Subscribe to conversation/session updates with events like `streaming_start`, `streaming_progress`, `streaming_complete`
|
|
82
110
|
|
|
83
111
|
## Environment Variables
|
|
84
112
|
|
|
85
113
|
- `PORT` - Server port (default: 3000)
|
|
86
114
|
- `BASE_URL` - URL prefix (default: /gm)
|
|
87
115
|
- `STARTUP_CWD` - Working directory passed to agents
|
|
116
|
+
- `HOT_RELOAD` - Enable watch mode (default: true)
|
|
117
|
+
|
|
118
|
+
## Troubleshooting
|
|
119
|
+
|
|
120
|
+
### Server Won't Start
|
|
121
|
+
- Check if port 3000 is in use: `lsof -i :3000` (macOS/Linux) or `netstat -ano | findstr :3000` (Windows)
|
|
122
|
+
- Try a different port: `PORT=4000 npm run dev`
|
|
123
|
+
|
|
124
|
+
### Agent Not Detected
|
|
125
|
+
- Verify agent is installed: `which claude` / `where claude`
|
|
126
|
+
- Check PATH includes agent binary location
|
|
127
|
+
- Restart server after installing new agents
|
|
128
|
+
|
|
129
|
+
### WebSocket Connection Failed
|
|
130
|
+
- Verify BASE_URL matches your deployment
|
|
131
|
+
- Check browser console for errors
|
|
132
|
+
- Ensure no firewall blocking WebSocket connections
|
|
133
|
+
|
|
134
|
+
### Speech Models Not Downloading
|
|
135
|
+
- Check internet connection and firewall
|
|
136
|
+
- Verify `~/.gmgui/models/` is writable
|
|
137
|
+
- Monitor progress via `/api/speech-status` endpoint
|
|
88
138
|
|
|
89
139
|
## Development
|
|
90
140
|
|
|
91
141
|
```bash
|
|
92
|
-
npm run dev # Start with watch mode
|
|
93
|
-
npm start # Production mode
|
|
142
|
+
npm run dev # Start with watch mode and hot reload
|
|
143
|
+
npm start # Production mode (no watch)
|
|
144
|
+
npm test # Run tests (if available)
|
|
94
145
|
```
|
|
95
146
|
|
|
147
|
+
Hot reload is enabled by default. File changes trigger automatic restart without losing state.
|
|
148
|
+
|
|
149
|
+
## Contributing
|
|
150
|
+
|
|
151
|
+
Contributions welcome! Please:
|
|
152
|
+
|
|
153
|
+
1. Fork the repository
|
|
154
|
+
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
155
|
+
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
156
|
+
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
157
|
+
5. Open a Pull Request
|
|
158
|
+
|
|
159
|
+
## Links
|
|
160
|
+
|
|
161
|
+
- **GitHub:** https://github.com/AnEntrypoint/agentgui
|
|
162
|
+
- **npm:** https://www.npmjs.com/package/agentgui
|
|
163
|
+
- **Documentation:** https://anentrypoint.github.io/agentgui/
|
|
164
|
+
- **Issues:** https://github.com/AnEntrypoint/agentgui/issues
|
|
165
|
+
|
|
96
166
|
## License
|
|
97
167
|
|
|
98
|
-
MIT
|
|
168
|
+
MIT © [AnEntrypoint](https://github.com/AnEntrypoint)
|
package/database.js
CHANGED
|
@@ -1060,19 +1060,9 @@ export const queries = {
|
|
|
1060
1060
|
}
|
|
1061
1061
|
|
|
1062
1062
|
const deleteAllStmt = db.transaction(() => {
|
|
1063
|
-
const allSessionIds = prep('SELECT id FROM sessions').all().map(r => r.id);
|
|
1064
|
-
|
|
1065
1063
|
prep('DELETE FROM stream_updates');
|
|
1066
1064
|
prep('DELETE FROM chunks');
|
|
1067
1065
|
prep('DELETE FROM events');
|
|
1068
|
-
|
|
1069
|
-
if (allSessionIds.length > 0) {
|
|
1070
|
-
const placeholders = allSessionIds.map(() => '?').join(',');
|
|
1071
|
-
db.prepare(`DELETE FROM stream_updates WHERE sessionId IN (${placeholders})`).run(...allSessionIds);
|
|
1072
|
-
db.prepare(`DELETE FROM chunks WHERE sessionId IN (${placeholders})`).run(...allSessionIds);
|
|
1073
|
-
db.prepare(`DELETE FROM events WHERE sessionId IN (${placeholders})`).run(...allSessionIds);
|
|
1074
|
-
}
|
|
1075
|
-
|
|
1076
1066
|
prep('DELETE FROM sessions');
|
|
1077
1067
|
prep('DELETE FROM messages');
|
|
1078
1068
|
prep('DELETE FROM conversations');
|
package/package.json
CHANGED
package/static/js/client.js
CHANGED
|
@@ -699,6 +699,9 @@ class AgentGUIClient {
|
|
|
699
699
|
case 'conversation_created':
|
|
700
700
|
this.handleConversationCreated(data);
|
|
701
701
|
break;
|
|
702
|
+
case 'all_conversations_deleted':
|
|
703
|
+
this.handleAllConversationsDeleted(data);
|
|
704
|
+
break;
|
|
702
705
|
case 'message_created':
|
|
703
706
|
this.handleMessageCreated(data);
|
|
704
707
|
break;
|
|
@@ -1300,6 +1303,14 @@ class AgentGUIClient {
|
|
|
1300
1303
|
this.enableControls();
|
|
1301
1304
|
}
|
|
1302
1305
|
|
|
1306
|
+
handleAllConversationsDeleted(data) {
|
|
1307
|
+
this.state.currentConversation = null;
|
|
1308
|
+
window.dispatchEvent(new CustomEvent('conversation-deselected'));
|
|
1309
|
+
if (window.conversationManager) {
|
|
1310
|
+
window.conversationManager.loadConversations();
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1303
1314
|
isHtmlContent(text) {
|
|
1304
1315
|
const htmlPattern = /<(?:div|table|section|article|ul|ol|dl|nav|header|footer|main|aside|figure|details|summary|h[1-6]|p|blockquote|pre|code|span|strong|em|a|img|br|hr|li|td|tr|th|thead|tbody|tfoot)\b[^>]*>/i;
|
|
1305
1316
|
return htmlPattern.test(text);
|