文件最后提交记录最后更新时间
feat(commit): implement write path orchestration components - P1-W11: ArchiveBuilder - builds ContextNode from CandidateMemory - P1-W12: CandidatePipeline - parallel extraction with filtering - P1-W13: MergePolicies - ProfilePolicy, AggregateTopicPolicy, AppendOnlyPolicy, SkillToolPolicy - P1-W14: PolicyRouter - routes candidates to appropriate policies - P1-W15: ContextWriter - orchestrates plan → build → write pipeline - P1-W16: OutboxStore - persists OutboxEvents for async indexing - P1-W17: Unit tests for all commit components Merge policies follow CLAUDE.md §5 behavior rules: - Profile: always merge, fixed URI - Preference/Entity/Pattern: merge by slug - Event/Case: always create (append-only) - Skill: fixed URI, accumulate usage stats Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 2 个月前
fix(provenance): merge provenance_ids with dedup, accept list detail, append not overwrite Three fixes to the provenance tracking system: 1. merge_policies: when an existing memory node is updated, combine existing and incoming provenance_ids with order-preserving dedup via _merge_provenance_ids. ArchiveBuilder prefers the merged list from plan.merged_fields over the raw candidate field. 2. ProvenanceResolver: build_id accepts list[str] as detail for archive source_type (resolver handles comma join internally). parse_id returns list[str] for archive, str for others. Validation centralized in validate_input — only archive allows list detail. 3. extraction/tools: provenance_ids assignment changed from overwrite (= [prov_id]) to append (.append(prov_id)) so that existing IDs from prior pipeline steps are preserved. Co-Authored-By: Claude [glm-5] <noreply@anthropic.com> 15 天前
feat(provenance): preserve message IDs and pre-generate archive_id - Add message.id to extraction state in _build_incremental_extraction_state - Extend _Span with message_ids field, extract from messages[span_start:span_end+1] - Add provenance_ids field to CandidateMemory - Pass archive_id through extraction pipeline (Extractor -> CandidatePipeline -> MemoryWriteAPI) - SessionManager.commit_snapshot accepts optional archive_id parameter - Consolidate archive_id generation into generate_archive_id() in session_manager - ArchiveBuilder writes provenance_ids to ContextNode.metadata Co-Authored-By: Claude [glm-5] <noreply@anthropic.com> 15 天前
feat(pgdirect): SQL-backed storage backend replacing AGFS Direct PostgreSQL storage implementation: - SQLContextFS: full ContextFS implementation with RLS tenant isolation - SQLOutboxStore: listen-notify based async indexing - SQLRelationStore, SQLArchiveStore: relation and session persistence - SQLControlPlaneStore: multi-instance auth state sharing - Shared connection pool (PoolAdapterMixin) with health checks - Atomic write+outbox in single transaction - Archive chain support (soft delete + outbox event) - Owner-level ACL with visible_owner_spaces - PostgreSQL schema with idempotent ensure_schema() - Updated docs/setup scripts to replace AGFS with PostgreSQL Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 26 天前
test: cover schema registry integration 11 天前
feat(lifecycle): archive/delete operations, access tracking, aging job P2 Phase 5: Memory lifecycle management with cold/hot detection. - Add WriteAction constants: CREATE, MERGE, ARCHIVE, DELETE - Add ContextFS.archive_node(): soft-delete with ARCHIVED status - Modify context_writer.py: handle archive/delete actions, operation fingerprinting for idempotency (sha256 of uri+action+session_id) - Add commit/outbox_store.py: register_archive event type - Add retrieval/access_tracker.py: AccessTracker records search hits per URI, flushes to node metadata (last_accessed_at, hit_count_30d) - Hook access tracking into retrieval pipeline - Add lifecycle/aging_job.py: AgingJob scans nodes, proposes archive for cold nodes (>90d, 0 hits) and delete for archived (>365d) - Auto-approve mode for unattended execution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 1 个月前
feat: formalize schema-driven extraction 11 天前
feat: routing_key normalization, tool_stats, hotness formula fix - Add routing_key normalization with synonym table (commit/routing_key.py) Maps LLM-generated keys to canonical forms (coffee→beverage, code_style→coding_style) Prevents memory fragmentation from inconsistent LLM naming - Populate CandidateMemory.tool_stats with ExtractToolInput-specific fields (best_for, optimal_params, common_failures, recommendation, tool_identifier) instead of packing into content string - Fix hotness formula: freq now ranges [0.0, 1.0) instead of [0.5, 1.0] Unvisited nodes correctly start at 0 instead of being biased to 0.5 - Increase global_search_topk default from 5 to 15 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 1 个月前
feat(pgdirect): SQL-backed storage backend replacing AGFS Direct PostgreSQL storage implementation: - SQLContextFS: full ContextFS implementation with RLS tenant isolation - SQLOutboxStore: listen-notify based async indexing - SQLRelationStore, SQLArchiveStore: relation and session persistence - SQLControlPlaneStore: multi-instance auth state sharing - Shared connection pool (PoolAdapterMixin) with health checks - Atomic write+outbox in single transaction - Archive chain support (soft delete + outbox event) - Owner-level ACL with visible_owner_spaces - PostgreSQL schema with idempotent ensure_schema() - Updated docs/setup scripts to replace AGFS with PostgreSQL Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 26 天前