lorekeeper-mcp 2.1.0__tar.gz

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 (229) hide show
  1. lorekeeper_mcp-2.1.0/.claude/settings.json +29 -0
  2. lorekeeper_mcp-2.1.0/.claude/skills/after-changes/SKILL.md +51 -0
  3. lorekeeper_mcp-2.1.0/.claude/skills/ui-ux-pro-max/SKILL.md +394 -0
  4. lorekeeper_mcp-2.1.0/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -0
  5. lorekeeper_mcp-2.1.0/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  6. lorekeeper_mcp-2.1.0/.claude/skills/ui-ux-pro-max/scripts/search.py +114 -0
  7. lorekeeper_mcp-2.1.0/.githooks/commit-msg +56 -0
  8. lorekeeper_mcp-2.1.0/.githooks/pre-commit +60 -0
  9. lorekeeper_mcp-2.1.0/.githooks/pre-push +35 -0
  10. lorekeeper_mcp-2.1.0/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
  11. lorekeeper_mcp-2.1.0/.github/ISSUE_TEMPLATE/feature_request.md +27 -0
  12. lorekeeper_mcp-2.1.0/.github/PULL_REQUEST_TEMPLATE.md +47 -0
  13. lorekeeper_mcp-2.1.0/.github/copilot-instructions.md +46 -0
  14. lorekeeper_mcp-2.1.0/.github/instructions/javascript.instructions.md +29 -0
  15. lorekeeper_mcp-2.1.0/.github/instructions/python.instructions.md +43 -0
  16. lorekeeper_mcp-2.1.0/.github/instructions/scripts.instructions.md +30 -0
  17. lorekeeper_mcp-2.1.0/.github/instructions/tests.instructions.md +29 -0
  18. lorekeeper_mcp-2.1.0/.github/workflows/ci.yml +196 -0
  19. lorekeeper_mcp-2.1.0/.gitignore +31 -0
  20. lorekeeper_mcp-2.1.0/.hermes/skills/after-changes/SKILL.md +52 -0
  21. lorekeeper_mcp-2.1.0/.hermes/skills/backlog-management/SKILL.md +132 -0
  22. lorekeeper_mcp-2.1.0/.hermes/skills/commit-convention/SKILL.md +92 -0
  23. lorekeeper_mcp-2.1.0/.hermes/skills/github/fix-pr-commit-titles/SKILL.md +106 -0
  24. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-app-bot-auth/SKILL.md +229 -0
  25. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-code-review/SKILL.md +517 -0
  26. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/SKILL.md +512 -0
  27. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/references/auto-pr-hooks.md +30 -0
  28. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/references/ci-troubleshooting.md +204 -0
  29. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/references/conventional-commits.md +71 -0
  30. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
  31. lorekeeper_mcp-2.1.0/.hermes/skills/github/github-pr-workflow/templates/pr-body-feature.md +33 -0
  32. lorekeeper_mcp-2.1.0/.hermes/skills/lorekeeper-dev/SKILL.md +474 -0
  33. lorekeeper_mcp-2.1.0/.hermes/skills/lorekeeper-pm/SKILL.md +274 -0
  34. lorekeeper_mcp-2.1.0/.hermes/skills/proposal-filing/SKILL.md +117 -0
  35. lorekeeper_mcp-2.1.0/.hermes/skills/software-development/requesting-code-review/SKILL.md +298 -0
  36. lorekeeper_mcp-2.1.0/.hermes/skills/sprint-review/SKILL.md +86 -0
  37. lorekeeper_mcp-2.1.0/.hermes/skills/ui-ux-pro-max/SKILL.md +395 -0
  38. lorekeeper_mcp-2.1.0/.hermes/skills/ui-ux-pro-max/scripts/core.py +253 -0
  39. lorekeeper_mcp-2.1.0/.hermes/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  40. lorekeeper_mcp-2.1.0/.hermes/skills/ui-ux-pro-max/scripts/search.py +114 -0
  41. lorekeeper_mcp-2.1.0/.prettierrc.json +4 -0
  42. lorekeeper_mcp-2.1.0/.python-version +1 -0
  43. lorekeeper_mcp-2.1.0/CLAUDE.md +307 -0
  44. lorekeeper_mcp-2.1.0/CONTRIBUTING.md +105 -0
  45. lorekeeper_mcp-2.1.0/PKG-INFO +716 -0
  46. lorekeeper_mcp-2.1.0/README.md +675 -0
  47. lorekeeper_mcp-2.1.0/assets/dashboard-memories-tab.png +0 -0
  48. lorekeeper_mcp-2.1.0/assets/dashboard-query-tab.png +0 -0
  49. lorekeeper_mcp-2.1.0/assets/prompts/lorekeeper-agent-prompt.md +53 -0
  50. lorekeeper_mcp-2.1.0/assets/skills/lorekeeper-link-memories/SKILL.md +72 -0
  51. lorekeeper_mcp-2.1.0/assets/skills/lorekeeper-memorize/SKILL.md +110 -0
  52. lorekeeper_mcp-2.1.0/assets/skills/lorekeeper-protocol/SKILL.md +206 -0
  53. lorekeeper_mcp-2.1.0/assets/skills/lorekeeper-reconcile/SKILL.md +133 -0
  54. lorekeeper_mcp-2.1.0/assets/skills/lorekeeper-search/SKILL.md +121 -0
  55. lorekeeper_mcp-2.1.0/backlogs/TEMPLATE.md +57 -0
  56. lorekeeper_mcp-2.1.0/backlogs/cancelled/LKPR-64-automated-embedding-setup.md +66 -0
  57. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-1-optimize-reflection-dedup.md +72 -0
  58. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-16-lore-insert-false-dedup.md +142 -0
  59. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-19-fk-constraint-not-enforced.md +54 -0
  60. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-21-lore-update-field-name-bug.md +137 -0
  61. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-24-hybrid-backlog.md +97 -0
  62. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-25-setup-linter-config-precommit-githook-and-docs.md +84 -0
  63. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-26-lore-insert-missing-title-key-error.md +76 -0
  64. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-27-auto-link-similar-on-insert.md +142 -0
  65. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-28-inline-links-param-on-insert.md +86 -0
  66. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-29-lore-remember-fast-insert.md +92 -0
  67. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-3-agent-workflow-protocol-skill.md +59 -0
  68. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-30-reflect-auto-create-memories.md +94 -0
  69. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-31-switch-to-lancedb-vector-store.md +83 -0
  70. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-33-smart-setup-agent-injection.md +338 -0
  71. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-37-version-badge-in-dashboard.md +57 -0
  72. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-38-namespace-env-scoping.md +89 -0
  73. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-43-shared-serializer.md +69 -0
  74. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-44-validate-config-overrides.md +69 -0
  75. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-45-dashboard-js-event-registry.md +92 -0
  76. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-49-token-efficient-search.md +80 -0
  77. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-50-dashboard-tests-and-code-hygiene.md +93 -0
  78. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-51-linkstore-decomposition.md +249 -0
  79. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-52-lean-simplification-pass.md +101 -0
  80. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-54-lore-forget.md +70 -0
  81. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-55-post-setup-seed-prompt.md +55 -0
  82. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-58-smart-link-candidate-pipeline.md +107 -0
  83. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-6-iterative-search.md +67 -0
  84. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-60-memory-cache.md +43 -0
  85. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-66-markdown-autoformatter.md +64 -0
  86. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-7-lore-init-onboarding.md +68 -0
  87. lorekeeper_mcp-2.1.0/backlogs/done/LKPR-9-memory-decay-model.md +70 -0
  88. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-10-multi-agent-tenancy.md +62 -0
  89. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-11-proactive-push-lore-surface.md +68 -0
  90. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-12-session-end-hook.md +63 -0
  91. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-13-sleep-cycle-consolidation.md +67 -0
  92. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-17-memory-conflict-resolution.md +54 -0
  93. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-2-agent-introspection-tools.md +69 -0
  94. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-22-time-travel-queries-lore-search-at.md +77 -0
  95. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-23-memory-rehearsal-spaced-repetition.md +69 -0
  96. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-32-encrypted-backup-restore.md +99 -0
  97. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-34-cloud-lorekeeper.md +33 -0
  98. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-35-memory-quality-spec-testing.md +69 -0
  99. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-36-knowledge-debt-ratio.md +66 -0
  100. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-39-token-namespace-auth.md +96 -0
  101. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-4-context-budgeting-novelty-ranking.md +58 -0
  102. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-40-org-team-rbac.md +93 -0
  103. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-41-memory-changelog.md +66 -0
  104. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-42-context-weaving.md +66 -0
  105. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-46-daily-memory-digest.md +67 -0
  106. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-47-lore-playground.md +59 -0
  107. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-48-mcp-server-card.md +73 -0
  108. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-5-cross-session-topic-observer.md +62 -0
  109. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-53-lore-import.md +73 -0
  110. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-56-dashboard-empty-state-memories.md +71 -0
  111. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-57-pypi-publish-distribution.md +114 -0
  112. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-61-lore-search-recency-filter.md +69 -0
  113. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-62-memory-splitting.md +89 -0
  114. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-63-dreaming-orchestration.md +145 -0
  115. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-65-change-feed-research.md +67 -0
  116. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-67-revise-link-relation-types.md +108 -0
  117. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-68-cli-export-import.md +115 -0
  118. lorekeeper_mcp-2.1.0/backlogs/proposal/LKPR-8-lore-wrap-session.md +58 -0
  119. lorekeeper_mcp-2.1.0/backlogs/ready/LKPR-18-memory-provenance-tagging.md +79 -0
  120. lorekeeper_mcp-2.1.0/backlogs/ready/LKPR-20-graph-traversal-lore-related.md +95 -0
  121. lorekeeper_mcp-2.1.0/backlogs/ready/LKPR-59-dashboard-e2e-playwright.md +80 -0
  122. lorekeeper_mcp-2.1.0/biome.json +34 -0
  123. lorekeeper_mcp-2.1.0/docs/ARCHITECTURE.md +70 -0
  124. lorekeeper_mcp-2.1.0/docs/draft-README-v2.1.md +274 -0
  125. lorekeeper_mcp-2.1.0/docs/linter-decisions.md +132 -0
  126. lorekeeper_mcp-2.1.0/docs/plans/2026-05-21_142000-api-metrics-dashboard.md +115 -0
  127. lorekeeper_mcp-2.1.0/docs/plans/2026-05-23_120000-lkpr-1-26-fixes.md +45 -0
  128. lorekeeper_mcp-2.1.0/docs/plans/2026-05-24_081500-lkpr-29-lore-remember.md +131 -0
  129. lorekeeper_mcp-2.1.0/docs/plans/2026-05-27-lkpr-43-shared-serializer.md +385 -0
  130. lorekeeper_mcp-2.1.0/docs/plans/2026-05-27-lkpr-45-dashboard-js-event-registry.md +608 -0
  131. lorekeeper_mcp-2.1.0/docs/plans/2026-05-28-lkpr-43-44-combined-implementation.md +117 -0
  132. lorekeeper_mcp-2.1.0/docs/plans/2026-05-29-lkpr-45-dashboard-event-registry.md +362 -0
  133. lorekeeper_mcp-2.1.0/docs/plans/2026-05-31-lkpr-50-dashboard-tests-and-code-hygiene.md +144 -0
  134. lorekeeper_mcp-2.1.0/docs/plans/2026-05-31-lkpr-51-linkstore-decomposition.md +397 -0
  135. lorekeeper_mcp-2.1.0/docs/plans/2026-06-01-sprint-token-search-reflect-forget.md +68 -0
  136. lorekeeper_mcp-2.1.0/docs/plans/2026-06-02-lkpr-30-reflect-auto-insert.md +163 -0
  137. lorekeeper_mcp-2.1.0/docs/plans/2026-06-04_LKPR-58-smart-link-candidate-pipeline.md +139 -0
  138. lorekeeper_mcp-2.1.0/docs/plans/LKPR-52-lean-simplification-pass.md +824 -0
  139. lorekeeper_mcp-2.1.0/docs/plans/agentic-loop.md +206 -0
  140. lorekeeper_mcp-2.1.0/docs/plans/backup-feature-plan.md +274 -0
  141. lorekeeper_mcp-2.1.0/docs/plans/init-plan.md +584 -0
  142. lorekeeper_mcp-2.1.0/docs/plans/reflect-integration-plan.md +165 -0
  143. lorekeeper_mcp-2.1.0/docs/quickstart.md +143 -0
  144. lorekeeper_mcp-2.1.0/docs/research/2026-06-05-dreaming-memory-consolidation-analysis.md +189 -0
  145. lorekeeper_mcp-2.1.0/pyproject.toml +99 -0
  146. lorekeeper_mcp-2.1.0/scripts/check-branch.sh +14 -0
  147. lorekeeper_mcp-2.1.0/scripts/check_issues.py +144 -0
  148. lorekeeper_mcp-2.1.0/scripts/check_mcp_docs.py +96 -0
  149. lorekeeper_mcp-2.1.0/scripts/check_skills.py +101 -0
  150. lorekeeper_mcp-2.1.0/scripts/gh_reconcile.py +979 -0
  151. lorekeeper_mcp-2.1.0/scripts/hooks/commit-msg +56 -0
  152. lorekeeper_mcp-2.1.0/scripts/lorekeeper-backlog.sh +70 -0
  153. lorekeeper_mcp-2.1.0/scripts/next-ticket-number.sh +33 -0
  154. lorekeeper_mcp-2.1.0/scripts/seed_lancedb.py +57 -0
  155. lorekeeper_mcp-2.1.0/scripts/setup.sh +541 -0
  156. lorekeeper_mcp-2.1.0/scripts/smoke_test.py +100 -0
  157. lorekeeper_mcp-2.1.0/scripts/validate-ticket.sh +141 -0
  158. lorekeeper_mcp-2.1.0/src/lorekeeper/__init__.py +0 -0
  159. lorekeeper_mcp-2.1.0/src/lorekeeper/__main__.py +14 -0
  160. lorekeeper_mcp-2.1.0/src/lorekeeper/config.py +78 -0
  161. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/__init__.py +40 -0
  162. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/__main__.py +3 -0
  163. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/app.py +79 -0
  164. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/__init__.py +0 -0
  165. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/backup.py +57 -0
  166. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/config.py +97 -0
  167. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/links.py +68 -0
  168. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/memories.py +70 -0
  169. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/metrics.py +32 -0
  170. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/reflections.py +52 -0
  171. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/routes/search.py +33 -0
  172. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/css/styles.css +789 -0
  173. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/index.html +336 -0
  174. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/api.js +23 -0
  175. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/app.js +123 -0
  176. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/backup.js +150 -0
  177. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/config.js +269 -0
  178. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/detail.js +358 -0
  179. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/links.js +107 -0
  180. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/memories.js +254 -0
  181. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/metrics.js +300 -0
  182. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/query.js +57 -0
  183. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/reflections.js +133 -0
  184. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/runs.js +105 -0
  185. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/sessions.js +227 -0
  186. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/state.js +50 -0
  187. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/tab-registry.js +17 -0
  188. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/tab.js +140 -0
  189. lorekeeper_mcp-2.1.0/src/lorekeeper/dashboard/static/js/utils.js +86 -0
  190. lorekeeper_mcp-2.1.0/src/lorekeeper/logging_setup.py +73 -0
  191. lorekeeper_mcp-2.1.0/src/lorekeeper/models.py +69 -0
  192. lorekeeper_mcp-2.1.0/src/lorekeeper/serializers.py +186 -0
  193. lorekeeper_mcp-2.1.0/src/lorekeeper/server.py +415 -0
  194. lorekeeper_mcp-2.1.0/src/lorekeeper/services/__init__.py +0 -0
  195. lorekeeper_mcp-2.1.0/src/lorekeeper/services/chromadb_engine.py +205 -0
  196. lorekeeper_mcp-2.1.0/src/lorekeeper/services/config_store.py +49 -0
  197. lorekeeper_mcp-2.1.0/src/lorekeeper/services/database.py +414 -0
  198. lorekeeper_mcp-2.1.0/src/lorekeeper/services/dedup.py +9 -0
  199. lorekeeper_mcp-2.1.0/src/lorekeeper/services/engine_factory.py +18 -0
  200. lorekeeper_mcp-2.1.0/src/lorekeeper/services/feedback.py +29 -0
  201. lorekeeper_mcp-2.1.0/src/lorekeeper/services/keyword_index.py +41 -0
  202. lorekeeper_mcp-2.1.0/src/lorekeeper/services/lancedb_engine.py +152 -0
  203. lorekeeper_mcp-2.1.0/src/lorekeeper/services/link_candidate.py +290 -0
  204. lorekeeper_mcp-2.1.0/src/lorekeeper/services/link_store.py +152 -0
  205. lorekeeper_mcp-2.1.0/src/lorekeeper/services/memory_engine.py +55 -0
  206. lorekeeper_mcp-2.1.0/src/lorekeeper/services/memory_store.py +177 -0
  207. lorekeeper_mcp-2.1.0/src/lorekeeper/services/metrics_store.py +84 -0
  208. lorekeeper_mcp-2.1.0/src/lorekeeper/services/orchestrator.py +987 -0
  209. lorekeeper_mcp-2.1.0/src/lorekeeper/services/reflection_store.py +140 -0
  210. lorekeeper_mcp-2.1.0/src/lorekeeper/services/search.py +107 -0
  211. lorekeeper_mcp-2.1.0/tests/__init__.py +0 -0
  212. lorekeeper_mcp-2.1.0/tests/_helpers.py +68 -0
  213. lorekeeper_mcp-2.1.0/tests/test_chromadb_engine.py +148 -0
  214. lorekeeper_mcp-2.1.0/tests/test_config.py +12 -0
  215. lorekeeper_mcp-2.1.0/tests/test_dashboard.py +468 -0
  216. lorekeeper_mcp-2.1.0/tests/test_database.py +283 -0
  217. lorekeeper_mcp-2.1.0/tests/test_dedup.py +28 -0
  218. lorekeeper_mcp-2.1.0/tests/test_feedback.py +70 -0
  219. lorekeeper_mcp-2.1.0/tests/test_handlers.py +354 -0
  220. lorekeeper_mcp-2.1.0/tests/test_keyword_index.py +56 -0
  221. lorekeeper_mcp-2.1.0/tests/test_lancedb_engine.py +108 -0
  222. lorekeeper_mcp-2.1.0/tests/test_link_store.py +213 -0
  223. lorekeeper_mcp-2.1.0/tests/test_lkpr58_link_candidate.py +638 -0
  224. lorekeeper_mcp-2.1.0/tests/test_lkpr60_lkpr54.py +162 -0
  225. lorekeeper_mcp-2.1.0/tests/test_orchestrator.py +1024 -0
  226. lorekeeper_mcp-2.1.0/tests/test_pr111_review_fixes.py +200 -0
  227. lorekeeper_mcp-2.1.0/tests/test_search.py +117 -0
  228. lorekeeper_mcp-2.1.0/tests/test_serializers.py +257 -0
  229. lorekeeper_mcp-2.1.0/uv.lock +4934 -0
