personality 0.1.1pre20 → 0.1.2

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CLAUDE.md +88 -0
  3. data/PLAN.md +621 -0
  4. data/README.md +0 -4
  5. data/TODO.md +65 -0
  6. data/docs/mcp-ruby-sdk.md +193 -0
  7. data/exe/psn +6 -0
  8. data/exe/psn-mcp +7 -0
  9. data/exe/psn-tts +7 -0
  10. data/lib/personality/cart.rb +75 -0
  11. data/lib/personality/cart_manager.rb +292 -0
  12. data/lib/personality/chunker.rb +27 -0
  13. data/lib/personality/cli/cart.rb +228 -0
  14. data/lib/personality/cli/context.rb +67 -0
  15. data/lib/personality/cli/hooks.rb +120 -0
  16. data/lib/personality/cli/index.rb +147 -0
  17. data/lib/personality/cli/memory.rb +130 -0
  18. data/lib/personality/cli/tts.rb +140 -0
  19. data/lib/personality/cli.rb +54 -0
  20. data/lib/personality/context.rb +73 -0
  21. data/lib/personality/db.rb +148 -0
  22. data/lib/personality/embedding.rb +44 -0
  23. data/lib/personality/hooks.rb +143 -0
  24. data/lib/personality/indexer.rb +215 -0
  25. data/lib/personality/init.rb +257 -0
  26. data/lib/personality/mcp/server.rb +465 -0
  27. data/lib/personality/mcp/tts_server.rb +126 -0
  28. data/lib/personality/memory.rb +125 -0
  29. data/lib/personality/persona_builder.rb +193 -0
  30. data/lib/personality/training_parser.rb +167 -0
  31. data/lib/personality/tts.rb +191 -0
  32. data/lib/personality/version.rb +1 -1
  33. data/lib/personality.rb +15 -6
  34. metadata +258 -33
  35. data/.tool-versions +0 -1
  36. data/AGENTS.md +0 -111
  37. data/LICENSE.txt +0 -21
  38. data/cartridges/spark.yml +0 -85
  39. data/config.yml +0 -36
  40. data/exe/personality +0 -6
  41. data/exe/personality-tts +0 -75
  42. data/lib/personality/config.rb +0 -142
  43. data/lib/personality/history.rb +0 -87
  44. data/lib/personality/server.rb +0 -636
  45. data/quotes.txt +0 -91
  46. data/sig/personality.rbs +0 -4
  47. data/tools.yml +0 -70
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9476b759a14e7be79e1c28a05d2a1a7e965d8d1338dd32a1640abf723f3e540f
4
- data.tar.gz: d82356dbd167f0e2d94e32f9f01afa36e17b5999ebcf31853d56b7ccad232c78
3
+ metadata.gz: a2273778acdb1598ceb17d7fe5b8f5ccdee60434e056b88ccd5ee844413821f8
4
+ data.tar.gz: 7715ff4043b7a2d0eaec8a1c30c4f39fb3695ad642927d3dc7468cec4dc5d473
5
5
  SHA512:
