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.
Files changed (342) hide show
  1. package/README.md +124 -35
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +7 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +22 -3
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +61 -6
  9. package/dist/config.js.map +1 -1
  10. package/dist/config.test.js +17 -9
  11. package/dist/config.test.js.map +1 -1
  12. package/dist/daemon/capture-policy.d.ts +95 -0
  13. package/dist/daemon/capture-policy.d.ts.map +1 -0
  14. package/dist/daemon/capture-policy.js +139 -0
  15. package/dist/daemon/capture-policy.js.map +1 -0
  16. package/dist/daemon/capture-policy.test.d.ts +2 -0
  17. package/dist/daemon/capture-policy.test.d.ts.map +1 -0
  18. package/dist/daemon/capture-policy.test.js +46 -0
  19. package/dist/daemon/capture-policy.test.js.map +1 -0
  20. package/dist/daemon/consolidation.d.ts.map +1 -1
  21. package/dist/daemon/consolidation.js +84 -98
  22. package/dist/daemon/consolidation.js.map +1 -1
  23. package/dist/daemon/episode-summary.d.ts +72 -0
  24. package/dist/daemon/episode-summary.d.ts.map +1 -0
  25. package/dist/daemon/episode-summary.js +208 -0
  26. package/dist/daemon/episode-summary.js.map +1 -0
  27. package/dist/daemon/episode-summary.test.d.ts +2 -0
  28. package/dist/daemon/episode-summary.test.d.ts.map +1 -0
  29. package/dist/daemon/episode-summary.test.js +101 -0
  30. package/dist/daemon/episode-summary.test.js.map +1 -0
  31. package/dist/daemon/extraction.d.ts +25 -0
  32. package/dist/daemon/extraction.d.ts.map +1 -1
  33. package/dist/daemon/extraction.js +244 -124
  34. package/dist/daemon/extraction.js.map +1 -1
  35. package/dist/daemon/extraction.test.d.ts +2 -0
  36. package/dist/daemon/extraction.test.d.ts.map +1 -0
  37. package/dist/daemon/extraction.test.js +106 -0
  38. package/dist/daemon/extraction.test.js.map +1 -0
  39. package/dist/daemon/loop.d.ts.map +1 -1
  40. package/dist/daemon/loop.js +8 -6
  41. package/dist/daemon/loop.js.map +1 -1
  42. package/dist/daemon/qdrant.d.ts +59 -8
  43. package/dist/daemon/qdrant.d.ts.map +1 -1
  44. package/dist/daemon/qdrant.js +74 -23
  45. package/dist/daemon/qdrant.js.map +1 -1
  46. package/dist/daemon/qdrant.test.js +2 -2
  47. package/dist/daemon/qdrant.test.js.map +1 -1
  48. package/dist/daemon/relations.d.ts +6 -1
  49. package/dist/daemon/relations.d.ts.map +1 -1
  50. package/dist/daemon/relations.js +44 -63
  51. package/dist/daemon/relations.js.map +1 -1
  52. package/dist/daemon/session-index.d.ts +60 -0
  53. package/dist/daemon/session-index.d.ts.map +1 -0
  54. package/dist/daemon/session-index.js +136 -0
  55. package/dist/daemon/session-index.js.map +1 -0
  56. package/dist/daemon/session-index.test.d.ts +2 -0
  57. package/dist/daemon/session-index.test.d.ts.map +1 -0
  58. package/dist/daemon/session-index.test.js +54 -0
  59. package/dist/daemon/session-index.test.js.map +1 -0
  60. package/dist/daemon/session-summary.d.ts +69 -0
  61. package/dist/daemon/session-summary.d.ts.map +1 -0
  62. package/dist/daemon/session-summary.js +200 -0
  63. package/dist/daemon/session-summary.js.map +1 -0
  64. package/dist/daemon/session-summary.test.d.ts +2 -0
  65. package/dist/daemon/session-summary.test.d.ts.map +1 -0
  66. package/dist/daemon/session-summary.test.js +160 -0
  67. package/dist/daemon/session-summary.test.js.map +1 -0
  68. package/dist/daemon/staleness.test.d.ts +7 -0
  69. package/dist/daemon/staleness.test.d.ts.map +1 -0
  70. package/dist/daemon/staleness.test.js +128 -0
  71. package/dist/daemon/staleness.test.js.map +1 -0
  72. package/dist/daemon/workstream-summary.d.ts +61 -0
  73. package/dist/daemon/workstream-summary.d.ts.map +1 -0
  74. package/dist/daemon/workstream-summary.js +220 -0
  75. package/dist/daemon/workstream-summary.js.map +1 -0
  76. package/dist/daemon/workstream-summary.test.d.ts +2 -0
  77. package/dist/daemon/workstream-summary.test.d.ts.map +1 -0
  78. package/dist/daemon/workstream-summary.test.js +86 -0
  79. package/dist/daemon/workstream-summary.test.js.map +1 -0
  80. package/dist/lib/qdrant-client.d.ts +6 -1
  81. package/dist/lib/qdrant-client.d.ts.map +1 -1
  82. package/dist/lib/qdrant-client.js +3 -4
  83. package/dist/lib/qdrant-client.js.map +1 -1
  84. package/dist/lib/qdrant-client.test.js +21 -2
  85. package/dist/lib/qdrant-client.test.js.map +1 -1
  86. package/dist/lifecycle.test.d.ts +8 -0
  87. package/dist/lifecycle.test.d.ts.map +1 -0
  88. package/dist/lifecycle.test.js +74 -0
  89. package/dist/lifecycle.test.js.map +1 -0
  90. package/dist/llm/embedding/index.d.ts +42 -0
  91. package/dist/llm/embedding/index.d.ts.map +1 -0
  92. package/dist/llm/embedding/index.js +78 -0
  93. package/dist/llm/embedding/index.js.map +1 -0
  94. package/dist/llm/embedding/index.test.d.ts +8 -0
  95. package/dist/llm/embedding/index.test.d.ts.map +1 -0
  96. package/dist/llm/embedding/index.test.js +100 -0
  97. package/dist/llm/embedding/index.test.js.map +1 -0
  98. package/dist/llm/embedding/providers/bedrock.d.ts +16 -0
  99. package/dist/llm/embedding/providers/bedrock.d.ts.map +1 -0
  100. package/dist/llm/embedding/providers/bedrock.js +90 -0
  101. package/dist/llm/embedding/providers/bedrock.js.map +1 -0
  102. package/dist/llm/embedding/providers/bedrock.test.d.ts +2 -0
  103. package/dist/llm/embedding/providers/bedrock.test.d.ts.map +1 -0
  104. package/dist/llm/embedding/providers/bedrock.test.js +24 -0
  105. package/dist/llm/embedding/providers/bedrock.test.js.map +1 -0
  106. package/dist/llm/embedding/providers/index.d.ts +9 -0
  107. package/dist/llm/embedding/providers/index.d.ts.map +1 -0
  108. package/dist/llm/embedding/providers/index.js +9 -0
  109. package/dist/llm/embedding/providers/index.js.map +1 -0
  110. package/dist/llm/embedding/providers/ollama.d.ts +6 -0
  111. package/dist/llm/embedding/providers/ollama.d.ts.map +1 -0
  112. package/dist/llm/embedding/providers/ollama.js +39 -0
  113. package/dist/llm/embedding/providers/ollama.js.map +1 -0
  114. package/dist/llm/embedding/providers/ollama.test.d.ts +2 -0
  115. package/dist/llm/embedding/providers/ollama.test.d.ts.map +1 -0
  116. package/dist/llm/embedding/providers/ollama.test.js +54 -0
  117. package/dist/llm/embedding/providers/ollama.test.js.map +1 -0
  118. package/dist/llm/embedding/providers/openai.d.ts +6 -0
  119. package/dist/llm/embedding/providers/openai.d.ts.map +1 -0
  120. package/dist/llm/embedding/providers/openai.js +44 -0
  121. package/dist/llm/embedding/providers/openai.js.map +1 -0
  122. package/dist/llm/embedding/providers/openai.test.d.ts +2 -0
  123. package/dist/llm/embedding/providers/openai.test.d.ts.map +1 -0
  124. package/dist/llm/embedding/providers/openai.test.js +48 -0
  125. package/dist/llm/embedding/providers/openai.test.js.map +1 -0
  126. package/dist/llm/embedding/providers/portkey.d.ts +15 -0
  127. package/dist/llm/embedding/providers/portkey.d.ts.map +1 -0
  128. package/dist/llm/embedding/providers/portkey.js +58 -0
  129. package/dist/llm/embedding/providers/portkey.js.map +1 -0
  130. package/dist/llm/embedding/providers/portkey.test.d.ts +2 -0
  131. package/dist/llm/embedding/providers/portkey.test.d.ts.map +1 -0
  132. package/dist/llm/embedding/providers/portkey.test.js +56 -0
  133. package/dist/llm/embedding/providers/portkey.test.js.map +1 -0
  134. package/dist/llm/embedding/registry.d.ts +14 -0
  135. package/dist/llm/embedding/registry.d.ts.map +1 -0
  136. package/dist/llm/embedding/registry.js +27 -0
  137. package/dist/llm/embedding/registry.js.map +1 -0
  138. package/dist/llm/embedding/registry.test.d.ts +7 -0
  139. package/dist/llm/embedding/registry.test.d.ts.map +1 -0
  140. package/dist/llm/embedding/registry.test.js +68 -0
  141. package/dist/llm/embedding/registry.test.js.map +1 -0
  142. package/dist/llm/embedding/types.d.ts +55 -0
  143. package/dist/llm/embedding/types.d.ts.map +1 -0
  144. package/dist/llm/embedding/types.js +12 -0
  145. package/dist/llm/embedding/types.js.map +1 -0
  146. package/dist/llm/errors.d.ts +95 -0
  147. package/dist/llm/errors.d.ts.map +1 -0
  148. package/dist/llm/errors.js +164 -0
  149. package/dist/llm/errors.js.map +1 -0
  150. package/dist/llm/errors.test.d.ts +2 -0
  151. package/dist/llm/errors.test.d.ts.map +1 -0
  152. package/dist/llm/errors.test.js +103 -0
  153. package/dist/llm/errors.test.js.map +1 -0
  154. package/dist/llm/fetch.d.ts +39 -0
  155. package/dist/llm/fetch.d.ts.map +1 -0
  156. package/dist/llm/fetch.js +52 -0
  157. package/dist/llm/fetch.js.map +1 -0
  158. package/dist/llm/index.d.ts +6 -3
  159. package/dist/llm/index.d.ts.map +1 -1
  160. package/dist/llm/index.js +2 -2
  161. package/dist/llm/index.js.map +1 -1
  162. package/dist/llm/inference/index.d.ts +39 -0
  163. package/dist/llm/inference/index.d.ts.map +1 -0
  164. package/dist/llm/inference/index.js +118 -0
  165. package/dist/llm/inference/index.js.map +1 -0
  166. package/dist/llm/inference/index.test.d.ts +6 -0
  167. package/dist/llm/inference/index.test.d.ts.map +1 -0
  168. package/dist/llm/inference/index.test.js +109 -0
  169. package/dist/llm/inference/index.test.js.map +1 -0
  170. package/dist/llm/inference/providers/bedrock.d.ts +18 -0
  171. package/dist/llm/inference/providers/bedrock.d.ts.map +1 -0
  172. package/dist/llm/inference/providers/bedrock.js +105 -0
  173. package/dist/llm/inference/providers/bedrock.js.map +1 -0
  174. package/dist/llm/inference/providers/bedrock.test.d.ts +2 -0
  175. package/dist/llm/inference/providers/bedrock.test.d.ts.map +1 -0
  176. package/dist/llm/inference/providers/bedrock.test.js +21 -0
  177. package/dist/llm/inference/providers/bedrock.test.js.map +1 -0
  178. package/dist/llm/inference/providers/index.d.ts +10 -0
  179. package/dist/llm/inference/providers/index.d.ts.map +1 -0
  180. package/dist/llm/inference/providers/index.js +10 -0
  181. package/dist/llm/inference/providers/index.js.map +1 -0
  182. package/dist/llm/inference/providers/ollama.d.ts +8 -0
  183. package/dist/llm/inference/providers/ollama.d.ts.map +1 -0
  184. package/dist/llm/inference/providers/ollama.js +63 -0
  185. package/dist/llm/inference/providers/ollama.js.map +1 -0
  186. package/dist/llm/inference/providers/ollama.test.d.ts +2 -0
  187. package/dist/llm/inference/providers/ollama.test.d.ts.map +1 -0
  188. package/dist/llm/inference/providers/ollama.test.js +57 -0
  189. package/dist/llm/inference/providers/ollama.test.js.map +1 -0
  190. package/dist/llm/inference/providers/openai.d.ts +11 -0
  191. package/dist/llm/inference/providers/openai.d.ts.map +1 -0
  192. package/dist/llm/inference/providers/openai.js +73 -0
  193. package/dist/llm/inference/providers/openai.js.map +1 -0
  194. package/dist/llm/inference/providers/openai.test.d.ts +2 -0
  195. package/dist/llm/inference/providers/openai.test.d.ts.map +1 -0
  196. package/dist/llm/inference/providers/openai.test.js +46 -0
  197. package/dist/llm/inference/providers/openai.test.js.map +1 -0
  198. package/dist/llm/inference/providers/portkey.d.ts +13 -0
  199. package/dist/llm/inference/providers/portkey.d.ts.map +1 -0
  200. package/dist/llm/inference/providers/portkey.js +80 -0
  201. package/dist/llm/inference/providers/portkey.js.map +1 -0
  202. package/dist/llm/inference/providers/portkey.test.d.ts +2 -0
  203. package/dist/llm/inference/providers/portkey.test.d.ts.map +1 -0
  204. package/dist/llm/inference/providers/portkey.test.js +48 -0
  205. package/dist/llm/inference/providers/portkey.test.js.map +1 -0
  206. package/dist/llm/inference/registry.d.ts +15 -0
  207. package/dist/llm/inference/registry.d.ts.map +1 -0
  208. package/dist/llm/inference/registry.js +28 -0
  209. package/dist/llm/inference/registry.js.map +1 -0
  210. package/dist/llm/inference/registry.test.d.ts +6 -0
  211. package/dist/llm/inference/registry.test.d.ts.map +1 -0
  212. package/dist/llm/inference/registry.test.js +63 -0
  213. package/dist/llm/inference/registry.test.js.map +1 -0
  214. package/dist/llm/inference/types.d.ts +84 -0
  215. package/dist/llm/inference/types.d.ts.map +1 -0
  216. package/dist/llm/inference/types.js +9 -0
  217. package/dist/llm/inference/types.js.map +1 -0
  218. package/dist/llm/telemetry.d.ts +25 -0
  219. package/dist/llm/telemetry.d.ts.map +1 -0
  220. package/dist/llm/telemetry.js +43 -0
  221. package/dist/llm/telemetry.js.map +1 -0
  222. package/dist/llm/telemetry.test.d.ts +5 -0
  223. package/dist/llm/telemetry.test.d.ts.map +1 -0
  224. package/dist/llm/telemetry.test.js +89 -0
  225. package/dist/llm/telemetry.test.js.map +1 -0
  226. package/dist/llm/types.d.ts +4 -37
  227. package/dist/llm/types.d.ts.map +1 -1
  228. package/dist/llm/types.js +4 -1
  229. package/dist/llm/types.js.map +1 -1
  230. package/dist/logger.d.ts +18 -3
  231. package/dist/logger.d.ts.map +1 -1
  232. package/dist/logger.js +102 -20
  233. package/dist/logger.js.map +1 -1
  234. package/dist/logger.test.d.ts +5 -0
  235. package/dist/logger.test.d.ts.map +1 -0
  236. package/dist/logger.test.js +103 -0
  237. package/dist/logger.test.js.map +1 -0
  238. package/dist/mcp/api.d.ts +15 -1
  239. package/dist/mcp/api.d.ts.map +1 -1
  240. package/dist/mcp/api.js +44 -19
  241. package/dist/mcp/api.js.map +1 -1
  242. package/dist/mcp/api.test.d.ts +6 -0
  243. package/dist/mcp/api.test.d.ts.map +1 -0
  244. package/dist/mcp/api.test.js +130 -0
  245. package/dist/mcp/api.test.js.map +1 -0
  246. package/dist/mcp/helpers.d.ts +1 -0
  247. package/dist/mcp/helpers.d.ts.map +1 -1
  248. package/dist/mcp/helpers.js +62 -6
  249. package/dist/mcp/helpers.js.map +1 -1
  250. package/dist/mcp/helpers.test.js +71 -10
  251. package/dist/mcp/helpers.test.js.map +1 -1
  252. package/dist/mcp/index.d.ts +7 -1
  253. package/dist/mcp/index.d.ts.map +1 -1
  254. package/dist/mcp/index.js +46 -21
  255. package/dist/mcp/index.js.map +1 -1
  256. package/dist/mcp/taxonomy.d.ts +251 -31
  257. package/dist/mcp/taxonomy.d.ts.map +1 -1
  258. package/dist/mcp/taxonomy.js +603 -171
  259. package/dist/mcp/taxonomy.js.map +1 -1
  260. package/dist/mcp/taxonomy.test.d.ts +1 -1
  261. package/dist/mcp/taxonomy.test.js +141 -302
  262. package/dist/mcp/taxonomy.test.js.map +1 -1
  263. package/dist/mcp/tools.d.ts +1 -1
  264. package/dist/mcp/tools.d.ts.map +1 -1
  265. package/dist/mcp/tools.integration.itest.d.ts +23 -0
  266. package/dist/mcp/tools.integration.itest.d.ts.map +1 -0
  267. package/dist/mcp/tools.integration.itest.js +172 -0
  268. package/dist/mcp/tools.integration.itest.js.map +1 -0
  269. package/dist/mcp/tools.js +422 -357
  270. package/dist/mcp/tools.js.map +1 -1
  271. package/dist/mcp/tools.test.d.ts +16 -0
  272. package/dist/mcp/tools.test.d.ts.map +1 -0
  273. package/dist/mcp/tools.test.js +472 -0
  274. package/dist/mcp/tools.test.js.map +1 -0
  275. package/dist/mcp/types.d.ts +63 -8
  276. package/dist/mcp/types.d.ts.map +1 -1
  277. package/dist/prompts/brief.d.ts +19 -0
  278. package/dist/prompts/brief.d.ts.map +1 -0
  279. package/dist/prompts/brief.js +67 -0
  280. package/dist/prompts/brief.js.map +1 -0
  281. package/dist/prompts/contradiction.d.ts +24 -0
  282. package/dist/prompts/contradiction.d.ts.map +1 -0
  283. package/dist/prompts/contradiction.js +73 -0
  284. package/dist/prompts/contradiction.js.map +1 -0
  285. package/dist/prompts/distill.d.ts +21 -0
  286. package/dist/prompts/distill.d.ts.map +1 -0
  287. package/dist/prompts/distill.js +92 -0
  288. package/dist/prompts/distill.js.map +1 -0
  289. package/dist/prompts/episode-summary.d.ts +15 -0
  290. package/dist/prompts/episode-summary.d.ts.map +1 -0
  291. package/dist/prompts/episode-summary.js +60 -0
  292. package/dist/prompts/episode-summary.js.map +1 -0
  293. package/dist/prompts/extraction.d.ts +14 -0
  294. package/dist/prompts/extraction.d.ts.map +1 -0
  295. package/dist/prompts/extraction.js +110 -0
  296. package/dist/prompts/extraction.js.map +1 -0
  297. package/dist/prompts/index.d.ts +52 -0
  298. package/dist/prompts/index.d.ts.map +1 -0
  299. package/dist/prompts/index.js +104 -0
  300. package/dist/prompts/index.js.map +1 -0
  301. package/dist/prompts/prompts.test.d.ts +8 -0
  302. package/dist/prompts/prompts.test.d.ts.map +1 -0
  303. package/dist/prompts/prompts.test.js +140 -0
  304. package/dist/prompts/prompts.test.js.map +1 -0
  305. package/dist/prompts/relations.d.ts +17 -0
  306. package/dist/prompts/relations.d.ts.map +1 -0
  307. package/dist/prompts/relations.js +72 -0
  308. package/dist/prompts/relations.js.map +1 -0
  309. package/dist/prompts/workstream-summary.d.ts +17 -0
  310. package/dist/prompts/workstream-summary.d.ts.map +1 -0
  311. package/dist/prompts/workstream-summary.js +72 -0
  312. package/dist/prompts/workstream-summary.js.map +1 -0
  313. package/dist/render.d.ts +41 -0
  314. package/dist/render.d.ts.map +1 -0
  315. package/dist/render.js +185 -0
  316. package/dist/render.js.map +1 -0
  317. package/dist/render.test.d.ts +8 -0
  318. package/dist/render.test.d.ts.map +1 -0
  319. package/dist/render.test.js +243 -0
  320. package/dist/render.test.js.map +1 -0
  321. package/docs/diagrams/architecture.svg +87 -0
  322. package/docs/diagrams/team-memory.svg +250 -0
  323. package/docs/screenshots/dashboard.png +0 -0
  324. package/docs/screenshots/graph.png +0 -0
  325. package/docs/screenshots/memory.png +0 -0
  326. package/package.json +12 -3
  327. package/dist/llm/embedding.d.ts +0 -13
  328. package/dist/llm/embedding.d.ts.map +0 -1
  329. package/dist/llm/embedding.js +0 -127
  330. package/dist/llm/embedding.js.map +0 -1
  331. package/dist/llm/embedding.test.d.ts +0 -8
  332. package/dist/llm/embedding.test.d.ts.map +0 -1
  333. package/dist/llm/embedding.test.js +0 -117
  334. package/dist/llm/embedding.test.js.map +0 -1
  335. package/dist/llm/inference.d.ts +0 -12
  336. package/dist/llm/inference.d.ts.map +0 -1
  337. package/dist/llm/inference.js +0 -146
  338. package/dist/llm/inference.js.map +0 -1
  339. package/dist/llm/inference.test.d.ts +0 -8
  340. package/dist/llm/inference.test.d.ts.map +0 -1
  341. package/dist/llm/inference.test.js +0 -117
  342. package/dist/llm/inference.test.js.map +0 -1
