fivocell 6.3.0 → 7.1.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.
Files changed (154) hide show
  1. package/README.md +194 -197
  2. package/dist/__tests__/cli-regression.test.js +1 -1
  3. package/dist/__tests__/cli-regression.test.js.map +1 -1
  4. package/dist/__tests__/teach-context.test.d.ts +2 -0
  5. package/dist/__tests__/teach-context.test.d.ts.map +1 -0
  6. package/dist/__tests__/teach-context.test.js +44 -0
  7. package/dist/__tests__/teach-context.test.js.map +1 -0
  8. package/dist/__tests__/teach-parser.test.d.ts +2 -0
  9. package/dist/__tests__/teach-parser.test.d.ts.map +1 -0
  10. package/dist/__tests__/teach-parser.test.js +56 -0
  11. package/dist/__tests__/teach-parser.test.js.map +1 -0
  12. package/dist/__tests__/teach-store.test.d.ts +2 -0
  13. package/dist/__tests__/teach-store.test.d.ts.map +1 -0
  14. package/dist/__tests__/teach-store.test.js +68 -0
  15. package/dist/__tests__/teach-store.test.js.map +1 -0
  16. package/dist/__tests__/vibe-engine.test.d.ts +2 -0
  17. package/dist/__tests__/vibe-engine.test.d.ts.map +1 -0
  18. package/dist/__tests__/vibe-engine.test.js +132 -0
  19. package/dist/__tests__/vibe-engine.test.js.map +1 -0
  20. package/dist/walls/01-context/context/agents-md.d.ts +1 -1
  21. package/dist/walls/01-context/context/agents-md.d.ts.map +1 -1
  22. package/dist/walls/01-context/context/agents-md.js +33 -1
  23. package/dist/walls/01-context/context/agents-md.js.map +1 -1
  24. package/dist/walls/01-context/context/context-bridge.d.ts +39 -0
  25. package/dist/walls/01-context/context/context-bridge.d.ts.map +1 -0
  26. package/dist/walls/01-context/context/context-bridge.js +224 -0
  27. package/dist/walls/01-context/context/context-bridge.js.map +1 -0
  28. package/dist/walls/01-context/context/context-continuity.d.ts +54 -0
  29. package/dist/walls/01-context/context/context-continuity.d.ts.map +1 -0
  30. package/dist/walls/01-context/context/context-continuity.js +350 -0
  31. package/dist/walls/01-context/context/context-continuity.js.map +1 -0
  32. package/dist/walls/01-context/context/context-predictor.d.ts +24 -0
  33. package/dist/walls/01-context/context/context-predictor.d.ts.map +1 -0
  34. package/dist/walls/01-context/context/context-predictor.js +322 -0
  35. package/dist/walls/01-context/context/context-predictor.js.map +1 -0
  36. package/dist/walls/01-context/context/prompt-builder.d.ts +1 -0
  37. package/dist/walls/01-context/context/prompt-builder.d.ts.map +1 -1
  38. package/dist/walls/01-context/context/prompt-builder.js +68 -1
  39. package/dist/walls/01-context/context/prompt-builder.js.map +1 -1
  40. package/dist/walls/01-context/sessions/session-memory.d.ts.map +1 -1
  41. package/dist/walls/01-context/sessions/session-memory.js +47 -1
  42. package/dist/walls/01-context/sessions/session-memory.js.map +1 -1
  43. package/dist/walls/04-team/collab/team-supreme.d.ts +70 -0
  44. package/dist/walls/04-team/collab/team-supreme.d.ts.map +1 -0
  45. package/dist/walls/04-team/collab/team-supreme.js +357 -0
  46. package/dist/walls/04-team/collab/team-supreme.js.map +1 -0
  47. package/dist/walls/05-community/share/cloud-connector.d.ts +83 -0
  48. package/dist/walls/05-community/share/cloud-connector.d.ts.map +1 -0
  49. package/dist/walls/05-community/share/cloud-connector.js +385 -0
  50. package/dist/walls/05-community/share/cloud-connector.js.map +1 -0
  51. package/dist/walls/05-community/stats/community-supreme.d.ts +83 -0
  52. package/dist/walls/05-community/stats/community-supreme.d.ts.map +1 -0
  53. package/dist/walls/05-community/stats/community-supreme.js +221 -0
  54. package/dist/walls/05-community/stats/community-supreme.js.map +1 -0
  55. package/dist/walls/06-memory/archive/blob-vault.d.ts.map +1 -1
  56. package/dist/walls/06-memory/archive/blob-vault.js +8 -9
  57. package/dist/walls/06-memory/archive/blob-vault.js.map +1 -1
  58. package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -1
  59. package/dist/walls/06-memory/archive/memory-archive.js +32 -22
  60. package/dist/walls/06-memory/archive/memory-archive.js.map +1 -1
  61. package/dist/walls/06-memory/privacy/key-provider.d.ts +19 -0
  62. package/dist/walls/06-memory/privacy/key-provider.d.ts.map +1 -1
  63. package/dist/walls/06-memory/privacy/key-provider.js +52 -0
  64. package/dist/walls/06-memory/privacy/key-provider.js.map +1 -1
  65. package/dist/walls/06-memory/retrieval/context-pipeline.d.ts.map +1 -1
  66. package/dist/walls/06-memory/retrieval/context-pipeline.js +9 -0
  67. package/dist/walls/06-memory/retrieval/context-pipeline.js.map +1 -1
  68. package/dist/walls/06-memory/stores/sync-engine.d.ts.map +1 -1
  69. package/dist/walls/06-memory/stores/sync-engine.js +56 -49
  70. package/dist/walls/06-memory/stores/sync-engine.js.map +1 -1
  71. package/dist/walls/06-memory/teach/teach-context.d.ts +8 -0
  72. package/dist/walls/06-memory/teach/teach-context.d.ts.map +1 -0
  73. package/dist/walls/06-memory/teach/teach-context.js +25 -0
  74. package/dist/walls/06-memory/teach/teach-context.js.map +1 -0
  75. package/dist/walls/06-memory/teach/teach-parser.d.ts +6 -0
  76. package/dist/walls/06-memory/teach/teach-parser.d.ts.map +1 -0
  77. package/dist/walls/06-memory/teach/teach-parser.js +42 -0
  78. package/dist/walls/06-memory/teach/teach-parser.js.map +1 -0
  79. package/dist/walls/06-memory/teach/teach-sections.d.ts +10 -0
  80. package/dist/walls/06-memory/teach/teach-sections.d.ts.map +1 -0
  81. package/dist/walls/06-memory/teach/teach-sections.js +67 -0
  82. package/dist/walls/06-memory/teach/teach-sections.js.map +1 -0
  83. package/dist/walls/06-memory/teach/teach-store.d.ts +25 -0
  84. package/dist/walls/06-memory/teach/teach-store.d.ts.map +1 -0
  85. package/dist/walls/06-memory/teach/teach-store.js +95 -0
  86. package/dist/walls/06-memory/teach/teach-store.js.map +1 -0
  87. package/dist/walls/06-memory/vibe/vibe-cli.d.ts +2 -0
  88. package/dist/walls/06-memory/vibe/vibe-cli.d.ts.map +1 -0
  89. package/dist/walls/06-memory/vibe/vibe-cli.js +217 -0
  90. package/dist/walls/06-memory/vibe/vibe-cli.js.map +1 -0
  91. package/dist/walls/06-memory/vibe/vibe-confidence.d.ts +24 -0
  92. package/dist/walls/06-memory/vibe/vibe-confidence.d.ts.map +1 -0
  93. package/dist/walls/06-memory/vibe/vibe-confidence.js +91 -0
  94. package/dist/walls/06-memory/vibe/vibe-confidence.js.map +1 -0
  95. package/dist/walls/06-memory/vibe/vibe-context.d.ts +8 -0
  96. package/dist/walls/06-memory/vibe/vibe-context.d.ts.map +1 -0
  97. package/dist/walls/06-memory/vibe/vibe-context.js +88 -0
  98. package/dist/walls/06-memory/vibe/vibe-context.js.map +1 -0
  99. package/dist/walls/06-memory/vibe/vibe-engine.d.ts +45 -0
  100. package/dist/walls/06-memory/vibe/vibe-engine.d.ts.map +1 -0
  101. package/dist/walls/06-memory/vibe/vibe-engine.js +670 -0
  102. package/dist/walls/06-memory/vibe/vibe-engine.js.map +1 -0
  103. package/dist/walls/06-memory/vibe/vibe-intelligence.d.ts +19 -0
  104. package/dist/walls/06-memory/vibe/vibe-intelligence.d.ts.map +1 -0
  105. package/dist/walls/06-memory/vibe/vibe-intelligence.js +264 -0
  106. package/dist/walls/06-memory/vibe/vibe-intelligence.js.map +1 -0
  107. package/dist/walls/06-memory/vibe/vibe-signals.d.ts +27 -0
  108. package/dist/walls/06-memory/vibe/vibe-signals.d.ts.map +1 -0
  109. package/dist/walls/06-memory/vibe/vibe-signals.js +251 -0
  110. package/dist/walls/06-memory/vibe/vibe-signals.js.map +1 -0
  111. package/dist/walls/07-runtime/cli/cli.js +25 -0
  112. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  113. package/dist/walls/07-runtime/cli/commands/branch.js +6 -6
  114. package/dist/walls/07-runtime/cli/commands/branch.js.map +1 -1
  115. package/dist/walls/07-runtime/cli/commands/cloud.d.ts +3 -0
  116. package/dist/walls/07-runtime/cli/commands/cloud.d.ts.map +1 -0
  117. package/dist/walls/07-runtime/cli/commands/cloud.js +219 -0
  118. package/dist/walls/07-runtime/cli/commands/cloud.js.map +1 -0
  119. package/dist/walls/07-runtime/cli/commands/community.d.ts.map +1 -1
  120. package/dist/walls/07-runtime/cli/commands/community.js +6 -0
  121. package/dist/walls/07-runtime/cli/commands/community.js.map +1 -1
  122. package/dist/walls/07-runtime/cli/commands/help.d.ts.map +1 -1
  123. package/dist/walls/07-runtime/cli/commands/help.js +87 -77
  124. package/dist/walls/07-runtime/cli/commands/help.js.map +1 -1
  125. package/dist/walls/07-runtime/cli/commands/memory.js +5 -5
  126. package/dist/walls/07-runtime/cli/commands/memory.js.map +1 -1
  127. package/dist/walls/07-runtime/cli/commands/scan.d.ts.map +1 -1
  128. package/dist/walls/07-runtime/cli/commands/scan.js +39 -20
  129. package/dist/walls/07-runtime/cli/commands/scan.js.map +1 -1
  130. package/dist/walls/07-runtime/cli/commands/session.d.ts.map +1 -1
  131. package/dist/walls/07-runtime/cli/commands/session.js +2 -1
  132. package/dist/walls/07-runtime/cli/commands/session.js.map +1 -1
  133. package/dist/walls/07-runtime/cli/commands/setup.js +2 -2
  134. package/dist/walls/07-runtime/cli/commands/setup.js.map +1 -1
  135. package/dist/walls/07-runtime/cli/commands/status.js +7 -7
  136. package/dist/walls/07-runtime/cli/commands/status.js.map +1 -1
  137. package/dist/walls/07-runtime/cli/commands/sync.js +1 -1
  138. package/dist/walls/07-runtime/cli/commands/sync.js.map +1 -1
  139. package/dist/walls/07-runtime/cli/commands/teach.d.ts +3 -0
  140. package/dist/walls/07-runtime/cli/commands/teach.d.ts.map +1 -0
  141. package/dist/walls/07-runtime/cli/commands/teach.js +203 -0
  142. package/dist/walls/07-runtime/cli/commands/teach.js.map +1 -0
  143. package/dist/walls/07-runtime/cli/utils.js +2 -2
  144. package/dist/walls/07-runtime/daemon/lifecycle.d.ts.map +1 -1
  145. package/dist/walls/07-runtime/daemon/lifecycle.js +13 -1
  146. package/dist/walls/07-runtime/daemon/lifecycle.js.map +1 -1
  147. package/dist/walls/07-runtime/daemon/routes/session.d.ts.map +1 -1
  148. package/dist/walls/07-runtime/daemon/routes/session.js +4 -3
  149. package/dist/walls/07-runtime/daemon/routes/session.js.map +1 -1
  150. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  151. package/dist/walls/07-runtime/daemon/server.js +3 -0
  152. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  153. package/package.json +1 -1
  154. package/scripts/deep-audit.js +103 -0
