{"id":44004668,"url":"https://github.com/karmaniverous/jeeves-server","last_synced_at":"2026-05-16T08:14:37.331Z","repository":{"id":336981726,"uuid":"1151900623","full_name":"karmaniverous/jeeves-server","owner":"karmaniverous","description":"Secure file browser, markdown viewer, and webhook gateway. Browse files, render Markdown with Mermaid diagrams, export to PDF/DOCX, share with expiring links. Built with Fastify + React. Runs on Windows and Linux.","archived":false,"fork":false,"pushed_at":"2026-04-05T10:31:50.000Z","size":7894,"stargazers_count":1,"open_issues_count":26,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T12:24:40.847Z","etag":null,"topics":["document-viewer","fastify","file-server","markdown","mermaid","pdf-export","react","self-hosted","typescript","webhook"],"latest_commit_sha":null,"homepage":"https://docs.karmanivero.us/jeeves-server/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/karmaniverous.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-07T03:51:48.000Z","updated_at":"2026-04-05T10:31:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/karmaniverous/jeeves-server","commit_stats":null,"previous_names":["karmaniverous/jeeves-server"],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/karmaniverous/jeeves-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karmaniverous%2Fjeeves-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karmaniverous%2Fjeeves-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karmaniverous%2Fjeeves-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karmaniverous%2Fjeeves-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/karmaniverous","download_url":"https://codeload.github.com/karmaniverous/jeeves-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karmaniverous%2Fjeeves-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31547845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["document-viewer","fastify","file-server","markdown","mermaid","pdf-export","react","self-hosted","typescript","webhook"],"created_at":"2026-02-07T13:09:25.635Z","updated_at":"2026-05-16T08:14:37.318Z","avatar_url":"https://github.com/karmaniverous.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jeeves Server 🎩\n\n**Turn AI-authored documents into business-ready deliverables.**\n\nA self-hosted file browser, document viewer, and webhook gateway. Author documents in Markdown with your AI assistant, then share them as beautifully rendered pages, PDFs, or Word documents — no friction, no external dependencies.\n\n## Packages\n\nThis is a monorepo with three packages:\n\n| Package | Description |\n|---------|-------------|\n| [`@karmaniverous/jeeves-server`](packages/service/) | The server — file browser, document renderer, export engine, event gateway |\n| [`@karmaniverous/jeeves-server-openclaw`](packages/openclaw/) | OpenClaw plugin — gives AI agents tools for browsing, sharing, and exporting |\n| [`@karmaniverous/jeeves-server-core`](packages/core/) | Shared crypto utilities and API types consumed by service and plugin |\n\n## Quick Start\n\n```bash\n# Install globally\nnpm install -g @karmaniverous/jeeves-server\n\n# Create a config file (JSON only)\n# See guides/setup.md for full config reference\nmkdir -p jeeves-server\ncat \u003e jeeves-server/config.json \u003c\u003c 'EOF'\n{\n  \"chromePath\": \"/usr/bin/chromium-browser\",\n  \"auth\": {\n    \"modes\": [\"keys\"]\n  },\n  \"keys\": {\n    \"_internal\": \"generate-a-random-hex-string\",\n    \"primary\": \"another-random-hex-string\"\n  }\n}\nEOF\n\n# Start the server (default port: 1934)\njeeves-server start\n```\n\nGenerate key seeds with:\n```bash\nnode -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n```\n\n## Features\n\n- **File Browser** — Navigate drives and directories through a modern React UI, with directory item counts\n- **Markdown Rendering** — Prose with collapsible TOC sidebar, collapsible frontmatter, adjustable reading width, dark/light themes\n- **CSV Table Rendering** — `.csv` files render as HTML tables with a Rendered/Raw tab\n- **PDF \u0026 DOCX Export** — One-click, perfectly rendered, business-ready\n- **Code Highlighting** — Syntax highlighting with copy buttons\n- **SVG, Mermaid \u0026 PlantUML Diagrams** — Rendered inline with pan/zoom; Mermaid is bundled, PlantUML uses a fallback pipeline (local jar → private servers → community server)\n- **Embedded Diagrams in Markdown** — `mermaid` and `plantuml` fenced code blocks render as inline SVGs\n- **Secure Sharing** — Expiring links with HMAC signatures, scoped access\n- **Named Access Scopes** — Define reusable scope policies, reference them by name across insiders and keys\n- **Event Gateway** — Webhook receiver with JSON Schema validation and durable queue\n- **Semantic Search** — Full-text search via [jeeves-watcher](https://github.com/karmaniverous/jeeves-watcher) integration\n- **OpenClaw Plugin** — AI agents can browse, share, export, and query server status via tools\n- **CLI** — `start`, `status`, `config [jsonpath]`, `config validate`, `config apply`, `init`, `service install/start/stop/restart`\n- **Zero CDN** — All assets served locally, no external dependencies\n\n## Configuration\n\nJeeves Server uses **JSON-only** configuration. The config file follows the path convention `\u003cconfigDir\u003e/jeeves-server/config.json`. Legacy paths (`jeeves-server.config.json`) are auto-migrated on first use.\n\n```bash\n# Generate a starter config\njeeves-server init --config /path/to/config-dir\n\n# Or specify explicitly\njeeves-server start --config /path/to/jeeves-server/config.json\n```\n\nConfiguration is validated at startup against a [Zod 4](https://github.com/colinhacks/zod) schema. The schema in `packages/service/src/config/schema.ts` is the single source of truth.\n\n**Environment variable substitution:** Use `${VAR_NAME}` in string config values and they'll be replaced from `process.env` at load time.\n\nSee the [Setup \u0026 Configuration](packages/service/guides/setup.md) guide for full details.\n\n## CLI\n\n```bash\n# Start the server\njeeves-server start [--config \u003cpath\u003e]\n\n# Query running server status\njeeves-server status\n\n# Query resolved configuration (supports JSONPath)\njeeves-server config [jsonpath] [--config \u003cpath\u003e]\n\n# Validate configuration\njeeves-server config validate [--config \u003cpath\u003e]\n\n# Apply a config patch to the running server\njeeves-server config apply [--config \u003cpath\u003e]\n\n# Generate a starter config file\njeeves-server init [--config \u003cpath\u003e]\n\n# Service management (executes directly — NSSM on Windows, systemd on Linux)\njeeves-server service install [--config \u003cpath\u003e] [--name \u003cservice-name\u003e]\njeeves-server service uninstall [--name \u003cservice-name\u003e]\njeeves-server service start|stop|restart|status [--name \u003cservice-name\u003e]\n```\n\n## Guides\n\n- [Setup \u0026 Configuration](packages/service/guides/setup.md) — Installation, auth modes, config structure, named scopes\n- [Insiders, Outsiders \u0026 Sharing](packages/service/guides/sharing.md) — Access model, share links, key derivation, expiry, rotation\n- [Exporting \u0026 Downloads](packages/service/guides/exports.md) — PDF, DOCX, SVG, PNG, and ZIP export\n- [Event Gateway](packages/service/guides/event-gateway.md) — Webhook receiving, JSON Schema matching, body mapping, durable queue\n- [Deployment](packages/service/guides/deployment.md) — Running as a service, reverse proxy, HTTPS, updates\n- [API \u0026 Integration](packages/service/guides/api-integration.md) — Endpoint reference, path conversion, share link generation\n- [OpenClaw Integration](packages/openclaw/guides/openclaw-integration.md) — Plugin installation, configuration, tool reference\n\n## Platform Support\n\n- **Windows:** File browser auto-discovers drive letters (A–Z). Chrome path defaults to Program Files.\n- **Linux:** File browser uses configurable `roots` (e.g. `{ home: '/home', projects: '/opt/projects' }`). Chromium path is typically `/usr/bin/chromium-browser`.\n\nBoth platforms are tested in CI (GitHub Actions on Ubuntu, Node 22+). Node.js 22 or later is required.\n\n## Development\n\n```bash\ngit clone https://github.com/karmaniverous/jeeves-server.git\ncd jeeves-server\nnpm install\n\n# Build everything\nnpm run build\n\n# Run all checks\nnpm run typecheck\nnpm run lint\nnpm test\nnpm run knip\n```\n\nThe monorepo uses npm workspaces. The dev server runs on port 19340 by default.\n\n## License\n\nBSD-3-Clause\n\n---\n\nBuilt for you with ❤️ on Bali by [Jason Williscroft](https://github.com/karmaniverous) \u0026 [Jeeves](https://github.com/jgs-jeeves).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarmaniverous%2Fjeeves-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarmaniverous%2Fjeeves-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarmaniverous%2Fjeeves-server/lists"}