Repository navigation
Feature/self hosted server mcp - #33
Merged
pavlicekdominik merged 5 commits intoOct 19, 2026
Merged
pavlicekdominik merged 5 commits into
pavlicekdominik merged 5 commits into
Conversation
Canonicalizing an already canonical snapshot re-stamped the timestamps of localized entries and added keyType only on the second pass, and legacy property types (bool, int, float) were normalized only while validating. A revision's payload hash therefore differed after a round trip and other devices reported it as CORRUPT_REMOTE. Unchanged entries keep their timestamps, entries go through normalizeLocalizedStringEntry, and decorator/condition property types are normalized before hashing. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2LYX8SVLgzrkJt4GiVG1P
… options - Ctrl/Cmd+C, V and D copy, paste and duplicate the selected nodes and the edges between them. Pasted nodes and rows get new ids and localization keys. Pasting into another project clears speakers and decorators, which belong to the source project. - Right-click a node, "Preview from here" starts the preview at that node. - Preview options show the action label and the line the player then says; options that end the conversation are listed last. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2LYX8SVLgzrkJt4GiVG1P
The project has no unit test runner; use the module harness like the other regression specs. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2LYX8SVLgzrkJt4GiVG1P
- server/: dependency-free Node server; serves the built app and is the file store behind a new 'server' sync provider (plaintext immutable revisions, no login). - Activated only by VITE_SYNC_SERVER=true: the app connects to the server at start, pulls before the first paint, pushes after each change. - mcp/: dependency-free MCP server that authors projects through the same revision store, validated with the app's canonicalProject code. It cannot delete projects or dialogues. - Dockerfile, docker-compose.yml, SELF_HOSTED.md, a Claude skill, tests. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2LYX8SVLgzrkJt4GiVG1P
✅ Deploy Preview for mountea-dialoguer ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Up to standards ✅🟢 Issues
|
| Category | Results |
|---|---|
| Security | 3 critical |
🟢 Metrics 976 complexity · 7 duplication
Metric Results Complexity 976 Duplication 7
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
They run on Node, so process and Buffer are defined. Add them to the Node override of the ESLint config and to the lint script. Note on the Dockerfile why the image runs as root. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2LYX8SVLgzrkJt4GiVG1P
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on the "Copy/paste/duplicate nodes, preview from a node, and an idempotent canonicalizer" PR: the MCP server needs the canonicalization fix from there. Until that one is merged, this diff also shows its three commits.
Summary
An optional way to run Mountea Dialoguer as a web app on your own machine and use it from every device, plus an MCP server so an LLM can author projects. Nothing is active unless the app is built with
VITE_SYNC_SERVER=true; the desktop app and the Google Drive and Steam providers are untouched. Details and a quick start are inSELF_HOSTED.md.The app side is small
serversync provider in the provider registry and storage providers: it talks to/api/sync/filesand stores the same immutable revisions as the other providers, in plain text and without a login.revisionProtocol.jsasksisPlaintextProvider()instead of comparing with'steam'.VITE_SYNC_SERVER=true,loadAccountconnects to the server and sets sync mode to full,__root.jsxpulls once before the first paint (8 s cap), and the Google login prompt is not shown. That is about 25 lines outside the new provider.server/(no dependencies)Serves the built app and is the file store: create-if-absent files in
DATA_DIR/sync, never rewritten, plus/api/health. Access control is left to whatever sits in front (reverse proxy, Cloudflare Access, VPN).mcp/(no dependencies) and the skillexecutionBehaviour,durationMode,durationOverride), translations, validation, and.mnteadlg/.mnteadlgprojv3 export.canonicalProjectcode and writes a new revision. The revision history is the backup, and it refuses to write when a project has divergent heads.MCP_TOKENof at least 24 characters is required..claude/skills/mountea-dialoguer/teaches an LLM the workflow and the plugin's limits (name rules, property types, import format).Docker
Dockerfileanddocker-compose.yml: app on :8080, MCP on :8081, data in./data.Tests
npm run test:mcp: 20 Vitest tests (protocol, auth, authoring rules, export, revision-history linearity). This addsvitestas a dev dependency, used only for these tests.autosave.spec.js(a project is pushed and restored in a fresh browser) andmcp.spec.js(a dialogue built through MCP opens, previews and exports in the app; competing saves end in the conflict panel). Both skip unless the servers are running.Notes
🤖 Generated with Claude Code