package/dist/mcp/index.js CHANGED
@@ -1,14 +1,20 @@
1
1
  /**
2
- * bikky MCP Server — episodic memory via Qdrant Cloud.
2
+ * bikky MCP Server — episodic memory via Qdrant (Cloud, Docker, or self-hosted).
3
3
  *
4
4
  * Provides persistent memory across AI coding sessions. All facts, relations,
5
5
  * and entity context live as Qdrant points with vector embeddings + structured
6
6
  * payloads. Config stored in ~/.bikky/config.json.
7
+ *
8
+ * Boot resilience: every initialisation step is wrapped so a misconfigured
9
+ * provider, missing key, or unreachable Qdrant cluster surfaces as a
10
+ * `setup_required` status (with an actionable reason) instead of crashing the
11
+ * MCP stdio transport. The MCP server always comes up; tools then degrade
12
+ * gracefully via `requireReady()`.
7
13
  */
8
14
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
15
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
16
  import { QDRANT_INDEXES } from "./taxonomy.js";
11
- import { log, setQdrantUrl, setQdrantApiKey, setReady, setCollection, ensureCollection, initEmbedding, } from "./api.js";
17
+ import { log, setQdrantUrl, setQdrantApiKey, setReady, setCollection, setSetupError, ensureCollection, initEmbedding, } from "./api.js";
12
18
  import { registerTools } from "./tools.js";
