wyrm-mcp 5.10.0 β†’ 5.11.0

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 CHANGED
@@ -1,43 +1,58 @@
1
- # πŸ‰ Wyrm β€” Persistent Memory for AI Agents
1
+ # πŸ‰ Wyrm β€” the memory layer for AI assistants
2
2
 
3
- > Your AI forgets everything between sessions. Wyrm remembers.
3
+ > Your AI doesn't just need memory. It needs the *layer* that turns memory into compounding leverage.
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/wyrm-mcp?color=22c55e&label=npm)](https://www.npmjs.com/package/wyrm-mcp)
6
- [![License: Proprietary](https://img.shields.io/badge/License-Proprietary%20Freeware-green.svg)](LICENSE)
7
- [![Tests](https://img.shields.io/badge/tests-464%20passing-22c55e)](packages/mcp-server)
8
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
9
- [![MCP](https://img.shields.io/badge/MCP-compatible-purple)](https://modelcontextprotocol.io)
5
+ [![npm version](https://img.shields.io/npm/v/wyrm-mcp?color=00B89F&label=npm)](https://www.npmjs.com/package/wyrm-mcp)
6
+ [![License: Proprietary](https://img.shields.io/badge/License-Proprietary%20Freeware-00B89F.svg)](LICENSE)
7
+ [![Tests](https://img.shields.io/badge/tests-638%20passing-00B89F)](packages/mcp-server)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
9
+ [![MCP](https://img.shields.io/badge/MCP-compatible-00B89F)](https://modelcontextprotocol.io)
10
10
 
11
11
  ---
12
12
 
13
- ## The Problem
13
+ ## What Wyrm actually is
14
14
 
15
- AI assistants lose all context between conversations. Every new session starts from zero β€” you re-explain your codebase, your preferences, your project architecture, the decisions you already made. It's like working with a brilliant colleague who has amnesia.
15
+ Wyrm is not "AI memory." It's the **substrate** that turns one-shot AI conversations into *accreting intelligence*. Five things, only one of which is memory:
16
16
 
17
- ## The Solution
18
-
19
- Wyrm is an [MCP](https://modelcontextprotocol.io) server that gives AI agents **persistent, searchable memory**. It stores projects, sessions, quests, skills, and arbitrary data in a local SQLite database with full-text search. Connect it once, and your AI remembers everything β€” across sessions, across tools, across projects.
17
+ 1. **βŒ‡ Memory across sessions, tools, and projects.** Your AI inherits prior state instead of starting cold every conversation. Works with Claude / Copilot / Cursor / Windsurf / Codex.
18
+ 2. **βœ– Counter-pattern blocking.** When an approach fails, Wyrm records it. Next time, your AI is *blocked* from suggesting the same failed thing again. Other memory tools learn only from success β€” Wyrm learns from failure too.
19
+ 3. **→ Autonomous goal pursuit (OODA agent loop).** Set a persistent goal ("ship v2", "keep deps current weekly"), and the `wyrm-loop` daemon runs Observe→Orient→Decide→Act iterations until success criteria are met.
20
+ 4. **β†― Federation.** Wyrm calls other MCP servers (GitHub, Slack, Linear, …) as tools. Buddy Protocol v1.0 lets Wyrm talk to other AI memory tools. Composes your whole stack into one mind.
21
+ 5. **✺ Creative substrate.** First-class design tokens (colour / type / spacing / motion / shadow / radius / breakpoint) and a tagged design-reference clipper β€” Wyrm is not just for code.
20
22
 
21
23
  ```
22
24
  You: "What did we decide about the auth architecture last week?"
23
- AI: *checks Wyrm* "We went with JWT + refresh tokens, stored in httpOnly cookies.
24
- Here's the session from Tuesday with the full discussion..."
25
+ AI: *calls wyrm_session_prime* "We went with JWT + refresh tokens, stored
26
+ in httpOnly cookies. Truth #142 cites the Tuesday session β€” there's
27
+ a downstream impact on the OAuth flow we should check first."
25
28
  ```
26
29
 
30
+ You don't ask for memory. The AI cites it on its own. Visibly, with sources.
31
+
27
32
  ---
28
33
 
29
- ## Features
30
-
31
- - 🧠 **Persistent Memory** β€” Projects, sessions, quests, context, and skills survive across sessions
32
- - πŸ” **Full-Text Search** β€” FTS5-powered instant search across all stored data
33
- - πŸ“Š **Data Lake** β€” Store and query any structured data with namespaces and metadata
34
- - 🎯 **Quest Tracking** β€” Task management with priorities, tags, and cross-project visibility
35
- - πŸ”’ **Optional Encryption** β€” AES-256-GCM for sensitive data, keys never leave your machine
36
- - πŸ›‘οΈ **Input Sanitization** β€” Built-in security against injection attacks
37
- - πŸ“ˆ **Usage Analytics** β€” Token tracking, cost estimation, session metrics
38
- - πŸ”„ **Markdown Sync** β€” Bi-directional sync between database and `.wyrm/` project files
39
- - πŸš€ **Zero Config** β€” Install, connect, done. No databases to set up, no services to run.
40
- - πŸ•ΈοΈ **Knowledge Graph** β€” Entity/relationship graph with neighborhood traversal and path finding
34
+ ## What's in the box (125 MCP tools)
35
+
36
+ - **βŒ‡ Memory** β€” projects, sessions, quests, ground truths, memory artifacts, hybrid FTS5 + vector search
37
+ - **βœ– Counter-pattern** β€” failure check / record / resolve, blocks repeated mistakes at suggestion time
38
+ - **β¬’ Ground truths** β€” validated facts versioned with cascade-invalidation when upstream changes
39
+ - **✱ Decision chain** β€” `wyrm_decided_because`, `decision_upstream` / `_downstream`, blast-radius traversal
40
+ - **β†’ Agent loop** β€” `wyrm_goal_set`, `wyrm_agent_init`, daemon runs OODA until success criteria are met
41
+ - **β†― Federation** β€” `wyrm_mcp_register` for outbound MCP, Buddy Protocol v1.0 for peer AI tools
42
+ - **πŸ•Έ Knowledge graph** β€” entity / relationship graph with shortest-path and neighborhood queries
43
+ - **🎨 Design substrate** β€” `design_tokens` + tagged `design_references` library
44
+ - **πŸ›‘ Audit chain** β€” hash-chained, Ed25519-signable audit log for SOC2 / HIPAA
45
+ - **πŸ’° Hour ledger + invoicing** β€” generate invoices from session content
46
+ - **🌐 Federated team sync** β€” per-row `is_shared` flag; PII never leaves your box unless explicitly shared
47
+ - **πŸ”’ Encryption** β€” AES-256-GCM; keys never leave your machine
48
+ - **πŸ‘ Visibility tools** β€” `wyrm_intro` + `wyrm_digest` make Wyrm's work product legible to humans
49
+
50
+ ## Built for these workflows
51
+
52
+ - **Founders** with multi-product portfolios β€” cross-project memory makes patterns from project A inform project B
53
+ - **Designers / creatives** β€” design tokens + reference clipper turn Wyrm into a creative substrate, not just a code-memory tool
54
+ - **Co-founders / operators** β€” `wyrm_digest` shows what Wyrm did this week in plain English
55
+ - **Long-running autonomous work** β€” agent loop runs your standing goals overnight
41
56
  - 🧠 **Memory Artifacts** β€” Store lessons, patterns, anti-patterns, heuristics with confidence scoring and lifecycle tracking
42
57
  - 🧱 **Ground Truths** β€” Versioned, validated project facts injected into every AI context build
43
58
  - 🧭 **Reasoning Scaffolds** β€” Structured checklists surfaced automatically when task type matches
package/dist/index.js CHANGED
@@ -516,6 +516,51 @@ const licenseInfo = getLicenseInfo();
516
516
  if (licenseInfo.tier !== 'free') {
517
517
  console.error(`Wyrm: Licensed β€” ${licenseInfo.tier} tier (expires: ${licenseInfo.expiresAt || 'never'})`);
518
518
  }
519
+ // ==================== BUNDLED SKILLS AUTO-REGISTRATION ====================
520
+ // On first MCP server start after install, register skills bundled with the
521
+ // npm tarball. The postinstall hook writes ~/.wyrm/bundled-skills.json; we
522
+ // consume + delete it so registration runs exactly once per install.
523
+ try {
524
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
525
+ const manifestPath = pathJoin(homeDir, '.wyrm', 'bundled-skills.json');
526
+ if (homeDir && fsExistsSync(manifestPath)) {
527
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
528
+ let registered = 0;
529
+ for (const s of manifest.skills) {
530
+ try {
531
+ if (!fsExistsSync(s.path))
532
+ continue;
533
+ const body = readFileSync(s.path, 'utf-8');
534
+ // Parse the description from frontmatter β€” tolerant to the block-scalar
535
+ // `|` marker (skip the marker itself, capture the body lines).
536
+ const fmMatch = body.match(/^---\s*\n([\s\S]*?)\n---/);
537
+ let description = s.name;
538
+ let category;
539
+ if (fmMatch) {
540
+ const descMatch = fmMatch[1].match(/description:\s*\|?\s*\n([\s\S]*?)(?:\nname:|\nmetadata:|\ncategory:|\ntype:|$)/);
541
+ if (descMatch) {
542
+ description = descMatch[1].split('\n').map(l => l.trim()).filter(Boolean).join(' ').slice(0, 500);
543
+ }
544
+ const catMatch = fmMatch[1].match(/category:\s*([^\n]+)/);
545
+ if (catMatch)
546
+ category = catMatch[1].trim();
547
+ }
548
+ db.registerSkill(s.name, description, s.path, category, 'Ghost Protocol', undefined, 'bundled');
549
+ registered++;
550
+ }
551
+ catch { /* skip on per-skill error; never break startup */ }
552
+ }
553
+ if (registered > 0)
554
+ console.error(`Wyrm: Registered ${registered} bundled skill(s) on first start.`);
555
+ try {
556
+ unlinkSync(manifestPath);
557
+ }
558
+ catch { /* harmless */ }
559
+ }
560
+ }
561
+ catch {
562
+ // Bundled skill registration is best-effort β€” never block server startup.
563
+ }
519
564
  // ==================== PERSISTENT ANALYTICS ====================
520
565
  const analytics = new WyrmAnalytics(db.getDatabase());
521
566
  // ==================== CLOUD BACKUP (Pro+) ====================