This commit is contained in:
Jody Doolittle 2025-08-17 17:56:37 -07:00
parent 6882a96e57
commit c2fde7b4a1
2 changed files with 27 additions and 25 deletions

View file

@ -44,7 +44,10 @@ Serene Pub is a brand new, open source chat application for immersive AI rolepla
- **Real-Time Sync:** All chats, settings, and characters update live across devices via WebSockets.
- **Portable & Private:** Runs locally, no accounts, no cloud lock-in. Your data stays with you.
- **AI Freedom:** Connect to OpenAI, Ollama, LM Studio, Llama.cpp, and more. Mix and match models, run local or cloud.
- **Low fuss local AI**: Use Ollama manager to search, download and activate models all within the comfort of Serene Pub.
- **Roleplay-First:** Built for character-driven, story-rich experiences. Import Silly Tavern cards, manage personas, and more.
- **Coherence:** Some user's report characters adhere better to their profiles than other apps.
- **Group Chats:** Chat with as many characters at once as you wish.
- **Mobile Ready:** Responsive design for desktop and mobile. Pick up your story anywhere.
- **Open Source:** AGPL-3.0. Hack it, extend it, make it yours!
@ -159,27 +162,27 @@ Linux, MacOS and Windows are supported!
- **[Installation & Setup](https://github.com/doolijb/serene-pub/wiki/Installation-&-Setup)** - Detailed setup instructions for all platforms
- **[Connections](https://github.com/doolijb/serene-pub/wiki/Connections)** - How to connect to AI models (OpenAI, Ollama, LM Studio, etc.)
- **[Characters & Personas](https://github.com/doolijb/serene-pub/wiki/Characters-&-Personas)** - Creating and managing your roleplay characters
- **[Lorebooks](https://github.com/doolijb/serene-pub/wiki/Lorebooks)** - Advanced worldbuilding and context management
- **[Lorebooks](https://github.com/doolijb/serene-pub/wiki/Lorebooks)** - Advanced world-building and context management
- **[Context Templates](https://github.com/doolijb/serene-pub/wiki/Context-Templates)** - Customizing AI prompts with Handlebars
- **[Troubleshooting](https://github.com/doolijb/serene-pub/wiki/Troubleshooting)** - Common issues and solutions
### 🗺️ Planned Features
- 🧠 Vectorization
- 🔌 More API connection types
- 🧠 Vectorization / embeddings
- 🤖 Assistant Chat: Ask AI questions about Serene Pub and get suggestions to improve your characters, personas, and lore
- 🤖 Assistant Chat: In-chat OOC discussions
- 🖼️ Image generation
- 📝 Chat summarizing
- 👥 Multi-user logins & multi-user group chats
- 👥 Admin user account management
### 💡 Considered Features
- 👥 Multi-user logins & multi-user group chats
- 📝 Chat summarizing
- 🖼️ User/chat backgrounds
- 📖 Story narration/system instructions
- 📅 Lorebooks+ features: custom calendars, "eras" historical categories, and more
- 🕹️ Text adventure & narrator modes
---
## ❤️ Contributing
@ -198,7 +201,7 @@ AGPL-3.0. See [LICENSE](LICENSE) and [NOTICE.md](NOTICE.md) for details.
## 🙏 Special Thanks
Special thanks to **crazyaphro** for Q/A, **M3d4r** for editing the Wiki, and **Nivelle** for early feedback.
Special thanks to **crazyaphro** and **Nivelle** for Q/A, **M3d4r** for editing the Wiki, and .
---

View file

@ -190,9 +190,17 @@
socket.on("characterList", (msg: Sockets.CharacterList.Response) => {
characters = msg.characterList || []
// If we're in the wizard and just got characters, advance if needed
if (showWizard && wizardStep === 2 && characters.length > 0) {
nextWizardStep()
}
})
socket.on("personaList", (msg: Sockets.PersonaList.Response) => {
personas = msg.personaList || []
// If we're in the wizard and just got personas, advance if needed
if (showWizard && wizardStep === 3 && personas.length > 0) {
nextWizardStep()
}
})
socket.on("chatsList", (msg: Sockets.ChatsList.Response) => {
chats = msg.chatsList || []
@ -218,10 +226,6 @@
socket.on("ollamaConnectModel", (message: any) => {
if (message.success) {
toaster.success({
title: "Model Connected",
description: "Successfully connected to the Ollama model"
})
nextWizardStep()
} else {
toaster.error({
@ -234,14 +238,6 @@
// Handle successful connection creation (fallback for manual setup)
socket.on("createConnection", (res: any) => {
if (res.connection) {
// Auto-set as active connection
socket.emit("setUserActiveConnection", {
id: res.connection.id
})
toaster.success({
title: "Connection Created",
description: `Successfully connected to ${res.connection.name}`
})
nextWizardStep()
}
})
@ -251,9 +247,6 @@
if (res.character) {
// Refresh character list to update hasCharacter
socket.emit("characterList", {})
if (showWizard) {
nextWizardStep()
}
}
})
@ -262,9 +255,6 @@
if (res.persona) {
// Refresh persona list to update hasPersona
socket.emit("personaList", {})
if (showWizard) {
nextWizardStep()
}
}
})
@ -419,6 +409,15 @@
>
<Icons.User size={16} /> Manage Personas
</button>
<button
class="btn preset-tonal-surface btn-sm"
onclick={() => {
panelsCtx.digest.tutorial = true
openPanel("chats")
}}
>
<Icons.MessageSquare size={16} /> Manage Chats
</button>
</div>
</details>
{:else}