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.
- package/README.md +194 -197
- package/dist/__tests__/cli-regression.test.js +1 -1
- package/dist/__tests__/cli-regression.test.js.map +1 -1
- package/dist/__tests__/teach-context.test.d.ts +2 -0
- package/dist/__tests__/teach-context.test.d.ts.map +1 -0
- package/dist/__tests__/teach-context.test.js +44 -0
- package/dist/__tests__/teach-context.test.js.map +1 -0
- package/dist/__tests__/teach-parser.test.d.ts +2 -0
- package/dist/__tests__/teach-parser.test.d.ts.map +1 -0
- package/dist/__tests__/teach-parser.test.js +56 -0
- package/dist/__tests__/teach-parser.test.js.map +1 -0
- package/dist/__tests__/teach-store.test.d.ts +2 -0
- package/dist/__tests__/teach-store.test.d.ts.map +1 -0
- package/dist/__tests__/teach-store.test.js +68 -0
- package/dist/__tests__/teach-store.test.js.map +1 -0
- package/dist/__tests__/vibe-engine.test.d.ts +2 -0
- package/dist/__tests__/vibe-engine.test.d.ts.map +1 -0
- package/dist/__tests__/vibe-engine.test.js +132 -0
- package/dist/__tests__/vibe-engine.test.js.map +1 -0
- package/dist/walls/01-context/context/agents-md.d.ts +1 -1
- package/dist/walls/01-context/context/agents-md.d.ts.map +1 -1
- package/dist/walls/01-context/context/agents-md.js +33 -1
- package/dist/walls/01-context/context/agents-md.js.map +1 -1
- package/dist/walls/01-context/context/context-bridge.d.ts +39 -0
- package/dist/walls/01-context/context/context-bridge.d.ts.map +1 -0
- package/dist/walls/01-context/context/context-bridge.js +224 -0
- package/dist/walls/01-context/context/context-bridge.js.map +1 -0
- package/dist/walls/01-context/context/context-continuity.d.ts +54 -0
- package/dist/walls/01-context/context/context-continuity.d.ts.map +1 -0
- package/dist/walls/01-context/context/context-continuity.js +350 -0
- package/dist/walls/01-context/context/context-continuity.js.map +1 -0
- package/dist/walls/01-context/context/context-predictor.d.ts +24 -0
- package/dist/walls/01-context/context/context-predictor.d.ts.map +1 -0
- package/dist/walls/01-context/context/context-predictor.js +322 -0
- package/dist/walls/01-context/context/context-predictor.js.map +1 -0
- package/dist/walls/01-context/context/prompt-builder.d.ts +1 -0
- package/dist/walls/01-context/context/prompt-builder.d.ts.map +1 -1
- package/dist/walls/01-context/context/prompt-builder.js +68 -1
- package/dist/walls/01-context/context/prompt-builder.js.map +1 -1
- package/dist/walls/01-context/sessions/session-memory.d.ts.map +1 -1
- package/dist/walls/01-context/sessions/session-memory.js +47 -1
- package/dist/walls/01-context/sessions/session-memory.js.map +1 -1
- package/dist/walls/04-team/collab/team-supreme.d.ts +70 -0
- package/dist/walls/04-team/collab/team-supreme.d.ts.map +1 -0
- package/dist/walls/04-team/collab/team-supreme.js +357 -0
- package/dist/walls/04-team/collab/team-supreme.js.map +1 -0
- package/dist/walls/05-community/share/cloud-connector.d.ts +83 -0
- package/dist/walls/05-community/share/cloud-connector.d.ts.map +1 -0
- package/dist/walls/05-community/share/cloud-connector.js +385 -0
- package/dist/walls/05-community/share/cloud-connector.js.map +1 -0
- package/dist/walls/05-community/stats/community-supreme.d.ts +83 -0
- package/dist/walls/05-community/stats/community-supreme.d.ts.map +1 -0
- package/dist/walls/05-community/stats/community-supreme.js +221 -0
- package/dist/walls/05-community/stats/community-supreme.js.map +1 -0
- package/dist/walls/06-memory/archive/blob-vault.d.ts.map +1 -1
- package/dist/walls/06-memory/archive/blob-vault.js +8 -9
- package/dist/walls/06-memory/archive/blob-vault.js.map +1 -1
- package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -1
- package/dist/walls/06-memory/archive/memory-archive.js +32 -22
- package/dist/walls/06-memory/archive/memory-archive.js.map +1 -1
- package/dist/walls/06-memory/privacy/key-provider.d.ts +19 -0
- package/dist/walls/06-memory/privacy/key-provider.d.ts.map +1 -1
- package/dist/walls/06-memory/privacy/key-provider.js +52 -0
- package/dist/walls/06-memory/privacy/key-provider.js.map +1 -1
- package/dist/walls/06-memory/retrieval/context-pipeline.d.ts.map +1 -1
- package/dist/walls/06-memory/retrieval/context-pipeline.js +9 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.js.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.d.ts.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.js +56 -49
- package/dist/walls/06-memory/stores/sync-engine.js.map +1 -1
- package/dist/walls/06-memory/teach/teach-context.d.ts +8 -0
- package/dist/walls/06-memory/teach/teach-context.d.ts.map +1 -0
- package/dist/walls/06-memory/teach/teach-context.js +25 -0
- package/dist/walls/06-memory/teach/teach-context.js.map +1 -0
- package/dist/walls/06-memory/teach/teach-parser.d.ts +6 -0
- package/dist/walls/06-memory/teach/teach-parser.d.ts.map +1 -0
- package/dist/walls/06-memory/teach/teach-parser.js +42 -0
- package/dist/walls/06-memory/teach/teach-parser.js.map +1 -0
- package/dist/walls/06-memory/teach/teach-sections.d.ts +10 -0
- package/dist/walls/06-memory/teach/teach-sections.d.ts.map +1 -0
- package/dist/walls/06-memory/teach/teach-sections.js +67 -0
- package/dist/walls/06-memory/teach/teach-sections.js.map +1 -0
- package/dist/walls/06-memory/teach/teach-store.d.ts +25 -0
- package/dist/walls/06-memory/teach/teach-store.d.ts.map +1 -0
- package/dist/walls/06-memory/teach/teach-store.js +95 -0
- package/dist/walls/06-memory/teach/teach-store.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-cli.d.ts +2 -0
- package/dist/walls/06-memory/vibe/vibe-cli.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-cli.js +217 -0
- package/dist/walls/06-memory/vibe/vibe-cli.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-confidence.d.ts +24 -0
- package/dist/walls/06-memory/vibe/vibe-confidence.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-confidence.js +91 -0
- package/dist/walls/06-memory/vibe/vibe-confidence.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-context.d.ts +8 -0
- package/dist/walls/06-memory/vibe/vibe-context.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-context.js +88 -0
- package/dist/walls/06-memory/vibe/vibe-context.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-engine.d.ts +45 -0
- package/dist/walls/06-memory/vibe/vibe-engine.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-engine.js +670 -0
- package/dist/walls/06-memory/vibe/vibe-engine.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-intelligence.d.ts +19 -0
- package/dist/walls/06-memory/vibe/vibe-intelligence.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-intelligence.js +264 -0
- package/dist/walls/06-memory/vibe/vibe-intelligence.js.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-signals.d.ts +27 -0
- package/dist/walls/06-memory/vibe/vibe-signals.d.ts.map +1 -0
- package/dist/walls/06-memory/vibe/vibe-signals.js +251 -0
- package/dist/walls/06-memory/vibe/vibe-signals.js.map +1 -0
- package/dist/walls/07-runtime/cli/cli.js +25 -0
- package/dist/walls/07-runtime/cli/cli.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/branch.js +6 -6
- package/dist/walls/07-runtime/cli/commands/branch.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/cloud.d.ts +3 -0
- package/dist/walls/07-runtime/cli/commands/cloud.d.ts.map +1 -0
- package/dist/walls/07-runtime/cli/commands/cloud.js +219 -0
- package/dist/walls/07-runtime/cli/commands/cloud.js.map +1 -0
- package/dist/walls/07-runtime/cli/commands/community.d.ts.map +1 -1
- package/dist/walls/07-runtime/cli/commands/community.js +6 -0
- package/dist/walls/07-runtime/cli/commands/community.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/help.d.ts.map +1 -1
- package/dist/walls/07-runtime/cli/commands/help.js +87 -77
- package/dist/walls/07-runtime/cli/commands/help.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/memory.js +5 -5
- package/dist/walls/07-runtime/cli/commands/memory.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/scan.d.ts.map +1 -1
- package/dist/walls/07-runtime/cli/commands/scan.js +39 -20
- package/dist/walls/07-runtime/cli/commands/scan.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/session.d.ts.map +1 -1
- package/dist/walls/07-runtime/cli/commands/session.js +2 -1
- package/dist/walls/07-runtime/cli/commands/session.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/setup.js +2 -2
- package/dist/walls/07-runtime/cli/commands/setup.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/status.js +7 -7
- package/dist/walls/07-runtime/cli/commands/status.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/sync.js +1 -1
- package/dist/walls/07-runtime/cli/commands/sync.js.map +1 -1
- package/dist/walls/07-runtime/cli/commands/teach.d.ts +3 -0
- package/dist/walls/07-runtime/cli/commands/teach.d.ts.map +1 -0
- package/dist/walls/07-runtime/cli/commands/teach.js +203 -0
- package/dist/walls/07-runtime/cli/commands/teach.js.map +1 -0
- package/dist/walls/07-runtime/cli/utils.js +2 -2
- package/dist/walls/07-runtime/daemon/lifecycle.d.ts.map +1 -1
- package/dist/walls/07-runtime/daemon/lifecycle.js +13 -1
- package/dist/walls/07-runtime/daemon/lifecycle.js.map +1 -1
- package/dist/walls/07-runtime/daemon/routes/session.d.ts.map +1 -1
- package/dist/walls/07-runtime/daemon/routes/session.js +4 -3
- package/dist/walls/07-runtime/daemon/routes/session.js.map +1 -1
- package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
- package/dist/walls/07-runtime/daemon/server.js +3 -0
- package/dist/walls/07-runtime/daemon/server.js.map +1 -1
- package/package.json +1 -1
- package/scripts/deep-audit.js +103 -0
package/README.md
CHANGED
|
@@ -1,197 +1,194 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
**
|
|
4
|
-
|
|
5
|
-
[](LICENSE)
|
|
6
|
-
[]()
|
|
7
|
-
[]()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
cell
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
|
96
|
-
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
##
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
**Git stores code. Cell stores engineering experience.**
|
|
1
|
+
# FivoCell
|
|
2
|
+
|
|
3
|
+
> **Your AI forgets. Cell doesn't.**
|
|
4
|
+
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[]()
|
|
7
|
+
[]()
|
|
8
|
+
[](https://www.npmjs.com/package/fivocell)
|
|
9
|
+
[]()
|
|
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('
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AAEzC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE7D,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,SAAS,OAAO,aAAa,EAAE;YAClD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;YACrC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,SAAS,OAAO,QAAQ,EAAE;YAC7C,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;YACrC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|