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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end integration test against a real Qdrant Cloud collection.
|
|
3
|
+
*
|
|
4
|
+
* **OPT-IN.** This file uses the `.itest.ts` extension so the default
|
|
5
|
+
* `dist/**\/*.test.js` glob does NOT pick it up. Run explicitly with:
|
|
6
|
+
*
|
|
7
|
+
* BIKKY_INTEGRATION=1 npm run test:integration
|
|
8
|
+
*
|
|
9
|
+
* Required env (or in ~/.bikky/config.json — loadConfig merges env):
|
|
10
|
+
* - BIKKY_INTEGRATION=1 (master gate)
|
|
11
|
+
* - QDRANT_URL (Qdrant Cloud REST URL)
|
|
12
|
+
* - QDRANT_API_KEY (Qdrant Cloud API key)
|
|
13
|
+
* - embedding provider config (defaults from ~/.bikky/config.json)
|
|
14
|
+
*
|
|
15
|
+
* Behaviour:
|
|
16
|
+
* - Creates a uuid-suffixed throwaway collection (`bikky-it-<short>`).
|
|
17
|
+
* - Drops it in `after()` regardless of pass/fail.
|
|
18
|
+
* - Exercises the real handlers from registerTools() against live Qdrant +
|
|
19
|
+
* real embeddings — validating filter shapes, payload indexes, vector
|
|
20
|
+
* dimensions, and the dedup similarity thresholds for real.
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=tools.integration.itest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.integration.itest.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.integration.itest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end integration test against a real Qdrant Cloud collection.
|
|
3
|
+
*
|
|
4
|
+
* **OPT-IN.** This file uses the `.itest.ts` extension so the default
|
|
5
|
+
* `dist/**\/*.test.js` glob does NOT pick it up. Run explicitly with:
|
|
6
|
+
*
|
|
7
|
+
* BIKKY_INTEGRATION=1 npm run test:integration
|
|
8
|
+
*
|
|
9
|
+
* Required env (or in ~/.bikky/config.json — loadConfig merges env):
|
|
10
|
+
* - BIKKY_INTEGRATION=1 (master gate)
|
|
11
|
+
* - QDRANT_URL (Qdrant Cloud REST URL)
|
|
12
|
+
* - QDRANT_API_KEY (Qdrant Cloud API key)
|
|
13
|
+
* - embedding provider config (defaults from ~/.bikky/config.json)
|
|
14
|
+
*
|
|
15
|
+
* Behaviour:
|
|
16
|
+
* - Creates a uuid-suffixed throwaway collection (`bikky-it-<short>`).
|
|
17
|
+
* - Drops it in `after()` regardless of pass/fail.
|
|
18
|
+
* - Exercises the real handlers from registerTools() against live Qdrant +
|
|
19
|
+
* real embeddings — validating filter shapes, payload indexes, vector
|
|
20
|
+
* dimensions, and the dedup similarity thresholds for real.
|
|
21
|
+
*/
|
|
22
|
+
import { describe, it, before, after } from "node:test";
|
|
23
|
+
import assert from "node:assert/strict";
|
|
24
|
+
import { randomUUID } from "node:crypto";
|
|
25
|
+
import { registerTools } from "./tools.js";
|
|
26
|
+
import { setQdrantUrl, setQdrantApiKey, setReady, setCollection, initEmbedding, ensureCollection, qdrantReq, } from "./api.js";
|
|
27
|
+
import { QDRANT_INDEXES } from "./taxonomy.js";
|
|
28
|
+
import { loadConfig } from "../config.js";
|
|
29
|
+
const enabled = process.env.BIKKY_INTEGRATION === "1" &&
|
|
30
|
+
Boolean(process.env.QDRANT_URL || loadConfig().qdrant_url) &&
|
|
31
|
+
Boolean(process.env.QDRANT_API_KEY || loadConfig().qdrant_api_key);
|
|
32
|
+
function makeFakeServer() {
|
|
33
|
+
const handlers = new Map();
|
|
34
|
+
const server = {
|
|
35
|
+
tool(name, _desc, _schema, handler) {
|
|
36
|
+
handlers.set(name, handler);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
return { server, handlers };
|
|
40
|
+
}
|
|
41
|
+
let handlers;
|
|
42
|
+
let collectionName;
|
|
43
|
+
function textOf(result) {
|
|
44
|
+
return result.content[0]?.text ?? "";
|
|
45
|
+
}
|
|
46
|
+
async function invoke(name, args) {
|
|
47
|
+
const h = handlers.get(name);
|
|
48
|
+
if (!h)
|
|
49
|
+
throw new Error(`Handler '${name}' not registered`);
|
|
50
|
+
return h(args);
|
|
51
|
+
}
|
|
52
|
+
describe("mcp/tools — Qdrant integration", { skip: !enabled }, () => {
|
|
53
|
+
before(async () => {
|
|
54
|
+
const cfg = loadConfig();
|
|
55
|
+
const url = process.env.QDRANT_URL ?? cfg.qdrant_url;
|
|
56
|
+
const apiKey = process.env.QDRANT_API_KEY ?? cfg.qdrant_api_key;
|
|
57
|
+
if (!url || !apiKey)
|
|
58
|
+
throw new Error("Qdrant URL / API key missing");
|
|
59
|
+
collectionName = `bikky-it-${randomUUID().slice(0, 8)}`;
|
|
60
|
+
setQdrantUrl(url);
|
|
61
|
+
setQdrantApiKey(apiKey);
|
|
62
|
+
setCollection(collectionName);
|
|
63
|
+
initEmbedding({
|
|
64
|
+
provider: cfg.embedding.provider,
|
|
65
|
+
baseUrl: cfg.embedding.base_url,
|
|
66
|
+
model: cfg.embedding.model,
|
|
67
|
+
dimensions: cfg.embedding.dimensions,
|
|
68
|
+
apiKey: cfg.embedding.api_key,
|
|
69
|
+
});
|
|
70
|
+
await ensureCollection(QDRANT_INDEXES);
|
|
71
|
+
setReady(true);
|
|
72
|
+
const fake = makeFakeServer();
|
|
73
|
+
registerTools(fake.server);
|
|
74
|
+
handlers = fake.handlers;
|
|
75
|
+
});
|
|
76
|
+
after(async () => {
|
|
77
|
+
try {
|
|
78
|
+
if (collectionName) {
|
|
79
|
+
await qdrantReq("DELETE", `/collections/${collectionName}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
setReady(false);
|
|
84
|
+
setQdrantUrl(null);
|
|
85
|
+
setQdrantApiKey(null);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Shared state across the ordered scenarios below.
|
|
89
|
+
let fact1Id;
|
|
90
|
+
let fact2Id;
|
|
91
|
+
it("inserts two distinct facts", async () => {
|
|
92
|
+
const r1 = JSON.parse(textOf(await invoke("memory_store", {
|
|
93
|
+
content: "Qdrant Cloud free tier provides 1GB storage with no credit card required",
|
|
94
|
+
category: "infrastructure",
|
|
95
|
+
entities: ["qdrant", "qdrant-cloud"],
|
|
96
|
+
})));
|
|
97
|
+
assert.equal(r1.action, "inserted");
|
|
98
|
+
fact1Id = r1.fact_id;
|
|
99
|
+
const r2 = JSON.parse(textOf(await invoke("memory_store", {
|
|
100
|
+
content: "OpenAI text-embedding-3-small produces 1536-dimensional vectors",
|
|
101
|
+
category: "infrastructure",
|
|
102
|
+
entities: ["openai", "embeddings"],
|
|
103
|
+
})));
|
|
104
|
+
assert.equal(r2.action, "inserted");
|
|
105
|
+
fact2Id = r2.fact_id;
|
|
106
|
+
assert.notEqual(fact1Id, fact2Id);
|
|
107
|
+
});
|
|
108
|
+
it("reinforces on exact content-hash match", async () => {
|
|
109
|
+
const r = JSON.parse(textOf(await invoke("memory_store", {
|
|
110
|
+
content: "Qdrant Cloud free tier provides 1GB storage with no credit card required",
|
|
111
|
+
category: "infrastructure",
|
|
112
|
+
entities: ["qdrant"],
|
|
113
|
+
})));
|
|
114
|
+
assert.equal(r.action, "reinforced");
|
|
115
|
+
assert.equal(r.fact_id, fact1Id);
|
|
116
|
+
assert.ok(r.reinforcement_count >= 2);
|
|
117
|
+
});
|
|
118
|
+
it("reinforces on a near-duplicate via real-vector similarity", async () => {
|
|
119
|
+
// Paraphrase of fact 1 — same meaning, different wording.
|
|
120
|
+
const r = JSON.parse(textOf(await invoke("memory_store", {
|
|
121
|
+
content: "Qdrant Cloud's free plan offers 1GB of storage and does not require a credit card",
|
|
122
|
+
category: "infrastructure",
|
|
123
|
+
entities: ["qdrant"],
|
|
124
|
+
})));
|
|
125
|
+
// Either reinforced (preferred — proves the 0.92 threshold) or inserted
|
|
126
|
+
// with a similar_facts entry pointing at fact1 (proves we're at least in
|
|
127
|
+
// the related band). The first case is the strong assertion; we log if it
|
|
128
|
+
// falls through so a maintainer can re-tune thresholds per embedding model.
|
|
129
|
+
if (r.action === "reinforced") {
|
|
130
|
+
assert.equal(r.fact_id, fact1Id);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
assert.equal(r.action, "inserted", `unexpected action: ${r.action}`);
|
|
134
|
+
const similar = (r.similar_facts ?? []);
|
|
135
|
+
const match = similar.find((s) => s.id === fact1Id);
|
|
136
|
+
assert.ok(match, `expected paraphrase to reinforce or appear in similar_facts; got ${JSON.stringify(r)}`);
|
|
137
|
+
// eslint-disable-next-line no-console
|
|
138
|
+
console.warn(`[integration] paraphrase landed in related band (score=${match.score}) — consider tuning THRESHOLD_DUPLICATE for this embedding model`);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
it("recalls a stored fact via semantic search", async () => {
|
|
142
|
+
const result = await invoke("memory_recall", {
|
|
143
|
+
query: "What does the Qdrant free tier include?",
|
|
144
|
+
limit: 5,
|
|
145
|
+
});
|
|
146
|
+
const text = textOf(result);
|
|
147
|
+
assert.match(text, /1GB|free tier/i);
|
|
148
|
+
});
|
|
149
|
+
it("aggregates facts about an entity", async () => {
|
|
150
|
+
const result = await invoke("memory_entity", { name: "qdrant" });
|
|
151
|
+
const text = textOf(result);
|
|
152
|
+
assert.match(text, /Facts about qdrant/);
|
|
153
|
+
assert.match(text, /1GB|free tier/i);
|
|
154
|
+
});
|
|
155
|
+
it("forgets a fact and excludes it from subsequent recall", async () => {
|
|
156
|
+
const forgetResult = JSON.parse(textOf(await invoke("memory_forget", {
|
|
157
|
+
fact_id: fact2Id,
|
|
158
|
+
reason: "integration-test cleanup",
|
|
159
|
+
})));
|
|
160
|
+
assert.equal(forgetResult.status, "forgotten");
|
|
161
|
+
// Recall something the forgotten fact would have matched.
|
|
162
|
+
const recallResult = await invoke("memory_recall", {
|
|
163
|
+
query: "OpenAI embedding dimensions",
|
|
164
|
+
limit: 10,
|
|
165
|
+
});
|
|
166
|
+
const text = textOf(recallResult);
|
|
167
|
+
// Fact 2 should not appear (it was the only one about embedding dimensions
|
|
168
|
+
// we inserted). A "no matching facts" response is acceptable.
|
|
169
|
+
assert.doesNotMatch(text, /1536-dimensional/);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=tools.integration.itest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.integration.itest.js","sourceRoot":"","sources":["../../src/mcp/tools.integration.itest.ts"],"names":[],"mappings":"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"}
|