Spaces:
Configuration error
Configuration error
Commit History
-
refactor: consolidate route auth + service accessors (closes #34)
Delete the per-route _check_auth / _get_kv / _get_search_service / _get_observation_store copies from observations, mcp, search, migration, memories, graph, and health. Every protected handler now uses the existing routes/auth.py:require_auth decorator; service accessors move to a single routes/_deps.py that reads from Flask extensions with an app-module-globals fallback for test resets. Also registers kv on flask_app.extensions for symmetry with observation_store and search_service. New test tests/test_routes_auth_matrix.py walks every registered HTTP rule and asserts the auth semantics (401 without token, 2xx with token, 2xx in no-secret mode, 401 on invalid token). Skips WebSocket routes per the ticket. Prep for #35 (legacy.py file-split) — removes the auth-plumbing churn that would otherwise conflict across every route file.fce12d3 -
refactor: delete agentcache/cache/* shim layer (closes #29, #30, #31, #32)
Removes the entire src/agentcache/cache/ subpackage — an empty seam that only re-exported functions from legacy.py. No in-repo caller imports from agentcache.cache.*, and the top-level public API (agentcache.remember, agentcache.health_check, agentcache.folder_graph_build) is sourced from legacy directly, so nothing breaks. Verified: - from agentcache.app import create_app; create_app() succeeds - import agentcache; agentcache.remember/health_check/folder_graph_build resolve - import agentcache.cache raises ModuleNotFoundError - grep for "agentcache.cache" returns zero hits - pytest tests/ passes (test_search_service::test_http_search_routes_end_to_end was already failing on main, unrelated to this change) Closes #29 Closes #30 Closes #31 Closes #323cde7ea
-
Raplh 2 in process
ac98b25 -
feat: add core package (ObservationStore, SearchService, KV) and auth middleware Introduces the production modules that tickets #26 and #27 test: - src/agentcache/core/__init__.py — package exports - src/agentcache/core/kv_scopes.py — KV scope key registry - src/agentcache/core/search_service.py — SearchService + IndexPersistence - src/agentcache/routes/auth.py — verify_token + require_auth decorator All 18 tests pass (test_auth, test_observation_store, test_search_service). Closes #26, closes #27
5586336 -
test: hardening test suite, adding auth tests, and shared conftest fixtures
a6e11a5 -
feat: setup agent skills configuration and fix route blueprint imports
a0d5274
-
test: add SQL injection and path traversal unit tests, and integrate Bandit CI security scanning
1846fdf -
feat(cli): implement agentcache context bootstrapper command
4a14717
-
feat(memory): implement folder-based observation auto-forgetting and TTL
95568d8 -
feat: Maintaining database concurrency
016d065 -
fix: Added prod level migrations
ba35a6d
-
Initial Git Push
CI CD Tests Included67c1aa5
-
feat: implement /auth.md agent onboarding route and add ws broadcast improvements
c704030 -
feat: migrate agentmemory to agentcache namespace, endpoints, and tools
12a6c9a
-
feat: dedup observations, fix dashboard buttons, add per-obs delete
- Add SHA-256 content fingerprint dedup to folder_observe() — identical text from the same (folder, agent) pair returns existing obs ID without writing a duplicate. Per-pair threading.Lock prevents TOCTOU races. - Add dedup_folder_observations() to clean up existing duplicates across one or all (folder, agent) pairs, rebuilding the dedup index after. - Add POST /agentmemory/folder/dedup REST endpoint (auth-gated). - Add memory_dedup MCP tool (schema + dispatch). - Viewer: fix Back/Delete-folder buttons to use data-action delegation instead of fragile inline onclick with escaped string args. - Viewer: add per-observation Delete button on each card in folder detail. - Viewer: add Select-all checkbox + bulk Delete-selected with single POST /forget call; cards removed from DOM without reload. - Viewer: add one-click Dedup button in folder detail toolbar. - Viewer: fix Tools tab TypeError — raw fetch() replaces apiFetchRaw() so .text() is called on the Response object, n…dc238fd -
feat: obs lookup index, startup backfill, CORS wildcards, sync state in SQLite
- Add global obs_id->folderPath/agentId coordinate lookup index (KV.obs_lookup) so folder_search hydrates candidates via O(1) point lookups instead of O(N) scans - Add backfill_obs_lookup_if_needed() on startup to populate missing lookup entries - Add verify_index_sync_on_boot() in workers.py to detect and fix stale search index after crash/abrupt shutdown - triggers background rebuild if counts diverge - Print security warning on boot when AGENTMEMORY_SECRET is unset - Update CORS default origins to allow vscode-webview://* and chrome-extension://* prefix matching so IDE extensions connect without CORS errors - Persist sync_state in SQLite sync_state_metadata table instead of local .sync_state JSON file, ensuring sync state survives Space restarts - Add tests/test_obs_lookup.py covering lookup write, delete propagation, backfill, and desync detection (all 231 tests pass)bbea853 -
fix: prevent double-import of app.py by registering app namespace in sys.modules
9aca16b -
fix: remove unclosed and unused renderDashboard function declaration that broke JS parsing
ef46d54 -
fix: wrap localStorage access for iframe environments and resolve footer mojibake
7e4fe2c -
fix: resolve stuck command palette default display and UTF-8 mojibake
df8c7d5 -
fix: Hugging Face sync, routing, dashboard, and agent isolation bugs
12b5d50 -
fix: rewrite /observe handler - unified compat path + fix undefined body in except
3edc290 -
fix: compat shim for legacy observe callers - map sessionId/cwd to folderPath/agentId
522bc87 -
fix: CORS for HF Spaces + OPTIONS preflight + observe error logging
acea43f -
fix: CORS for HuggingFace Spaces + OPTIONS preflight + auth banner visibility
a00a0e3 -
fix: add legacy API compat shims + fix /observe auto-routing
- POST /agentmemory/session/start -> 200 compat shim (was 404) - POST /agentmemory/session/end -> 200 compat shim - GET /agentmemory/observations?sessionId -> compat shim reading legacy KV - POST /agentmemory/observe: auto-detect folderPath+agentId payload and route to folder_observe() instead of failing with 400 - Fix viewer: loadFolders circular reference via IIFE capture - Fix viewer: broken if(false) block that swallowed page initf888ff4 -
fix(viewer): fix blank page on load and loadFolders circular reference
b27f86d -
fix(viewer): sync dashboard to folder-based backend
- Remove 10 tabs (Dashboard, Sessions, Lessons, Actions, Crystals, Audit, Activity, Profile, Replay, Personal) that called non-existent endpoints - Keep only the 5 tabs backed by real API routes: Folders, Memories, Graph, Timeline, Tools - Remove renderDashboard(), loadActivity(), loadSessions(), renderSessions(), loadLessons(), renderLessons(), loadActions(), renderActions(), loadCrystals(), renderCrystals(), loadProfile(), renderProfile(), loadPersonal(), renderPersonal(), loadReplay(), renderReplay() and all associated dead state (dashboard/sessions/activity/crystals/etc) - Remove 4 orphaned view-* div containers that had no tab buttons - Fix apiFetchRaw() to use REST base URL for correct cross-origin support - Remove duplicate apiPost() declaration - Fix startPolling() to only refresh tabs with real endpoints - Fix routeWsMessage() to remove dead dashboard/activity branches - Fix maybeShowOnboarding() flag key lookups (use real embeddingProvider field) - Fix renderFlagB…9828fcf
-
feat: upscale & UX overhaul — blueprint split, debounce, tests, viewer enhancements, DX improvements
Track A — Backend Structure: - Split app.py into 7 Flask blueprints (src/routes/) - Create src/memory/ package and src/storage/ package - Per-thread SQLite connections, WAL checkpoint, db.stats() - IndexPersistence debounce queue with threading.Timer + dirty flags - Workers: SIGTERM/SIGINT graceful shutdown Track B — Viewer UX: - Command palette (Ctrl+K/Cmd+K) with fuzzy search - D3 v7 force-directed graph replacing canvas - VirtualList for Timeline/Folders - Onboarding card for empty state - MCP Tool Tester tab - Tab keyboard navigation (ARIA roles, arrow keys) - Skeleton loading states (@keyframes shimmer) Track C — Reliability & Testing: - test_search.py, test_remember.py, test_context.py, test_debounce.py - test_properties.py (8 Hypothesis property tests) - test_api.py (Flask test client integration tests) - test_route_regressions.py (blueprint regression suite) - sync.py: audit log HWM replaces mtime change detection - /health: syncStatus, lastSyncAt, dbSizeBytes fields Track D…4d5727a
-
refactor: folder-based memory model replacing session-based storage
- Replace session-based KV scopes with (folder_path, agent_id) pairs - Add normalize_folder_path, folder_observe, folder_search, folder_timeline, folder_graph_build - Update forget/health_check/export_data/rebuild_index for folder model - Add migrate_sessions_to_folders (non-destructive migration) - Rewrite REST layer: /folders, /folder/observations, /timeline, /graph, /migrate - Trim MCP tools from 31 to 11; add memory_folders, memory_folder_observations, memory_timeline - Rebuild viewer to 4 tabs: Folders, Memories, Graph, Timeline - Add pytest test suite: test_normalize, test_folder_observe, test_forget, test_timeline, test_graph, test_migration - Add pytest==8.3.5 and hypothesis==6.131.15 to requirements.txtfbcb300
-
Fix memory_save and agent_remember: write observation when sessionId provided to link memory to session
2816e70 -
Upload src/mcp_stdio.py with huggingface_hub
Verified signature5b7c355 -
Upload src/app.py with huggingface_hub
Verified signature680e40e -
Upload src/mcp_stdio.py with huggingface_hub
Verified signature5b627dc -
Upload src/app.py with huggingface_hub
Verified signature35f53fb -
feat: implement memory_antigravity_sync natively in Python
c8258aa
-
Allow dynamic AGENTMEMORY_URL and AGENTMEMORY_SECRET in stdio MCP wrapper
d1e1adf -
feat: connect CLI reads AGENTMEMORY_URL and SECRET from env
5f7e21e -
feat: add Python plugin system, multi-agent connect CLI, and MCP tool expansions
- plugin/scripts/: Python-native hook scripts replacing Node.js .mjs hooks (session_start, prompt_submit, pre/post_tool_use, stop, session_end, etc.) - plugin/hooks/: hook manifests for Claude Code and Codex - src/connect.py: CLI to wire MCP + hooks into Claude, Codex, Hermes, Antigravity, Kiro - src/app.py: add /enrich, /crystals/auto, /claude-bridge/sync endpoints; new MCP tools (memory_observations, memory_lessons, memory_reflect, memory_diagnose, memory_forget, memory_export, memory_consolidate, memory_lesson_search); fix agent_observe/agent_remember to not require agentId; parse_mcp_list_arg for concepts/files accepting both string and array; enrich_search_results on all search paths - src/functions.py: extract build_project_profile(); add export_data(); timeline sessionId filter Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>26a284a -
docs: rewrite all MD files for Python project + fix graph node colors
- README.md: full rewrite for the Python reimplementation (SQLite, Flask, HF Space deploy, API reference, architecture, vs comparison) - AGENTS.md: Python-accurate architecture guide replacing Node.js/iii docs - CHANGELOG.md: v1.0.0 entry documenting the migration from Dolt/Node - CONTRIBUTING.md: Python-specific contribution guide - INSTALL_FOR_AGENTS.md: agent runbook for Python server setup - ROADMAP.md: Python-focused roadmap replacing Node.js roadmap - viewer/index.html: fix folderColor() returning hsl() string instead of hex — gradient code expected parseInt(color.slice(1,3),16) so all folder nodes rendered black; also fix missing isSelected declaration Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>7921736 -
feat: rewrite graph tab to show project folders as nodes
Replace knowledge-graph query with folder-based visualization built from sessions and memories. Nodes = project paths, edges = shared concepts or common parent paths. Adds folder node type with indigo color and rect shape. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>590957a -
feat: add folder filter dropdown to memories tab
4b7ed2a -
fix: auto-complete dangling active sessions on new session start
2d394e5 -
fix: resolve semantic and procedural memory dashboard display issue
a8c9dbb -
refactor: filter sessions by full project folder paths and support Uncategorized category
0f9d0de -
feat: rename sessions using agent summary title, display narrative summary, and add folder-wise filter to sessions tab
0d0d847 -
feat: implement memory consolidation, session summarization, and fix StateKV list/get KeyError
1e3eb08 -
refactor: remove DOLT_AUTO_COMMIT guard from commit_if_enabled
Audit log writes to SQLite are cheap — no reason to skip. Removes last reference to Dolt env vars. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>03dde81 -
feat: migrate from Dolt/MySQL to SQLite for faster boot and sync
- Replace StateKV Dolt/pymysql backend with sqlite3 stdlib (single file DB) - Add audit_log table to track agent writes (replaces dolt_log versioning) - Remove Dolt server from Dockerfile and start.sh — no more 5min cold boot wait - Sync only agentmemory.db + .hmac + second-brain/ (~5MB vs 232MB) - Restore downloads targeted files instead of full snapshot - Remove pymysql from requirements.txt Boot time: ~3min → ~10sec. Backup cycle: 20min → instant when unchanged. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>169f06f -
fix: use upload_folder for backup (prevents 429 rate limits) and auto-create second-brain dir
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>e24267e