6
- metadata.gz: d5405da9d9beb08b357dda6298c657c456d1ea10d30a8dd6260eecf9b9686323ad52968986c3c613d343131ee9ccc794b4eb5ef9cfbefcb4ce7fbbf80f3af364
7
- data.tar.gz: ecd8f1de4e9407733a8a9c8a2c61885a54ca0169b0cb22db4b1ee9dc27c74f47ac71ea41b115186261cb820efe44f5c344234b07735390c552784fe31273ac19
6
+ metadata.gz: 2e185ca00dccff45542fc6b51dab493d1efdfb455892e3a7f716219a2a089966233a1edd58a845a863ad2a4dc646f333e417c417bf735da34041ebbe29b51fa3
7
+ data.tar.gz: fa4d7b17d5f64e3a406ea708b81e610b30ef39794aefc86242aad6fcb668fa9df816f710cca69c56ed758803f1b719f44260ece4784599a8ff2a58937d04eac4
data/CLAUDE.md ADDED
@@ -0,0 +1,88 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code when working with this repository.
4
+
5
+ ## Project Overview
6
+
7
+ `personality` is a Ruby gem providing infrastructure for Claude Code: persistent memory with vector search, code/doc indexing, TTS, persona management, and MCP server.
8
+
9
+ - **CLI**: `psn` (Thor-based, subcommands: init, memory, index, cart, tts, hooks, context)
10
+ - **MCP Server**: `psn-mcp` (stdio transport, 13 tools, 3 resources)
11
+ - **Database**: SQLite + sqlite-vec at `~/.local/share/personality/main.db`
12
+ - **Embeddings**: Ollama + nomic-embed-text (768 dimensions)
13
+ - **TTS**: piper-tts via subprocess
14
+
15
+ ## Architecture
16
+
17
+ Service objects hold all logic. CLI and MCP are thin wrappers.
18
+
19
+ ```
20
+ lib/personality/
21
+ db.rb # SQLite connection, sqlite-vec, migrations
22
+ embedding.rb # Ollama HTTP client
23
+ chunker.rb # Text splitting (2000/200 overlap)
24
+ cart.rb # Persona management
25
+ memory.rb # Vector memory (cart-scoped)
26
+ indexer.rb # Code/doc indexing + semantic search
27
+ hooks.rb # Claude Code hook logging
28
+ context.rb # Session file-read tracking
29
+ tts.rb # Piper TTS synthesis + playback
30
+ cli.rb # Root Thor CLI
31
+ cli/ # Thor subcommands (thin wrappers)
32
+ mcp/server.rb # MCP server (uses official mcp gem)
33
+ ```
34
+
35
+ ## Key Dependencies
36
+
37
+ | Gem | Purpose |
38
+ |-----|---------|
39
+ | `mcp` ~> 0.9.1 | Official MCP Ruby SDK (modelcontextprotocol/ruby-sdk) |
40
+ | `sqlite3` + `sqlite-vec` | Database + vector search |
41
+ | `thor` | CLI framework |
42
+ | `pastel` + `tty-table` + `tty-spinner` | Terminal output |
43
+ | `toml-rb` | Config parsing |
44
+ | `llm.rb` | LLM client (future use) |
45
+
46
+ ## MCP Server Notes
47
+
48
+ - **Tool names use dots** not slashes: `memory.store`, `index.search` (MCP spec forbids `/`)
49
+ - **Tool blocks use keyword args**: `do |subject:, content:, server_context:, **opts|`
50
+ - **Must return `MCP::Tool::Response`**: `MCP::Tool::Response.new([{type: "text", text: json}])`
51
+ - **Protocol requires initialize handshake** before tools/call works
52
+ - See `docs/mcp-ruby-sdk.md` for full API reference
53
+
54
+ ## Commands
55
+
56
+ ```bash
57
+ bundle exec rspec --format documentation # Run tests
58
+ bundle exec ruby exe/psn help # CLI help
59
+ bundle exec ruby exe/psn memory store SUBJECT CONTENT
60
+ bundle exec ruby exe/psn tts speak "text" --voice bt7274
61
+ bundle exec ruby exe/psn-mcp # Start MCP server (stdio)
62
+ ```
63
+
64
+ ## Testing
65
+
66
+ Tests use RSpec. External dependencies are stubbed:
67
+ - `Personality::Embedding.generate` — stubbed with fake 768-dim vectors
68
+ - `Personality::DB` — uses temp databases per test, cleaned up in `after` blocks
69
+ - No Ollama or piper required for tests
70
+
71
+ Run: `bundle exec rspec --format documentation`
72
+
73
+ ## Database
74
+
75
+ Schema v2 with versioned migrations in `db.rb`:
76
+ - `carts` — persona registry
77
+ - `memories` + `vec_memories` — cart-scoped memory with vector embeddings
78
+ - `code_chunks` + `vec_code` — code index
79
+ - `doc_chunks` + `vec_docs` — doc index
80
+ - `schema_version` — migration tracking
81
+
82
+ sqlite-vec uses `vec0` virtual tables. Vector search pattern:
83
+ ```sql
84
+ SELECT m.*, v.distance FROM vec_memories v
85
+ INNER JOIN memories m ON m.id = v.memory_id
86
+ WHERE v.embedding MATCH ? AND k = ?
87
+ ORDER BY v.distance
88
+ ```