bikky 0.3.1 → 0.3.3
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 +124 -35
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +22 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +61 -6
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +17 -9
- package/dist/config.test.js.map +1 -1
- package/dist/daemon/capture-policy.d.ts +95 -0
- package/dist/daemon/capture-policy.d.ts.map +1 -0
- package/dist/daemon/capture-policy.js +139 -0
- package/dist/daemon/capture-policy.js.map +1 -0
- package/dist/daemon/capture-policy.test.d.ts +2 -0
- package/dist/daemon/capture-policy.test.d.ts.map +1 -0
- package/dist/daemon/capture-policy.test.js +46 -0
- package/dist/daemon/capture-policy.test.js.map +1 -0
- package/dist/daemon/consolidation.d.ts.map +1 -1
- package/dist/daemon/consolidation.js +84 -98
- package/dist/daemon/consolidation.js.map +1 -1
- package/dist/daemon/episode-summary.d.ts +72 -0
- package/dist/daemon/episode-summary.d.ts.map +1 -0
- package/dist/daemon/episode-summary.js +208 -0
- package/dist/daemon/episode-summary.js.map +1 -0
- package/dist/daemon/episode-summary.test.d.ts +2 -0
- package/dist/daemon/episode-summary.test.d.ts.map +1 -0
- package/dist/daemon/episode-summary.test.js +101 -0
- package/dist/daemon/episode-summary.test.js.map +1 -0
- package/dist/daemon/extraction.d.ts +25 -0
- package/dist/daemon/extraction.d.ts.map +1 -1
- package/dist/daemon/extraction.js +244 -124
- package/dist/daemon/extraction.js.map +1 -1
- package/dist/daemon/extraction.test.d.ts +2 -0
- package/dist/daemon/extraction.test.d.ts.map +1 -0
- package/dist/daemon/extraction.test.js +106 -0
- package/dist/daemon/extraction.test.js.map +1 -0
- package/dist/daemon/loop.d.ts.map +1 -1
- package/dist/daemon/loop.js +8 -6
- package/dist/daemon/loop.js.map +1 -1
- package/dist/daemon/qdrant.d.ts +59 -8
- package/dist/daemon/qdrant.d.ts.map +1 -1
- package/dist/daemon/qdrant.js +74 -23
- package/dist/daemon/qdrant.js.map +1 -1
- package/dist/daemon/qdrant.test.js +2 -2
- package/dist/daemon/qdrant.test.js.map +1 -1
- package/dist/daemon/relations.d.ts +6 -1
- package/dist/daemon/relations.d.ts.map +1 -1
- package/dist/daemon/relations.js +44 -63
- package/dist/daemon/relations.js.map +1 -1
- package/dist/daemon/session-index.d.ts +60 -0
- package/dist/daemon/session-index.d.ts.map +1 -0
- package/dist/daemon/session-index.js +136 -0
- package/dist/daemon/session-index.js.map +1 -0
- package/dist/daemon/session-index.test.d.ts +2 -0
- package/dist/daemon/session-index.test.d.ts.map +1 -0
- package/dist/daemon/session-index.test.js +54 -0
- package/dist/daemon/session-index.test.js.map +1 -0
- package/dist/daemon/session-summary.d.ts +69 -0
- package/dist/daemon/session-summary.d.ts.map +1 -0
- package/dist/daemon/session-summary.js +200 -0
- package/dist/daemon/session-summary.js.map +1 -0
- package/dist/daemon/session-summary.test.d.ts +2 -0
- package/dist/daemon/session-summary.test.d.ts.map +1 -0
- package/dist/daemon/session-summary.test.js +160 -0
- package/dist/daemon/session-summary.test.js.map +1 -0
- package/dist/daemon/staleness.test.d.ts +7 -0
- package/dist/daemon/staleness.test.d.ts.map +1 -0
- package/dist/daemon/staleness.test.js +128 -0
- package/dist/daemon/staleness.test.js.map +1 -0
- package/dist/daemon/workstream-summary.d.ts +61 -0
- package/dist/daemon/workstream-summary.d.ts.map +1 -0
- package/dist/daemon/workstream-summary.js +220 -0
- package/dist/daemon/workstream-summary.js.map +1 -0
- package/dist/daemon/workstream-summary.test.d.ts +2 -0
- package/dist/daemon/workstream-summary.test.d.ts.map +1 -0
- package/dist/daemon/workstream-summary.test.js +86 -0
- package/dist/daemon/workstream-summary.test.js.map +1 -0
- package/dist/lib/qdrant-client.d.ts +6 -1
- package/dist/lib/qdrant-client.d.ts.map +1 -1
- package/dist/lib/qdrant-client.js +3 -4
- package/dist/lib/qdrant-client.js.map +1 -1
- package/dist/lib/qdrant-client.test.js +21 -2
- package/dist/lib/qdrant-client.test.js.map +1 -1
- package/dist/lifecycle.test.d.ts +8 -0
- package/dist/lifecycle.test.d.ts.map +1 -0
- package/dist/lifecycle.test.js +74 -0
- package/dist/lifecycle.test.js.map +1 -0
- package/dist/llm/embedding/index.d.ts +42 -0
- package/dist/llm/embedding/index.d.ts.map +1 -0
- package/dist/llm/embedding/index.js +78 -0
- package/dist/llm/embedding/index.js.map +1 -0
- package/dist/llm/embedding/index.test.d.ts +8 -0
- package/dist/llm/embedding/index.test.d.ts.map +1 -0
- package/dist/llm/embedding/index.test.js +100 -0
- package/dist/llm/embedding/index.test.js.map +1 -0
- package/dist/llm/embedding/providers/bedrock.d.ts +16 -0
- package/dist/llm/embedding/providers/bedrock.d.ts.map +1 -0
- package/dist/llm/embedding/providers/bedrock.js +90 -0
- package/dist/llm/embedding/providers/bedrock.js.map +1 -0
- package/dist/llm/embedding/providers/bedrock.test.d.ts +2 -0
- package/dist/llm/embedding/providers/bedrock.test.d.ts.map +1 -0
- package/dist/llm/embedding/providers/bedrock.test.js +24 -0
- package/dist/llm/embedding/providers/bedrock.test.js.map +1 -0
- package/dist/llm/embedding/providers/index.d.ts +9 -0
- package/dist/llm/embedding/providers/index.d.ts.map +1 -0
- package/dist/llm/embedding/providers/index.js +9 -0
- package/dist/llm/embedding/providers/index.js.map +1 -0
- package/dist/llm/embedding/providers/ollama.d.ts +6 -0
- package/dist/llm/embedding/providers/ollama.d.ts.map +1 -0
- package/dist/llm/embedding/providers/ollama.js +39 -0
- package/dist/llm/embedding/providers/ollama.js.map +1 -0
- package/dist/llm/embedding/providers/ollama.test.d.ts +2 -0
- package/dist/llm/embedding/providers/ollama.test.d.ts.map +1 -0
- package/dist/llm/embedding/providers/ollama.test.js +54 -0
- package/dist/llm/embedding/providers/ollama.test.js.map +1 -0
- package/dist/llm/embedding/providers/openai.d.ts +6 -0
- package/dist/llm/embedding/providers/openai.d.ts.map +1 -0
- package/dist/llm/embedding/providers/openai.js +44 -0
- package/dist/llm/embedding/providers/openai.js.map +1 -0
- package/dist/llm/embedding/providers/openai.test.d.ts +2 -0
- package/dist/llm/embedding/providers/openai.test.d.ts.map +1 -0
- package/dist/llm/embedding/providers/openai.test.js +48 -0
- package/dist/llm/embedding/providers/openai.test.js.map +1 -0
- package/dist/llm/embedding/providers/portkey.d.ts +15 -0
- package/dist/llm/embedding/providers/portkey.d.ts.map +1 -0
- package/dist/llm/embedding/providers/portkey.js +58 -0
- package/dist/llm/embedding/providers/portkey.js.map +1 -0
- package/dist/llm/embedding/providers/portkey.test.d.ts +2 -0
- package/dist/llm/embedding/providers/portkey.test.d.ts.map +1 -0
- package/dist/llm/embedding/providers/portkey.test.js +56 -0
- package/dist/llm/embedding/providers/portkey.test.js.map +1 -0
- package/dist/llm/embedding/registry.d.ts +14 -0
- package/dist/llm/embedding/registry.d.ts.map +1 -0
- package/dist/llm/embedding/registry.js +27 -0
- package/dist/llm/embedding/registry.js.map +1 -0
- package/dist/llm/embedding/registry.test.d.ts +7 -0
- package/dist/llm/embedding/registry.test.d.ts.map +1 -0
- package/dist/llm/embedding/registry.test.js +68 -0
- package/dist/llm/embedding/registry.test.js.map +1 -0
- package/dist/llm/embedding/types.d.ts +55 -0
- package/dist/llm/embedding/types.d.ts.map +1 -0
- package/dist/llm/embedding/types.js +12 -0
- package/dist/llm/embedding/types.js.map +1 -0
- package/dist/llm/errors.d.ts +95 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +164 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/errors.test.d.ts +2 -0
- package/dist/llm/errors.test.d.ts.map +1 -0
- package/dist/llm/errors.test.js +103 -0
- package/dist/llm/errors.test.js.map +1 -0
- package/dist/llm/fetch.d.ts +39 -0
- package/dist/llm/fetch.d.ts.map +1 -0
- package/dist/llm/fetch.js +52 -0
- package/dist/llm/fetch.js.map +1 -0
- package/dist/llm/index.d.ts +6 -3
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -2
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/inference/index.d.ts +39 -0
- package/dist/llm/inference/index.d.ts.map +1 -0
- package/dist/llm/inference/index.js +118 -0
- package/dist/llm/inference/index.js.map +1 -0
- package/dist/llm/inference/index.test.d.ts +6 -0
- package/dist/llm/inference/index.test.d.ts.map +1 -0
- package/dist/llm/inference/index.test.js +109 -0
- package/dist/llm/inference/index.test.js.map +1 -0
- package/dist/llm/inference/providers/bedrock.d.ts +18 -0
- package/dist/llm/inference/providers/bedrock.d.ts.map +1 -0
- package/dist/llm/inference/providers/bedrock.js +105 -0
- package/dist/llm/inference/providers/bedrock.js.map +1 -0
- package/dist/llm/inference/providers/bedrock.test.d.ts +2 -0
- package/dist/llm/inference/providers/bedrock.test.d.ts.map +1 -0
- package/dist/llm/inference/providers/bedrock.test.js +21 -0
- package/dist/llm/inference/providers/bedrock.test.js.map +1 -0
- package/dist/llm/inference/providers/index.d.ts +10 -0
- package/dist/llm/inference/providers/index.d.ts.map +1 -0
- package/dist/llm/inference/providers/index.js +10 -0
- package/dist/llm/inference/providers/index.js.map +1 -0
- package/dist/llm/inference/providers/ollama.d.ts +8 -0
- package/dist/llm/inference/providers/ollama.d.ts.map +1 -0
- package/dist/llm/inference/providers/ollama.js +63 -0
- package/dist/llm/inference/providers/ollama.js.map +1 -0
- package/dist/llm/inference/providers/ollama.test.d.ts +2 -0
- package/dist/llm/inference/providers/ollama.test.d.ts.map +1 -0
- package/dist/llm/inference/providers/ollama.test.js +57 -0
- package/dist/llm/inference/providers/ollama.test.js.map +1 -0
- package/dist/llm/inference/providers/openai.d.ts +11 -0
- package/dist/llm/inference/providers/openai.d.ts.map +1 -0
- package/dist/llm/inference/providers/openai.js +73 -0
- package/dist/llm/inference/providers/openai.js.map +1 -0
- package/dist/llm/inference/providers/openai.test.d.ts +2 -0
- package/dist/llm/inference/providers/openai.test.d.ts.map +1 -0
- package/dist/llm/inference/providers/openai.test.js +46 -0
- package/dist/llm/inference/providers/openai.test.js.map +1 -0
- package/dist/llm/inference/providers/portkey.d.ts +13 -0
- package/dist/llm/inference/providers/portkey.d.ts.map +1 -0
- package/dist/llm/inference/providers/portkey.js +80 -0
- package/dist/llm/inference/providers/portkey.js.map +1 -0
- package/dist/llm/inference/providers/portkey.test.d.ts +2 -0
- package/dist/llm/inference/providers/portkey.test.d.ts.map +1 -0
- package/dist/llm/inference/providers/portkey.test.js +48 -0
- package/dist/llm/inference/providers/portkey.test.js.map +1 -0
- package/dist/llm/inference/registry.d.ts +15 -0
- package/dist/llm/inference/registry.d.ts.map +1 -0
- package/dist/llm/inference/registry.js +28 -0
- package/dist/llm/inference/registry.js.map +1 -0
- package/dist/llm/inference/registry.test.d.ts +6 -0
- package/dist/llm/inference/registry.test.d.ts.map +1 -0
- package/dist/llm/inference/registry.test.js +63 -0
- package/dist/llm/inference/registry.test.js.map +1 -0
- package/dist/llm/inference/types.d.ts +84 -0
- package/dist/llm/inference/types.d.ts.map +1 -0
- package/dist/llm/inference/types.js +9 -0
- package/dist/llm/inference/types.js.map +1 -0
- package/dist/llm/telemetry.d.ts +25 -0
- package/dist/llm/telemetry.d.ts.map +1 -0
- package/dist/llm/telemetry.js +43 -0
- package/dist/llm/telemetry.js.map +1 -0
- package/dist/llm/telemetry.test.d.ts +5 -0
- package/dist/llm/telemetry.test.d.ts.map +1 -0
- package/dist/llm/telemetry.test.js +89 -0
- package/dist/llm/telemetry.test.js.map +1 -0
- package/dist/llm/types.d.ts +4 -37
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +4 -1
- package/dist/llm/types.js.map +1 -1
- package/dist/logger.d.ts +18 -3
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +102 -20
- package/dist/logger.js.map +1 -1
- package/dist/logger.test.d.ts +5 -0
- package/dist/logger.test.d.ts.map +1 -0
- package/dist/logger.test.js +103 -0
- package/dist/logger.test.js.map +1 -0
- package/dist/mcp/api.d.ts +15 -1
- package/dist/mcp/api.d.ts.map +1 -1
- package/dist/mcp/api.js +44 -19
- package/dist/mcp/api.js.map +1 -1
- package/dist/mcp/api.test.d.ts +6 -0
- package/dist/mcp/api.test.d.ts.map +1 -0
- package/dist/mcp/api.test.js +130 -0
- package/dist/mcp/api.test.js.map +1 -0
- package/dist/mcp/helpers.d.ts +1 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +62 -6
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/helpers.test.js +71 -10
- package/dist/mcp/helpers.test.js.map +1 -1
- package/dist/mcp/index.d.ts +7 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +46 -21
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/taxonomy.d.ts +251 -31
- package/dist/mcp/taxonomy.d.ts.map +1 -1
- package/dist/mcp/taxonomy.js +603 -171
- package/dist/mcp/taxonomy.js.map +1 -1
- package/dist/mcp/taxonomy.test.d.ts +1 -1
- package/dist/mcp/taxonomy.test.js +141 -302
- package/dist/mcp/taxonomy.test.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.integration.itest.d.ts +23 -0
- package/dist/mcp/tools.integration.itest.d.ts.map +1 -0
- package/dist/mcp/tools.integration.itest.js +172 -0
- package/dist/mcp/tools.integration.itest.js.map +1 -0
- package/dist/mcp/tools.js +422 -357
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/tools.test.d.ts +16 -0
- package/dist/mcp/tools.test.d.ts.map +1 -0
- package/dist/mcp/tools.test.js +472 -0
- package/dist/mcp/tools.test.js.map +1 -0
- package/dist/mcp/types.d.ts +63 -8
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/prompts/brief.d.ts +19 -0
- package/dist/prompts/brief.d.ts.map +1 -0
- package/dist/prompts/brief.js +67 -0
- package/dist/prompts/brief.js.map +1 -0
- package/dist/prompts/contradiction.d.ts +24 -0
- package/dist/prompts/contradiction.d.ts.map +1 -0
- package/dist/prompts/contradiction.js +73 -0
- package/dist/prompts/contradiction.js.map +1 -0
- package/dist/prompts/distill.d.ts +21 -0
- package/dist/prompts/distill.d.ts.map +1 -0
- package/dist/prompts/distill.js +92 -0
- package/dist/prompts/distill.js.map +1 -0
- package/dist/prompts/episode-summary.d.ts +15 -0
- package/dist/prompts/episode-summary.d.ts.map +1 -0
- package/dist/prompts/episode-summary.js +60 -0
- package/dist/prompts/episode-summary.js.map +1 -0
- package/dist/prompts/extraction.d.ts +14 -0
- package/dist/prompts/extraction.d.ts.map +1 -0
- package/dist/prompts/extraction.js +110 -0
- package/dist/prompts/extraction.js.map +1 -0
- package/dist/prompts/index.d.ts +52 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +104 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/prompts.test.d.ts +8 -0
- package/dist/prompts/prompts.test.d.ts.map +1 -0
- package/dist/prompts/prompts.test.js +140 -0
- package/dist/prompts/prompts.test.js.map +1 -0
- package/dist/prompts/relations.d.ts +17 -0
- package/dist/prompts/relations.d.ts.map +1 -0
- package/dist/prompts/relations.js +72 -0
- package/dist/prompts/relations.js.map +1 -0
- package/dist/prompts/workstream-summary.d.ts +17 -0
- package/dist/prompts/workstream-summary.d.ts.map +1 -0
- package/dist/prompts/workstream-summary.js +72 -0
- package/dist/prompts/workstream-summary.js.map +1 -0
- package/dist/render.d.ts +41 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +185 -0
- package/dist/render.js.map +1 -0
- package/dist/render.test.d.ts +8 -0
- package/dist/render.test.d.ts.map +1 -0
- package/dist/render.test.js +243 -0
- package/dist/render.test.js.map +1 -0
- package/docs/diagrams/architecture.svg +87 -0
- package/docs/diagrams/team-memory.svg +250 -0
- package/docs/screenshots/dashboard.png +0 -0
- package/docs/screenshots/graph.png +0 -0
- package/docs/screenshots/memory.png +0 -0
- package/package.json +12 -3
- package/dist/llm/embedding.d.ts +0 -13
- package/dist/llm/embedding.d.ts.map +0 -1
- package/dist/llm/embedding.js +0 -127
- package/dist/llm/embedding.js.map +0 -1
- package/dist/llm/embedding.test.d.ts +0 -8
- package/dist/llm/embedding.test.d.ts.map +0 -1
- package/dist/llm/embedding.test.js +0 -117
- package/dist/llm/embedding.test.js.map +0 -1
- package/dist/llm/inference.d.ts +0 -12
- package/dist/llm/inference.d.ts.map +0 -1
- package/dist/llm/inference.js +0 -146
- package/dist/llm/inference.js.map +0 -1
- package/dist/llm/inference.test.d.ts +0 -8
- package/dist/llm/inference.test.d.ts.map +0 -1
- package/dist/llm/inference.test.js +0 -117
- package/dist/llm/inference.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,27 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">bikky</h1>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center"><b>Persistent memory for AI coding agents — for teams, and for solo power users.</b></p>
|
|
4
4
|
|
|
5
|
-
bikky gives
|
|
5
|
+
bikky gives AI coding agents (GitHub Copilot, Claude Code, Cursor, and other MCP clients) long-term memory that persists across sessions, across tools, and across your whole team. Whether you're a team that wants every engineer's agent to start from the same knowledge base, or a solo power dev running a dozen agentic sessions a day, bikky captures what's learned *during* sessions so future sessions start smarter.
|
|
6
|
+
|
|
7
|
+
### Who it's for
|
|
8
|
+
|
|
9
|
+
| | |
|
|
10
|
+
|---|---|
|
|
11
|
+
| 👥 **Teams & software factories** | What one engineer's agent learns today, every agent on the team can recall tomorrow. Shared memory turns institutional knowledge into something queryable instead of tribal — onboarding accelerates, conventions stop drifting, and the same lesson never gets re-learned twice. |
|
|
12
|
+
| 🧑💻 **Solo AI power devs** | You run multiple Cursor / Claude Code / Copilot sessions every day and you're tired of re-explaining the codebase, the conventions, and last week's decisions to each new agent. bikky remembers across every session and every tool. |
|
|
6
13
|
|
|
7
14
|
<p align="center">
|
|
8
|
-
<img src="https://
|
|
15
|
+
<img src="https://cdn.jsdelivr.net/npm/bikky@latest/docs/diagrams/team-memory.svg" alt="Memory — facts flow from individual sessions into a self-curating knowledge store, shared across your team (or kept just for you)" width="720" />
|
|
9
16
|
</p>
|
|
10
17
|
|
|
11
|
-
<p align="center"><i>Knowledge flows from every
|
|
18
|
+
<p align="center"><i>Knowledge flows from every session into a store that curates itself over time — deduplicating, distilling, and decaying stale facts — so every future session starts smarter. Share the workspace across a team, or keep it solo.</i></p>
|
|
12
19
|
|
|
13
20
|
---
|
|
14
21
|
|
|
15
22
|
### The problem
|
|
16
23
|
|
|
17
|
-
|
|
24
|
+
The most valuable things you and your agents learn — why a config value exists, which deploy step matters, what broke last quarter, the convention you settled on yesterday — happen *during* sessions. And then they vanish when the session closes. Whether you're a team — where knowledge lives in heads, chat threads, and closed PRs, and every new engineer's agent has to learn it from scratch — or a solo power dev juggling dozens of agentic sessions a day across multiple tools that don't remember each other, it's the same wall. Hand-written docs drift the moment they're published.
|
|
18
25
|
|
|
19
26
|
### How bikky solves it
|
|
20
27
|
|
|
21
28
|
| | |
|
|
22
29
|
|---|---|
|
|
23
30
|
| **Capture** | Facts are extracted automatically from session transcripts — no manual docs to write |
|
|
24
|
-
| **
|
|
31
|
+
| **Recall** | Every new session — yours or a teammate's — recalls from the same store via semantic search |
|
|
25
32
|
| **Curate** | Deduplication, confidence decay, contradiction detection, and distillation run autonomously |
|
|
26
33
|
| **Compound** | Session 50 is dramatically better than session 1 — accumulated memory, not better prompts |
|
|
27
34
|
|
|
@@ -29,43 +36,113 @@ Every engineering team runs on institutional knowledge — why that config value
|
|
|
29
36
|
|
|
30
37
|
## Quick start
|
|
31
38
|
|
|
39
|
+
The fastest way to try bikky: **100% local, free, no accounts** — Qdrant in Docker, embeddings via Ollama.
|
|
40
|
+
|
|
32
41
|
```bash
|
|
42
|
+
# 1. Pull and run Qdrant (vector store)
|
|
43
|
+
docker run -d --name qdrant -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
|
|
44
|
+
|
|
45
|
+
# 2. Install Ollama (https://ollama.com) and pull the default embedding model
|
|
46
|
+
ollama pull qwen3-embedding:0.6b
|
|
47
|
+
|
|
48
|
+
# 3. Install and start bikky
|
|
33
49
|
npm install -g bikky
|
|
34
|
-
|
|
50
|
+
echo '{ "qdrant_url": "http://localhost:6333" }' > ~/.bikky/config.json
|
|
51
|
+
bikky setup # writes MCP config for Copilot + Claude Code, then starts the daemon
|
|
35
52
|
```
|
|
36
53
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Then configure credentials — pick one:
|
|
54
|
+
Restart your editor — the memory tools (`memory_store`, `memory_recall`, …) appear automatically.
|
|
40
55
|
|
|
41
56
|
```bash
|
|
42
|
-
#
|
|
43
|
-
|
|
57
|
+
bikky status # sanity-check that Qdrant + embeddings are reachable
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
That's the whole thing. From here you can swap any piece (hosted Qdrant, OpenAI / Bedrock embeddings, a hosted LLM for richer daemon distillation) — see **Setup** below.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Setup
|
|
65
|
+
|
|
66
|
+
### Prerequisites
|
|
44
67
|
|
|
45
|
-
|
|
46
|
-
|
|
68
|
+
| | Required | Options |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| **Node.js** | ≥ 20 | `nvm install 20` or your package manager |
|
|
71
|
+
| **Vector store** | Qdrant | **Local Docker** (free, recommended for dev) · **[Qdrant Cloud](https://cloud.qdrant.io)** (free tier, 1 GB) · **Self-hosted** anywhere reachable |
|
|
72
|
+
| **Embeddings** | One provider | **[Ollama](https://ollama.com)** local (free, default) · **OpenAI** · **AWS Bedrock** · **[Portkey](https://portkey.ai)** gateway |
|
|
73
|
+
| **LLM** *(optional)* | Used by the daemon for distillation & extraction | Same provider list as embeddings — leave on Ollama for a fully-local stack |
|
|
74
|
+
| **Docker** *(optional)* | Only if you run Qdrant locally | Docker Desktop, OrbStack, colima, etc. |
|
|
47
75
|
|
|
48
|
-
|
|
49
|
-
|
|
76
|
+
### Install
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install -g bikky # CLI + MCP server + daemon
|
|
80
|
+
npm install -g bikky-ui # optional web dashboard
|
|
50
81
|
```
|
|
51
82
|
|
|
52
|
-
|
|
83
|
+
### Pick your stack
|
|
84
|
+
|
|
85
|
+
- **Fully local & free** — Qdrant in Docker + Ollama. Best for solo dev, no data leaves your machine. (See Quick start.)
|
|
86
|
+
- **Hosted Qdrant + local Ollama** — Qdrant Cloud free tier for shared/team memory; embeddings still local.
|
|
87
|
+
- **Fully hosted** — Qdrant Cloud + OpenAI / Bedrock / Portkey for embeddings and LLM. Best for teams that want a single shared memory across many machines.
|
|
88
|
+
|
|
89
|
+
### Configure
|
|
90
|
+
|
|
91
|
+
Three ways to provide credentials, pick one:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# A) Let your agent do it
|
|
95
|
+
> "Call configure_credentials with my Qdrant URL (and API key if needed)"
|
|
96
|
+
|
|
97
|
+
# B) Config file (~/.bikky/config.json)
|
|
98
|
+
echo '{ "qdrant_url": "http://localhost:6333" }' > ~/.bikky/config.json
|
|
53
99
|
|
|
54
|
-
|
|
100
|
+
# C) Environment variables
|
|
101
|
+
export QDRANT_URL="http://localhost:6333"
|
|
102
|
+
# export QDRANT_API_KEY="…" # only for Qdrant Cloud / authenticated self-hosted
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> 📖 **Full configuration reference** — providers, models, daemon settings, env vars, copy-paste examples for every stack: **[docs/configuration.md](docs/configuration.md)**
|
|
106
|
+
>
|
|
107
|
+
> 🛠 Want to add a new embedding or LLM provider (Vertex, OpenRouter, etc.)? See **[CONTRIBUTING.md](CONTRIBUTING.md)** — it's a single-file change.
|
|
55
108
|
|
|
56
109
|
---
|
|
57
110
|
|
|
58
111
|
## How it works
|
|
59
112
|
|
|
60
113
|
<p align="center">
|
|
61
|
-
<img src="https://
|
|
114
|
+
<img src="https://cdn.jsdelivr.net/npm/bikky@latest/docs/diagrams/architecture.svg" alt="Architecture" width="600" />
|
|
62
115
|
</p>
|
|
63
116
|
|
|
64
117
|
**MCP Server** — tools your agent calls directly:
|
|
65
118
|
|
|
66
|
-
`memory_store` · `memory_recall` · `memory_entity` · `memory_relations` · `memory_forget` · `memory_verify` · `
|
|
119
|
+
`memory_store` · `memory_recall` · `memory_entity` · `memory_relations` · `memory_forget` · `memory_verify` · `memory_heartbeat` · `memory_review` · `configure_credentials` · `verify_connection`
|
|
120
|
+
|
|
121
|
+
**Daemon** — background process that passively watches session logs, extracts ontology-v2 facts, writes lightweight session indexes, captures coherent episode summaries, updates current-state workstream summaries, infers entity relationships, and runs the consolidation pipeline. Lifecycle memory is daemon-owned so agents do not need to remember summary/distillation tool calls.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Memory ontology
|
|
126
|
+
|
|
127
|
+
New daemon captures use ontology v2:
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
workspace -> domain -> repo/project/surface -> workstream -> episode -> memory objects
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`domain` is an activity/knowledge profile. The initial canonical domains are:
|
|
134
|
+
|
|
135
|
+
| Domain | Purpose |
|
|
136
|
+
|--------|---------|
|
|
137
|
+
| `software_engineering` | Default for coding-agent captures: repos, code, infrastructure, releases, incidents |
|
|
138
|
+
| `product_strategy` | Roadmap, positioning, experiments, customer insight, product decisions |
|
|
139
|
+
| `business_operations` | Company processes, vendors, compliance, obligations, recurring workflows |
|
|
140
|
+
| `research` | Source-backed investigation, hypotheses, contradictions, synthesis |
|
|
141
|
+
| `personal_productivity` | Individual goals, routines, preferences, projects, habits |
|
|
67
142
|
|
|
68
|
-
|
|
143
|
+
For `software_engineering`, canonical categories are `codebase`, `infrastructure`, `operations`, `decisions`, `product_domain`, `projects`, `people`, `preferences`, and `observations`.
|
|
144
|
+
|
|
145
|
+
`kind` stays small (`fact`, `summary`, `distilled`, `relation`, `telemetry`). More specific shape lives in `memory_subtype`, such as `codebase_map`, `architecture_decision`, `episode`, `workstream`, or `failure_mode`.
|
|
69
146
|
|
|
70
147
|
---
|
|
71
148
|
|
|
@@ -74,23 +151,17 @@ Restart your editor — 12 memory tools appear automatically.
|
|
|
74
151
|
Raw fact accumulation creates noise. bikky keeps the knowledge store clean automatically:
|
|
75
152
|
|
|
76
153
|
- **Deduplication** — content hash + vector similarity merges near-identical facts
|
|
154
|
+
- **Ontology scope fields** — optional `workspace_id`, repo, workstream, and episode metadata make recall more precise
|
|
77
155
|
- **Confidence decay** — old facts lose weight and surface for review
|
|
78
156
|
- **Contradiction detection** — conflicting facts are resolved, not silently stacked
|
|
79
157
|
- **Distillation** — recurring patterns across sessions consolidate into higher-level insights
|
|
80
158
|
- **Entity graph** — relationships between concepts are inferred for richer recall
|
|
81
159
|
|
|
82
|
-
### Ranking formula
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
(vectorScore × 0.55 + freshness × 0.15 + reinforcement × 0.1 + importance × 0.1)
|
|
86
|
-
× (0.7 + 0.3 × confidenceDecay)
|
|
87
|
-
```
|
|
88
|
-
|
|
89
160
|
---
|
|
90
161
|
|
|
91
162
|
## Web UI
|
|
92
163
|
|
|
93
|
-
[`bikky-ui`](packages/ui) is a local dashboard for browsing and managing your team's memory — facts, entities, and the relationship graph.
|
|
164
|
+
[`bikky-ui`](packages/ui) is a local dashboard for browsing and managing your team's memory — facts, entities, quality metrics, aggregate impact insights, and the relationship graph.
|
|
94
165
|
|
|
95
166
|
```bash
|
|
96
167
|
npx bikky-ui # one-shot — no install needed
|
|
@@ -100,17 +171,17 @@ bikky-ui # opens http://localhost:1422
|
|
|
100
171
|
```
|
|
101
172
|
|
|
102
173
|
<p align="center">
|
|
103
|
-
<img src="https://
|
|
174
|
+
<img src="https://cdn.jsdelivr.net/npm/bikky@latest/docs/screenshots/dashboard.png" alt="Dashboard — overview stats, category breakdown, recent facts" width="720" />
|
|
104
175
|
</p>
|
|
105
176
|
<p align="center"><i>Dashboard — memory stats, category breakdown, and recent facts at a glance</i></p>
|
|
106
177
|
|
|
107
178
|
<p align="center">
|
|
108
|
-
<img src="https://
|
|
179
|
+
<img src="https://cdn.jsdelivr.net/npm/bikky@latest/docs/screenshots/memory.png" alt="Memory browser — search, filter, and browse all stored facts" width="720" />
|
|
109
180
|
</p>
|
|
110
181
|
<p align="center"><i>Memory browser — search, filter by category/kind/source, and browse all stored facts</i></p>
|
|
111
182
|
|
|
112
183
|
<p align="center">
|
|
113
|
-
<img src="https://
|
|
184
|
+
<img src="https://cdn.jsdelivr.net/npm/bikky@latest/docs/screenshots/graph.png" alt="Entity graph — interactive visualization of entity relationships" width="720" />
|
|
114
185
|
</p>
|
|
115
186
|
<p align="center"><i>Entity graph — interactive visualization of how concepts, people, and services relate</i></p>
|
|
116
187
|
|
|
@@ -120,11 +191,29 @@ The UI reads from your existing `~/.bikky/config.json` — no extra configuratio
|
|
|
120
191
|
|
|
121
192
|
```bash
|
|
122
193
|
bikky mcp # start MCP server (stdio) — used by editors
|
|
123
|
-
bikky setup #
|
|
194
|
+
bikky setup # install MCP configs for Copilot + Claude Code, then start the daemon
|
|
195
|
+
bikky start # alias for setup
|
|
196
|
+
bikky stop # stop the background daemon
|
|
197
|
+
bikky daemon # run the daemon in the foreground
|
|
124
198
|
bikky status # check memory system health
|
|
125
|
-
bikky
|
|
199
|
+
bikky ui # launch the local web dashboard
|
|
200
|
+
bikky render # render a prompt to JSON (for eval harnesses & debugging)
|
|
126
201
|
```
|
|
127
202
|
|
|
203
|
+
### `bikky render` — inspect prompts
|
|
204
|
+
|
|
205
|
+
Render any of bikky'''s prompts to JSON without booting the MCP server. Useful for
|
|
206
|
+
external evaluation harnesses, prompt debugging, and reproducing model calls.
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
bikky render --list # list available prompts
|
|
210
|
+
echo '''{"transcript":"..."}''' | bikky render extraction # via stdin
|
|
211
|
+
bikky render extraction --input case.json # via file
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Output: a JSON object with `promptName`, `messages`, `temperature`,
|
|
215
|
+
`max_tokens`, and `response_format` — exactly what bikky sends to the LLM.
|
|
216
|
+
|
|
128
217
|
## License
|
|
129
218
|
|
|
130
219
|
AGPL-3.0 — see [LICENSE](LICENSE).
|
package/dist/cli.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* bikky setup — install MCP configs + start daemon (alias for start)
|
|
10
10
|
* bikky status — check memory system status
|
|
11
11
|
* bikky ui — open memory explorer web UI
|
|
12
|
+
* bikky render — render a prompt to JSON (for eval harnesses)
|
|
12
13
|
* bikky --version — print version
|
|
13
14
|
*/
|
|
14
15
|
export {};
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/dist/cli.js
CHANGED
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
* bikky setup — install MCP configs + start daemon (alias for start)
|
|
10
10
|
* bikky status — check memory system status
|
|
11
11
|
* bikky ui — open memory explorer web UI
|
|
12
|
+
* bikky render — render a prompt to JSON (for eval harnesses)
|
|
12
13
|
* bikky --version — print version
|
|
13
14
|
*/
|
|
14
15
|
import fs from "node:fs";
|
|
15
16
|
import path from "node:path";
|
|
16
17
|
import { startMcpServer } from "./mcp/index.js";
|
|
17
18
|
import { getDaemonStatus, startAll, killDaemon } from "./lifecycle.js";
|
|
19
|
+
import { runRenderCli } from "./render.js";
|
|
18
20
|
const command = process.argv[2] ?? "mcp";
|
|
19
21
|
function printVersion() {
|
|
20
22
|
try {
|
|
@@ -77,6 +79,10 @@ async function main() {
|
|
|
77
79
|
console.log("\nRun `bikky start` to launch everything.");
|
|
78
80
|
break;
|
|
79
81
|
}
|
|
82
|
+
case "render": {
|
|
83
|
+
const code = await runRenderCli(process.argv.slice(3));
|
|
84
|
+
process.exit(code);
|
|
85
|
+
}
|
|
80
86
|
case "ui": {
|
|
81
87
|
const { execSync } = await import("node:child_process");
|
|
82
88
|
console.log("🧠 Launching bikky ui…");
|
|
@@ -90,7 +96,7 @@ async function main() {
|
|
|
90
96
|
}
|
|
91
97
|
default:
|
|
92
98
|
console.error(`Unknown command: ${command}`);
|
|
93
|
-
console.error("Usage: bikky [start|stop|mcp|daemon|setup|status|ui|--version]");
|
|
99
|
+
console.error("Usage: bikky [start|stop|mcp|daemon|setup|status|ui|render|--version]");
|
|
94
100
|
process.exit(1);
|
|
95
101
|
}
|
|
96
102
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -10,18 +10,37 @@ export declare const LOG_DIR: string;
|
|
|
10
10
|
export declare const STATE_DIR: string;
|
|
11
11
|
export declare const PID_PATH: string;
|
|
12
12
|
export interface EmbeddingConfig {
|
|
13
|
-
|
|
13
|
+
/** Provider name as registered in the embedding registry. */
|
|
14
|
+
provider: string;
|
|
14
15
|
model: string;
|
|
15
16
|
dimensions: number;
|
|
16
17
|
base_url: string;
|
|
17
18
|
api_key: string | null;
|
|
19
|
+
/** Provider-specific extras (e.g. portkey virtual_key, bedrock region). */
|
|
20
|
+
extra?: Record<string, string>;
|
|
21
|
+
/** Per-request HTTP timeout. Defaults to 30s. */
|
|
22
|
+
timeout_ms?: number;
|
|
23
|
+
/** Max retries on transient/rate-limit/timeout failures. Defaults to 2. */
|
|
24
|
+
retries?: number;
|
|
25
|
+
/** Base backoff delay (ms) for retries. Defaults to 250ms. */
|
|
26
|
+
retry_base_delay_ms?: number;
|
|
18
27
|
}
|
|
19
28
|
export interface LLMConfig {
|
|
20
|
-
|
|
29
|
+
/** Provider name as registered in the inference registry. */
|
|
30
|
+
provider: string;
|
|
21
31
|
model: string;
|
|
22
32
|
base_url: string;
|
|
23
33
|
api_key: string | null;
|
|
24
|
-
|
|
34
|
+
/** Optional fallback provider name. */
|
|
35
|
+
fallback_provider?: string | null;
|
|
36
|
+
/** Provider-specific extras. */
|
|
37
|
+
extra?: Record<string, string>;
|
|
38
|
+
/** Per-request HTTP timeout. Defaults to 30s. */
|
|
39
|
+
timeout_ms?: number;
|
|
40
|
+
/** Max retries on transient/rate-limit/timeout failures. Defaults to 2. */
|
|
41
|
+
retries?: number;
|
|
42
|
+
/** Base backoff delay (ms) for retries. Defaults to 250ms. */
|
|
43
|
+
retry_base_delay_ms?: number;
|
|
25
44
|
}
|
|
26
45
|
export interface DaemonConfig {
|
|
27
46
|
tick_interval_sec: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAoC,CAAC;AAC3D,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAgC,CAAC;AACvD,eAAO,MAAM,QAAQ,QAAqC,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAoC,CAAC;AAC3D,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAgC,CAAC;AACvD,eAAO,MAAM,QAAQ,QAAqC,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,0BAA0B,EAAE,OAAO,CAAC;IACpC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAMD,QAAA,MAAM,QAAQ,EAAE,WA6Cf,CAAC;AA0BF,wBAAgB,UAAU,IAAI,WAAW,CA6GxC;AAED,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIpD;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -29,13 +29,21 @@ const DEFAULTS = {
|
|
|
29
29
|
dimensions: 1024,
|
|
30
30
|
base_url: "http://localhost:11434",
|
|
31
31
|
api_key: null,
|
|
32
|
+
extra: {},
|
|
33
|
+
timeout_ms: 30_000,
|
|
34
|
+
retries: 2,
|
|
35
|
+
retry_base_delay_ms: 250,
|
|
32
36
|
},
|
|
33
37
|
llm: {
|
|
34
38
|
provider: "ollama",
|
|
35
39
|
model: "qwen2.5:7b",
|
|
36
40
|
base_url: "http://localhost:11434",
|
|
37
41
|
api_key: null,
|
|
38
|
-
|
|
42
|
+
fallback_provider: null,
|
|
43
|
+
extra: {},
|
|
44
|
+
timeout_ms: 30_000,
|
|
45
|
+
retries: 2,
|
|
46
|
+
retry_base_delay_ms: 250,
|
|
39
47
|
},
|
|
40
48
|
daemon: {
|
|
41
49
|
tick_interval_sec: 5,
|
|
@@ -48,7 +56,7 @@ const DEFAULTS = {
|
|
|
48
56
|
},
|
|
49
57
|
watchers: {
|
|
50
58
|
copilot: { enabled: true, path: path.join(os.homedir(), ".copilot", "session-state") },
|
|
51
|
-
claude: { enabled:
|
|
59
|
+
claude: { enabled: true, path: path.join(os.homedir(), ".claude", "projects") },
|
|
52
60
|
},
|
|
53
61
|
qdrant_client: {
|
|
54
62
|
timeout_ms: 10_000,
|
|
@@ -114,6 +122,13 @@ export function loadConfig() {
|
|
|
114
122
|
config.embedding.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS, 10);
|
|
115
123
|
if (process.env.OPENAI_API_KEY)
|
|
116
124
|
config.embedding.api_key = process.env.OPENAI_API_KEY;
|
|
125
|
+
// Generic provider-extras: BIKKY_EMBEDDING_EXTRA_<KEY>=value
|
|
126
|
+
config.embedding.extra = config.embedding.extra ?? {};
|
|
127
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
128
|
+
if (k.startsWith("BIKKY_EMBEDDING_EXTRA_") && typeof v === "string") {
|
|
129
|
+
config.embedding.extra[k.slice("BIKKY_EMBEDDING_EXTRA_".length).toLowerCase()] = v;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
117
132
|
// LLM env overrides
|
|
118
133
|
if (process.env.LLM_PROVIDER)
|
|
119
134
|
config.llm.provider = process.env.LLM_PROVIDER;
|
|
@@ -123,12 +138,27 @@ export function loadConfig() {
|
|
|
123
138
|
config.llm.base_url = process.env.LLM_BASE_URL;
|
|
124
139
|
if (process.env.OPENAI_API_KEY && !config.llm.api_key)
|
|
125
140
|
config.llm.api_key = process.env.OPENAI_API_KEY;
|
|
126
|
-
if (process.env.
|
|
127
|
-
config.llm.
|
|
128
|
-
if (process.env.AWS_REGION && !process.env.AWS_BEDROCK_REGION)
|
|
129
|
-
config.llm.bedrock_region = process.env.AWS_REGION;
|
|
141
|
+
if (process.env.LLM_FALLBACK_PROVIDER)
|
|
142
|
+
config.llm.fallback_provider = process.env.LLM_FALLBACK_PROVIDER;
|
|
130
143
|
if (process.env.AWS_PROFILE)
|
|
131
144
|
config.aws_profile = process.env.AWS_PROFILE;
|
|
145
|
+
// Generic provider-extras: BIKKY_LLM_EXTRA_<KEY>=value
|
|
146
|
+
config.llm.extra = config.llm.extra ?? {};
|
|
147
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
148
|
+
if (k.startsWith("BIKKY_LLM_EXTRA_") && typeof v === "string") {
|
|
149
|
+
config.llm.extra[k.slice("BIKKY_LLM_EXTRA_".length).toLowerCase()] = v;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Convenience: forward AWS_BEDROCK_REGION / AWS_REGION into llm.extra.region
|
|
153
|
+
// and embedding.extra.region so the bedrock providers find them without
|
|
154
|
+
// requiring users to set BIKKY_LLM_EXTRA_REGION explicitly.
|
|
155
|
+
const awsRegion = process.env.AWS_BEDROCK_REGION ?? process.env.AWS_REGION;
|
|
156
|
+
if (awsRegion) {
|
|
157
|
+
if (!config.llm.extra.region)
|
|
158
|
+
config.llm.extra.region = awsRegion;
|
|
159
|
+
if (!config.embedding.extra.region)
|
|
160
|
+
config.embedding.extra.region = awsRegion;
|
|
161
|
+
}
|
|
132
162
|
// Qdrant client tuning env overrides
|
|
133
163
|
if (process.env.QDRANT_TIMEOUT_MS) {
|
|
134
164
|
const n = parseInt(process.env.QDRANT_TIMEOUT_MS, 10);
|
|
@@ -145,6 +175,31 @@ export function loadConfig() {
|
|
|
145
175
|
if (Number.isFinite(n) && n >= 0)
|
|
146
176
|
config.qdrant_client.retry_base_delay_ms = n;
|
|
147
177
|
}
|
|
178
|
+
// Embedding / LLM resilience tuning env overrides
|
|
179
|
+
const positiveInt = (raw) => {
|
|
180
|
+
if (!raw)
|
|
181
|
+
return null;
|
|
182
|
+
const n = parseInt(raw, 10);
|
|
183
|
+
return Number.isFinite(n) && n >= 0 ? n : null;
|
|
184
|
+
};
|
|
185
|
+
const embTimeout = positiveInt(process.env.BIKKY_EMBEDDING_TIMEOUT_MS);
|
|
186
|
+
if (embTimeout !== null)
|
|
187
|
+
config.embedding.timeout_ms = embTimeout;
|
|
188
|
+
const embRetries = positiveInt(process.env.BIKKY_EMBEDDING_RETRIES);
|
|
189
|
+
if (embRetries !== null)
|
|
190
|
+
config.embedding.retries = embRetries;
|
|
191
|
+
const embDelay = positiveInt(process.env.BIKKY_EMBEDDING_RETRY_BASE_DELAY_MS);
|
|
192
|
+
if (embDelay !== null)
|
|
193
|
+
config.embedding.retry_base_delay_ms = embDelay;
|
|
194
|
+
const llmTimeout = positiveInt(process.env.BIKKY_LLM_TIMEOUT_MS);
|
|
195
|
+
if (llmTimeout !== null)
|
|
196
|
+
config.llm.timeout_ms = llmTimeout;
|
|
197
|
+
const llmRetries = positiveInt(process.env.BIKKY_LLM_RETRIES);
|
|
198
|
+
if (llmRetries !== null)
|
|
199
|
+
config.llm.retries = llmRetries;
|
|
200
|
+
const llmDelay = positiveInt(process.env.BIKKY_LLM_RETRY_BASE_DELAY_MS);
|
|
201
|
+
if (llmDelay !== null)
|
|
202
|
+
config.llm.retry_base_delay_ms = llmDelay;
|
|
148
203
|
// Propagate aws_profile into env so both Bedrock clients (LLM + embedding)
|
|
149
204
|
// pick it up via the SDK's default credential chain.
|
|
150
205
|
if (config.aws_profile && !process.env.AWS_PROFILE) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.test.js
CHANGED
|
@@ -154,11 +154,11 @@ describe("config", () => {
|
|
|
154
154
|
const cfg = loadConfig();
|
|
155
155
|
assert.strictEqual(cfg.llm.provider, "ollama");
|
|
156
156
|
});
|
|
157
|
-
it("llm.
|
|
157
|
+
it("llm.fallback_provider defaults to null", () => {
|
|
158
158
|
if (fs.existsSync(CONFIG_PATH))
|
|
159
159
|
fs.unlinkSync(CONFIG_PATH);
|
|
160
160
|
const cfg = loadConfig();
|
|
161
|
-
assert.strictEqual(cfg.llm.
|
|
161
|
+
assert.strictEqual(cfg.llm.fallback_provider ?? null, null);
|
|
162
162
|
});
|
|
163
163
|
it("daemon has expected defaults", () => {
|
|
164
164
|
if (fs.existsSync(CONFIG_PATH))
|
|
@@ -177,11 +177,11 @@ describe("config", () => {
|
|
|
177
177
|
const cfg = loadConfig();
|
|
178
178
|
assert.strictEqual(cfg.watchers.copilot.enabled, true);
|
|
179
179
|
});
|
|
180
|
-
it("watchers.claude.enabled defaults to
|
|
180
|
+
it("watchers.claude.enabled defaults to true", () => {
|
|
181
181
|
if (fs.existsSync(CONFIG_PATH))
|
|
182
182
|
fs.unlinkSync(CONFIG_PATH);
|
|
183
183
|
const cfg = loadConfig();
|
|
184
|
-
assert.strictEqual(cfg.watchers.claude.enabled,
|
|
184
|
+
assert.strictEqual(cfg.watchers.claude.enabled, true);
|
|
185
185
|
});
|
|
186
186
|
});
|
|
187
187
|
// ── CONFIG_DEFAULTS export ────────────────────────────────────────────────
|
|
@@ -287,19 +287,19 @@ describe("config", () => {
|
|
|
287
287
|
const cfg = loadConfig();
|
|
288
288
|
assert.strictEqual(cfg.llm.base_url, "https://api.openai.com");
|
|
289
289
|
});
|
|
290
|
-
it("AWS_BEDROCK_REGION
|
|
290
|
+
it("AWS_BEDROCK_REGION populates llm.extra.region", () => {
|
|
291
291
|
if (fs.existsSync(CONFIG_PATH))
|
|
292
292
|
fs.unlinkSync(CONFIG_PATH);
|
|
293
293
|
process.env.AWS_BEDROCK_REGION = "eu-west-1";
|
|
294
294
|
const cfg = loadConfig();
|
|
295
|
-
assert.strictEqual(cfg.llm.
|
|
295
|
+
assert.strictEqual(cfg.llm.extra?.region, "eu-west-1");
|
|
296
296
|
});
|
|
297
|
-
it("AWS_REGION falls back
|
|
297
|
+
it("AWS_REGION falls back to llm.extra.region when AWS_BEDROCK_REGION not set", () => {
|
|
298
298
|
if (fs.existsSync(CONFIG_PATH))
|
|
299
299
|
fs.unlinkSync(CONFIG_PATH);
|
|
300
300
|
process.env.AWS_REGION = "ap-southeast-1";
|
|
301
301
|
const cfg = loadConfig();
|
|
302
|
-
assert.strictEqual(cfg.llm.
|
|
302
|
+
assert.strictEqual(cfg.llm.extra?.region, "ap-southeast-1");
|
|
303
303
|
});
|
|
304
304
|
it("AWS_BEDROCK_REGION takes priority over AWS_REGION", () => {
|
|
305
305
|
if (fs.existsSync(CONFIG_PATH))
|
|
@@ -307,7 +307,15 @@ describe("config", () => {
|
|
|
307
307
|
process.env.AWS_BEDROCK_REGION = "us-west-2";
|
|
308
308
|
process.env.AWS_REGION = "eu-central-1";
|
|
309
309
|
const cfg = loadConfig();
|
|
310
|
-
assert.strictEqual(cfg.llm.
|
|
310
|
+
assert.strictEqual(cfg.llm.extra?.region, "us-west-2");
|
|
311
|
+
});
|
|
312
|
+
it("BIKKY_LLM_EXTRA_<KEY> env vars populate llm.extra", () => {
|
|
313
|
+
if (fs.existsSync(CONFIG_PATH))
|
|
314
|
+
fs.unlinkSync(CONFIG_PATH);
|
|
315
|
+
process.env.BIKKY_LLM_EXTRA_VIRTUAL_KEY = "vk-1";
|
|
316
|
+
const cfg = loadConfig();
|
|
317
|
+
assert.strictEqual(cfg.llm.extra?.virtual_key, "vk-1");
|
|
318
|
+
delete process.env.BIKKY_LLM_EXTRA_VIRTUAL_KEY;
|
|
311
319
|
});
|
|
312
320
|
});
|
|
313
321
|
// ── URL trailing slash stripping ──────────────────────────────────────────
|