@@ -0,0 +1,29 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(uv run *)",
5
+ "Bash(curl -s http://localhost:7777/api/memories?include_deleted=false)",
6
+ "Bash(python3 -c \"import sys, json; d=json.load\\(sys.stdin\\); print\\(f'OK: {len\\(d\\)} memories'\\)\")",
7
+ "Bash(kill %1)",
8
+ "Bash(wait)",
9
+ "Bash(git commit:*)",
10
+ "Bash(git branch *)",
11
+ "Bash(cat)",
12
+ "Bash(chmod +x /tmp/git-rebase-sequence.sh)",
13
+ "Bash(git remote *)",
14
+ "Bash(git push *)"
15
+ ]
16
+ },
17
+ "hooks": {
18
+ "Stop": [
19
+ {
20
+ "hooks": [
21
+ {
22
+ "type": "command",
23
+ "command": "find \"$(git -C \"$(dirname \"$0\")\" rev-parse --show-toplevel 2>/dev/null || echo .)\" -maxdepth 1 -name '*.skill' -delete"
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: after-changes
3
+ description: Post-change checklist to run after any set of code edits. Runs three steps in sequence: (1) code review via /simplify, (2) README consistency check and update, (3) git commit. Trigger on phrases like "review and commit", "after-changes", "wrap up changes", "commit my changes", or when the user says to remember to do this after every change.
4
+ ---
5
+
6
+ # After-Changes Checklist
7
+
8
+ Run these three steps in sequence after every set of code changes.
9
+
10
+ ## Step 1 — Code Review
11
+
12
+ Run the `/simplify` skill. Wait for it to complete and apply all fixes before moving on.
13
+
14
+ ## Step 2 — README Check
15
+
16
+ 1. Run `git diff HEAD` (or `git diff HEAD~1` if already staged/committed) to get the full list of changed files and what changed.
17
+ 2. Read `README.md`.
18
+ 3. For each changed file, check: does the README make a claim about this file, its API, its behaviour, or its config that is now stale?
19
+ 4. Common staleness patterns:
20
+ - New env vars / config keys not in the config table
21
+ - API endpoints added, removed, or renamed
22
+ - New UI tabs, features, or workflows not described
23
+ - Architecture claims that no longer match the code
24
+ - "Cannot do X" statements that are now wrong
25
+ 5. If anything is stale or missing, update `README.md` in-place. Keep changes minimal — add what's missing, fix what's wrong, remove nothing that's still true.
26
+ 6. If README is already accurate, say so and skip.
27
+
28
+ ## Step 3 — Commit
29
+
30
+ 1. Run `git status` and `git diff HEAD` to review everything that will be committed.
31
+ 2. Stage all relevant changed files (be explicit — avoid `git add -A`).
32
+ 3. Write a commit message following this format:
33
+
34
+ ```
35
+ <type>(<scope>): <short summary under 72 chars>
36
+
37
+ - bullet for each logical change
38
+ - explain WHY for non-obvious changes
39
+
40
+ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41
+ ```
42
+
43
+ Types: `feat`, `fix`, `refactor`, `docs`, `chore`, `test`
44
+
45
+ 4. Confirm the commit hash and summary.
46
+
47
+ ## Notes
48
+
49
+ - If Step 1 (simplify) finds and fixes issues, re-check README in Step 2 for any new staleness those fixes introduced.
50
+ - If there is nothing to commit (working tree clean), say so and stop.
51
+ - Do not push — only commit locally unless the user explicitly asks to push.
@@ -0,0 +1,394 @@
1
+ ---
2
+ name: ui-ux-pro-max
3
+ description: "UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples."
4
+ ---
5
+
6
+ # UI/UX Pro Max - Design Intelligence
7
+
8
+ Comprehensive design guide for web and mobile applications. Contains 67 styles, 96 color palettes, 57 font pairings, 99 UX guidelines, and 25 chart types across 13 technology stacks. Searchable database with priority-based recommendations.
9
+
10
+ ## When to Apply
11
+
12
+ Reference these guidelines when:
13
+
14
+ - Designing new UI components or pages
15
+ - Choosing color palettes and typography
16
+ - Reviewing code for UX issues
17
+ - Building landing pages or dashboards
18
+ - Implementing accessibility requirements
19
+
20
+ ## Rule Categories by Priority
21
+
22
+ | Priority | Category | Impact | Domain |
23
+ | -------- | ------------------- | -------- | --------------------- |
24
+ | 1 | Accessibility | CRITICAL | `ux` |
25
+ | 2 | Touch & Interaction | CRITICAL | `ux` |
26
+ | 3 | Performance | HIGH | `ux` |
27
+ | 4 | Layout & Responsive | HIGH | `ux` |
28
+ | 5 | Typography & Color | MEDIUM | `typography`, `color` |
29
+ | 6 | Animation | MEDIUM | `ux` |
30
+ | 7 | Style Selection | MEDIUM | `style`, `product` |
31
+ | 8 | Charts & Data | LOW | `chart` |
32
+
33
+ ## Quick Reference
34
+
35
+ ### 1. Accessibility (CRITICAL)
36
+
37
+ - `color-contrast` - Minimum 4.5:1 ratio for normal text
38
+ - `focus-states` - Visible focus rings on interactive elements
39
+ - `alt-text` - Descriptive alt text for meaningful images
40
+ - `aria-labels` - aria-label for icon-only buttons
41
+ - `keyboard-nav` - Tab order matches visual order
42
+ - `form-labels` - Use label with for attribute
43
+
44
+ ### 2. Touch & Interaction (CRITICAL)
45
+
46
+ - `touch-target-size` - Minimum 44x44px touch targets
47
+ - `hover-vs-tap` - Use click/tap for primary interactions
48
+ - `loading-buttons` - Disable button during async operations
49
+ - `error-feedback` - Clear error messages near problem
50
+ - `cursor-pointer` - Add cursor-pointer to clickable elements
51
+
52
+ ### 3. Performance (HIGH)
53
+
54
+ - `image-optimization` - Use WebP, srcset, lazy loading
55
+ - `reduced-motion` - Check prefers-reduced-motion
56
+ - `content-jumping` - Reserve space for async content
57
+
58
+ ### 4. Layout & Responsive (HIGH)
59
+
60
+ - `viewport-meta` - width=device-width initial-scale=1
61
+ - `readable-font-size` - Minimum 16px body text on mobile
62
+ - `horizontal-scroll` - Ensure content fits viewport width
63
+ - `z-index-management` - Define z-index scale (10, 20, 30, 50)
64
+
65
+ ### 5. Typography & Color (MEDIUM)
66
+
67
+ - `line-height` - Use 1.5-1.75 for body text
68
+ - `line-length` - Limit to 65-75 characters per line
69
+ - `font-pairing` - Match heading/body font personalities
70
+
71
+ ### 6. Animation (MEDIUM)
72
+
73
+ - `duration-timing` - Use 150-300ms for micro-interactions
74
+ - `transform-performance` - Use transform/opacity, not width/height
75
+ - `loading-states` - Skeleton screens or spinners
76
+
77
+ ### 7. Style Selection (MEDIUM)
78
+
79
+ - `style-match` - Match style to product type
80
+ - `consistency` - Use same style across all pages
81
+ - `no-emoji-icons` - Use SVG icons, not emojis
82
+
83
+ ### 8. Charts & Data (LOW)
84
+
85
+ - `chart-type` - Match chart type to data type
86
+ - `color-guidance` - Use accessible color palettes
87
+ - `data-table` - Provide table alternative for accessibility
88
+
89
+ ## How to Use
90
+
91
+ Search specific domains using the CLI tool below.
92
+
93
+ ---
94
+
95
+ ## Prerequisites
96
+
97
+ Check if Python is installed:
98
+
99
+ ```bash
100
+ python3 --version || python --version
101
+ ```
102
+
103
+ If Python is not installed, install it based on user's OS:
104
+
105
+ **macOS:**
106
+
107
+ ```bash
108
+ brew install python3
109
+ ```
110
+
111
+ **Ubuntu/Debian:**
112
+
113
+ ```bash
114
+ sudo apt update && sudo apt install python3
115
+ ```
116
+
117
+ **Windows:**
118
+
119
+ ```powershell
120
+ winget install Python.Python.3.12
121
+ ```
122
+
123
+ ---
124
+
125
+ ## How to Use This Skill
126
+
127
+ When user requests UI/UX work (design, build, create, implement, review, fix, improve), follow this workflow:
128
+
129
+ ### Step 1: Analyze User Requirements
130
+
131
+ Extract key information from user request:
132
+
133
+ - **Product type**: SaaS, e-commerce, portfolio, dashboard, landing page, etc.
134
+ - **Style keywords**: minimal, playful, professional, elegant, dark mode, etc.
135
+ - **Industry**: healthcare, fintech, gaming, education, etc.
136
+ - **Stack**: React, Vue, Next.js, or default to `html-tailwind`
137
+
138
+ ### Step 2: Generate Design System (REQUIRED)
139
+
140
+ **Always start with `--design-system`** to get comprehensive recommendations with reasoning:
141
+
142
+ ```bash
143
+ python3 skills/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <keywords>" --design-system [-p "Project Name"]
144
+ ```
145
+
146
+ This command:
147
+
148
+ 1. Searches 5 domains in parallel (product, style, color, landing, typography)
149
+ 2. Applies reasoning rules from `ui-reasoning.csv` to select best matches
150
+ 3. Returns complete design system: pattern, style, colors, typography, effects
151
+ 4. Includes anti-patterns to avoid
152
+
153
+ **Example:**
154
+
155
+ ```bash
156
+ python3 skills/ui-ux-pro-max/scripts/search.py "beauty spa wellness service" --design-system -p "Serenity Spa"
157
+ ```
158
+
159
+ ### Step 2b: Persist Design System (Master + Overrides Pattern)
160
+
161
+ To save the design system for hierarchical retrieval across sessions, add `--persist`:
162
+
163
+ ```bash
164
+ python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name"
165
+ ```
166
+
167
+ This creates:
168
+
169
+ - `design-system/MASTER.md` — Global Source of Truth with all design rules
170
+ - `design-system/pages/` — Folder for page-specific overrides
171
+
172
+ **With page-specific override:**
173
+
174
+ ```bash
175
+ python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name" --page "dashboard"
176
+ ```
177
+
178
+ This also creates:
179
+
180
+ - `design-system/pages/dashboard.md` — Page-specific deviations from Master
181
+
182
+ **How hierarchical retrieval works:**
183
+
184
+ 1. When building a specific page (e.g., "Checkout"), first check `design-system/pages/checkout.md`
185
+ 2. If the page file exists, its rules **override** the Master file
186
+ 3. If not, use `design-system/MASTER.md` exclusively
187
+
188
+ ### Step 3: Supplement with Detailed Searches (as needed)
189
+
190
+ After getting the design system, use domain searches to get additional details:
191
+
192
+ ```bash
193
+ python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
194
+ ```
195
+
196
+ **When to use detailed searches:**
197
+
198
+ | Need | Domain | Example |
199
+ | --------------------- | ------------ | --------------------------------------- |
200
+ | More style options | `style` | `--domain style "glassmorphism dark"` |
201
+ | Chart recommendations | `chart` | `--domain chart "real-time dashboard"` |
202
+ | UX best practices | `ux` | `--domain ux "animation accessibility"` |
203
+ | Alternative fonts | `typography` | `--domain typography "elegant luxury"` |
204
+ | Landing structure | `landing` | `--domain landing "hero social-proof"` |
205
+
206
+ ### Step 4: Stack Guidelines (Default: html-tailwind)
207
+
208
+ Get implementation-specific best practices. If user doesn't specify a stack, **default to `html-tailwind`**.
209
+
210
+ ```bash
211
+ python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --stack html-tailwind
212
+ ```
213
+
214
+ Available stacks: `html-tailwind`, `react`, `nextjs`, `vue`, `svelte`, `swiftui`, `react-native`, `flutter`, `shadcn`, `jetpack-compose`
215
+
216
+ ---
217
+
218
+ ## Search Reference
219
+
220
+ ### Available Domains
221
+
222
+ | Domain | Use For | Example Keywords |
223
+ | ------------ | ------------------------------------ | -------------------------------------------------------- |
224
+ | `product` | Product type recommendations | SaaS, e-commerce, portfolio, healthcare, beauty, service |
225
+ | `style` | UI styles, colors, effects | glassmorphism, minimalism, dark mode, brutalism |
226
+ | `typography` | Font pairings, Google Fonts | elegant, playful, professional, modern |
227
+ | `color` | Color palettes by product type | saas, ecommerce, healthcare, beauty, fintech, service |
228
+ | `landing` | Page structure, CTA strategies | hero, hero-centric, testimonial, pricing, social-proof |
229
+ | `chart` | Chart types, library recommendations | trend, comparison, timeline, funnel, pie |
230
+ | `ux` | Best practices, anti-patterns | animation, accessibility, z-index, loading |
231
+ | `react` | React/Next.js performance | waterfall, bundle, suspense, memo, rerender, cache |
232
+ | `web` | Web interface guidelines | aria, focus, keyboard, semantic, virtualize |
233
+ | `prompt` | AI prompts, CSS keywords | (style name) |
234
+
235
+ ### Available Stacks
236
+
237
+ | Stack | Focus |
238
+ | ----------------- | ----------------------------------------------------- |
239
+ | `html-tailwind` | Tailwind utilities, responsive, a11y (DEFAULT) |
240
+ | `react` | State, hooks, performance, patterns |
241
+ | `nextjs` | SSR, routing, images, API routes |
242
+ | `vue` | Composition API, Pinia, Vue Router |
243
+ | `svelte` | Runes, stores, SvelteKit |
244
+ | `swiftui` | Views, State, Navigation, Animation |
245
+ | `react-native` | Components, Navigation, Lists |
246
+ | `flutter` | Widgets, State, Layout, Theming |
247
+ | `shadcn` | shadcn/ui components, theming, forms, patterns |
248
+ | `jetpack-compose` | Composables, Modifiers, State Hoisting, Recomposition |
249
+
250
+ ---
251
+
252
+ ## Example Workflow
253
+
254
+ **User request:** "Làm landing page cho dịch vụ chăm sóc da chuyên nghiệp"
255
+
256
+ ### Step 1: Analyze Requirements
257
+
258
+ - Product type: Beauty/Spa service
259
+ - Style keywords: elegant, professional, soft
260
+ - Industry: Beauty/Wellness
261
+ - Stack: html-tailwind (default)
262
+
263
+ ### Step 2: Generate Design System (REQUIRED)
264
+
265
+ ```bash
266
+ python3 skills/ui-ux-pro-max/scripts/search.py "beauty spa wellness service elegant" --design-system -p "Serenity Spa"
267
+ ```
268
+
269
+ **Output:** Complete design system with pattern, style, colors, typography, effects, and anti-patterns.
270
+
271
+ ### Step 3: Supplement with Detailed Searches (as needed)
272
+
273
+ ```bash
274
+ # Get UX guidelines for animation and accessibility
275
+ python3 skills/ui-ux-pro-max/scripts/search.py "animation accessibility" --domain ux
276
+
277
+ # Get alternative typography options if needed
278
+ python3 skills/ui-ux-pro-max/scripts/search.py "elegant luxury serif" --domain typography
279
+ ```
280
+
281
+ ### Step 4: Stack Guidelines
282
+
283
+ ```bash
284
+ python3 skills/ui-ux-pro-max/scripts/search.py "layout responsive form" --stack html-tailwind
285
+ ```
286
+
287
+ **Then:** Synthesize design system + detailed searches and implement the design.
288
+
289
+ ---
290
+
291
+ ## Output Formats
292
+
293
+ The `--design-system` flag supports two output formats:
294
+
295
+ ```bash
296
+ # ASCII box (default) - best for terminal display
297
+ python3 skills/ui-ux-pro-max/scripts/search.py "fintech crypto" --design-system
298
+
299
+ # Markdown - best for documentation
300
+ python3 skills/ui-ux-pro-max/scripts/search.py "fintech crypto" --design-system -f markdown
301
+ ```
302
+
303
+ ---
304
+
305
+ ## Tips for Better Results
306
+
307
+ 1. **Be specific with keywords** - "healthcare SaaS dashboard" > "app"
308
+ 2. **Search multiple times** - Different keywords reveal different insights
309
+ 3. **Combine domains** - Style + Typography + Color = Complete design system
310
+ 4. **Always check UX** - Search "animation", "z-index", "accessibility" for common issues
311
+ 5. **Use stack flag** - Get implementation-specific best practices
312
+ 6. **Iterate** - If first search doesn't match, try different keywords
313
+
314
+ ---
315
+
316
+ ## Common Rules for Professional UI
317
+
318
+ These are frequently overlooked issues that make UI look unprofessional:
319
+
320
+ ### Icons & Visual Elements
321
+
322
+ | Rule | Do | Don't |
323
+ | -------------------------- | ----------------------------------------------- | -------------------------------------- |
324
+ | **No emoji icons** | Use SVG icons (Heroicons, Lucide, Simple Icons) | Use emojis like 🎨 🚀 ⚙️ as UI icons |
325
+ | **Stable hover states** | Use color/opacity transitions on hover | Use scale transforms that shift layout |
326
+ | **Correct brand logos** | Research official SVG from Simple Icons | Guess or use incorrect logo paths |
327
+ | **Consistent icon sizing** | Use fixed viewBox (24x24) with w-6 h-6 | Mix different icon sizes randomly |
328
+
329
+ ### Interaction & Cursor
330
+
331
+ | Rule | Do | Don't |
332
+ | ---------------------- | ----------------------------------------------------- | -------------------------------------------- |
333
+ | **Cursor pointer** | Add `cursor-pointer` to all clickable/hoverable cards | Leave default cursor on interactive elements |
334
+ | **Hover feedback** | Provide visual feedback (color, shadow, border) | No indication element is interactive |
335
+ | **Smooth transitions** | Use `transition-colors duration-200` | Instant state changes or too slow (>500ms) |
336
+
337
+ ### Light/Dark Mode Contrast
338
+
339
+ | Rule | Do | Don't |
340
+ | ------------------------- | ----------------------------------- | --------------------------------------- |
341
+ | **Glass card light mode** | Use `bg-white/80` or higher opacity | Use `bg-white/10` (too transparent) |
342
+ | **Text contrast light** | Use `#0F172A` (slate-900) for text | Use `#94A3B8` (slate-400) for body text |
343
+ | **Muted text light** | Use `#475569` (slate-600) minimum | Use gray-400 or lighter |
344
+ | **Border visibility** | Use `border-gray-200` in light mode | Use `border-white/10` (invisible) |
345
+
346
+ ### Layout & Spacing
347
+
348
+ | Rule | Do | Don't |
349
+ | ------------------------ | ----------------------------------- | -------------------------------------- |
350
+ | **Floating navbar** | Add `top-4 left-4 right-4` spacing | Stick navbar to `top-0 left-0 right-0` |
351
+ | **Content padding** | Account for fixed navbar height | Let content hide behind fixed elements |
352
+ | **Consistent max-width** | Use same `max-w-6xl` or `max-w-7xl` | Mix different container widths |
353
+
354
+ ---
355
+
356
+ ## Pre-Delivery Checklist
357
+
358
+ Before delivering UI code, verify these items:
359
+
360
+ ### Visual Quality
361
+
362
+ - [ ] No emojis used as icons (use SVG instead)
363
+ - [ ] All icons from consistent icon set (Heroicons/Lucide)
364
+ - [ ] Brand logos are correct (verified from Simple Icons)
365
+ - [ ] Hover states don't cause layout shift
366
+ - [ ] Use theme colors directly (bg-primary) not var() wrapper
367
+
368
+ ### Interaction
369
+
370
+ - [ ] All clickable elements have `cursor-pointer`
371
+ - [ ] Hover states provide clear visual feedback
372
+ - [ ] Transitions are smooth (150-300ms)
373
+ - [ ] Focus states visible for keyboard navigation
374
+
375
+ ### Light/Dark Mode
376
+
377
+ - [ ] Light mode text has sufficient contrast (4.5:1 minimum)
378
+ - [ ] Glass/transparent elements visible in light mode
379
+ - [ ] Borders visible in both modes
380
+ - [ ] Test both modes before delivery
381
+
382
+ ### Layout
383
+
384
+ - [ ] Floating elements have proper spacing from edges
385
+ - [ ] No content hidden behind fixed navbars
386
+ - [ ] Responsive at 375px, 768px, 1024px, 1440px
387
+ - [ ] No horizontal scroll on mobile
388
+
389
+ ### Accessibility
390
+
391
+ - [ ] All images have alt text
392
+ - [ ] Form inputs have labels
393
+ - [ ] Color is not the only indicator
394
+ - [ ] `prefers-reduced-motion` respected