bikky 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/CODE_OF_CONDUCT.md +80 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +48 -14
  5. package/SECURITY.md +58 -0
  6. package/SUPPORT.md +23 -0
  7. package/dist/config.d.ts +19 -0
  8. package/dist/config.js +72 -0
  9. package/dist/daemon/extraction.d.ts +12 -2
  10. package/dist/daemon/extraction.js +85 -133
  11. package/dist/daemon/transcript-sources.d.ts +26 -0
  12. package/dist/daemon/transcript-sources.js +193 -0
  13. package/dist/daemon/watcher.d.ts +3 -2
  14. package/dist/daemon/watcher.js +51 -2
  15. package/dist/install.d.ts +9 -1
  16. package/dist/install.js +62 -34
  17. package/dist/mcp/api.d.ts +4 -3
  18. package/dist/mcp/api.js +4 -3
  19. package/dist/mcp/tools.js +317 -93
  20. package/dist/search-scope.d.ts +24 -0
  21. package/dist/search-scope.js +174 -0
  22. package/docs/config/fully-hosted.md +1 -1
  23. package/docs/config/hosted-models.md +1 -1
  24. package/docs/configuration.md +34 -5
  25. package/docs/privacy-first.md +140 -0
  26. package/package.json +27 -5
  27. package/dist/cli.d.ts.map +0 -1
  28. package/dist/cli.js.map +0 -1
  29. package/dist/config.d.ts.map +0 -1
  30. package/dist/config.js.map +0 -1
  31. package/dist/config.test.d.ts +0 -9
  32. package/dist/config.test.d.ts.map +0 -1
  33. package/dist/config.test.js +0 -576
  34. package/dist/config.test.js.map +0 -1
  35. package/dist/daemon/capture-policy.d.ts.map +0 -1
  36. package/dist/daemon/capture-policy.js.map +0 -1
  37. package/dist/daemon/capture-policy.test.d.ts +0 -2
  38. package/dist/daemon/capture-policy.test.d.ts.map +0 -1
  39. package/dist/daemon/capture-policy.test.js +0 -48
  40. package/dist/daemon/capture-policy.test.js.map +0 -1
  41. package/dist/daemon/consolidation.d.ts.map +0 -1
  42. package/dist/daemon/consolidation.js.map +0 -1
  43. package/dist/daemon/entity-typing.d.ts.map +0 -1
  44. package/dist/daemon/entity-typing.js.map +0 -1
  45. package/dist/daemon/entity-typing.test.d.ts +0 -2
  46. package/dist/daemon/entity-typing.test.d.ts.map +0 -1
  47. package/dist/daemon/entity-typing.test.js +0 -50
  48. package/dist/daemon/entity-typing.test.js.map +0 -1
  49. package/dist/daemon/episode-summary.d.ts.map +0 -1
  50. package/dist/daemon/episode-summary.js.map +0 -1
  51. package/dist/daemon/episode-summary.test.d.ts +0 -2
  52. package/dist/daemon/episode-summary.test.d.ts.map +0 -1
  53. package/dist/daemon/episode-summary.test.js +0 -104
  54. package/dist/daemon/episode-summary.test.js.map +0 -1
  55. package/dist/daemon/extraction-quality.test.d.ts +0 -2
  56. package/dist/daemon/extraction-quality.test.d.ts.map +0 -1
  57. package/dist/daemon/extraction-quality.test.js +0 -283
  58. package/dist/daemon/extraction-quality.test.js.map +0 -1
  59. package/dist/daemon/extraction-rules.d.ts.map +0 -1
  60. package/dist/daemon/extraction-rules.js.map +0 -1
  61. package/dist/daemon/extraction-rules.test.d.ts +0 -2
  62. package/dist/daemon/extraction-rules.test.d.ts.map +0 -1
  63. package/dist/daemon/extraction-rules.test.js +0 -203
  64. package/dist/daemon/extraction-rules.test.js.map +0 -1
  65. package/dist/daemon/extraction.d.ts.map +0 -1
  66. package/dist/daemon/extraction.js.map +0 -1
  67. package/dist/daemon/extraction.test.d.ts +0 -2
  68. package/dist/daemon/extraction.test.d.ts.map +0 -1
  69. package/dist/daemon/extraction.test.js +0 -225
  70. package/dist/daemon/extraction.test.js.map +0 -1
  71. package/dist/daemon/index.d.ts.map +0 -1
  72. package/dist/daemon/index.js.map +0 -1
  73. package/dist/daemon/loop.d.ts.map +0 -1
  74. package/dist/daemon/loop.js.map +0 -1
  75. package/dist/daemon/loop.test.d.ts +0 -2
  76. package/dist/daemon/loop.test.d.ts.map +0 -1
  77. package/dist/daemon/loop.test.js +0 -85
  78. package/dist/daemon/loop.test.js.map +0 -1
  79. package/dist/daemon/maintenance-state.d.ts.map +0 -1
  80. package/dist/daemon/maintenance-state.js.map +0 -1
  81. package/dist/daemon/maintenance-state.test.d.ts +0 -2
  82. package/dist/daemon/maintenance-state.test.d.ts.map +0 -1
  83. package/dist/daemon/maintenance-state.test.js +0 -56
  84. package/dist/daemon/maintenance-state.test.js.map +0 -1
  85. package/dist/daemon/qdrant.d.ts.map +0 -1
  86. package/dist/daemon/qdrant.js.map +0 -1
  87. package/dist/daemon/qdrant.test.d.ts +0 -8
  88. package/dist/daemon/qdrant.test.d.ts.map +0 -1
  89. package/dist/daemon/qdrant.test.js +0 -265
  90. package/dist/daemon/qdrant.test.js.map +0 -1
  91. package/dist/daemon/relations-vocab.d.ts.map +0 -1
  92. package/dist/daemon/relations-vocab.js.map +0 -1
  93. package/dist/daemon/relations-vocab.test.d.ts +0 -2
  94. package/dist/daemon/relations-vocab.test.d.ts.map +0 -1
  95. package/dist/daemon/relations-vocab.test.js +0 -69
  96. package/dist/daemon/relations-vocab.test.js.map +0 -1
  97. package/dist/daemon/relations.d.ts.map +0 -1
  98. package/dist/daemon/relations.js.map +0 -1
  99. package/dist/daemon/relations.test.d.ts +0 -2
  100. package/dist/daemon/relations.test.d.ts.map +0 -1
  101. package/dist/daemon/relations.test.js +0 -36
  102. package/dist/daemon/relations.test.js.map +0 -1
  103. package/dist/daemon/session-index.d.ts.map +0 -1
  104. package/dist/daemon/session-index.js.map +0 -1
  105. package/dist/daemon/session-index.test.d.ts +0 -2
  106. package/dist/daemon/session-index.test.d.ts.map +0 -1
  107. package/dist/daemon/session-index.test.js +0 -60
  108. package/dist/daemon/session-index.test.js.map +0 -1
  109. package/dist/daemon/session-summary.d.ts.map +0 -1
  110. package/dist/daemon/session-summary.js.map +0 -1
  111. package/dist/daemon/session-summary.test.d.ts +0 -2
  112. package/dist/daemon/session-summary.test.d.ts.map +0 -1
  113. package/dist/daemon/session-summary.test.js +0 -162
  114. package/dist/daemon/session-summary.test.js.map +0 -1
  115. package/dist/daemon/staleness.d.ts.map +0 -1
  116. package/dist/daemon/staleness.js.map +0 -1
  117. package/dist/daemon/staleness.test.d.ts +0 -7
  118. package/dist/daemon/staleness.test.d.ts.map +0 -1
  119. package/dist/daemon/staleness.test.js +0 -128
  120. package/dist/daemon/staleness.test.js.map +0 -1
  121. package/dist/daemon/watcher-health.d.ts.map +0 -1
  122. package/dist/daemon/watcher-health.js.map +0 -1
  123. package/dist/daemon/watcher-health.test.d.ts +0 -5
  124. package/dist/daemon/watcher-health.test.d.ts.map +0 -1
  125. package/dist/daemon/watcher-health.test.js +0 -119
  126. package/dist/daemon/watcher-health.test.js.map +0 -1
  127. package/dist/daemon/watcher.d.ts.map +0 -1
  128. package/dist/daemon/watcher.js.map +0 -1
  129. package/dist/daemon/watcher.test.d.ts +0 -9
  130. package/dist/daemon/watcher.test.d.ts.map +0 -1
  131. package/dist/daemon/watcher.test.js +0 -204
  132. package/dist/daemon/watcher.test.js.map +0 -1
  133. package/dist/daemon/workstream-resolver.d.ts.map +0 -1
  134. package/dist/daemon/workstream-resolver.js.map +0 -1
  135. package/dist/daemon/workstream-resolver.test.d.ts +0 -2
  136. package/dist/daemon/workstream-resolver.test.d.ts.map +0 -1
  137. package/dist/daemon/workstream-resolver.test.js +0 -128
  138. package/dist/daemon/workstream-resolver.test.js.map +0 -1
  139. package/dist/daemon/workstream-summary.d.ts.map +0 -1
  140. package/dist/daemon/workstream-summary.js.map +0 -1
  141. package/dist/daemon/workstream-summary.test.d.ts +0 -2
  142. package/dist/daemon/workstream-summary.test.d.ts.map +0 -1
  143. package/dist/daemon/workstream-summary.test.js +0 -89
  144. package/dist/daemon/workstream-summary.test.js.map +0 -1
  145. package/dist/install.d.ts.map +0 -1
  146. package/dist/install.js.map +0 -1
  147. package/dist/install.test.d.ts +0 -9
  148. package/dist/install.test.d.ts.map +0 -1
  149. package/dist/install.test.js +0 -126
  150. package/dist/install.test.js.map +0 -1
  151. package/dist/lib/qdrant-client.d.ts.map +0 -1
  152. package/dist/lib/qdrant-client.js.map +0 -1
  153. package/dist/lib/qdrant-client.test.d.ts +0 -8
  154. package/dist/lib/qdrant-client.test.d.ts.map +0 -1
  155. package/dist/lib/qdrant-client.test.js +0 -274
  156. package/dist/lib/qdrant-client.test.js.map +0 -1
  157. package/dist/lib/qdrant-pool.d.ts.map +0 -1
  158. package/dist/lib/qdrant-pool.js.map +0 -1
  159. package/dist/lifecycle.d.ts.map +0 -1
  160. package/dist/lifecycle.js.map +0 -1
  161. package/dist/lifecycle.test.d.ts +0 -8
  162. package/dist/lifecycle.test.d.ts.map +0 -1
  163. package/dist/lifecycle.test.js +0 -74
  164. package/dist/lifecycle.test.js.map +0 -1
  165. package/dist/llm/embedding/index.d.ts.map +0 -1
  166. package/dist/llm/embedding/index.js.map +0 -1
  167. package/dist/llm/embedding/index.test.d.ts +0 -8
  168. package/dist/llm/embedding/index.test.d.ts.map +0 -1
  169. package/dist/llm/embedding/index.test.js +0 -100
  170. package/dist/llm/embedding/index.test.js.map +0 -1
  171. package/dist/llm/embedding/providers/bedrock.d.ts.map +0 -1
  172. package/dist/llm/embedding/providers/bedrock.js.map +0 -1
  173. package/dist/llm/embedding/providers/bedrock.test.d.ts +0 -2
  174. package/dist/llm/embedding/providers/bedrock.test.d.ts.map +0 -1
  175. package/dist/llm/embedding/providers/bedrock.test.js +0 -24
  176. package/dist/llm/embedding/providers/bedrock.test.js.map +0 -1
  177. package/dist/llm/embedding/providers/index.d.ts.map +0 -1
  178. package/dist/llm/embedding/providers/index.js.map +0 -1
  179. package/dist/llm/embedding/providers/ollama.d.ts.map +0 -1
  180. package/dist/llm/embedding/providers/ollama.js.map +0 -1
  181. package/dist/llm/embedding/providers/ollama.test.d.ts +0 -2
  182. package/dist/llm/embedding/providers/ollama.test.d.ts.map +0 -1
  183. package/dist/llm/embedding/providers/ollama.test.js +0 -54
  184. package/dist/llm/embedding/providers/ollama.test.js.map +0 -1
  185. package/dist/llm/embedding/providers/openai.d.ts.map +0 -1
  186. package/dist/llm/embedding/providers/openai.js.map +0 -1
  187. package/dist/llm/embedding/providers/openai.test.d.ts +0 -2
  188. package/dist/llm/embedding/providers/openai.test.d.ts.map +0 -1
  189. package/dist/llm/embedding/providers/openai.test.js +0 -48
  190. package/dist/llm/embedding/providers/openai.test.js.map +0 -1
  191. package/dist/llm/embedding/providers/portkey.d.ts.map +0 -1
  192. package/dist/llm/embedding/providers/portkey.js.map +0 -1
  193. package/dist/llm/embedding/providers/portkey.test.d.ts +0 -2
  194. package/dist/llm/embedding/providers/portkey.test.d.ts.map +0 -1
  195. package/dist/llm/embedding/providers/portkey.test.js +0 -56
  196. package/dist/llm/embedding/providers/portkey.test.js.map +0 -1
  197. package/dist/llm/embedding/registry.d.ts.map +0 -1
  198. package/dist/llm/embedding/registry.js.map +0 -1
  199. package/dist/llm/embedding/registry.test.d.ts +0 -7
  200. package/dist/llm/embedding/registry.test.d.ts.map +0 -1
  201. package/dist/llm/embedding/registry.test.js +0 -68
  202. package/dist/llm/embedding/registry.test.js.map +0 -1
  203. package/dist/llm/embedding/types.d.ts.map +0 -1
  204. package/dist/llm/embedding/types.js.map +0 -1
  205. package/dist/llm/errors.d.ts.map +0 -1
  206. package/dist/llm/errors.js.map +0 -1
  207. package/dist/llm/errors.test.d.ts +0 -2
  208. package/dist/llm/errors.test.d.ts.map +0 -1
  209. package/dist/llm/errors.test.js +0 -103
  210. package/dist/llm/errors.test.js.map +0 -1
  211. package/dist/llm/fetch.d.ts.map +0 -1
  212. package/dist/llm/fetch.js.map +0 -1
  213. package/dist/llm/index.d.ts.map +0 -1
  214. package/dist/llm/index.js.map +0 -1
  215. package/dist/llm/inference/index.d.ts.map +0 -1
  216. package/dist/llm/inference/index.js.map +0 -1
  217. package/dist/llm/inference/index.test.d.ts +0 -6
  218. package/dist/llm/inference/index.test.d.ts.map +0 -1
  219. package/dist/llm/inference/index.test.js +0 -150
  220. package/dist/llm/inference/index.test.js.map +0 -1
  221. package/dist/llm/inference/providers/bedrock.d.ts.map +0 -1
  222. package/dist/llm/inference/providers/bedrock.js.map +0 -1
  223. package/dist/llm/inference/providers/bedrock.test.d.ts +0 -2
  224. package/dist/llm/inference/providers/bedrock.test.d.ts.map +0 -1
  225. package/dist/llm/inference/providers/bedrock.test.js +0 -68
  226. package/dist/llm/inference/providers/bedrock.test.js.map +0 -1
  227. package/dist/llm/inference/providers/index.d.ts.map +0 -1
  228. package/dist/llm/inference/providers/index.js.map +0 -1
  229. package/dist/llm/inference/providers/ollama.d.ts.map +0 -1
  230. package/dist/llm/inference/providers/ollama.js.map +0 -1
  231. package/dist/llm/inference/providers/ollama.test.d.ts +0 -2
  232. package/dist/llm/inference/providers/ollama.test.d.ts.map +0 -1
  233. package/dist/llm/inference/providers/ollama.test.js +0 -57
  234. package/dist/llm/inference/providers/ollama.test.js.map +0 -1
  235. package/dist/llm/inference/providers/openai.d.ts.map +0 -1
  236. package/dist/llm/inference/providers/openai.js.map +0 -1
  237. package/dist/llm/inference/providers/openai.test.d.ts +0 -2
  238. package/dist/llm/inference/providers/openai.test.d.ts.map +0 -1
  239. package/dist/llm/inference/providers/openai.test.js +0 -82
  240. package/dist/llm/inference/providers/openai.test.js.map +0 -1
  241. package/dist/llm/inference/providers/portkey.d.ts.map +0 -1
  242. package/dist/llm/inference/providers/portkey.js.map +0 -1
  243. package/dist/llm/inference/providers/portkey.test.d.ts +0 -2
  244. package/dist/llm/inference/providers/portkey.test.d.ts.map +0 -1
  245. package/dist/llm/inference/providers/portkey.test.js +0 -48
  246. package/dist/llm/inference/providers/portkey.test.js.map +0 -1
  247. package/dist/llm/inference/registry.d.ts.map +0 -1
  248. package/dist/llm/inference/registry.js.map +0 -1
  249. package/dist/llm/inference/registry.test.d.ts +0 -6
  250. package/dist/llm/inference/registry.test.d.ts.map +0 -1
  251. package/dist/llm/inference/registry.test.js +0 -63
  252. package/dist/llm/inference/registry.test.js.map +0 -1
  253. package/dist/llm/inference/types.d.ts.map +0 -1
  254. package/dist/llm/inference/types.js.map +0 -1
  255. package/dist/llm/telemetry.d.ts.map +0 -1
  256. package/dist/llm/telemetry.js.map +0 -1
  257. package/dist/llm/telemetry.test.d.ts +0 -5
  258. package/dist/llm/telemetry.test.d.ts.map +0 -1
  259. package/dist/llm/telemetry.test.js +0 -89
  260. package/dist/llm/telemetry.test.js.map +0 -1
  261. package/dist/llm/types.d.ts.map +0 -1
  262. package/dist/llm/types.js.map +0 -1
  263. package/dist/logger.d.ts.map +0 -1
  264. package/dist/logger.js.map +0 -1
  265. package/dist/logger.test.d.ts +0 -5
  266. package/dist/logger.test.d.ts.map +0 -1
  267. package/dist/logger.test.js +0 -103
  268. package/dist/logger.test.js.map +0 -1
  269. package/dist/mcp/api.d.ts.map +0 -1
  270. package/dist/mcp/api.js.map +0 -1
  271. package/dist/mcp/helpers.d.ts.map +0 -1
  272. package/dist/mcp/helpers.js.map +0 -1
  273. package/dist/mcp/helpers.test.d.ts +0 -5
  274. package/dist/mcp/helpers.test.d.ts.map +0 -1
  275. package/dist/mcp/helpers.test.js +0 -530
  276. package/dist/mcp/helpers.test.js.map +0 -1
  277. package/dist/mcp/index.d.ts.map +0 -1
  278. package/dist/mcp/index.js.map +0 -1
  279. package/dist/mcp/taxonomy.d.ts.map +0 -1
  280. package/dist/mcp/taxonomy.js.map +0 -1
  281. package/dist/mcp/taxonomy.test.d.ts +0 -5
  282. package/dist/mcp/taxonomy.test.d.ts.map +0 -1
  283. package/dist/mcp/taxonomy.test.js +0 -215
  284. package/dist/mcp/taxonomy.test.js.map +0 -1
  285. package/dist/mcp/tools.d.ts.map +0 -1
  286. package/dist/mcp/tools.js.map +0 -1
  287. package/dist/mcp/types.d.ts.map +0 -1
  288. package/dist/mcp/types.js.map +0 -1
  289. package/dist/postinstall.d.ts.map +0 -1
  290. package/dist/postinstall.js.map +0 -1
  291. package/dist/privacy/redaction.d.ts.map +0 -1
  292. package/dist/privacy/redaction.js.map +0 -1
  293. package/dist/privacy/redaction.test.d.ts +0 -2
  294. package/dist/privacy/redaction.test.d.ts.map +0 -1
  295. package/dist/privacy/redaction.test.js +0 -51
  296. package/dist/privacy/redaction.test.js.map +0 -1
  297. package/dist/prompts/brief.d.ts.map +0 -1
  298. package/dist/prompts/brief.js.map +0 -1
  299. package/dist/prompts/contradiction.d.ts.map +0 -1
  300. package/dist/prompts/contradiction.js.map +0 -1
  301. package/dist/prompts/distill.d.ts.map +0 -1
  302. package/dist/prompts/distill.js.map +0 -1
  303. package/dist/prompts/entity-typing.d.ts.map +0 -1
  304. package/dist/prompts/entity-typing.js.map +0 -1
  305. package/dist/prompts/episode-summary.d.ts.map +0 -1
  306. package/dist/prompts/episode-summary.js.map +0 -1
  307. package/dist/prompts/extraction.d.ts.map +0 -1
  308. package/dist/prompts/extraction.js.map +0 -1
  309. package/dist/prompts/index.d.ts.map +0 -1
  310. package/dist/prompts/index.js.map +0 -1
  311. package/dist/prompts/prompts.test.d.ts +0 -8
  312. package/dist/prompts/prompts.test.d.ts.map +0 -1
  313. package/dist/prompts/prompts.test.js +0 -140
  314. package/dist/prompts/prompts.test.js.map +0 -1
  315. package/dist/prompts/relations.d.ts.map +0 -1
  316. package/dist/prompts/relations.js.map +0 -1
  317. package/dist/prompts/workstream-summary.d.ts.map +0 -1
  318. package/dist/prompts/workstream-summary.js.map +0 -1
  319. package/dist/provenance/actor.d.ts.map +0 -1
  320. package/dist/provenance/actor.js.map +0 -1
  321. package/dist/provenance/actor.test.d.ts +0 -2
  322. package/dist/provenance/actor.test.d.ts.map +0 -1
  323. package/dist/provenance/actor.test.js +0 -49
  324. package/dist/provenance/actor.test.js.map +0 -1
  325. package/dist/render.d.ts.map +0 -1
  326. package/dist/render.js.map +0 -1
  327. package/dist/render.test.d.ts +0 -8
  328. package/dist/render.test.d.ts.map +0 -1
  329. package/dist/render.test.js +0 -244
  330. package/dist/render.test.js.map +0 -1
  331. package/dist/routing.d.ts.map +0 -1
  332. package/dist/routing.js.map +0 -1
  333. package/dist/routing.test.d.ts +0 -2
  334. package/dist/routing.test.d.ts.map +0 -1
  335. package/dist/routing.test.js +0 -79
  336. package/dist/routing.test.js.map +0 -1
  337. package/dist/status.d.ts.map +0 -1
  338. package/dist/status.js.map +0 -1
  339. package/dist/status.test.d.ts +0 -5
  340. package/dist/status.test.d.ts.map +0 -1
  341. package/dist/status.test.js +0 -203
  342. package/dist/status.test.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,26 @@
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
+ ## 0.4.2
13
+
14
+ - Republished the core package from current `main` so the npm package README uses GitHub documentation links instead of stale jsDelivr links.
15
+
16
+ ## 0.4.1
17
+
18
+ - Public OSS readiness cleanup: package metadata, support docs, public maintainer ownership, package tarball hygiene, and privacy/transcript-capture documentation.
19
+ - Added package verification CI and a privacy-first quickstart for local storage/local model setups.
20
+
21
+ ## 0.4.0
22
+
23
+ - Added multi-destination Qdrant routing and configurable read/search scopes.
24
+ - Added Claude Code user-scoped MCP setup support.
25
+ - Added Claude Code transcript ingestion for daemon memory extraction.
26
+ - 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
+ 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 CHANGED
@@ -59,7 +59,7 @@ We aim for **focused, fast unit tests** that lock in behaviour without being a m
59
59
 
