bikky 0.4.2 → 0.4.4
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 +64 -37
- package/dist/config.d.ts +15 -1
- package/dist/config.js +116 -20
- package/dist/daemon/capture-policy.d.ts +0 -1
- package/dist/daemon/capture-policy.js +0 -2
- package/dist/daemon/consolidation.d.ts +2 -1
- package/dist/daemon/consolidation.js +32 -15
- package/dist/daemon/entity-typing.js +10 -0
- package/dist/daemon/episode-summary.d.ts +4 -0
- package/dist/daemon/episode-summary.js +39 -8
- package/dist/daemon/extraction.d.ts +2 -2
- package/dist/daemon/extraction.js +65 -22
- package/dist/daemon/loop.js +8 -0
- package/dist/daemon/maintenance-state.d.ts +1 -1
- package/dist/daemon/maintenance-state.js +2 -0
- package/dist/daemon/qdrant.d.ts +32 -10
- package/dist/daemon/qdrant.js +199 -60
- package/dist/daemon/quality-rollups.d.ts +51 -0
- package/dist/daemon/quality-rollups.js +378 -0
- package/dist/daemon/relations.d.ts +3 -3
- package/dist/daemon/relations.js +28 -16
- package/dist/daemon/session-index.d.ts +5 -0
- package/dist/daemon/session-index.js +36 -9
- package/dist/daemon/session-summary.d.ts +3 -0
- package/dist/daemon/session-summary.js +48 -15
- package/dist/daemon/staleness.js +3 -3
- package/dist/daemon/transcript-sources.js +3 -2
- package/dist/daemon/watcher.js +2 -0
- package/dist/daemon/workstream-summary.d.ts +4 -0
- package/dist/daemon/workstream-summary.js +58 -16
- package/dist/install.d.ts +11 -0
- package/dist/install.js +38 -0
- package/dist/lifecycle.js +7 -5
- package/dist/llm/embedding/index.js +2 -1
- package/dist/llm/embedding/providers/openai.js +8 -2
- package/dist/llm/embedding/providers/portkey.js +9 -2
- package/dist/llm/inference/index.js +2 -1
- package/dist/llm/util.d.ts +12 -0
- package/dist/llm/util.js +18 -0
- package/dist/mcp/helpers.d.ts +8 -0
- package/dist/mcp/helpers.js +36 -3
- package/dist/mcp/taxonomy.d.ts +9 -13
- package/dist/mcp/taxonomy.js +59 -42
- package/dist/mcp/tools.js +351 -83
- package/dist/mcp/types.d.ts +35 -0
- package/dist/package-verifier.d.ts +19 -0
- package/dist/package-verifier.js +83 -0
- package/dist/prompts/brief.d.ts +2 -2
- package/dist/prompts/brief.js +0 -1
- package/dist/prompts/extraction.js +9 -11
- package/dist/provenance/origin.d.ts +57 -0
- package/dist/provenance/origin.js +254 -0
- package/dist/routing-context.d.ts +16 -0
- package/dist/routing-context.js +55 -0
- package/dist/status.d.ts +1 -0
- package/dist/status.js +7 -1
- package/docs/config/fully-hosted.md +33 -13
- package/docs/config/hosted-models.md +33 -13
- package/docs/config/hosted-qdrant-local-models.md +1 -0
- package/docs/config/local.md +1 -0
- package/docs/configuration.md +42 -17
- package/package.json +2 -2
package/dist/status.js
CHANGED
|
@@ -235,13 +235,18 @@ function collectMaintenanceStatus() {
|
|
|
235
235
|
last_summary: job.last_summary,
|
|
236
236
|
};
|
|
237
237
|
};
|
|
238
|
-
const summaries = [
|
|
238
|
+
const summaries = [
|
|
239
|
+
state.jobs.relation_inference.last_summary,
|
|
240
|
+
state.jobs.entity_typing.last_summary,
|
|
241
|
+
state.jobs.memory_quality_rollups.last_summary,
|
|
242
|
+
];
|
|
239
243
|
const hasError = summaries.some((summary) => summary?.status === "error");
|
|
240
244
|
return {
|
|
241
245
|
status: hasError ? "warn" : "ok",
|
|
242
246
|
state_path: MAINTENANCE_STATE_PATH,
|
|
243
247
|
relation_inference: jobStatus("relation_inference"),
|
|
244
248
|
entity_typing: jobStatus("entity_typing"),
|
|
249
|
+
memory_quality_rollups: jobStatus("memory_quality_rollups"),
|
|
245
250
|
};
|
|
246
251
|
}
|
|
247
252
|
async function collectUiStatus(opts) {
|
|
@@ -368,6 +373,7 @@ export function formatStatusReport(report) {
|
|
|
368
373
|
lines.push(`Daemon: ${icon(report.daemon.status)} ${report.daemon.running ? `running (PID ${report.daemon.pid})` : "stopped"}`);
|
|
369
374
|
lines.push(`Maint: ${icon(report.maintenance.status)} ${maintenanceJobSummary("relations", report.maintenance.relation_inference)}`);
|
|
370
375
|
lines.push(` ${maintenanceJobSummary("entity typing", report.maintenance.entity_typing)}`);
|
|
376
|
+
lines.push(` ${maintenanceJobSummary("quality rollups", report.maintenance.memory_quality_rollups)}`);
|
|
371
377
|
lines.push(`UI: ${icon(report.ui.status)} ${report.ui.checked ? report.ui.url : "not checked"}${report.ui.error ? ` — ${report.ui.error}` : ""}`);
|
|
372
378
|
lines.push(`MCP: ${icon(report.mcp.status)} ${report.mcp.message}`);
|
|
373
379
|
return lines.join("\n");
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Fully hosted config
|
|
2
2
|
|
|
3
|
-
Best for performance and teams. This setup uses Qdrant Cloud for managed vector storage and
|
|
3
|
+
Best for performance and teams. This setup uses Qdrant Cloud for managed vector storage and a hosted gateway/provider for extraction, curation, and recall.
|
|
4
4
|
|
|
5
5
|
## What you need
|
|
6
6
|
|
|
7
7
|
- A Qdrant Cloud cluster URL.
|
|
8
8
|
- A Qdrant API key.
|
|
9
|
-
-
|
|
9
|
+
- A Portkey API key (recommended) — one key, many upstream providers, with built-in routing, fallbacks, and observability. Get one at [portkey.ai](https://portkey.ai). Or use OpenAI / Bedrock directly.
|
|
10
10
|
|
|
11
|
-
For both `embedding.provider` and `llm.provider`, possible values are `
|
|
11
|
+
For both `embedding.provider` and `llm.provider`, possible values are `portkey`, `openai`, or `bedrock` for hosted models. `ollama` is also supported when you want local model calls.
|
|
12
12
|
|
|
13
|
-
## Config
|
|
13
|
+
## Config (recommended: Portkey)
|
|
14
14
|
|
|
15
15
|
Save this as `~/.bikky/config.json`:
|
|
16
16
|
|
|
@@ -18,10 +18,36 @@ Save this as `~/.bikky/config.json`:
|
|
|
18
18
|
{
|
|
19
19
|
"qdrant_url": "https://your-cluster.cloud.qdrant.io:6333",
|
|
20
20
|
"qdrant_api_key": "your-qdrant-api-key",
|
|
21
|
+
"embedding": {
|
|
22
|
+
"provider": "portkey",
|
|
23
|
+
"model": "@openai/text-embedding-3-small",
|
|
24
|
+
"dimensions": 1024
|
|
25
|
+
},
|
|
26
|
+
"llm": {
|
|
27
|
+
"provider": "portkey",
|
|
28
|
+
"model": "@anthropic/claude-sonnet-4"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Then export the gateway key:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
export PORTKEY_API_KEY="pk-..."
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
bikky uses **1024-dimensional embeddings** as the canonical default. This is portable across modern providers (OpenAI 3-small/3-large via Matryoshka truncation, Cohere v3, Voyage, Mistral, Bedrock Titan v2, BGE/E5) so you can switch providers later without re-embedding.
|
|
40
|
+
|
|
41
|
+
`qdrant_api_key` is optional only for unauthenticated self-hosted Qdrant. Qdrant Cloud usually requires it.
|
|
42
|
+
|
|
43
|
+
## Alternative: OpenAI directly
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
21
47
|
"embedding": {
|
|
22
48
|
"provider": "openai",
|
|
23
49
|
"model": "text-embedding-3-small",
|
|
24
|
-
"dimensions":
|
|
50
|
+
"dimensions": 1024,
|
|
25
51
|
"api_key": "sk-..."
|
|
26
52
|
},
|
|
27
53
|
"llm": {
|
|
@@ -32,13 +58,7 @@ Save this as `~/.bikky/config.json`:
|
|
|
32
58
|
}
|
|
33
59
|
```
|
|
34
60
|
|
|
35
|
-
`
|
|
36
|
-
|
|
37
|
-
Prefer not to store hosted model keys in the config file? Omit `api_key` above and set:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
export OPENAI_API_KEY="sk-..."
|
|
41
|
-
```
|
|
61
|
+
Or set `OPENAI_API_KEY` in the environment instead of the config file.
|
|
42
62
|
|
|
43
63
|
## Check it
|
|
44
64
|
|
|
@@ -54,4 +74,4 @@ bikky stop && bikky start
|
|
|
54
74
|
|
|
55
75
|
Then restart your editor so its MCP process reloads.
|
|
56
76
|
|
|
57
|
-
For Bedrock,
|
|
77
|
+
For Bedrock, custom base URLs, or model-specific dimensions, see the [full configuration guide](https://github.com/bikky-dev/bikky/blob/main/docs/configuration.md).
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Local Qdrant + hosted models config
|
|
2
2
|
|
|
3
|
-
This setup keeps Qdrant local while hosted
|
|
3
|
+
This setup keeps Qdrant local while a hosted gateway/provider handles extraction, curation, and recall.
|
|
4
4
|
|
|
5
5
|
## What you need
|
|
6
6
|
|
|
7
7
|
- Qdrant running locally, usually with Docker.
|
|
8
|
-
-
|
|
8
|
+
- A Portkey API key (recommended) — one key, many upstream providers, with built-in routing, fallbacks, and observability. Get one at [portkey.ai](https://portkey.ai). Or use OpenAI / Bedrock directly.
|
|
9
9
|
|
|
10
|
-
For both `embedding.provider` and `llm.provider`, possible values are `
|
|
10
|
+
For both `embedding.provider` and `llm.provider`, possible values are `portkey`, `openai`, or `bedrock` for hosted models. `ollama` is also supported when you want local model calls.
|
|
11
11
|
|
|
12
|
-
## Config
|
|
12
|
+
## Config (recommended: Portkey)
|
|
13
13
|
|
|
14
14
|
Save this as `~/.bikky/config.json`:
|
|
15
15
|
|
|
@@ -17,10 +17,36 @@ Save this as `~/.bikky/config.json`:
|
|
|
17
17
|
{
|
|
18
18
|
"qdrant_url": "http://localhost:6333",
|
|
19
19
|
"qdrant_api_key": "",
|
|
20
|
+
"embedding": {
|
|
21
|
+
"provider": "portkey",
|
|
22
|
+
"model": "@openai/text-embedding-3-small",
|
|
23
|
+
"dimensions": 1024
|
|
24
|
+
},
|
|
25
|
+
"llm": {
|
|
26
|
+
"provider": "portkey",
|
|
27
|
+
"model": "@anthropic/claude-sonnet-4"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then export the gateway key:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
export PORTKEY_API_KEY="pk-..."
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
bikky uses **1024-dimensional embeddings** as the canonical default. This is portable across modern providers (OpenAI 3-small/3-large via Matryoshka truncation, Cohere v3, Voyage, Mistral, Bedrock Titan v2, BGE/E5) so you can switch providers later without re-embedding.
|
|
39
|
+
|
|
40
|
+
`qdrant_api_key` is optional. Leave it empty or omit it for local or unauthenticated self-hosted Qdrant.
|
|
41
|
+
|
|
42
|
+
## Alternative: OpenAI directly
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
20
46
|
"embedding": {
|
|
21
47
|
"provider": "openai",
|
|
22
48
|
"model": "text-embedding-3-small",
|
|
23
|
-
"dimensions":
|
|
49
|
+
"dimensions": 1024,
|
|
24
50
|
"api_key": "sk-..."
|
|
25
51
|
},
|
|
26
52
|
"llm": {
|
|
@@ -31,13 +57,7 @@ Save this as `~/.bikky/config.json`:
|
|
|
31
57
|
}
|
|
32
58
|
```
|
|
33
59
|
|
|
34
|
-
`
|
|
35
|
-
|
|
36
|
-
Prefer not to store hosted model keys in the config file? Omit `api_key` above and set:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
export OPENAI_API_KEY="sk-..."
|
|
40
|
-
```
|
|
60
|
+
Or set `OPENAI_API_KEY` in the environment instead of the config file.
|
|
41
61
|
|
|
42
62
|
## Check it
|
|
43
63
|
|
|
@@ -47,4 +67,4 @@ bikky status
|
|
|
47
67
|
|
|
48
68
|
If you started from a fresh install, run `bikky setup` after writing the config, then restart your editor so its MCP process reloads.
|
|
49
69
|
|
|
50
|
-
For Bedrock,
|
|
70
|
+
For Bedrock, custom base URLs, or model-specific dimensions, see the [full configuration guide](https://github.com/bikky-dev/bikky/blob/main/docs/configuration.md).
|
|
@@ -8,6 +8,7 @@ Use this path when you want memory shared across machines, but you still want em
|
|
|
8
8
|
- A Qdrant API key.
|
|
9
9
|
- Ollama installed locally.
|
|
10
10
|
- The default embedding model pulled with `ollama pull qwen3-embedding:0.6b`.
|
|
11
|
+
- The default LLM model pulled with `ollama pull qwen2.5:7b`.
|
|
11
12
|
|
|
12
13
|
## Config
|
|
13
14
|
|
package/docs/config/local.md
CHANGED
|
@@ -9,6 +9,7 @@ This setup is best for private/free testing rather than long-term team use. Extr
|
|
|
9
9
|
- Qdrant running locally, usually with Docker.
|
|
10
10
|
- Ollama installed locally.
|
|
11
11
|
- The default embedding model pulled with `ollama pull qwen3-embedding:0.6b`.
|
|
12
|
+
- The default LLM model pulled with `ollama pull qwen2.5:7b`.
|
|
12
13
|
|
|
13
14
|
## Config
|
|
14
15
|
|
package/docs/configuration.md
CHANGED
|
@@ -11,7 +11,7 @@ cat > ~/.bikky/config.json <<'JSON'
|
|
|
11
11
|
"embedding": {
|
|
12
12
|
"provider": "openai",
|
|
13
13
|
"model": "text-embedding-3-small",
|
|
14
|
-
"dimensions":
|
|
14
|
+
"dimensions": 1024,
|
|
15
15
|
"api_key": "sk-..."
|
|
16
16
|
},
|
|
17
17
|
"llm": {
|
|
@@ -24,7 +24,21 @@ JSON
|
|
|
24
24
|
bikky status
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Config lives at `~/.bikky/config.json`, or at `BIKKY_HOME/config.json` when `BIKKY_HOME` is set. Environment variables override the config
|
|
27
|
+
Config lives at `~/.bikky/config.json`, or at `BIKKY_HOME/config.json` when `BIKKY_HOME` is set. Environment variables can supply or override most scalar settings. Provider API key env vars such as `OPENAI_API_KEY` and `PORTKEY_API_KEY` are fallback values when the matching `api_key` field is omitted from config; remove the config value when you want key rotation through the environment.
|
|
28
|
+
|
|
29
|
+
## Origin identity
|
|
30
|
+
|
|
31
|
+
New memory writes store canonical `origin` metadata. `origin.user` is the configured human identity, `origin.agent` is the automated actor or local surface, `origin.interface` is the entry point (`mcp`, `daemon`, `ui`, `api`, `cli`, or `system`), and `origin.operation` records the create/update/delete/verify/forget/review/correct/reinforce/supersede/feedback action.
|
|
32
|
+
|
|
33
|
+
`bikky setup` provisions `identity.user_id` and `identity.user_name` if they are missing. It never overwrites an existing configured user. Runtime detection uses this order:
|
|
34
|
+
|
|
35
|
+
1. `identity.user_id` / `identity.user_name` from config
|
|
36
|
+
2. `BIKKY_USER_ID` / `BIKKY_USER_NAME`
|
|
37
|
+
3. Git config (`user.name`, `user.email`; email-like identifiers are hashed)
|
|
38
|
+
4. Shell/OS username
|
|
39
|
+
5. Hostname fallback
|
|
40
|
+
|
|
41
|
+
MCP callers cannot pass `origin` or override the human user. Use `BIKKY_AGENT_ID` / `BIKKY_AGENT_NAME` only when you need to label the local automated agent process explicitly; otherwise bikky labels the daemon/UI/MCP surface from the hostname.
|
|
28
42
|
|
|
29
43
|
## Common setups
|
|
30
44
|
|
|
@@ -50,7 +64,7 @@ Best for performance and teams. Qdrant Cloud stores vectors, and hosted embeddin
|
|
|
50
64
|
"embedding": {
|
|
51
65
|
"provider": "openai",
|
|
52
66
|
"model": "text-embedding-3-small",
|
|
53
|
-
"dimensions":
|
|
67
|
+
"dimensions": 1024,
|
|
54
68
|
"api_key": "sk-..."
|
|
55
69
|
},
|
|
56
70
|
"llm": {
|
|
@@ -74,7 +88,7 @@ Best for local vector storage with hosted extraction and embedding quality.
|
|
|
74
88
|
"embedding": {
|
|
75
89
|
"provider": "openai",
|
|
76
90
|
"model": "text-embedding-3-small",
|
|
77
|
-
"dimensions":
|
|
91
|
+
"dimensions": 1024,
|
|
78
92
|
"api_key": "sk-..."
|
|
79
93
|
},
|
|
80
94
|
"llm": {
|
|
@@ -85,7 +99,7 @@ Best for local vector storage with hosted extraction and embedding quality.
|
|
|
85
99
|
}
|
|
86
100
|
```
|
|
87
101
|
|
|
88
|
-
`qdrant_api_key` is optional. Leave it empty or omit it for local or unauthenticated self-hosted Qdrant. Prefer env vars for hosted model auth? Omit `api_key` above and set `OPENAI_API_KEY` instead.
|
|
102
|
+
`qdrant_api_key` is optional. Leave it empty or omit it for local or unauthenticated self-hosted Qdrant. Prefer env vars for hosted model auth? Omit `api_key` above and set `OPENAI_API_KEY` or `PORTKEY_API_KEY` for the selected provider instead.
|
|
89
103
|
|
|
90
104
|
### Local and free
|
|
91
105
|
|
|
@@ -134,11 +148,17 @@ export QDRANT_API_KEY="..." # only needed for Qdrant Cloud or authenticated sel
|
|
|
134
148
|
|
|
135
149
|
Useful basics:
|
|
136
150
|
|
|
137
|
-
| Env var
|
|
138
|
-
|
|
|
139
|
-
| `QDRANT_URL`
|
|
140
|
-
| `QDRANT_API_KEY`
|
|
141
|
-
| `
|
|
151
|
+
| Env var | Config field | Notes |
|
|
152
|
+
| ------------------ | --------------------- | --------------------------------------------------------------------------------------- |
|
|
153
|
+
| `QDRANT_URL` | `qdrant_url` | Required unless set in config |
|
|
154
|
+
| `QDRANT_API_KEY` | `qdrant_api_key` | Optional for local/unauthenticated Qdrant; usually needed for Qdrant Cloud |
|
|
155
|
+
| `OPENAI_API_KEY` | `embedding.api_key` / `llm.api_key` | Fallback key for `openai` when `api_key` is omitted from config |
|
|
156
|
+
| `PORTKEY_API_KEY` | `embedding.api_key` / `llm.api_key` | Fallback key for `portkey` when `api_key` is omitted from config |
|
|
157
|
+
| `BIKKY_HOME` | — | Moves the config/log/state directory from `~/.bikky` |
|
|
158
|
+
| `BIKKY_USER_ID` | `identity.user_id` | Explicit human user id for origin provisioning |
|
|
159
|
+
| `BIKKY_USER_NAME` | `identity.user_name` | Human-readable human user name for origin provisioning |
|
|
160
|
+
| `BIKKY_AGENT_ID` | — | Optional local automated-agent id stored in `origin.agent` |
|
|
161
|
+
| `BIKKY_AGENT_NAME` | — | Optional local automated-agent label stored in `origin.agent` |
|
|
142
162
|
|
|
143
163
|
## Provider options
|
|
144
164
|
|
|
@@ -149,7 +169,7 @@ Use these exact values in `embedding.provider` and `llm.provider`. Both fields a
|
|
|
149
169
|
| `ollama` | Yes | Yes | Local and free defaults | None |
|
|
150
170
|
| `openai` | Yes | Yes | Simple hosted models | `OPENAI_API_KEY` or `api_key` |
|
|
151
171
|
| `bedrock` | Yes | Yes | AWS-managed models | AWS credentials or IAM role |
|
|
152
|
-
| `portkey` | Yes | Yes | Gateway/routing over other providers |
|
|
172
|
+
| `portkey` | Yes | Yes | Gateway/routing over other providers | `PORTKEY_API_KEY` or `api_key` |
|
|
153
173
|
|
|
154
174
|
## Advanced configuration
|
|
155
175
|
|
|
@@ -175,7 +195,7 @@ These sections are optional references for custom providers, tuning, scoping, an
|
|
|
175
195
|
| `embedding.model` | `EMBEDDING_MODEL` | `qwen3-embedding:0.6b` | Embedding model name |
|
|
176
196
|
| `embedding.dimensions` | `EMBEDDING_DIMENSIONS` | `1024` | Must match the selected model output |
|
|
177
197
|
| `embedding.base_url` | `EMBEDDING_BASE_URL` | `http://localhost:11434` | Used by local or OpenAI-compatible providers |
|
|
178
|
-
| `embedding.api_key` | `OPENAI_API_KEY`
|
|
198
|
+
| `embedding.api_key` | `OPENAI_API_KEY` / `PORTKEY_API_KEY` | — | Provider API key; env vars are fallback when omitted from config |
|
|
179
199
|
|
|
180
200
|
Common model dimensions:
|
|
181
201
|
|
|
@@ -187,7 +207,7 @@ Common model dimensions:
|
|
|
187
207
|
| `openai` | `text-embedding-3-large` | `3072` |
|
|
188
208
|
| `bedrock` | `amazon.titan-embed-text-v2:0` | `1024` |
|
|
189
209
|
|
|
190
|
-
|
|
210
|
+
bikky's examples use `1024` because that is the portable default across supported providers. OpenAI 3-series embedding models can return their larger native dimensions above, but they also support shorter outputs; if you change `embedding.dimensions`, make sure the selected model and every Qdrant collection use the same dimension.
|
|
191
211
|
|
|
192
212
|
#### LLM
|
|
193
213
|
|
|
@@ -198,7 +218,7 @@ The LLM is used by background maintenance features. Ollama is the default.
|
|
|
198
218
|
| `llm.provider` | `LLM_PROVIDER` | `ollama` | One of `ollama`, `openai`, `bedrock`, `portkey` |
|
|
199
219
|
| `llm.model` | `LLM_MODEL` | `qwen2.5:7b` | LLM model name |
|
|
200
220
|
| `llm.base_url` | `LLM_BASE_URL` | `http://localhost:11434` | Used by local or OpenAI-compatible providers |
|
|
201
|
-
| `llm.api_key` | `OPENAI_API_KEY`
|
|
221
|
+
| `llm.api_key` | `OPENAI_API_KEY` / `PORTKEY_API_KEY` | — | Provider API key; env vars are fallback when omitted from config |
|
|
202
222
|
| `llm.extra.region` | `AWS_BEDROCK_REGION` / `AWS_REGION` | `us-east-1` | AWS Bedrock region |
|
|
203
223
|
|
|
204
224
|
#### Timeouts and retries
|
|
@@ -225,7 +245,7 @@ Retries use jittered exponential backoff for transient errors, rate limits, and
|
|
|
225
245
|
"embedding": {
|
|
226
246
|
"provider": "portkey",
|
|
227
247
|
"model": "@openai/text-embedding-3-small",
|
|
228
|
-
"dimensions":
|
|
248
|
+
"dimensions": 1024,
|
|
229
249
|
"api_key": "pk-..."
|
|
230
250
|
},
|
|
231
251
|
"llm": {
|
|
@@ -264,7 +284,7 @@ Most users only need one Qdrant destination. Use `destinations[]` when you want
|
|
|
264
284
|
|
|
265
285
|
Each destination has its own Qdrant credentials and collection. Add `description` when you have more than one destination; MCP tools expose those descriptions so LLM clients can pick the right search scope.
|
|
266
286
|
|
|
267
|
-
Writes still target one destination. A destination can include a `match` block with JavaScript `RegExp` strings for `cwd`, `entity`, `content`, or `metadata`. Destinations are evaluated in array order; the first destination with any matching pattern wins. If no pattern matches, bikky uses the destination marked `default: true`, or the first destination.
|
|
287
|
+
Writes still target one destination. A destination can include a `match` block with JavaScript `RegExp` strings for `cwd`, `entity`, `content`, or `metadata`. For memory writes, `content` matching uses a flattened routing view of the full memory context: stored content, entities, repo, branch, task/workstream keys, metadata, origin, relation fields, and other stored payload fields. Destinations are evaluated in array order; the first destination with any matching pattern wins. If no pattern matches, bikky uses the destination marked `default: true`, or the first destination.
|
|
268
288
|
|
|
269
289
|
Read tools (`memory_recall`, `memory_entity`, and `memory_relations`) can search one destination, the routed destination, or multiple destinations. Configure `default_search_scope` to control the default read behavior:
|
|
270
290
|
|
|
@@ -280,7 +300,7 @@ MCP clients can override this per call with `search_scope`. The value accepts `"
|
|
|
280
300
|
"embedding": {
|
|
281
301
|
"provider": "openai",
|
|
282
302
|
"model": "text-embedding-3-small",
|
|
283
|
-
"dimensions":
|
|
303
|
+
"dimensions": 1024
|
|
284
304
|
},
|
|
285
305
|
"llm": {
|
|
286
306
|
"provider": "openai",
|
|
@@ -333,6 +353,7 @@ MCP clients can override this per call with `search_scope`. The value accepts `"
|
|
|
333
353
|
Matching details:
|
|
334
354
|
|
|
335
355
|
- `match.cwd`, `match.entity`, and `match.content` are lists of JavaScript `RegExp` strings.
|
|
356
|
+
- On memory writes, `match.content` sees the full flattened memory context, so a pattern can match values such as `repo`, `branch`, `task_key`, origin fields, metadata values, or relation endpoints even when the visible memory text does not contain that term.
|
|
336
357
|
- `match.metadata` maps metadata keys to lists of JavaScript `RegExp` strings matched against that key's value.
|
|
337
358
|
- Matching uses OR logic across fields and within each list; any matching pattern selects the destination.
|
|
338
359
|
- Put the most specific destinations first because first match wins.
|
|
@@ -361,6 +382,10 @@ You normally do not need to tune these. `bikky setup` starts the daemon and regi
|
|
|
361
382
|
| `daemon.consolidation_enabled` | `true` | Consolidate summaries into durable patterns |
|
|
362
383
|
| `daemon.relation_inference_enabled` | `true` | Infer entity relationships |
|
|
363
384
|
| `daemon.entity_typing_enabled` | `true` | Classify entities for UI/graph filtering |
|
|
385
|
+
| `daemon.memory_quality_rollups_enabled` | `true` | Aggregate recall, feedback, stale, and confidence quality signals |
|
|
386
|
+
| `daemon.memory_quality_rollups_interval_sec` | `3600` | Seconds between memory quality rollup runs |
|
|
387
|
+
| `daemon.memory_quality_rollups_low_confidence_threshold` | `0.6` | Effective confidence below this value is counted as low-confidence |
|
|
388
|
+
| `daemon.memory_quality_rollups_max_scopes_per_run` | `100` | Maximum rollup scopes written per destination per run |
|
|
364
389
|
| `daemon.staleness_threshold_days` | `30` | Days before a fact is flagged as stale |
|
|
365
390
|
|
|
366
391
|
#### Watcher settings
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bikky",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Shared memory for AI coding sessions — MCP server + background daemon",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@aws-sdk/client-bedrock-runtime": "^3.1006.0",
|
|
61
61
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
62
62
|
"pino": "^10.3.1",
|
|
63
|
-
"zod": "^
|
|
63
|
+
"zod": "^4.4.1"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@types/node": "^25.6.0",
|