@raviolelabs/engram-mcp 0.2.2 → 0.4.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.
- package/LICENSE +1 -1
- package/README.md +139 -134
- package/SKILL.md +33 -0
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +27 -1
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +4 -4
- package/dist/core/logger.js.map +1 -1
- package/dist/core/server/http.d.ts +3 -0
- package/dist/core/server/http.d.ts.map +1 -1
- package/dist/core/server/http.js +6 -0
- package/dist/core/server/http.js.map +1 -1
- package/dist/core/server/instructions.js +1 -1
- package/dist/core/server/mcp-handler.d.ts.map +1 -1
- package/dist/core/server/mcp-handler.js +28 -1
- package/dist/core/server/mcp-handler.js.map +1 -1
- package/dist/embeddings/index.d.ts +6 -0
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +31 -3
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/providers/engram.d.ts +10 -0
- package/dist/embeddings/providers/engram.d.ts.map +1 -1
- package/dist/embeddings/providers/engram.js +35 -12
- package/dist/embeddings/providers/engram.js.map +1 -1
- package/dist/mcp-server/tests/mcp-e2e.test.js +1 -1
- package/dist/mcp-server/tests/mcp-e2e.test.js.map +1 -1
- package/dist/memory/core/store.d.ts.map +1 -1
- package/dist/memory/core/store.js +5 -4
- package/dist/memory/core/store.js.map +1 -1
- package/dist/memory/modules/team/keystore.d.ts +38 -0
- package/dist/memory/modules/team/keystore.d.ts.map +1 -0
- package/dist/memory/modules/team/keystore.js +117 -0
- package/dist/memory/modules/team/keystore.js.map +1 -0
- package/dist/memory/modules/team/tools.d.ts +10 -0
- package/dist/memory/modules/team/tools.d.ts.map +1 -0
- package/dist/memory/modules/team/tools.js +252 -0
- package/dist/memory/modules/team/tools.js.map +1 -0
- package/dist/memory/public/tools.d.ts.map +1 -1
- package/dist/memory/public/tools.js +33 -5
- package/dist/memory/public/tools.js.map +1 -1
- package/dist/server/api/memories.d.ts.map +1 -1
- package/dist/server/api/memories.js +79 -8
- package/dist/server/api/memories.js.map +1 -1
- package/dist/server/api/types.d.ts +5 -0
- package/dist/server/api/types.d.ts.map +1 -1
- package/dist/server/api/types.js +90 -2
- package/dist/server/api/types.js.map +1 -1
- package/dist/sync/team-sync.d.ts +19 -0
- package/dist/sync/team-sync.d.ts.map +1 -0
- package/dist/sync/team-sync.js +80 -0
- package/dist/sync/team-sync.js.map +1 -0
- package/dist/tests/scope-encryption.test.d.ts +2 -0
- package/dist/tests/scope-encryption.test.d.ts.map +1 -0
- package/dist/tests/scope-encryption.test.js +71 -0
- package/dist/tests/scope-encryption.test.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/webapp/api/team.d.ts +7 -0
- package/dist/webapp/api/team.d.ts.map +1 -0
- package/dist/webapp/api/team.js +57 -0
- package/dist/webapp/api/team.js.map +1 -0
- package/package.json +2 -1
- package/CLAUDE.md +0 -232
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -2,54 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
> Local-first semantic memory layer for AI agents.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@raviolelabs/engram-mcp)
|
|
6
|
+
[](LICENSE)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
EngramMCP is the memory layer your agents need — ingests from your real sources (notes, conversations, Drive, Notion, YouTube, Obsidian, audio, custom types) and exposes a standard MCP server for any agent runtime (Claude Code, Cursor, custom Anthropic/OpenAI runtimes).
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
**Local-first**: vectors + content live on your machine. Embeddings via Ollama by default. No cloud required for the local server.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
---
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
curl -fsSL https://engram-mcp.com/install.sh | sh
|
|
15
|
-
```
|
|
14
|
+
## Install
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
### One command (recommended)
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
Get an invite at **[engram-mcp.com](https://engram-mcp.com)** (signup is free + open). You'll receive a personalized install command by email:
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
|
|
23
|
-
brew install engram
|
|
24
|
-
brew services start engram # auto-start on login
|
|
21
|
+
curl -fsSL https://engram-mcp.com/install/<INVITE_TOKEN> | sh
|
|
25
22
|
```
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
This `npm install`s the package, sets up Ollama (auto-installed if missing), pulls `nomic-embed-text`, writes `~/.engram/config.json`, links your account, registers a background service (LaunchAgent on macOS, systemd-user on Linux, NSSM on Windows), updates `~/.claude/mcp.json` + `~/.cursor/mcp.json`, and opens your dashboard at engram-mcp.com — all in under 60 seconds.
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
iex (Invoke-WebRequest -Uri https://engram-mcp.com/install.ps1).Content
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Installs the binary, registers an NSSM Windows service, and updates `%USERPROFILE%\.claude\mcp.json`.
|
|
26
|
+
### Manual install (no cloud account needed)
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
The local server is MIT-licensed and works fully offline. Install via npm:
|
|
36
29
|
|
|
37
|
-
```
|
|
38
|
-
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g @raviolelabs/engram-mcp
|
|
32
|
+
# or via npx (no global install):
|
|
33
|
+
npx -y @raviolelabs/engram-mcp --no-http
|
|
39
34
|
```
|
|
40
35
|
|
|
41
|
-
|
|
36
|
+
Then add to your agent's MCP config (`~/.claude/mcp.json` for Claude Code, similar for Cursor):
|
|
42
37
|
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"mcpServers": {
|
|
41
|
+
"engram": {
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@raviolelabs/engram-mcp", "--no-http"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
46
47
|
```
|
|
47
48
|
|
|
49
|
+
Restart your agent. You're done — 29 memory tools are now available.
|
|
50
|
+
|
|
48
51
|
### Via AI agent (installer MCP server)
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
*"Install EngramMCP on this machine."*
|
|
52
|
-
It calls `install_engram_mcp` and `verify_engram_installed` tools autonomously.
|
|
53
|
+
Your agent (Claude Code / Cursor / any MCP-aware runtime) can install EngramMCP autonomously:
|
|
53
54
|
|
|
54
55
|
```json
|
|
55
56
|
{
|
|
@@ -62,11 +63,48 @@ It calls `install_engram_mcp` and `verify_engram_installed` tools autonomously.
|
|
|
62
63
|
}
|
|
63
64
|
```
|
|
64
65
|
|
|
65
|
-
|
|
66
|
+
Then ask: *"Install EngramMCP on this machine."* The agent calls `install_engram_mcp` and `verify_engram_installed` and runs the script.
|
|
66
67
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Pricing
|
|
71
|
+
|
|
72
|
+
### Engram Core — free, forever
|
|
73
|
+
|
|
74
|
+
- Local MCP server, 29 tools
|
|
75
|
+
- All memory types (notes, conversations, Drive, Notion, YouTube, Obsidian, audio)
|
|
76
|
+
- Local embeddings via Ollama (auto-installed)
|
|
77
|
+
- Local Whisper transcription
|
|
78
|
+
- Dashboard via local bridge (engram-mcp.com reads your local store via E2E-encrypted WSS)
|
|
79
|
+
- BYO premium embeddings (Voyage / OpenAI / OpenAI-compatible)
|
|
80
|
+
|
|
81
|
+
### Engram Pro — $9 / month
|
|
82
|
+
|
|
83
|
+
Everything in Core, plus:
|
|
84
|
+
|
|
85
|
+
- **iOS + Android capture** (voice notes, text, link sharing)
|
|
86
|
+
- **Multi-PC encrypted sync** (E2E — we never see your data in clear)
|
|
87
|
+
- **Always-online cloud dashboard** (view your memory even when your PC is off)
|
|
88
|
+
- **Hosted embeddings** (no Ollama needed) — 10M tokens / month included
|
|
89
|
+
- **Hosted Whisper** transcription — 5h audio / month included
|
|
90
|
+
- **Overage** opt-in at $0.05/M embedding tokens, $0.20/h Whisper. Default: auto-fallback to local Ollama when quota exhausted — no surprise bills.
|
|
91
|
+
|
|
92
|
+
### Engram Team — *coming soon*
|
|
93
|
+
|
|
94
|
+
Multi-user shared encrypted memory (teams, projects, organizations). Not on sale yet — backend ready, polishing UX.
|
|
95
|
+
|
|
96
|
+
Billing via [Polar](https://polar.sh) (Merchant of Record, handles EU VAT). Cancel anytime.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Open / Closed boundary
|
|
101
|
+
|
|
102
|
+
- **Local server**: MIT, open source, in this repo. Anyone can audit, fork, self-host. No telemetry, no phone-home for the local-only path.
|
|
103
|
+
- **Cloud workers** (`engram-cloud`): proprietary, source-closed. The bridge relay, hosted embeddings, billing, and multi-PC sync are paid SaaS. They handle only encrypted blobs — server-side decryption is mathematically impossible (XChaCha20-Poly1305 + Argon2id passphrase-derived keys).
|
|
104
|
+
- **Browser extension + Mobile apps**: distributed via Chrome Web Store, Apple App Store, Google Play. Source is closed.
|
|
105
|
+
- **Skill plugin** (`engram-skill`): MIT, public — separate repo, optional install for Claude Code users.
|
|
106
|
+
|
|
107
|
+
---
|
|
70
108
|
|
|
71
109
|
## Run
|
|
72
110
|
|
|
@@ -74,13 +112,11 @@ engram-mcp install:wizard
|
|
|
74
112
|
engram-mcp --no-http
|
|
75
113
|
```
|
|
76
114
|
|
|
77
|
-
Starts the MCP stdio server (consumed by your agent runtime).
|
|
78
|
-
`--no-http` is the **recommended default** — no local web UI, minimal footprint.
|
|
115
|
+
Starts the MCP stdio server (consumed by your agent runtime). `--no-http` is the recommended default — no local web UI, minimal footprint.
|
|
79
116
|
|
|
80
117
|
### Official dashboard
|
|
81
118
|
|
|
82
|
-
Visit **[engram-mcp.com](https://engram-mcp.com)** to browse your memories from any browser.
|
|
83
|
-
Sign up for a free account, pair your PC with `engram-mcp-pair`, and the online dashboard reads your local store via the Bridge Relay (E2E encrypted — the relay never sees your data).
|
|
119
|
+
Visit **[engram-mcp.com/dashboard](https://engram-mcp.com)** to browse your memories from any browser. Sign up free, pair your PC, and the dashboard reads your local store via the E2E-encrypted Bridge Relay.
|
|
84
120
|
|
|
85
121
|
### Local dev UI (opt-in)
|
|
86
122
|
|
|
@@ -92,130 +128,99 @@ Without `--no-http`, also starts:
|
|
|
92
128
|
- Local web UI: http://localhost:7777 (dev / admin tool)
|
|
93
129
|
- HTTP MCP transport: http://localhost:7777/mcp
|
|
94
130
|
|
|
131
|
+
---
|
|
132
|
+
|
|
95
133
|
## Quick start for agents
|
|
96
134
|
|
|
97
|
-
EngramMCP
|
|
135
|
+
EngramMCP exposes **29 agent-friendly MCP tools** with anti-loop contracts. The 10 core memory verbs:
|
|
98
136
|
|
|
99
137
|
| Tool | Purpose |
|
|
100
138
|
|---|---|
|
|
101
|
-
| `remember(content, title, tags, type?)` | Store anything worth keeping |
|
|
102
|
-
| `recall(query, types?, limit?)` | Semantic search across all memory |
|
|
139
|
+
| `remember(content, title, tags, scope?, type?)` | Store anything worth keeping |
|
|
140
|
+
| `recall(query, types?, scope?, limit?)` | Semantic search across all memory |
|
|
103
141
|
| `get(id)` | Fetch full memory by id |
|
|
104
142
|
| `update(id, ...)` | Edit title/tags/sentiment |
|
|
105
|
-
| `forget(id)` | Delete
|
|
106
|
-
| `relate(id, limit?)` | Find
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
| `ingest(uri, type?)` | Auto-route file/URL to the right module |
|
|
110
|
-
| `suggest_properties(id)` |
|
|
111
|
-
|
|
112
|
-
See [SKILL.md](./SKILL.md) for the complete calling-agent guide (tagging strategy, conversation patterns, wikilinks, error handling).
|
|
113
|
-
|
|
114
|
-
Admin tools (OAuth, watchers, custom types) are available behind `engram-mcp --admin` or via the integrations page at [engram-mcp.com/dashboard/integrations](https://engram-mcp.com/dashboard/integrations).
|
|
143
|
+
| `forget(id)` | Delete |
|
|
144
|
+
| `relate(id, limit?)` | Find related memories (wikilinks + semantic) |
|
|
145
|
+
| `recent(limit?, types?)` | Most recent items |
|
|
146
|
+
| `list_types()` | Discover available memory types |
|
|
147
|
+
| `ingest(uri, type?)` | Auto-route a file / URL to the right module |
|
|
148
|
+
| `suggest_properties(id)` | Get extraction template for the LLM |
|
|
115
149
|
|
|
116
|
-
|
|
150
|
+
Plus 3 cross-memory inference tools (unique in the agent-memory space):
|
|
151
|
+
- `analyze_patterns(topic)` — synthesis across many memories
|
|
152
|
+
- `summarize_recent(days?)` — period digest
|
|
153
|
+
- `find_gaps(topic)` — what's missing from your notes
|
|
117
154
|
|
|
118
|
-
|
|
119
|
-
- **Capture from sources** — `ingest()` auto-routes Drive, Notion, YouTube, Obsidian, audio files
|
|
120
|
-
- **Search** — `recall()` does parallel semantic fan-out across all types with recency boost
|
|
121
|
-
- **Bring your own types** — create custom memory types via admin `create_custom_type`
|
|
122
|
-
- **Delegated property extraction** — the calling LLM provides title/tags directly; `suggest_properties` returns content + extraction prompt for backfill
|
|
155
|
+
Full documentation in [SKILL.md](SKILL.md) — drop it in your agent's context for optimal usage.
|
|
123
156
|
|
|
124
|
-
|
|
157
|
+
---
|
|
125
158
|
|
|
126
|
-
|
|
127
|
-
|---|---|---|
|
|
128
|
-
| `ollama` (default) | Free | Auto-installed by wizard |
|
|
129
|
-
| `engram` (hosted) | Pro | Paste API key |
|
|
130
|
-
| `voyage` | BYO | Sign up at voyageai.com |
|
|
131
|
-
| `openai` | BYO | Sign up at openai.com |
|
|
132
|
-
| `openai-compatible` | BYO | Any OAI-compatible endpoint |
|
|
159
|
+
## Architecture
|
|
133
160
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
161
|
+
```
|
|
162
|
+
┌─ stdio ─┐
|
|
163
|
+
agent runtime ──┤ ├──▶ MCP server (engram-mcp)
|
|
164
|
+
└─ HTTP ─┘ │
|
|
165
|
+
▼
|
|
166
|
+
┌─ ToolRouter ─┐
|
|
167
|
+
│ 29 tools │
|
|
168
|
+
└──────┬───────┘
|
|
169
|
+
▼
|
|
170
|
+
┌─ ModuleRegistry ─┐
|
|
171
|
+
│ notes, conv, │
|
|
172
|
+
│ drive, notion, │
|
|
173
|
+
│ youtube, audio, │
|
|
174
|
+
│ obsidian, │
|
|
175
|
+
│ custom types │
|
|
176
|
+
└────────┬─────────┘
|
|
177
|
+
▼
|
|
178
|
+
┌─ MemoryStore ─┐
|
|
179
|
+
│ insert │ ──▶ chunk + embed (Ollama)
|
|
180
|
+
│ recall │ ──▶ LanceDB per-type tables
|
|
181
|
+
│ get/update │ ──▶ SQLite + FTS5
|
|
182
|
+
│ forget │ ──▶ ops log (sync source of truth)
|
|
183
|
+
│ relate │
|
|
184
|
+
└────────┬──────┘
|
|
185
|
+
│ events: memory.added/deleted/updated
|
|
186
|
+
▼
|
|
187
|
+
Optional WebSocket → dashboard
|
|
144
188
|
```
|
|
145
189
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
## Setting up Google Drive / Notion
|
|
149
|
-
|
|
150
|
-
Connect Drive and Notion to ingest documents into your local memory store.
|
|
151
|
-
Your OAuth credentials are stored in `~/.engram/config.json` and **never sent to engram-mcp.com**.
|
|
152
|
-
|
|
153
|
-
### 1 — Get OAuth credentials
|
|
154
|
-
|
|
155
|
-
**Google Drive**
|
|
156
|
-
|
|
157
|
-
1. Open [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials)
|
|
158
|
-
2. Create an **OAuth 2.0 Client ID**, type **Web application**
|
|
159
|
-
3. Add authorized redirect URI: `http://localhost:7777/oauth/callback/drive`
|
|
160
|
-
4. Copy Client ID and Client Secret
|
|
161
|
-
|
|
162
|
-
**Notion**
|
|
163
|
-
|
|
164
|
-
1. Open [Notion → My Integrations](https://www.notion.so/my-integrations)
|
|
165
|
-
2. Create a new integration, set redirect URI: `http://localhost:7777/oauth/callback/notion`
|
|
166
|
-
3. Copy Client ID and Client Secret
|
|
167
|
-
|
|
168
|
-
### 2 — Save credentials via the dashboard
|
|
169
|
-
|
|
170
|
-
Open [engram-mcp.com/dashboard/integrations](https://engram-mcp.com/dashboard/integrations) **on the device where `engram-mcp` is running**, paste your credentials, and click **Save credentials**.
|
|
171
|
-
|
|
172
|
-
### 3 — Authorize access
|
|
173
|
-
|
|
174
|
-
Click **Authorize access** — a browser tab opens for the OAuth consent screen.
|
|
175
|
-
After you approve, tokens are saved locally in SQLite (`~/.engram/engram.db`).
|
|
190
|
+
For Pro users, ops are signed (ed25519) + encrypted (XChaCha20-Poly1305) and pushed to the cloud sync channel. The cloud holds only ciphertext + signed metadata.
|
|
176
191
|
|
|
177
|
-
|
|
192
|
+
---
|
|
178
193
|
|
|
179
|
-
|
|
194
|
+
## Tech stack
|
|
180
195
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
"clientId": "YOUR_NOTION_CLIENT_ID",
|
|
190
|
-
"clientSecret": "YOUR_NOTION_CLIENT_SECRET",
|
|
191
|
-
"redirectPort": 7777
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Then run `engram-mcp connect_drive` / `engram-mcp connect_notion` (or use the MCP `connect_drive` / `connect_notion` tools).
|
|
196
|
+
- Node.js >= 22, TypeScript 5.7 strict, ESM
|
|
197
|
+
- MCP SDK 1.28 (stdio + StreamableHTTP)
|
|
198
|
+
- LanceDB 0.27 (per-type vector tables)
|
|
199
|
+
- better-sqlite3 + FTS5
|
|
200
|
+
- Embeddings: Ollama (default), Voyage, OpenAI, OpenAI-compatible, or Engram-hosted
|
|
201
|
+
- Audio: nodejs-whisper (whisper.cpp) or Engram-hosted
|
|
202
|
+
- YouTube: watch-page scrape + yt-dlp fallback
|
|
203
|
+
- Zod everywhere, ULID ids
|
|
197
204
|
|
|
198
205
|
---
|
|
199
206
|
|
|
200
|
-
##
|
|
207
|
+
## Status
|
|
201
208
|
|
|
202
|
-
|
|
209
|
+
- ✅ **Phase 1**: local MCP server with all memory types
|
|
210
|
+
- ✅ **Phase 2**: mobile + cloud transit + billing + hosted Engram embeddings + multi-PC encrypted sync
|
|
211
|
+
- ⏳ **Phase 3**: Team workspaces — backend ready, UX polish in progress
|
|
203
212
|
|
|
204
|
-
|
|
205
|
-
engram-mcp-pair
|
|
206
|
-
```
|
|
213
|
+
---
|
|
207
214
|
|
|
208
|
-
|
|
215
|
+
## Contributing
|
|
209
216
|
|
|
210
|
-
|
|
211
|
-
- **Bridge Relay** lets the engram-mcp.com online dashboard show a live view of your local memory store (proxied via WSS tunnel, no public IP needed).
|
|
217
|
+
Issues, PRs, and Discord chat welcome.
|
|
212
218
|
|
|
213
|
-
|
|
219
|
+
- Issues: [github.com/RavioleLabs/engram-mcp/issues](https://github.com/RavioleLabs/engram-mcp/issues)
|
|
220
|
+
- Discord: [discord.com/invite/rkgzfnUx](https://discord.com/invite/rkgzfnUx)
|
|
221
|
+
- Maintained by [RavioleLabs](https://raviolelabs.com)
|
|
214
222
|
|
|
215
|
-
|
|
216
|
-
export ENGRAM_PASSPHRASE='your strong passphrase'
|
|
217
|
-
engram-mcp
|
|
218
|
-
```
|
|
223
|
+
---
|
|
219
224
|
|
|
220
225
|
## License
|
|
221
226
|
|
package/SKILL.md
CHANGED
|
@@ -194,6 +194,39 @@ Once `status === "completed"`, the `memory_id` is searchable via `recall()`.
|
|
|
194
194
|
|
|
195
195
|
**Tip:** You can also just fire `ingest()` and move on — the job completes in the background and becomes searchable automatically. Only poll if you need the result immediately.
|
|
196
196
|
|
|
197
|
+
## Scope selection (Team workspaces)
|
|
198
|
+
|
|
199
|
+
When the user is in a Team workspace, the `remember` and `recall` tools accept an optional `scope` parameter:
|
|
200
|
+
- `scope: "personal"` → stored in user's personal memory (default for ambiguous content)
|
|
201
|
+
- `scope: "team:<id>"` → stored in shared team workspace
|
|
202
|
+
|
|
203
|
+
### Default behavior: agent decides
|
|
204
|
+
|
|
205
|
+
If the user did NOT explicitly say "share with team" or "this is personal", the agent decides based on content:
|
|
206
|
+
|
|
207
|
+
**Team-scoped signals:**
|
|
208
|
+
- Mentions colleagues by name (other workspace members)
|
|
209
|
+
- References shared projects (workspace project tags)
|
|
210
|
+
- Work decisions, meeting notes, internal policies
|
|
211
|
+
- "We decided", "the team agreed", "our X"
|
|
212
|
+
|
|
213
|
+
**Personal-scoped signals:**
|
|
214
|
+
- "I", "my", "me" (personal preferences, opinions, plans)
|
|
215
|
+
- Health, family, finance (personal-sensitive)
|
|
216
|
+
- Random personal ideas not work-related
|
|
217
|
+
|
|
218
|
+
**Ambiguous → ask user.** If the content could plausibly be either:
|
|
219
|
+
- DON'T just default. Reply "Should I add this to your personal memory or the team workspace?"
|
|
220
|
+
- Wait for user response before calling remember()
|
|
221
|
+
|
|
222
|
+
### Override via tags
|
|
223
|
+
|
|
224
|
+
If the agent sees `[[team:<name>]]` or `[[personal]]` wikilinks in content, treat them as explicit scope directives.
|
|
225
|
+
|
|
226
|
+
### Multi-workspace user
|
|
227
|
+
|
|
228
|
+
If user is in multiple teams, the agent must pick the RIGHT team based on content. List workspaces with `list_workspaces()` first. If unclear which team, ask user.
|
|
229
|
+
|
|
197
230
|
## Watching sources
|
|
198
231
|
|
|
199
232
|
`watch()` is now on the public surface — no `--admin` flag needed. It requires that the source is already authenticated (run `connect_drive` / `connect_notion` once via admin or the install wizard).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAetC,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAGzC;AAED,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAuBzD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAetC,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAGzC;AAED,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAuBzD;AAyDD,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAS7D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOhF"}
|
package/dist/core/db/index.js
CHANGED
|
@@ -60,11 +60,22 @@ function runMigrations(db) {
|
|
|
60
60
|
{ version: 5, sql: MIGRATION_5 },
|
|
61
61
|
{ version: 6, sql: MIGRATION_6 },
|
|
62
62
|
{ version: 7, sql: MIGRATION_7 },
|
|
63
|
+
{ version: 8, sql: MIGRATION_8 },
|
|
63
64
|
];
|
|
64
65
|
for (const m of migrations) {
|
|
65
66
|
if (m.version > current) {
|
|
66
67
|
log.info(`Applying migration v${m.version}`);
|
|
67
|
-
if (m.version ===
|
|
68
|
+
if (m.version === 8) {
|
|
69
|
+
// SQLite lacks ADD COLUMN IF NOT EXISTS — guard programmatically
|
|
70
|
+
const cols = db.prepare(`PRAGMA table_info(memories)`).all();
|
|
71
|
+
if (!cols.some((c) => c.name === 'scope')) {
|
|
72
|
+
db.exec(`ALTER TABLE memories ADD COLUMN scope TEXT NOT NULL DEFAULT 'personal'`);
|
|
73
|
+
}
|
|
74
|
+
// Workspace registry table
|
|
75
|
+
db.exec(MIGRATION_8_WORKSPACES);
|
|
76
|
+
db.exec(`CREATE INDEX IF NOT EXISTS memories_scope_idx ON memories(scope)`);
|
|
77
|
+
}
|
|
78
|
+
else if (m.version === 7) {
|
|
68
79
|
// SQLite doesn't support ADD COLUMN IF NOT EXISTS.
|
|
69
80
|
// Check if poll_count already exists before altering (happens when
|
|
70
81
|
// migration 6 was applied after the column was added to it).
|
|
@@ -96,6 +107,21 @@ export function incrementLamport(db, deviceId) {
|
|
|
96
107
|
db.prepare(`UPDATE device_identity SET lamport_ts = ? WHERE device_id = ?`).run(next, deviceId);
|
|
97
108
|
return next;
|
|
98
109
|
}
|
|
110
|
+
// Migration 8 is handled programmatically (SQLite lacks ADD COLUMN IF NOT EXISTS).
|
|
111
|
+
// The constant is kept for schema documentation purposes only.
|
|
112
|
+
const MIGRATION_8 = `-- scope column added to memories (handled below)`;
|
|
113
|
+
// Workspace registry: local record of workspaces the user is a member of.
|
|
114
|
+
// Stores the decrypted team key path + metadata for fast lookup.
|
|
115
|
+
// The actual team master keys are stored in ~/.engram/keys/workspaces/<id>.key
|
|
116
|
+
const MIGRATION_8_WORKSPACES = `
|
|
117
|
+
CREATE TABLE IF NOT EXISTS workspaces (
|
|
118
|
+
id TEXT PRIMARY KEY, -- ULID (matches cloud workspace id)
|
|
119
|
+
name TEXT NOT NULL,
|
|
120
|
+
role TEXT NOT NULL DEFAULT 'member',
|
|
121
|
+
owner_email TEXT,
|
|
122
|
+
joined_at TEXT NOT NULL
|
|
123
|
+
);
|
|
124
|
+
`;
|
|
99
125
|
// Migration 7 is handled programmatically (SQLite lacks ADD COLUMN IF NOT EXISTS)
|
|
100
126
|
// The constant is kept for schema documentation purposes only.
|
|
101
127
|
const MIGRATION_7 = `-- poll_count column added to ingest_jobs (handled below)`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAE/B,IAAI,GAAG,GAA6B,IAAI,CAAC;AAEzC,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IAE1C,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChC,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAEzE,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,UAAU,GAA4C;QAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;KACjC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACpB,mDAAmD;gBACnD,mEAAmE;gBACnE,6DAA6D;gBAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,EAA6B,CAAC;gBAC3F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;oBAC/C,EAAE,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAC9E,CAAC,CAAC,OAAO,EACT,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAqB;IACnD,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN;;SAEG,CACJ;SACA,GAAG,EAA2C,CAAC;IAClD,OAAO,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,QAAgB;IACtE,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,4DAA4D,CAAC;SACrE,GAAG,CAAC,QAAQ,CAAuC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,+DAA+D;AAC/D,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAGhF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;CAkBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAE/B,IAAI,GAAG,GAA6B,IAAI,CAAC;AAEzC,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,GAAG,CAAC,IAAI,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IAE1C,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChC,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAEzE,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,UAAU,GAA4C;QAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;KACjC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACpB,iEAAiE;gBACjE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAA6B,CAAC;gBACxF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;oBAC1C,EAAE,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;gBACpF,CAAC;gBACD,2BAA2B;gBAC3B,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAChC,EAAE,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YAC9E,CAAC;iBAAM,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAC3B,mDAAmD;gBACnD,mEAAmE;gBACnE,6DAA6D;gBAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,EAA6B,CAAC;gBAC3F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;oBAC/C,EAAE,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAC9E,CAAC,CAAC,OAAO,EACT,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAqB;IACnD,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN;;SAEG,CACJ;SACA,GAAG,EAA2C,CAAC;IAClD,OAAO,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,QAAgB;IACtE,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,4DAA4D,CAAC;SACrE,GAAG,CAAC,QAAQ,CAAuC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,+DAA+D;AAC/D,MAAM,WAAW,GAAG,mDAAmD,CAAC;AAExE,0EAA0E;AAC1E,iEAAiE;AACjE,+EAA+E;AAC/E,MAAM,sBAAsB,GAAG;;;;;;;;CAQ9B,CAAC;AAEF,kFAAkF;AAClF,+DAA+D;AAC/D,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAGhF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;CAkBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiBnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAMA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIpD,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAMA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIpD,eAAO,MAAM,QAAQ,QAAmD,CAAC;AASzE,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAsC/D;AAED,wBAAgB,SAAS,IAAI;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmBpE;AAoHD,QAAA,IAAI,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IACxF,CAAC;AAEP,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,QAE1C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,aAAa,QAExD;AAuBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;iBAE1B,MAAM,SAAS,OAAO;gBACvB,MAAM,SAAS,OAAO;gBACtB,MAAM,SAAS,OAAO;iBACrB,MAAM,SAAS,OAAO;EAEtC;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
package/dist/core/logger.js
CHANGED
|
@@ -3,8 +3,8 @@ import fs from 'fs';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import os from 'os';
|
|
5
5
|
// ── Log rotation ──────────────────────────────────────────────────────────────
|
|
6
|
-
// Max 10MB per file, keep
|
|
7
|
-
export const LOG_FILE = path.join(os.homedir(), '.
|
|
6
|
+
// Max 10MB per file, keep engram.log + .1..5 (≈60MB total worst case).
|
|
7
|
+
export const LOG_FILE = path.join(os.homedir(), '.engram', 'engram.log');
|
|
8
8
|
const MAX_BYTES = 10 * 1024 * 1024;
|
|
9
9
|
const MAX_ROTATIONS = 5;
|
|
10
10
|
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
@@ -22,7 +22,7 @@ export function rotateLogsIfNeeded(nextWriteBytes) {
|
|
|
22
22
|
}
|
|
23
23
|
if (size + nextWriteBytes <= MAX_BYTES)
|
|
24
24
|
return;
|
|
25
|
-
// copytruncate strategy: launchd/systemd hold an open FD to
|
|
25
|
+
// copytruncate strategy: launchd/systemd hold an open FD to engram.log, so
|
|
26
26
|
// a plain rename would leave the FD writing to the renamed inode forever.
|
|
27
27
|
// Instead: shift .N → .N+1, copy current → .1, then truncate-in-place so
|
|
28
28
|
// the inherited FD keeps writing at offset 0.
|
|
@@ -111,7 +111,7 @@ function writeToLogFile(line) {
|
|
|
111
111
|
/* never break the pipeline on log failure */
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
// If launchd/systemd has wired stdout/stderr directly to
|
|
114
|
+
// If launchd/systemd has wired stdout/stderr directly to engram.log, take over:
|
|
115
115
|
// replace stdout.write/stderr.write so console.log goes through OUR rotating
|
|
116
116
|
// O_APPEND fd. Otherwise log() would write the line twice (once via console,
|
|
117
117
|
// once via writeToLogFile). When stdout is a TTY (foreground/dev mode), we
|
package/dist/core/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,iFAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ export interface WebappOptions {
|
|
|
7
7
|
store: MemoryStore;
|
|
8
8
|
router: ToolRouter;
|
|
9
9
|
clientDistDir?: string;
|
|
10
|
+
/** Optional: master key for workspace key-wrapping endpoints */
|
|
11
|
+
masterKey?: Uint8Array;
|
|
12
|
+
dataDir?: string;
|
|
10
13
|
}
|
|
11
14
|
export declare function startWebapp(options: WebappOptions): {
|
|
12
15
|
app: Express;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AAkBxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,CA2EzF"}
|
package/dist/core/server/http.js
CHANGED
|
@@ -16,6 +16,7 @@ import { syncStatusRouter } from '../../server/api/sync-status.js';
|
|
|
16
16
|
import { graphApi } from '../../server/api/graph.js';
|
|
17
17
|
import { integrationsApi } from '../../server/api/integrations.js';
|
|
18
18
|
import { loadConfig } from '../../config/index.js';
|
|
19
|
+
import { buildTeamRouter } from '../../webapp/api/team.js';
|
|
19
20
|
const log = createLogger('webapp');
|
|
20
21
|
export function startWebapp(options) {
|
|
21
22
|
const app = express();
|
|
@@ -58,6 +59,11 @@ export function startWebapp(options) {
|
|
|
58
59
|
app.use('/api/graph', graphApi(options.store));
|
|
59
60
|
app.use('/api/integrations', integrationsApi(() => loadConfig()));
|
|
60
61
|
app.use(syncStatusRouter());
|
|
62
|
+
// Workspace local API (key wrapping for browser invite flow)
|
|
63
|
+
if (options.masterKey && options.dataDir) {
|
|
64
|
+
app.use('/api/team', buildTeamRouter({ dataDir: options.dataDir, masterKey: options.masterKey }));
|
|
65
|
+
log.info('Workspace /api/team endpoints registered');
|
|
66
|
+
}
|
|
61
67
|
// MCP HTTP transport
|
|
62
68
|
mountMcpHttp(app, options.router);
|
|
63
69
|
// Static client (production)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"AAAA,OAAO,OAAyB,MAAM,SAAS,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ DO NOT use engram FOR:
|
|
|
18
18
|
|
|
19
19
|
ANTI-PATTERNS:
|
|
20
20
|
- Calling recall with the verbatim user question. Extract the topic noun first. "what did I say about Alice?" → recall("alice"), NOT recall("what did I say about Alice").
|
|
21
|
-
- Skipping engram and
|
|
21
|
+
- Skipping engram and grepping your own internal notes/memory directories for the user's personal data. Those are for YOUR runtime context, not the user's log — call recall instead.
|
|
22
22
|
- Saving to filesystem when user says "remember". Always use remember(), never write feedback files.
|
|
23
23
|
|
|
24
24
|
WHEN TO REMEMBER:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handler.d.ts","sourceRoot":"","sources":["../../../src/core/server/mcp-handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-handler.d.ts","sourceRoot":"","sources":["../../../src/core/server/mcp-handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAkBzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAa3D,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC;IAClH,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACjL,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,8BAA8B,EAAE,YAAY,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvH,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,2BAA2B,EAAE,SAAS,CAAC,CAAC,CAAC;CAC/H;AAED,MAAM,WAAW,aAAa;IAC5B,gGAAgG;IAChG,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,4BAA4B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CACpG;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,yBAA8B,GAAG,OAAO,CAAC,aAAa,CAAC,CAwL3H;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C/E"}
|