60
60
  We deliberately **do not** test:
61
61
 
62
- - LLM prompt quality or extraction accuracy. Those live in the separate [`bikky-evals`](https://github.com/bikky-dev/bikky-evals) repo, which uses DeepEval for prompt-level scoring.
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
63
  - Implementation details (private function internals, exact log strings) — these change often and tests that pin them slow contributors down.
64
64
  - The React frontend — the testable surface there is small; we rely on type-checking and manual smoke tests.
65
65
 
@@ -199,7 +199,7 @@ Configure a fallback chain via `llm.fallback_provider` in config (or
199
199
 
200
200
  ## License
201
201
 
202
- By contributing, you agree that your contributions will be licensed under the project's [AGPL-3.0-or-later](LICENSE) license.
202
+ By contributing, you agree that your contributions will be licensed under the project's [AGPL-3.0-or-later](https://github.com/bikky-dev/bikky/blob/main/LICENSE) license.
203
203
 
204
204
  ## Code of conduct
205
205
 
package/README.md CHANGED
@@ -10,7 +10,7 @@ bikky gives AI coding agents (GitHub Copilot, Claude Code, Cursor, and other MCP
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 shared across your team" width="720" />
13
+ <img src="https://raw.githubusercontent.com/bikky-dev/bikky/main/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
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>
@@ -77,6 +77,8 @@ JSON
77
77
  bikky setup # writes MCP config for Copilot + Claude Code, then starts the daemon
78
78
  ```
79
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
+
80
82
  Restart your editor. The memory tools appear automatically in supported MCP clients.
81
83
 
82
84
  ```bash
@@ -130,6 +132,8 @@ For hosted models, custom providers, multiple profiles, or advanced tuning, use
130
132
 
131
133
  > 📖 **Full configuration guide:** [docs/configuration.md][configuration-guide]
132
134
  >
135
+ > 🔒 **Privacy-first setup:** [local storage, local models, and transcript-capture controls][privacy-quickstart]
136
+ >
133
137
  > 🛠 Want to add a new embedding or LLM provider (Vertex, OpenRouter, etc.)? See **[CONTRIBUTING.md][contributing]** — it's a single-file change.
134
138
 
135
139
  #### Optional: separate memory stores
@@ -141,6 +145,7 @@ Most installs use one Qdrant destination. If you need clean separation later, re
141
145
  "destinations": [
142
146
  {
143
147
  "name": "platform",
148
+ "description": "Shared platform engineering memory.",
144
149
  "qdrant_url": "https://platform.cloud.qdrant.io:6333",
145
150
  "qdrant_api_key": "...",
146
151
  "collection": "bikky-platform",
@@ -148,24 +153,27 @@ Most installs use one Qdrant destination. If you need clean separation later, re
148
153
  },
149
154
  {
150
155
  "name": "client-a",
156
+ "description": "Client A project memory.",
151
157
  "qdrant_url": "https://client-a.cloud.qdrant.io:6333",
152
158
  "qdrant_api_key": "...",
153
159
  "collection": "bikky-client-a"
154
160
  }
155
- ]
161
+ ],
162
+ "default_search_scope": "routed"
156
163
  }
157
164
  ```
158
165
 
159
- 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. Existing single-Qdrant configs continue to work.
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.
160
167
 
161
- > 📖 **Details:** [multi-destination configuration](docs/configuration.md#multi-destination-routing)
168
+ > 📖 **Details:** [multi-destination configuration](https://github.com/bikky-dev/bikky/blob/main/docs/configuration.md#multi-destination-routing)
162
169
 
163
- [fully-hosted-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/fully-hosted.md
164
- [hosted-models-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/hosted-models.md
165
- [local-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/local.md
166
- [hosted-qdrant-local-models-config]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/config/hosted-qdrant-local-models.md
167
- [configuration-guide]: https://cdn.jsdelivr.net/npm/bikky@latest/docs/configuration.md
168
- [contributing]: https://cdn.jsdelivr.net/npm/bikky@latest/CONTRIBUTING.md
170
+ [fully-hosted-config]: https://github.com/bikky-dev/bikky/blob/main/docs/config/fully-hosted.md
171
+ [hosted-models-config]: https://github.com/bikky-dev/bikky/blob/main/docs/config/hosted-models.md
172
+ [local-config]: https://github.com/bikky-dev/bikky/blob/main/docs/config/local.md
173
+ [hosted-qdrant-local-models-config]: https://github.com/bikky-dev/bikky/blob/main/docs/config/hosted-qdrant-local-models.md
174
+ [configuration-guide]: https://github.com/bikky-dev/bikky/blob/main/docs/configuration.md
175
+ [privacy-quickstart]: https://github.com/bikky-dev/bikky/blob/main/docs/privacy-first.md
176
+ [contributing]: https://github.com/bikky-dev/bikky/blob/main/CONTRIBUTING.md
169
177
 
170
178
  ---
171
179
 
@@ -181,17 +189,17 @@ bikky-ui # opens http://localhost:1422
181
189
  ```
182
190
 
183
191
  <p align="center">
184
- <img src="docs/screenshots/dashboard.png" alt="Dashboard — overview stats, category breakdown, recent facts" width="720" />
192
+ <img src="https://raw.githubusercontent.com/bikky-dev/bikky/main/docs/screenshots/dashboard.png" alt="Dashboard — overview stats, category breakdown, recent facts" width="720" />
185
193
  </p>
186
194
  <p align="center"><i>Dashboard — memory stats, category breakdown, and recent facts at a glance</i></p>
187
195
 
188
196
  <p align="center">
189
- <img src="docs/screenshots/memory.png" alt="Memory browser — search, filter, and browse all stored facts" width="720" />
197
+ <img src="https://raw.githubusercontent.com/bikky-dev/bikky/main/docs/screenshots/memory.png" alt="Memory browser — search, filter, and browse all stored facts" width="720" />
190
198
  </p>
191
199
  <p align="center"><i>Memory browser — search, filter by category/kind/source, and browse all stored facts</i></p>
192
200
 
193
201
  <p align="center">
194
- <img src="docs/screenshots/graph.png" alt="Entity graph — interactive visualization of entity relationships" width="720" />
202
+ <img src="https://raw.githubusercontent.com/bikky-dev/bikky/main/docs/screenshots/graph.png" alt="Entity graph — interactive visualization of entity relationships" width="720" />
195
203
  </p>
196
204
  <p align="center"><i>Entity graph — interactive visualization of how concepts, people, and services relate</i></p>
197
205
 
@@ -212,6 +220,32 @@ bikky render # render a prompt to JSON (for eval harnesses & debugging)
212
220
 
213
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.
214
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
+
245
+ ## Support and contact
246
+
247
+ For questions, bugs, and feature requests, please use [GitHub issues](https://github.com/bikky-dev/bikky/issues). For maintainer contact, reach Saber Zrelli on GitHub: [@zrelli-s](https://github.com/zrelli-s).
248
+
215
249
  ## License
216
250
 
217
- AGPL-3.0 — see [LICENSE](LICENSE).
251
+ AGPL-3.0 — see [LICENSE](https://github.com/bikky-dev/bikky/blob/main/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,23 @@
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
+ For maintainer contact, reach Saber Zrelli on GitHub: [@zrelli-s](https://github.com/zrelli-s).
16
+
17
+ ## Bugs
18
+
19
+ 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.
20
+
21
+ ## Security reports
22
+
23
+ Do not open a public issue for vulnerabilities. Follow [SECURITY.md](https://github.com/bikky-dev/bikky/blob/main/SECURITY.md) and use GitHub private vulnerability reporting.
package/dist/config.d.ts CHANGED
@@ -95,6 +95,8 @@ export interface DestinationMatch {
95
95
  export interface Destination {
96
96
  /** Stable, unique name. Used as the `destination` override on tool calls. */
97
97
  name: string;
98
+ /** Human-readable guidance for LLMs/users about when to use this destination. */
99
+ description?: string;
98
100
  qdrant_url: string;
99
101
  qdrant_api_key: string | null;
100
102
  collection: string;
@@ -103,6 +105,15 @@ export interface Destination {
103
105
  /** Routing rules. Omit for a destination that is only reachable by override. */
104
106
  match?: DestinationMatch;
105
107
  }
108
+ export type SearchScopeTarget = "routed" | "all" | string | string[];
109
+ export interface SearchScopeDefinition {
110
+ /** Stable scope name that MCP clients can pass as `search_scope`. */
111
+ name: string;
112
+ /** Guidance for LLMs/users about when this scope should be used. */
113
+ description: string;
114
+ /** Destination selector: "routed", "all", a destination name, or destination names. */
115
+ destinations: SearchScopeTarget;
116
+ }
106
117
  export interface BikkyConfig {
107
118
  /**
108
119
  * Top-level Qdrant fields. When `destinations` is empty, a single default
@@ -118,6 +129,14 @@ export interface BikkyConfig {
118
129
  * default flag → first entry.
119
130
  */
120
131
  destinations: Destination[];
132
+ /**
133
+ * Default read/search scope. "routed" preserves historical behavior
134
+ * (one destination via routing rules); "all" fans out to every destination;
135
+ * a destination name or list searches only those destinations.
136
+ */
137
+ default_search_scope: SearchScopeTarget;
138
+ /** Optional named search scopes exposed to MCP clients with descriptions. */
139
+ search_scopes: SearchScopeDefinition[];
121
140
  aws_profile: string | null;
122
141
  embedding: EmbeddingConfig;
123
142
  llm: LLMConfig;
package/dist/config.js CHANGED
@@ -29,6 +29,8 @@ const DEFAULTS = {
29
29
  qdrant_api_key: null,
30
30
  collection: "bikky",
31
31
  destinations: [],
32
+ default_search_scope: "routed",
33
+ search_scopes: [],
32
34
  aws_profile: null,
33
35
  embedding: {
34
36
  provider: "ollama",
@@ -185,17 +187,29 @@ const destinationMatchSchema = z.object({
185
187
  }).passthrough();
186
188
  const destinationFileSchema = z.object({
187
189
  name: z.string().min(1),
190
+ description: z.string().optional(),
188
191
  qdrant_url: z.string().min(1),
189
192
  qdrant_api_key: z.string().nullable().optional(),
190
193
  collection: z.string().min(1),
191
194
  default: z.boolean().optional(),
192
195
  match: destinationMatchSchema.optional(),
193
196
  }).passthrough();
197
+ const searchScopeTargetSchema = z.union([
198
+ z.string().min(1),
199
+ z.array(z.string().min(1)).min(1),
200
+ ]);
201
+ const searchScopeDefinitionFileSchema = z.object({
202
+ name: z.string().min(1),
203
+ description: z.string().min(1),
204
+ destinations: searchScopeTargetSchema,
205
+ }).passthrough();
194
206
  const configFileSchema = z.object({
195
207
  qdrant_url: z.string().nullable().optional(),
196
208
  qdrant_api_key: z.string().nullable().optional(),
197
209
  collection: z.string().optional(),
198
210
  destinations: z.array(destinationFileSchema).optional(),
211
+ default_search_scope: searchScopeTargetSchema.optional(),
212
+ search_scopes: z.array(searchScopeDefinitionFileSchema).optional(),
199
213
  aws_profile: z.string().nullable().optional(),
200
214
  embedding: embeddingConfigFileSchema.optional(),
201
215
  llm: llmConfigFileSchema.optional(),
@@ -363,6 +377,63 @@ export function validateConfigObject(raw) {
363
377
  issues.push({ severity: "error", path: "destinations", message: `at most one destination may set 'default: true' (found ${defaultCount})` });
364
378
  }
365
379
  }
380
+ const destinationNames = new Set();
381
+ if (Array.isArray(raw.destinations)) {
382
+ for (const entry of raw.destinations) {
383
+ if (isObject(entry) && typeof entry.name === "string" && entry.name.trim() !== "") {
384
+ destinationNames.add(entry.name);
385
+ }
386
+ }
387
+ }
388
+ const searchScopeNames = new Set();
389
+ if (Array.isArray(raw.search_scopes)) {
390
+ for (const entry of raw.search_scopes) {
391
+ if (isObject(entry) && typeof entry.name === "string" && entry.name.trim() !== "") {
392
+ searchScopeNames.add(entry.name);
393
+ }
394
+ }
395
+ }
396
+ const validateSearchScopeTarget = (target, pathName) => {
397
+ const values = Array.isArray(target) ? target : [target];
398
+ for (const [idx, value] of values.entries()) {
399
+ const valuePath = Array.isArray(target) ? `${pathName}[${idx}]` : pathName;
400
+ if (typeof value !== "string" || value.trim() === "")
401
+ continue;
402
+ const normalized = value.trim();
403
+ if (normalized === "all" || normalized === "routed" || destinationNames.size === 0)
404
+ continue;
405
+ if (searchScopeNames.has(normalized))
406
+ continue;
407
+ if (!destinationNames.has(normalized)) {
408
+ issues.push({
409
+ severity: "warning",
410
+ path: valuePath,
411
+ message: `references unknown destination '${normalized}'`,
412
+ });
413
+ }
414
+ }
415
+ };
416
+ if (Object.prototype.hasOwnProperty.call(raw, "default_search_scope")) {
417
+ validateSearchScopeTarget(raw.default_search_scope, "default_search_scope");
418
+ }
419
+ if (Array.isArray(raw.search_scopes)) {
420
+ const seenScopeNames = new Set();
421
+ raw.search_scopes.forEach((entry, idx) => {
422
+ const base = `search_scopes[${idx}]`;
423
+ if (!isObject(entry)) {
424
+ issues.push({ severity: "error", path: base, message: "must be an object" });
425
+ return;
426
+ }
427
+ const name = entry.name;
428
+ if (typeof name === "string" && name.trim() !== "") {
429
+ if (seenScopeNames.has(name)) {
430
+ issues.push({ severity: "error", path: `${base}.name`, message: `duplicate search scope name '${name}'` });
431
+ }
432
+ seenScopeNames.add(name);
433
+ }
434
+ validateSearchScopeTarget(entry.destinations, `${base}.destinations`);
435
+ });
436
+ }
366
437
  const embedding = childObject(raw, "embedding");
367
438
  if (embedding)
368
439
  validateUrlLike(embedding.base_url, "embedding.base_url", issues);
@@ -599,6 +670,7 @@ export function getEffectiveDestinations(config = loadConfig()) {
599
670
  return [];
600
671
  return [{
601
672
  name: "default",
673
+ description: "Default Qdrant destination synthesized from the top-level qdrant_url, qdrant_api_key, and collection settings.",
602
674
  qdrant_url: config.qdrant_url,
603
675
  qdrant_api_key: config.qdrant_api_key,
604
676
  collection: config.collection,
@@ -1,12 +1,14 @@
1
1
  /**
2
- * Events-based memory extraction — reads Copilot CLI events.jsonl transcripts,
2
+ * Events-based memory extraction — reads supported coding-agent transcripts,
3
3
  * extracts facts via LLM, and stores them in Qdrant with source: "system".
4
4
  *
5
5
  * Uses a JSON file for extraction state (high-water byte offsets) instead of SQLite.
6
- * Active session detection scans ~/.copilot/session-state/ for lock files.
6
+ * Copilot session detection uses lock files. Claude Code detection uses
7
+ * top-level JSONL transcripts under ~/.claude/projects.
7
8
  */
8
9
  import type { BikkyConfig } from "../config.js";
9
10
  import type { LogFn } from "./qdrant.js";
11
+ import { type TranscriptSource } from "./transcript-sources.js";
10
12
  export declare const setLogger: (fn: LogFn) => void;
11
13
  export declare const DEFAULT_EXTRACTION_PROMPT = "You are Bikky's memory extraction agent for open-source coding agents. Extract durable, reusable facts that help a future agent continue work without rereading the whole transcript.\n\n## Core rule\nExtract fewer, sharper memories. A candidate fact must be independently useful after the session is gone.\n\n## Quality gate\nEvery fact must pass at least one gate:\n1. GREPPABLE: names a file path, package, symbol, config key, CLI flag, issue/PR, service, or API a future agent can search for.\n2. RUNNABLE: contains a command, URL, setting, port, or procedure that can be executed or checked.\n3. NAVIGABLE: tells a future agent where to look and what that location means.\n4. DECISIVE: records a durable decision, rationale, constraint, convention, or preference.\n5. DIAGNOSTIC: captures a repeatable failure mode, root cause, or troubleshooting gotcha.\n\n## Ontology\n- domain is the activity profile. For coding-agent captures use \"software_engineering\".\n- category is subject matter: engineering | product | human | system.\n- kind is object shape. For this prompt, emit only kind=\"fact\".\n- memory_subtype must be one of:\n codebase_map | architecture_decision | infra_topology | access_pattern | operational_procedure | domain_rule | product_decision | product_requirement | user_workflow | roadmap_item | success_metric | market_insight | troubleshooting_gotcha | preference | person_profile | ownership_note | working_agreement | activity_event.\n\n## Examples\nGOOD:\n- \"The UI smoke tests live in packages/ui/tests/smoke.spec.ts and run through npm run test:e2e with mocked /api/memory/* responses.\"\n- \"Use workspace_id as the tenancy/access boundary; domain is reserved for activity profile such as software_engineering.\"\n- \"If Qdrant order_by fails with a missing index error, create a datetime payload index for the sorted field before retrying.\"\n- \"The memory page should show categories and concrete subtype chips directly; a sub-tab layer makes the ontology harder to understand.\"\n- \"Saber prefers Node's built-in test runner for root tests; do not add Jest just for daemon unit tests.\"\n- \"Saber merged PR #85 after approving the subtype UX copy changes.\"\n\nBAD:\n- \"The tests were fixed.\" (status only)\n- \"We reviewed the code.\" (session narration)\n- \"The deployment succeeded.\" (transient and not reusable)\n- \"The agent used npm.\" (tool narration)\n- \"There was an error.\" (no root cause or reusable detail)\n\n## Output format\nReturn strict JSON:\n{\"facts\":[\n {\n \"content\":\"One self-contained durable fact.\",\n \"category\":\"engineering\",\n \"memory_subtype\":\"codebase_map\",\n \"action_actor\":\"optional actor for activity_event only\",\n \"action_type\":\"optional action verb for activity_event only\",\n \"action_object\":\"optional durable object for activity_event only\",\n \"action_outcome\":\"optional durable outcome for activity_event only\",\n \"entities\":[\"repo-or-tool\",\"specific-module\"],\n \"confidence\":0.9,\n \"importance\":0.7,\n \"quality_score\":0.8,\n \"confidence_reason\":\"Explicitly stated in the transcript.\",\n \"repo\":\"optional/repo-or-package\",\n \"branch\":\"optional-branch\",\n \"task_key\":\"optional issue/PR/task key\",\n \"workstream_key\":\"optional stable workstream key\"\n }\n]}\n\nScoring:\n- confidence: 0.9 explicit, 0.7 strong inference, 0.55 weak but useful inference.\n- importance: 0.8+ for decisions, infra, procedures, access, recurring failures, product requirements, ownership, and state-changing activity events; 0.6+ for useful codebase maps/preferences.\n- quality_score: 0.8+ passes multiple gates, 0.6+ passes one strong gate, below 0.6 should usually be omitted.\n\nIf nothing passes the quality gate, return {\"facts\":[]}.";
12
14
  export type Volatility = "stable" | "evolving" | "transient" | "ephemeral";
@@ -60,5 +62,13 @@ export interface ExtractionHealth {
60
62
  active_session_count: number;
61
63
  /** Configured copilot watcher path at the time of the tick. */
62
64
  watcher_path: string;
65
+ /** Per-source health, including non-Copilot watchers. */
66
+ sources?: Record<TranscriptSource, ExtractionSourceHealth>;
67
+ }
68
+ export interface ExtractionSourceHealth {
69
+ enabled: boolean;
70
+ watcher_path: string;
71
+ active_session_count: number;
72
+ last_active_session_at: string | null;
63
73
  }
64
74
  //# sourceMappingURL=extraction.d.ts.map