agent-knowledge 1.0.9 → 1.0.10
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 +192 -191
- package/dist/embeddings/factory.d.ts.map +1 -1
- package/dist/embeddings/factory.js +3 -1
- package/dist/embeddings/factory.js.map +1 -1
- package/dist/embeddings/local.d.ts +1 -1
- package/dist/embeddings/local.d.ts.map +1 -1
- package/dist/embeddings/local.js +36 -5
- package/dist/embeddings/local.js.map +1 -1
- package/dist/sessions/indexer.d.ts.map +1 -1
- package/dist/sessions/indexer.js +3 -2
- package/dist/sessions/indexer.js.map +1 -1
- package/dist/vectorstore/store.js +32 -32
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,191 +1,192 @@
|
|
|
1
|
-
# agent-knowledge
|
|
2
|
-
|
|
3
|
-
[](LICENSE)
|
|
4
|
-
[](https://nodejs.org)
|
|
5
|
-
[]()
|
|
6
|
-
[]()
|
|
7
|
-
|
|
8
|
-
**Cross-session memory and recall for AI agents** -- git-synced knowledge base, hybrid semantic+TF-IDF search, auto-distillation with secrets scrubbing.
|
|
9
|
-
|
|
10
|
-
<table>
|
|
11
|
-
<tr>
|
|
12
|
-
<td><img src="docs/assets/knowledge-light.png" alt="Knowledge Base (light)" width="480"></td>
|
|
13
|
-
<td><img src="docs/assets/search-light.png" alt="Session Search" width="480"></td>
|
|
14
|
-
</tr>
|
|
15
|
-
<tr>
|
|
16
|
-
<td align="center"><em>Knowledge base with category filtering</em></td>
|
|
17
|
-
<td align="center"><em>TF-IDF ranked session search</em></td>
|
|
18
|
-
</tr>
|
|
19
|
-
</table>
|
|
20
|
-
|
|
21
|
-
## Why
|
|
22
|
-
|
|
23
|
-
Claude Code sessions are ephemeral. When a session ends, everything it learned -- architecture decisions, debugging insights, project context -- is gone. The next session starts from scratch.
|
|
24
|
-
|
|
25
|
-
**agent-knowledge** solves this with two complementary systems:
|
|
26
|
-
|
|
27
|
-
1. **Knowledge Base** -- a git-synced markdown vault of structured entries (decisions, workflows, project context) that persists across sessions and machines.
|
|
28
|
-
2. **Session Search** -- TF-IDF ranked full-text search across JSONL session transcripts, so agents can recall what happened before.
|
|
29
|
-
|
|
30
|
-
## Features
|
|
31
|
-
|
|
32
|
-
- **Hybrid search** -- semantic vector similarity blended with TF-IDF keyword ranking
|
|
33
|
-
- **Git-synced knowledge base** -- markdown vault with YAML frontmatter, auto commit and push on writes
|
|
34
|
-
- **Auto-distillation** -- session insights automatically extracted and pushed to git with secrets scrubbing
|
|
35
|
-
- **Embeddings** -- local (Hugging Face), OpenAI, Claude/Voyage, or Gemini providers
|
|
36
|
-
- **Fuzzy matching** -- typo-tolerant search using Levenshtein distance
|
|
37
|
-
- **6 search scopes** -- errors, plans, configs, tools, files, decisions
|
|
38
|
-
- **Configurable git URL** -- `knowledge_config` tool for runtime setup, persisted at XDG/AppData location
|
|
39
|
-
- **Cross-machine persistence** -- knowledge syncs via git, sessions read from local JSONL
|
|
40
|
-
- **Real-time dashboard** -- browse, search, and manage at `localhost:3423`
|
|
41
|
-
- **Secrets scrubbing** -- API keys, tokens, passwords, private keys automatically redacted before git push
|
|
42
|
-
|
|
43
|
-
## Quick Start
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
git clone https://github.com/keshrath/agent-knowledge.git
|
|
47
|
-
cd agent-knowledge
|
|
48
|
-
npm install && npm run build
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Configure in Claude Code
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
claude mcp add agent-knowledge -s user \
|
|
55
|
-
-e KNOWLEDGE_MEMORY_DIR="$HOME/claude-memory" \
|
|
56
|
-
-- node /path/to/agent-knowledge/dist/index.js
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Or add to `settings.json` permissions:
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"permissions": {
|
|
64
|
-
"allow": ["mcp__agent-knowledge__*"]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Dashboard: **http://localhost:3423** (auto-starts with MCP server)
|
|
70
|
-
|
|
71
|
-
## MCP Tools
|
|
72
|
-
|
|
73
|
-
### Knowledge Base
|
|
74
|
-
|
|
75
|
-
| Tool | Description | Parameters |
|
|
76
|
-
| ------------------ | ----------------------------------- | ------------------------------------------------ |
|
|
77
|
-
| `knowledge_list` | List entries by category and/or tag | `category?`, `tag?` |
|
|
78
|
-
| `knowledge_read` | Read a specific entry | `path` (required) |
|
|
79
|
-
| `knowledge_write` | Create/update entry (auto git sync) | `category`, `filename`, `content` (all required) |
|
|
80
|
-
| `knowledge_delete` | Delete an entry (auto git sync) | `path` (required) |
|
|
81
|
-
| `knowledge_sync` | Manual git pull + push | -- |
|
|
82
|
-
|
|
83
|
-
### Session Search
|
|
84
|
-
|
|
85
|
-
| Tool | Description | Parameters |
|
|
86
|
-
| -------------------- | --------------------------------------- | ------------------------------------------------------------------ |
|
|
87
|
-
| `knowledge_sessions` | List sessions with metadata | `project?` |
|
|
88
|
-
| `knowledge_search` | TF-IDF ranked search across transcripts | `query` (required), `project?`, `role?`, `max_results?`, `ranked?` |
|
|
89
|
-
| `knowledge_get` | Retrieve full session conversation | `session_id` (required), `project?`, `include_tools?`, `tail?` |
|
|
90
|
-
| `knowledge_summary` | Session summary (topics, tools, files) | `session_id` (required), `project?` |
|
|
91
|
-
| `knowledge_recall` | Scoped search across sessions | `scope` (required), `query` (required), `project?`, `max_results?` |
|
|
92
|
-
|
|
93
|
-
### Admin
|
|
94
|
-
|
|
95
|
-
| Tool | Description | Parameters |
|
|
96
|
-
| ------------------------ | ---------------------------- | ------------------------------------------ |
|
|
97
|
-
| `knowledge_index_status` | Vector store statistics | -- |
|
|
98
|
-
| `knowledge_config` | View or update configuration | `git_url?`, `memory_dir?`, `auto_distill?` |
|
|
99
|
-
|
|
100
|
-
## REST API
|
|
101
|
-
|
|
102
|
-
| Method | Endpoint | Description |
|
|
103
|
-
| ------ | --------------------------------------- | ------------------------ |
|
|
104
|
-
| GET | `/api/knowledge` | List knowledge entries |
|
|
105
|
-
| GET | `/api/knowledge/search?q=` | Search knowledge base |
|
|
106
|
-
| GET | `/api/knowledge/:path` | Read a specific entry |
|
|
107
|
-
| GET | `/api/sessions` | List sessions |
|
|
108
|
-
| GET | `/api/sessions/search?q=&role=&ranked=` | Search sessions (TF-IDF) |
|
|
109
|
-
| GET | `/api/sessions/recall?scope=&q=` | Scoped recall |
|
|
110
|
-
| GET | `/api/sessions/:id` | Read a session |
|
|
111
|
-
| GET | `/api/sessions/:id/summary` | Session summary |
|
|
112
|
-
| GET | `/health` | Health check |
|
|
113
|
-
|
|
114
|
-
## Architecture
|
|
115
|
-
|
|
116
|
-
```mermaid
|
|
117
|
-
graph LR
|
|
118
|
-
subgraph Storage
|
|
119
|
-
KB[(Knowledge Base<br/>~/claude-memory<br/>Git Repository)]
|
|
120
|
-
SF[(Session Files<br/>~/.claude/projects<br/>JSONL Logs)]
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
subgraph agent-knowledge
|
|
124
|
-
KM[Knowledge Module<br/>store / search / git]
|
|
125
|
-
SE[Search Engine<br/>TF-IDF + Fuzzy]
|
|
126
|
-
DS[Dashboard<br/>:3423]
|
|
127
|
-
MCP[MCP Server<br/>stdio]
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
subgraph Clients
|
|
131
|
-
CC[Claude Code Sessions]
|
|
132
|
-
WB[Web Browser]
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
KB <-->|git pull/push| KM
|
|
136
|
-
SF -->|parse JSONL| SE
|
|
137
|
-
KM --> MCP
|
|
138
|
-
SE --> MCP
|
|
139
|
-
KM --> DS
|
|
140
|
-
SE --> DS
|
|
141
|
-
MCP --> CC
|
|
142
|
-
DS --> WB
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Search Capabilities
|
|
146
|
-
|
|
147
|
-
**TF-IDF Ranking** -- results scored by term frequency-inverse document frequency. Rare terms boost relevance. Global index cached for 60 seconds.
|
|
148
|
-
|
|
149
|
-
**Fuzzy Matching** -- Levenshtein edit distance with sliding window. Configurable threshold (default 0.7).
|
|
150
|
-
|
|
151
|
-
**Scoped Recall** via `knowledge_recall`:
|
|
152
|
-
|
|
153
|
-
| Scope | Matches |
|
|
154
|
-
| ----------- | ----------------------------------------- |
|
|
155
|
-
| `errors` | Stack traces, exceptions, failed commands |
|
|
156
|
-
| `plans` | Architecture, TODOs, implementation steps |
|
|
157
|
-
| `configs` | Settings, env vars, configuration files |
|
|
158
|
-
| `tools` | MCP tool calls, CLI commands |
|
|
159
|
-
| `files` | File paths, modifications |
|
|
160
|
-
| `decisions` | Trade-offs, rationale, choices |
|
|
161
|
-
|
|
162
|
-
## Testing
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
npm test # Run all 280 tests
|
|
166
|
-
npm run test:watch # Watch mode
|
|
167
|
-
npm run lint # Type-check (tsc --noEmit)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
## Environment Variables
|
|
171
|
-
|
|
172
|
-
| Variable
|
|
173
|
-
|
|
|
174
|
-
| `KNOWLEDGE_MEMORY_DIR`
|
|
175
|
-
| `KNOWLEDGE_GIT_URL`
|
|
176
|
-
| `KNOWLEDGE_AUTO_DISTILL`
|
|
177
|
-
| `KNOWLEDGE_EMBEDDING_PROVIDER`
|
|
178
|
-
| `KNOWLEDGE_EMBEDDING_ALPHA`
|
|
179
|
-
| `
|
|
180
|
-
| `
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- [
|
|
186
|
-
- [
|
|
187
|
-
- [
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
1
|
+
# agent-knowledge
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
[](https://nodejs.org)
|
|
5
|
+
[]()
|
|
6
|
+
[]()
|
|
7
|
+
|
|
8
|
+
**Cross-session memory and recall for AI agents** -- git-synced knowledge base, hybrid semantic+TF-IDF search, auto-distillation with secrets scrubbing.
|
|
9
|
+
|
|
10
|
+
<table>
|
|
11
|
+
<tr>
|
|
12
|
+
<td><img src="docs/assets/knowledge-light.png" alt="Knowledge Base (light)" width="480"></td>
|
|
13
|
+
<td><img src="docs/assets/search-light.png" alt="Session Search" width="480"></td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td align="center"><em>Knowledge base with category filtering</em></td>
|
|
17
|
+
<td align="center"><em>TF-IDF ranked session search</em></td>
|
|
18
|
+
</tr>
|
|
19
|
+
</table>
|
|
20
|
+
|
|
21
|
+
## Why
|
|
22
|
+
|
|
23
|
+
Claude Code sessions are ephemeral. When a session ends, everything it learned -- architecture decisions, debugging insights, project context -- is gone. The next session starts from scratch.
|
|
24
|
+
|
|
25
|
+
**agent-knowledge** solves this with two complementary systems:
|
|
26
|
+
|
|
27
|
+
1. **Knowledge Base** -- a git-synced markdown vault of structured entries (decisions, workflows, project context) that persists across sessions and machines.
|
|
28
|
+
2. **Session Search** -- TF-IDF ranked full-text search across JSONL session transcripts, so agents can recall what happened before.
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- **Hybrid search** -- semantic vector similarity blended with TF-IDF keyword ranking
|
|
33
|
+
- **Git-synced knowledge base** -- markdown vault with YAML frontmatter, auto commit and push on writes
|
|
34
|
+
- **Auto-distillation** -- session insights automatically extracted and pushed to git with secrets scrubbing
|
|
35
|
+
- **Embeddings** -- local (Hugging Face), OpenAI, Claude/Voyage, or Gemini providers
|
|
36
|
+
- **Fuzzy matching** -- typo-tolerant search using Levenshtein distance
|
|
37
|
+
- **6 search scopes** -- errors, plans, configs, tools, files, decisions
|
|
38
|
+
- **Configurable git URL** -- `knowledge_config` tool for runtime setup, persisted at XDG/AppData location
|
|
39
|
+
- **Cross-machine persistence** -- knowledge syncs via git, sessions read from local JSONL
|
|
40
|
+
- **Real-time dashboard** -- browse, search, and manage at `localhost:3423`
|
|
41
|
+
- **Secrets scrubbing** -- API keys, tokens, passwords, private keys automatically redacted before git push
|
|
42
|
+
|
|
43
|
+
## Quick Start
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git clone https://github.com/keshrath/agent-knowledge.git
|
|
47
|
+
cd agent-knowledge
|
|
48
|
+
npm install && npm run build
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Configure in Claude Code
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
claude mcp add agent-knowledge -s user \
|
|
55
|
+
-e KNOWLEDGE_MEMORY_DIR="$HOME/claude-memory" \
|
|
56
|
+
-- node /path/to/agent-knowledge/dist/index.js
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or add to `settings.json` permissions:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"permissions": {
|
|
64
|
+
"allow": ["mcp__agent-knowledge__*"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Dashboard: **http://localhost:3423** (auto-starts with MCP server)
|
|
70
|
+
|
|
71
|
+
## MCP Tools
|
|
72
|
+
|
|
73
|
+
### Knowledge Base
|
|
74
|
+
|
|
75
|
+
| Tool | Description | Parameters |
|
|
76
|
+
| ------------------ | ----------------------------------- | ------------------------------------------------ |
|
|
77
|
+
| `knowledge_list` | List entries by category and/or tag | `category?`, `tag?` |
|
|
78
|
+
| `knowledge_read` | Read a specific entry | `path` (required) |
|
|
79
|
+
| `knowledge_write` | Create/update entry (auto git sync) | `category`, `filename`, `content` (all required) |
|
|
80
|
+
| `knowledge_delete` | Delete an entry (auto git sync) | `path` (required) |
|
|
81
|
+
| `knowledge_sync` | Manual git pull + push | -- |
|
|
82
|
+
|
|
83
|
+
### Session Search
|
|
84
|
+
|
|
85
|
+
| Tool | Description | Parameters |
|
|
86
|
+
| -------------------- | --------------------------------------- | ------------------------------------------------------------------ |
|
|
87
|
+
| `knowledge_sessions` | List sessions with metadata | `project?` |
|
|
88
|
+
| `knowledge_search` | TF-IDF ranked search across transcripts | `query` (required), `project?`, `role?`, `max_results?`, `ranked?` |
|
|
89
|
+
| `knowledge_get` | Retrieve full session conversation | `session_id` (required), `project?`, `include_tools?`, `tail?` |
|
|
90
|
+
| `knowledge_summary` | Session summary (topics, tools, files) | `session_id` (required), `project?` |
|
|
91
|
+
| `knowledge_recall` | Scoped search across sessions | `scope` (required), `query` (required), `project?`, `max_results?` |
|
|
92
|
+
|
|
93
|
+
### Admin
|
|
94
|
+
|
|
95
|
+
| Tool | Description | Parameters |
|
|
96
|
+
| ------------------------ | ---------------------------- | ------------------------------------------ |
|
|
97
|
+
| `knowledge_index_status` | Vector store statistics | -- |
|
|
98
|
+
| `knowledge_config` | View or update configuration | `git_url?`, `memory_dir?`, `auto_distill?` |
|
|
99
|
+
|
|
100
|
+
## REST API
|
|
101
|
+
|
|
102
|
+
| Method | Endpoint | Description |
|
|
103
|
+
| ------ | --------------------------------------- | ------------------------ |
|
|
104
|
+
| GET | `/api/knowledge` | List knowledge entries |
|
|
105
|
+
| GET | `/api/knowledge/search?q=` | Search knowledge base |
|
|
106
|
+
| GET | `/api/knowledge/:path` | Read a specific entry |
|
|
107
|
+
| GET | `/api/sessions` | List sessions |
|
|
108
|
+
| GET | `/api/sessions/search?q=&role=&ranked=` | Search sessions (TF-IDF) |
|
|
109
|
+
| GET | `/api/sessions/recall?scope=&q=` | Scoped recall |
|
|
110
|
+
| GET | `/api/sessions/:id` | Read a session |
|
|
111
|
+
| GET | `/api/sessions/:id/summary` | Session summary |
|
|
112
|
+
| GET | `/health` | Health check |
|
|
113
|
+
|
|
114
|
+
## Architecture
|
|
115
|
+
|
|
116
|
+
```mermaid
|
|
117
|
+
graph LR
|
|
118
|
+
subgraph Storage
|
|
119
|
+
KB[(Knowledge Base<br/>~/claude-memory<br/>Git Repository)]
|
|
120
|
+
SF[(Session Files<br/>~/.claude/projects<br/>JSONL Logs)]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
subgraph agent-knowledge
|
|
124
|
+
KM[Knowledge Module<br/>store / search / git]
|
|
125
|
+
SE[Search Engine<br/>TF-IDF + Fuzzy]
|
|
126
|
+
DS[Dashboard<br/>:3423]
|
|
127
|
+
MCP[MCP Server<br/>stdio]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
subgraph Clients
|
|
131
|
+
CC[Claude Code Sessions]
|
|
132
|
+
WB[Web Browser]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
KB <-->|git pull/push| KM
|
|
136
|
+
SF -->|parse JSONL| SE
|
|
137
|
+
KM --> MCP
|
|
138
|
+
SE --> MCP
|
|
139
|
+
KM --> DS
|
|
140
|
+
SE --> DS
|
|
141
|
+
MCP --> CC
|
|
142
|
+
DS --> WB
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Search Capabilities
|
|
146
|
+
|
|
147
|
+
**TF-IDF Ranking** -- results scored by term frequency-inverse document frequency. Rare terms boost relevance. Global index cached for 60 seconds.
|
|
148
|
+
|
|
149
|
+
**Fuzzy Matching** -- Levenshtein edit distance with sliding window. Configurable threshold (default 0.7).
|
|
150
|
+
|
|
151
|
+
**Scoped Recall** via `knowledge_recall`:
|
|
152
|
+
|
|
153
|
+
| Scope | Matches |
|
|
154
|
+
| ----------- | ----------------------------------------- |
|
|
155
|
+
| `errors` | Stack traces, exceptions, failed commands |
|
|
156
|
+
| `plans` | Architecture, TODOs, implementation steps |
|
|
157
|
+
| `configs` | Settings, env vars, configuration files |
|
|
158
|
+
| `tools` | MCP tool calls, CLI commands |
|
|
159
|
+
| `files` | File paths, modifications |
|
|
160
|
+
| `decisions` | Trade-offs, rationale, choices |
|
|
161
|
+
|
|
162
|
+
## Testing
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
npm test # Run all 280 tests
|
|
166
|
+
npm run test:watch # Watch mode
|
|
167
|
+
npm run lint # Type-check (tsc --noEmit)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Environment Variables
|
|
171
|
+
|
|
172
|
+
| Variable | Default | Description |
|
|
173
|
+
| ---------------------------------- | ----------------- | ----------------------------------------------------------------- |
|
|
174
|
+
| `KNOWLEDGE_MEMORY_DIR` | `~/claude-memory` | Path to git-synced knowledge base |
|
|
175
|
+
| `KNOWLEDGE_GIT_URL` | -- | Git remote URL (auto-clones if dir missing) |
|
|
176
|
+
| `KNOWLEDGE_AUTO_DISTILL` | `true` | Auto-distill session insights to knowledge base |
|
|
177
|
+
| `KNOWLEDGE_EMBEDDING_PROVIDER` | `local` | Embedding provider: `local`, `openai`, `claude`, `gemini` |
|
|
178
|
+
| `KNOWLEDGE_EMBEDDING_ALPHA` | `0.3` | TF-IDF vs semantic blend weight (0=pure semantic, 1=pure TF-IDF) |
|
|
179
|
+
| `KNOWLEDGE_EMBEDDING_IDLE_TIMEOUT` | `60` | Seconds before unloading local model from memory (0 = keep alive) |
|
|
180
|
+
| `CLAUDE_DIR` | `~/.claude` | Directory containing session transcripts (JSONL files) |
|
|
181
|
+
| `KNOWLEDGE_PORT` | `3423` | Dashboard HTTP port |
|
|
182
|
+
|
|
183
|
+
## Documentation
|
|
184
|
+
|
|
185
|
+
- [Setup Guide](docs/SETUP.md)
|
|
186
|
+
- [Architecture](docs/ARCHITECTURE.md)
|
|
187
|
+
- [Dashboard](docs/DASHBOARD.md)
|
|
188
|
+
- [Changelog](CHANGELOG.md)
|
|
189
|
+
|
|
190
|
+
## License
|
|
191
|
+
|
|
192
|
+
[MIT](LICENSE)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/embeddings/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMrE;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/embeddings/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMrE;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;AA2CD,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
|
|
@@ -17,7 +17,9 @@ async function createProvider(cfg) {
|
|
|
17
17
|
switch (cfg.provider) {
|
|
18
18
|
case 'local': {
|
|
19
19
|
const { LocalEmbeddingProvider } = await import('./local.js');
|
|
20
|
-
const
|
|
20
|
+
const idleEnv = process.env.KNOWLEDGE_EMBEDDING_IDLE_TIMEOUT;
|
|
21
|
+
const idleTimeoutMs = idleEnv !== undefined ? parseInt(idleEnv, 10) * 1000 : 60_000;
|
|
22
|
+
const provider = new LocalEmbeddingProvider(cfg.modelOverride, undefined, idleTimeoutMs);
|
|
21
23
|
if (await provider.isAvailable())
|
|
22
24
|
return provider;
|
|
23
25
|
console.error('[knowledge] Local embedding model unavailable');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/embeddings/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,IAAI,SAAS,GAA6B,IAAI,CAAC;AAC/C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAC;IAE3C,IAAI,SAAS,IAAI,iBAAiB,KAAK,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEtE,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,iBAAiB,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAoB;IAChD,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/embeddings/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
|
4
4
|
readonly dimensions: number;
|
|
5
5
|
readonly model: string;
|
|
6
6
|
private readonly batchSize;
|
|
7
|
-
constructor(modelOverride?: string, batchSize?: number);
|
|
7
|
+
constructor(modelOverride?: string, batchSize?: number, idleTimeoutMs?: number);
|
|
8
8
|
embed(texts: string[]): Promise<number[][]>;
|
|
9
9
|
embedOne(text: string): Promise<number[]>;
|
|
10
10
|
isAvailable(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA6CpD,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;IAOxE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0B3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKzC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YAKvB,WAAW;CAW1B"}
|
package/dist/embeddings/local.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
const DEFAULT_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
2
2
|
const DEFAULT_DIMENSIONS = 384;
|
|
3
3
|
const DEFAULT_BATCH_SIZE = 32;
|
|
4
|
+
const DEFAULT_IDLE_TIMEOUT_MS = 60_000;
|
|
4
5
|
let _pipeline = null;
|
|
5
|
-
|
|
6
|
+
let _pipelineLoading = null;
|
|
7
|
+
let _idleTimer = null;
|
|
8
|
+
let _idleTimeoutMs = DEFAULT_IDLE_TIMEOUT_MS;
|
|
9
|
+
async function loadPipeline(model) {
|
|
6
10
|
try {
|
|
11
|
+
console.error(`[knowledge] Loading embedding model ${model}...`);
|
|
7
12
|
const { pipeline } = await import('@huggingface/transformers');
|
|
8
13
|
const pipe = await pipeline('feature-extraction', model, {
|
|
9
14
|
dtype: 'fp32',
|
|
10
15
|
});
|
|
16
|
+
console.error(`[knowledge] Embedding model loaded`);
|
|
11
17
|
return pipe;
|
|
12
18
|
}
|
|
13
19
|
catch (err) {
|
|
@@ -15,20 +21,37 @@ async function createPipeline(model) {
|
|
|
15
21
|
return null;
|
|
16
22
|
}
|
|
17
23
|
}
|
|
24
|
+
function resetIdleTimer() {
|
|
25
|
+
if (_idleTimer)
|
|
26
|
+
clearTimeout(_idleTimer);
|
|
27
|
+
if (_idleTimeoutMs <= 0)
|
|
28
|
+
return;
|
|
29
|
+
_idleTimer = setTimeout(() => {
|
|
30
|
+
if (_pipeline) {
|
|
31
|
+
console.error('[knowledge] Unloading embedding model (idle timeout)');
|
|
32
|
+
_pipeline = null;
|
|
33
|
+
_pipelineLoading = null;
|
|
34
|
+
}
|
|
35
|
+
_idleTimer = null;
|
|
36
|
+
}, _idleTimeoutMs);
|
|
37
|
+
}
|
|
18
38
|
export class LocalEmbeddingProvider {
|
|
19
39
|
name = 'local';
|
|
20
40
|
dimensions;
|
|
21
41
|
model;
|
|
22
42
|
batchSize;
|
|
23
|
-
constructor(modelOverride, batchSize) {
|
|
43
|
+
constructor(modelOverride, batchSize, idleTimeoutMs) {
|
|
24
44
|
this.model = modelOverride || DEFAULT_MODEL;
|
|
25
45
|
this.dimensions = DEFAULT_DIMENSIONS;
|
|
26
46
|
this.batchSize = batchSize ?? DEFAULT_BATCH_SIZE;
|
|
47
|
+
if (idleTimeoutMs !== undefined)
|
|
48
|
+
_idleTimeoutMs = idleTimeoutMs;
|
|
27
49
|
}
|
|
28
50
|
async embed(texts) {
|
|
29
51
|
const pipe = await this.getPipeline();
|
|
30
52
|
if (!pipe)
|
|
31
53
|
return texts.map(() => []);
|
|
54
|
+
resetIdleTimer();
|
|
32
55
|
const results = [];
|
|
33
56
|
for (let i = 0; i < texts.length; i += this.batchSize) {
|
|
34
57
|
const batch = texts.slice(i, i + this.batchSize);
|
|
@@ -45,6 +68,7 @@ export class LocalEmbeddingProvider {
|
|
|
45
68
|
results.push(...batch.map(() => []));
|
|
46
69
|
}
|
|
47
70
|
}
|
|
71
|
+
resetIdleTimer();
|
|
48
72
|
return results;
|
|
49
73
|
}
|
|
50
74
|
async embedOne(text) {
|
|
@@ -56,10 +80,17 @@ export class LocalEmbeddingProvider {
|
|
|
56
80
|
return pipe !== null;
|
|
57
81
|
}
|
|
58
82
|
async getPipeline() {
|
|
59
|
-
if (
|
|
60
|
-
_pipeline
|
|
83
|
+
if (_pipeline)
|
|
84
|
+
return _pipeline;
|
|
85
|
+
if (!_pipelineLoading) {
|
|
86
|
+
_pipelineLoading = loadPipeline(this.model).then((pipe) => {
|
|
87
|
+
_pipeline = pipe;
|
|
88
|
+
if (pipe)
|
|
89
|
+
resetIdleTimer();
|
|
90
|
+
return pipe;
|
|
91
|
+
});
|
|
61
92
|
}
|
|
62
|
-
return
|
|
93
|
+
return _pipelineLoading;
|
|
63
94
|
}
|
|
64
95
|
}
|
|
65
96
|
//# sourceMappingURL=local.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/sessions/indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAqBhE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/sessions/indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAqBhE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAmIrD"}
|
package/dist/sessions/indexer.js
CHANGED
|
@@ -96,7 +96,7 @@ export async function backgroundIndex() {
|
|
|
96
96
|
if (indexed % 10 === 0 || indexed === total) {
|
|
97
97
|
console.error(`[knowledge] Indexed ${indexed}/${total} knowledge entries...`);
|
|
98
98
|
}
|
|
99
|
-
await new Promise((r) => setTimeout(r,
|
|
99
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
100
100
|
}
|
|
101
101
|
catch (err) {
|
|
102
102
|
console.error(`[knowledge] Failed to index knowledge entry ${entry.path}: ${err}`);
|
|
@@ -144,7 +144,8 @@ export async function backgroundIndex() {
|
|
|
144
144
|
if (indexedSessions % 20 === 0 || indexedSessions === totalSessions) {
|
|
145
145
|
console.error(`[knowledge] Indexed ${indexedSessions}/${totalSessions} sessions...`);
|
|
146
146
|
}
|
|
147
|
-
|
|
147
|
+
// Throttle: 500ms pause between sessions to avoid pegging CPU
|
|
148
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
148
149
|
}
|
|
149
150
|
catch (err) {
|
|
150
151
|
console.error(`[knowledge] Failed to index session ${sess.id}: ${err}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/sessions/indexer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/sessions/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,27 +47,27 @@ export class VectorStore {
|
|
|
47
47
|
this.db.pragma('foreign_keys = ON');
|
|
48
48
|
}
|
|
49
49
|
this.loadVecExtension();
|
|
50
|
-
this.db.exec(`
|
|
51
|
-
CREATE TABLE IF NOT EXISTS embeddings (
|
|
52
|
-
id TEXT PRIMARY KEY,
|
|
53
|
-
source TEXT NOT NULL CHECK(source IN ('knowledge','session')),
|
|
54
|
-
source_id TEXT NOT NULL,
|
|
55
|
-
chunk_index INTEGER NOT NULL,
|
|
56
|
-
chunk_text TEXT NOT NULL,
|
|
57
|
-
provider TEXT NOT NULL,
|
|
58
|
-
dimensions INTEGER NOT NULL,
|
|
59
|
-
embedding BLOB NOT NULL,
|
|
60
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
61
|
-
metadata TEXT
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
CREATE INDEX IF NOT EXISTS idx_emb_source ON embeddings(source, source_id);
|
|
65
|
-
CREATE INDEX IF NOT EXISTS idx_emb_provider ON embeddings(provider);
|
|
66
|
-
|
|
67
|
-
CREATE TABLE IF NOT EXISTS meta (
|
|
68
|
-
key TEXT PRIMARY KEY,
|
|
69
|
-
value TEXT NOT NULL
|
|
70
|
-
);
|
|
50
|
+
this.db.exec(`
|
|
51
|
+
CREATE TABLE IF NOT EXISTS embeddings (
|
|
52
|
+
id TEXT PRIMARY KEY,
|
|
53
|
+
source TEXT NOT NULL CHECK(source IN ('knowledge','session')),
|
|
54
|
+
source_id TEXT NOT NULL,
|
|
55
|
+
chunk_index INTEGER NOT NULL,
|
|
56
|
+
chunk_text TEXT NOT NULL,
|
|
57
|
+
provider TEXT NOT NULL,
|
|
58
|
+
dimensions INTEGER NOT NULL,
|
|
59
|
+
embedding BLOB NOT NULL,
|
|
60
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
61
|
+
metadata TEXT
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_emb_source ON embeddings(source, source_id);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_emb_provider ON embeddings(provider);
|
|
66
|
+
|
|
67
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
68
|
+
key TEXT PRIMARY KEY,
|
|
69
|
+
value TEXT NOT NULL
|
|
70
|
+
);
|
|
71
71
|
`);
|
|
72
72
|
if (this.vecAvailable) {
|
|
73
73
|
this.ensureVecTable(dimensions);
|
|
@@ -183,11 +183,11 @@ export class VectorStore {
|
|
|
183
183
|
this.ensureInit(dims);
|
|
184
184
|
if (!this.db)
|
|
185
185
|
return;
|
|
186
|
-
const insertEmbed = this.db.prepare(`
|
|
187
|
-
INSERT OR REPLACE INTO embeddings
|
|
188
|
-
(id, source, source_id, chunk_index, chunk_text, provider, dimensions, embedding, metadata)
|
|
189
|
-
VALUES
|
|
190
|
-
(?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
186
|
+
const insertEmbed = this.db.prepare(`
|
|
187
|
+
INSERT OR REPLACE INTO embeddings
|
|
188
|
+
(id, source, source_id, chunk_index, chunk_text, provider, dimensions, embedding, metadata)
|
|
189
|
+
VALUES
|
|
190
|
+
(?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
191
191
|
`);
|
|
192
192
|
const deleteVec = this.vecAvailable
|
|
193
193
|
? this.db.prepare('DELETE FROM vec_idx WHERE id = ?')
|
|
@@ -260,18 +260,18 @@ export class VectorStore {
|
|
|
260
260
|
const queryBuf = toFloat32Buffer(queryVector);
|
|
261
261
|
const fetchLimit = source ? maxResults * 3 : maxResults;
|
|
262
262
|
const rows = this.db
|
|
263
|
-
.prepare(`SELECT v.id, v.distance
|
|
264
|
-
FROM vec_idx v
|
|
265
|
-
WHERE v.embedding MATCH ?
|
|
266
|
-
ORDER BY v.distance
|
|
263
|
+
.prepare(`SELECT v.id, v.distance
|
|
264
|
+
FROM vec_idx v
|
|
265
|
+
WHERE v.embedding MATCH ?
|
|
266
|
+
ORDER BY v.distance
|
|
267
267
|
LIMIT ?`)
|
|
268
268
|
.all(queryBuf, fetchLimit);
|
|
269
269
|
if (rows.length === 0)
|
|
270
270
|
return [];
|
|
271
271
|
const idPlaceholders = rows.map(() => '?').join(',');
|
|
272
272
|
const embeddingRows = this.db
|
|
273
|
-
.prepare(`SELECT id, source, source_id, chunk_text, metadata
|
|
274
|
-
FROM embeddings
|
|
273
|
+
.prepare(`SELECT id, source, source_id, chunk_text, metadata
|
|
274
|
+
FROM embeddings
|
|
275
275
|
WHERE id IN (${idPlaceholders})`)
|
|
276
276
|
.all(...rows.map((r) => r.id));
|
|
277
277
|
const embMap = new Map(embeddingRows.map((r) => [r.id, r]));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-knowledge",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Cross-session memory and recall for AI agents — git-synced knowledge base, hybrid semantic+TF-IDF search, auto-distillation with secrets scrubbing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|