bikky 0.3.13 → 0.4.1
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/CHANGELOG.md +20 -0
- package/CODE_OF_CONDUCT.md +80 -0
- package/CONTRIBUTING.md +206 -0
- package/README.md +94 -20
- package/SECURITY.md +58 -0
- package/SUPPORT.md +22 -0
- package/dist/config.d.ts +68 -1
- package/dist/config.js +197 -4
- package/dist/daemon/extraction.d.ts +12 -2
- package/dist/daemon/extraction.js +85 -133
- package/dist/daemon/loop.js +15 -1
- package/dist/daemon/qdrant.js +0 -1
- package/dist/daemon/transcript-sources.d.ts +26 -0
- package/dist/daemon/transcript-sources.js +193 -0
- package/dist/daemon/watcher.d.ts +3 -2
- package/dist/daemon/watcher.js +51 -2
- package/dist/install.d.ts +9 -1
- package/dist/install.js +62 -34
- package/dist/lib/qdrant-pool.d.ts +57 -0
- package/dist/lib/qdrant-pool.js +104 -0
- package/dist/mcp/api.d.ts +57 -19
- package/dist/mcp/api.js +134 -72
- package/dist/mcp/helpers.d.ts +0 -1
- package/dist/mcp/helpers.js +2 -15
- package/dist/mcp/index.js +29 -14
- package/dist/mcp/tools.d.ts +0 -7
- package/dist/mcp/tools.js +618 -276
- package/dist/mcp/types.d.ts +0 -3
- package/dist/routing.d.ts +53 -0
- package/dist/routing.js +129 -0
- package/dist/search-scope.d.ts +24 -0
- package/dist/search-scope.js +174 -0
- package/docs/config/fully-hosted.md +57 -0
- package/docs/config/hosted-models.md +50 -0
- package/docs/config/hosted-qdrant-local-models.md +39 -0
- package/docs/config/local.md +34 -0
- package/docs/configuration.md +403 -0
- package/docs/privacy-first.md +140 -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 +28 -7
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/config.test.d.ts +0 -9
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -576
- package/dist/config.test.js.map +0 -1
- package/dist/daemon/capture-policy.d.ts.map +0 -1
- package/dist/daemon/capture-policy.js.map +0 -1
- package/dist/daemon/capture-policy.test.d.ts +0 -2
- package/dist/daemon/capture-policy.test.d.ts.map +0 -1
- package/dist/daemon/capture-policy.test.js +0 -48
- package/dist/daemon/capture-policy.test.js.map +0 -1
- package/dist/daemon/consolidation.d.ts.map +0 -1
- package/dist/daemon/consolidation.js.map +0 -1
- package/dist/daemon/entity-typing.d.ts.map +0 -1
- package/dist/daemon/entity-typing.js.map +0 -1
- package/dist/daemon/entity-typing.test.d.ts +0 -2
- package/dist/daemon/entity-typing.test.d.ts.map +0 -1
- package/dist/daemon/entity-typing.test.js +0 -50
- package/dist/daemon/entity-typing.test.js.map +0 -1
- package/dist/daemon/episode-summary.d.ts.map +0 -1
- package/dist/daemon/episode-summary.js.map +0 -1
- package/dist/daemon/episode-summary.test.d.ts +0 -2
- package/dist/daemon/episode-summary.test.d.ts.map +0 -1
- package/dist/daemon/episode-summary.test.js +0 -104
- package/dist/daemon/episode-summary.test.js.map +0 -1
- package/dist/daemon/extraction-quality.test.d.ts +0 -2
- package/dist/daemon/extraction-quality.test.d.ts.map +0 -1
- package/dist/daemon/extraction-quality.test.js +0 -283
- package/dist/daemon/extraction-quality.test.js.map +0 -1
- package/dist/daemon/extraction-rules.d.ts.map +0 -1
- package/dist/daemon/extraction-rules.js.map +0 -1
- package/dist/daemon/extraction-rules.test.d.ts +0 -2
- package/dist/daemon/extraction-rules.test.d.ts.map +0 -1
- package/dist/daemon/extraction-rules.test.js +0 -203
- package/dist/daemon/extraction-rules.test.js.map +0 -1
- package/dist/daemon/extraction.d.ts.map +0 -1
- package/dist/daemon/extraction.js.map +0 -1
- package/dist/daemon/extraction.test.d.ts +0 -2
- package/dist/daemon/extraction.test.d.ts.map +0 -1
- package/dist/daemon/extraction.test.js +0 -225
- package/dist/daemon/extraction.test.js.map +0 -1
- package/dist/daemon/index.d.ts.map +0 -1
- package/dist/daemon/index.js.map +0 -1
- package/dist/daemon/loop.d.ts.map +0 -1
- package/dist/daemon/loop.js.map +0 -1
- package/dist/daemon/loop.test.d.ts +0 -2
- package/dist/daemon/loop.test.d.ts.map +0 -1
- package/dist/daemon/loop.test.js +0 -85
- package/dist/daemon/loop.test.js.map +0 -1
- package/dist/daemon/maintenance-state.d.ts.map +0 -1
- package/dist/daemon/maintenance-state.js.map +0 -1
- package/dist/daemon/maintenance-state.test.d.ts +0 -2
- package/dist/daemon/maintenance-state.test.d.ts.map +0 -1
- package/dist/daemon/maintenance-state.test.js +0 -56
- package/dist/daemon/maintenance-state.test.js.map +0 -1
- package/dist/daemon/qdrant.d.ts.map +0 -1
- package/dist/daemon/qdrant.js.map +0 -1
- package/dist/daemon/qdrant.test.d.ts +0 -8
- package/dist/daemon/qdrant.test.d.ts.map +0 -1
- package/dist/daemon/qdrant.test.js +0 -265
- package/dist/daemon/qdrant.test.js.map +0 -1
- package/dist/daemon/relations-vocab.d.ts.map +0 -1
- package/dist/daemon/relations-vocab.js.map +0 -1
- package/dist/daemon/relations-vocab.test.d.ts +0 -2
- package/dist/daemon/relations-vocab.test.d.ts.map +0 -1
- package/dist/daemon/relations-vocab.test.js +0 -69
- package/dist/daemon/relations-vocab.test.js.map +0 -1
- package/dist/daemon/relations.d.ts.map +0 -1
- package/dist/daemon/relations.js.map +0 -1
- package/dist/daemon/relations.test.d.ts +0 -2
- package/dist/daemon/relations.test.d.ts.map +0 -1
- package/dist/daemon/relations.test.js +0 -36
- package/dist/daemon/relations.test.js.map +0 -1
- package/dist/daemon/session-index.d.ts.map +0 -1
- package/dist/daemon/session-index.js.map +0 -1
- package/dist/daemon/session-index.test.d.ts +0 -2
- package/dist/daemon/session-index.test.d.ts.map +0 -1
- package/dist/daemon/session-index.test.js +0 -60
- package/dist/daemon/session-index.test.js.map +0 -1
- package/dist/daemon/session-summary.d.ts.map +0 -1
- package/dist/daemon/session-summary.js.map +0 -1
- package/dist/daemon/session-summary.test.d.ts +0 -2
- package/dist/daemon/session-summary.test.d.ts.map +0 -1
- package/dist/daemon/session-summary.test.js +0 -162
- package/dist/daemon/session-summary.test.js.map +0 -1
- package/dist/daemon/staleness.d.ts.map +0 -1
- package/dist/daemon/staleness.js.map +0 -1
- package/dist/daemon/staleness.test.d.ts +0 -7
- package/dist/daemon/staleness.test.d.ts.map +0 -1
- package/dist/daemon/staleness.test.js +0 -128
- package/dist/daemon/staleness.test.js.map +0 -1
- package/dist/daemon/watcher-health.d.ts.map +0 -1
- package/dist/daemon/watcher-health.js.map +0 -1
- package/dist/daemon/watcher-health.test.d.ts +0 -5
- package/dist/daemon/watcher-health.test.d.ts.map +0 -1
- package/dist/daemon/watcher-health.test.js +0 -119
- package/dist/daemon/watcher-health.test.js.map +0 -1
- package/dist/daemon/watcher.d.ts.map +0 -1
- package/dist/daemon/watcher.js.map +0 -1
- package/dist/daemon/watcher.test.d.ts +0 -9
- package/dist/daemon/watcher.test.d.ts.map +0 -1
- package/dist/daemon/watcher.test.js +0 -204
- package/dist/daemon/watcher.test.js.map +0 -1
- package/dist/daemon/workstream-resolver.d.ts.map +0 -1
- package/dist/daemon/workstream-resolver.js.map +0 -1
- package/dist/daemon/workstream-resolver.test.d.ts +0 -2
- package/dist/daemon/workstream-resolver.test.d.ts.map +0 -1
- package/dist/daemon/workstream-resolver.test.js +0 -128
- package/dist/daemon/workstream-resolver.test.js.map +0 -1
- package/dist/daemon/workstream-summary.d.ts.map +0 -1
- package/dist/daemon/workstream-summary.js.map +0 -1
- package/dist/daemon/workstream-summary.test.d.ts +0 -2
- package/dist/daemon/workstream-summary.test.d.ts.map +0 -1
- package/dist/daemon/workstream-summary.test.js +0 -89
- package/dist/daemon/workstream-summary.test.js.map +0 -1
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/install.test.d.ts +0 -9
- package/dist/install.test.d.ts.map +0 -1
- package/dist/install.test.js +0 -126
- package/dist/install.test.js.map +0 -1
- package/dist/lib/qdrant-client.d.ts.map +0 -1
- package/dist/lib/qdrant-client.js.map +0 -1
- package/dist/lib/qdrant-client.test.d.ts +0 -8
- package/dist/lib/qdrant-client.test.d.ts.map +0 -1
- package/dist/lib/qdrant-client.test.js +0 -274
- package/dist/lib/qdrant-client.test.js.map +0 -1
- package/dist/lifecycle.d.ts.map +0 -1
- package/dist/lifecycle.js.map +0 -1
- package/dist/lifecycle.test.d.ts +0 -8
- package/dist/lifecycle.test.d.ts.map +0 -1
- package/dist/lifecycle.test.js +0 -74
- package/dist/lifecycle.test.js.map +0 -1
- package/dist/llm/embedding/index.d.ts.map +0 -1
- package/dist/llm/embedding/index.js.map +0 -1
- package/dist/llm/embedding/index.test.d.ts +0 -8
- package/dist/llm/embedding/index.test.d.ts.map +0 -1
- package/dist/llm/embedding/index.test.js +0 -100
- package/dist/llm/embedding/index.test.js.map +0 -1
- package/dist/llm/embedding/providers/bedrock.d.ts.map +0 -1
- package/dist/llm/embedding/providers/bedrock.js.map +0 -1
- package/dist/llm/embedding/providers/bedrock.test.d.ts +0 -2
- package/dist/llm/embedding/providers/bedrock.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/bedrock.test.js +0 -24
- package/dist/llm/embedding/providers/bedrock.test.js.map +0 -1
- package/dist/llm/embedding/providers/index.d.ts.map +0 -1
- package/dist/llm/embedding/providers/index.js.map +0 -1
- package/dist/llm/embedding/providers/ollama.d.ts.map +0 -1
- package/dist/llm/embedding/providers/ollama.js.map +0 -1
- package/dist/llm/embedding/providers/ollama.test.d.ts +0 -2
- package/dist/llm/embedding/providers/ollama.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/ollama.test.js +0 -54
- package/dist/llm/embedding/providers/ollama.test.js.map +0 -1
- package/dist/llm/embedding/providers/openai.d.ts.map +0 -1
- package/dist/llm/embedding/providers/openai.js.map +0 -1
- package/dist/llm/embedding/providers/openai.test.d.ts +0 -2
- package/dist/llm/embedding/providers/openai.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/openai.test.js +0 -48
- package/dist/llm/embedding/providers/openai.test.js.map +0 -1
- package/dist/llm/embedding/providers/portkey.d.ts.map +0 -1
- package/dist/llm/embedding/providers/portkey.js.map +0 -1
- package/dist/llm/embedding/providers/portkey.test.d.ts +0 -2
- package/dist/llm/embedding/providers/portkey.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/portkey.test.js +0 -56
- package/dist/llm/embedding/providers/portkey.test.js.map +0 -1
- package/dist/llm/embedding/registry.d.ts.map +0 -1
- package/dist/llm/embedding/registry.js.map +0 -1
- package/dist/llm/embedding/registry.test.d.ts +0 -7
- package/dist/llm/embedding/registry.test.d.ts.map +0 -1
- package/dist/llm/embedding/registry.test.js +0 -68
- package/dist/llm/embedding/registry.test.js.map +0 -1
- package/dist/llm/embedding/types.d.ts.map +0 -1
- package/dist/llm/embedding/types.js.map +0 -1
- package/dist/llm/errors.d.ts.map +0 -1
- package/dist/llm/errors.js.map +0 -1
- package/dist/llm/errors.test.d.ts +0 -2
- package/dist/llm/errors.test.d.ts.map +0 -1
- package/dist/llm/errors.test.js +0 -103
- package/dist/llm/errors.test.js.map +0 -1
- package/dist/llm/fetch.d.ts.map +0 -1
- package/dist/llm/fetch.js.map +0 -1
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js.map +0 -1
- package/dist/llm/inference/index.d.ts.map +0 -1
- package/dist/llm/inference/index.js.map +0 -1
- package/dist/llm/inference/index.test.d.ts +0 -6
- package/dist/llm/inference/index.test.d.ts.map +0 -1
- package/dist/llm/inference/index.test.js +0 -150
- package/dist/llm/inference/index.test.js.map +0 -1
- package/dist/llm/inference/providers/bedrock.d.ts.map +0 -1
- package/dist/llm/inference/providers/bedrock.js.map +0 -1
- package/dist/llm/inference/providers/bedrock.test.d.ts +0 -2
- package/dist/llm/inference/providers/bedrock.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/bedrock.test.js +0 -68
- package/dist/llm/inference/providers/bedrock.test.js.map +0 -1
- package/dist/llm/inference/providers/index.d.ts.map +0 -1
- package/dist/llm/inference/providers/index.js.map +0 -1
- package/dist/llm/inference/providers/ollama.d.ts.map +0 -1
- package/dist/llm/inference/providers/ollama.js.map +0 -1
- package/dist/llm/inference/providers/ollama.test.d.ts +0 -2
- package/dist/llm/inference/providers/ollama.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/ollama.test.js +0 -57
- package/dist/llm/inference/providers/ollama.test.js.map +0 -1
- package/dist/llm/inference/providers/openai.d.ts.map +0 -1
- package/dist/llm/inference/providers/openai.js.map +0 -1
- package/dist/llm/inference/providers/openai.test.d.ts +0 -2
- package/dist/llm/inference/providers/openai.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/openai.test.js +0 -82
- package/dist/llm/inference/providers/openai.test.js.map +0 -1
- package/dist/llm/inference/providers/portkey.d.ts.map +0 -1
- package/dist/llm/inference/providers/portkey.js.map +0 -1
- package/dist/llm/inference/providers/portkey.test.d.ts +0 -2
- package/dist/llm/inference/providers/portkey.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/portkey.test.js +0 -48
- package/dist/llm/inference/providers/portkey.test.js.map +0 -1
- package/dist/llm/inference/registry.d.ts.map +0 -1
- package/dist/llm/inference/registry.js.map +0 -1
- package/dist/llm/inference/registry.test.d.ts +0 -6
- package/dist/llm/inference/registry.test.d.ts.map +0 -1
- package/dist/llm/inference/registry.test.js +0 -63
- package/dist/llm/inference/registry.test.js.map +0 -1
- package/dist/llm/inference/types.d.ts.map +0 -1
- package/dist/llm/inference/types.js.map +0 -1
- package/dist/llm/telemetry.d.ts.map +0 -1
- package/dist/llm/telemetry.js.map +0 -1
- package/dist/llm/telemetry.test.d.ts +0 -5
- package/dist/llm/telemetry.test.d.ts.map +0 -1
- package/dist/llm/telemetry.test.js +0 -89
- package/dist/llm/telemetry.test.js.map +0 -1
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/llm/types.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/logger.test.d.ts +0 -5
- package/dist/logger.test.d.ts.map +0 -1
- package/dist/logger.test.js +0 -103
- package/dist/logger.test.js.map +0 -1
- package/dist/mcp/api.d.ts.map +0 -1
- package/dist/mcp/api.js.map +0 -1
- package/dist/mcp/api.test.d.ts +0 -6
- package/dist/mcp/api.test.d.ts.map +0 -1
- package/dist/mcp/api.test.js +0 -130
- package/dist/mcp/api.test.js.map +0 -1
- package/dist/mcp/helpers.d.ts.map +0 -1
- package/dist/mcp/helpers.js.map +0 -1
- package/dist/mcp/helpers.test.d.ts +0 -5
- package/dist/mcp/helpers.test.d.ts.map +0 -1
- package/dist/mcp/helpers.test.js +0 -548
- package/dist/mcp/helpers.test.js.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/taxonomy.d.ts.map +0 -1
- package/dist/mcp/taxonomy.js.map +0 -1
- package/dist/mcp/taxonomy.test.d.ts +0 -5
- package/dist/mcp/taxonomy.test.d.ts.map +0 -1
- package/dist/mcp/taxonomy.test.js +0 -215
- package/dist/mcp/taxonomy.test.js.map +0 -1
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.integration.itest.d.ts +0 -23
- package/dist/mcp/tools.integration.itest.d.ts.map +0 -1
- package/dist/mcp/tools.integration.itest.js +0 -171
- package/dist/mcp/tools.integration.itest.js.map +0 -1
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/tools.test.d.ts +0 -16
- package/dist/mcp/tools.test.d.ts.map +0 -1
- package/dist/mcp/tools.test.js +0 -908
- package/dist/mcp/tools.test.js.map +0 -1
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js.map +0 -1
- package/dist/postinstall.d.ts.map +0 -1
- package/dist/postinstall.js.map +0 -1
- package/dist/privacy/redaction.d.ts.map +0 -1
- package/dist/privacy/redaction.js.map +0 -1
- package/dist/privacy/redaction.test.d.ts +0 -2
- package/dist/privacy/redaction.test.d.ts.map +0 -1
- package/dist/privacy/redaction.test.js +0 -51
- package/dist/privacy/redaction.test.js.map +0 -1
- package/dist/prompts/brief.d.ts.map +0 -1
- package/dist/prompts/brief.js.map +0 -1
- package/dist/prompts/contradiction.d.ts.map +0 -1
- package/dist/prompts/contradiction.js.map +0 -1
- package/dist/prompts/distill.d.ts.map +0 -1
- package/dist/prompts/distill.js.map +0 -1
- package/dist/prompts/entity-typing.d.ts.map +0 -1
- package/dist/prompts/entity-typing.js.map +0 -1
- package/dist/prompts/episode-summary.d.ts.map +0 -1
- package/dist/prompts/episode-summary.js.map +0 -1
- package/dist/prompts/extraction.d.ts.map +0 -1
- package/dist/prompts/extraction.js.map +0 -1
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/prompts.test.d.ts +0 -8
- package/dist/prompts/prompts.test.d.ts.map +0 -1
- package/dist/prompts/prompts.test.js +0 -140
- package/dist/prompts/prompts.test.js.map +0 -1
- package/dist/prompts/relations.d.ts.map +0 -1
- package/dist/prompts/relations.js.map +0 -1
- package/dist/prompts/workstream-summary.d.ts.map +0 -1
- package/dist/prompts/workstream-summary.js.map +0 -1
- package/dist/provenance/actor.d.ts.map +0 -1
- package/dist/provenance/actor.js.map +0 -1
- package/dist/provenance/actor.test.d.ts +0 -2
- package/dist/provenance/actor.test.d.ts.map +0 -1
- package/dist/provenance/actor.test.js +0 -49
- package/dist/provenance/actor.test.js.map +0 -1
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js.map +0 -1
- package/dist/render.test.d.ts +0 -8
- package/dist/render.test.d.ts.map +0 -1
- package/dist/render.test.js +0 -244
- package/dist/render.test.js.map +0 -1
- package/dist/status.d.ts.map +0 -1
- package/dist/status.js.map +0 -1
- package/dist/status.test.d.ts +0 -5
- package/dist/status.test.d.ts.map +0 -1
- package/dist/status.test.js +0 -203
- package/dist/status.test.js.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to bikky are documented here.
|
|
4
|
+
|
|
5
|
+
This project uses npm package versions for release tracking:
|
|
6
|
+
|
|
7
|
+
- `bikky` — core CLI, MCP server, and daemon.
|
|
8
|
+
- `bikky-ui` — local web dashboard.
|
|
9
|
+
|
|
10
|
+
## Unreleased
|
|
11
|
+
|
|
12
|
+
- Public OSS readiness cleanup: package metadata, support docs, public maintainer ownership, package tarball hygiene, and privacy/transcript-capture documentation.
|
|
13
|
+
- Added package verification CI and a privacy-first quickstart for local storage/local model setups.
|
|
14
|
+
|
|
15
|
+
## 0.4.0
|
|
16
|
+
|
|
17
|
+
- Added multi-destination Qdrant routing and configurable read/search scopes.
|
|
18
|
+
- Added Claude Code user-scoped MCP setup support.
|
|
19
|
+
- Added Claude Code transcript ingestion for daemon memory extraction.
|
|
20
|
+
- Refreshed README screenshots, setup guidance, and configuration docs.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and maintainers pledge to make participation in
|
|
6
|
+
the bikky community a harassment-free experience for everyone, regardless of
|
|
7
|
+
age, body size, visible or invisible disability, ethnicity, sex characteristics,
|
|
8
|
+
gender identity and expression, level of experience, education, socio-economic
|
|
9
|
+
status, nationality, personal appearance, race, religion, or sexual identity
|
|
10
|
+
and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behaviour that contributes to a positive environment:
|
|
18
|
+
|
|
19
|
+
- Demonstrating empathy and kindness toward other people
|
|
20
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
21
|
+
- Giving and gracefully accepting constructive feedback
|
|
22
|
+
- Accepting responsibility and apologising to those affected by our mistakes,
|
|
23
|
+
and learning from the experience
|
|
24
|
+
- Focusing on what is best not just for us as individuals, but for the
|
|
25
|
+
overall community
|
|
26
|
+
|
|
27
|
+
Examples of unacceptable behaviour:
|
|
28
|
+
|
|
29
|
+
- The use of sexualised language or imagery, and sexual attention or advances
|
|
30
|
+
of any kind
|
|
31
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
32
|
+
- Public or private harassment
|
|
33
|
+
- Publishing others' private information, such as a physical or email address,
|
|
34
|
+
without their explicit permission
|
|
35
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
36
|
+
professional setting
|
|
37
|
+
|
|
38
|
+
## Enforcement Responsibilities
|
|
39
|
+
|
|
40
|
+
Project maintainers are responsible for clarifying and enforcing our standards
|
|
41
|
+
of acceptable behaviour and will take appropriate and fair corrective action in
|
|
42
|
+
response to any behaviour that they deem inappropriate, threatening, offensive,
|
|
43
|
+
or harmful.
|
|
44
|
+
|
|
45
|
+
## Scope
|
|
46
|
+
|
|
47
|
+
This Code of Conduct applies within all community spaces (issues, PRs,
|
|
48
|
+
Discussions, Discord/Slack if any), and also applies when an individual is
|
|
49
|
+
officially representing the community in public spaces.
|
|
50
|
+
|
|
51
|
+
## Enforcement
|
|
52
|
+
|
|
53
|
+
Instances of abusive, harassing, or otherwise unacceptable behaviour may be
|
|
54
|
+
reported to the project maintainers via the GitHub Security Advisories private
|
|
55
|
+
reporting flow at:
|
|
56
|
+
https://github.com/bikky-dev/bikky/security/advisories/new
|
|
57
|
+
|
|
58
|
+
All complaints will be reviewed and investigated promptly and fairly.
|
|
59
|
+
|
|
60
|
+
All maintainers are obligated to respect the privacy and security of the
|
|
61
|
+
reporter of any incident.
|
|
62
|
+
|
|
63
|
+
## Enforcement Guidelines
|
|
64
|
+
|
|
65
|
+
Maintainers will follow these Community Impact Guidelines in determining the
|
|
66
|
+
consequences for any action they deem in violation of this Code of Conduct:
|
|
67
|
+
|
|
68
|
+
1. **Correction** — Private, written warning. A public apology may be requested.
|
|
69
|
+
2. **Warning** — A warning with consequences for continued behaviour.
|
|
70
|
+
3. **Temporary ban** — A temporary ban from any sort of interaction or public
|
|
71
|
+
communication with the community.
|
|
72
|
+
4. **Permanent ban** — Permanent ban from any sort of public interaction within
|
|
73
|
+
the community.
|
|
74
|
+
|
|
75
|
+
## Attribution
|
|
76
|
+
|
|
77
|
+
This Code of Conduct is adapted from the
|
|
78
|
+
[Contributor Covenant](https://www.contributor-covenant.org/), version 2.1,
|
|
79
|
+
available at
|
|
80
|
+
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Contributing to bikky
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in bikky! We welcome PRs of all sizes — from typo fixes to new daemon features. This document covers the practical bits: how the repo is laid out, how to run the tests, and what we look for in a contribution.
|
|
4
|
+
|
|
5
|
+
## Repository layout
|
|
6
|
+
|
|
7
|
+
bikky is a small monorepo:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
.
|
|
11
|
+
├── src/ # Core CLI + MCP server + daemon (published as `bikky`)
|
|
12
|
+
│ ├── cli/ # `bikky <subcommand>` entrypoints
|
|
13
|
+
│ ├── daemon/ # Background workers: extraction, consolidation, staleness, …
|
|
14
|
+
│ ├── mcp/ # MCP server (the surface AI agents call into)
|
|
15
|
+
│ ├── prompts/ # Versioned LLM prompt registry
|
|
16
|
+
│ └── llm/ # Provider adapters (OpenAI, Bedrock, Ollama, Portkey)
|
|
17
|
+
│ ├── embedding/ # embedding registry + providers
|
|
18
|
+
│ └── inference/ # chat-completion registry + providers
|
|
19
|
+
└── packages/
|
|
20
|
+
└── ui/ # Local web UI (`bikky-ui`) — Hono server + React frontend
|
|
21
|
+
├── src/lib/ # - config, qdrant client, embeddings
|
|
22
|
+
├── src/routes/ # - REST API routes
|
|
23
|
+
└── app/ # - React/Vite frontend
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git clone https://github.com/bikky-dev/bikky.git
|
|
30
|
+
cd bikky
|
|
31
|
+
npm install
|
|
32
|
+
cd packages/ui && npm install && cd ../..
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Running the tests
|
|
36
|
+
|
|
37
|
+
We use the Node.js built-in test runner ([`node:test`](https://nodejs.org/api/test.html)) — no Jest, no Vitest, no extra dependencies.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Core (CLI, daemon, MCP server) — 300+ tests
|
|
41
|
+
npm test
|
|
42
|
+
|
|
43
|
+
# UI server + libraries — 50+ tests
|
|
44
|
+
cd packages/ui && npm test
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Both packages compile TypeScript into `dist/` first and then run the compiled `*.test.js` files. The UI test suite uses `--test-isolation=process --test-concurrency=1` because several tests share `~/.bikky/config.json` on the developer's machine; running them in isolation avoids flakiness.
|
|
48
|
+
|
|
49
|
+
> **Note on `~/.bikky/config.json`** — UI tests back up your real config in `before()` and restore it in `after()`. If a test crashes mid-run the file *should* survive, but if you ever see odd behaviour after a failed test run, just delete the file and re-run `bikky setup`.
|
|
50
|
+
|
|
51
|
+
### What we test
|
|
52
|
+
|
|
53
|
+
We aim for **focused, fast unit tests** that lock in behaviour without being a maintenance tax:
|
|
54
|
+
|
|
55
|
+
- Pure functions (filter builders, hashers, parsers) — exhaustive cases.
|
|
56
|
+
- Stateful modules (config loaders, lifecycle/PID, daemons) — happy path + a couple of failure modes.
|
|
57
|
+
- Network clients (Qdrant, embeddings, LLM providers) — mock `globalThis.fetch` and assert on the request, never call a real backend.
|
|
58
|
+
- HTTP routes (Hono) — exercise via `app.fetch(new Request(...))` against the real router with mocked underlying calls.
|
|
59
|
+
|
|
60
|
+
We deliberately **do not** test:
|
|
61
|
+
|
|
62
|
+
- LLM prompt quality or extraction accuracy. Prompt-level evals live outside the default unit-test suite so day-to-day contributor tests stay fast and deterministic.
|
|
63
|
+
- Implementation details (private function internals, exact log strings) — these change often and tests that pin them slow contributors down.
|
|
64
|
+
- The React frontend — the testable surface there is small; we rely on type-checking and manual smoke tests.
|
|
65
|
+
|
|
66
|
+
### Adding a new test
|
|
67
|
+
|
|
68
|
+
Tests live alongside the source as `*.test.ts`:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
src/foo.ts # source
|
|
72
|
+
src/foo.test.ts # tests
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Use the [`node:test`](https://nodejs.org/api/test.html) `describe/it/before/after` API and `node:assert/strict`. For mocking, prefer **dependency injection** (e.g. the `StaleDeps` pattern in `src/daemon/staleness.ts`) over module mocking — it keeps tests deterministic and the production code easier to reason about.
|
|
76
|
+
|
|
77
|
+
Good references for new tests:
|
|
78
|
+
|
|
79
|
+
| Pattern | Reference |
|
|
80
|
+
|----------------------------------|----------------------------------------|
|
|
81
|
+
| Filesystem with backup/restore | `src/lifecycle.test.ts` |
|
|
82
|
+
| Temp dir with `mkdtemp` | `src/logger.test.ts` |
|
|
83
|
+
| Env-based path override | `src/llm/telemetry.test.ts` |
|
|
84
|
+
| Dependency injection for daemons | `src/daemon/staleness.test.ts` |
|
|
85
|
+
| Mocking `globalThis.fetch` | `src/mcp/api.test.ts`, `packages/ui/src/lib/qdrant.test.ts` |
|
|
86
|
+
| Hono route via `app.fetch` | `packages/ui/src/routes/memory.test.ts` |
|
|
87
|
+
|
|
88
|
+
### Integration tests (opt-in, real Qdrant)
|
|
89
|
+
|
|
90
|
+
The default `npm test` mocks every external call. We also ship one **opt-in** end-to-end smoke test that talks to a real Qdrant instance (Cloud, local Docker, or self-hosted) and a real embedding provider — it's the only thing that catches filter-shape rejections, payload-index mismatches, vector-dimension drift, and whether the dedup similarity thresholds (`THRESHOLD_DUPLICATE`, `THRESHOLD_RELATED`) actually correspond to near-duplicates against your embedding model.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Uses your existing ~/.bikky/config.json + QDRANT_URL (and QDRANT_API_KEY if your Qdrant requires it).
|
|
94
|
+
BIKKY_INTEGRATION=1 npm run test:integration
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
What it does:
|
|
98
|
+
|
|
99
|
+
1. Creates a throwaway collection named `bikky-it-<short-uuid>` with the real payload indexes.
|
|
100
|
+
2. Exercises `memory_store` (insert, exact-dup, near-duplicate paraphrase), `memory_recall`, `memory_entity`, and `memory_forget` against live Qdrant + your real embeddings.
|
|
101
|
+
3. Drops the collection in `after()` regardless of pass/fail.
|
|
102
|
+
|
|
103
|
+
Cost is negligible — a handful of small embedding calls per run (≈ $0.0001 on OpenAI's `text-embedding-3-small`, free on Ollama). Files end in `.itest.ts` so the default `*.test.js` glob never picks them up.
|
|
104
|
+
|
|
105
|
+
If the near-duplicate paraphrase doesn't reinforce on your embedding model, the test logs the actual similarity score so you can re-tune `THRESHOLD_DUPLICATE` rather than failing outright.
|
|
106
|
+
|
|
107
|
+
## Adding an embedding or LLM provider
|
|
108
|
+
|
|
109
|
+
The most common contribution is **adding a new embedding or LLM provider**. Each provider is a single file. The registry dispatches by `provider.name`, so no central edits are required beyond adding one import line to the barrel.
|
|
110
|
+
|
|
111
|
+
### Embedding provider
|
|
112
|
+
|
|
113
|
+
1. Create `src/llm/embedding/providers/<name>.ts`:
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
import {
|
|
117
|
+
registerEmbeddingProvider,
|
|
118
|
+
type EmbeddingProvider,
|
|
119
|
+
type ResolvedEmbeddingConfig,
|
|
120
|
+
} from "../registry.js";
|
|
121
|
+
|
|
122
|
+
export const myProvider: EmbeddingProvider = {
|
|
123
|
+
name: "myprovider",
|
|
124
|
+
label: "My Provider",
|
|
125
|
+
browserCompatible: true, // false if it needs a server-only SDK
|
|
126
|
+
defaults: {
|
|
127
|
+
model: "default-model",
|
|
128
|
+
dimensions: 1024,
|
|
129
|
+
baseUrl: "https://api.example.com", // omit if SDK-only
|
|
130
|
+
},
|
|
131
|
+
async embed(text, cfg) {
|
|
132
|
+
// cfg.{model,baseUrl,apiKey,extra} are pre-resolved
|
|
133
|
+
const resp = await fetch(`${cfg.baseUrl}/v1/embeddings`, { /* … */ });
|
|
134
|
+
// throw on programmer error; return number[] on success
|
|
135
|
+
return [/* embedding vector */];
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
registerEmbeddingProvider(myProvider);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
2. Add a side-effect import in `src/llm/embedding/providers/index.ts`:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import "./myprovider.js";
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
3. Add a small unit test next to your provider (`<name>.test.ts`). Mock
|
|
149
|
+
`globalThis.fetch` (see `ollama.test.ts` for the pattern). Cover at minimum:
|
|
150
|
+
- success path (verifies URL, headers, body shape)
|
|
151
|
+
- non-OK response handling
|
|
152
|
+
- any provider-specific behaviour (auth, extra headers, fallback fields)
|
|
153
|
+
|
|
154
|
+
4. If your provider is browser-friendly, mirror it under
|
|
155
|
+
`packages/ui/src/lib/embedding/providers/<name>.ts` so the UI can use it.
|
|
156
|
+
|
|
157
|
+
5. Configure it in `~/.bikky/config.json`:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"embedding": {
|
|
162
|
+
"provider": "myprovider",
|
|
163
|
+
"model": "my-model",
|
|
164
|
+
"api_key": "…",
|
|
165
|
+
"extra": { "any-key": "any-value" }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Or via env: `BIKKY_EMBEDDING_EXTRA_<KEY>=value` flows into `extra`.
|
|
171
|
+
|
|
172
|
+
### Inference (LLM) provider
|
|
173
|
+
|
|
174
|
+
Same pattern, under `src/llm/inference/providers/`. The interface is
|
|
175
|
+
`InferenceProvider` (see `src/llm/inference/types.ts`), the key method is
|
|
176
|
+
`chat(opts, cfg, log)`, and providers should **return `null`** on recoverable
|
|
177
|
+
errors (HTTP error, missing key, network failure) so the orchestrator can fall
|
|
178
|
+
back to `cfg.fallback` if configured. Throw only for programmer errors.
|
|
179
|
+
|
|
180
|
+
Configure a fallback chain via `llm.fallback_provider` in config (or
|
|
181
|
+
`LLM_FALLBACK_PROVIDER` env).
|
|
182
|
+
|
|
183
|
+
## Submitting changes
|
|
184
|
+
|
|
185
|
+
1. **Open an issue first** for non-trivial changes so we can align on the approach.
|
|
186
|
+
2. **Branch** from `main` (`git checkout -b your-feature-name`).
|
|
187
|
+
3. **Run the tests** in both packages before pushing.
|
|
188
|
+
4. **Open a PR** referencing the issue (`Closes #123`). CI will re-run tests on push.
|
|
189
|
+
5. We aim to review within a few business days — ping the issue if it goes quiet.
|
|
190
|
+
|
|
191
|
+
## Style
|
|
192
|
+
|
|
193
|
+
- TypeScript strict mode is on; no `any` unless interfacing with external SDK types (use a focused local interface to constrain the surface area).
|
|
194
|
+
- We prefer small, pure functions and clear module boundaries to elaborate abstractions.
|
|
195
|
+
- Tests live next to the source they cover (`foo.ts` + `foo.test.ts`).
|
|
196
|
+
- Providers must not call `process.exit`, log to stdout, or modify global state beyond their own module-scope cache.
|
|
197
|
+
- Heavy SDKs (e.g. `@aws-sdk/*`) **must be `await import(...)`-loaded inside the provider's `embed`/`chat`** so users on lighter providers don't pay the bundle cost.
|
|
198
|
+
- Comments explain *why*, not *what* — the code shows the *what*.
|
|
199
|
+
|
|
200
|
+
## License
|
|
201
|
+
|
|
202
|
+
By contributing, you agree that your contributions will be licensed under the project's [AGPL-3.0-or-later](LICENSE) license.
|
|
203
|
+
|
|
204
|
+
## Code of conduct
|
|
205
|
+
|
|
206
|
+
Be kind. We follow the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
|
package/README.md
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
<h1 align="center">bikky</h1>
|
|
2
2
|
|
|
3
|
-
<p align="center"><b>Persistent memory for AI coding agents — for teams
|
|
3
|
+
<p align="center"><b>Persistent memory for AI coding agents — built for teams and multi-agent engineering workflows.</b></p>
|
|
4
4
|
|
|
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.
|
|
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. When multiple engineers, agents, or repos need to build on the same knowledge base, bikky captures what's learned *during* sessions so future sessions start smarter.
|
|
6
6
|
|
|
7
7
|
### Who it's for
|
|
8
8
|
|
|
9
9
|
- 👥 **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.
|
|
10
|
-
-
|
|
10
|
+
- 🤖 **Multi-agent engineering workflows** — Multiple Cursor / Claude Code / Copilot sessions can share codebase context, conventions, and recent decisions instead of re-learning them from scratch.
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<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
|
|
13
|
+
<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" width="720" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
<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
|
|
16
|
+
<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 across the team.</i></p>
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
### The problem
|
|
21
21
|
|
|
22
|
-
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.
|
|
22
|
+
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. Across teams, repos, and tools, knowledge still lives in heads, chat threads, and closed PRs, and every new agent session has to learn it from scratch. Hand-written docs drift the moment they're published.
|
|
23
23
|
|
|
24
24
|
### How bikky solves it
|
|
25
25
|
|
|
@@ -30,6 +30,7 @@ bikky gives your agent memory tools and runs a small background service after `b
|
|
|
30
30
|
- **Recall** — Every new session, yours or a teammate's, recalls from the same store via semantic search.
|
|
31
31
|
- **Curate** — bikky merges duplicates, fades stale facts, resolves contradictions, distills recurring patterns, and builds an entity graph over time.
|
|
32
32
|
- **Compound** — Session 50 is dramatically better than session 1 because memory accumulates.
|
|
33
|
+
- **Route** — Optionally keep team, client, or environment-specific memory in separate Qdrant destinations from one install. See [separate memory stores](#optional-separate-memory-stores).
|
|
33
34
|
|
|
34
35
|
Subtypes keep recall precise without making setup harder:
|
|
35
36
|
|
|
@@ -42,7 +43,7 @@ Subtypes keep recall precise without making setup harder:
|
|
|
42
43
|
|
|
43
44
|
## Quick start
|
|
44
45
|
|
|
45
|
-
This
|
|
46
|
+
This is the fastest path to a working memory store: Qdrant runs locally, while hosted embeddings and LLM calls provide strong extraction and recall quality without running local models.
|
|
46
47
|
|
|
47
48
|
```bash
|
|
48
49
|
# 1. Pull and run Qdrant (vector store)
|
|
@@ -76,15 +77,17 @@ JSON
|
|
|
76
77
|
bikky setup # writes MCP config for Copilot + Claude Code, then starts the daemon
|
|
77
78
|
```
|
|
78
79
|
|
|
80
|
+
`npm install -g bikky` runs a best-effort postinstall setup hook for convenience. It never fails the install, and you should still run `bikky setup` after writing your config to make setup explicit and repeatable.
|
|
81
|
+
|
|
79
82
|
Restart your editor. The memory tools appear automatically in supported MCP clients.
|
|
80
83
|
|
|
81
84
|
```bash
|
|
82
85
|
bikky status # confirms Qdrant, embeddings, daemon, and UI health
|
|
83
86
|
```
|
|
84
87
|
|
|
85
|
-
That's it. You can keep Qdrant local forever, or move the vector store to Qdrant Cloud later.
|
|
88
|
+
That's it. You can keep Qdrant local forever, or move the vector store to Qdrant Cloud later for a shared team setup.
|
|
86
89
|
|
|
87
|
-
For
|
|
90
|
+
For other deployment shapes — fully hosted, 100% local, or hosted Qdrant with local models — see [Setup options](#setup-options).
|
|
88
91
|
|
|
89
92
|
---
|
|
90
93
|
|
|
@@ -104,24 +107,73 @@ bikky supports four common setup shapes. Pick based on where you want Qdrant to
|
|
|
104
107
|
|
|
105
108
|
Both `embedding.provider` and `llm.provider` accept the same values: `ollama`, `openai`, `bedrock`, or `portkey`.
|
|
106
109
|
|
|
110
|
+
> ⚠️ **Qdrant Cloud free tier does not include automatic backups.** Deleted collections cannot be recovered. If your memory data is valuable, use a paid Qdrant Cloud plan (which includes daily backups), run Qdrant locally with your own backup strategy, or periodically export snapshots via the [Qdrant snapshots API](https://qdrant.tech/documentation/concepts/snapshots/).
|
|
111
|
+
|
|
107
112
|
### Choose a setup
|
|
108
113
|
|
|
109
114
|
| Setup | Best for | Config |
|
|
110
115
|
| -------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
111
|
-
| **Fully hosted** | Best performance and teams; managed vector storage and models | [Fully hosted config]
|
|
112
|
-
| **Local Qdrant + hosted models** | Local vector storage with hosted extraction and embedding | [Hosted models config]
|
|
113
|
-
| **Local and free** |
|
|
114
|
-
| **Hosted Qdrant + local Ollama** | Shared vector storage while keeping model calls local | [Hosted Qdrant + local models]
|
|
116
|
+
| **Fully hosted** | Best performance and teams; managed vector storage and models | [Fully hosted config][fully-hosted-config] |
|
|
117
|
+
| **Local Qdrant + hosted models** | Local vector storage with hosted extraction and embedding | [Hosted models config][hosted-models-config] |
|
|
118
|
+
| **Local and free** | Local evaluation; quality depends on local models | [Local config guide][local-config] |
|
|
119
|
+
| **Hosted Qdrant + local Ollama** | Shared vector storage while keeping model calls local | [Hosted Qdrant + local models][hosted-qdrant-local-models-config] |
|
|
120
|
+
|
|
121
|
+
### Configuration basics
|
|
122
|
+
|
|
123
|
+
Pick the setup guide above for the copy-paste config. All setup shapes use the same three building blocks:
|
|
115
124
|
|
|
116
|
-
|
|
125
|
+
- **Qdrant** — where vectors and memory payloads are stored.
|
|
126
|
+
- **Embeddings** — how facts become searchable vectors.
|
|
127
|
+
- **LLM** — how session transcripts are extracted, curated, and distilled.
|
|
117
128
|
|
|
118
|
-
|
|
129
|
+
Config lives at `~/.bikky/config.json`, or at `BIKKY_HOME/config.json` when `BIKKY_HOME` is set. You can keep credentials out of the file with environment variables such as `QDRANT_URL`, `QDRANT_API_KEY`, and provider API keys.
|
|
119
130
|
|
|
120
131
|
For hosted models, custom providers, multiple profiles, or advanced tuning, use the full configuration guide.
|
|
121
132
|
|
|
122
|
-
> 📖 **Full configuration guide:** [docs/configuration.md]
|
|
133
|
+
> 📖 **Full configuration guide:** [docs/configuration.md][configuration-guide]
|
|
123
134
|
>
|
|
124
|
-
>
|
|
135
|
+
> 🔒 **Privacy-first setup:** [local storage, local models, and transcript-capture controls][privacy-quickstart]
|
|
136
|
+
>
|
|
137
|
+
> 🛠 Want to add a new embedding or LLM provider (Vertex, OpenRouter, etc.)? See **[CONTRIBUTING.md][contributing]** — it's a single-file change.
|
|
138
|
+
|
|
139
|
+
#### Optional: separate memory stores
|
|
140
|
+
|
|
141
|
+
Most installs use one Qdrant destination. If you need clean separation later, replace the single `qdrant_url` / `collection` fields with named `destinations[]`:
|
|
142
|
+
|
|
143
|
+
```jsonc
|
|
144
|
+
{
|
|
145
|
+
"destinations": [
|
|
146
|
+
{
|
|
147
|
+
"name": "platform",
|
|
148
|
+
"description": "Shared platform engineering memory.",
|
|
149
|
+
"qdrant_url": "https://platform.cloud.qdrant.io:6333",
|
|
150
|
+
"qdrant_api_key": "...",
|
|
151
|
+
"collection": "bikky-platform",
|
|
152
|
+
"default": true
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "client-a",
|
|
156
|
+
"description": "Client A project memory.",
|
|
157
|
+
"qdrant_url": "https://client-a.cloud.qdrant.io:6333",
|
|
158
|
+
"qdrant_api_key": "...",
|
|
159
|
+
"collection": "bikky-client-a"
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
"default_search_scope": "routed"
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
That is enough for explicit selection in the UI and tools. Add routing rules only when you want automatic placement by cwd, entity, content, or metadata. Search tools can also use `search_scope: "all"` or a named/listed scope when context may span stores. Existing single-Qdrant configs continue to work.
|
|
167
|
+
|
|
168
|
+
> 📖 **Details:** [multi-destination configuration](docs/configuration.md#multi-destination-routing)
|
|
169
|
+
|
|
170
|
+
[fully-hosted-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/fully-hosted.md
|
|
171
|
+
[hosted-models-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/hosted-models.md
|
|
172
|
+
[local-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/local.md
|
|
173
|
+
[hosted-qdrant-local-models-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/hosted-qdrant-local-models.md
|
|
174
|
+
[configuration-guide]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/configuration.md
|
|
175
|
+
[privacy-quickstart]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/privacy-first.md
|
|
176
|
+
[contributing]: https://cdn.jsdelivr.net/npm/bikky@latest/CONTRIBUTING.md
|
|
125
177
|
|
|
126
178
|
---
|
|
127
179
|
|
|
@@ -137,17 +189,17 @@ bikky-ui # opens http://localhost:1422
|
|
|
137
189
|
```
|
|
138
190
|
|
|
139
191
|
<p align="center">
|
|
140
|
-
<img src="
|
|
192
|
+
<img src="docs/screenshots/dashboard.png" alt="Dashboard — overview stats, category breakdown, recent facts" width="720" />
|
|
141
193
|
</p>
|
|
142
194
|
<p align="center"><i>Dashboard — memory stats, category breakdown, and recent facts at a glance</i></p>
|
|
143
195
|
|
|
144
196
|
<p align="center">
|
|
145
|
-
<img src="
|
|
197
|
+
<img src="docs/screenshots/memory.png" alt="Memory browser — search, filter, and browse all stored facts" width="720" />
|
|
146
198
|
</p>
|
|
147
199
|
<p align="center"><i>Memory browser — search, filter by category/kind/source, and browse all stored facts</i></p>
|
|
148
200
|
|
|
149
201
|
<p align="center">
|
|
150
|
-
<img src="
|
|
202
|
+
<img src="docs/screenshots/graph.png" alt="Entity graph — interactive visualization of entity relationships" width="720" />
|
|
151
203
|
</p>
|
|
152
204
|
<p align="center"><i>Entity graph — interactive visualization of how concepts, people, and services relate</i></p>
|
|
153
205
|
|
|
@@ -168,6 +220,28 @@ bikky render # render a prompt to JSON (for eval harnesses & debugging)
|
|
|
168
220
|
|
|
169
221
|
`bikky status` is the first thing to run when setup feels wrong. It checks the config, Qdrant, embeddings, background daemon, and local UI health, then tells you what needs attention. Use `bikky status --json` for automation.
|
|
170
222
|
|
|
223
|
+
## Privacy and transcript capture
|
|
224
|
+
|
|
225
|
+
bikky stores memory in the Qdrant destination you configure. The daemon runs locally and reads supported coding-agent transcript locations so it can extract durable facts for future sessions:
|
|
226
|
+
|
|
227
|
+
- GitHub Copilot session state: `~/.copilot/session-state`
|
|
228
|
+
- Claude Code project transcripts: `~/.claude/projects`
|
|
229
|
+
|
|
230
|
+
Only the configured daemon process reads these files. Extracted facts are redacted before storage, but they are still sent to your configured LLM provider for extraction unless you use a local provider such as Ollama. To disable transcript capture, set the relevant watcher to `false` in `~/.bikky/config.json`:
|
|
231
|
+
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"watchers": {
|
|
235
|
+
"copilot": { "enabled": false },
|
|
236
|
+
"claude": { "enabled": false }
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
You can also set `daemon.extract_every_sec` to `0` to disable background extraction while keeping MCP recall tools available.
|
|
242
|
+
|
|
243
|
+
For a local-storage, local-model setup that minimizes what leaves your machine, see the [privacy-first quickstart][privacy-quickstart].
|
|
244
|
+
|
|
171
245
|
## License
|
|
172
246
|
|
|
173
247
|
AGPL-3.0 — see [LICENSE](LICENSE).
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
Thanks for helping keep bikky and its users safe.
|
|
4
|
+
|
|
5
|
+
## Supported Versions
|
|
6
|
+
|
|
7
|
+
Security fixes land on the latest minor release of each package:
|
|
8
|
+
|
|
9
|
+
| Package | Supported versions |
|
|
10
|
+
| ---------- | ------------------------ |
|
|
11
|
+
| `bikky` | latest minor (`0.4.x`) |
|
|
12
|
+
| `bikky-ui` | latest minor (`0.1.x`) |
|
|
13
|
+
|
|
14
|
+
Older versions are not patched. If you're on an old version, please upgrade before reporting a vulnerability that may already be fixed.
|
|
15
|
+
|
|
16
|
+
## Reporting a Vulnerability
|
|
17
|
+
|
|
18
|
+
**Please do not open a public GitHub issue for security reports.**
|
|
19
|
+
|
|
20
|
+
Use GitHub's private vulnerability reporting:
|
|
21
|
+
|
|
22
|
+
1. Go to https://github.com/bikky-dev/bikky/security/advisories/new
|
|
23
|
+
2. Fill in the details — include reproduction steps, affected versions, and impact.
|
|
24
|
+
3. Submit. We'll get an email and respond from there.
|
|
25
|
+
|
|
26
|
+
If you can't use GitHub for any reason, open a regular issue titled "Security contact request" (no details) and we'll arrange a private channel.
|
|
27
|
+
|
|
28
|
+
## What to Expect
|
|
29
|
+
|
|
30
|
+
| When | What happens |
|
|
31
|
+
| ----------------------------------- | ----------------------------------------------------------------------------- |
|
|
32
|
+
| Within **3 business days** | We acknowledge the report and confirm we can reproduce (or ask for more info). |
|
|
33
|
+
| Within **7 business days** | We share an initial assessment: severity, affected versions, intended fix. |
|
|
34
|
+
| Within **90 days** (typical) | We ship a patched release and publish a GitHub Security Advisory with credit. |
|
|
35
|
+
|
|
36
|
+
For critical issues actively being exploited, we'll move faster and coordinate disclosure timing with you.
|
|
37
|
+
|
|
38
|
+
## Scope
|
|
39
|
+
|
|
40
|
+
In scope:
|
|
41
|
+
- The `bikky` npm package (CLI, MCP server, daemon).
|
|
42
|
+
- The `bikky-ui` npm package (local web UI server + frontend).
|
|
43
|
+
- The default daemon, postinstall scripts, and any code shipped in either tarball.
|
|
44
|
+
|
|
45
|
+
Out of scope:
|
|
46
|
+
- Vulnerabilities in dependencies that are already tracked upstream (please report to the upstream maintainer).
|
|
47
|
+
- Vulnerabilities that require physical access to the user's machine or already-compromised credentials.
|
|
48
|
+
- Findings from automated scanners with no demonstrated impact.
|
|
49
|
+
- Issues in third-party services bikky integrates with (Qdrant Cloud, OpenAI, etc.) — report those to the respective vendors.
|
|
50
|
+
|
|
51
|
+
## Safe Harbor
|
|
52
|
+
|
|
53
|
+
We support good-faith security research. If you make a reasonable effort to comply with this policy, we will:
|
|
54
|
+
- Not pursue legal action against you for the research.
|
|
55
|
+
- Work with you to understand and resolve the issue quickly.
|
|
56
|
+
- Recognise your contribution publicly (with your permission) in the advisory and release notes.
|
|
57
|
+
|
|
58
|
+
Thank you for helping make bikky safer for everyone.
|
package/SUPPORT.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
Thanks for using bikky.
|
|
4
|
+
|
|
5
|
+
## Questions and usage help
|
|
6
|
+
|
|
7
|
+
Open a GitHub issue using the most relevant template. Include your OS, Node.js version, package version, MCP client, and the output of:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bikky status
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Please redact API keys, access tokens, local file contents, and any private transcript data before posting.
|
|
14
|
+
|
|
15
|
+
## Bugs
|
|
16
|
+
|
|
17
|
+
Use the bug report template and include a minimal reproduction when possible. If the issue involves setup, include whether you installed with `npm install -g bikky`, `npx bikky`, or a local checkout.
|
|
18
|
+
|
|
19
|
+
## Security reports
|
|
20
|
+
|
|
21
|
+
Do not open a public issue for vulnerabilities. Follow [SECURITY.md](SECURITY.md) and use GitHub private vulnerability reporting.
|
|
22
|
+
|