a-memory 1.7.0__py3-none-any.whl

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.

Potentially problematic release.


This version of a-memory might be problematic. Click here for more details.

Files changed (550) hide show
  1. .ai-memory.toml +21 -0
  2. .claude/CLAUDE.md +109 -0
  3. .codegraph/.gitignore +5 -0
  4. .coderabbit.yaml +43 -0
  5. .cursorrules +0 -0
  6. .dockerignore +19 -0
  7. .gitattributes +22 -0
  8. .github/CODEOWNERS +11 -0
  9. .github/ISSUE_TEMPLATE/bug_report.yml +109 -0
  10. .github/ISSUE_TEMPLATE/config.yml +8 -0
  11. .github/ISSUE_TEMPLATE/feature_request.yml +54 -0
  12. .github/PULL_REQUEST_TEMPLATE.md +19 -0
  13. .github/codeql-config.yml +14 -0
  14. .github/coderabbit.yaml +7 -0
  15. .github/dependabot.yml +11 -0
  16. .github/labeler.yml +25 -0
  17. .github/release-drafter.yml +81 -0
  18. .github/release.yml +22 -0
  19. .github/workflows/auto-label.yml +20 -0
  20. .github/workflows/auto-merge-dependabot.yml +28 -0
  21. .github/workflows/ci.yml +130 -0
  22. .github/workflows/commit-lint.yml +25 -0
  23. .github/workflows/detect-secrets.yml +24 -0
  24. .github/workflows/docs.yml +46 -0
  25. .github/workflows/release-drafter.yml +22 -0
  26. .github/workflows/release.yml +34 -0
  27. .github/workflows/stale.yml +27 -0
  28. .gitignore +26 -0
  29. .hypothesis/.gitignore +9 -0
  30. .hypothesis/constants/0131918d5eaf61a7 +4 -0
  31. .hypothesis/constants/0217e1bf038fb749 +4 -0
  32. .hypothesis/constants/025685350222e199 +4 -0
  33. .hypothesis/constants/08df5bce2c067c67 +4 -0
  34. .hypothesis/constants/0d08164cc62ee81e +4 -0
  35. .hypothesis/constants/0d271cf9a853088f +4 -0
  36. .hypothesis/constants/0f3739f6a4bbceb3 +4 -0
  37. .hypothesis/constants/0f62f670d7d4556a +4 -0
  38. .hypothesis/constants/106fec097b637479 +4 -0
  39. .hypothesis/constants/1176a493ab7e441f +4 -0
  40. .hypothesis/constants/11a7f35b73b355d5 +4 -0
  41. .hypothesis/constants/17f994f04fca849d +4 -0
  42. .hypothesis/constants/185eaa1e42d08ff6 +4 -0
  43. .hypothesis/constants/189966a34e8bb83c +4 -0
  44. .hypothesis/constants/19674fb7b6e7fa25 +4 -0
  45. .hypothesis/constants/1a01b68ac676293a +4 -0
  46. .hypothesis/constants/1bf1ed0c3b1b2cf2 +4 -0
  47. .hypothesis/constants/1d15d5b976b2e007 +4 -0
  48. .hypothesis/constants/1ec990d09f06e8d9 +4 -0
  49. .hypothesis/constants/203497fc60177f0f +4 -0
  50. .hypothesis/constants/2075c0643eaa44c8 +4 -0
  51. .hypothesis/constants/211c68beb3822a01 +4 -0
  52. .hypothesis/constants/216d171530673e64 +4 -0
  53. .hypothesis/constants/21f42bb6b24338d5 +4 -0
  54. .hypothesis/constants/22f64a08a03d6fea +4 -0
  55. .hypothesis/constants/2713c3dcbfed8a65 +4 -0
  56. .hypothesis/constants/29e7f9bd76ba7954 +4 -0
  57. .hypothesis/constants/2a48faca228fb8b8 +4 -0
  58. .hypothesis/constants/2a720bdb9bcc758b +4 -0
  59. .hypothesis/constants/2a7d3223dfdacdc7 +4 -0
  60. .hypothesis/constants/2ab4878d9f8c321b +4 -0
  61. .hypothesis/constants/2dddcac69bb1261c +4 -0
  62. .hypothesis/constants/2e7ce396a7f9318d +4 -0
  63. .hypothesis/constants/31e48df20d82b835 +4 -0
  64. .hypothesis/constants/366007179f98843a +4 -0
  65. .hypothesis/constants/371b663ed83124ce +4 -0
  66. .hypothesis/constants/377b6e3a8331b432 +4 -0
  67. .hypothesis/constants/3797923938187bee +4 -0
  68. .hypothesis/constants/3799169d4dc29413 +4 -0
  69. .hypothesis/constants/3885295d020f5d92 +4 -0
  70. .hypothesis/constants/39007a22b040288b +4 -0
  71. .hypothesis/constants/39e3ef3d3b0df762 +4 -0
  72. .hypothesis/constants/3c661a25646e3c8d +4 -0
  73. .hypothesis/constants/3d2a9dd03bf5915a +4 -0
  74. .hypothesis/constants/3d3fff0fd8191af3 +4 -0
  75. .hypothesis/constants/3d45e3b69897b84b +4 -0
  76. .hypothesis/constants/3da2cc841c801589 +4 -0
  77. .hypothesis/constants/3e8b58eee7d8b4d5 +4 -0
  78. .hypothesis/constants/4348526455301b6f +4 -0
  79. .hypothesis/constants/447a859c04a7d280 +4 -0
  80. .hypothesis/constants/44ad6c5a9aca898d +4 -0
  81. .hypothesis/constants/45e32c74475b5981 +4 -0
  82. .hypothesis/constants/46b7f518cb403e97 +4 -0
  83. .hypothesis/constants/48000079506593bc +4 -0
  84. .hypothesis/constants/48a14ee521dfa3cb +4 -0
  85. .hypothesis/constants/4b13c601e5d8fa82 +4 -0
  86. .hypothesis/constants/4bb224fed2cc2464 +4 -0
  87. .hypothesis/constants/4bba663f9e3a787b +4 -0
  88. .hypothesis/constants/4c05aaf660e4a3b2 +4 -0
  89. .hypothesis/constants/4c7b96c079ec1ab7 +4 -0
  90. .hypothesis/constants/4e5e35c49498c848 +4 -0
  91. .hypothesis/constants/51621802fe75c4a6 +4 -0
  92. .hypothesis/constants/525e955b17448061 +4 -0
  93. .hypothesis/constants/540912285c94e4b0 +4 -0
  94. .hypothesis/constants/5536ab6571868683 +4 -0
  95. .hypothesis/constants/562262d029962266 +4 -0
  96. .hypothesis/constants/5925e89c57abb6ff +4 -0
  97. .hypothesis/constants/59d133a77d9576e9 +4 -0
  98. .hypothesis/constants/5b400234d99fd69b +4 -0
  99. .hypothesis/constants/5e83b4b2ff8af413 +4 -0
  100. .hypothesis/constants/5fe68c54a53f5ce4 +4 -0
  101. .hypothesis/constants/6131c8fae3ea4a1c +4 -0
  102. .hypothesis/constants/61b12d8090da6b04 +4 -0
  103. .hypothesis/constants/62a13eb5c6ae282e +4 -0
  104. .hypothesis/constants/632362028177075b +4 -0
  105. .hypothesis/constants/637fb6fc4de5ab59 +4 -0
  106. .hypothesis/constants/64581adcc197c14e +4 -0
  107. .hypothesis/constants/64ae85eda3f4fa14 +4 -0
  108. .hypothesis/constants/675e6b5dded87234 +4 -0
  109. .hypothesis/constants/68dd5c4801e6e3fe +4 -0
  110. .hypothesis/constants/6962c1e17c7d2d6e +4 -0
  111. .hypothesis/constants/6b5bb9273029269e +4 -0
  112. .hypothesis/constants/6b76dcda53857290 +4 -0
  113. .hypothesis/constants/6c479fc827b2cfbe +4 -0
  114. .hypothesis/constants/6c4ee0da13eebeae +4 -0
  115. .hypothesis/constants/6d715fa94e03f86b +4 -0
  116. .hypothesis/constants/6e1df95b5625e965 +4 -0
  117. .hypothesis/constants/6e275ef4cbf7ac61 +4 -0
  118. .hypothesis/constants/6fa9fff037e639f7 +4 -0
  119. .hypothesis/constants/71ace2ebb96b893f +4 -0
  120. .hypothesis/constants/71c4d835b625450b +4 -0
  121. .hypothesis/constants/7288eb701eee527d +4 -0
  122. .hypothesis/constants/7403d3ba4d2427c5 +4 -0
  123. .hypothesis/constants/75bbc0c2fcedafd3 +4 -0
  124. .hypothesis/constants/772c40cd27e8744e +4 -0
  125. .hypothesis/constants/79fa24e4d5da2d33 +4 -0
  126. .hypothesis/constants/7b6e9f1290db23f7 +4 -0
  127. .hypothesis/constants/7c6d5f5a208c10c5 +4 -0
  128. .hypothesis/constants/7dd927a870b92315 +4 -0
  129. .hypothesis/constants/7f6008018b3bba5d +4 -0
  130. .hypothesis/constants/8166dc74cd220aec +4 -0
  131. .hypothesis/constants/82db07106773e27e +4 -0
  132. .hypothesis/constants/837366e7d032fae3 +4 -0
  133. .hypothesis/constants/85c89ff18f5bf974 +4 -0
  134. .hypothesis/constants/865ed168629d6aa5 +4 -0
  135. .hypothesis/constants/86e6c616c92ab441 +4 -0
  136. .hypothesis/constants/8a33aed17bd34bab +4 -0
  137. .hypothesis/constants/8d467b62cb87a27e +4 -0
  138. .hypothesis/constants/8dd1a0f92678435a +4 -0
  139. .hypothesis/constants/8e89a1c503109280 +4 -0
  140. .hypothesis/constants/8fa301e58829e474 +4 -0
  141. .hypothesis/constants/91857b0d89aad21a +4 -0
  142. .hypothesis/constants/91a01a53d7020790 +4 -0
  143. .hypothesis/constants/920ae7e76de44d3f +4 -0
  144. .hypothesis/constants/924b1a5d241d153a +4 -0
  145. .hypothesis/constants/9373d27b0b0cf58f +4 -0
  146. .hypothesis/constants/93785fcb751d6e65 +4 -0
  147. .hypothesis/constants/939c8629bda15316 +4 -0
  148. .hypothesis/constants/940ce79a2837ad57 +4 -0
  149. .hypothesis/constants/94c8a35cd4ebef22 +4 -0
  150. .hypothesis/constants/94db69cd7ea46848 +4 -0
  151. .hypothesis/constants/952c7791b4ba4d5a +4 -0
  152. .hypothesis/constants/95ac562d657f621e +4 -0
  153. .hypothesis/constants/979151c821a00dcc +4 -0
  154. .hypothesis/constants/9991e42f1b4b8de3 +4 -0
  155. .hypothesis/constants/99dd57061d19ac3a +4 -0
  156. .hypothesis/constants/9c217d6d4d6f2c4a +4 -0
  157. .hypothesis/constants/9d52c13fb5c16e16 +4 -0
  158. .hypothesis/constants/9d777dde1f80fdb9 +4 -0
  159. .hypothesis/constants/9f37a692294d3003 +4 -0
  160. .hypothesis/constants/9fbe011fca4ea60c +4 -0
  161. .hypothesis/constants/a003e2c8581f010e +4 -0
  162. .hypothesis/constants/a01c724a454a8b07 +4 -0
  163. .hypothesis/constants/a19ddbb5bb485e6d +4 -0
  164. .hypothesis/constants/a34cec0af3c61213 +4 -0
  165. .hypothesis/constants/a388424d0fca2721 +4 -0
  166. .hypothesis/constants/a4a93b033d17cf24 +4 -0
  167. .hypothesis/constants/a560cce78032950e +4 -0
  168. .hypothesis/constants/a5a8f7b489f537fc +4 -0
  169. .hypothesis/constants/a67af5b4aeadcff2 +4 -0
  170. .hypothesis/constants/a6c8f5eb7163d884 +4 -0
  171. .hypothesis/constants/a722cf958fac9b3c +4 -0
  172. .hypothesis/constants/a821981d00e00216 +4 -0
  173. .hypothesis/constants/a963981095621930 +4 -0
  174. .hypothesis/constants/aadddacd15f6ac3a +4 -0
  175. .hypothesis/constants/ac677dd8b8917e26 +4 -0
  176. .hypothesis/constants/ad88faefd482e804 +4 -0
  177. .hypothesis/constants/adb5954c6bb49007 +4 -0
  178. .hypothesis/constants/adc83b19e793491b +4 -0
  179. .hypothesis/constants/b1c9c22b2744f127 +4 -0
  180. .hypothesis/constants/b2336f0cf3fc59dd +4 -0
  181. .hypothesis/constants/b239cb3f0b8646c1 +4 -0
  182. .hypothesis/constants/b2cacfb0b5256165 +4 -0
  183. .hypothesis/constants/b57853a780c67716 +4 -0
  184. .hypothesis/constants/b761cefd2d825687 +4 -0
  185. .hypothesis/constants/b7654ffb010d2a80 +4 -0
  186. .hypothesis/constants/b768678447dffe12 +4 -0
  187. .hypothesis/constants/b9379698f7948f1f +4 -0
  188. .hypothesis/constants/b9462bd5cd23c3e1 +4 -0
  189. .hypothesis/constants/bc536f7f8cec8029 +4 -0
  190. .hypothesis/constants/bc6dc851bd4abd68 +4 -0
  191. .hypothesis/constants/bd470a969c12eaea +4 -0
  192. .hypothesis/constants/c195b79b581a5e4a +4 -0
  193. .hypothesis/constants/c281c878a9cfffe7 +4 -0
  194. .hypothesis/constants/c32689b74b2df638 +4 -0
  195. .hypothesis/constants/c563f080b55d5a55 +4 -0
  196. .hypothesis/constants/c58cb290bf3a6af2 +4 -0
  197. .hypothesis/constants/c599575389481bca +4 -0
  198. .hypothesis/constants/c5d3925deea75efd +4 -0
  199. .hypothesis/constants/c70bdf7090eff52b +4 -0
  200. .hypothesis/constants/c92583fdbbd8025f +4 -0
  201. .hypothesis/constants/c9e899c314823e78 +4 -0
  202. .hypothesis/constants/cbc76d66f0269c37 +4 -0
  203. .hypothesis/constants/cdb3f019754ca1e6 +4 -0
  204. .hypothesis/constants/d13022c0afda1563 +4 -0
  205. .hypothesis/constants/d2610b9162e41d14 +4 -0
  206. .hypothesis/constants/d47087da8bc398e1 +4 -0
  207. .hypothesis/constants/d51ac9dbfded2877 +4 -0
  208. .hypothesis/constants/d83e43c1a00ef966 +4 -0
  209. .hypothesis/constants/d9b8c8c138bb6b21 +4 -0
  210. .hypothesis/constants/d9fa1f244511bb57 +4 -0
  211. .hypothesis/constants/da39a3ee5e6b4b0d +4 -0
  212. .hypothesis/constants/db1a7096187ad5e3 +4 -0
  213. .hypothesis/constants/db6f3b1f106a20fe +4 -0
  214. .hypothesis/constants/dbcc0a55f941df10 +4 -0
  215. .hypothesis/constants/de59ae4c0e9adc1e +4 -0
  216. .hypothesis/constants/de7a1e6e64930056 +4 -0
  217. .hypothesis/constants/df25569e1b33d3f1 +4 -0
  218. .hypothesis/constants/e05c7ba7895ef945 +4 -0
  219. .hypothesis/constants/e3e0949ea24f14cb +4 -0
  220. .hypothesis/constants/e4bebe96ce86ee3a +4 -0
  221. .hypothesis/constants/e4dbd43376140e77 +4 -0
  222. .hypothesis/constants/e515b936fbb56d29 +4 -0
  223. .hypothesis/constants/e55fd534f3c5eef8 +4 -0
  224. .hypothesis/constants/e59ee7a18d689b65 +4 -0
  225. .hypothesis/constants/ea468f1fbc755b35 +4 -0
  226. .hypothesis/constants/eb2261d5ee23ffb7 +4 -0
  227. .hypothesis/constants/ee936137cd0c418e +4 -0
  228. .hypothesis/constants/eea2d47be7a11d26 +4 -0
  229. .hypothesis/constants/eecb26b7b8b77207 +4 -0
  230. .hypothesis/constants/f05c8ae7929ace98 +4 -0
  231. .hypothesis/constants/f16bb017e9ee5af9 +4 -0
  232. .hypothesis/constants/f234592906cfe3fb +4 -0
  233. .hypothesis/constants/f37e913bdd621102 +4 -0
  234. .hypothesis/constants/f3e54889b30a59c0 +4 -0
  235. .hypothesis/constants/f59ffab710c767fd +4 -0
  236. .hypothesis/constants/f5f4ab83cb6aea25 +4 -0
  237. .hypothesis/constants/f9356a6ecf0ddc0a +4 -0
  238. .hypothesis/constants/fbd35b0283486407 +4 -0
  239. .hypothesis/constants/fc6e2235d01cc617 +4 -0
  240. .hypothesis/constants/fcf63ec14b415b9b +4 -0
  241. .hypothesis/constants/fd04c0c4b4afe562 +4 -0
  242. .hypothesis/constants/fe045c8a1d327a5f +4 -0
  243. .hypothesis/constants/fee5511b5a452741 +4 -0
  244. .hypothesis/constants/ffb2784e9f595389 +4 -0
  245. .hypothesis/constants/ffb8303a5a716659 +4 -0
  246. .hypothesis/unicode_data/14.0.0/charmap.json.gz +0 -0
  247. .hypothesis/unicode_data/14.0.0/codec-v2-utf-8.json.gz +0 -0
  248. .pre-commit-config.yaml +27 -0
  249. .windsurfrules +88 -0
  250. ARIEL_RULES.md +28 -0
  251. AUDIT_REPORT_20260629.md +114 -0
  252. CHANGELOG.md +400 -0
  253. CODE_OF_CONDUCT.md +128 -0
  254. CONTRIBUTING.md +68 -0
  255. Dockerfile +30 -0
  256. LICENSE +21 -0
  257. PKG-INFO +261 -0
  258. README.md +192 -0
  259. ROADMAP.md +209 -0
  260. SECURITY.md +63 -0
  261. a_memory-1.7.0.dist-info/METADATA +261 -0
  262. a_memory-1.7.0.dist-info/RECORD +550 -0
  263. a_memory-1.7.0.dist-info/WHEEL +4 -0
  264. a_memory-1.7.0.dist-info/entry_points.txt +4 -0
  265. a_memory-1.7.0.dist-info/licenses/LICENSE +21 -0
  266. alembic/README +1 -0
  267. alembic/env.py +94 -0
  268. alembic/script.py.mako +28 -0
  269. alembic/versions/4f9d5ab34719_add_audit_log_index_and_optimize.py +34 -0
  270. alembic/versions/a38d67fcd99e_init_v8_schema.py +291 -0
  271. alembic/versions/c7e21a94b0d5_layer_isolate_l3_l4.py +59 -0
  272. alembic/versions/e5b7d2f8a1c3_rag_chunks_float_blobs.py +42 -0
  273. alembic.ini +149 -0
  274. config.py +112 -0
  275. config.yaml +169 -0
  276. core/__init__.py +100 -0
  277. core/episodic.py +161 -0
  278. core/memory.py +232 -0
  279. core/projects.py +196 -0
  280. core/reflex.py +75 -0
  281. core/session.py +106 -0
  282. data/auth/keys.enc +0 -0
  283. data/auth/token.enc +1 -0
  284. docker-compose.yml +14 -0
  285. docs/CONTROL_MAP.md +109 -0
  286. docs/api/importance.md +9 -0
  287. docs/api/memory-types.md +9 -0
  288. docs/api/secrets.md +11 -0
  289. docs/architecture/connection.md +44 -0
  290. docs/architecture/diagrams.md +119 -0
  291. docs/architecture/layers.md +76 -0
  292. docs/architecture/overview.md +70 -0
  293. docs/changelog.md +17 -0
  294. docs/contributing.md +29 -0
  295. docs/core/episodic.md +20 -0
  296. docs/core/memory.md +29 -0
  297. docs/core/reflex.md +39 -0
  298. docs/core/session.md +20 -0
  299. docs/features/auth.md +28 -0
  300. docs/features/backup.md +28 -0
  301. docs/features/circuit-breaker.md +35 -0
  302. docs/features/compression.md +17 -0
  303. docs/features/dedup.md +25 -0
  304. docs/features/privacy.md +34 -0
  305. docs/features/rate-limiting.md +18 -0
  306. docs/features/secrets.md +48 -0
  307. docs/features/token-budget.md +27 -0
  308. docs/getting-started/configuration.md +69 -0
  309. docs/getting-started/installation.md +52 -0
  310. docs/getting-started/quickstart.md +42 -0
  311. docs/hooks/system.md +45 -0
  312. docs/index.md +90 -0
  313. docs/lifecycle/overview.md +35 -0
  314. docs/operations/deployment.md +58 -0
  315. docs/operations/monitoring.md +25 -0
  316. docs/operations/testing.md +39 -0
  317. docs/rag/conflict.md +33 -0
  318. docs/rag/engine.md +34 -0
  319. docs/rag/quantize.md +25 -0
  320. docs/rag/router.md +20 -0
  321. docs/rag/scoring.md +31 -0
  322. docs/research/RESEARCH-ideas.md +688 -0
  323. docs/tools/reference.md +125 -0
  324. docs/wiki/agent-wiki.md +20 -0
  325. docs/wiki/file-wiki.md +39 -0
  326. docs/wiki/overview.md +43 -0
  327. docs/wiki/user-wiki.md +20 -0
  328. features/__init__.py +9 -0
  329. features/audit_trail.py +136 -0
  330. features/auth/__init__.py +13 -0
  331. features/auth/api_key.py +82 -0
  332. features/auth/bearer.py +55 -0
  333. features/auth/models.py +18 -0
  334. features/auth/store.py +69 -0
  335. features/backup.py +99 -0
  336. features/backup_cron.py +239 -0
  337. features/compression.py +65 -0
  338. features/dashboard.py +222 -0
  339. features/db_maintenance.py +126 -0
  340. features/import_export.py +98 -0
  341. features/rate_limiting.py +114 -0
  342. features/secrets.py +158 -0
  343. features/typed_export.py +90 -0
  344. full_test_output.txt +12 -0
  345. graph/__init__.py +6 -0
  346. graph/epistemic.py +260 -0
  347. graph/temporal.py +139 -0
  348. hooks/__init__.py +11 -0
  349. hooks/agent_hooks.py +126 -0
  350. hooks/loader.py +5 -0
  351. hooks/models.py +18 -0
  352. hooks/registry.py +101 -0
  353. hooks/shared.py +112 -0
  354. hooks/user_hooks.py +163 -0
  355. lifecycle/__init__.py +7 -0
  356. lifecycle/consolidation.py +117 -0
  357. lifecycle/emotion/README.md +30 -0
  358. lifecycle/emotion/__init__.py +6 -0
  359. lifecycle/emotion/config.py +16 -0
  360. lifecycle/emotion/engine.py +86 -0
  361. lifecycle/emotion/models.py +27 -0
  362. lifecycle/emotion/trigger.py +58 -0
  363. lifecycle/forgetting.py +188 -0
  364. lifecycle/importance_scheduler.py +162 -0
  365. mcp_server/__init__.py +5 -0
  366. mcp_server/__main__.py +3 -0
  367. mcp_server/app.py +57 -0
  368. mcp_server/constants.py +11 -0
  369. mcp_server/context.py +55 -0
  370. mcp_server/endpoints/__init__.py +0 -0
  371. mcp_server/endpoints/auth.py +30 -0
  372. mcp_server/endpoints/backup.py +29 -0
  373. mcp_server/endpoints/common.py +36 -0
  374. mcp_server/endpoints/dashboard.py +66 -0
  375. mcp_server/endpoints/system.py +64 -0
  376. mcp_server/lifespan.py +110 -0
  377. mcp_server/middlewares.py +32 -0
  378. mcp_server/models.py +126 -0
  379. mcp_server/registry.py +32 -0
  380. mcp_server/schema.py +68 -0
  381. mcp_server/server.py +153 -0
  382. mcp_server/tools/base.py +223 -0
  383. mcp_server/tools/episodic.py +112 -0
  384. mcp_server/tools/graph.py +151 -0
  385. mcp_server/tools/memory.py +141 -0
  386. mcp_server/tools/ops.py +404 -0
  387. mcp_server/tools/primitives.py +532 -0
  388. mcp_server/tools/session.py +84 -0
  389. mcp_server/tools/wiki.py +75 -0
  390. mcp_server/tools_layer.py +74 -0
  391. mcp_server/utils/__init__.py +1 -0
  392. mcp_server/utils/privacy.py +31 -0
  393. mkdocs.yml +106 -0
  394. openapi.yaml +314 -0
  395. py.typed +1 -0
  396. pyproject.toml +196 -0
  397. rag/__init__.py +7 -0
  398. rag/chunking.py +59 -0
  399. rag/conflict.py +189 -0
  400. rag/engine.py +180 -0
  401. rag/ingestor.py +115 -0
  402. rag/models.py +34 -0
  403. rag/multi_source.py +175 -0
  404. rag/quantize.py +232 -0
  405. rag/router.py +292 -0
  406. rag/schema.py +75 -0
  407. rag/scoring.py +165 -0
  408. rag/search.py +253 -0
  409. rag/searcher.py +133 -0
  410. shared/__init__.py +47 -0
  411. shared/adaptive.py +91 -0
  412. shared/archived_memories.py +77 -0
  413. shared/assets/__init__.py +0 -0
  414. shared/assets/emotions.json +35 -0
  415. shared/cache.py +57 -0
  416. shared/connection.py +256 -0
  417. shared/constants.py +37 -0
  418. shared/crypto.py +58 -0
  419. shared/dream_buffer.py +147 -0
  420. shared/embeddings.py +179 -0
  421. shared/importance/README.md +33 -0
  422. shared/importance/__init__.py +4 -0
  423. shared/importance/models.py +58 -0
  424. shared/importance/scorer.py +118 -0
  425. shared/importance/signals/__init__.py +21 -0
  426. shared/importance/signals/base_signal.py +10 -0
  427. shared/importance/signals/base_type_signal.py +20 -0
  428. shared/importance/signals/emotion_signal.py +23 -0
  429. shared/importance/signals/length_signal.py +15 -0
  430. shared/importance/signals/noise_signal.py +19 -0
  431. shared/importance/signals/novelty_signal.py +10 -0
  432. shared/importance/signals/question_signal.py +10 -0
  433. shared/importance/signals/retrieval_signal.py +13 -0
  434. shared/importance/signals/tech_signal.py +26 -0
  435. shared/memory_types.py +259 -0
  436. shared/metrics.py +75 -0
  437. shared/middleware.py +222 -0
  438. shared/migrations.py +70 -0
  439. shared/path_safety.py +18 -0
  440. shared/read_only.py +101 -0
  441. shared/saga/README.md +36 -0
  442. shared/saga/__init__.py +36 -0
  443. shared/saga/engine.py +103 -0
  444. shared/saga/impl/__init__.py +0 -0
  445. shared/saga/impl/backup.py +90 -0
  446. shared/saga/impl/base.py +579 -0
  447. shared/saga/impl/consolidation.py +88 -0
  448. shared/saga/impl/crypto.py +91 -0
  449. shared/saga/persistence.py +84 -0
  450. shared/saga/schema.py +33 -0
  451. shared//320/237/320/273/320/260/320/275 /320/277/320/265/321/200/320/265/321/205/320/276/320/264/320/260 /320/275/320/260 aiosqlite.md" +100 -0
  452. test_output.txt +22 -0
  453. tests/__init__.py +0 -0
  454. tests/conftest.py +66 -0
  455. tests/features/test_api_key_auth.py +75 -0
  456. tests/features/test_auth_store.py +66 -0
  457. tests/features/test_bearer_auth.py +53 -0
  458. tests/shared/__init__.py +0 -0
  459. tests/shared/test_importance_models.py +30 -0
  460. tests/shared/test_importance_scorer.py +92 -0
  461. tests/shared/test_importance_scorer_extra.py +75 -0
  462. tests/shared/test_importance_signals.py +58 -0
  463. tests/shared/test_saga_engine.py +160 -0
  464. tests/shared/test_saga_engine_extra.py +118 -0
  465. tests/shared/test_saga_impl.py +143 -0
  466. tests/shared/test_saga_persistence.py +56 -0
  467. tests/shared/test_saga_schema.py +48 -0
  468. tests/test_auth_backup.py +84 -0
  469. tests/test_auth_crypto.py +87 -0
  470. tests/test_conflict_bm25.py +89 -0
  471. tests/test_core/__init__.py +0 -0
  472. tests/test_core/test_core.py +11 -0
  473. tests/test_db_maintenance.py +74 -0
  474. tests/test_dream_buffer_flow.py +69 -0
  475. tests/test_features/__init__.py +0 -0
  476. tests/test_features/test_backup_path_safety.py +31 -0
  477. tests/test_features/test_features.py +14 -0
  478. tests/test_features/test_import_export_path_safety.py +32 -0
  479. tests/test_features_coverage.py +439 -0
  480. tests/test_graph/__init__.py +0 -0
  481. tests/test_hooks/__init__.py +0 -0
  482. tests/test_hooks/test_registry_core.py +61 -0
  483. tests/test_hooks/test_registry_fire.py +57 -0
  484. tests/test_hypothesis.py +1361 -0
  485. tests/test_importance_middleware.py +74 -0
  486. tests/test_importance_scheduler.py +122 -0
  487. tests/test_importance_v2.py +116 -0
  488. tests/test_infra_overhaul.py +17 -0
  489. tests/test_integration.py +183 -0
  490. tests/test_lifecycle/__init__.py +0 -0
  491. tests/test_lifecycle/test_emotion_engine.py +99 -0
  492. tests/test_lifecycle/test_emotion_engine_extra.py +52 -0
  493. tests/test_lifecycle/test_emotion_models.py +39 -0
  494. tests/test_lifecycle/test_emotion_trigger_integration.py +85 -0
  495. tests/test_lifecycle/test_forgetting_edge.py +46 -0
  496. tests/test_mcp/__init__.py +0 -0
  497. tests/test_mcp/test_primitives.py +120 -0
  498. tests/test_mcp/test_tools_e2e.py +336 -0
  499. tests/test_mcp/test_tools_unit.py +167 -0
  500. tests/test_memory_types.py +72 -0
  501. tests/test_mib_quantize.py +101 -0
  502. tests/test_multi_source.py +117 -0
  503. tests/test_primitives.py +171 -0
  504. tests/test_project_audit.py +121 -0
  505. tests/test_projects.py +166 -0
  506. tests/test_rag/__init__.py +0 -0
  507. tests/test_rag/test_rag_engine_lifecycle.py +47 -0
  508. tests/test_rag/test_rag_ingestor.py +84 -0
  509. tests/test_rag/test_rag_schema.py +59 -0
  510. tests/test_rag/test_rag_searcher.py +91 -0
  511. tests/test_rag_binary_search.py +104 -0
  512. tests/test_rag_chunking.py +27 -0
  513. tests/test_rag_keep_float.py +49 -0
  514. tests/test_rag_no_legacy_api.py +40 -0
  515. tests/test_rag_scoring.py +128 -0
  516. tests/test_rag_search_facade.py +166 -0
  517. tests/test_router_improvements.py +106 -0
  518. tests/test_routing_integration.py +147 -0
  519. tests/test_saga_behavior.py +185 -0
  520. tests/test_secrets.py +87 -0
  521. tests/test_shared/__init__.py +0 -0
  522. tests/test_shared/test_connection.py +48 -0
  523. tests/test_shared/test_embeddings_unit.py +17 -0
  524. tests/test_shared/test_middleware_unit.py +68 -0
  525. tests/test_shared/test_migrations_coverage.py +43 -0
  526. tests/test_shared/test_path_safety.py +31 -0
  527. tests/test_shared/test_read_only_coverage.py +53 -0
  528. tests/test_shared/test_saga_crypto_coverage.py +108 -0
  529. tests/test_shared/test_saga_crypto_wiring.py +18 -0
  530. tests/test_shared/test_saga_unit.py +292 -0
  531. tests/test_shared/test_shared.py +63 -0
  532. tests/test_threshold_training.py +132 -0
  533. tests/test_typed_consolidation.py +57 -0
  534. tests/test_typed_forgetting.py +87 -0
  535. tests/test_wiki/__init__.py +0 -0
  536. tests/test_wiki/test_manager.py +128 -0
  537. tests/test_wiki/test_path_safety.py +46 -0
  538. tests/test_wiki/test_wiki.py +41 -0
  539. tests/test_wiki/test_wiki_index.py +145 -0
  540. tests/test_wiki/test_wiki_manager.py +125 -0
  541. tests/test_wiki/test_wiki_manager_extra.py +68 -0
  542. tests/test_wiki/test_wiki_parser.py +74 -0
  543. uv.lock +2699 -0
  544. wiki/README.md +32 -0
  545. wiki/__init__.py +23 -0
  546. wiki/index.py +207 -0
  547. wiki/manager.py +321 -0
  548. wiki/models.py +14 -0
  549. wiki/parser.py +72 -0
  550. wiki/shared.py +41 -0
