UNPKG

@dollhousemcp/mcp-server

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

1,045 lines (786 loc) 102 kB
# Changelog ## [2.0.35] - 2026-06-23 - Harden converter and CLI output path handling to keep generated files inside their intended output directories. - Restore SonarCloud main quality gate health with path traversal coverage, accessibility, and reliability fixes. - Update MCP registry publisher workflow verification for the current publisher release and OIDC audience. ## [2.0.34] - 2026-06-23 - Preserve dependency and security hardening while rolling back the accidental 2.0.33 main merge state. - Fix nested documentation description handling so agent goal parameters, template variables, and template examples can keep substantive descriptions beyond the top-level element summary limit. - Restore permission audit metadata and Codex permission allow-response handling from the develop hardening work. - Keep release metadata aligned across package, lockfile, manifest, MCP server metadata, and generated version surfaces. ## [2.0.32] - 2026-04-23 - Restore the management console's stronger responsive header behavior, including cleaner tab overflow handling and keyboard-accessible menu navigation. - Fix MCP-AQL agent execution loop guidance and recovery messaging so smaller models get clearer lifecycle instructions, stronger parameter errors, and better `get_execution_state` correction hints. ## [2.0.31] - 2026-04-22 - Fix Codex PreToolUse silent allow handling and expand permission hook diagnostics. ## [2.0.30] - 2026-04-21 - Improve hook reliability across Codex and other supported clients, including fail-open JSON behavior. - Automatically refresh stale local hook assets and surface repair outcomes in status/build info. - Add session platform metadata, update-available labeling, and cleaner dropdown alignment in the web console. ## [2.0.29] - 2026-04-21 - Added explicit session platform metadata and update-available status in the web console session dropdown - Improved dropdown alignment for session status, platform, and uptime columns - Fixed Codex pre-tool-use hook JSON output and expanded hook contract coverage across supported clients - Automatically verify and refresh installed local permission hook assets when they go stale ## [2.0.28] - 2026-04-21 - Add explicit session client metadata and update-available status in the web console dropdown, with improved layout alignment. - Fix Codex pre-tool-use allow-hook output so Bash permission checks no longer fail with invalid JSON. - Audit and document permission-hook contracts across supported clients, including stronger fail-open regression coverage and setup guidance. ## [2.0.27] - 2026-04-20 - Version bump ## [2.0.26] - 2026-04-17 - Version bump ## [2.0.25] - 2026-04-16 Restore audit markdown export and harden direct commercial license email delivery ## [2.0.24] - 2026-04-16 - Fix web console authority convergence so newer sessions replace stale listeners, register correctly, and serve current assets. ## [2.0.23] - 2026-04-16 - Expand npm package keywords for broader discovery across MCP clients, AI tool ecosystems, and Dollhouse element primitives. ## [2.0.22] - 2026-04-16 - Fix legacy console leader takeover so new authenticated sessions can replace older incompatible port owners and register correctly. ## [2.0.21] - 2026-04-16 - Sanitize OAuth and PAT helper logging to restore SonarCloud security quality ## [2.0.20] - 2026-04-16 Point release for console leader bind authority and follower registration recovery. ## [2.0.19] - 2026-04-16 Point release for deadlock relief recovery and version-aware web console leadership. ## [2.0.18] - 2026-04-16 - Expanded permission setup and support-matrix clarity across supported clients. - Added stronger gatekeeper validation, activation diagnostics, and audit tooling. - Fixed Claude Code hook response-shape compatibility and stabilized release CI tests. ## [2.0.17] - 2026-04-15 - Expanded client setup and permission integration support across more MCP hosts. - Added stronger gatekeeper policy authoring guidance, examples, and introspection. - Reject malformed gatekeeper policy structures during create/edit flows and raw YAML/frontmatter saves. ## [2.0.16] - 2026-04-14 - Version bump ## [2.0.15] - 2026-04-14 ### Fixes - Automate stable MCP bundle (.mcpb) release publishing - Keep manifest and package versions synchronized during releases - Harden release verification with signed publisher checks, checksum assets, and workflow attestations ## [2.0.14] - 2026-04-14 ### Fixes - Permissions console reporting, audit feed routing, and session UX hardening - Permissions tab dark mode rendering fixes - Numeric YAML version deserialization fix for two-component versions like `1.1` ## [2.0.13] - 2026-04-13 ### Security Fixes - **False-positive CRITICAL alerts eliminated** — bundled elements containing legitimate YAML keys (`javascript:`) or educational security payloads (`wget` in pentest templates) no longer fire CRITICAL alerts at install time (#1941) - **JavaScript protocol injection regex tightened** — pattern now requires a non-whitespace character after the colon (`javascript[ \t]*:[ \t]*\S`), preventing bare YAML map keys from matching while still catching real `javascript:void(0)` injection attempts (#1941) - **Bundled element trust system** — build generates `data/HASHES.json`; at startup, `DefaultElementProvider` verifies each bundled file against its SHA-256 and registers matching hashes with `ContentValidator`; verified content bypasses injection scanning, modified files automatically lose trust (#1941) ### CI/CD - **OIDC publishing restored** — removed broken `npm install -g npm@11` step that caused every publish workflow to fail with `MODULE_NOT_FOUND: promise-retry`; npm 10.x (ships with Node 22) already supports `--provenance` (#1941) ## [2.0.12] - 2026-04-12 ### Authenticated Web Console The management console at `http://dollhouse.localhost:41715` now requires authentication. Console sessions are issued signed tokens; TOTP enrollment provides a second factor for sensitive operations such as token rotation. - **Session token auth** — console issues a signed bearer token on first connect; subsequent requests require it (#1787) - **TOTP enrollment** — Phase 2 interactive TOTP setup with QR code, ±60s validation window, rate limiting (#1794) - **Auth tab** — dedicated tab surfaces the active token, enrollment flow, and session event log (#1807) - **CLI token commands** — `dollhousemcp token show/rotate/revoke` manage the console token from the terminal (#1790) - **Browser 401 recovery** — expired-session toast with one-click re-auth, no full-page reload (#1792) - **Token rotation** — TOTP-confirmed rotation endpoint; HTML cache auto-invalidates on rotation (#1795, #1804) - **Permanent port 41715** — "AILIS" on a phone keypad; env-var overridable (#1798) ### Setup Tab & Install Experience - **Release channel selector** — switch between Stable, RC, and Beta channels; config snippets update live (#1835) - **License selector** — commercial license activation with email verification on the Setup tab (#1826, #1831) - **Setup tab per-version** — tab reopens once per new version so users see what changed, then stays out of the way (#1905) - **NVM-aware launcher** — install script auto-detects and wires NVM so `node` is always in PATH on restart (#1902) - **Cleaner install UX** — channel label, button state clears on channel change, current config refreshes after install (#1850, #1862, #1864) ### Permission Server - **Hook-based agent permissioning** — `dollhousemcp-permission-server` evaluates Gatekeeper policies for external hooks, enabling autonomous agent approval flows outside the MCP session (#1777) ### Element Reliability Fixes - **Template variable auto-derive** — `{{placeholder}}` tokens in template content are automatically registered as variable schema entries on save; renders never silently return unfilled text (#1896) - **Ghost session cleanup** — sessions that return 404 on kill are now reaped from the active list; permanent kill + pending kill flows unified (#1870) - **Ensemble stale cache** — LRU cache flushed on ensemble activation so newly added members appear immediately (#1895) - **Agent storage index** — index updated correctly after create, fixing stale list after first agent add (#1877) - **Ensemble member deactivation** — members deactivate cleanly without leaving orphaned state (#1878) - **Template variable routing** — normalization hardened so variables survive round-trip edits (#1879) - **Memory addEntry transport** — transport-layer regression for memory entries resolved (#1880) - **Content-only agent creation** — agents can now be created with content only, without requiring all metadata fields (#1893) ### Security - **NFC normalization on web routes** — all route `name` and `file` parameters are NFC-normalized before path traversal checks, closing a Unicode homograph bypass (#1736) - **Hono CVE** — pinned hono 4.12.12 and @hono/node-server 1.19.13 via npm overrides (#1908) - **Startup error sanitization** — production startup failures no longer leak stack traces or internal paths (#1848) - **Vulnerability triage** — osv-scanner.toml, GHSA reclassification monitor, Dependabot alert triage tooling (#1800) ### Developer Experience - **Console discovery hints** — element list/search/activate operations surface the console URL so LLMs can direct users there (#1849) - **Session auth status indicators** — two-dimension status badge in session dropdown shows auth state at a glance (#1805) - **Web console regressions** — comprehensive fix pass covering tabs, sinks, Auth panel init, and leader/follower edge cases (#1881) ### Breaking Change The web console default port moved **3939 → 41715**. Update bookmarks and any scripts referencing `localhost:3939`. The old port continues to work if a legacy (pre-auth) DollhouseMCP process is running there. ## [2.0.11-rc.1] - 2026-04-08 Release candidate for v2.0.11 — console auth, permissions, licensing, port 41715, channel selector ## [Unreleased] — Phase 2 authenticated console ### Breaking: Web console default port moved from 3939 → 41715 The authenticated web console (Phase 2 and later) binds to port **41715** by default, not 3939. The associated state files now live at: - `~/.dollhouse/run/console-leader.auth.lock` (was `console-leader.lock`) - `~/.dollhouse/run/console-token.auth.json` (was `console-token.json`) **Why:** Pre-authentication DollhouseMCP installations (≤ 2.0.x) continue to use port 3939 and the legacy file paths. The port + filename separation lets a legacy installation and an authenticated installation coexist on the same machine with zero interference — different ports, different lock files, different token files, independent leader-election spaces. This avoids a confusing "security popping on and off" UX when a user has both a pre-auth Claude Desktop install and an authenticated Claude Code install running simultaneously. **Configurability:** The port, lock file path, and token file path are now all driven by env vars with a single source of truth in `src/config/env.ts`. Changing any of them is a one-line edit — no hunt-and-peck across the codebase: | Env var | Default | |---|---| | `DOLLHOUSE_WEB_CONSOLE_PORT` | `41715` | | `DOLLHOUSE_CONSOLE_LEADER_LOCK_FILE` | `~/.dollhouse/run/console-leader.auth.lock` | | `DOLLHOUSE_CONSOLE_TOKEN_FILE` | `~/.dollhouse/run/console-token.auth.json` | Port 41715 spells "AILIS" on a phone keypad — the AI Layer Interface Specification. **Legacy detection:** When the authenticated console starts, it checks for an active legacy (pre-auth) DollhouseMCP process on port 3939 and logs a warning if one is found, explaining the coexistence and the differing security posture. **Consumer impact:** - **DollhouseBridge**: will need a matching port update when it consumes Phase 2 features — tracking issue filed - **User bookmarks / shell scripts**: update `localhost:3939` references to `localhost:41715` (or set `DOLLHOUSE_WEB_CONSOLE_PORT` to whatever you prefer) - **Docs**: all `docs/guides/*.md` references updated - **Nothing breaks silently**: the auth console simply isn't on 3939 anymore; the legacy console continues to work there untouched ## [2.0.7] - 2026-04-02 ### Clean terminal output for `--web` mode Running `npx @dollhousemcp/mcp-server --web` now shows only the console URL: ``` DollhouseMCP Management Console http://dollhouse.localhost:3939 http://127.0.0.1:3939 (fallback) ``` Previously, startup dumped ~80 lines of internal log output (dotenv injection, persona loading, memory seeding, cache stats, leader election, etc.) that looked like errors to new users. All of that output is still captured and visible in the management console's **Logs** tab — it's just no longer printed to the terminal. Set `DOLLHOUSE_DEBUG=1` to restore verbose terminal output for troubleshooting. ## [2.0.6] - 2026-04-02 ### Web console logs & metrics fix + operation aliases - **Fix**: Standalone `--web` mode now starts with log and metrics sinks — Logs and Metrics tabs work on first use - **Fix**: Port 3939 conflicts handled gracefully (opens existing console instead of crashing) - **Feature**: Operation aliases — `open_console`, `open_dollhouse_mcp`, `open_logs`, `open_metrics`, `open_setup`, and 15+ more - **Feature**: Console tab deep-linking via URL hash (`/#logs`, `/#metrics`, etc.) - **Feature**: Aliases surfaced in `introspect` responses for LLM discovery ## [2.0.5] - 2026-04-02 ### Hotfix: `--web` mode UX improvements - **Fix**: Browser now auto-opens on `--web` startup (was blocked by security check on `dollhouse.localhost` URL — now uses `127.0.0.1`) - **Fix**: Debug log spam suppressed in `--web` mode — only info/warn/error print to terminal unless `DOLLHOUSE_DEBUG` is set - **Fix**: Follower log forwarding gives up after 5 failed attempts instead of retrying forever (issue #1751) ## [2.0.4] - 2026-04-02 ### Hotfix: npm package missing web assets - **Fix**: `package.json` `files` field now includes `dist/web/public/**` and `dist/seed-elements/**` - v2.0.3 was missing `.html`, `.css`, and font files from the web console, causing `--web` mode to crash with `NotFoundError` - Also missing seed element `.yaml` files, causing seed memory installation to fail - Added package inclusion tests to prevent regression ## [2.0.3] - 2026-04-02 ### Setup Tab — Interactive Installer One command opens a browser-based setup wizard for installing DollhouseMCP on any MCP client: ```bash npx @dollhousemcp/mcp-server@latest --web ``` #### Features - **One-click install** for 9 platforms: Claude Desktop, Claude Code, Cursor, VS Code, Codex, Gemini CLI, Windsurf, Cline, LM Studio - **Auto-updating vs Pinned version** toggle — all config snippets update dynamically - **Installation detection** — scans existing client configs, shows green/amber state based on whether current settings match - **Open config file** buttons — opens client config in the system default editor - **Version-aware .mcpb download** — resolves correct versioned Desktop Extension from GitHub API - **Install verification** — confirms config was written after install - **Keyboard navigation** — arrow keys, Home, End for platform tabs #### Technical - Bundled `install-mcp` (MIT, by Dhravya Shah) as runtime dependency - 7 of 9 platform panels generated from declarative PLATFORMS registry (zero HTML duplication) - `UnicodeValidator.normalize()` on all server-side user input - 171 tests including JSDOM DOM validation of generated panels - All READMEs and guides updated with interactive setup one-liner ## [2.0.0] - 2026-04-01 DollhouseMCP v2.0.0 is the first stable release of the v2 line. This release brings MCP-AQL (Agent Query Language), Gatekeeper permission system, unified web console, multi-session support, comprehensive metrics, and 9000+ tests across unit, integration, security, and e2e suites. ### Highlights Since RC Cycle #### Unified Web Console (#1681, #1701) - Built-in web dashboard with log viewer, metrics, and permissions tabs - Multi-session support with leader election and follower forwarding - Session names (Punch, Kermit, Echo, etc.) with uptime tracking and kill controls - Dynamic port discovery for concurrent sessions (#1690) - SSE-based real-time log and metrics streaming #### Permission System (#1691, #1692, #1693) - `evaluate_permission` MCP-AQL operation for multi-platform hooks - HTTP permission evaluation endpoint for external integrations - Permissions dashboard tab in web console - Cross-platform adapter support (Claude Code, Gemini CLI, Cursor, Codex CLI, Windsurf, VS Code Copilot, JetBrains Junie) #### Gatekeeper Auto-Confirm (#1653) - Operations that required `confirm_operation` + retry now auto-confirm in a single call - Reduces session startup from ~50 user approvals to ~15 - Risk scoring (0-100) on all auto-confirmed operations #### Stability & Performance - File watcher debounce to prevent memory loading loops (#1689) - Security event deduplication to stop log flooding and memory pressure (#1699) - Log backpressure elimination — `MEMORY_LOADED` downgraded from security events to debug (#1715) - SAFE_DESCRIPTION validation relaxed to allow common symbols (#1695) - Security validation pipeline for web console element rendering (#1697) #### Log Management (#709) - **BREAKING DEFAULT**: `DOLLHOUSE_LOG_SECURITY_RETENTION_DAYS` default reduced from 90 to **7 days** - `DOLLHOUSE_LOG_MAX_FILES_PER_CATEGORY` env var (default `100`) — caps rotated files per category - `DOLLHOUSE_LOG_MAX_DIR_SIZE_BYTES` env var (default `0` = disabled) — caps total log directory size - Restart sequence recovery for `FileLogSink` #### Element Filename Convention (#514) - Element filenames revert to plain `{name}.ext` — directory structure provides type context - Fixes lookup failures when `metadata.name` (spaces) didn't match identifier (hyphens) - 33 bundled seed elements renamed to match new convention #### Testing & Quality - 9000+ tests (unit, integration, security, e2e, calibration) - Permission flow test harness: 393 tests covering every operation x permission level (#1669, #1670) - Enhanced pattern syntax validation with real-time LLM feedback (#1664) - Security warnings in `mcp_aql_delete` and `mcp_aql_execute` tool descriptions - Fork PR CI permissions handled gracefully (#1673) --- *For the full v2 feature set (MCP-AQL, Gatekeeper, agentic loop, ensembles, etc.), see the beta release notes below.* ## [2.0.0-rc.6] - 2026-03-26 See [2.0.0] above — rc.6 features are consolidated into the stable release. ## [2.0.0-beta.3] - 2026-02-03 ### 🤖 Agentic Loop Phase 2 - Autonomy & Safety This release completes Phase 2 of the Agentic Loop redesign with autonomy evaluation, safety enforcement, and improved agent state management. ### ✨ Features - **AutonomyEvaluator Service** (#384) - Programmatic continue/pause decisions based on risk assessment - Configurable safety tiers with glob pattern matching - Risk thresholds for automatic continuation vs. human review - Integration with `record_execution_step` for real-time guidance - **Autonomy Directive** (#385) - New `autonomyDirective` field in `record_execution_step` response - Returns `continue`, `pause`, or `stop` based on risk evaluation - Includes reasoning and confidence scores for LLM context - Enables agents to self-regulate execution flow - **DANGER_ZONE Programmatic Enforcement** (#386) - Automatic detection of high-risk operations - Prevents execution of destructive actions without explicit confirmation - Configurable patterns for sensitive file paths and operations - Audit trail for all DANGER_ZONE evaluations - **Self-Hosted CI Runners** (#413) - Docker-based self-hosted runners for faster CI - Actor-based routing: maintainers use self-hosted, contributors use GitHub-hosted - 3 parallel runners with 4GB memory each - Jest memory optimization (maxWorkers=2 in CI) ### 🔧 Improvements - **Memory Permanent Retention** (#409, #410) - Memories are now permanent by default (was 30 days) - Removed retention warnings for long-lived memories - Explicit `retentionDays` still supported for temporary memories - **V2 Agent Auto-Conversion** (#370) - V1 agents automatically convert to V2 format on execution - Seamless migration path without manual updates - Preserves all existing agent functionality - **String Goal Normalization** (#376) - String goals properly normalize to V2 AgentGoalConfig format - Parameter validation for goal templates - Consistent goal handling across all agent types - **Configurable Ensemble Limits** (#369) - Ensemble element limits now configurable - Enhanced logging with comprehensive context - Improved audit trails for ensemble operations ### 🐛 Bug Fixes - **Agent State Persistence** (#385) - Fixed goal state saving to wrong file (V1 vs V2) - Ensures consistent step counting across executions - Proper state preservation between `recordAgentStep` calls - **Ensemble Element Naming** (#367) - Fixed legacy `name`/`type` to `element_name`/`element_type` migration - Updated test fixtures for consistency - Proper naming in create() method - **Flaky Parallel Test Fix** (#411, #412) - CI-aware timing thresholds for BuildInfoService tests - Local: 250ms strict threshold for development - CI: 600ms lenient threshold for environment variance ### 📖 Documentation - **Memory CRUDE Examples** (#397, #398, #407, #408) - Added memory examples to all CRUDE tool descriptions - Complex operation patterns (batch, search, filtering) - Memory relationship naming conventions - Tag taxonomy guidance (`category:value` format) - **CI-Aware Timing Thresholds** (#412) - New section in testing-strategy.md - `TIMING_DEBUG=true` environment variable for debugging - Best practices for timing-sensitive tests ## [2.0.0-beta.1] - 2026-01-23 ### 🚀 Major Release: MCP-AQL & Agentic Loop This beta release introduces MCP-AQL (Model Context Protocol - Agent Query Language) with CRUDE endpoints, a complete agentic loop implementation, and numerous architectural improvements. ### Breaking Changes - **Parameter Naming**: Standardized to `element_name` and `element_type` (snake_case) - **MCP Interface Mode**: New `MCP_INTERFACE_MODE` environment variable controls tool exposure ### ✨ Features - **Agentic Loop v2.0 - LLM-First Architecture** (Branch: feature/agentic-loop-redesign) - Complete redesign of agent execution model - **LLM-First Decision-Making**: Semantic decisions (intent, actions, reasoning) now made by host LLM instead of server-side logic - **Advisory Methods**: Server provides programmatic signals (security, constraints, risk, priority) as input to LLM judgment - **Element-Agnostic Activation**: Agents can activate any element type (personas, skills, templates) without hardcoded type handling - **Goal Templates**: Support parameterized goals for flexible agent reuse with variable substitution - **New execute_agent Tool**: - Accepts `name` (string) and `parameters` (object) for goal template rendering - Returns `ExecuteAgentResult` with structured context for LLM processing - Includes goal, activeElements, availableTools, successCriteria, and optional advisory signals - **v2.0 Agent Schema**: - `AgentGoalConfig` - Goal templates with parameters and success criteria - `AgentActivates` - Element activation specifications - `AgentToolConfig` - Tool availability hints - `AgentMetadataV2` - Complete v2.0 metadata structure - `ExecuteAgentResult` - Structured response format - **Refactored Advisory Methods**: - `validateGoalSecurity()` - Returns warnings instead of throwing errors - `assessRisk()` - Exposes numeric risk score (0-100) - `evaluateConstraints()` - Extracted hard constraint checking - `calculatePriorityScore()` - Extracted priority scoring logic - `recordDecision()` - Maintains audit trail (LLM records, not makes decisions) - **Walking Skeleton Implementation**: Phases 1-5 complete (schema, agent definition, advisory methods, core implementation, tool registration) - **Core Principle**: "Semantic work → Host LLM, Programmatic work → MCP Server" - **Example Agent**: `hello-world-agent.md` demonstrates v2.0 schema and capabilities - **No Breaking Changes**: v1.x agents continue to work; v2.0 introduces `llm_driven` framework alongside existing frameworks **Migration Path**: v1.x agents used decision frameworks (`eisenhower`, `risk_based`) where server made decisions. v2.0 agents use `llm_driven` framework where host LLM makes all semantic decisions using advisory signals from server. - **Element Query Services** (Issue #38, PR #46) - Advanced pagination, filtering, and sorting for `list_elements` - **New Parameters**: - `page`, `pageSize` - Pagination controls (default: page 1, 25 items per page, max 100) - `sortBy` - Sort by `name`, `created`, `modified`, `version`, or `retention` - `sortOrder` - Ascending (`asc`) or descending (`desc`) - `nameContains` - Filter by partial name match (case-insensitive) - `tags`, `tagsAny` - Filter by tags (AND/OR logic) - `author` - Filter by author (exact match, case-insensitive) - `createdAfter`, `createdBefore` - Filter by creation date (ISO 8601) - `status` - Filter by element status (`active`, `inactive`, `all`) - **Architecture**: Clean service composition with stateless services - `PaginationService` - Page boundary calculations and metadata - `FilterService` - Multi-criteria filtering with Unicode normalization - `SortService` - Flexible sorting with customizable field extractors - `ElementQueryService` - Orchestrates filter → sort → paginate pipeline - **Backward Compatible**: Legacy callers unchanged, new callers opt-in to query features - **Test Coverage**: 207 new tests (96 FilterService + 41 SortService + 52 PaginationService + 18 integration) ## [1.9.27] - 2025-12-05 - Version bump ## [1.9.26] - 2025-11-07 **Major Feature Release**: Element Source Priority System & Critical Bug Fixes ### ✨ Features - **Element Source Priority System** (#1451, #1452, #1453, #1454, #1455, #1456) 🌟 - **Intelligent element selection** based on configurable source priority - Replaces simple source filtering with advanced priority-based ranking - **Priority levels** (configurable per element type): - `local` - User's portfolio (highest priority by default) - `github` - Personal GitHub portfolio - `collection` - Community collection (lowest priority by default) - **User-facing API** for source priority configuration via `dollhouse_config` tool - **Automatic conflict resolution** when same element exists in multiple sources - **Search integration** - UnifiedIndexManager respects source priority in all searches - **Installation integration** - ElementInstaller follows priority when installing elements - **Comprehensive documentation** - User guides and technical references - **Full test coverage** - 3000+ lines of tests including integration tests - **Non-breaking** - Falls back to local-first behavior if priority not configured - **Configuration persistence** - Saves to `~/.dollhouse/config.yaml` ### 🐛 Bug Fixes - **Memory Content Preservation** (#1442) - Fixed bug where memory content was lost during YAML import/parsing - Ensures all memory data persists correctly through serialization - Improved error handling for YAML parsing edge cases - **VerbTriggerManager Critical Bugs** (#1443) - Fixed three critical bugs in verb trigger extraction and management - Improved reliability of verb-based element search - Enhanced error handling and validation - **OAuth Terminal Error Propagation** (#1444) - Implements RFC 6749/8628 compliance for OAuth device flow - Errors now propagate immediately to terminal instead of hanging - Better user experience during authentication failures - **GitHubAuthManager Test Mocks** (#1459) - Fixed incomplete Response mock objects causing 8 test failures - Added missing `status`, `statusText`, and `headers` properties - Ensures proper Fetch API compatibility in tests ### 🔧 Technical Improvements - **jsdom Stability** (#1458) - Rolled back jsdom from 27.1.0 to 27.0.0 to maintain test stability - Avoids ESM/CommonJS incompatibility with parse5 v8 - Maintains stable test environment across all platforms - **SonarCloud Badges** (docs commit 0f30386b) - Restored SonarCloud quality badges to README chunk file - Prevents auto-sync workflow from removing badges - Ensures badges persist across README regeneration ### 📦 Dependency Updates - **@modelcontextprotocol/sdk** 1.20.2 → 1.21.0 (#1439) - **posthog-node** 5.10.3 → 5.11.0 (#1441) - **@types/archiver** 6.0.4 → 7.0.0 (#1440) - **@types/node** 24.9.1 → 24.10.0 (#1438) ### 📖 Documentation - **Element Source Priority Documentation** (#1456) - Complete user guide for source priority configuration - Technical implementation details - Best practices and usage examples - **Session Notes**: Comprehensive documentation of: - Element Source Priority implementation (6 phases) - Bug fixes and investigations - Release preparation process ### 🎯 Impact **Element Source Priority System**: - Advanced element selection replacing simple filtering - User control over which sources take precedence - Automatic conflict resolution for duplicate elements - Foundation for future multi-source element management - Seamless integration with existing search and installation flows **Bug Fixes**: - Memory data integrity guaranteed - Verb-based search reliability improved - OAuth authentication experience enhanced - Test suite fully passing across all platforms ### 🔗 Related Issues & PRs - PR #1451: Source priority configuration system - PR #1452: UnifiedIndexManager source priority integration - PR #1453: ElementInstaller source priority support - PR #1454: User-facing configuration API - PR #1455: Integration tests for source priority - PR #1456: Comprehensive documentation - PR #1442: Memory content preservation fix - PR #1443: VerbTriggerManager bug fixes - PR #1444: OAuth error propagation - PR #1458: jsdom rollback for stability - PR #1459: GitHubAuthManager test fixes --- ## [1.9.25] - 2025-10-30 **Major Feature Release**: Auto-Load Baseline Memories & Production Stability ### ✨ Features - **Auto-Load Baseline Memories** (#1430, #1431) 🌟 - **Self-aware DollhouseMCP**: Server now loads baseline knowledge automatically on startup - Eliminates 20-40k token searches for "what can dollhouse do?" - now instant with zero search - Users can mark ANY memory for auto-load via `autoLoad: true` metadata flag - Priority-based loading system (lower priority number = loads first) - Configurable via `~/.dollhouse/config.yaml`: - `autoLoad.enabled` - Global on/off switch (default: true) - `autoLoad.maxTokenBudget` - Token safety limit (default: 5000) - `autoLoad.memories: []` - Explicit memory list (empty = use metadata flags) - Includes seed memory: `dollhousemcp-baseline-knowledge.yaml` - ~2500 tokens of core capabilities overview - Comprehensive trigger words for semantic search - Auto-loaded by default (priority: 1) - **Use Cases**: - Baseline AI context (what DollhouseMCP can do) - Team onboarding (project context for new engineers) - Agent orchestration (swarm foundation with pre-loaded knowledge) - Always-available project knowledge (like CLAUDE.md for Claude Code) - Non-breaking: Auto-load failure logs warning but doesn't prevent startup - Graceful degradation: Returns empty array on error - Production-ready for VC evaluations and agent swarms - **Performance Optimization**: Token estimate caching - Content hash-based caching (SHA-256, first 16 chars) - Max 1,000 cached entries (prevents memory leaks) - ~50% improvement for repeated content calculations - **Enhanced Error Handling**: - Detailed error messages with error type - Helpful recovery suggestions for common errors (ENOENT, EACCES, YAML parse) - Better diagnostics for troubleshooting - **Comprehensive Documentation** (3 new seed memories): - `how-to-create-custom-auto-load-memories.yaml` - Complete step-by-step guide - `priority-best-practices-for-teams.yaml` - Team coordination strategies - `token-estimation-guidelines.yaml` - Optimization techniques and budgeting ### 🐛 Bug Fixes - **Extended Node Compatibility CI Failures** (CRITICAL - weeks old) (#1432, #1433, #1434) - **Root Cause**: JSDOM/parse5 ESM race condition during Jest teardown - ALL 6 platforms (Ubuntu/macOS/Windows × Node 20.x/22.x) were failing - 19 test files broken with "Must use import to load ES Module" errors - **Phase 1 Fix** (#1433): - Fixed jsdom version mismatch (package.json declared 27.0.1, installed 27.0.0) - Added `maxConcurrency: 1` to enforce truly serial test suite execution - Result: 5 out of 6 platforms passing - **Phase 2 Fix** (#1434): - Increased memory threshold from 500MB to 650MB for YAML bomb test - Windows Node 22.x has ~528MB baseline vs ~400-450MB on Linux/macOS - Platform-agnostic threshold accommodates all environments - Result: ALL 6 platforms now passing ✅ - **Technical Details**: - JSDOM initialized at module load time in Memory.ts and yamlValidator.ts - JSDOM uses CommonJS require() but parse5 7.3.0 is ESM-only - Race condition: Jest tears down environment while JSDOM loads parse5 - CI vs Local: Different npm dependency resolution (nested vs hoisted parse5) - **README Badge Issues** (#1432, #1435) - Restored SonarCloud badges (6 quality metrics) after auto-sync removal - Fixed Extended Node Compatibility badge URL (was showing main branch failures) - Fixed Docker Testing badge URL (was showing main branch old status) - All badges now correctly point to develop branch with `?branch=develop` - **Root Cause**: README auto-sync workflow syncs FROM main TO develop - Overwrote develop's correct badges with main's outdated badges - Badge URLs defaulted to main branch without explicit `?branch=` parameter ### 🔧 Technical Improvements - **LICENSE Synchronization** (#1432) - Synchronized develop LICENSE with main's proven working structure (763-line monolithic) - Main branch LICENSE confirmed working with Glama and GitHub licensee - Removed `LICENSE-ADDITIONAL-TERMS.md` (develop-only experimental file) - Eliminates divergence risk for external license detection tools - **Jest Configuration Optimization** (#1432) - Restored optimal maxWorkers configuration for CI environments - Added maxConcurrency: 1 for suite-level serialization - Prevents race conditions in test suite execution - Maintains >96% code coverage across all platforms ### 📊 Test Results **Before Fixes**: - Extended Node Compatibility: ALL 6 platforms FAILING ❌ - 19 test files with JSDOM/parse5 errors **After Fixes**: - Test Suites: 143 passed, 143 of 146 total ✅ - Tests: 2,656 passed, 2,760 total ✅ - Coverage: >96% maintained ✅ - Extended Node Compatibility: ALL 6 platforms PASSING ✅ - Ubuntu Node 20.x ✅ - Ubuntu Node 22.x ✅ - macOS Node 20.x ✅ - macOS Node 22.x ✅ - Windows Node 20.x ✅ - Windows Node 22.x ✅ ### 📖 Documentation - **Session Notes**: Comprehensive documentation of: - Issue #1430 implementation details - CI investigation and resolution process - State-of-repo snapshot for future comparison - Badge saga timeline and fixes ### 🎯 Impact **Auto-Load Memories Feature**: - 80% reduction in tokens for capability questions - Instant answers to "what can dollhouse do?" - Foundation for agent swarm orchestration - Self-aware AI system with baseline knowledge - Like CLAUDE.md but for DollhouseMCP itself **CI Stability**: - Resolved weeks-old critical failures blocking all development - 100% CI pass rate across all platforms - Production-ready develop branch - Accurate badge reporting for contributors ### 🔗 Related Issues & PRs - Issue #1430: Auto-load baseline memories feature - PR #1431: Auto-load baseline memories implementation - PR #1432: License sync, Jest config, SonarCloud badges - PR #1433: Extended Node Compatibility Phase 1 - PR #1434: Extended Node Compatibility Final - PR #1435: README badge fixes --- ## [1.9.24] - 2025-10-27 **Documentation Release**: Claude Skills Compatibility & Dependency Updates ### 📖 Documentation - **Claude Skills Compatibility Section** (#1413) - Added prominent README section highlighting 100% lossless round-trip conversion - Documents bidirectional conversion between DollhouseMCP Skills and Claude Skills - Includes skill-converter usage for CLI-enabled LLMs (Claude Code, Cursor, Gemini Code Assist) - Complete metadata, validation, and structure preservation in both directions - **Merge Strategy Documentation** - Documented squash vs. regular merge strategy in `docs/development/PR_BEST_PRACTICES.md` - Feature → develop: SQUASH merge (clean history, normalizes contributor practices) - Develop → main: REGULAR merge (preserves commits, prevents overwriting) - Multi-contributor scaling considerations documented - **Session Notes** - Committed session notes from Oct 25 and Oct 27 to development history - Documents development decisions and context for project continuity ### 🔄 Dependency Updates - `@modelcontextprotocol/sdk` 1.20.1 → 1.20.2 - `posthog-node` 5.10.0 → 5.10.3 - `jsdom` 27.0.0 → 27.0.1 (dev) - `@types/node` 24.8.1 → 24.9.1 (dev) - `@modelcontextprotocol/inspector` 0.17.1 → 0.17.2 (dev) ### 🔧 Technical - Fixed README auto-sync workflow issue by updating chunk source files - README now generated from `docs/readme/chunks/` to prevent manual edit overwrites - All documentation changes preserved through auto-sync workflow --- ## [1.9.23] - 2025-10-26 **Feature Release**: Bidirectional Skills Converter with DollhouseMCP primacy messaging ### ✨ Features - **Bidirectional Skills Converter** (#1400, #1401) - Lossless conversion between DollhouseMCP Skills and Claude Skills formats - CLI commands: `dollhouse convert from-anthropic` / `to-anthropic` - Automatic format detection (ZIP, directory, .md file) - Metadata enrichment when importing Claude Skills - Roundtrip conversion with 100% fidelity - Comprehensive test suite (13/13 tests passing) - **Skills Converter Documentation** (docs commit 510ec3e7) - Complete guide: `docs/guides/SKILLS_CONVERTER.md` - Technical architecture details - Usage examples and workflows - CLI reference documentation - **DollhouseMCP Primacy Messaging** (docs commit bf1711d0) - README section establishing timeline (July 2025 premiere) - Superset positioning vs Claude Skills - Professional, legally-reviewable framing ### 🔧 Components - **SchemaMapper**: Bidirectional metadata transformation - **ContentExtractor**: Code block and documentation parsing - **DollhouseToAnthropicConverter**: Export to Claude Skills format - **AnthropicToDollhouseConverter**: Import from Claude Skills format - **CLI Interface**: `src/cli/convert.ts` with verbose/report modes ### Technical Details - Converter location: `src/converters/` - CLI location: `src/cli/convert.ts` - Tests: `test/__tests__/unit/converter.test.ts` - Security: ZIP bomb detection, Unicode normalization, size limits - Performance: <1s for small skills, 5-30s for large skills ### Documentation - Skills Converter Guide: `docs/guides/SKILLS_CONVERTER.md` (758 lines) - README primacy section: Establishes DollhouseMCP as original (July 2025) - Architecture comparison in guide (DollhouseMCP superset) --- ## [1.9.22] - 2025-10-23 **Hotfix Release**: Resolve jsdom test failures ### Fixed - **jsdom version compatibility** (Hotfix) - Reverted jsdom from 27.0.1 to 27.0.0 due to parse5 ES module import issues - Fixes test failures in MemoryManager and other test suites - The jsdom 27.0.1 update introduced a breaking change with parse5 becoming an ES module - Will revisit jsdom 27.0.1 update in future release with proper ES module configuration --- ## [1.9.21] - 2025-10-23 **Patch Release**: Memory validation system activation and element formatting ### Added - **Element file formatter script** (#1388, fixes #1387) - New `scripts/fix-element-formatting.ts` to reformat blob content elements - Fixes element files stored as single-line blobs (unreadable in editors) - Intelligently adds newlines before/after markdown headers - Formats code blocks and YAML structures properly - Dry-run mode for safe testing - Average line length detection (>200 chars triggers formatting) ### Fixed - **Background memory validation startup** (#1389) - BackgroundValidator service now starts automatically on server initialization - Memory entries with UNTRUSTED status will be automatically validated every 5 minutes - Trust levels are now properly updated (VALIDATED, FLAGGED, QUARANTINED) - Validation runs server-side with zero token cost ### Changed - **README version history optimization** - Limited version history in README to 1.9.x releases only (21 versions instead of 35) - Reduced README size from ~75KB to ~61KB for better readability - Complete history remains in CHANGELOG.md (source of truth) - Updated `generate-version-history.js` minVersion from 1.6.0 to 1.9.0 - **Added missing v1.9.20 changelog entry to README** - Previous README was missing the v1.9.20 MCP Registry Publishing Fix ### Context The BackgroundValidator service was fully implemented in Issue #1314 (Phase 1: Background validation for memory security) but was never activated. The `backgroundValidator.start()` method was missing from server initialization, causing all memories to remain UNTRUSTED indefinitely. This patch release adds proper lifecycle management: - Import backgroundValidator singleton in server initialization - Start validation service after resource handlers are set up - Stop service during server cleanup ### Impact - Memory security architecture is now fully operational - UNTRUSTED memories will be automatically validated - Trust level updates work correctly - No performance impact (runs in background outside LLM context) --- ## [1.9.20] - 2025-10-17 **Fix Release**: MCP Registry Publishing Compatibility ### Fixed - **MCP Registry publishing case sensitivity issue** - Corrected `mcpName` field in package.json to match GitHub organization capitalization - Changed from `io.github.dollhousemcp/mcp-server` to `io.github.DollhouseMCP/mcp-server` - Resolves NPM package validation errors when publishing to MCP Registry - Ensures proper namespace permission matching ### Context The MCP Registry performs two case-sensitive validations: 1. Permission check against GitHub org name (`io.github.DollhouseMCP/*`) 2. NPM package validation against `mcpName` field in package.json The initial implementation incorrectly used lowercase for `mcpName`, causing a validation mismatch. This patch release corrects the capitalization to match our GitHub organization name. --- ## [1.9.19] - 2025-10-17 **Comprehensive Release**: 90 commits including security fixes, PostHog telemetry, MCP registry support, and major cleanup ### Added - **MCP registry publishing workflow** with OIDC authentication (#1367) - Automated publishing to registry.modelcontextprotocol.io - GitHub Actions workflow with manual dry-run mode - Comprehensive test suite for workflow validation (50+ tests) - Pinned mcp-publisher CLI to v1.3.3 for reproducibility - **PostHog remote telemetry integration** (#1357, #1361) - Opt-in remote analytics with DOLLHOUSE_TELEMETRY_OPTIN=true - Usage patterns and error tracking - Privacy-focused with explicit consent - **MCP Resources support for capability index** (#1360) - Future-proof architecture (disabled by default) - Ready for MCP protocol evolution - Provides summary and full capability index variants - **Dual licensing model** with commercial option (#1350) - AGPL-3.0 with platform stability commitments - Commercial licensing pathway - **Minimal installation telemetry** (#1359) - Operational metrics for v1.9.19 - Installation success tracking - **Security telemetry** tracking for blocked attacks (#1313) - **Automated release issue verification** system (#1249) - **Orphaned issues checker** for systematic cleanup (#1251) - **Personal development notes directory** (#1275) ### Security - **Phase 1: Background validation for memory security** (#1316, #1320, #1322) - Memory trust level system (UNTRUSTED, VALIDATED, TRUSTED, FLAGGED, QUARANTINED) - Background validation service for automatic memory security checks - Pattern extraction and sanitization for dangerous content - **Phase 2: AES-256-GCM pattern encryption** (#1323) - Pattern encryption with PBKDF2 key derivation - Pattern decryption with LLM context protection - Context tracking using AsyncLocalStorage - **Fixed symlink path traversal vulnerability** (#1290, #1306) - Resolve symlinks before validation - Enhanced audit logging - Comprehensive path sanitization - **Fixed command injection** in verify-release-issues.js (#1249) - DMCP-SEC-001: Critical vulnerability patched - PATH injection protection with absolute paths - **Tightened YAML bomb detection** threshold from 10:1 to 5:1 (#1305) - **Fixed multiple security audit issues** (3 MEDIUM/LOW severity) ### Fixed - **Missing shell: bash declarations** in MCP registry workflow - **OAuth device flow zero-scopes bug** (using OIDC instead) - **Session documentation** restoration (#1082) - **Repository cleanup** - removed ignored files from Git tracking (#1287) - **Flaky test management** - skip flaky GitHubRateLimiter tests (#1286) - **Performance test isolation** (#1288) ### Changed - **Documentation structure** - renamed docs/archive/ to docs/session-history/ (#1277) - **Docker environment** file documentation enhanced (#1273) - **Data directory** documentation added (#1274) - **CLAUDE.md** organization improved (#1270) ### Test Results - 2,374 tests passing (includes new security test suite) - Comprehensive security test coverage for pattern encryption and validation - All memory trust level functionality tested - Zero known flaky tests --- ## [1.9.18] - 2025-10-10 **Feature Release**: Memory trigger support and documentation improvements ### Added - **Memory trigger extraction support** (#1124) - Extract action verb triggers from Memory element descriptions - Enables skill-like discovery for memory elements - Integrated with Enhanced Index system ### Fixed - **Memory timestamp handling** (#1206, #1207) - Robust validation for memory timestamp handling - Auto-repair for corrupted memory timestamps on read operations - Handle string timestamps in Memory.getStats() to prevent toISOString errors - **Memory metadata preservation** (#1196, #1197) - Fixed portfolio sync issues with memory metadata - Ensures metadata integrity during sync operations - **Enhanced trigger validation logging** (#1139) - Improved logging for Skills and Memories trigger extraction - Better debugging capabilities for trigger validation ### Documentation - **Session documentation restoration** (#1082) - Restored lost session documentation files - Preserves development context and decisions ### Chores - **Type safety improvements** - Added explicit type annotation to filter parameter in MemoryManager - Enhanced TypeScript strictness --- ## [1.9.17] - 2025-10-08 Test isolation and repository cleanup patch ### Fixed - **Performance Test Isolation (#1288)**: Fixed flaky IndexOptimization test by isolating performance tests - Created dedicated `jest.performance.config.cjs` with 4 parallel workers - Main test suite no longer runs performance tests concurrently (prevents resource contention) - IndexOptimization test now consistently passes at 60-70ms (was failing at 926ms due to interference) - Added `test:performance` and `test:all` npm scripts - CI workflows updated with dedicated performance test step - Execution time: 18.7s with 4 workers vs 10+ minutes serial - Reduced code duplication by using filter to inherit base config patterns - **Repository Cleanup (#1287)**: Removed ignored files from Git tracking - Removed `.obsidian/` directory (4 files) and `test-results/` (3 files) from version control - Files remain available locally but no longer tracked in repository - Follows gitignore additions from PR #1276 - **Flaky Test Management (#1286)**: Skip flaky GitHubRateLimiter tests - Marked intermittent GitHub API rate limiter tests as skipped - Prevents CI failures from external API dependencies - Tests can be run manually when needed ### Chores - **Repository Organization (#1276)**: Added `.obsidian/` and `test-results/` to .gitignore - **Documentation Structure (#1277)**: Renamed docs/archive/ to docs/session-history/ - **Docker Best Practices (#1273)**: Enhanced Docker environment file documentation - **Data Directory Documentation (#1274)**: Added README to data/ directory - **Documentation Refactor (#1270)**: Improved CLAUDE.md organization and clarity ### Features - **Issue Management (#1251)**: Added orphaned issues checker for repository maintenance - **Developer Experience (#1275)**: Added dev-notes/ directory for personal documentation - **CI Improvements**: Added automated release issue verification (#1241) - **Dependabot Integration (#1241)**: Skip Claude Code Review for Dependabot PRs ### Test Results - Main suite: 2269 tests passing (performance tests excluded) - Performance suite: 62 tests passing (isolated execution) - Total: 2331 tests passing - No flaky tests remaining - CI/CD: All workflows passing across all platforms ## [1.9.16] - 2025-10-03 Platform-agnostic client documentation and