13
19
  import { loadConfig } from "../config.js";
14
20
  export async function startMcpServer() {
@@ -20,38 +26,57 @@ export async function startMcpServer() {
20
26
  setQdrantUrl(qUrl);
21
27
  setQdrantApiKey(qKey);
22
28
  setCollection(cfg.collection);
23
- // Initialize embedding provider
24
- const embCfg = initEmbedding({
25
- provider: cfg.embedding.provider,
26
- baseUrl: cfg.embedding.base_url,
27
- model: cfg.embedding.model,
28
- dimensions: cfg.embedding.dimensions,
29
- apiKey: cfg.embedding.api_key ?? null,
30
- });
31
- log("INFO", `Embedding: ${embCfg.provider}/${embCfg.model} (${embCfg.dimensions}d) @ ${embCfg.baseUrl || "(sdk)"}`);
32
- if (qUrl && qKey) {
29
+ // Initialize embedding provider — wrapped so an unknown provider name or
30
+ // misconfiguration produces a setup_required status instead of crashing the
31
+ // MCP stdio transport. The server always comes up; tools degrade via
32
+ // requireReady().
33
+ try {
34
+ const embCfg = initEmbedding({
35
+ provider: cfg.embedding.provider,
36
+ baseUrl: cfg.embedding.base_url,
37
+ model: cfg.embedding.model,
38
+ dimensions: cfg.embedding.dimensions,
39
+ apiKey: cfg.embedding.api_key ?? null,
40
+ extra: cfg.embedding.extra ?? {},
41
+ timeoutMs: cfg.embedding.timeout_ms,
42
+ retries: cfg.embedding.retries,
43
+ retryBaseDelayMs: cfg.embedding.retry_base_delay_ms,
44
+ });
45
+ log("INFO", `Embedding: ${embCfg.provider}/${embCfg.model} (${embCfg.dimensions}d) @ ${embCfg.baseUrl || "(sdk)"}`);
46
+ }
47
+ catch (e) {
48
+ const msg = e instanceof Error ? e.message : String(e);
49
+ setSetupError(`Embedding init failed: ${msg}`);
50
+ log("ERROR", `Embedding init failed: ${msg}`);
51
+ // Continue — server will report setup_required for memory tools.
52
+ }
53
+ if (qUrl) {
33
54
  try {
34
55
  await ensureCollection(QDRANT_INDEXES);
35
56
  setReady(true);
36
- log("INFO", "Memory system ready ✓");
57
+ log("INFO", `Memory system ready ✓ (Qdrant ${qKey ? "with" : "without"} api-key auth)`);
37
58
  }
38
59
  catch (e) {
39
- log("ERROR", `Failed to initialize collection: ${e instanceof Error ? e.message : String(e)}`);
60
+ const msg = e instanceof Error ? e.message : String(e);
61
+ setSetupError(`Qdrant initialization failed: ${msg}`);
62
+ log("ERROR", `Failed to initialize collection: ${msg}`);
40
63
  }
41
64
  }
42
65
  else {
43
- const missing = [];
44
- if (!qUrl)
45
- missing.push("qdrant-url");
46
- if (!qKey)
47
- missing.push("qdrant-api-key");
48
- log("INFO", `Memory not configured — missing: ${missing.join(", ")}. Use get_setup_status + configure_credentials.`);
66
+ log("INFO", "Memory not configured — missing: qdrant-url. Use get_setup_status + configure_credentials.");
49
67
  }
50
68
  const mcp = new McpServer({
51
69
  name: "bikky",
52
70
  version: "0.1.0",
53
71
  }, {
54
- instructions: "Shared memory tools for AI coding sessions. Store and recall facts, entities, and relationships across sessions.",
72
+ instructions: [
73
+ "Bikky provides persistent memory across AI coding sessions. Use it as a working loop, not a database:",
74
+ " • STORE when you learn something durable (a service detail, a decision, a workaround, a user preference). Call memory_store with one atomic fact per call — dedup is automatic, so don't pre-check.",
75
+ " • RECALL before acting. At session start, call memory_recall with a broad briefing query. For each new user prompt about an unfamiliar topic, recall again with a focused query. Recall before storing too, to surface conflicts.",
76
+ " • VERIFY when stale. memory_heartbeat surfaces stale fact IDs every ~3 calls; confirm them with memory_verify, retire them with memory_forget, or replace them with memory_store(supersedes: <id>).",
77
+ " • ENTITY-FIRST queries. When the user asks 'tell me about X', prefer memory_entity over memory_recall.",
78
+ "If the system is not configured, call get_setup_status for guidance.",
79
+ ].join("\n"),
55
80
  });
56
81
  registerTools(mcp);
57
82
  const transport = new StdioServerTransport();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -1,38 +1,258 @@
1
1
  /**
2
- * Memory Taxonomy — Single source of truth for all classification axes.
2
+ * Bikky memory ontology.
3
3
  *
4
- * Four orthogonal axes classify every fact:
5
- * category topic/subject matter (what the fact is about)
6
- * domain — life scope (work vs personal context)
7
- * kind — epistemic type (how the knowledge exists)
8
- * source — provenance (who/what created this fact)
4
+ * Ontology v2 separates ownership boundaries from semantic meaning:
5
+ * workspace -> domain -> repo/project/surface -> workstream -> episode -> memory objects.
9
6
  */
10
- import type { AxisDef, CategoryDef, QdrantIndex } from "./types.js";
11
- export declare const CATEGORIES: Record<string, CategoryDef>;
12
- export declare const DOMAINS: Record<string, AxisDef>;
13
- export declare const DEFAULT_DOMAIN = "work";
14
- export declare const KINDS: Record<string, AxisDef>;
15
- export declare const DEFAULT_KIND = "fact";
16
- export declare const SOURCES: Record<string, AxisDef>;
17
- export declare const DEFAULT_SOURCE = "agent";
18
- export declare const DECAY_DEFAULT_HALF_LIFE = 90;
19
- export declare function getDecayHalfLife(opts?: {
20
- kind?: string;
21
- category?: string;
22
- domain?: string;
23
- }): number | null;
24
- export declare const DECAY_HALF_LIFE: Record<string, number | null>;
7
+ export declare const CATEGORIES: {
8
+ readonly codebase: {
9
+ readonly description: "Repository structure, modules, important files, APIs, build/test commands, and code navigation knowledge.";
10
+ readonly examples: readonly ["The auth middleware lives in src/server/auth.ts.", "Run npm test -- --runInBand for flaky integration tests."];
11
+ };
12
+ readonly infrastructure: {
13
+ readonly description: "Cloud, deployment, runtime, secrets, queues, databases, CI/CD, and environment topology.";
14
+ readonly examples: readonly ["Production runs on a Qdrant cluster (Cloud or self-hosted) for vector storage.", "Deployments are promoted through GitHub Actions."];
15
+ };
16
+ readonly operations: {
17
+ readonly description: "Runbooks, incident handling, maintenance procedures, debugging steps, and operational gotchas.";
18
+ readonly examples: readonly ["Restart the worker after changing queue visibility timeout.", "If migrations hang, check the advisory lock table first."];
19
+ };
20
+ readonly decisions: {
21
+ readonly description: "Architecture, product, process, and technical decisions with durable rationale.";
22
+ readonly examples: readonly ["Use workspace_id as the access boundary instead of overloading domain.", "Keep telemetry out of normal semantic recall."];
23
+ };
24
+ readonly product_domain: {
25
+ readonly description: "Product concepts, business rules, user workflows, domain vocabulary, and market assumptions.";
26
+ readonly examples: readonly ["A workstream is the durable continuity unit for long-running tasks.", "Recall quality should be measured by downstream usefulness, not just similarity."];
27
+ };
28
+ readonly projects: {
29
+ readonly description: "Project goals, milestones, current state, open questions, blockers, and active workstreams.";
30
+ readonly examples: readonly ["The capture-policy RPI is implementing ontology v2 first.", "The UI smoke suite is tracked in bikky-dev/bikky#13."];
31
+ };
32
+ readonly people: {
33
+ readonly description: "Ownership, roles, collaboration patterns, responsibilities, and team preferences.";
34
+ readonly examples: readonly ["Saber prefers concise implementation plans before code changes.", "The platform team owns the deploy workflow."];
35
+ };
36
+ readonly preferences: {
37
+ readonly description: "User, team, or workspace preferences about style, tooling, defaults, and interaction patterns.";
38
+ readonly examples: readonly ["Prefer Node's built-in test runner for this repo.", "Default new memory captures to software_engineering."];
39
+ };
40
+ readonly observations: {
41
+ readonly description: "Validated observations, troubleshooting evidence, behavioral notes, and learned facts that do not fit a narrower category.";
42
+ readonly examples: readonly ["The current ESLint config is incompatible with ESLint v9.", "The dashboard shows stale facts separately from verified current facts."];
43
+ };
44
+ };
45
+ export type Category = keyof typeof CATEGORIES;
46
+ export declare const DEFAULT_CATEGORY: Category;
47
+ export declare const DOMAINS: {
48
+ readonly software_engineering: {
49
+ readonly description: "Coding-agent work: repositories, code changes, architecture, infrastructure, debugging, tests, CI, and developer workflow.";
50
+ readonly defaultCategories: readonly ["codebase", "infrastructure", "operations", "decisions", "projects", "preferences", "observations"];
51
+ };
52
+ readonly product_strategy: {
53
+ readonly description: "Product direction, positioning, roadmap tradeoffs, customer problems, metrics, and market learning.";
54
+ readonly defaultCategories: readonly ["product_domain", "decisions", "projects", "people", "preferences", "observations"];
55
+ };
56
+ readonly business_operations: {
57
+ readonly description: "Business process, vendors, finance, legal/admin operations, recurring procedures, and ownership.";
58
+ readonly defaultCategories: readonly ["operations", "decisions", "projects", "people", "preferences", "observations"];
59
+ };
60
+ readonly research: {
61
+ readonly description: "Research questions, sources, hypotheses, experiment findings, synthesis, and reusable insights.";
62
+ readonly defaultCategories: readonly ["product_domain", "decisions", "projects", "preferences", "observations"];
63
+ };
64
+ readonly personal_productivity: {
65
+ readonly description: "Individual productivity, habits, planning preferences, reminders, and personal operating context.";
66
+ readonly defaultCategories: readonly ["operations", "projects", "people", "preferences", "observations"];
67
+ };
68
+ };
69
+ export type Domain = keyof typeof DOMAINS;
70
+ export declare const DEFAULT_DOMAIN: Domain;
71
+ export declare const LAYERS: {
72
+ readonly workspace: {
73
+ readonly description: "Ownership, tenancy, access policy, sharing, redaction, retention, and quotas.";
74
+ };
75
+ readonly domain: {
76
+ readonly description: "Semantic profile that controls vocabulary, prompts, categories, ranking, and capture policy.";
77
+ };
78
+ readonly surface: {
79
+ readonly description: "Concrete operating surface such as a repo, project, package, service, branch, or channel.";
80
+ };
81
+ readonly workstream: {
82
+ readonly description: "Primary durable continuity key for a long-running objective or task.";
83
+ };
84
+ readonly episode: {
85
+ readonly description: "Coherent segment of activity within a session or transcript.";
86
+ };
87
+ readonly memory_object: {
88
+ readonly description: "A fact, summary, distilled learning, relation, or telemetry object.";
89
+ };
90
+ };
91
+ export type Layer = keyof typeof LAYERS;
92
+ export declare const KINDS: {
93
+ readonly fact: {
94
+ readonly description: "Atomic, durable memory that should be retrievable independently.";
95
+ readonly examples: readonly ["The daemon stores extracted coding-agent observations in Qdrant.", "The UI package uses Vite and Node's built-in test runner."];
96
+ };
97
+ readonly summary: {
98
+ readonly description: "Compressed representation of a session index, coherent episode, or current workstream state.";
99
+ readonly examples: readonly ["Episode summary of a coherent implementation task.", "Current-state summary for a workstream."];
100
+ };
101
+ readonly distilled: {
102
+ readonly description: "Pattern, convention, failure mode, or reusable learning synthesized from multiple memories.";
103
+ readonly examples: readonly ["Prefer explicit workspace filters for scoped team memory.", "Missing Qdrant payload indexes surface as query failures."];
104
+ };
105
+ readonly relation: {
106
+ readonly description: "Typed edge between entities; relation_type carries the edge label.";
107
+ readonly examples: readonly ["bikky -> uses -> qdrant", "workspace_id -> represents -> access boundary"];
108
+ };
109
+ readonly telemetry: {
110
+ readonly description: "Memory-use, feedback, or outcome metadata used for product quality and operations; excluded from normal semantic recall.";
111
+ readonly examples: readonly ["A recall event returned three facts for session abc.", "A user marked a fact useful."];
112
+ };
113
+ };
114
+ export type Kind = keyof typeof KINDS;
115
+ export declare const MEMORY_SUBTYPES: {
116
+ readonly fact: readonly ["codebase_map", "architecture_decision", "infra_topology", "access_pattern", "deployment_procedure", "operational_procedure", "domain_rule", "troubleshooting_gotcha", "preference", "ownership"];
117
+ readonly summary: readonly ["session_index", "episode", "workstream"];
118
+ readonly distilled: readonly ["runbook_candidate", "failure_mode", "convention", "architecture_pattern", "product_insight"];
119
+ readonly relation: readonly [];
120
+ readonly telemetry: readonly ["recall_event", "feedback_event", "outcome_event", "aggregate_rollup"];
121
+ };
122
+ export type MemorySubtype = (typeof MEMORY_SUBTYPES)[Kind][number];
123
+ export declare const DEFAULT_MEMORY_SUBTYPE_BY_KIND: {
124
+ readonly fact: "codebase_map";
125
+ readonly summary: "episode";
126
+ readonly distilled: "convention";
127
+ readonly relation: null;
128
+ readonly telemetry: "recall_event";
129
+ };
130
+ export declare const MEMORY_SUBTYPE_DEFAULT_CATEGORY: {
131
+ readonly codebase_map: "codebase";
132
+ readonly architecture_decision: "decisions";
133
+ readonly infra_topology: "infrastructure";
134
+ readonly access_pattern: "infrastructure";
135
+ readonly deployment_procedure: "operations";
136
+ readonly operational_procedure: "operations";
137
+ readonly domain_rule: "product_domain";
138
+ readonly troubleshooting_gotcha: "operations";
139
+ readonly preference: "preferences";
140
+ readonly ownership: "people";
141
+ readonly session_index: "projects";
142
+ readonly episode: "projects";
143
+ readonly workstream: "projects";
144
+ readonly runbook_candidate: "operations";
145
+ readonly failure_mode: "operations";
146
+ readonly convention: "observations";
147
+ readonly architecture_pattern: "decisions";
148
+ readonly product_insight: "product_domain";
149
+ readonly recall_event: "observations";
150
+ readonly feedback_event: "observations";
151
+ readonly outcome_event: "observations";
152
+ readonly aggregate_rollup: "observations";
153
+ };
154
+ export declare const MEMORY_SUBTYPE_DEFAULT_LAYER: {
155
+ readonly codebase_map: "surface";
156
+ readonly architecture_decision: "surface";
157
+ readonly infra_topology: "surface";
158
+ readonly access_pattern: "surface";
159
+ readonly deployment_procedure: "surface";
160
+ readonly operational_procedure: "surface";
161
+ readonly domain_rule: "domain";
162
+ readonly troubleshooting_gotcha: "surface";
163
+ readonly preference: "domain";
164
+ readonly ownership: "surface";
165
+ readonly session_index: "episode";
166
+ readonly episode: "episode";
167
+ readonly workstream: "workstream";
168
+ readonly runbook_candidate: "workstream";
169
+ readonly failure_mode: "workstream";
170
+ readonly convention: "domain";
171
+ readonly architecture_pattern: "domain";
172
+ readonly product_insight: "domain";
173
+ readonly recall_event: "memory_object";
174
+ readonly feedback_event: "memory_object";
175
+ readonly outcome_event: "memory_object";
176
+ readonly aggregate_rollup: "workspace";
177
+ };
178
+ export declare const SOURCES: {
179
+ readonly agent: {
180
+ readonly description: "Captured from an interactive agent tool call.";
181
+ };
182
+ readonly daemon: {
183
+ readonly description: "Captured automatically by the local Bikky daemon.";
184
+ };
185
+ readonly system: {
186
+ readonly description: "Generated by Bikky maintenance, migration, or lifecycle code.";
187
+ };
188
+ readonly user: {
189
+ readonly description: "Created or corrected directly by a user.";
190
+ };
191
+ readonly docs: {
192
+ readonly description: "Imported from documentation or explicit source material.";
193
+ };
194
+ };
195
+ export type Source = keyof typeof SOURCES;
196
+ export declare const DEFAULT_KIND: Kind;
197
+ export declare const DEFAULT_SOURCE: Source;
25
198
  export declare const STALENESS_DAYS = 30;
199
+ export declare const DECAY_DEFAULT_HALF_LIFE = 90;
26
200
  export declare const THRESHOLD_DUPLICATE = 0.92;
27
201
  export declare const THRESHOLD_RELATED = 0.8;
28
- export declare const QDRANT_INDEXES: QdrantIndex[];
29
- export declare const SOURCE_MIGRATION: Record<string, string>;
30
- export declare function normalizeCategory(cat: string): string;
31
- export declare function normalizeDomain(d: string | undefined): string;
32
- export declare function normalizeKind(k: string | undefined): string;
33
- export declare function normalizeSource(s: string | undefined): string;
34
- export declare const categoryValues: () => [string, ...string[]];
35
- export declare const domainValues: () => [string, ...string[]];
36
- export declare const kindValues: () => [string, ...string[]];
37
- export declare const sourceValues: () => [string, ...string[]];
202
+ export declare const DECAY_HALF_LIFE: Record<string, number>;
203
+ export declare const QDRANT_INDEXES: Array<{
204
+ field_name: string;
205
+ field_schema: string;
206
+ }>;
207
+ type NonEmptyStringArray = [string, ...string[]];
208
+ export declare function normalizeText(text: string): string;
209
+ export declare function normalizeCategory(category: string | null | undefined): Category;
210
+ export declare function normalizeDomain(domain: string | null | undefined): Domain;
211
+ export declare function normalizeKind(kind: string | null | undefined): Kind;
212
+ export declare function normalizeSource(source: string | null | undefined): Source;
213
+ export declare function normalizeLayer(layer: string | null | undefined): Layer | null;
214
+ export declare function normalizeMemorySubtype(kind: string | null | undefined, subtype: string | null | undefined): MemorySubtype | null;
215
+ export declare function validateMemorySubtype(kind: string | null | undefined, subtype: string | null | undefined): MemorySubtype | null;
216
+ export declare function defaultMemorySubtypeForKind(kind: string | null | undefined): MemorySubtype | null;
217
+ export declare function categoryForMemorySubtype(subtype: string | null | undefined): Category | null;
218
+ export declare function layerForMemorySubtype(subtype: string | null | undefined): Layer | null;
219
+ export declare function normalizeEntities(entities: string[]): string[];
220
+ export declare function inferEntities(content: string): string[];
221
+ export declare function getDecayHalfLife(input: {
222
+ category?: string | null;
223
+ domain?: string | null;
224
+ kind?: string | null;
225
+ }): number | null;
226
+ export declare function categoryValues(): NonEmptyStringArray;
227
+ export declare function canonicalCategoryValues(): NonEmptyStringArray;
228
+ export declare function domainValues(): NonEmptyStringArray;
229
+ export declare function canonicalDomainValues(): NonEmptyStringArray;
230
+ export declare function kindValues(): NonEmptyStringArray;
231
+ export declare function layerValues(): NonEmptyStringArray;
232
+ /**
233
+ * Render the documentation block for a single category — used inside LLM prompts
234
+ * so the model sees the same description and examples that taxonomy.ts declares
235
+ * as canonical. Keeps prompts and code in sync.
236
+ */
237
+ export declare function categoryPromptSection(category: string): string;
238
+ /** Render every category section back-to-back. */
239
+ export declare function allCategoryPromptSections(): string;
240
+ /** Render the `category` enum description for memory_store / memory_recall. */
241
+ export declare function categoryEnumDescription(): string;
242
+ /** Render the `domain` enum description. */
243
+ export declare function domainEnumDescription(): string;
244
+ /** Render the `kind` enum description. Telemetry is daemon-only — excluded. */
245
+ export declare function kindEnumDescription(): string;
246
+ /**
247
+ * Render the `memory_subtype` enum description, grouped by kind so the agent
248
+ * knows which subtypes pair with which kind (the runtime enforces this via
249
+ * validateMemorySubtype).
250
+ */
251
+ export declare function memorySubtypeEnumDescription(): string;
252
+ /** Render the `source` enum description for memory_store. */
253
+ export declare function sourceEnumDescription(): string;
254
+ export declare function memorySubtypeValues(): NonEmptyStringArray;
255
+ export declare function memorySubtypeValuesForKind(kind: string | null | undefined): string[];
256
+ export declare function sourceValues(): NonEmptyStringArray;
257
+ export {};
38
258
  //# sourceMappingURL=taxonomy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/mcp/taxonomy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIpE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAwDlD,CAAC;AAIF,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAG3C,CAAC;AAEF,eAAO,MAAM,cAAc,SAAS,CAAC;AAIrC,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAKzC,CAAC;AAEF,eAAO,MAAM,YAAY,SAAS,CAAC;AAInC,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAM3C,CAAC;AAEF,eAAO,MAAM,cAAc,UAAU,CAAC;AAgBtC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,GAAG,IAAI,CAehH;AAGD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWzD,CAAC;AAIF,eAAO,MAAM,cAAc,KAAK,CAAC;AAIjC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,iBAAiB,MAAO,CAAC;AAItC,eAAO,MAAM,cAAc,EAAE,WAAW,EAcvC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMnD,CAAC;AAIF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAcrD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ3D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO7D;AAID,eAAO,MAAM,cAAc,QAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CACJ,CAAC;AAEnD,eAAO,MAAM,YAAY,QAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CACL,CAAC;AAEhD,eAAO,MAAM,UAAU,QAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CACL,CAAC;AAE9C,eAAO,MAAM,YAAY,QAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CACL,CAAC"}
1
+ {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/mcp/taxonomy.ts"],"names":[],"mappings":"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"}