.ai-memory.toml ADDED
@@ -0,0 +1,21 @@
1
+ project_name = ""
2
+ scan_dirs = [
3
+ "src", "lib", "app", "models", "controllers", "services",
4
+ "db", "migrations", "schema", "core", "extended", "features",
5
+ "graph", "hooks", "lifecycle", "rag", "shared", "wiki",
6
+ "adapters", "agent_core", "ariel", "delegation", "memory",
7
+ "modules", "reflex_flags", "skills", "tools", "cognitive",
8
+ "tests", "scripts", "config",
9
+ ]
10
+ extensions = [
11
+ ".py", ".js", ".ts", ".tsx", ".jsx", ".rb", ".go", ".rs",
12
+ ".java", ".cs", ".c", ".cpp", ".h", ".hpp", ".sql", ".yaml",
13
+ ".yml", ".json", ".toml", ".proto", ".graphql",
14
+ ]
15
+ ignore_patterns = [
16
+ "node_modules", "venv", ".git", "__pycache__", ".idea",
17
+ "dist", "build", "target", "vendor", ".pytest_cache",
18
+ "*.min.js", "*.min.css", "*.map", ".ai-memory", ".codegraph",
19
+ ]
20
+ output_format = "markdown"
21
+ max_context_tokens = 4000
.claude/CLAUDE.md ADDED
@@ -0,0 +1,109 @@
1
+ # CLAUDE.md
2
+
3
+ <!-- Add your custom instructions below. Repowise will never modify anything outside the REPOWISE markers. -->
4
+ <!-- Examples: coding style rules, test commands, workflow preferences, constraints -->
5
+
6
+ <!-- REPOWISE:START โ€” Do not edit below this line. Auto-generated by Repowise. -->
7
+ ## IMPORTANT: Codebase Intelligence Instructions for mcp-ariel-memory
8
+
9
+ > This repository is indexed by [Repowise](https://repowise.dev).
10
+ > Use the MCP tools below for orientation, discovery, and enriched context
11
+ > (documentation, ownership, history, decisions). **Always verify against
12
+ > actual source files before making changes** โ€” the index may be stale.
13
+
14
+ Last indexed: 2026-08-08 (commit e428650)
15
+ ### Entry Points
16
+ - `__main__.py`
17
+ - `mcp_server/server.py`
18
+ ### Tech Stack
19
+ **Languages:** Python
20
+ **Frameworks:** Pydantic
21
+
22
+ **Infra:** Docker, Docker Compose### Architectural Layers
23
+ | Layer | Files | Purpose |
24
+ |-------|-------|---------|
25
+ | Application | 72 | |
26
+ | Service | 5 | |
27
+ | Config | 19 | |
28
+ | Utility | 22 | |
29
+ | Docs & Tooling | 43 | |
30
+ | Test | 56 | |
31
+
32
+ ### Guided Tour (12 steps)
33
+ 1. `README.md`
34
+ 2. `server.py`
35
+ 3. `__main__.py`
36
+ 4. `index.js`
37
+ 5. `connection.py`
38
+ 6. `config.py`
39
+ ... and 6 more steps
40
+ ### Hotspots (High Churn)
41
+ | File | Churn | 90d Commits | Owner |
42
+ |------|-------|-------------|-------|
43
+ | `rag/engine.py` | 99.3th %ile | 35 | Ariel Memory |
44
+ | `tests/test_mcp/test_tools_e2e.py` | 98.6th %ile | 10 | Ariel Memory |
45
+ | `tests/test_hypothesis.py` | 97.8th %ile | 10 | Ariel Memory |
46
+ | `mcp_server/tools_layer.py` | 97.1th %ile | 26 | Ariel Memory |
47
+ | `shared/saga.py` | 96.4th %ile | 23 | Ariel Memory |
48
+
49
+ ## Code health
50
+ Three signals: **defect risk** (the overall score), **maintainability** (smells that hurt readability/change-cost without predicting bugs), and **performance** (static performance RISK: I/O-in-loop / N+1 shapes that waste work, high-precision/low-recall). Maintainability and performance are co-equal views, never blended into the defect headline. See `docs/CODE_HEALTH.md`.
51
+
52
+ Defect risk, Hotspot health: 4.09/10 (stable) ยท
53
+ Average: 6.82/10 ยท
54
+ Worst: 1.0/10 (`shared/saga.py`)
55
+ Maintainability, Average: 8.89/10
56
+ Performance risk, Average: 9.85/10
57
+
58
+ ### Critical biomarkers
59
+ - `tests/test_rag_scoring.py` โ€” churn risk โ€” impact โˆ’2.4
60
+ - `tests/test_integration.py` โ€” churn risk โ€” impact โˆ’2.4
61
+ - `features/audit_trail.py` โ€” untested hotspot โ€” impact โˆ’2.0
62
+ - `features/rate_limiting.py` โ€” untested hotspot โ€” impact โˆ’2.0
63
+ - `graph/temporal.py` โ€” untested hotspot โ€” impact โˆ’2.0
64
+
65
+ ### Repowise MCP Tools
66
+
67
+ This repo has the Repowise MCP server configured. The tools below answer questions `grep`/`Read` cannot. Every response carries an `_meta` envelope with `index_age_days`, `indexed_commit`, and a `stale_warning` only when the index has actually diverged from HEAD โ€” silence means the index is current.
68
+
69
+ **When to call which tool:**
70
+
71
+ | Tool | What only this tool answers |
72
+ |------|------------------------------|
73
+ | `get_answer(question)` | Synthesised answer with citations and a content-grounded `confidence`. First call for "how does X work" / "where is Y" / "why is Z". Value questions may return `grounding: "extracted"` โ€” the verbatim source line, no synthesis involved. On low confidence returns `best_guesses` with one-line justifications. |
74
+ | `get_context(targets=[...])` | Triage card for files/modules/symbols โ€” title, summary, signatures, `hotspot` bit, `decision_records` titles, `symbol_id`s. File targets auto-upgrade to a `verified` skeleton (every signature, ~37% of a full Read). `include=["callers"]` works on file targets too (import + call rollup). |
75
+ | `get_symbol(...)` | Source bytes with live-verified bounds. Three forms: `"path.py::Name"` (indexed symbol), `"path.py:140-180"` (live range read, โ‰ค200 lines), `"repowise#<hex>"` (omission ref). Index misses return `fallback_lines` from a live grep instead of a dead end. |
76
+ | `search_codebase(query, mode?, kind?, symbol_kind?)` | Hybrid code search. `mode="auto"` (default) routes by query shape: an identifier โ†’ indexed symbol hits (`symbol_id`/`file`/line bounds โ€” pipe into `get_symbol`), a path โ†’ file pages (pipe into `get_context`), prose โ†’ wiki-semantic search, mixed โ†’ hybrid (symbols first). Force a branch with `mode=symbol\|path\|concept\|hybrid`. Concept hits carry `search_method` (`embedding` vs `bm25` fallback); decision records rank below file pages unless the query is why-shaped. |
77
+ | `get_why(query, targets?)` | Architectural decision archaeology โ€” *why* the code is shaped this way. Call before refactors or pattern divergences. Falls back to git archaeology when no ADRs exist for a file. |
78
+ | `get_risk(targets, changed_files?)` | What history says about touching these files: churn, owners, blast radius. Pass `changed_files` for PR mode โ†’ returns a `directive` (`will_break`, `missing_cochanges`, `missing_tests`). |
79
+ | `get_health(targets?, include?)` | Code-health scores + biomarker findings (defect / maintainability / performance pillars). Self-check before a PR โ€” read the same signals the merge-gate judges your change on. Default is lean; opt in with `include`: `["accuracy"]` (does the score rank the buggy files first โ€” precision@K + `lift`), `["signals"]` (per-file prior-defects / churn / owners / degree, targeted mode), `["churn_complexity"]` (volatile-and-complex danger-zone files), `["biomarkers"]` (all findings), and a dimension name `["performance"]` / `["defect"]` / `["maintainability"]` to filter findings to one pillar. |
80
+ | `get_dead_code(...)` | Tiered unreachable / unused-export / zombie-package findings. Run before a cleanup sprint, not before a targeted fix. |
81
+ | `get_overview(repo?)` | Architecture map + `tool_guide` recipes. One-time orientation; skip on subsequent calls in the same session. |
82
+
83
+ **Trust protocol โ€” when a response replaces reading the source:**
84
+ - `verified: true` on any response means the served content was checked against the live working tree. **Never follow a verified response with a Read of the same lines** โ€” you would be paying twice for identical bytes.
85
+ - `get_answer` with `confidence: "high"` or `grounding: "extracted"` is content-grounded (asserted values were verified against retrieved source; โ‰ฅ1 citation is source-backed). Cite it directly. `quotes` entries `{path, lines, quote}` are verbatim live source โ€” quote them instead of re-reading.
86
+ - Reading code: `get_context` skeleton first (~37% of a full Read), then `get_symbol` for bodies, `"path.py:a-b"` range reads for anything between symbols. Raw `Read` is for files the index marks `mostly_full` or cannot serve.
87
+ - The **only** re-read triggers: `bounds: "approximate"`, `_meta.stale_warning`, `search_method: "bm25"`, or `confidence: "low"`/`retrieval_quality: "weak"`.
88
+ - Disallowed rationalizations for extra reads: "just to be safe", "to double-check the tool", "to see the full context" (use the skeleton / a range read), "the file might have changed" (that is what `verified` already checked).
89
+
90
+ **Composition tips:**
91
+ - `get_answer` โ†’ if `confidence` is `medium`/`low`, follow `best_guesses[0].file` or `fallback_targets[0]` into `get_context`, then `get_symbol` for bytes.
92
+ - `get_context` returns `decision_records` titles โ†’ `get_why(targets=[...])` for the rationale; `hotspot: true` โ†’ `get_risk` before editing.
93
+ - PR review โ†’ `get_risk(targets=[...], changed_files=[...])`; read the `directive` block first.
94
+ - A `tombstone` error means the file was deleted/renamed since indexing โ€” follow `successor_paths`.
95
+
96
+ ### Output Distillation
97
+
98
+ - Prefer `repowise distill <cmd>` for noisy commands โ€” test runs, builds, `git status`/`log`/`diff`, searches, file listings. It runs the command unchanged (exit code preserved) and prints a compact, errors-first rendering; every error line survives.
99
+ - Output may contain a marker like `[repowise#a1b2c3d4e5f6: 230 lines omitted (~6.1k tokens); restore: repowise expand a1b2c3d4e5f6]`. The omitted content is fully preserved โ€” run `repowise expand <ref>` to retrieve it, or `repowise expand <ref> -q <regex>` for just the matching lines.
100
+ - Never re-run a command to see omitted output; expand the marker instead.
101
+ - For structure-level questions about a large indexed file ("what's in here", "which function handles X"), `get_context(["path"], include=["skeleton"])` returns the file with bodies elided โ€” every signature plus the bodies of the most central symbols โ€” at a fraction of the cost of a full Read.
102
+
103
+ ### Codebase Conventions
104
+ **Commands:**
105
+ - Test: `pytest`
106
+ - Lint: `ruff check .`
107
+ - Typecheck: `mypy .`
108
+
109
+ <!-- REPOWISE:END -->
.codegraph/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ # CodeGraph data files โ€” local to each machine, not for committing.
2
+ # Ignore everything in .codegraph/ except this file itself, so transient
3
+ # files (the database, daemon.pid, sockets, logs) never show up in git.
4
+ *
5
+ !.gitignore
.coderabbit.yaml ADDED
@@ -0,0 +1,43 @@
1
+ # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
2
+ language: "en-US"
3
+
4
+ reviews:
5
+ profile: "chill"
6
+ request_changes_workflow: false
7
+ high_level_summary: true
8
+ poem: false
9
+ review_status: true
10
+ collapse_walkthrough: false
11
+ auto_review:
12
+ enabled: true
13
+ drafts: false
14
+ path_instructions:
15
+ - path: "mcp_server/**/*.py"
16
+ instructions: |
17
+ Review MCP server code. Focus on:
18
+ - Async correctness (no blocking calls in async functions)
19
+ - Error handling (no bare except)
20
+ - Type annotations on public functions
21
+ - SQL injection prevention (parameterized queries only)
22
+ - path: "shared/**/*.py"
23
+ instructions: |
24
+ Review shared modules. Focus on:
25
+ - Thread safety (no shared mutable state without locks)
26
+ - Connection management (proper cleanup, no leaks)
27
+ - Cryptographic operations (correct nonce handling)
28
+ - path: "tests/**/*.py"
29
+ instructions: |
30
+ Review test code. Focus on:
31
+ - Test isolation (no shared state between tests)
32
+ - Async test correctness
33
+ - No hardcoded paths or credentials
34
+ - Property-based tests should have proper shrink strategies
35
+ - path: "rag/**/*.py"
36
+ instructions: |
37
+ Review RAG engine. Focus on:
38
+ - FTS5 query safety (no user input in SQL)
39
+ - Binary search correctness (hamming distance math)
40
+ - Search result ranking consistency
41
+
42
+ chat:
43
+ auto_reply: true
.cursorrules ADDED
File without changes
.dockerignore ADDED
@@ -0,0 +1,19 @@
1
+ __pycache__
2
+ *.pyc
3
+ *.pyo
4
+ .git
5
+ .gitignore
6
+ *.md
7
+ !README.md
8
+ !README_EN.md
9
+ tests/
10
+ docs/
11
+ *.db
12
+ *.json
13
+ !pyproject.toml
14
+ .mcp-ariel-memory/
15
+ .ai-memory/
16
+ .codegraph/
17
+ .cursorrules
18
+ .windsurfrules
19
+ .github/
.gitattributes ADDED
@@ -0,0 +1,22 @@
1
+ * text=auto
2
+
3
+ *.py text eol=lf
4
+ *.js text eol=lf
5
+ *.ts text eol=lf
6
+ *.tsx text eol=lf
7
+ *.json text eol=lf
8
+ *.md text eol=lf
9
+ *.yaml text eol=lf
10
+ *.yml text eol=lf
11
+ *.sh text eol=lf
12
+ *.txt text eol=lf
13
+ *.toml text eol=lf
14
+ *.sql text eol=lf
15
+
16
+ *.png binary
17
+ *.jpg binary
18
+ *.jpeg binary
19
+ *.gif binary
20
+ *.sqlite binary
21
+ *.db binary
22
+ *.pyc binary
.github/CODEOWNERS ADDED
@@ -0,0 +1,11 @@
1
+ # Default owner for everything in the repo
2
+ * @Cipher208
3
+
4
+ # Python source
5
+ *.py @Cipher208
6
+
7
+ # MCP server
8
+ mcp_server/ @Cipher208
9
+
10
+ # CI/CD
11
+ .github/ @Cipher208
@@ -0,0 +1,109 @@
1
+ name: Bug Report
2
+ description: Report a bug to help us improve
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for reporting a bug! Please fill out the form below.
9
+
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: mcp-ariel-memory version
14
+ description: "Output of `pip show mcp-ariel-memory | grep Version`"
15
+ placeholder: "1.0.0"
16
+ validations:
17
+ required: true
18
+
19
+ - type: dropdown
20
+ id: python
21
+ attributes:
22
+ label: Python version
23
+ options:
24
+ - "3.10"
25
+ - "3.11"
26
+ - "3.12"
27
+ - "3.13"
28
+ validations:
29
+ required: true
30
+
31
+ - type: dropdown
32
+ id: os
33
+ attributes:
34
+ label: Operating System
35
+ options:
36
+ - Linux
37
+ - macOS
38
+ - Windows
39
+ - Docker
40
+ validations:
41
+ required: true
42
+
43
+ - type: dropdown
44
+ id: transport
45
+ attributes:
46
+ label: Transport
47
+ options:
48
+ - stdio
49
+ - HTTP (Streamable)
50
+ - Docker
51
+ validations:
52
+ required: true
53
+
54
+ - type: textarea
55
+ id: description
56
+ attributes:
57
+ label: Bug description
58
+ description: A clear description of what the bug is
59
+ placeholder: "Describe the bug..."
60
+ validations:
61
+ required: true
62
+
63
+ - type: textarea
64
+ id: steps
65
+ attributes:
66
+ label: Steps to reproduce
67
+ description: Minimal steps to reproduce the behavior
68
+ placeholder: |
69
+ 1. Start server with...
70
+ 2. Send request...
71
+ 3. See error...
72
+ validations:
73
+ required: true
74
+
75
+ - type: textarea
76
+ id: expected
77
+ attributes:
78
+ label: Expected behavior
79
+ description: What you expected to happen
80
+ validations:
81
+ required: true
82
+
83
+ - type: textarea
84
+ id: actual
85
+ attributes:
86
+ label: Actual behavior
87
+ description: What actually happened
88
+ validations:
89
+ required: true
90
+
91
+ - type: textarea
92
+ id: config
93
+ attributes:
94
+ label: Configuration
95
+ description: "Relevant config.yaml or environment variables (redact secrets)"
96
+ render: yaml
97
+
98
+ - type: textarea
99
+ id: logs
100
+ attributes:
101
+ label: Logs
102
+ description: "Paste relevant log output (run with `--log-level DEBUG`)"
103
+ render: shell
104
+
105
+ - type: textarea
106
+ id: context
107
+ attributes:
108
+ label: Additional context
109
+ description: Any other context about the problem
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Documentation
4
+ url: https://cipher208.github.io/a-memory/
5
+ about: Check the documentation before opening an issue
6
+ - name: Discussions
7
+ url: https://github.com/Cipher208/a-memory/discussions
8
+ about: Ask questions and discuss ideas
@@ -0,0 +1,54 @@
1
+ name: Feature Request
2
+ description: Suggest a new feature or enhancement
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for suggesting a feature! Please describe what you'd like.
9
+
10
+ - type: textarea
11
+ id: problem
12
+ attributes:
13
+ label: Problem
14
+ description: "What problem does this feature solve? Is it related to a frustration?"
15
+ placeholder: "I'm always frustrated when..."
16
+ validations:
17
+ required: true
18
+
19
+ - type: textarea
20
+ id: solution
21
+ attributes:
22
+ label: Proposed solution
23
+ description: Describe the solution you'd like
24
+ validations:
25
+ required: true
26
+
27
+ - type: textarea
28
+ id: alternatives
29
+ attributes:
30
+ label: Alternatives considered
31
+ description: Any alternative solutions or features you've considered
32
+
33
+ - type: dropdown
34
+ id: area
35
+ attributes:
36
+ label: Area
37
+ options:
38
+ - Memory (L1-L4)
39
+ - RAG / Search
40
+ - Wiki
41
+ - Knowledge Graphs
42
+ - Hooks / Lifecycle
43
+ - Authentication / Security
44
+ - MCP Tools
45
+ - Documentation
46
+ - Other
47
+ validations:
48
+ required: true
49
+
50
+ - type: textarea
51
+ id: context
52
+ attributes:
53
+ label: Additional context
54
+ description: Any other context, mockups, or examples
@@ -0,0 +1,19 @@
1
+ ## Summary
2
+
3
+ <!-- What does this PR do? Why is it needed? -->
4
+
5
+ ## Changes
6
+
7
+ <!-- Bullet list of key changes -->
8
+
9
+ ## Checklist
10
+
11
+ - [ ] Tests pass locally (`pytest tests/ -v`)
12
+ - [ ] Lint passes (`ruff check .`)
13
+ - [ ] New code has tests
14
+ - [ ] Documentation updated (if applicable)
15
+ - [ ] No breaking changes (or documented in summary)
16
+
17
+ ## Related Issues
18
+
19
+ <!-- Closes #123 -->
@@ -0,0 +1,14 @@
1
+ # CodeQL configuration to silence non-Python warnings
2
+ paths-ignore:
3
+ - 'npm/**'
4
+ - 'venv/**'
5
+ - 'node_modules/**'
6
+ - 'htmlcov/**'
7
+ - 'strix_runs/**'
8
+ - 'graphify-out/**'
9
+ - '**/*.js'
10
+ - '**/*.ts'
11
+ - '**/*.c'
12
+ - '**/*.cpp'
13
+ - '**/*.h'
14
+ - '**/*.so'
@@ -0,0 +1,7 @@
1
+ reviews:
2
+ auto_review:
3
+ enabled: false
4
+ request_changes_workflow: true
5
+ base_branches:
6
+ - master
7
+ - main
.github/dependabot.yml ADDED
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ open-pull-requests-limit: 5
8
+ labels:
9
+ - "dependencies"
10
+ commit-message:
11
+ prefix: "chore"
.github/labeler.yml ADDED
@@ -0,0 +1,25 @@
1
+ labels:
2
+ - label: "bug"
3
+ paths:
4
+ - "**/*.py"
5
+ title:
6
+ - regex: "\\bfix(es|ed)?\\b"
7
+ - regex: "\\bbug\\b"
8
+
9
+ - label: "dependencies"
10
+ paths:
11
+ - "pyproject.toml"
12
+ - "requirements*.txt"
13
+
14
+ - label: "ci"
15
+ paths:
16
+ - ".github/**"
17
+
18
+ - label: "documentation"
19
+ paths:
20
+ - "**/*.md"
21
+ - "docs/**"
22
+
23
+ - label: "tests"
24
+ paths:
25
+ - "tests/**"
@@ -0,0 +1,81 @@
1
+ name-template: 'v$RESOLVED_VERSION'
2
+ tag-template: 'v$RESOLVED_VERSION'
3
+ template: |
4
+ ## Changes
5
+
6
+ $CHANGES
7
+
8
+ ## Contributors
9
+
10
+ $CONTRIBUTORS
11
+
12
+ categories:
13
+ - title: '๐Ÿš€ Features'
14
+ labels:
15
+ - 'feature'
16
+ - 'enhancement'
17
+ - title: '๐Ÿ› Bug Fixes'
18
+ labels:
19
+ - 'fix'
20
+ - 'bugfix'
21
+ - 'bug'
22
+ - title: '๐Ÿงฐ Maintenance'
23
+ labels:
24
+ - 'chore'
25
+ - 'dependencies'
26
+ - 'refactor'
27
+ - title: '๐Ÿ“š Documentation'
28
+ labels:
29
+ - 'documentation'
30
+ - 'docs'
31
+ - title: '๐Ÿงช Testing'
32
+ labels:
33
+ - 'test'
34
+ - 'testing'
35
+ - title: '๐Ÿ”’ Security'
36
+ labels:
37
+ - 'security'
38
+
39
+ change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
40
+ change-title-escapes: '\<*_&'
41
+ version-resolver:
42
+ major:
43
+ labels:
44
+ - 'major'
45
+ minor:
46
+ labels:
47
+ - 'minor'
48
+ - 'feature'
49
+ - 'enhancement'
50
+ patch:
51
+ labels:
52
+ - 'patch'
53
+ - 'fix'
54
+ - 'bugfix'
55
+ - 'bug'
56
+ - 'chore'
57
+ - 'dependencies'
58
+ - 'documentation'
59
+ - 'test'
60
+ - 'security'
61
+ default: patch
62
+ autolabeler:
63
+ - label: 'feature'
64
+ title:
65
+ - '/^feat/i'
66
+ - label: 'fix'
67
+ title:
68
+ - '/^fix/i'
69
+ - label: 'chore'
70
+ title:
71
+ - '/^chore/i'
72
+ - '/^refactor/i'
73
+ - label: 'documentation'
74
+ title:
75
+ - '/^docs/i'
76
+ - label: 'test'
77
+ title:
78
+ - '/^test/i'
79
+ - label: 'security'
80
+ title:
81
+ - '/^security/i'
.github/release.yml ADDED
@@ -0,0 +1,22 @@
1
+ changelog:
2
+ exclude:
3
+ labels:
4
+ - ignore-for-release
5
+ authors:
6
+ - dependabot[bot]
7
+ categories:
8
+ - title: "Breaking Changes"
9
+ labels:
10
+ - breaking-change
11
+ - title: "New Features"
12
+ labels:
13
+ - enhancement
14
+ - title: "Bug Fixes"
15
+ labels:
16
+ - bug
17
+ - title: "Dependencies"
18
+ labels:
19
+ - dependencies
20
+ - title: "Other Changes"
21
+ labels:
22
+ - "*"
@@ -0,0 +1,20 @@
1
+ name: Auto Label
2
+
3
+ on:
4
+ pull_request_target:
5
+ types: [opened, synchronize, reopened]
6
+
7
+ env:
8
+ ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
9
+
10
+ permissions:
11
+ contents: read
12
+ pull-requests: write
13
+
14
+ jobs:
15
+ label:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/labeler@v5
19
+ with:
20
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,28 @@
1
+ name: Auto Merge Dependabot
2
+
3
+ on: pull_request
4
+
5
+ env:
6
+ ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
7
+
8
+ permissions:
9
+ contents: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ auto-merge:
14
+ if: github.actor == 'dependabot[bot]'
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Fetch Dependabot metadata
18
+ id: metadata
19
+ uses: dependabot/fetch-metadata@v2
20
+ with:
21
+ github-token: ${{ secrets.GITHUB_TOKEN }}
22
+
23
+ - name: Auto-merge minor and patch updates
24
+ if: steps.metadata.outputs.update-type != 'version-update:semver-major'
25
+ run: gh pr merge --auto --squash "$PR_URL"
26
+ env:
27
+ PR_URL: ${{ github.event.pull_request.html_url }}
28
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}