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.
- checksums.yaml +4 -4
- data/CLAUDE.md +88 -0
- data/PLAN.md +621 -0
- data/README.md +0 -4
- data/TODO.md +65 -0
- data/docs/mcp-ruby-sdk.md +193 -0
- data/exe/psn +6 -0
- data/exe/psn-mcp +7 -0
- data/exe/psn-tts +7 -0
- data/lib/personality/cart.rb +75 -0
- data/lib/personality/cart_manager.rb +292 -0
- data/lib/personality/chunker.rb +27 -0
- data/lib/personality/cli/cart.rb +228 -0
- data/lib/personality/cli/context.rb +67 -0
- data/lib/personality/cli/hooks.rb +120 -0
- data/lib/personality/cli/index.rb +147 -0
- data/lib/personality/cli/memory.rb +130 -0
- data/lib/personality/cli/tts.rb +140 -0
- data/lib/personality/cli.rb +54 -0
- data/lib/personality/context.rb +73 -0
- data/lib/personality/db.rb +148 -0
- data/lib/personality/embedding.rb +44 -0
- data/lib/personality/hooks.rb +143 -0
- data/lib/personality/indexer.rb +215 -0
- data/lib/personality/init.rb +257 -0
- data/lib/personality/mcp/server.rb +465 -0
- data/lib/personality/mcp/tts_server.rb +126 -0
- data/lib/personality/memory.rb +125 -0
- data/lib/personality/persona_builder.rb +193 -0
- data/lib/personality/training_parser.rb +167 -0
- data/lib/personality/tts.rb +191 -0
- data/lib/personality/version.rb +1 -1
- data/lib/personality.rb +15 -6
- metadata +258 -33
- data/.tool-versions +0 -1
- data/AGENTS.md +0 -111
- data/LICENSE.txt +0 -21
- data/cartridges/spark.yml +0 -85
- data/config.yml +0 -36
- data/exe/personality +0 -6
- data/exe/personality-tts +0 -75
- data/lib/personality/config.rb +0 -142
- data/lib/personality/history.rb +0 -87
- data/lib/personality/server.rb +0 -636
- data/quotes.txt +0 -91
- data/sig/personality.rbs +0 -4
- data/tools.yml +0 -70
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a2273778acdb1598ceb17d7fe5b8f5ccdee60434e056b88ccd5ee844413821f8
|
|
4
|
+
data.tar.gz: 7715ff4043b7a2d0eaec8a1c30c4f39fb3695ad642927d3dc7468cec4dc5d473
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
+
```
|