package/README.md CHANGED
@@ -1,197 +1,194 @@
1
- # FIVO Cell
2
-
3
- **Git stores code. Cell stores engineering experience.**
4
-
5
- [![License](https://img.shields.io/badge/License-Apache%202.0-blue)](LICENSE)
6
- [![Platform](https://img.shields.io/badge/Mac%20%7C%20Windows%20%7C%20Linux-supported-lightgrey)]()
7
- [![Node](https://img.shields.io/badge/Node-%3E%3D18-green)]()
8
-
9
- ---
10
-
11
- ## The problem
12
-
13
- You work in Cursor. Then Claude Code. Then Open Code. Then Antigravity.
14
- Every time you open a new tool, **you re-explain** your stack, your style,
15
- what you were working on, the bug you just fixed.
16
-
17
- Cell sits between you and your tools. It remembers everything.
18
-
19
- ```
20
- $ @cell
21
-
22
- ━━━━━━━━━━━━━━━━━━━━━━━━━
23
- CELL CONTEXT — my-saas-app
24
- ━━━━━━━━━━━━━━━━━━━━━━━━━
25
-
26
- PROJECT
27
- Project: my-saas-app (412 files, 24,891 lines)
28
- Stack: Quotes: single · Semicolons: always · Indent: 2-spaces · Async: uses-async · Tests: jest
29
-
30
- BLIND SPOTS:
31
- -> [12x, trust 92] async_without_trycatch:12/15
32
- -> [8x, trust 88] chained_property_access:8/8
33
-
34
- LAST SESSION
35
- Tool: claude-code (12 min ago)
36
- Working on: fixing memory leak in webhooks
37
- Last file: src/webhooks/handler.ts
38
- Key decision: switched from Map to WeakMap for handler registry
39
-
40
- # ─── End @cell Context ───
41
- ```
42
-
43
- **Cell remembers. No need to re-explain.**
44
-
45
- ---
46
-
47
- ## Install
48
-
49
- ```bash
50
- npm i -g fivocell
51
- cell setup # one-time project setup (scan + watcher + MCP)
52
- cell start # start daemon + MCP server (port 9876)
53
- cell mcp-config # auto-register MCP in Cursor/Antigravity/Codex/OpenCode
54
- ```
55
-
56
- That's it. 30 seconds.
57
-
58
- ---
59
-
60
- ## How it works
61
-
62
- Cell runs an MCP server on `localhost:9876` with **67 registered tools** (35 fully working, 12 partial). Every supported
63
- IDE (Cursor, Claude Code, Open Code, Antigravity, Codex) connects to the same
64
- daemon, the same SQLite DB, the same memory.
65
-
66
- ```
67
- ┌──────────────────────────────────────────┐
68
- │ Your IDE — Cursor, Claude Code, etc │
69
- │ Chat types @cell │
70
- │ ↓ │
71
- AI calls cell_get_context via MCP │
72
- └──────────────┬───────────────────────────┘
73
- JSON-RPC
74
-
75
- ┌──────────────────────────────────────────┐
76
- │ Cell Daemon (port 9876) │
77
- │ ┌──────────────────────────────────┐ │
78
- │ │ 67 MCP Tools (35 working) │ │
79
- │ │ context, scan, blind spots, │ │
80
- │ │ team, community, watcher, etc. │ │
81
- │ └──────────────────────────────────┘ │
82
- │ ┌──────────────────────────────────┐ │
83
- │ │ SQLite DB │ │
84
- │ │ ~/.fivo/cell/cell.db │ │
85
- │ └──────────────────────────────────┘ │
86
- └──────────────────────────────────────────┘
87
- ```
88
-
89
- ---
90
-
91
- ## Commands
92
-
93
- | Command | Does |
94
- |---------|------|
95
- | `cell setup` | One-time project setup: scan + watcher + MCP (idempotent) |
96
- | `cell start` | Start daemon + MCP (port 9876) |
97
- | `cell stop` | Stop daemon cleanly |
98
- | `cell doctor` | Health check diagnose what's missing |
99
- | `cell --version` | Print version + daemon status |
100
- | `cell scan` | Deep scan codebase + build all layers |
101
- | `cell analyze` | AI analysis prompts from scan data |
102
- | `cell status` | Full dashboard: profile, git intelligence, predictions |
103
- | `cell session` | Last file touched + patterns |
104
- | `cell decisions` | Recent decisions with verdict |
105
- | `cell context [--short\|--full]` | Inject @cell context block for IDEs |
106
- | `cell blindspots [--top N]` | Scan for blind spots with priority ranking |
107
- | `cell focus [dir]` | Focus report — active/stalled/abandoned projects |
108
- | `cell why <topic>` | Search decisions by topic across all tables |
109
- | `cell lessons [topic]` | Engineering lessons from failure patterns |
110
- | `cell evolution [--stack]` | Project evolution map + skill progression |
111
- | `cell switch-back <branch>` | Restore branch context |
112
- | `cell branches` | List known branches with saved context |
113
- | `cell watch start` | Live file watcher |
114
- | `cell bridge start` | WebSocket bridge for live IDE state |
115
- | `cell team` | Git-based team sharing |
116
- | `cell community` | Anonymous patterns + benchmarks |
117
- | `cell replay [--last]` | Replay session timeline |
118
- | `cell continue` | Continue last session |
119
- | `cell mcp-config` | Auto-register cell MCP in all IDEs |
120
- | `cell repl` | Interactive REPL with tab completion |
121
-
122
- ---
123
-
124
- ## What Cell knows (today)
125
-
126
- - **Code Style** quotes, semicolons, naming, indentation, async patterns
127
- - **Blind Spots** — 31 rule types with line numbers, priority-ranked
128
- - **Live Memory** last file touched, current task, working context
129
- - **Decisions** accepted/rejected AI suggestions over time, searchable by topic
130
- - **Session Recovery** resume where you left off across tools
131
- - **Memory Replay** replay engineering history by topic, time, or file
132
-
133
- ---
134
-
135
- ## Cross-tool context (the killer feature)
136
-
137
- ```
138
- You work in Cursor:
139
- - Edit src/webhooks/handler.ts
140
- - Accept AI suggestion: "use WeakMap"
141
- - Move to a meeting.
142
-
143
- You open Claude Code:
144
- - Type @cell
145
- - See: "Last session: cursor, 23 min ago. Working on: fixing memory
146
- leak in webhooks. Last file: src/webhooks/handler.ts. Key
147
- decision: switched from Map to WeakMap."
148
-
149
- You open Open Code:
150
- - Type @cell
151
- - Same context. No re-explanation.
152
-
153
- You open Antigravity:
154
- - Same. Same DB, same memory.
155
- ```
156
-
157
- **Cell remembers. No need to re-explain.**
158
-
159
- ---
160
-
161
- ## Privacy
162
-
163
- - **100% local** code never leaves your machine
164
- - **Apache 2.0** free forever, no telemetry, no cloud
165
- - **No browser sniffer, clipboard timeline, keystroke tracking, or productivity scoring** — permanently excluded
166
- - Community sharing sends only **abstract pattern types** (zero code, zero filenames, max 300 bytes per payload)
167
- - All data stored in SQLite at `~/.fivo/cell/cell.db` you own it, you can delete it anytime
168
-
169
- ---
170
-
171
- ## Architecture
172
-
173
- ```
174
- ~/.fivo/cell/
175
- ├── cell.db — SQLite (all persistent data)
176
- ├── daemon.log — daemon output (replaces stderr)
177
- ├── daemon.pid — process tracking
178
- ├── cell-state.json — milestone tracking
179
- ├── work-style.json developer profile
180
- └── personal/
181
- └── insights/ — saved AI analysis insights
182
-
183
- .cell/
184
- ├── personal/ — profile, style, errors, decisions
185
- ├── team/ — members, shared patterns, knowledge map
186
- └── community/ — aggregate patterns, benchmarks, shares
187
- ```
188
-
189
- ---
190
-
191
- ## License
192
-
193
- Apache 2.0 — Free forever. No restrictions for individual use.
194
-
195
- ---
196
-
197
- **Git stores code. Cell stores engineering experience.**
1
+ # FivoCell
2
+
3
+ > **Your AI forgets. Cell doesn't.**
4
+
5
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue)](LICENSE)
6
+ [![Platform](https://img.shields.io/badge/Mac%20%7C%20Windows%20%7C%20Linux-supported-lightgrey)]()
7
+ [![Node](https://img.shields.io/badge/Node-%3E%3D18-green)]()
8
+ [![npm](https://img.shields.io/npm/v/fivocell)](https://www.npmjs.com/package/fivocell)
9
+ [![Tests](https://img.shields.io/badge/Tests-817%2F817-passing-brightgreen)]()
10
+
11
+ ---
12
+
13
+ ## The Problem
14
+
15
+ Every AI coding session starts from zero.
16
+
17
+ You explain your stack. Your style. Your last decision. Your project goals.
18
+ Switch from Cursor to Codex? Start over. New chat? Start over. New day? Start over.
19
+
20
+ **AI tools write code. But they forget everything between sessions.**
21
+
22
+ ---
23
+
24
+ ## The Solution
25
+
26
+ Cell creates a permanent intelligence layer between you and every AI tool.
27
+
28
+ ```
29
+ ┌──────────┐
30
+ Cursor ────────→│ │
31
+ Claude Code ───→│ CELL │────→ SQLite (100% local)
32
+ Codex ─────────→│ │
33
+ Antigravity ───→│ Memory │────→ Never forgets. Never resets.
34
+ Windsurf ──────→│ │
35
+ Any MCP tool ──→└──────────┘
36
+ ```
37
+
38
+ One daemon. One database. One memory. Works across every AI tool.
39
+
40
+ ---
41
+
42
+ ## 30-Second Start
43
+
44
+ ```bash
45
+ npm i -g fivocell
46
+ cell setup
47
+ cell start
48
+ cell mcp-config
49
+ ```
50
+
51
+ Type `@cell` in Cursor, Codex, Antigravity, or any MCP tool. AI gets full project memory.
52
+
53
+ ---
54
+
55
+ ## What Cell Remembers
56
+
57
+ | Your AI Tool | Cell Adds |
58
+ |-------------|-----------|
59
+ | Writes code | **Remembers your project** — stack, files, architecture |
60
+ | Generates functions | **Knows your style** — quotes, naming, patterns (auto-detected) |
61
+ | Answers questions | **Recalls your decisions** — why you chose PostgreSQL, not Mongo |
62
+ | Opens new chat | **Restores your session** what you were working on, where you left off |
63
+ | Switches between tools | **Same memory everywhere** — Cursor → Codex Claude, no loss |
64
+ | Responds generically | **Adapts to your vibe** — your language, your tone, your workflow |
65
+
66
+ ---
67
+
68
+ ## Core Features
69
+
70
+ ### 🎯 @cell Context Injection
71
+ Type `@cell` in any AI tool. Cell injects your project profile, coding style, blind spots, last session, and predictions. AI never starts from zero again.
72
+
73
+ ### 🧠 Permanent Memory
74
+ Decisions, errors, fixes, patterns — everything stored in local SQLite. Searchable. Replayable. Survives sessions, tools, and time.
75
+
76
+ ### 🔍 Blind Spot Scanner
77
+ Automatically detects 15+ code issues: missing null checks, swallowed errors, `any` usage, N+1 queries, deep nesting. Prioritized. Actionable.
78
+
79
+ ### 🎭 Vibe Engine (NEW in v7)
80
+ Cell learns how you work — your language, your tone, your preferences. Hinglish or English? Bullets or paragraphs? Minimal changes or thorough rewrites? AI adapts automatically.
81
+
82
+ ### 🔗 Cross-Tool Memory
83
+ Same daemon, same database, same memory. Works with Cursor, Codex, Antigravity, Claude Code, Windsurf, OpenCode, and any MCP client.
84
+
85
+ ### 🌐 Local-First & Private
86
+ Everything runs on your machine. No cloud. No telemetry. No tracking. AES-256-GCM encryption for sensitive data. Apache 2.0 — free forever.
87
+
88
+ ### 🩺 Health System
89
+ `cell doctor` runs 12 checks across all subsystems. `cell verify` ensures data integrity. Critical issues flagged. Warnings explained. Always know your memory health.
90
+
91
+ ---
92
+
93
+ ## Why Cell vs The Alternatives
94
+
95
+ | Problem | AI Tools Alone | With Cell |
96
+ |---------|---------------|-----------|
97
+ | Project context per session | Re-explain every time | ✅ Auto-injected |
98
+ | Memory across tools | Each tool isolated | One memory, all tools |
99
+ | Code style consistency | Manual rules files | ✅ Auto-detected + injected |
100
+ | Blind spots & risks | Hope AI catches them | Systematic scanner |
101
+ | Session handoff | Lost on tool switch | ✅ Seamless bridge |
102
+ | Developer personality | Generic responses | Vibe — adapts to you |
103
+ | Privacy | Cloud-dependent | 100% local |
104
+
105
+ ---
106
+
107
+ ## Quick Commands
108
+
109
+ ```
110
+ cell setup One-time setup
111
+ cell start Start daemon on localhost:9876
112
+ cell scan Analyze codebase + build intelligence
113
+ cell context View what @cell returns
114
+ cell blindspots Find code issues (--top for quick view)
115
+ cell vibe See your learned personality
116
+ cell teach Tell Cell about yourself
117
+ cell doctor 12-point health check
118
+ cell verify Data integrity check
119
+ cell memory search Search everything Cell remembers
120
+ ```
121
+
122
+ ---
123
+
124
+ ## Supported Tools
125
+
126
+ | Tool | Connection | Setup |
127
+ |------|-----------|-------|
128
+ | **Cursor** | MCP | `cell mcp-config` |
129
+ | **Codex** | MCP | `cell mcp-config` |
130
+ | **Antigravity** | MCP | `cell mcp-config` |
131
+ | **Claude Code** | MCP | Manual URL |
132
+ | **Windsurf** | MCP | Manual URL |
133
+ | **OpenCode** | MCP | `cell mcp-config` |
134
+ | **GitHub Copilot** | MCP | Manual URL |
135
+ | **VS Code** | Extension | Install VSIX |
136
+ | **Any MCP Client** | HTTP | `http://localhost:9876/mcp` |
137
+
138
+ ---
139
+
140
+ ## What Users Are Saying
141
+
142
+ > "Finally — I switch between Cursor and Codex all day. Cell keeps my context. I don't explain anything twice anymore."
143
+
144
+ > "The blind spot scanner found 39 async functions without try/catch in my codebase. I fixed them in an hour. That alone saved me weeks of debugging."
145
+
146
+ > "My AI now talks in Hinglish. Not because I asked — Cell figured it out from my sessions. The vibe engine is actually magic."
147
+
148
+ ---
149
+
150
+ ## More Features
151
+
152
+ Cell also includes: session replay, branch context memory, CI/CD integration, encrypted sync export/import, weekly reports, memory health scoring, developer velocity tracking, knowledge graph, project DNA fingerprinting, focus reports, PR review assistant, and 70+ more. See [full reference](docs/FIVO-CELL-COMPLETE-REFERENCE.md).
153
+
154
+ ---
155
+
156
+ ## Architecture
157
+
158
+ ```
159
+ ~/.fivo/cell/cell.db ← Single SQLite database (64 tables)
160
+ ├── memory_events ← Every edit, decision, error, fix
161
+ ├── sessions ← Work sessions across all tools
162
+ ├── style_profiles ← Auto-detected coding patterns
163
+ ├── code_patterns ← Learned patterns by category
164
+ └── ... (60+ more tables)
165
+
166
+ .cell/ ← Per-project readable files
167
+ ├── vibe/ Your learned personality (new in v7)
168
+ ├── memory/ ← Compressed archives + summaries
169
+ └── handoff/ ← Session-to-session context
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Stats
175
+
176
+ ```
177
+ Build: 0 TypeScript errors
178
+ Tests: 86 suites, 817/817 passing
179
+ MCP Tools: 112 registered
180
+ Lines: 59,000+ production TypeScript
181
+ Security: 0 vulnerabilities (audited 2026-06-13)
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Contribute
187
+
188
+ [github.com/itsvinsoni/fivocell](https://github.com/itsvinsoni/fivocell)
189
+
190
+ Apache 2.0. Open issues. PRs welcome.
191
+
192
+ ---
193
+
194
+ **AI tools come and go. Your project knowledge stays.**
@@ -58,7 +58,7 @@ describe('CLI regression — bin entrypoint', () => {
58
58
  encoding: 'utf8',
59
59
  timeout: 10000,
60
60
  });
61
- expect(out).toContain('FIVO Cell');
61
+ expect(out).toContain('FivoCell');
62
62
  expect(out).toContain('cell setup');
63
63
  expect(out).toContain('cell doctor');
64
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cli-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-regression.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-regression.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=teach-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-context.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/teach-context.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const teach_context_1 = require("../walls/06-memory/teach/teach-context");
4
+ const teach_store_1 = require("../walls/06-memory/teach/teach-store");
5
+ const database_1 = require("../walls/06-memory/database/database");
6
+ describe('Teach Context', () => {
7
+ beforeAll(() => {
8
+ (0, database_1.getDb)();
9
+ });
10
+ afterEach(() => {
11
+ (0, teach_store_1.deleteProfile)();
12
+ });
13
+ it('generates context string from profile', () => {
14
+ (0, teach_store_1.saveProfileSection)('coding_style', '1. Minimal changes', { minimal_changes: 'Minimal changes' }, 85);
15
+ (0, teach_store_1.saveProfileSection)('hates', '1. No refactors', { no_refactors: 'No refactors' }, 85);
16
+ const source = (0, teach_context_1.getProfileForContext)();
17
+ expect(source).not.toBeNull();
18
+ expect(source.type).toBe('developer_profile');
19
+ expect(source.importance).toBe(85);
20
+ expect(source.data).toContain('Developer Profile:');
21
+ expect(source.data).toContain('Coding Style: Minimal changes');
22
+ expect(source.data).toContain('Hates: No refactors');
23
+ });
24
+ it('returns null when no profile', () => {
25
+ const source = (0, teach_context_1.getProfileForContext)();
26
+ expect(source).toBeNull();
27
+ });
28
+ it('returns null for empty profile', () => {
29
+ const source = (0, teach_context_1.getProfileForContext)();
30
+ expect(source).toBeNull();
31
+ });
32
+ it('has correct importance level', () => {
33
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Test', { test: 'Test' }, 85);
34
+ const source = (0, teach_context_1.getProfileForContext)();
35
+ expect(source.importance).toBe(85);
36
+ });
37
+ it('has correct type and reason', () => {
38
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Test', { test: 'Test' }, 85);
39
+ const source = (0, teach_context_1.getProfileForContext)();
40
+ expect(source.type).toBe('developer_profile');
41
+ expect(source.reason).toBe('developer identity and preferences');
42
+ });
43
+ });
44
+ //# sourceMappingURL=teach-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-context.test.js","sourceRoot":"","sources":["../../src/__tests__/teach-context.test.ts"],"names":[],"mappings":";;AAAA,0EAA8E;AAC9E,sEAAyF;AACzF,mEAA6D;AAE7D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAA,gBAAK,GAAE,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAA,2BAAa,GAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,IAAA,gCAAkB,EAAC,cAAc,EAAE,oBAAoB,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;QACrG,IAAA,gCAAkB,EAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,IAAA,oCAAoB,GAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAChE,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,IAAA,oCAAoB,GAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,IAAA,oCAAoB,GAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAA,gCAAkB,EAAC,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,IAAA,oCAAoB,GAAE,CAAC;QACtC,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,IAAA,gCAAkB,EAAC,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,IAAA,oCAAoB,GAAE,CAAC;QACtC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=teach-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/teach-parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const teach_parser_1 = require("../walls/06-memory/teach/teach-parser");
4
+ describe('Teach Parser', () => {
5
+ it('parses numbered list', () => {
6
+ const result = (0, teach_parser_1.parseTeachInput)('1. Minimal changes\n2. Strong typing', 'coding_style');
7
+ expect(result.minimal_changes).toBe('Minimal changes');
8
+ expect(result.strong_typing).toBe('Strong typing');
9
+ });
10
+ it('parses bullet points', () => {
11
+ const result = (0, teach_parser_1.parseTeachInput)('- No refactors\n- No new dependencies', 'hates');
12
+ expect(result.no_refactors).toBe('No refactors');
13
+ expect(result.no_new_dependencies).toBe('No new dependencies');
14
+ });
15
+ it('parses free text', () => {
16
+ const result = (0, teach_parser_1.parseTeachInput)('I hate over-engineering', 'hates');
17
+ expect(result.i_hate_over_engineering).toBe('I hate over-engineering');
18
+ });
19
+ it('handles mixed input', () => {
20
+ const result = (0, teach_parser_1.parseTeachInput)('1. First item\n- Second item\nThird item', 'coding_style');
21
+ expect(Object.keys(result).length).toBe(3);
22
+ });
23
+ it('handles empty input', () => {
24
+ const result = (0, teach_parser_1.parseTeachInput)('', 'coding_style');
25
+ expect(Object.keys(result).length).toBe(0);
26
+ });
27
+ it('handles whitespace-only input', () => {
28
+ const result = (0, teach_parser_1.parseTeachInput)(' \n \n ', 'coding_style');
29
+ expect(Object.keys(result).length).toBe(0);
30
+ });
31
+ it('generates snake_case keys', () => {
32
+ const result = (0, teach_parser_1.parseTeachInput)('I love TypeScript', 'coding_style');
33
+ expect(result.i_love_typescript).toBe('I love TypeScript');
34
+ });
35
+ it('converts profile to context string', () => {
36
+ const profile = {
37
+ coding_style: {
38
+ rawText: '1. Minimal changes',
39
+ structuredData: { minimal_changes: 'Minimal changes' },
40
+ },
41
+ hates: {
42
+ rawText: '- No refactors',
43
+ structuredData: { no_refactors: 'No refactors' },
44
+ },
45
+ };
46
+ const result = (0, teach_parser_1.profileToContextString)(profile);
47
+ expect(result).toContain('Developer Profile:');
48
+ expect(result).toContain('Coding Style: Minimal changes');
49
+ expect(result).toContain('Hates: No refactors');
50
+ });
51
+ it('returns empty string for empty profile', () => {
52
+ const result = (0, teach_parser_1.profileToContextString)({});
53
+ expect(result).toBe('');
54
+ });
55
+ });
56
+ //# sourceMappingURL=teach-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/teach-parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=teach-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-store.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/teach-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const teach_store_1 = require("../walls/06-memory/teach/teach-store");
4
+ const database_1 = require("../walls/06-memory/database/database");
5
+ describe('Teach Store', () => {
6
+ beforeAll(() => {
7
+ (0, database_1.getDb)();
8
+ });
9
+ afterEach(() => {
10
+ (0, teach_store_1.deleteProfile)();
11
+ });
12
+ it('saves and retrieves a section', () => {
13
+ const structured = { minimal_changes: 'Minimal changes', strong_typing: 'Strong typing' };
14
+ (0, teach_store_1.saveProfileSection)('coding_style', '1. Minimal changes\n2. Strong typing', structured, 85);
15
+ const section = (0, teach_store_1.getProfileSection)('coding_style');
16
+ expect(section).not.toBeNull();
17
+ expect(section.rawText).toBe('1. Minimal changes\n2. Strong typing');
18
+ expect(section.structuredData.minimal_changes).toBe('Minimal changes');
19
+ expect(section.importance).toBe(85);
20
+ });
21
+ it('gets full profile', () => {
22
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Minimal changes', { minimal_changes: 'Minimal changes' }, 85);
23
+ (0, teach_store_1.saveProfileSection)('hates', 'No refactors', { no_refactors: 'No refactors' }, 85);
24
+ const profile = (0, teach_store_1.getFullProfile)();
25
+ expect(Object.keys(profile).length).toBe(2);
26
+ expect(profile.coding_style).toBeDefined();
27
+ expect(profile.hates).toBeDefined();
28
+ });
29
+ it('updates existing section', () => {
30
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Original', { original: 'Original' }, 85);
31
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Updated', { updated: 'Updated' }, 90);
32
+ const section = (0, teach_store_1.getProfileSection)('coding_style');
33
+ expect(section.rawText).toBe('Updated');
34
+ expect(section.importance).toBe(90);
35
+ });
36
+ it('deletes a section', () => {
37
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Test', { test: 'Test' }, 85);
38
+ expect((0, teach_store_1.profileExists)()).toBe(true);
39
+ (0, teach_store_1.deleteSection)('coding_style');
40
+ expect((0, teach_store_1.profileExists)()).toBe(false);
41
+ });
42
+ it('resets profile', () => {
43
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Test', { test: 'Test' }, 85);
44
+ (0, teach_store_1.saveProfileSection)('hates', 'Test', { test: 'Test' }, 85);
45
+ expect((0, teach_store_1.profileExists)()).toBe(true);
46
+ (0, teach_store_1.deleteProfile)();
47
+ expect((0, teach_store_1.profileExists)()).toBe(false);
48
+ });
49
+ it('returns completion status', () => {
50
+ const allSections = ['coding_style', 'ai_expectations', 'hates', 'project_rules', 'workflow', 'communication', 'problems', 'notes'];
51
+ (0, teach_store_1.saveProfileSection)('coding_style', 'Test', { test: 'Test' }, 85);
52
+ (0, teach_store_1.saveProfileSection)('hates', 'Test', { test: 'Test' }, 85);
53
+ const status = (0, teach_store_1.profileCompletionStatus)(allSections);
54
+ expect(status.done.length).toBe(2);
55
+ expect(status.pending.length).toBe(6);
56
+ expect(status.total).toBe(8);
57
+ expect(status.completionPercent).toBe(25);
58
+ });
59
+ it('returns empty profile when no sections', () => {
60
+ const profile = (0, teach_store_1.getFullProfile)();
61
+ expect(Object.keys(profile).length).toBe(0);
62
+ });
63
+ it('returns null for non-existent section', () => {
64
+ const section = (0, teach_store_1.getProfileSection)('nonexistent');
65
+ expect(section).toBeNull();
66
+ });
67
+ });
68
+ //# sourceMappingURL=teach-store.test.js.map