omninode-memory 0.6.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.
- omninode_memory-0.6.0/.claude/architecture-handshake.md +81 -0
- omninode_memory-0.6.0/.env.example +192 -0
- omninode_memory-0.6.0/.flake8 +4 -0
- omninode_memory-0.6.0/.github/ISSUE_TEMPLATE/bug_report.md +13 -0
- omninode_memory-0.6.0/.github/ISSUE_TEMPLATE/feature_request.md +9 -0
- omninode_memory-0.6.0/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- omninode_memory-0.6.0/.github/dependabot.yml +12 -0
- omninode_memory-0.6.0/.github/required-checks.yaml +90 -0
- omninode_memory-0.6.0/.github/workflows/auto-tag-on-merge.yml +12 -0
- omninode_memory-0.6.0/.github/workflows/pre-commit.yml +28 -0
- omninode_memory-0.6.0/.github/workflows/release-dry-run.yml +27 -0
- omninode_memory-0.6.0/.github/workflows/release.yml +101 -0
- omninode_memory-0.6.0/.github/workflows/test.yml +435 -0
- omninode_memory-0.6.0/.gitignore +257 -0
- omninode_memory-0.6.0/.pre-commit-config.yaml +417 -0
- omninode_memory-0.6.0/.secrets.baseline +196 -0
- omninode_memory-0.6.0/.serena/memories/project_overview.md +24 -0
- omninode_memory-0.6.0/.serena/memories/suggested_commands.md +45 -0
- omninode_memory-0.6.0/.serena/project.yml +71 -0
- omninode_memory-0.6.0/.yamlfmt +11 -0
- omninode_memory-0.6.0/CHANGELOG.md +117 -0
- omninode_memory-0.6.0/CLAUDE.md +238 -0
- omninode_memory-0.6.0/CODE_OF_CONDUCT.md +5 -0
- omninode_memory-0.6.0/CONTRIBUTING.md +43 -0
- omninode_memory-0.6.0/LICENSE +21 -0
- omninode_memory-0.6.0/PKG-INFO +202 -0
- omninode_memory-0.6.0/README.md +162 -0
- omninode_memory-0.6.0/SECURITY.md +12 -0
- omninode_memory-0.6.0/contract.yaml +160 -0
- omninode_memory-0.6.0/deployment/database/migrations/001_create_subscription_tables.sql +99 -0
- omninode_memory-0.6.0/deployment/database/migrations/002_create_memories_table.sql +156 -0
- omninode_memory-0.6.0/deployment/database/migrations/003_create_crawl_state_table.sql +87 -0
- omninode_memory-0.6.0/deployment/database/migrations/004_create_navigation_sessions_table.sql +140 -0
- omninode_memory-0.6.0/deployment/database/migrations_pending/004_create_navigation_paths_collection.py +116 -0
- omninode_memory-0.6.0/deployment/database/migrations_pending/004_create_navigation_sessions_table.sql +140 -0
- omninode_memory-0.6.0/deployment/database/pending/003_create_crawl_state_table.sql +87 -0
- omninode_memory-0.6.0/docker-compose.prod.yml +172 -0
- omninode_memory-0.6.0/docker-compose.yml +173 -0
- omninode_memory-0.6.0/docs/INDEX.md +101 -0
- omninode_memory-0.6.0/docs/PERFORMANCE_TESTING.md +335 -0
- omninode_memory-0.6.0/docs/architecture/ARCH_002_KAFKA_ABSTRACTION.md +287 -0
- omninode_memory-0.6.0/docs/architecture/ONEX_FOUR_NODE_ARCHITECTURE.md +271 -0
- omninode_memory-0.6.0/docs/ci/CI_MONITORING_GUIDE.md +302 -0
- omninode_memory-0.6.0/docs/db-split/fk-audit-omn-2069.md +39 -0
- omninode_memory-0.6.0/docs/environment_variables.md +595 -0
- omninode_memory-0.6.0/docs/handler_reuse_matrix.md +784 -0
- omninode_memory-0.6.0/docs/pii_handling.md +794 -0
- omninode_memory-0.6.0/docs/runtime/RUNTIME_PLUGINS.md +412 -0
- omninode_memory-0.6.0/docs/stub_protocols.md +192 -0
- omninode_memory-0.6.0/examples/__init__.py +5 -0
- omninode_memory-0.6.0/examples/advanced_architecture_demo.py +328 -0
- omninode_memory-0.6.0/pyproject.toml +355 -0
- omninode_memory-0.6.0/pyrightconfig.json +54 -0
- omninode_memory-0.6.0/scripts/check_migration_freeze.sh +71 -0
- omninode_memory-0.6.0/scripts/validate_ci_precommit_alignment.py +187 -0
- omninode_memory-0.6.0/scripts/validate_no_transport_imports.py +608 -0
- omninode_memory-0.6.0/scripts/validation/validate_enum_casing.py +154 -0
- omninode_memory-0.6.0/scripts/validation/validate_http_imports.py +248 -0
- omninode_memory-0.6.0/scripts/validation/validate_kafka_imports.py +244 -0
- omninode_memory-0.6.0/scripts/validation/validate_model_locations.py +303 -0
- omninode_memory-0.6.0/scripts/validation/validate_naming.py +499 -0
- omninode_memory-0.6.0/scripts/validation/validate_no_backward_compatibility.py +161 -0
- omninode_memory-0.6.0/scripts/validation/validate_pydantic_patterns.py +620 -0
- omninode_memory-0.6.0/scripts/validation/validate_secrets.py +535 -0
- omninode_memory-0.6.0/scripts/validation/validate_single_class_per_file.py +201 -0
- omninode_memory-0.6.0/src/omnimemory/__init__.py +114 -0
- omninode_memory-0.6.0/src/omnimemory/_compat_imports.py +21 -0
- omninode_memory-0.6.0/src/omnimemory/audit/__init__.py +4 -0
- omninode_memory-0.6.0/src/omnimemory/audit/__main__.py +184 -0
- omninode_memory-0.6.0/src/omnimemory/audit/io_audit.py +678 -0
- omninode_memory-0.6.0/src/omnimemory/bootstrap.py +443 -0
- omninode_memory-0.6.0/src/omnimemory/enums/__init__.py +51 -0
- omninode_memory-0.6.0/src/omnimemory/enums/crawl/__init__.py +15 -0
- omninode_memory-0.6.0/src/omnimemory/enums/crawl/enum_context_source_type.py +34 -0
- omninode_memory-0.6.0/src/omnimemory/enums/crawl/enum_crawler_type.py +31 -0
- omninode_memory-0.6.0/src/omnimemory/enums/crawl/enum_detected_doc_type.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_attribution_signal_type.py +81 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_context_item_type.py +47 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_data_type.py +28 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_entity_extraction_mode.py +70 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_error_code.py +111 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_intelligence_operation_type.py +23 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_lifecycle_state.py +35 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_memory_operation_type.py +37 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_memory_storage_type.py +21 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_migration_status.py +54 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_node_type.py +17 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_operation_status.py +31 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_priority_level.py +20 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_promotion_tier.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_semantic_entity_type.py +125 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_severity.py +13 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_subscription_status.py +29 -0
- omninode_memory-0.6.0/src/omnimemory/enums/enum_trust_level.py +48 -0
- omninode_memory-0.6.0/src/omnimemory/errors/__init__.py +46 -0
- omninode_memory-0.6.0/src/omnimemory/errors/embedding_errors.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/__init__.py +128 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/__init__.py +138 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/adapter_embedding_http.py +638 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/adapter_graph_memory.py +1100 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/adapter_intent_graph.py +1445 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/adapter_rate_limiter.py +615 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/adapter_valkey.py +962 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/models/__init__.py +44 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/models/model_adapter_intent_graph_config.py +138 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/models/model_intent_domain.py +342 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/adapters/models/model_intent_graph_health.py +70 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/handler_intent.py +940 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/handler_subscription.py +1975 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/models/__init__.py +20 -0
- omninode_memory-0.6.0/src/omnimemory/handlers/models/model_handler_intent_config.py +241 -0
- omninode_memory-0.6.0/src/omnimemory/models/__init__.py +70 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/__init__.py +49 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_connections_result.py +61 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_filesystem_adapter_config.py +51 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_graph_memory_config.py +194 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_graph_memory_health.py +53 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_memory_connection.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_related_memory.py +94 -0
- omninode_memory-0.6.0/src/omnimemory/models/adapters/model_related_memory_result.py +83 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/__init__.py +91 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_doc_source_config.py +106 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_embedding_config.py +238 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_filesystem_config.py +76 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_handler_semantic_compute_config.py +68 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_linear_scope_mapping.py +42 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_memory_service_config.py +67 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_path_scope_mapping.py +42 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_postgres_config.py +173 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_promotion_threshold_set.py +139 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_qdrant_config.py +128 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_rate_limiter_config.py +129 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_scope_mapping_config.py +274 -0
- omninode_memory-0.6.0/src/omnimemory/models/config/model_semantic_compute_policy_config.py +292 -0
- omninode_memory-0.6.0/src/omnimemory/models/container/__init__.py +10 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/__init__.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/mixin_handler_routing.py +26 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/model_contract_compute_extended.py +33 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/model_contract_effect_extended.py +33 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/model_contract_orchestrator_extended.py +37 -0
- omninode_memory-0.6.0/src/omnimemory/models/contracts/model_contract_reducer_extended.py +33 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/__init__.py +31 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_memory_context.py +190 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_memory_metadata.py +85 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_memory_parameters.py +126 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_memory_request.py +59 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_memory_response.py +101 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_operation_metadata.py +91 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_processing_metrics.py +148 -0
- omninode_memory-0.6.0/src/omnimemory/models/core/model_provenance.py +134 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/__init__.py +33 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_crawl_state_record.py +97 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_crawl_tick_command.py +58 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_changed_event.py +139 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_discovered_event.py +135 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_indexed_event.py +112 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_indexed_kreuzberg_event.py +104 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_parse_failed_event.py +86 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/model_document_removed_event.py +94 -0
- omninode_memory-0.6.0/src/omnimemory/models/crawl/types.py +13 -0
- omninode_memory-0.6.0/src/omnimemory/models/events/__init__.py +24 -0
- omninode_memory-0.6.0/src/omnimemory/models/events/model_crawl_tick_command.py +77 -0
- omninode_memory-0.6.0/src/omnimemory/models/events/model_intent_classified_event.py +48 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/__init__.py +169 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_audit_metadata.py +176 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_configuration.py +98 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_connection_metadata.py +146 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_error_details.py +155 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_health_metadata.py +110 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_health_response.py +144 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_memory_data.py +363 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_metrics_response.py +108 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_migration_progress.py +511 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_notes.py +219 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_priority.py +160 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_progress_summary.py +86 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_semver.py +8 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_success_metrics.py +210 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_system_health.py +198 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_tags.py +166 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_trust_score.py +293 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_typed_collections.py +570 -0
- omninode_memory-0.6.0/src/omnimemory/models/foundation/model_user.py +114 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/__init__.py +29 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/model_intelligence_analysis.py +132 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/model_pattern_recognition_result.py +123 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/model_semantic_analysis_result.py +148 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/model_semantic_entity.py +113 -0
- omninode_memory-0.6.0/src/omnimemory/models/intelligence/model_semantic_entity_list.py +67 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/__init__.py +25 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/model_memory_item.py +189 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/model_memory_query.py +128 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/model_memory_search_result.py +86 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/model_memory_storage_config.py +139 -0
- omninode_memory-0.6.0/src/omnimemory/models/memory/model_similarity_result.py +52 -0
- omninode_memory-0.6.0/src/omnimemory/models/scoring/__init__.py +24 -0
- omninode_memory-0.6.0/src/omnimemory/models/scoring/model_context_item_stats.py +172 -0
- omninode_memory-0.6.0/src/omnimemory/models/scoring/model_context_policy_config.py +115 -0
- omninode_memory-0.6.0/src/omnimemory/models/scoring/model_promotion_decision.py +122 -0
- omninode_memory-0.6.0/src/omnimemory/models/service/__init__.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/models/service/model_service_config.py +150 -0
- omninode_memory-0.6.0/src/omnimemory/models/service/model_service_health.py +145 -0
- omninode_memory-0.6.0/src/omnimemory/models/service/model_service_registry.py +143 -0
- omninode_memory-0.6.0/src/omnimemory/models/subscription/__init__.py +42 -0
- omninode_memory-0.6.0/src/omnimemory/models/subscription/constants.py +48 -0
- omninode_memory-0.6.0/src/omnimemory/models/subscription/model_notification_event.py +75 -0
- omninode_memory-0.6.0/src/omnimemory/models/subscription/model_notification_event_payload.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/models/subscription/model_subscription.py +87 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/__init__.py +114 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_audit.py +102 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_circuit_breaker_config.py +41 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_circuit_breaker_stats_response.py +35 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_concurrency.py +52 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_correlation_context.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_health_check_config.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_health_check_details.py +64 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_health_check_result.py +78 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_health_status.py +28 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_pii_detection_result.py +47 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_pii_detector_config.py +58 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_pii_match.py +31 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_pii_pattern_config.py +28 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_pii_type.py +49 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_resource_health_check.py +36 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_retry_attempt_info.py +38 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_retry_config.py +53 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_retry_statistics.py +42 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_structured_log_entry.py +126 -0
- omninode_memory-0.6.0/src/omnimemory/models/utils/model_system_health.py +37 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/__init__.py +88 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/agent_coordinator_orchestrator/__init__.py +80 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/agent_coordinator_orchestrator/contract.yaml +140 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/agent_coordinator_orchestrator/models/__init__.py +17 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/agent_coordinator_orchestrator/models/model_request.py +206 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/agent_coordinator_orchestrator/models/model_response.py +143 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/base.py +126 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/__init__.py +21 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/contract.yaml +139 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/handler_filesystem_crawler.py +944 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/models/__init__.py +17 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/models/model_filesystem_crawl_result.py +93 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/filesystem_crawler_effect/models/model_filesystem_crawler_config.py +89 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/__init__.py +22 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/contract.yaml +153 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/handler_intent_event_consumer.py +803 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/models/__init__.py +16 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/models/model_consumer_config.py +77 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/models/model_consumer_health.py +88 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/utils/__init__.py +12 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_event_consumer_effect/utils/util_event_mapper.py +48 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/__init__.py +67 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/contract.yaml +233 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/handlers/__init__.py +43 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/handlers/handler_intent_query.py +728 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/models/__init__.py +37 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/models/model_handler_intent_query_config.py +83 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/registry/__init__.py +39 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/registry/registry_intent_query_effect.py +276 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/utils/__init__.py +15 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_query_effect/utils/util_intent_mapping.py +120 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/__init__.py +27 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/adapters/__init__.py +11 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/adapters/adapter_intent_storage.py +424 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/contract.yaml +214 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/models/__init__.py +17 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/models/model_intent_storage_request.py +145 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/intent_storage_effect/models/model_intent_storage_response.py +129 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/__init__.py +12 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/clients/__init__.py +3 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/clients/client_kreuzberg.py +181 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/contract.yaml +143 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/handler_kreuzberg_parse.py +474 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/models/__init__.py +17 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/models/model_kreuzberg_parse_config.py +78 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/kreuzberg_parse_effect/models/model_kreuzberg_parse_result.py +46 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_consolidator_reducer/__init__.py +12 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/__init__.py +102 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/adapters/__init__.py +50 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/adapters/adapter_postgres_deactivate_memory.py +334 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/adapters/adapter_runtime_tick_memory.py +264 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/contract.yaml +250 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/handlers/__init__.py +60 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/handlers/handler_memory_archive.py +1540 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/handlers/handler_memory_expire.py +998 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/handlers/handler_memory_tick.py +974 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/models/__init__.py +37 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/validators/__init__.py +51 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_lifecycle_orchestrator/validators/validator_lifecycle_transition.py +262 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/__init__.py +72 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/clients/__init__.py +44 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/clients/embedding_client.py +412 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/contract.yaml +238 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/handlers/__init__.py +49 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/handlers/handler_db_mock.py +393 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/handlers/handler_graph_mock.py +401 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/handlers/handler_memory_retrieval.py +326 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/handlers/handler_qdrant_mock.py +467 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/__init__.py +36 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_embedding_client_config.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_handler_db_mock_config.py +42 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_handler_graph_mock_config.py +49 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_handler_memory_retrieval_config.py +55 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_handler_qdrant_mock_config.py +104 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_memory_retrieval_request.py +179 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_retrieval_effect/models/model_memory_retrieval_response.py +144 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/__init__.py +28 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/adapters/__init__.py +47 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/adapters/adapter_filesystem.py +1077 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/contract.yaml +244 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/models/__init__.py +20 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/models/model_memory_storage_request.py +143 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/memory_storage_effect/models/model_memory_storage_response.py +65 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/__init__.py +61 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/handlers/__init__.py +10 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/handlers/handler_navigation_history_reducer.py +585 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/models/__init__.py +25 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/models/model_navigation_history_request.py +31 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/models/model_navigation_history_response.py +56 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/models/model_navigation_session.py +157 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/navigation_history_reducer/node_navigation_history_reducer.py +62 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/__init__.py +68 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/contract.yaml +109 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/handlers/__init__.py +26 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/handlers/handler_semantic_compute.py +1677 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/models/__init__.py +21 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/models/model_semantic_analyzer_compute_request.py +84 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/models/model_semantic_analyzer_compute_response.py +125 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/semantic_analyzer_compute/node_semantic_analyzer_compute.py +239 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/__init__.py +63 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/contract.yaml +104 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/handlers/__init__.py +48 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/handlers/handler_similarity_compute.py +606 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/models/__init__.py +24 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/models/model_handler_similarity_compute_config.py +40 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/models/model_similarity_compute_request.py +133 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/models/model_similarity_compute_response.py +120 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/similarity_compute/node_similarity_compute.py +287 -0
- omninode_memory-0.6.0/src/omnimemory/nodes/statistics_reducer/__init__.py +12 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/__init__.py +135 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/base_protocols.py +1081 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/data_models.py +1178 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/error_models.py +720 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_crawl_state_repository.py +93 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_embedding.py +200 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_embedding_provider.py +229 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_handler_intent.py +300 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_intent_graph_adapter.py +286 -0
- omninode_memory-0.6.0/src/omnimemory/protocols/protocol_secrets_provider.py +97 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/__init__.py +167 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/adapters.py +244 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/contract_topics.py +361 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/dispatch_handlers.py +835 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/introspection.py +428 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/message_type_registration.py +352 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/plugin.py +816 -0
- omninode_memory-0.6.0/src/omnimemory/runtime/wiring.py +129 -0
- omninode_memory-0.6.0/src/omnimemory/secrets.py +115 -0
- omninode_memory-0.6.0/src/omnimemory/settings.py +465 -0
- omninode_memory-0.6.0/src/omnimemory/tools/__init__.py +4 -0
- omninode_memory-0.6.0/src/omnimemory/tools/contract_linter.py +312 -0
- omninode_memory-0.6.0/src/omnimemory/tools/stubs/__init__.py +4 -0
- omninode_memory-0.6.0/src/omnimemory/tools/stubs/contract_validator.py +257 -0
- omninode_memory-0.6.0/src/omnimemory/utils/__init__.py +189 -0
- omninode_memory-0.6.0/src/omnimemory/utils/audit_logger.py +389 -0
- omninode_memory-0.6.0/src/omnimemory/utils/concurrency.py +1478 -0
- omninode_memory-0.6.0/src/omnimemory/utils/db_url.py +72 -0
- omninode_memory-0.6.0/src/omnimemory/utils/error_sanitizer.py +322 -0
- omninode_memory-0.6.0/src/omnimemory/utils/handler_constants.py +385 -0
- omninode_memory-0.6.0/src/omnimemory/utils/health_manager.py +1267 -0
- omninode_memory-0.6.0/src/omnimemory/utils/observability.py +2169 -0
- omninode_memory-0.6.0/src/omnimemory/utils/pii_detector.py +365 -0
- omninode_memory-0.6.0/src/omnimemory/utils/resource_manager.py +941 -0
- omninode_memory-0.6.0/src/omnimemory/utils/retry_utils.py +361 -0
- omninode_memory-0.6.0/tests/__init__.py +4 -0
- omninode_memory-0.6.0/tests/audit/io_audit_whitelist.yaml +52 -0
- omninode_memory-0.6.0/tests/audit/transport_import_whitelist.yaml +65 -0
- omninode_memory-0.6.0/tests/conftest.py +413 -0
- omninode_memory-0.6.0/tests/handlers/__init__.py +5 -0
- omninode_memory-0.6.0/tests/handlers/adapters/__init__.py +5 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_embedding_http.py +1410 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_embedding_http_integration.py +738 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_graph_memory.py +1980 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_graph_memory_integration.py +754 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_intent_graph.py +1776 -0
- omninode_memory-0.6.0/tests/handlers/adapters/test_adapter_rate_limiter.py +1297 -0
- omninode_memory-0.6.0/tests/handlers/test_handler_intent.py +1059 -0
- omninode_memory-0.6.0/tests/handlers/test_handler_semantic_compute.py +1650 -0
- omninode_memory-0.6.0/tests/integration/__init__.py +37 -0
- omninode_memory-0.6.0/tests/integration/conftest.py +39 -0
- omninode_memory-0.6.0/tests/integration/nodes/__init__.py +33 -0
- omninode_memory-0.6.0/tests/integration/nodes/test_kreuzberg_parse_effect.py +319 -0
- omninode_memory-0.6.0/tests/integration/nodes/test_memory_lifecycle_orchestrator_integration.py +720 -0
- omninode_memory-0.6.0/tests/integration/nodes/test_navigation_history_reducer_integration.py +320 -0
- omninode_memory-0.6.0/tests/integration/test_entry_point_discovery.py +55 -0
- omninode_memory-0.6.0/tests/integration/test_handler_lifecycle_pattern.py +404 -0
- omninode_memory-0.6.0/tests/integration/test_handler_subscription.py +1367 -0
- omninode_memory-0.6.0/tests/integration/test_node_agent_coordinator.py +773 -0
- omninode_memory-0.6.0/tests/models/__init__.py +5 -0
- omninode_memory-0.6.0/tests/models/contracts/__init__.py +5 -0
- omninode_memory-0.6.0/tests/models/contracts/test_extended_contracts.py +506 -0
- omninode_memory-0.6.0/tests/models/events/__init__.py +4 -0
- omninode_memory-0.6.0/tests/models/events/test_model_intent_classified_event.py +194 -0
- omninode_memory-0.6.0/tests/models/test_frozen_boundary_models.py +847 -0
- omninode_memory-0.6.0/tests/nodes/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/filesystem_crawler_effect/__init__.py +2 -0
- omninode_memory-0.6.0/tests/nodes/filesystem_crawler_effect/test_handler_filesystem_crawler.py +1333 -0
- omninode_memory-0.6.0/tests/nodes/intent_event_consumer_effect/__init__.py +4 -0
- omninode_memory-0.6.0/tests/nodes/intent_event_consumer_effect/test_handler_intent_event_consumer.py +925 -0
- omninode_memory-0.6.0/tests/nodes/intent_event_consumer_effect/test_model_consumer_health.py +229 -0
- omninode_memory-0.6.0/tests/nodes/intent_event_consumer_effect/test_util_event_mapper.py +197 -0
- omninode_memory-0.6.0/tests/nodes/intent_query_effect/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/intent_query_effect/conftest.py +20 -0
- omninode_memory-0.6.0/tests/nodes/intent_query_effect/test_handler_intent_query_integration.py +841 -0
- omninode_memory-0.6.0/tests/nodes/intent_storage_effect/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/intent_storage_effect/test_handler_intent_storage_adapter_integration.py +890 -0
- omninode_memory-0.6.0/tests/nodes/memory_retrieval_effect/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/memory_retrieval_effect/test_memory_retrieval_effect.py +1090 -0
- omninode_memory-0.6.0/tests/nodes/memory_storage_effect/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/memory_storage_effect/test_memory_storage_effect.py +1777 -0
- omninode_memory-0.6.0/tests/nodes/navigation_history_reducer/__init__.py +0 -0
- omninode_memory-0.6.0/tests/nodes/navigation_history_reducer/test_navigation_history_reducer_unit.py +430 -0
- omninode_memory-0.6.0/tests/nodes/similarity_compute/__init__.py +5 -0
- omninode_memory-0.6.0/tests/nodes/similarity_compute/test_similarity_compute.py +1637 -0
- omninode_memory-0.6.0/tests/test_bootstrap.py +632 -0
- omninode_memory-0.6.0/tests/test_concurrency.py +342 -0
- omninode_memory-0.6.0/tests/test_config_models.py +489 -0
- omninode_memory-0.6.0/tests/test_contract_validation.py +600 -0
- omninode_memory-0.6.0/tests/test_contract_version.py +470 -0
- omninode_memory-0.6.0/tests/test_db_url.py +166 -0
- omninode_memory-0.6.0/tests/test_foundation.py +422 -0
- omninode_memory-0.6.0/tests/test_health_manager.py +385 -0
- omninode_memory-0.6.0/tests/test_migration_progress.py +177 -0
- omninode_memory-0.6.0/tests/test_node_enforcement.py +558 -0
- omninode_memory-0.6.0/tests/test_node_imports.py +166 -0
- omninode_memory-0.6.0/tests/test_observability_metrics.py +1068 -0
- omninode_memory-0.6.0/tests/test_performance.py +1760 -0
- omninode_memory-0.6.0/tests/test_resource_manager.py +521 -0
- omninode_memory-0.6.0/tests/test_secrets_provider.py +335 -0
- omninode_memory-0.6.0/tests/test_semantic_compute_policy_config.py +259 -0
- omninode_memory-0.6.0/tests/test_settings.py +340 -0
- omninode_memory-0.6.0/tests/test_validation_scripts.py +2755 -0
- omninode_memory-0.6.0/tests/unit/__init__.py +5 -0
- omninode_memory-0.6.0/tests/unit/handlers/__init__.py +0 -0
- omninode_memory-0.6.0/tests/unit/handlers/adapters/__init__.py +0 -0
- omninode_memory-0.6.0/tests/unit/handlers/adapters/test_graph_adapter_typing.py +159 -0
- omninode_memory-0.6.0/tests/unit/handlers/test_subscription_typing.py +139 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_kreuzberg_parse_effect/__init__.py +5 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_kreuzberg_parse_effect/test_handler_kreuzberg_parse.py +583 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/__init__.py +14 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_adapter_postgres_deactivate_memory.py +695 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_adapter_runtime_tick_memory.py +326 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_archive.py +1867 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_expire.py +833 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_tick.py +1124 -0
- omninode_memory-0.6.0/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_validator_lifecycle_transition.py +464 -0
- omninode_memory-0.6.0/tests/unit/runtime/__init__.py +2 -0
- omninode_memory-0.6.0/tests/unit/runtime/conftest.py +107 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_adapters.py +396 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_contract_topics.py +494 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_dispatch_handlers.py +946 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_introspection.py +636 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_message_type_registration.py +382 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_plugin.py +550 -0
- omninode_memory-0.6.0/tests/unit/runtime/test_wiring.py +78 -0
- omninode_memory-0.6.0/tests/unit/test_contract_linter.py +791 -0
- omninode_memory-0.6.0/tests/unit/test_handler_subscription_notify_strict.py +212 -0
- omninode_memory-0.6.0/tests/unit/test_ingestion_models.py +516 -0
- omninode_memory-0.6.0/tests/unit/test_io_audit.py +1009 -0
- omninode_memory-0.6.0/tests/unit/test_scope_mapping_config.py +346 -0
- omninode_memory-0.6.0/tests/unit/test_sql_placeholders.py +227 -0
- omninode_memory-0.6.0/tests/unit/test_validate_ci_precommit_alignment.py +578 -0
- omninode_memory-0.6.0/tests/unit/test_validate_kafka_imports.py +209 -0
- omninode_memory-0.6.0/tests/unit/test_validate_no_transport_imports.py +616 -0
- omninode_memory-0.6.0/uv.lock +3767 -0
- omninode_memory-0.6.0/validate_architecture_improvements.py +200 -0
- omninode_memory-0.6.0/validate_foundation.py +290 -0
- omninode_memory-0.6.0/validate_foundation_isolated.py +295 -0
- omninode_memory-0.6.0/validate_foundation_minimal.py +316 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<!-- HANDSHAKE_METADATA
|
|
2
|
+
source: omnibase_core/architecture-handshakes/repos/omnimemory.md
|
|
3
|
+
source_version: 0.16.0
|
|
4
|
+
source_sha256: f8f997a43e97d3b2c83972d1fec94ff9e0429ad76c10477979fe70db57443811
|
|
5
|
+
installed_at: 2026-02-10T16:35:34Z
|
|
6
|
+
installed_by: jonah
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# OmniNode Architecture – Constraint Map (omnimemory)
|
|
10
|
+
|
|
11
|
+
> **Role**: Memory system – persistence, recall, embeddings, vector storage
|
|
12
|
+
> **Handshake Version**: 0.1.0 <!-- contract format version; source_version in metadata tracks the template -->
|
|
13
|
+
|
|
14
|
+
## Platform-Wide Rules
|
|
15
|
+
|
|
16
|
+
1. **No backwards compatibility** - Breaking changes always acceptable. No deprecation periods, shims, or migration paths.
|
|
17
|
+
2. **Delete old code immediately** - Never leave deprecated code "for reference." If unused, delete it.
|
|
18
|
+
3. **No speculative refactors** - Only make changes that are directly requested or clearly necessary.
|
|
19
|
+
4. **No silent schema changes** - All schema changes must be explicit and deliberate.
|
|
20
|
+
5. **Frozen event schemas** - All models crossing boundaries (events, intents, actions, envelopes, projections) must use `frozen=True`. Internal mutable state is fine.
|
|
21
|
+
6. **Explicit timestamps** - Never use `datetime.now()` defaults. Inject timestamps explicitly.
|
|
22
|
+
7. **No hardcoded configuration** - All config via `.env` or Pydantic Settings. No localhost defaults.
|
|
23
|
+
8. **Kafka is required infrastructure** - Use async/non-blocking patterns. Never block the calling thread waiting for Kafka acks.
|
|
24
|
+
9. **No `# type: ignore` without justification** - Requires explanation comment and ticket reference.
|
|
25
|
+
|
|
26
|
+
## Core Principles
|
|
27
|
+
|
|
28
|
+
- Sub-100ms memory operations
|
|
29
|
+
- ONEX 4.0 compliance
|
|
30
|
+
- Strong typing (zero `Any` types)
|
|
31
|
+
|
|
32
|
+
## This Repo Contains
|
|
33
|
+
|
|
34
|
+
- Qdrant vector storage integration
|
|
35
|
+
- Memgraph graph operations
|
|
36
|
+
- Memory retrieval and management
|
|
37
|
+
- Pattern storage and recall
|
|
38
|
+
- 26+ Pydantic models (zero `Any` types)
|
|
39
|
+
|
|
40
|
+
## Rules the Agent Must Obey
|
|
41
|
+
|
|
42
|
+
1. **ALL version fields MUST use `ModelSemVer` directly** - No `str` fallbacks, no union types
|
|
43
|
+
2. **Zero `Any` types** - Strong typing throughout
|
|
44
|
+
3. **All models must have Field descriptions** - `Field(..., description="...")`
|
|
45
|
+
4. **Models in `models/` directory** - Not `core/`
|
|
46
|
+
5. **Follow model exemption pattern** when placing models with handlers
|
|
47
|
+
|
|
48
|
+
## Non-Goals (DO NOT)
|
|
49
|
+
|
|
50
|
+
- ❌ No `version: ModelSemVer | str` union types
|
|
51
|
+
- ❌ No string-to-semver convenience validators
|
|
52
|
+
|
|
53
|
+
## Forbidden Patterns
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
# WRONG - Union types for backwards compatibility
|
|
57
|
+
version: ModelSemVer | str # NEVER
|
|
58
|
+
|
|
59
|
+
# WRONG - Convenience validators accepting strings
|
|
60
|
+
@field_validator("version", mode="before")
|
|
61
|
+
def convert_string(cls, v):
|
|
62
|
+
if isinstance(v, str):
|
|
63
|
+
return ModelSemVer.from_str(v)
|
|
64
|
+
return v
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Required Pattern
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
# CORRECT - ModelSemVer only, callers convert
|
|
71
|
+
version: ModelSemVer = Field(..., description="Semantic version")
|
|
72
|
+
|
|
73
|
+
# Callers convert BEFORE calling
|
|
74
|
+
config = MyConfig(version=ModelSemVer.from_str("1.0.0"))
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## When You See Old Code
|
|
78
|
+
|
|
79
|
+
1. **DELETE IT** - Do not refactor, do not deprecate
|
|
80
|
+
2. No migration path - Callers update or they break
|
|
81
|
+
3. No compatibility layer - Clean break every time
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# OmniMemory - Environment Configuration
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# Copy this file to .env and customize values as needed.
|
|
5
|
+
# All variables have sensible defaults - only override what you need.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# cp .env.example .env
|
|
9
|
+
# docker compose up -d
|
|
10
|
+
#
|
|
11
|
+
# For production:
|
|
12
|
+
# docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
|
13
|
+
# ============================================================================
|
|
14
|
+
|
|
15
|
+
# ----------------------------------------------------------------------------
|
|
16
|
+
# PostgreSQL Connection (REQUIRED when postgres backend is enabled)
|
|
17
|
+
# ----------------------------------------------------------------------------
|
|
18
|
+
# Full connection URL for omnimemory's own PostgreSQL database.
|
|
19
|
+
# This is omnimemory's dedicated database -- no shared/legacy databases.
|
|
20
|
+
# The service will fail fast on startup if this is not set when postgres
|
|
21
|
+
# is enabled (OMNIMEMORY__POSTGRES_ENABLED=true).
|
|
22
|
+
#
|
|
23
|
+
# Format: postgresql://user:password@host:port/dbname
|
|
24
|
+
# OMNIMEMORY_DB_URL=postgresql://omnimemory:password@localhost:5432/omnimemory
|
|
25
|
+
|
|
26
|
+
# ----------------------------------------------------------------------------
|
|
27
|
+
# Docker Image Versions
|
|
28
|
+
# ----------------------------------------------------------------------------
|
|
29
|
+
# These control which versions of the database images are used.
|
|
30
|
+
# Update these to upgrade or pin specific versions.
|
|
31
|
+
|
|
32
|
+
# Qdrant Vector Database
|
|
33
|
+
# Latest versions: https://hub.docker.com/r/qdrant/qdrant/tags
|
|
34
|
+
QDRANT_VERSION=v1.16.3
|
|
35
|
+
|
|
36
|
+
# Memgraph Graph Database
|
|
37
|
+
# Latest versions: https://hub.docker.com/r/memgraph/memgraph/tags
|
|
38
|
+
MEMGRAPH_VERSION=2.18.1
|
|
39
|
+
|
|
40
|
+
# Valkey (Redis-compatible) Cache
|
|
41
|
+
# Latest versions: https://hub.docker.com/r/valkey/valkey/tags
|
|
42
|
+
VALKEY_VERSION=8
|
|
43
|
+
|
|
44
|
+
# ----------------------------------------------------------------------------
|
|
45
|
+
# Qdrant Configuration
|
|
46
|
+
# ----------------------------------------------------------------------------
|
|
47
|
+
# Vector database for semantic memory storage
|
|
48
|
+
|
|
49
|
+
# MIGRATION NOTE: Renamed from QDRANT_PORT to QDRANT_HTTP_PORT
|
|
50
|
+
# If you have an existing .env with QDRANT_PORT, rename it to QDRANT_HTTP_PORT
|
|
51
|
+
|
|
52
|
+
# REST API port (default: 6333)
|
|
53
|
+
# Used for HTTP API access and health checks
|
|
54
|
+
QDRANT_HTTP_PORT=6333
|
|
55
|
+
|
|
56
|
+
# gRPC port for high-performance operations (default: 6334)
|
|
57
|
+
# Used for bulk operations and streaming
|
|
58
|
+
QDRANT_GRPC_PORT=6334
|
|
59
|
+
|
|
60
|
+
# ----------------------------------------------------------------------------
|
|
61
|
+
# Memgraph Configuration
|
|
62
|
+
# ----------------------------------------------------------------------------
|
|
63
|
+
# Graph database for relationship queries
|
|
64
|
+
|
|
65
|
+
# Bolt protocol port for client connections (default: 7687)
|
|
66
|
+
# Used by Neo4j drivers and mgconsole
|
|
67
|
+
MEMGRAPH_BOLT_PORT=7687
|
|
68
|
+
|
|
69
|
+
# HTTP port for web interface (default: 7444)
|
|
70
|
+
# Used for Memgraph Lab web UI
|
|
71
|
+
MEMGRAPH_HTTP_PORT=7444
|
|
72
|
+
|
|
73
|
+
# Internal memory limit in MB for Memgraph (development)
|
|
74
|
+
# This controls Memgraph's internal memory allocation
|
|
75
|
+
MEMGRAPH_MEMORY_LIMIT_MB=4096
|
|
76
|
+
|
|
77
|
+
# Query execution timeout in seconds (production only)
|
|
78
|
+
MEMGRAPH_QUERY_TIMEOUT_SEC=600
|
|
79
|
+
|
|
80
|
+
# ----------------------------------------------------------------------------
|
|
81
|
+
# Valkey Configuration
|
|
82
|
+
# ----------------------------------------------------------------------------
|
|
83
|
+
# High-performance cache (Redis-compatible)
|
|
84
|
+
|
|
85
|
+
# Client connection port (default: 6379)
|
|
86
|
+
VALKEY_PORT=6379
|
|
87
|
+
|
|
88
|
+
# ----------------------------------------------------------------------------
|
|
89
|
+
# Resource Limits - Development
|
|
90
|
+
# ----------------------------------------------------------------------------
|
|
91
|
+
# These control container resource allocation for development (docker-compose.yml)
|
|
92
|
+
# Adjust based on your machine's available resources
|
|
93
|
+
|
|
94
|
+
# Qdrant Resources (Development)
|
|
95
|
+
QDRANT_CPU_LIMIT=2.0
|
|
96
|
+
QDRANT_MEMORY_LIMIT=2G
|
|
97
|
+
QDRANT_CPU_RESERVATION=0.25
|
|
98
|
+
QDRANT_MEMORY_RESERVATION=512M
|
|
99
|
+
|
|
100
|
+
# Memgraph Resources (Development)
|
|
101
|
+
MEMGRAPH_CPU_LIMIT=2.0
|
|
102
|
+
MEMGRAPH_CONTAINER_MEMORY=4G
|
|
103
|
+
MEMGRAPH_CPU_RESERVATION=0.25
|
|
104
|
+
MEMGRAPH_MEMORY_RESERVATION=512M
|
|
105
|
+
|
|
106
|
+
# Valkey Resources (Development)
|
|
107
|
+
VALKEY_CPU_LIMIT=1.0
|
|
108
|
+
VALKEY_MEMORY_LIMIT=1G
|
|
109
|
+
VALKEY_CPU_RESERVATION=0.1
|
|
110
|
+
VALKEY_MEMORY_RESERVATION=128M
|
|
111
|
+
|
|
112
|
+
# ----------------------------------------------------------------------------
|
|
113
|
+
# Resource Limits - Production
|
|
114
|
+
# ----------------------------------------------------------------------------
|
|
115
|
+
# These control container resource allocation for production (docker-compose.prod.yml)
|
|
116
|
+
# Production defaults are more generous than development
|
|
117
|
+
|
|
118
|
+
# Qdrant Resources (Production)
|
|
119
|
+
QDRANT_PROD_CPU_LIMIT=4.0
|
|
120
|
+
QDRANT_PROD_MEMORY_LIMIT=4G
|
|
121
|
+
QDRANT_PROD_CPU_RESERVATION=0.5
|
|
122
|
+
QDRANT_PROD_MEMORY_RESERVATION=1G
|
|
123
|
+
|
|
124
|
+
# Memgraph Resources (Production)
|
|
125
|
+
MEMGRAPH_PROD_CPU_LIMIT=4.0
|
|
126
|
+
MEMGRAPH_PROD_CONTAINER_MEMORY=8G
|
|
127
|
+
MEMGRAPH_PROD_CPU_RESERVATION=0.5
|
|
128
|
+
MEMGRAPH_PROD_MEMORY_RESERVATION=1G
|
|
129
|
+
# Internal memory limit in MB (production - higher than dev)
|
|
130
|
+
MEMGRAPH_PROD_MEMORY_LIMIT_MB=8192
|
|
131
|
+
|
|
132
|
+
# Valkey Resources (Production)
|
|
133
|
+
VALKEY_PROD_CPU_LIMIT=2.0
|
|
134
|
+
VALKEY_PROD_MEMORY_LIMIT=2G
|
|
135
|
+
VALKEY_PROD_CPU_RESERVATION=0.25
|
|
136
|
+
VALKEY_PROD_MEMORY_RESERVATION=256M
|
|
137
|
+
|
|
138
|
+
# ----------------------------------------------------------------------------
|
|
139
|
+
# Authentication (Optional for Development, Required for Production)
|
|
140
|
+
# ----------------------------------------------------------------------------
|
|
141
|
+
# Leave empty/unset for local development (no auth)
|
|
142
|
+
# Set values for production deployments
|
|
143
|
+
#
|
|
144
|
+
# IMPORTANT: For production, these MUST be set or services will fail to start
|
|
145
|
+
#
|
|
146
|
+
# PASSWORD COMPLEXITY RECOMMENDATIONS:
|
|
147
|
+
# - Minimum length: 32 characters recommended
|
|
148
|
+
# - Generate secure passwords with: openssl rand -base64 32
|
|
149
|
+
# - Avoid special characters that need escaping in shell/YAML: $ ` \ " ' ! & | ; < > ( ) { } [ ]
|
|
150
|
+
# - Safe special characters: - _ . @ # % ^ + =
|
|
151
|
+
|
|
152
|
+
# Qdrant API Key
|
|
153
|
+
# When set, all Qdrant API requests require this key in Authorization header
|
|
154
|
+
# Recommended: Use a strong, randomly generated key (min 32 characters)
|
|
155
|
+
# QDRANT_API_KEY=your-secure-api-key-here
|
|
156
|
+
|
|
157
|
+
# Memgraph Credentials
|
|
158
|
+
# When both are set, Memgraph requires authentication for all connections
|
|
159
|
+
# Note: Memgraph fails on empty credentials, unlike Qdrant/Valkey
|
|
160
|
+
# MEMGRAPH_USER=admin
|
|
161
|
+
# MEMGRAPH_PASSWORD=your-secure-password-here
|
|
162
|
+
|
|
163
|
+
# Valkey Password
|
|
164
|
+
# When set, Valkey requires AUTH command before accepting other commands
|
|
165
|
+
# VALKEY_PASSWORD=your-secure-password-here
|
|
166
|
+
|
|
167
|
+
# ----------------------------------------------------------------------------
|
|
168
|
+
# Quick Reference - Port Conflict Resolution
|
|
169
|
+
# ----------------------------------------------------------------------------
|
|
170
|
+
# If you have port conflicts, override the conflicting port(s):
|
|
171
|
+
#
|
|
172
|
+
# Example: Another service using port 6333
|
|
173
|
+
# QDRANT_HTTP_PORT=16333
|
|
174
|
+
#
|
|
175
|
+
# Example: Another service using port 7687
|
|
176
|
+
# MEMGRAPH_BOLT_PORT=17687
|
|
177
|
+
#
|
|
178
|
+
# Example: Another Redis/Valkey using port 6379
|
|
179
|
+
# VALKEY_PORT=16379
|
|
180
|
+
|
|
181
|
+
# ----------------------------------------------------------------------------
|
|
182
|
+
# Quick Reference - Resource Tuning
|
|
183
|
+
# ----------------------------------------------------------------------------
|
|
184
|
+
# For machines with limited resources (e.g., 8GB RAM laptop):
|
|
185
|
+
# QDRANT_MEMORY_LIMIT=1G
|
|
186
|
+
# MEMGRAPH_CONTAINER_MEMORY=2G
|
|
187
|
+
# VALKEY_MEMORY_LIMIT=512M
|
|
188
|
+
#
|
|
189
|
+
# For high-memory machines (e.g., 64GB+ workstation):
|
|
190
|
+
# QDRANT_MEMORY_LIMIT=8G
|
|
191
|
+
# MEMGRAPH_CONTAINER_MEMORY=16G
|
|
192
|
+
# VALKEY_MEMORY_LIMIT=4G
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
version: 2
|
|
4
|
+
updates:
|
|
5
|
+
- package-ecosystem: "pip"
|
|
6
|
+
directory: "/"
|
|
7
|
+
schedule:
|
|
8
|
+
interval: "weekly"
|
|
9
|
+
- package-ecosystem: "github-actions"
|
|
10
|
+
directory: "/"
|
|
11
|
+
schedule:
|
|
12
|
+
interval: "weekly"
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
---
|
|
4
|
+
# Required Status Checks for `main` Branch Protection
|
|
5
|
+
#
|
|
6
|
+
# This manifest documents the canonical list of required checks.
|
|
7
|
+
# If you rename a CI job, you MUST update both this file and the
|
|
8
|
+
# branch protection settings (Settings > Branches > main).
|
|
9
|
+
#
|
|
10
|
+
# Manifest added: OMN-2218
|
|
11
|
+
# Branch protection applied: OMN-2186
|
|
12
|
+
# Last verified: 2026-02-15
|
|
13
|
+
# Pattern: OMN-1876 (omniclaude PR #137)
|
|
14
|
+
#
|
|
15
|
+
# Applied via: gh api repos/OmniNode-ai/omnimemory/branches/main/protection -X PUT
|
|
16
|
+
# Mode: strict (branch must be up-to-date before merging)
|
|
17
|
+
# Total required checks: 10
|
|
18
|
+
|
|
19
|
+
required_checks:
|
|
20
|
+
# -- Phase 1: Quick Validation (parallel, ~2-5 min) -------------------------
|
|
21
|
+
|
|
22
|
+
- name: "Migration Freeze Check"
|
|
23
|
+
workflow: test.yml
|
|
24
|
+
job_id: migration-freeze
|
|
25
|
+
conditional: false
|
|
26
|
+
rationale: "Blocks new migrations during DB-per-repo refactor (OMN-2055)"
|
|
27
|
+
|
|
28
|
+
- name: "Code Quality"
|
|
29
|
+
workflow: test.yml
|
|
30
|
+
job_id: lint
|
|
31
|
+
conditional: false
|
|
32
|
+
rationale: "Comprehensive code quality validation (ruff format, ruff check, mypy strict)"
|
|
33
|
+
|
|
34
|
+
- name: "Pyright Type Checking"
|
|
35
|
+
workflow: test.yml
|
|
36
|
+
job_id: pyright
|
|
37
|
+
conditional: false
|
|
38
|
+
rationale: "Complementary type checking to mypy (basic mode)"
|
|
39
|
+
|
|
40
|
+
- name: "ONEX Validation"
|
|
41
|
+
workflow: test.yml
|
|
42
|
+
job_id: onex-validation
|
|
43
|
+
conditional: false
|
|
44
|
+
rationale: "ONEX pattern validation (pydantic, naming, enums, secrets, imports, model locations)"
|
|
45
|
+
|
|
46
|
+
- name: "Contract Validation"
|
|
47
|
+
workflow: test.yml
|
|
48
|
+
job_id: contract-validation
|
|
49
|
+
conditional: false
|
|
50
|
+
rationale: "Validates ONEX contract YAML files - structural correctness of node contracts"
|
|
51
|
+
|
|
52
|
+
- name: "I/O Audit"
|
|
53
|
+
workflow: test.yml
|
|
54
|
+
job_id: io-audit
|
|
55
|
+
conditional: false
|
|
56
|
+
rationale: "ONEX node purity enforcement - compute nodes must not contain forbidden I/O patterns"
|
|
57
|
+
|
|
58
|
+
- name: "Transport Import Guard"
|
|
59
|
+
workflow: test.yml
|
|
60
|
+
job_id: transport-import-guard
|
|
61
|
+
conditional: false
|
|
62
|
+
rationale: "ARCH-002: no direct transport/I/O imports in nodes/ (must use Protocol abstractions)"
|
|
63
|
+
|
|
64
|
+
- name: "Verify Architecture Handshake"
|
|
65
|
+
workflow: test.yml
|
|
66
|
+
job_id: check-handshake
|
|
67
|
+
conditional: true
|
|
68
|
+
condition: "Skipped on fork PRs (forks may not have access to cross-repo checkout)"
|
|
69
|
+
rationale: "Cross-repo architecture handshake with omnibase_core is current"
|
|
70
|
+
|
|
71
|
+
# -- Phase 2: Full Test Suite ------------------------------------------------
|
|
72
|
+
|
|
73
|
+
- name: "Tests"
|
|
74
|
+
workflow: test.yml
|
|
75
|
+
job_id: test
|
|
76
|
+
conditional: false
|
|
77
|
+
rationale: "Full test suite (depends on lint, pyright, onex-validation)"
|
|
78
|
+
|
|
79
|
+
# -- Phase 3: Aggregation ----------------------------------------------------
|
|
80
|
+
|
|
81
|
+
- name: "Test Summary"
|
|
82
|
+
workflow: test.yml
|
|
83
|
+
job_id: test-summary
|
|
84
|
+
conditional: false # uses if: always() so it always runs
|
|
85
|
+
rationale: "Aggregator for all CI jobs. Treats check-handshake skipped as acceptable for fork PRs."
|
|
86
|
+
|
|
87
|
+
# -- Explicitly excluded from required checks --------------------------------
|
|
88
|
+
excluded_checks:
|
|
89
|
+
- name: "pre-commit"
|
|
90
|
+
reason: "pre-commit.ci runs independently. Local pre-commit hooks mirror CI jobs."
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: Auto-Tag on Merge
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [closed]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
auto-tag:
|
|
9
|
+
if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release')
|
|
10
|
+
uses: OmniNode-ai/omnibase_core/.github/workflows/auto-tag-reusable.yml@main
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
name: Pre-commit
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
pull_request:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
pre-commit:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
|
+
|
|
17
|
+
- uses: actions/setup-python@v6
|
|
18
|
+
with:
|
|
19
|
+
python-version: '3.12'
|
|
20
|
+
|
|
21
|
+
# SKIP hooks that require the full project installed (uv + omnimemory).
|
|
22
|
+
# These hooks have dedicated CI jobs in .github/workflows/test.yml:
|
|
23
|
+
# - contract-linter -> contract-validation job
|
|
24
|
+
# - io-audit -> io-audit job
|
|
25
|
+
# - mypy -> lint job (pre-push stage, not triggered here anyway)
|
|
26
|
+
- uses: pre-commit/action@v3.0.1
|
|
27
|
+
env:
|
|
28
|
+
SKIP: contract-linter,io-audit
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
name: Release Dry Run
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: 'Version tag to simulate (e.g. v0.4.0)'
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
dry-run:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
- uses: astral-sh/setup-uv@v7
|
|
20
|
+
with:
|
|
21
|
+
python-version: '3.12'
|
|
22
|
+
- name: Build only (no publish)
|
|
23
|
+
run: uv build
|
|
24
|
+
- name: Verify artifacts
|
|
25
|
+
run: |
|
|
26
|
+
ls dist/*.whl dist/*.tar.gz
|
|
27
|
+
sha256sum dist/*.whl dist/*.tar.gz
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
name: Release
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
tags: ['v[0-9]*.[0-9]*.[0-9]*']
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
tag:
|
|
11
|
+
description: 'Version tag to release (e.g. v0.4.0)'
|
|
12
|
+
required: true
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: release-${{ github.repository }}-${{ github.ref_name }}
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
release:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v6
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref }}
|
|
29
|
+
|
|
30
|
+
- name: Assert clean working tree
|
|
31
|
+
run: |
|
|
32
|
+
git diff --exit-code
|
|
33
|
+
git diff --cached --exit-code
|
|
34
|
+
test -z "$(git ls-files --others --exclude-standard)"
|
|
35
|
+
|
|
36
|
+
- name: Validate tag matches pyproject.toml version
|
|
37
|
+
run: |
|
|
38
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
39
|
+
TAG="${{ inputs.tag }}"
|
|
40
|
+
else
|
|
41
|
+
TAG="${GITHUB_REF_NAME}"
|
|
42
|
+
fi
|
|
43
|
+
TAG="${TAG#v}"
|
|
44
|
+
PKG_VERSION=$(python3 -c "
|
|
45
|
+
import tomllib, sys
|
|
46
|
+
with open('pyproject.toml', 'rb') as f:
|
|
47
|
+
d = tomllib.load(f)
|
|
48
|
+
v = d.get('project', {}).get('version')
|
|
49
|
+
if not v:
|
|
50
|
+
raise SystemExit('ERROR: missing [project].version in pyproject.toml')
|
|
51
|
+
print(v)
|
|
52
|
+
")
|
|
53
|
+
if [ "$TAG" != "$PKG_VERSION" ]; then
|
|
54
|
+
echo "ERROR: tag v${TAG} does not match pyproject.toml version $PKG_VERSION"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
echo "Version validated: $PKG_VERSION"
|
|
58
|
+
|
|
59
|
+
- uses: astral-sh/setup-uv@v7
|
|
60
|
+
with:
|
|
61
|
+
python-version: '3.12'
|
|
62
|
+
|
|
63
|
+
- name: Build wheel + sdist
|
|
64
|
+
run: uv build
|
|
65
|
+
|
|
66
|
+
- name: Verify dist artifacts exist
|
|
67
|
+
run: |
|
|
68
|
+
ls -la dist/
|
|
69
|
+
ls dist/*.whl dist/*.tar.gz >/dev/null 2>&1 || {
|
|
70
|
+
echo "ERROR: expected wheel + sdist in dist/"
|
|
71
|
+
exit 1
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
- name: Publish to PyPI
|
|
75
|
+
run: |
|
|
76
|
+
uv publish --token "$UV_PUBLISH_TOKEN" dist/*.whl dist/*.tar.gz
|
|
77
|
+
env:
|
|
78
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
79
|
+
|
|
80
|
+
- name: Generate checksums
|
|
81
|
+
run: sha256sum dist/*.whl dist/*.tar.gz > dist/SHA256SUMS.txt
|
|
82
|
+
|
|
83
|
+
- name: Set release tag
|
|
84
|
+
id: tag
|
|
85
|
+
run: |
|
|
86
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
87
|
+
echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT
|
|
88
|
+
else
|
|
89
|
+
echo "tag=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
- name: Create GitHub Release
|
|
93
|
+
uses: softprops/action-gh-release@v2
|
|
94
|
+
with:
|
|
95
|
+
tag_name: ${{ steps.tag.outputs.tag }}
|
|
96
|
+
files: |
|
|
97
|
+
dist/*.whl
|
|
98
|
+
dist/*.tar.gz
|
|
99
|
+
dist/SHA256SUMS.txt
|
|
100
|
+
generate_release_notes: true
|
|
101
|
+
prerelease: ${{ contains(github.ref_name, 'rc') }}
|