bikky 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -26
- 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 +28 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +82 -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 +77 -0
- package/dist/daemon/episode-summary.d.ts.map +1 -0
- package/dist/daemon/episode-summary.js +239 -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 +95 -39
- 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 +9 -1
- package/dist/daemon/relations.d.ts.map +1 -1
- package/dist/daemon/relations.js +52 -48
- 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 +68 -0
- package/dist/daemon/workstream-summary.d.ts.map +1 -0
- package/dist/daemon/workstream-summary.js +253 -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 +94 -0
- package/dist/lib/qdrant-client.d.ts.map +1 -0
- package/dist/lib/qdrant-client.js +241 -0
- package/dist/lib/qdrant-client.js.map +1 -0
- package/dist/lib/qdrant-client.test.d.ts +8 -0
- package/dist/lib/qdrant-client.test.d.ts.map +1 -0
- package/dist/lib/qdrant-client.test.js +226 -0
- package/dist/lib/qdrant-client.test.js.map +1 -0
- 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 +83 -60
- 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 +38 -20
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/taxonomy.d.ts +237 -31
- package/dist/mcp/taxonomy.d.ts.map +1 -1
- package/dist/mcp/taxonomy.js +533 -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 +338 -302
- 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 +74 -0
- package/dist/prompts/distill.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 +87 -0
- package/dist/prompts/extraction.js.map +1 -0
- package/dist/prompts/index.d.ts +50 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +102 -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/render.d.ts +41 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +173 -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 +212 -0
- package/dist/render.test.js.map +1 -0
- package/package.json +9 -2
- 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 solo power users and teams.</b></p>
|
|
4
4
|
|
|
5
|
-
bikky gives
|
|
5
|
+
bikky gives AI coding agents (GitHub Copilot, Claude Code, Cursor, Codex, and other MCP clients) long-term memory that persists across sessions, across tools, and — when you want it — across your whole team. Whether you're a solo power dev running a dozen agentic sessions a day, or a team that wants every engineer's agent to start from the same knowledge base, bikky captures what's learned *during* sessions so future sessions start smarter.
|
|
6
|
+
|
|
7
|
+
### Who it's for
|
|
8
|
+
|
|
9
|
+
| | |
|
|
10
|
+
|---|---|
|
|
11
|
+
| 🧑💻 **Solo AI power devs** | You run multiple Cursor / Claude Code / Copilot / Codex 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. |
|
|
12
|
+
| 👥 **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. |
|
|
6
13
|
|
|
7
14
|
<p align="center">
|
|
8
|
-
<img src="
|
|
15
|
+
<img src="docs/diagrams/team-memory.svg" alt="Memory — facts flow from individual sessions into a self-curating knowledge store, shared with 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. Use it solo, or share the workspace across a team.</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. Today's power devs run dozens of agentic sessions a day across multiple tools, and none of them remember each other; teams amplify the same problem at scale, with knowledge living in heads, chat threads, and closed PRs. 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
|
|
|
@@ -34,38 +41,72 @@ npm install -g bikky
|
|
|
34
41
|
bikky install # writes MCP config for Copilot + Claude Code
|
|
35
42
|
```
|
|
36
43
|
|
|
37
|
-
**Prerequisites:**
|
|
44
|
+
**Prerequisites:** A Qdrant instance + an embedding provider.
|
|
45
|
+
|
|
46
|
+
- **Qdrant** — pick one:
|
|
47
|
+
- [Qdrant Cloud](https://cloud.qdrant.io) (free tier, 1 GB, no credit card) — needs URL + API key.
|
|
48
|
+
- **Local Docker:** `docker run -p 6333:6333 qdrant/qdrant` — URL `http://localhost:6333`, no API key.
|
|
49
|
+
- **Self-hosted:** any reachable Qdrant; API key only required if you set `QDRANT__SERVICE__API_KEY` on the server.
|
|
50
|
+
- **Embeddings** — [Ollama](https://ollama.com) runs locally for free, or use OpenAI / AWS Bedrock.
|
|
38
51
|
|
|
39
52
|
Then configure credentials — pick one:
|
|
40
53
|
|
|
41
54
|
```bash
|
|
42
55
|
# Option A: let your agent do it
|
|
43
|
-
> "Call configure_credentials with my Qdrant URL and API key"
|
|
56
|
+
> "Call configure_credentials with my Qdrant URL (and API key if needed)"
|
|
44
57
|
|
|
45
58
|
# Option B: config file
|
|
46
|
-
echo '{ "qdrant_url": "
|
|
59
|
+
echo '{ "qdrant_url": "http://localhost:6333" }' > ~/.bikky/config.json
|
|
60
|
+
# (add "qdrant_api_key" only if your Qdrant requires auth)
|
|
47
61
|
|
|
48
62
|
# Option C: env vars
|
|
49
|
-
export QDRANT_URL="
|
|
63
|
+
export QDRANT_URL="http://localhost:6333"
|
|
64
|
+
# export QDRANT_API_KEY="…" # optional; required only for Qdrant Cloud / authenticated self-hosted
|
|
50
65
|
```
|
|
51
66
|
|
|
52
|
-
Restart your editor —
|
|
67
|
+
Restart your editor — memory tools appear automatically.
|
|
53
68
|
|
|
54
69
|
> 📖 Full configuration reference (providers, models, daemon settings): **[docs/configuration.md](docs/configuration.md)**
|
|
70
|
+
>
|
|
71
|
+
> 🛠 Want to add a new embedding or LLM provider (Vertex, OpenRouter, etc.)? See **[CONTRIBUTING.md](CONTRIBUTING.md)** — it's a single-file change.
|
|
55
72
|
|
|
56
73
|
---
|
|
57
74
|
|
|
58
75
|
## How it works
|
|
59
76
|
|
|
60
77
|
<p align="center">
|
|
61
|
-
<img src="
|
|
78
|
+
<img src="docs/diagrams/architecture.svg" alt="Architecture" width="600" />
|
|
62
79
|
</p>
|
|
63
80
|
|
|
64
81
|
**MCP Server** — tools your agent calls directly:
|
|
65
82
|
|
|
66
|
-
`memory_store` · `memory_recall` · `memory_entity` · `memory_relations` · `memory_forget` · `memory_verify` · `
|
|
83
|
+
`memory_store` · `memory_recall` · `memory_entity` · `memory_relations` · `memory_forget` · `memory_verify` · `memory_heartbeat` · `memory_review` · `configure_credentials` · `verify_connection`
|
|
84
|
+
|
|
85
|
+
**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.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Memory ontology
|
|
90
|
+
|
|
91
|
+
New daemon captures use ontology v2:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
workspace -> domain -> repo/project/surface -> workstream -> episode -> memory objects
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`domain` is an activity/knowledge profile. The initial canonical domains are:
|
|
67
98
|
|
|
68
|
-
|
|
99
|
+
| Domain | Purpose |
|
|
100
|
+
|--------|---------|
|
|
101
|
+
| `software_engineering` | Default for coding-agent captures: repos, code, infrastructure, releases, incidents |
|
|
102
|
+
| `product_strategy` | Roadmap, positioning, experiments, customer insight, product decisions |
|
|
103
|
+
| `business_operations` | Company processes, vendors, compliance, obligations, recurring workflows |
|
|
104
|
+
| `research` | Source-backed investigation, hypotheses, contradictions, synthesis |
|
|
105
|
+
| `personal_productivity` | Individual goals, routines, preferences, projects, habits |
|
|
106
|
+
|
|
107
|
+
For `software_engineering`, canonical categories are `codebase`, `infrastructure`, `operations`, `decisions`, `product_domain`, `projects`, `people`, `preferences`, and `observations`.
|
|
108
|
+
|
|
109
|
+
`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
110
|
|
|
70
111
|
---
|
|
71
112
|
|
|
@@ -74,23 +115,17 @@ Restart your editor — 12 memory tools appear automatically.
|
|
|
74
115
|
Raw fact accumulation creates noise. bikky keeps the knowledge store clean automatically:
|
|
75
116
|
|
|
76
117
|
- **Deduplication** — content hash + vector similarity merges near-identical facts
|
|
118
|
+
- **Ontology scope fields** — optional `workspace_id`, repo, workstream, and episode metadata make recall more precise
|
|
77
119
|
- **Confidence decay** — old facts lose weight and surface for review
|
|
78
120
|
- **Contradiction detection** — conflicting facts are resolved, not silently stacked
|
|
79
121
|
- **Distillation** — recurring patterns across sessions consolidate into higher-level insights
|
|
80
122
|
- **Entity graph** — relationships between concepts are inferred for richer recall
|
|
81
123
|
|
|
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
124
|
---
|
|
90
125
|
|
|
91
126
|
## Web UI
|
|
92
127
|
|
|
93
|
-
[`bikky-ui`](packages/ui) is a local dashboard for browsing and managing your team's memory — facts, entities, and the relationship graph.
|
|
128
|
+
[`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
129
|
|
|
95
130
|
```bash
|
|
96
131
|
npx bikky-ui # one-shot — no install needed
|
|
@@ -100,17 +135,17 @@ bikky-ui # opens http://localhost:1422
|
|
|
100
135
|
```
|
|
101
136
|
|
|
102
137
|
<p align="center">
|
|
103
|
-
<img src="
|
|
138
|
+
<img src="docs/screenshots/dashboard.png" alt="Dashboard — overview stats, category breakdown, recent facts" width="720" />
|
|
104
139
|
</p>
|
|
105
140
|
<p align="center"><i>Dashboard — memory stats, category breakdown, and recent facts at a glance</i></p>
|
|
106
141
|
|
|
107
142
|
<p align="center">
|
|
108
|
-
<img src="
|
|
143
|
+
<img src="docs/screenshots/memory.png" alt="Memory browser — search, filter, and browse all stored facts" width="720" />
|
|
109
144
|
</p>
|
|
110
145
|
<p align="center"><i>Memory browser — search, filter by category/kind/source, and browse all stored facts</i></p>
|
|
111
146
|
|
|
112
147
|
<p align="center">
|
|
113
|
-
<img src="
|
|
148
|
+
<img src="docs/screenshots/graph.png" alt="Entity graph — interactive visualization of entity relationships" width="720" />
|
|
114
149
|
</p>
|
|
115
150
|
<p align="center"><i>Entity graph — interactive visualization of how concepts, people, and services relate</i></p>
|
|
116
151
|
|
|
@@ -123,8 +158,26 @@ bikky mcp # start MCP server (stdio) — used by editors
|
|
|
123
158
|
bikky setup # interactive setup wizard
|
|
124
159
|
bikky status # check memory system health
|
|
125
160
|
bikky install # write MCP config for Copilot + Claude Code
|
|
161
|
+
bikky templates # print config snippets for Copilot, Claude Code, Cursor, and Codex
|
|
162
|
+
bikky render # render a prompt to JSON (for eval harnesses & debugging)
|
|
126
163
|
```
|
|
127
164
|
|
|
165
|
+
See **[docs/integrations.md](docs/integrations.md)** for copy-paste MCP templates.
|
|
166
|
+
|
|
167
|
+
### `bikky render` — inspect prompts
|
|
168
|
+
|
|
169
|
+
Render any of bikky'''s prompts to JSON without booting the MCP server. Useful for
|
|
170
|
+
external evaluation harnesses, prompt debugging, and reproducing model calls.
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
bikky render --list # list available prompts
|
|
174
|
+
echo '''{"transcript":"..."}''' | bikky render extraction # via stdin
|
|
175
|
+
bikky render extraction --input case.json # via file
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Output: a JSON object with `promptName`, `messages`, `temperature`,
|
|
179
|
+
`max_tokens`, and `response_format` — exactly what bikky sends to the LLM.
|
|
180
|
+
|
|
128
181
|
## License
|
|
129
182
|
|
|
130
183
|
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;
|
|
@@ -32,6 +51,11 @@ export interface DaemonConfig {
|
|
|
32
51
|
relation_inference_enabled: boolean;
|
|
33
52
|
staleness_threshold_days: number;
|
|
34
53
|
}
|
|
54
|
+
export interface QdrantClientConfig {
|
|
55
|
+
timeout_ms: number;
|
|
56
|
+
retries: number;
|
|
57
|
+
retry_base_delay_ms: number;
|
|
58
|
+
}
|
|
35
59
|
export interface WatcherConfig {
|
|
36
60
|
copilot: {
|
|
37
61
|
enabled: boolean;
|
|
@@ -51,6 +75,7 @@ export interface BikkyConfig {
|
|
|
51
75
|
llm: LLMConfig;
|
|
52
76
|
daemon: DaemonConfig;
|
|
53
77
|
watchers: WatcherConfig;
|
|
78
|
+
qdrant_client: QdrantClientConfig;
|
|
54
79
|
}
|
|
55
80
|
declare const DEFAULTS: BikkyConfig;
|
|
56
81
|
export declare function loadConfig(): BikkyConfig;
|
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,12 @@ 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") },
|
|
60
|
+
},
|
|
61
|
+
qdrant_client: {
|
|
62
|
+
timeout_ms: 10_000,
|
|
63
|
+
retries: 3,
|
|
64
|
+
retry_base_delay_ms: 250,
|
|
52
65
|
},
|
|
53
66
|
};
|
|
54
67
|
// ---------------------------------------------------------------------------
|
|
@@ -109,6 +122,13 @@ export function loadConfig() {
|
|
|
109
122
|
config.embedding.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS, 10);
|
|
110
123
|
if (process.env.OPENAI_API_KEY)
|
|
111
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
|
+
}
|
|
112
132
|
// LLM env overrides
|
|
113
133
|
if (process.env.LLM_PROVIDER)
|
|
114
134
|
config.llm.provider = process.env.LLM_PROVIDER;
|
|
@@ -118,12 +138,68 @@ export function loadConfig() {
|
|
|
118
138
|
config.llm.base_url = process.env.LLM_BASE_URL;
|
|
119
139
|
if (process.env.OPENAI_API_KEY && !config.llm.api_key)
|
|
120
140
|
config.llm.api_key = process.env.OPENAI_API_KEY;
|
|
121
|
-
if (process.env.
|
|
122
|
-
config.llm.
|
|
123
|
-
if (process.env.AWS_REGION && !process.env.AWS_BEDROCK_REGION)
|
|
124
|
-
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;
|
|
125
143
|
if (process.env.AWS_PROFILE)
|
|
126
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
|
+
}
|
|
162
|
+
// Qdrant client tuning env overrides
|
|
163
|
+
if (process.env.QDRANT_TIMEOUT_MS) {
|
|
164
|
+
const n = parseInt(process.env.QDRANT_TIMEOUT_MS, 10);
|
|
165
|
+
if (Number.isFinite(n) && n >= 0)
|
|
166
|
+
config.qdrant_client.timeout_ms = n;
|
|
167
|
+
}
|
|
168
|
+
if (process.env.QDRANT_RETRIES) {
|
|
169
|
+
const n = parseInt(process.env.QDRANT_RETRIES, 10);
|
|
170
|
+
if (Number.isFinite(n) && n >= 0)
|
|
171
|
+
config.qdrant_client.retries = n;
|
|
172
|
+
}
|
|
173
|
+
if (process.env.QDRANT_RETRY_BASE_DELAY_MS) {
|
|
174
|
+
const n = parseInt(process.env.QDRANT_RETRY_BASE_DELAY_MS, 10);
|
|
175
|
+
if (Number.isFinite(n) && n >= 0)
|
|
176
|
+
config.qdrant_client.retry_base_delay_ms = n;
|
|
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;
|
|
127
203
|
// Propagate aws_profile into env so both Bedrock clients (LLM + embedding)
|
|
128
204
|
// pick it up via the SDK's default credential chain.
|
|
129
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":"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;AA0E3D,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,QAAQ,GAAgB;IAC5B,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE;QACT,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,sBAAsB;QAC7B,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,wBAAwB;QAClC,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,CAAC;QACV,mBAAmB,EAAE,GAAG;KACzB;IACD,GAAG,EAAE;QACH,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,wBAAwB;QAClC,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI;QACvB,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,CAAC;QACV,mBAAmB,EAAE,GAAG;KACzB;IACD,MAAM,EAAE;QACN,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,GAAG;QACtB,kBAAkB,EAAE,EAAE;QACtB,iBAAiB,EAAE,IAAI;QACvB,qBAAqB,EAAE,IAAI;QAC3B,0BAA0B,EAAE,IAAI;QAChC,wBAAwB,EAAE,EAAE;KAC7B;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE;QACtF,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;KAChF;IACD,aAAa,EAAE;QACb,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,CAAC;QACV,mBAAmB,EAAE,GAAG;KACzB;CACF,CAAC;AAEF,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,SAAS,SAAS,CAAoC,IAAO,EAAE,QAAiC;IAC9F,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxH,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAA+B,EAAE,IAA+B,CAAC,CAAC;QACzH,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAkC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,IAAI,OAAO,GAAuB,IAAI,CAAC;AAEvC,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,oBAAoB;IACpB,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,sBAAsB;IACtB,IAAI,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEvC,oBAAoB;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA4B,CAAC;YAChG,MAAM,GAAG,SAAS,CAAC,MAA4C,EAAE,UAAU,CAA2B,CAAC;QACzG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,WAAW,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACvE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACnF,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEnF,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/F,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/F,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAAE,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACnH,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACtF,6DAA6D;IAC7D,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACpE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACvG,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB;QAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACxG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC1E,uDAAuD;IACvD,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3E,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAChF,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACjF,CAAC;IAED,kDAAkD;IAClD,MAAM,WAAW,GAAG,CAAC,GAAuB,EAAiB,EAAE;QAC7D,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACvE,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;IAClE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC;IAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAC9E,IAAI,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,SAAS,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IACvE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACjE,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC;IACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACxE,IAAI,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IAEjE,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC/C,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE9D,OAAO,GAAG,MAAM,CAAC;IACjB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,CAAC"}
|
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 ──────────────────────────────────────────
|