turbo-quant-memory 0.28.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.
- turbo_quant_memory-0.28.0/.github/workflows/ci.yml +61 -0
- turbo_quant_memory-0.28.0/.github/workflows/publish.yml +52 -0
- turbo_quant_memory-0.28.0/.gitignore +16 -0
- turbo_quant_memory-0.28.0/.planning/PROJECT.md +100 -0
- turbo_quant_memory-0.28.0/.planning/REQUIREMENTS.md +135 -0
- turbo_quant_memory-0.28.0/.planning/ROADMAP.md +183 -0
- turbo_quant_memory-0.28.0/.planning/STATE.md +132 -0
- turbo_quant_memory-0.28.0/.planning/config.json +36 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-01-PLAN.md +124 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-01-SUMMARY.md +125 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-02-PLAN.md +129 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-02-SUMMARY.md +104 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-03-PLAN.md +98 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-03-SUMMARY.md +91 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-CONTEXT.md +110 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-DISCUSSION-LOG.md +77 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-RESEARCH.md +214 -0
- turbo_quant_memory-0.28.0/.planning/phases/01-client-integration-foundation/01-VALIDATION.md +84 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-01-PLAN.md +125 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-01-SUMMARY.md +113 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-02-PLAN.md +125 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-02-SUMMARY.md +98 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-03-PLAN.md +114 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-03-SUMMARY.md +109 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-CONTEXT.md +124 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-DISCUSSION-LOG.md +93 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-RESEARCH.md +246 -0
- turbo_quant_memory-0.28.0/.planning/phases/02-namespace-model/02-VALIDATION.md +84 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-01-PLAN.md +119 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-01-SUMMARY.md +91 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-02-PLAN.md +119 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-02-SUMMARY.md +96 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-03-PLAN.md +133 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-03-SUMMARY.md +103 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-RESEARCH.md +472 -0
- turbo_quant_memory-0.28.0/.planning/phases/03-markdown-ingestion/03-VALIDATION.md +84 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-01-PLAN.md +126 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-01-SUMMARY.md +100 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-02-PLAN.md +130 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-02-SUMMARY.md +99 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-03-PLAN.md +133 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-03-SUMMARY.md +102 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-CONTEXT.md +124 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-DISCUSSION-LOG.md +76 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-RESEARCH.md +307 -0
- turbo_quant_memory-0.28.0/.planning/phases/04-compressed-retrieval/04-VALIDATION.md +83 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-01-PLAN.md +106 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-01-SUMMARY.md +31 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-02-PLAN.md +108 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-02-SUMMARY.md +34 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-03-PLAN.md +129 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-03-SUMMARY.md +35 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-CONTEXT.md +124 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-DISCUSSION-LOG.md +82 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-RESEARCH.md +265 -0
- turbo_quant_memory-0.28.0/.planning/phases/05-hydration-and-write-back/05-VALIDATION.md +87 -0
- turbo_quant_memory-0.28.0/.planning/phases/06-hardening-and-adoption/06-01-PLAN.md +43 -0
- turbo_quant_memory-0.28.0/.planning/phases/06-hardening-and-adoption/06-01-SUMMARY.md +35 -0
- turbo_quant_memory-0.28.0/.planning/phases/06-hardening-and-adoption/06-CONTEXT.md +19 -0
- turbo_quant_memory-0.28.0/.planning/phases/06-hardening-and-adoption/06-RESEARCH.md +16 -0
- turbo_quant_memory-0.28.0/.planning/phases/06-hardening-and-adoption/06-VALIDATION.md +19 -0
- turbo_quant_memory-0.28.0/.planning/phases/08-memory-resilience-migration-stats-release-rollout-and-client-refresh/.gitkeep +0 -0
- turbo_quant_memory-0.28.0/.planning/phases/08-memory-resilience-migration-stats-release-rollout-and-client-refresh/08-01-PLAN.md +45 -0
- turbo_quant_memory-0.28.0/.planning/phases/08-memory-resilience-migration-stats-release-rollout-and-client-refresh/08-01-SUMMARY.md +41 -0
- turbo_quant_memory-0.28.0/.planning/phases/08-memory-resilience-migration-stats-release-rollout-and-client-refresh/08-CONTEXT.md +20 -0
- turbo_quant_memory-0.28.0/.planning/phases/08-memory-resilience-migration-stats-release-rollout-and-client-refresh/08-VALIDATION.md +26 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/.gitkeep +0 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-01-PLAN.md +79 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-01-SUMMARY.md +60 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-02-PLAN.md +70 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-02-SUMMARY.md +49 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-03-PLAN.md +74 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-03-SUMMARY.md +80 -0
- turbo_quant_memory-0.28.0/.planning/phases/09-secrets-vault/09-CONTEXT.md +77 -0
- turbo_quant_memory-0.28.0/.planning/quick/260403-fe0-implement-knowledge-base-lint-tool-and-d/260403-fe0-PLAN.md +38 -0
- turbo_quant_memory-0.28.0/.planning/quick/260403-fe0-implement-knowledge-base-lint-tool-and-d/260403-fe0-SUMMARY.md +60 -0
- turbo_quant_memory-0.28.0/.planning/research/ARCHITECTURE.md +70 -0
- turbo_quant_memory-0.28.0/.planning/research/FEATURES.md +58 -0
- turbo_quant_memory-0.28.0/.planning/research/PITFALLS.md +46 -0
- turbo_quant_memory-0.28.0/.planning/research/STACK.md +60 -0
- turbo_quant_memory-0.28.0/.planning/research/SUMMARY.md +37 -0
- turbo_quant_memory-0.28.0/.planning/todos/2026-04-28-lint-false-positives.md +78 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-cache-storage-stats-and-server-info.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-decouple-writes-from-embedder.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-detect-stale-index-freshness.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-harden-hybrid-scope-isolation.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-improve-unicode-lexical-ranking.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-make-retrieval-sync-incremental.md +18 -0
- turbo_quant_memory-0.28.0/.planning/todos/completed/2026-04-03-prune-removed-markdown-roots.md +18 -0
- turbo_quant_memory-0.28.0/.tqmemoryignore +9 -0
- turbo_quant_memory-0.28.0/AGENTS.md +72 -0
- turbo_quant_memory-0.28.0/AUDIT_REPORT.md +246 -0
- turbo_quant_memory-0.28.0/AUDIT_REPORT_v0.22.md +388 -0
- turbo_quant_memory-0.28.0/AUDIT_REPORT_v0.23.md +322 -0
- turbo_quant_memory-0.28.0/CHANGELOG.md +1190 -0
- turbo_quant_memory-0.28.0/CLAUDE.md +25 -0
- turbo_quant_memory-0.28.0/CLIENT_INTEGRATIONS.md +111 -0
- turbo_quant_memory-0.28.0/CLIENT_INTEGRATIONS.ru.md +111 -0
- turbo_quant_memory-0.28.0/CLIENT_INTEGRATIONS.uk.md +111 -0
- turbo_quant_memory-0.28.0/LICENSE +21 -0
- turbo_quant_memory-0.28.0/MEMORY_STRATEGY.md +215 -0
- turbo_quant_memory-0.28.0/MEMORY_STRATEGY.ru.md +215 -0
- turbo_quant_memory-0.28.0/MEMORY_STRATEGY.uk.md +215 -0
- turbo_quant_memory-0.28.0/PKG-INFO +179 -0
- turbo_quant_memory-0.28.0/README.md +141 -0
- turbo_quant_memory-0.28.0/README.ru.md +139 -0
- turbo_quant_memory-0.28.0/README.uk.md +139 -0
- turbo_quant_memory-0.28.0/TECHNICAL_SPEC.md +289 -0
- turbo_quant_memory-0.28.0/TECHNICAL_SPEC.ru.md +255 -0
- turbo_quant_memory-0.28.0/TECHNICAL_SPEC.uk.md +255 -0
- turbo_quant_memory-0.28.0/assets/readme-hero-en.svg +92 -0
- turbo_quant_memory-0.28.0/assets/readme-hero-ru.svg +98 -0
- turbo_quant_memory-0.28.0/assets/readme-hero-uk.svg +98 -0
- turbo_quant_memory-0.28.0/assets/social-preview.png +0 -0
- turbo_quant_memory-0.28.0/benchmarks/latest.json +402 -0
- turbo_quant_memory-0.28.0/benchmarks/latest.md +54 -0
- turbo_quant_memory-0.28.0/benchmarks/latest.ru.md +54 -0
- turbo_quant_memory-0.28.0/benchmarks/latest.uk.md +54 -0
- turbo_quant_memory-0.28.0/benchmarks/retrieval_quality_notes.json +139 -0
- turbo_quant_memory-0.28.0/benchmarks/retrieval_quality_notes.md +45 -0
- turbo_quant_memory-0.28.0/benchmarks/summary-en.svg +73 -0
- turbo_quant_memory-0.28.0/benchmarks/summary-ru.svg +73 -0
- turbo_quant_memory-0.28.0/benchmarks/summary-uk.svg +73 -0
- turbo_quant_memory-0.28.0/docs/features.md +59 -0
- turbo_quant_memory-0.28.0/docs/features.ru.md +59 -0
- turbo_quant_memory-0.28.0/docs/features.uk.md +59 -0
- turbo_quant_memory-0.28.0/docs/hermes.md +98 -0
- turbo_quant_memory-0.28.0/docs/hermes.ru.md +98 -0
- turbo_quant_memory-0.28.0/docs/hermes.uk.md +98 -0
- turbo_quant_memory-0.28.0/docs/secrets-vault.md +75 -0
- turbo_quant_memory-0.28.0/docs/secrets-vault.ru.md +68 -0
- turbo_quant_memory-0.28.0/docs/secrets-vault.uk.md +68 -0
- turbo_quant_memory-0.28.0/docs/superpowers/plans/2026-05-30-user-flagged-memory.md +585 -0
- turbo_quant_memory-0.28.0/docs/superpowers/plans/2026-07-25-agent-skill.md +778 -0
- turbo_quant_memory-0.28.0/docs/superpowers/specs/2026-05-30-user-flagged-memory-design.md +75 -0
- turbo_quant_memory-0.28.0/docs/superpowers/specs/2026-06-06-project-identity-lifecycle-design.md +117 -0
- turbo_quant_memory-0.28.0/docs/superpowers/specs/2026-07-25-agent-skill-design.md +98 -0
- turbo_quant_memory-0.28.0/examples/clients/SMOKE_CHECKLIST.md +107 -0
- turbo_quant_memory-0.28.0/examples/clients/SMOKE_CHECKLIST.ru.md +106 -0
- turbo_quant_memory-0.28.0/examples/clients/SMOKE_CHECKLIST.uk.md +106 -0
- turbo_quant_memory-0.28.0/examples/clients/antigravity.mcp.json +10 -0
- turbo_quant_memory-0.28.0/examples/clients/claude.project.mcp.json +10 -0
- turbo_quant_memory-0.28.0/examples/clients/codex.config.toml +12 -0
- turbo_quant_memory-0.28.0/examples/clients/cursor.project.mcp.json +10 -0
- turbo_quant_memory-0.28.0/examples/clients/gemini.settings.json +13 -0
- turbo_quant_memory-0.28.0/examples/clients/opencode.config.json +11 -0
- turbo_quant_memory-0.28.0/pyproject.toml +133 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_context_savings.py +641 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_embedder_ab.py +137 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_paraphrase.py +112 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_retrieval_global.py +307 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_retrieval_notes.py +379 -0
- turbo_quant_memory-0.28.0/scripts/benchmark_retrieval_quality.py +238 -0
- turbo_quant_memory-0.28.0/scripts/refresh_readme_stats.py +211 -0
- turbo_quant_memory-0.28.0/scripts/smoke_test.py +555 -0
- turbo_quant_memory-0.28.0/server.json +61 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/__init__.py +13 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/__main__.py +6 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/cli.py +700 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/contracts.py +579 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/daemon.py +747 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/hydration.py +110 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/identity.py +343 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/ingestion.py +484 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/knowledge_lint.py +506 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/markdown_parser.py +232 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/__init__.py +57 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/io.py +30 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/log.py +43 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/registry.py +173 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/runner.py +363 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/snapshot.py +196 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/migrations/upgrades.py +193 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/retrieval.py +483 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/retrieval_index.py +901 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/__init__.py +40 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/audit.py +63 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/crypto.py +101 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/keyresolver.py +193 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/paths.py +39 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/secrets/store.py +462 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/server.py +2476 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/skill_install.py +108 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/skills/turbo-quant-memory/SKILL.md +106 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/store.py +1214 -0
- turbo_quant_memory-0.28.0/src/turbo_memory_mcp/telemetry.py +347 -0
- turbo_quant_memory-0.28.0/tests/test_agent_ux.py +179 -0
- turbo_quant_memory-0.28.0/tests/test_audit_fixes.py +336 -0
- turbo_quant_memory-0.28.0/tests/test_batch5_hardening.py +82 -0
- turbo_quant_memory-0.28.0/tests/test_cli.py +233 -0
- turbo_quant_memory-0.28.0/tests/test_confidence_calibration.py +189 -0
- turbo_quant_memory-0.28.0/tests/test_corrupt_file_resilience.py +116 -0
- turbo_quant_memory-0.28.0/tests/test_daemon.py +949 -0
- turbo_quant_memory-0.28.0/tests/test_embedder_dimension.py +43 -0
- turbo_quant_memory-0.28.0/tests/test_embedding_backend.py +134 -0
- turbo_quant_memory-0.28.0/tests/test_fresh_install_migrations.py +133 -0
- turbo_quant_memory-0.28.0/tests/test_fts_tokenizer.py +196 -0
- turbo_quant_memory-0.28.0/tests/test_fusion_gating.py +74 -0
- turbo_quant_memory-0.28.0/tests/test_hydration.py +122 -0
- turbo_quant_memory-0.28.0/tests/test_identity.py +109 -0
- turbo_quant_memory-0.28.0/tests/test_identity_reconcile.py +333 -0
- turbo_quant_memory-0.28.0/tests/test_index_drift_repair.py +164 -0
- turbo_quant_memory-0.28.0/tests/test_index_resync_logging.py +76 -0
- turbo_quant_memory-0.28.0/tests/test_ingestion_read_source.py +32 -0
- turbo_quant_memory-0.28.0/tests/test_ingestion_security.py +108 -0
- turbo_quant_memory-0.28.0/tests/test_ingestion_store.py +221 -0
- turbo_quant_memory-0.28.0/tests/test_ingestion_tools.py +201 -0
- turbo_quant_memory-0.28.0/tests/test_knowledge_lint.py +204 -0
- turbo_quant_memory-0.28.0/tests/test_markdown_chunking.py +91 -0
- turbo_quant_memory-0.28.0/tests/test_migrations.py +1764 -0
- turbo_quant_memory-0.28.0/tests/test_namespace_tools.py +534 -0
- turbo_quant_memory-0.28.0/tests/test_orphan_detection.py +97 -0
- turbo_quant_memory-0.28.0/tests/test_provenance.py +154 -0
- turbo_quant_memory-0.28.0/tests/test_recent_context.py +259 -0
- turbo_quant_memory-0.28.0/tests/test_relations.py +163 -0
- turbo_quant_memory-0.28.0/tests/test_retrieval_index.py +162 -0
- turbo_quant_memory-0.28.0/tests/test_retrieval_index_lane_logging.py +29 -0
- turbo_quant_memory-0.28.0/tests/test_retrieval_quality_metrics.py +47 -0
- turbo_quant_memory-0.28.0/tests/test_retrieval_updated_epoch.py +13 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_audit.py +110 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_cli.py +243 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_crypto.py +143 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_isolation.py +175 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_keyresolver.py +272 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_locking.py +133 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_mcp_tools.py +355 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_migration.py +258 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_proxy_forwarding.py +28 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_salt.py +192 -0
- turbo_quant_memory-0.28.0/tests/test_secrets_store.py +393 -0
- turbo_quant_memory-0.28.0/tests/test_semantic_search.py +552 -0
- turbo_quant_memory-0.28.0/tests/test_server_startup.py +172 -0
- turbo_quant_memory-0.28.0/tests/test_skill_install.py +207 -0
- turbo_quant_memory-0.28.0/tests/test_smoke_contract.py +279 -0
- turbo_quant_memory-0.28.0/tests/test_stdio_shutdown.py +219 -0
- turbo_quant_memory-0.28.0/tests/test_storage.py +175 -0
- turbo_quant_memory-0.28.0/tests/test_store_quarantine.py +49 -0
- turbo_quant_memory-0.28.0/tests/test_tools.py +165 -0
- turbo_quant_memory-0.28.0/tests/test_write_time_hints.py +137 -0
- turbo_quant_memory-0.28.0/uv.lock +2770 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
timeout-minutes: 10
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v7
|
|
19
|
+
- uses: astral-sh/setup-uv@v10.0.1
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.11"
|
|
22
|
+
enable-cache: true
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: uv sync --frozen
|
|
25
|
+
- name: Ruff
|
|
26
|
+
run: uv run --no-sync ruff check src tests
|
|
27
|
+
- name: Mypy
|
|
28
|
+
run: uv run --no-sync mypy src/turbo_memory_mcp
|
|
29
|
+
|
|
30
|
+
test:
|
|
31
|
+
strategy:
|
|
32
|
+
fail-fast: false
|
|
33
|
+
matrix:
|
|
34
|
+
include:
|
|
35
|
+
- os: ubuntu-latest
|
|
36
|
+
python-version: "3.11"
|
|
37
|
+
- os: ubuntu-latest
|
|
38
|
+
python-version: "3.13"
|
|
39
|
+
- os: windows-latest
|
|
40
|
+
python-version: "3.11"
|
|
41
|
+
runs-on: ${{ matrix.os }}
|
|
42
|
+
timeout-minutes: 20
|
|
43
|
+
env:
|
|
44
|
+
FASTEMBED_CACHE_PATH: ${{ github.workspace }}/.fastembed-cache
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v7
|
|
47
|
+
- uses: astral-sh/setup-uv@v10.0.1
|
|
48
|
+
with:
|
|
49
|
+
python-version: ${{ matrix.python-version }}
|
|
50
|
+
enable-cache: true
|
|
51
|
+
- name: Cache fastembed model
|
|
52
|
+
uses: actions/cache@v6
|
|
53
|
+
with:
|
|
54
|
+
path: .fastembed-cache
|
|
55
|
+
key: fastembed-${{ runner.os }}-${{ hashFiles('uv.lock') }}
|
|
56
|
+
restore-keys: |
|
|
57
|
+
fastembed-${{ runner.os }}-
|
|
58
|
+
- name: Install dependencies
|
|
59
|
+
run: uv sync --frozen
|
|
60
|
+
- name: Run tests
|
|
61
|
+
run: uv run --no-sync pytest -q
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Publishes to PyPI via Trusted Publishing (OIDC) — no API token stored anywhere.
|
|
4
|
+
# One-time setup on PyPI: Account -> Publishing -> add a pending publisher with
|
|
5
|
+
# project: turbo-memory-mcp | owner: Lexus2016 | repo: turbo_quant_memory
|
|
6
|
+
# workflow: publish.yml | environment: pypi
|
|
7
|
+
on:
|
|
8
|
+
release:
|
|
9
|
+
types: [published]
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
timeout-minutes: 10
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v7
|
|
21
|
+
- uses: astral-sh/setup-uv@v10.0.1
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.11"
|
|
24
|
+
enable-cache: true
|
|
25
|
+
- name: Build sdist + wheel
|
|
26
|
+
run: uv build
|
|
27
|
+
- name: Check metadata renders on PyPI
|
|
28
|
+
run: uvx twine check dist/*
|
|
29
|
+
- name: Fail if the tag and the package version disagree
|
|
30
|
+
if: github.event_name == 'release'
|
|
31
|
+
run: |
|
|
32
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
33
|
+
pkg="$(uv run --no-project python -c 'import tomllib;print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
|
|
34
|
+
test "$tag" = "$pkg" || { echo "tag $tag != pyproject $pkg"; exit 1; }
|
|
35
|
+
- uses: actions/upload-artifact@v5
|
|
36
|
+
with:
|
|
37
|
+
name: dist
|
|
38
|
+
path: dist/
|
|
39
|
+
|
|
40
|
+
pypi:
|
|
41
|
+
needs: build
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
timeout-minutes: 10
|
|
44
|
+
environment: pypi
|
|
45
|
+
permissions:
|
|
46
|
+
id-token: write # required for Trusted Publishing
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/download-artifact@v6
|
|
49
|
+
with:
|
|
50
|
+
name: dist
|
|
51
|
+
path: dist/
|
|
52
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
.serena/
|
|
2
|
+
.omc/
|
|
3
|
+
.pytest_cache/
|
|
4
|
+
.venv/
|
|
5
|
+
.gemini/
|
|
6
|
+
.claude/
|
|
7
|
+
__pycache__/
|
|
8
|
+
*.py[cod]
|
|
9
|
+
.fastembed-cache/
|
|
10
|
+
|
|
11
|
+
# Generated retrieval-quality reports embed real per-project data — keep local only
|
|
12
|
+
benchmarks/retrieval_quality.json
|
|
13
|
+
benchmarks/retrieval_quality.md
|
|
14
|
+
benchmarks/retrieval_quality_global.json
|
|
15
|
+
benchmarks/retrieval_quality_global.md
|
|
16
|
+
benchmarks/paraphrase_fixture.json
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Turbo Quant Memory for AI Agents
|
|
2
|
+
|
|
3
|
+
## What This Is
|
|
4
|
+
|
|
5
|
+
Turbo Quant Memory for AI Agents is a local-first MCP server for AI coding agents that stores large Markdown knowledge bases outside the active chat context and returns compressed, task-relevant context on demand. It is inspired by TurboQuant's compression mindset, but it operates at the memory and retrieval layer rather than modifying model internals or KV cache behavior.
|
|
6
|
+
|
|
7
|
+
Turbo Quant Memory for AI Agents є local-first MCP-сервером для AI coding-агентів, який зберігає великі Markdown-бази знань поза активним контекстом чату і повертає стислий, релевантний до завдання контекст за запитом. Він натхненний підходом TurboQuant до стиснення, але працює на рівні пам'яті та retrieval, а не змінює внутрішню KV-cache логіку моделі.
|
|
8
|
+
|
|
9
|
+
## Core Value
|
|
10
|
+
|
|
11
|
+
Agents can offload cold project context and recover only the minimum high-signal context needed to act correctly.
|
|
12
|
+
|
|
13
|
+
Агенти можуть виносити "холодний" контекст проєкту з активного діалогу і повертати лише мінімальний високосигнальний контекст, потрібний для правильної роботи.
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
|
|
17
|
+
### Validated
|
|
18
|
+
|
|
19
|
+
(None yet — ship to validate)
|
|
20
|
+
|
|
21
|
+
### Active
|
|
22
|
+
|
|
23
|
+
- [ ] AI agents such as Claude Code, Codex, Cursor, OpenCode, and Antigravity can connect to the same memory server through MCP.
|
|
24
|
+
- [ ] AI-агенти на кшталт Claude Code, Codex, Cursor, OpenCode та Antigravity можуть підключатися до одного й того самого memory server через MCP.
|
|
25
|
+
- [ ] Retrieval defaults to compressed context cards, with full hydration available only when needed.
|
|
26
|
+
- [ ] Retrieval за замовчуванням повертає стислі context cards, а повне hydrate-повернення доступне лише за потреби.
|
|
27
|
+
- [ ] Setup and connection must stay extremely simple: local install, stdio MCP, minimal config, CPU-friendly defaults.
|
|
28
|
+
- [ ] Налаштування і підключення мають залишатися максимально простими: локальна інсталяція, stdio MCP, мінімальний конфіг, CPU-friendly дефолти.
|
|
29
|
+
- [ ] Memory must work both per project and across all projects through clear namespace rules.
|
|
30
|
+
- [ ] Пам'ять має працювати і в межах одного проєкту, і між усіма проєктами через чіткі namespace-правила.
|
|
31
|
+
- [ ] The server must allow agents to write back important learnings and reuse them in later sessions.
|
|
32
|
+
- [ ] Сервер має дозволяти агентам записувати важливі висновки і повторно використовувати їх у наступних сесіях.
|
|
33
|
+
|
|
34
|
+
### Out of Scope
|
|
35
|
+
|
|
36
|
+
- Direct modification of Claude or Anthropic model KV cache — this project works at the MCP memory layer only.
|
|
37
|
+
- Пряма модифікація KV cache Claude або моделей Anthropic — цей проєкт працює лише на рівні MCP-пам'яті.
|
|
38
|
+
- Managed multi-tenant cloud platform — MVP stays local-first for fast deployment and low operational overhead.
|
|
39
|
+
- Керована multi-tenant cloud-платформа — MVP залишається local-first для швидкого розгортання і низьких операційних витрат.
|
|
40
|
+
- Mandatory GPU inference stack — CPU-first operation is required for easy adoption.
|
|
41
|
+
- Обов'язковий GPU-стек для інференсу — для легкого старту потрібна робота на CPU.
|
|
42
|
+
|
|
43
|
+
## Context
|
|
44
|
+
|
|
45
|
+
- TurboQuant research from Google Research, published on March 24, 2026, shows that aggressive compression plus selective recovery can preserve usefulness while sharply reducing memory costs. The relevant product inference for this project is not "we can change Claude's KV cache", but "we can aggressively compress external context and recover full fidelity only when needed."
|
|
46
|
+
- Дослідження TurboQuant від Google Research, опубліковане 24 березня 2026 року, показує, що агресивне стиснення разом із вибірковим відновленням може зберігати корисність і різко знижувати витрати пам'яті. Важливий продуктовий висновок для цього проєкту не в тому, що "ми можемо змінити KV cache Claude", а в тому, що "ми можемо агресивно стискати зовнішній контекст і повертати повну точність лише за потреби".
|
|
47
|
+
- Official Anthropic Claude Code documentation confirms MCP servers can be connected through `claude mcp add ...` or `.mcp.json`, which supports a simple local stdio deployment model.
|
|
48
|
+
- Офіційна документація Anthropic Claude Code підтверджує, що MCP-сервери можна підключати через `claude mcp add ...` або `.mcp.json`, що підходить для простої локальної stdio-моделі розгортання.
|
|
49
|
+
- Official OpenAI Codex documentation confirms MCP servers can be added via `codex mcp add ...`, and official Cursor and OpenCode docs confirm project-level and user-level MCP configuration. A current Flutter integration guide also documents Antigravity setup for custom MCP servers, which is a strong compatibility signal for the same architecture.
|
|
50
|
+
- Офіційна документація OpenAI Codex підтверджує, що MCP-сервери можна додавати через `codex mcp add ...`, а офіційна документація Cursor і OpenCode підтверджує project-level та user-level конфігурацію MCP. Актуальний Flutter integration guide також документує налаштування Antigravity для кастомних MCP-серверів, що є сильним сигналом сумісності для цієї самої архітектури.
|
|
51
|
+
- Official MCP Python SDK documentation provides a simple Python server path with FastMCP and stdio support, which fits the project's deployment constraint.
|
|
52
|
+
- Офіційна документація MCP Python SDK дає простий шлях до Python-сервера через FastMCP і stdio, що відповідає обмеженню про просте розгортання.
|
|
53
|
+
- LanceDB and Sentence Transformers both support a local embedded workflow suitable for a file-backed, CPU-usable MVP.
|
|
54
|
+
- LanceDB і Sentence Transformers обидва підтримують локальний embedded-режим, придатний для file-backed MVP, який можна використовувати на CPU.
|
|
55
|
+
|
|
56
|
+
## Constraints
|
|
57
|
+
|
|
58
|
+
- **Tech stack**: Python 3.11+, MCP Python SDK, embedded local storage, CPU-friendly embeddings — to keep installation and maintenance simple.
|
|
59
|
+
- **Техстек**: Python 3.11+, MCP Python SDK, embedded локальне сховище, CPU-friendly embeddings — щоб інсталяція і підтримка були простими.
|
|
60
|
+
- **Deployment**: Must run locally over stdio and connect to Claude Code without any hosted dependency.
|
|
61
|
+
- **Розгортання**: Має запускатися локально через stdio і підключатися до агент-клієнтів без будь-якої hosted-залежності.
|
|
62
|
+
- **Compatibility**: The same core server should be usable from Claude Code, Codex, Cursor, OpenCode, and Antigravity with client-specific config wrappers only.
|
|
63
|
+
- **Сумісність**: Той самий core-server має використовуватися з Claude Code, Codex, Cursor, OpenCode і Antigravity, а різнитися повинні лише client-specific config wrappers.
|
|
64
|
+
- **Performance**: Retrieval should feel interactive on a laptop-class machine for small and medium knowledge bases.
|
|
65
|
+
- **Продуктивність**: Retrieval має відчуватися інтерактивним на звичайному ноутбуці для малих і середніх баз знань.
|
|
66
|
+
- **Quality**: Compression must preserve source traceability and provide a clear upgrade path to fuller context.
|
|
67
|
+
- **Якість**: Стиснення має зберігати traceability до джерела і давати чіткий шлях до повнішого контексту.
|
|
68
|
+
- **Security**: Access must stay explicit to user-approved directories; no silent network requirement for core memory flow.
|
|
69
|
+
- **Безпека**: Доступ має бути явним лише до user-approved директорій; для базового memory-flow не повинно бути прихованої мережевої залежності.
|
|
70
|
+
|
|
71
|
+
## Key Decisions
|
|
72
|
+
|
|
73
|
+
| Decision | Rationale | Outcome |
|
|
74
|
+
|----------|-----------|---------|
|
|
75
|
+
| Build a memory-layer system, not a model patch | Claude Code uses hosted models, so MCP-side compression is the controllable layer | — Pending |
|
|
76
|
+
| Use Markdown as the source of truth | Easy onboarding, inspectable storage, low lock-in | — Pending |
|
|
77
|
+
| Use an embedded local vector store | Zero separate service and easier deployment | — Pending |
|
|
78
|
+
| Default to compressed recall plus on-demand hydration | Maximizes token savings while reducing quality loss on edge cases | — Pending |
|
|
79
|
+
| Prefer CPU-friendly local embeddings first | Keeps MVP easy to install and run on developer laptops | — Pending |
|
|
80
|
+
| Design namespaces from day one | Project-only memory and cross-project memory must not get mixed accidentally | — Pending |
|
|
81
|
+
|
|
82
|
+
## Evolution
|
|
83
|
+
|
|
84
|
+
This document evolves at phase transitions and milestone boundaries.
|
|
85
|
+
|
|
86
|
+
**After each phase transition** (via `$gsd-transition`):
|
|
87
|
+
1. Requirements invalidated? -> Move to Out of Scope with reason
|
|
88
|
+
2. Requirements validated? -> Move to Validated with phase reference
|
|
89
|
+
3. New requirements emerged? -> Add to Active
|
|
90
|
+
4. Decisions to log? -> Add to Key Decisions
|
|
91
|
+
5. "What This Is" still accurate? -> Update if drifted
|
|
92
|
+
|
|
93
|
+
**After each milestone** (via `$gsd-complete-milestone`):
|
|
94
|
+
1. Full review of all sections
|
|
95
|
+
2. Core Value check -> still the right priority?
|
|
96
|
+
3. Audit Out of Scope -> reasons still valid?
|
|
97
|
+
4. Update Context with current state
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
*Last updated: 2026-03-25 after initialization*
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Requirements: Turbo Quant Memory for AI Agents
|
|
2
|
+
|
|
3
|
+
**Defined:** 2026-03-25
|
|
4
|
+
**Core Value:** Agents can offload cold project context and recover only the minimum high-signal context needed to act correctly.
|
|
5
|
+
|
|
6
|
+
## v1 Requirements
|
|
7
|
+
|
|
8
|
+
### Integration
|
|
9
|
+
|
|
10
|
+
- [x] **INT-01**: User can run the memory server locally over stdio so Claude Code can connect to it as an MCP server. / Користувач може запустити memory server локально через stdio, щоб Claude Code підключався до нього як до MCP-сервера.
|
|
11
|
+
- [x] **INT-02**: User can install and run the MVP without a separate database service or mandatory GPU dependency. / Користувач може встановити і запустити MVP без окремого database-сервісу та без обов'язкової GPU-залежності.
|
|
12
|
+
- [x] **INT-03**: User can connect the server to Claude Code using a documented `claude mcp add ...` or `.mcp.json` flow. / Користувач може підключити сервер до Claude Code через задокументований сценарій `claude mcp add ...` або `.mcp.json`.
|
|
13
|
+
- [x] **INT-04**: User has documented MCP connection examples for Claude Code, Codex, Cursor, OpenCode, and Antigravity. / Користувач має задокументовані приклади MCP-підключення для Claude Code, Codex, Cursor, OpenCode і Antigravity.
|
|
14
|
+
|
|
15
|
+
### Scope
|
|
16
|
+
|
|
17
|
+
- [x] **SCP-01**: User can store and query project-scoped memory tied to the current repository. / Користувач може зберігати і запитувати project-scoped memory, прив'язану до поточного репозиторію.
|
|
18
|
+
- [x] **SCP-02**: User can store and query global memory shared across all projects on the same machine. / Користувач може зберігати і запитувати global memory, спільну для всіх проєктів на одній машині.
|
|
19
|
+
- [x] **SCP-03**: Agent can search in `project`, `global`, or `hybrid` mode with deterministic precedence rules. / Агент може шукати в режимах `project`, `global` або `hybrid` з детермінованими правилами пріоритету.
|
|
20
|
+
- [x] **SCP-04**: Every returned result identifies its scope and project origin to prevent accidental cross-project contamination. / Кожен повернений результат ідентифікує свій scope і project origin, щоб запобігти випадковому змішуванню проєктів.
|
|
21
|
+
|
|
22
|
+
### Ingestion
|
|
23
|
+
|
|
24
|
+
- [x] **ING-01**: User can register one or more Markdown directories for indexing. / Користувач може зареєструвати одну або кілька Markdown-директорій для індексації.
|
|
25
|
+
- [x] **ING-02**: Server splits Markdown into stable retrievable blocks using heading-aware chunking with fallback size limits. / Сервер ділить Markdown на стабільні retrievable-блоки через heading-aware chunking із fallback size limits.
|
|
26
|
+
- [x] **ING-03**: User can reindex only changed content instead of rebuilding the entire memory store every time. / Користувач може переіндексувати лише змінений контент, а не перебудовувати весь memory store щоразу.
|
|
27
|
+
|
|
28
|
+
### Retrieval
|
|
29
|
+
|
|
30
|
+
- [x] **RET-01**: Agent can run semantic search and receive the top relevant blocks with score, source path, and block ID. / Агент може виконати semantic search і отримати top-relevant блоки зі score, source path і block ID.
|
|
31
|
+
- [x] **RET-02**: Agent can request a compressed context card for a block that removes low-signal noise while preserving the key meaning. / Агент може запросити compressed context card для блока, яка прибирає low-signal шум і зберігає ключовий зміст.
|
|
32
|
+
- [x] **RET-03**: Agent can hydrate a fuller block or source excerpt on demand when the compressed result is insufficient. / Агент може за потреби hydrate-нути повніший блок або source excerpt, коли стислого результату недостатньо.
|
|
33
|
+
- [x] **RET-04**: Agent can request related blocks around a result to recover local neighbourhood context. / Агент може запитати related blocks навколо результату, щоб відновити локальний neighbourhood context.
|
|
34
|
+
|
|
35
|
+
### Memory
|
|
36
|
+
|
|
37
|
+
- [x] **MEM-01**: Agent can write back an important decision, lesson, or reusable note into persistent memory. / Агент може записати назад у persistent memory важливе рішення, урок або reusable note.
|
|
38
|
+
- [x] **MEM-02**: Stored memory notes are indexed and searchable together with Markdown source content. / Збережені memory notes індексуються і шукаються разом із вихідним Markdown-контентом.
|
|
39
|
+
|
|
40
|
+
### Safety
|
|
41
|
+
|
|
42
|
+
- [x] **SAFE-01**: Every returned result includes source provenance that lets the agent or user trace it back to the original file and block. / Кожен повернений результат містить provenance до джерела, щоб агент або користувач могли відстежити його до оригінального файла і блока.
|
|
43
|
+
- [x] **SAFE-02**: The server avoids returning full raw files by default and instead requires explicit hydration calls for larger context. / Сервер не повертає повні сирі файли за замовчуванням і вимагає явного hydration-виклику для більшого контексту.
|
|
44
|
+
|
|
45
|
+
### Operations
|
|
46
|
+
|
|
47
|
+
- [x] **OPS-01**: User can inspect basic health, index freshness, and store statistics from the server. / Користувач може переглядати базовий health, freshness індексу і статистику store безпосередньо із сервера.
|
|
48
|
+
- [x] **OPS-02**: User has a documented smoke test that proves install, indexing, search, and hydration work end-to-end. / Користувач має задокументований smoke test, який підтверджує, що install, indexing, search і hydration працюють end-to-end.
|
|
49
|
+
|
|
50
|
+
## v2 Requirements
|
|
51
|
+
|
|
52
|
+
### Compression Intelligence
|
|
53
|
+
|
|
54
|
+
- **CMP-01**: Agent can request multi-level summaries from one source block (brief, standard, deep). / Агент може запитувати multi-level summaries для одного source-блока (brief, standard, deep).
|
|
55
|
+
- **CMP-02**: Server can use an optional local summarizer such as Ollama for higher-quality compression. / Сервер може використовувати optional local summarizer на кшталт Ollama для кращого стиснення.
|
|
56
|
+
|
|
57
|
+
### Retrieval Quality
|
|
58
|
+
|
|
59
|
+
- **QLT-01**: Server can apply reranking to improve precision on ambiguous searches. / Сервер може застосовувати reranking для кращої precision на неоднозначних запитах.
|
|
60
|
+
- **QLT-02**: Server can benchmark token savings versus quality loss on a curated task suite. / Сервер може benchmark-нути економію токенів проти втрати якості на curated task suite.
|
|
61
|
+
|
|
62
|
+
### Collaboration
|
|
63
|
+
|
|
64
|
+
- **COL-01**: Multiple named memory spaces can coexist for separate projects or teams. / Кілька іменованих memory spaces можуть співіснувати для різних проєктів або команд.
|
|
65
|
+
- **COL-02**: Notes can carry richer relationship metadata beyond tags. / Нотатки можуть нести багатші relationship metadata, ніж прості теги.
|
|
66
|
+
|
|
67
|
+
### Knowledge Base Lifecycle
|
|
68
|
+
|
|
69
|
+
- **KBL-01**: Server exposes `lint_knowledge_base(...)` to run structural diagnostics over Markdown knowledge bases. / Сервер надає `lint_knowledge_base(...)` для структурної діагностики Markdown knowledge base.
|
|
70
|
+
- **KBL-02**: Lint results report broken internal links, orphan candidates, and duplicate normalized titles. / Результати lint показують биті internal links, orphan candidates і дублікати нормалізованих заголовків.
|
|
71
|
+
- **KBL-03**: Lint supports both explicit root paths and previously registered Markdown roots. / Lint підтримує і явні root paths, і раніше зареєстровані Markdown roots.
|
|
72
|
+
|
|
73
|
+
### Secrets Vault
|
|
74
|
+
|
|
75
|
+
- **VLT-01**: Server stores per-project secrets encrypted at rest under `~/.turbo-quant-memory/projects/<project_id>/secrets/vault.tqv` using AES-256-GCM with a per-project master key. / Сервер зберігає per-project секрети зашифрованими at-rest у `~/.turbo-quant-memory/projects/<project_id>/secrets/vault.tqv` через AES-256-GCM з per-project майстер-ключем.
|
|
76
|
+
- **VLT-02**: Master key resolution survives daemon restarts and machine reboots via OS keyring (Keychain on macOS, libsecret on Linux, Credential Manager on Windows) with an `TQMEMORY_SECRETS_PASSPHRASE` env-var fallback; no interactive prompt is used as fallback. / Розв'язання майстер-ключа переживає перезапуски daemon'а та reboot машини через OS keyring (Keychain на macOS, libsecret на Linux, Credential Manager на Windows) із fallback на env var `TQMEMORY_SECRETS_PASSPHRASE`; інтерактивний prompt як fallback не використовується.
|
|
77
|
+
- **VLT-03**: Server exposes `set_secret`, `get_secret`, `list_secrets`, and `delete_secret` MCP tools scoped implicitly to the active project. / Сервер надає MCP-інструменти `set_secret`, `get_secret`, `list_secrets`, `delete_secret`, неявно прив'язані до активного проєкту.
|
|
78
|
+
- **VLT-04**: Secret values are NEVER returned via `semantic_search`, `hydrate`, or `lint_knowledge_base`; the indexer refuses to traverse any `secrets/` subdirectory. / Значення секретів НІКОЛИ не повертаються через `semantic_search`, `hydrate` або `lint_knowledge_base`; індексатор відмовляється обходити будь-яку підпапку `secrets/`.
|
|
79
|
+
- **VLT-05**: Every secret access (`set`, `get`, `list`, `delete`) is recorded in `~/.turbo-quant-memory/audit/secrets.jsonl` by `(timestamp, project_id, action, name)` only; values are never logged. / Кожен доступ до секрету (`set`, `get`, `list`, `delete`) записується в `~/.turbo-quant-memory/audit/secrets.jsonl` тільки за `(timestamp, project_id, action, name)`; значення не логуються.
|
|
80
|
+
- **VLT-06**: On upgrade, the migration runner enumerates existing project directories under `~/.turbo-quant-memory/projects/*` and provisions an empty per-project vault and metadata file immediately, not lazily. / При оновленні migration runner проходить існуючі project-каталоги у `~/.turbo-quant-memory/projects/*` і одразу створює порожній per-project vault і metadata-файл, а не лінько при першому використанні.
|
|
81
|
+
|
|
82
|
+
## Out of Scope
|
|
83
|
+
|
|
84
|
+
| Feature | Reason |
|
|
85
|
+
|---------|--------|
|
|
86
|
+
| Direct Anthropic or Claude KV-cache quantization / Пряма квантизація KV-cache Anthropic або Claude | Not available at the MCP integration layer / Це недоступно на рівні MCP-інтеграції |
|
|
87
|
+
| Hosted SaaS control plane / Hosted SaaS control plane | Opposes the easy local deployment goal / Суперечить цілі простого локального розгортання |
|
|
88
|
+
| Mandatory GPU-only inference path / Обов'язковий GPU-only шлях інференсу | Too much setup friction for MVP / Для MVP це створює зайве тертя під час запуску |
|
|
89
|
+
| Rich web admin UI / Багатий web admin UI | Not required before the core memory loop proves value / Не потрібен, поки не доведена цінність базового memory loop |
|
|
90
|
+
|
|
91
|
+
## Traceability
|
|
92
|
+
|
|
93
|
+
| Requirement | Phase | Status |
|
|
94
|
+
|-------------|-------|--------|
|
|
95
|
+
| INT-01 | Phase 1 | Complete |
|
|
96
|
+
| INT-02 | Phase 1 | Complete |
|
|
97
|
+
| INT-03 | Phase 1 | Complete |
|
|
98
|
+
| INT-04 | Phase 1 | Complete |
|
|
99
|
+
| SCP-01 | Phase 2 | Complete |
|
|
100
|
+
| SCP-02 | Phase 2 | Complete |
|
|
101
|
+
| SCP-03 | Phase 2 | Complete |
|
|
102
|
+
| SCP-04 | Phase 2 | Complete |
|
|
103
|
+
| ING-01 | Phase 3 | Complete |
|
|
104
|
+
| ING-02 | Phase 3 | Complete |
|
|
105
|
+
| ING-03 | Phase 3 | Complete |
|
|
106
|
+
| RET-01 | Phase 4 | Complete |
|
|
107
|
+
| RET-02 | Phase 4 | Complete |
|
|
108
|
+
| SAFE-01 | Phase 4 | Complete |
|
|
109
|
+
| SAFE-02 | Phase 4 | Complete |
|
|
110
|
+
| RET-03 | Phase 5 | Complete |
|
|
111
|
+
| RET-04 | Phase 5 | Complete |
|
|
112
|
+
| MEM-01 | Phase 5 | Complete |
|
|
113
|
+
| MEM-02 | Phase 5 | Complete |
|
|
114
|
+
| OPS-01 | Phase 6 | Complete |
|
|
115
|
+
| OPS-02 | Phase 6 | Complete |
|
|
116
|
+
| KBL-01 | Phase 7 | Complete |
|
|
117
|
+
| KBL-02 | Phase 7 | Complete |
|
|
118
|
+
| KBL-03 | Phase 7 | Complete |
|
|
119
|
+
| VLT-01 | Phase 9 | Complete |
|
|
120
|
+
| VLT-02 | Phase 9 | Complete |
|
|
121
|
+
| VLT-03 | Phase 9 | Complete |
|
|
122
|
+
| VLT-04 | Phase 9 | Complete |
|
|
123
|
+
| VLT-05 | Phase 9 | Complete |
|
|
124
|
+
| VLT-06 | Phase 9 | Complete |
|
|
125
|
+
|
|
126
|
+
**Coverage:**
|
|
127
|
+
- v1 requirements: 21 total
|
|
128
|
+
- v2 KBL requirements: 3 total (shipped via Phase 7 quick extension)
|
|
129
|
+
- v2 VLT requirements: 6 total (Phase 9, planned 2026-05-25)
|
|
130
|
+
- Mapped to phases: 30
|
|
131
|
+
- Unmapped: 0 ✓
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
*Requirements defined: 2026-03-25*
|
|
135
|
+
*Last updated: 2026-05-25 with VLT-01..VLT-06 for Phase 9 secrets vault*
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Roadmap: Turbo Quant Memory for AI Agents
|
|
2
|
+
|
|
3
|
+
**Defined:** 2026-03-25
|
|
4
|
+
**Requirements mapped:** 30 / 30 (21 v1 + 3 KBL + 6 VLT)
|
|
5
|
+
**Status:** v1 core shipped; post-v1 hardening and rollout slices shipped through `v0.3.0`; Phase 9 secrets vault planned for v0.7.0
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
| # | Phase | Goal | Requirements | Success Criteria |
|
|
10
|
+
|---|-------|------|--------------|------------------|
|
|
11
|
+
| 1 | Client Integration Foundation | Start a local stdio MCP server that multiple agent clients can connect to with a minimal install path | INT-01, INT-02, INT-03, INT-04 | 4 |
|
|
12
|
+
| 2 | Namespace Model | Define and implement project and global memory scopes with safe precedence rules | SCP-01, SCP-02, SCP-03, SCP-04 | 4 |
|
|
13
|
+
| 3 | Markdown Ingestion | Build deterministic Markdown chunking and incremental indexing into local memory storage | ING-01, ING-02, ING-03 | 4 |
|
|
14
|
+
| 4 | Compressed Retrieval | Return compact, provenance-rich retrieval results instead of raw file dumps | RET-01, RET-02, SAFE-01, SAFE-02 | 4 |
|
|
15
|
+
| 5 | Hydration and Write-Back | Add fuller-context recovery and persistent session memory | RET-03, RET-04, MEM-01, MEM-02 | 4 |
|
|
16
|
+
| 6 | Hardening and Adoption | Add observability, smoke tests, and easy operator guidance for real use | OPS-01, OPS-02 | 4 |
|
|
17
|
+
| 7 | Knowledge-Base Hygiene (Quick Extension) | Add structural wiki linting so agent-managed markdown corpora stay consistent over time | KBL-01, KBL-02, KBL-03 | 3 |
|
|
18
|
+
| 8 | Memory Resilience, Migration Stats, Release Rollout, and Client Refresh | Make derived indexes self-healing across upgrades, prove token savings with persistent telemetry, and refresh the live client rollout contract | OPS-01, OPS-02 | 4 |
|
|
19
|
+
| 9 | Project-Scoped Encrypted Secrets Vault | Add per-project encrypted secrets storage so AI agents can persist and retrieve credentials across sessions without leaking them into the embedding/FTS index or backups | VLT-01, VLT-02, VLT-03, VLT-04, VLT-05, VLT-06 | 4 |
|
|
20
|
+
|
|
21
|
+
## Phase Details
|
|
22
|
+
|
|
23
|
+
### Phase 1: Client Integration Foundation
|
|
24
|
+
|
|
25
|
+
**Goal:** Establish the smallest useful server that can run locally, expose initial tools, and be connected to supported agent clients without custom infrastructure.
|
|
26
|
+
|
|
27
|
+
**Status:** Complete (2026-03-25)
|
|
28
|
+
|
|
29
|
+
**Requirements:** `INT-01`, `INT-02`, `INT-03`, `INT-04`
|
|
30
|
+
|
|
31
|
+
**UI hint:** no
|
|
32
|
+
|
|
33
|
+
**Success criteria:**
|
|
34
|
+
1. A developer can install dependencies and launch the server locally over stdio.
|
|
35
|
+
2. Claude Code can connect to the server using a documented `claude mcp add ...` or `.mcp.json` configuration.
|
|
36
|
+
3. The server exposes a minimal, discoverable MCP tool surface for future memory operations.
|
|
37
|
+
4. Documented setup examples exist for Claude Code, Codex, Cursor, OpenCode, and Antigravity, and the setup path does not require a separate DB service or mandatory GPU dependency.
|
|
38
|
+
|
|
39
|
+
### Phase 2: Namespace Model
|
|
40
|
+
|
|
41
|
+
**Goal:** Make memory safe and useful across one project and all projects simultaneously through explicit namespaces and merge rules.
|
|
42
|
+
|
|
43
|
+
**Status:** Complete (2026-03-25)
|
|
44
|
+
|
|
45
|
+
**Requirements:** `SCP-01`, `SCP-02`, `SCP-03`, `SCP-04`
|
|
46
|
+
|
|
47
|
+
**UI hint:** no
|
|
48
|
+
|
|
49
|
+
**Success criteria:**
|
|
50
|
+
1. The current repository resolves to a deterministic project memory namespace.
|
|
51
|
+
2. A machine-wide global namespace exists for reusable cross-project knowledge.
|
|
52
|
+
3. Search can run in `project`, `global`, and `hybrid` modes with documented precedence.
|
|
53
|
+
4. Every result carries scope and origin metadata so agents can tell where the memory came from.
|
|
54
|
+
|
|
55
|
+
### Phase 3: Markdown Ingestion
|
|
56
|
+
|
|
57
|
+
**Goal:** Convert Markdown knowledge into stable, indexed memory blocks with deterministic provenance and incremental refresh behavior.
|
|
58
|
+
|
|
59
|
+
**Status:** Complete (2026-03-26)
|
|
60
|
+
|
|
61
|
+
**Requirements:** `ING-01`, `ING-02`, `ING-03`
|
|
62
|
+
|
|
63
|
+
**UI hint:** no
|
|
64
|
+
|
|
65
|
+
**Success criteria:**
|
|
66
|
+
1. User can point the server at one or more Markdown directories for indexing.
|
|
67
|
+
2. Files are split into stable blocks with reproducible block IDs and source metadata.
|
|
68
|
+
3. Reindexing changed content updates affected blocks without rebuilding untouched content.
|
|
69
|
+
4. The index persists locally between sessions.
|
|
70
|
+
|
|
71
|
+
### Phase 4: Compressed Retrieval
|
|
72
|
+
|
|
73
|
+
**Goal:** Let agents retrieve compact high-signal memory results with clear provenance while avoiding default raw-file dumps.
|
|
74
|
+
|
|
75
|
+
**Status:** Complete (2026-03-26)
|
|
76
|
+
|
|
77
|
+
**Requirements:** `RET-01`, `RET-02`, `SAFE-01`, `SAFE-02`
|
|
78
|
+
|
|
79
|
+
**UI hint:** no
|
|
80
|
+
|
|
81
|
+
**Success criteria:**
|
|
82
|
+
1. Semantic search returns relevant blocks with score, path, and block ID.
|
|
83
|
+
2. Agents can request compressed context cards that preserve meaning and traceability.
|
|
84
|
+
3. Every retrieval result clearly points back to the original source block.
|
|
85
|
+
4. Large raw context is not returned unless explicitly requested through a hydration path.
|
|
86
|
+
|
|
87
|
+
### Phase 5: Hydration and Write-Back
|
|
88
|
+
|
|
89
|
+
**Goal:** Recover fuller local context when compression is insufficient and persist new learnings for future sessions.
|
|
90
|
+
|
|
91
|
+
**Status:** Complete (2026-03-26)
|
|
92
|
+
|
|
93
|
+
**Requirements:** `RET-03`, `RET-04`, `MEM-01`, `MEM-02`
|
|
94
|
+
|
|
95
|
+
**UI hint:** no
|
|
96
|
+
|
|
97
|
+
**Success criteria:**
|
|
98
|
+
1. Agent can hydrate a fuller block or excerpt when the compressed card is insufficient.
|
|
99
|
+
2. Agent can request neighboring or related blocks to restore local context.
|
|
100
|
+
3. Agent can save important notes or decisions into persistent memory with metadata.
|
|
101
|
+
4. Saved notes become searchable alongside the original Markdown corpus.
|
|
102
|
+
|
|
103
|
+
### Phase 6: Hardening and Adoption
|
|
104
|
+
|
|
105
|
+
**Goal:** Make the system safe to adopt in day-to-day work through observability, verification, and operator-facing documentation.
|
|
106
|
+
|
|
107
|
+
**Status:** Complete (2026-03-26)
|
|
108
|
+
|
|
109
|
+
**Requirements:** `OPS-01`, `OPS-02`
|
|
110
|
+
|
|
111
|
+
**UI hint:** no
|
|
112
|
+
|
|
113
|
+
**Success criteria:**
|
|
114
|
+
1. User can inspect server health, index freshness, and basic storage statistics.
|
|
115
|
+
2. A documented smoke test validates install, indexing, search, and hydration end-to-end.
|
|
116
|
+
3. The integration guide is simple enough for a new project to adopt without reverse engineering.
|
|
117
|
+
4. Common failure modes are documented with first-response troubleshooting steps.
|
|
118
|
+
|
|
119
|
+
### Phase 7: Knowledge-Base Hygiene (Quick Extension)
|
|
120
|
+
|
|
121
|
+
**Goal:** Add a lightweight maintenance loop for agent-managed markdown wikis so broken links, orphan pages, and duplicate titles are visible before they degrade retrieval quality.
|
|
122
|
+
|
|
123
|
+
**Status:** Complete (2026-04-03, quick task `260403-fe0`)
|
|
124
|
+
|
|
125
|
+
**Requirements:** `KBL-01`, `KBL-02`, `KBL-03`
|
|
126
|
+
|
|
127
|
+
**UI hint:** no
|
|
128
|
+
|
|
129
|
+
**Success criteria:**
|
|
130
|
+
1. MCP server exposes `lint_knowledge_base(...)` in the stable tool catalog.
|
|
131
|
+
2. Lint reports broken internal links, orphan candidates, and duplicate normalized titles with bounded payload size.
|
|
132
|
+
3. Lint can run against explicit `paths` or already registered markdown roots without re-indexing.
|
|
133
|
+
|
|
134
|
+
## Coverage Check
|
|
135
|
+
|
|
136
|
+
- All v1 requirements map to exactly one phase.
|
|
137
|
+
- Усі v1-вимоги замаплено рівно на одну фазу.
|
|
138
|
+
- The roadmap is biased toward fast adoption and minimal deployment friction.
|
|
139
|
+
- Roadmap навмисно зміщений у бік швидкого adoption і мінімального тертя при розгортанні.
|
|
140
|
+
- Post-v1 quick extensions can ship as focused slices without reopening the full milestone lifecycle.
|
|
141
|
+
|
|
142
|
+
### Phase 8: Memory resilience, migration stats, release rollout, and client refresh
|
|
143
|
+
|
|
144
|
+
**Goal:** Make upgrades safe, keep context retrieval honest, surface durable savings metrics, and ensure the released binary is the one local agent clients actually execute.
|
|
145
|
+
|
|
146
|
+
**Status:** Complete (2026-04-03)
|
|
147
|
+
|
|
148
|
+
**Requirements:** `OPS-01`, `OPS-02`
|
|
149
|
+
**Depends on:** Phase 7
|
|
150
|
+
**Plans:** 1/1 plans complete
|
|
151
|
+
|
|
152
|
+
Plans:
|
|
153
|
+
- [x] `08-01` Version-aware manifests, savings telemetry, smoke/docs refresh, and release rollout (completed 2026-04-03)
|
|
154
|
+
|
|
155
|
+
**Success criteria:**
|
|
156
|
+
1. Search and hydration auto-refresh stale derived indexes after a retrieval/markdown format mismatch instead of serving outdated context.
|
|
157
|
+
2. Usage telemetry persists outside project/global memory and exposes byte/token savings plus bounded milestone headlines without polluting retrieval context.
|
|
158
|
+
3. README, smoke checklist, and client fixtures match the new `v0.3.0` contract and explain the savings value clearly.
|
|
159
|
+
4. The shared local MCP binary can be refreshed in place for Claude Code, Codex, Gemini, and OpenCode so live clients pick up the release.
|
|
160
|
+
|
|
161
|
+
### Phase 9: Project-Scoped Encrypted Secrets Vault
|
|
162
|
+
|
|
163
|
+
**Goal:** Give AI agents a safe place to persist project credentials (SSH, DB DSN, API tokens) across sessions and reboots, encrypted at rest, project-scoped, fully isolated from any retrieval path.
|
|
164
|
+
|
|
165
|
+
**Status:** Complete (2026-05-25, shipped as `v0.7.0`)
|
|
166
|
+
|
|
167
|
+
**Requirements:** `VLT-01`, `VLT-02`, `VLT-03`, `VLT-04`, `VLT-05`, `VLT-06`
|
|
168
|
+
**Depends on:** Phase 8
|
|
169
|
+
**Plans:** 3/3 plans complete
|
|
170
|
+
|
|
171
|
+
Plans:
|
|
172
|
+
- [x] `09-01` Cryptographic foundation, key resolver, secrets store, audit log (Wave 1, 2026-05-25)
|
|
173
|
+
- [x] `09-02` Migration runner integration, MCP tool surface, indexer/lint/retrieval hardening (Wave 2, 2026-05-25)
|
|
174
|
+
- [x] `09-03` Smoke test extension, bilingual docs, CHANGELOG, client fixture refresh (Wave 3, 2026-05-25)
|
|
175
|
+
|
|
176
|
+
**Success criteria:**
|
|
177
|
+
1. `set_secret` / `get_secret` round-trips survive daemon restart and machine reboot via OS keyring or env-passphrase fallback.
|
|
178
|
+
2. `semantic_search`, `hydrate`, and `lint_knowledge_base` never see secret values; indexer refuses any `secrets/` directory traversal.
|
|
179
|
+
3. Migration provisions an empty per-project vault for every existing `~/.turbo-quant-memory/projects/*` directory on first daemon start after upgrade; idempotent.
|
|
180
|
+
4. Audit log records every secret access by `(timestamp, project_id, action, name)` with no value leakage; tool count grows `14 -> 18` and bilingual docs cover the threat model and setup contract.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
*Last updated: 2026-05-25 with Phase 9 planning*
|