siphrix 1.0.0__py3-none-any.whl
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.
- siphrix/__init__.py +94 -0
- siphrix/__main__.py +13 -0
- siphrix/adapters/__init__.py +98 -0
- siphrix/adapters/context/__init__.py +15 -0
- siphrix/adapters/context/base.py +81 -0
- siphrix/adapters/context/composite_context.py +80 -0
- siphrix/adapters/context/environment_context.py +37 -0
- siphrix/adapters/context/normalizer.py +339 -0
- siphrix/adapters/context/role_context.py +37 -0
- siphrix/adapters/context/session_context.py +37 -0
- siphrix/adapters/context/tenant_context.py +37 -0
- siphrix/adapters/executors/__init__.py +10 -0
- siphrix/adapters/executors/base.py +241 -0
- siphrix/adapters/executors/email_executor.py +384 -0
- siphrix/adapters/executors/filesystem_executor.py +271 -0
- siphrix/adapters/executors/network_executor.py +309 -0
- siphrix/adapters/executors/os_enforcement_bridge.py +32716 -0
- siphrix/adapters/executors/pre_execution_gate.py +934 -0
- siphrix/adapters/executors/sandbox_executor.py +351 -0
- siphrix/adapters/executors/shell_executor.py +240 -0
- siphrix/adapters/executors/stub_executor.py +47 -0
- siphrix/adapters/frameworks/__init__.py +7 -0
- siphrix/adapters/frameworks/agent_runtime_adapter.py +85 -0
- siphrix/adapters/frameworks/base.py +158 -0
- siphrix/adapters/frameworks/orchestration_adapter.py +65 -0
- siphrix/adapters/frameworks/workflow_adapter.py +57 -0
- siphrix/adapters/planners/__init__.py +19 -0
- siphrix/adapters/planners/anthropic_planner.py +57 -0
- siphrix/adapters/planners/base.py +93 -0
- siphrix/adapters/planners/custom_planner.py +24 -0
- siphrix/adapters/planners/gemini_planner.py +173 -0
- siphrix/adapters/planners/local_planner.py +29 -0
- siphrix/adapters/planners/mock_planner.py +84 -0
- siphrix/adapters/planners/normalizer.py +408 -0
- siphrix/adapters/planners/ollama_planner.py +46 -0
- siphrix/adapters/planners/openai_planner.py +58 -0
- siphrix/adapters/registry.py +1004 -0
- siphrix/agent.py +556 -0
- siphrix/analysis/__init__.py +144 -0
- siphrix/analysis/bounded_explorer.py +53 -0
- siphrix/analysis/collusion.py +41 -0
- siphrix/analysis/containment_plan.py +121 -0
- siphrix/analysis/cross_agent_correlation.py +159 -0
- siphrix/analysis/cross_analyzer.py +21 -0
- siphrix/analysis/cross_coverage.py +29 -0
- siphrix/analysis/cross_diff.py +15 -0
- siphrix/analysis/cross_engine.py +15 -0
- siphrix/analysis/cross_policy.py +23 -0
- siphrix/analysis/cross_rules.py +27 -0
- siphrix/analysis/cross_state.py +46 -0
- siphrix/analysis/decomposition.py +178 -0
- siphrix/analysis/determinism.py +77 -0
- siphrix/analysis/escalation.py +151 -0
- siphrix/analysis/exfiltration.py +56 -0
- siphrix/analysis/formal.py +14 -0
- siphrix/analysis/formal_properties.py +38 -0
- siphrix/analysis/observation_bus.py +41 -0
- siphrix/analysis/policies.py +24 -0
- siphrix/analysis/proof_artifacts.py +18 -0
- siphrix/analysis/simulation.py +153 -0
- siphrix/analysis/state_machine.py +218 -0
- siphrix/analysis/temporal_risk.py +155 -0
- siphrix/analysis/threat_graph.py +120 -0
- siphrix/analysis/trajectory.py +102 -0
- siphrix/analysis/zero_trust.py +120 -0
- siphrix/audit.py +564 -0
- siphrix/canon/canon_runtime.py +401 -0
- siphrix/canon/canon_v1.md +118 -0
- siphrix/canon/canon_v1_laws.yaml +419 -0
- siphrix/canon/conformance_tests.yaml +107 -0
- siphrix/cli/__init__.py +60 -0
- siphrix/cli/app.py +19328 -0
- siphrix/cli/demo.py +845 -0
- siphrix/cli/enterprise.py +28 -0
- siphrix/cli/governance.py +26 -0
- siphrix/cli/predictive.py +28 -0
- siphrix/cli/style.py +325 -0
- siphrix/coherence/__init__.py +3 -0
- siphrix/coherence/enforcer.py +87 -0
- siphrix/config.py +265 -0
- siphrix/console/__init__.py +54 -0
- siphrix/console/_public_api.py +1561 -0
- siphrix/console/ai_tool_bridge.py +1896 -0
- siphrix/console/analytics_risk_intelligence.py +8394 -0
- siphrix/console/app.py +26 -0
- siphrix/console/approval_workflow.py +4556 -0
- siphrix/console/audit_explorer.py +2079 -0
- siphrix/console/audit_workspace.py +493 -0
- siphrix/console/browser_ai_monitor.py +9242 -0
- siphrix/console/constitutional_projection.py +1743 -0
- siphrix/console/contracts.py +2096 -0
- siphrix/console/dashboard_overview.py +2577 -0
- siphrix/console/decision_workspace.py +250 -0
- siphrix/console/distributed_infrastructure.py +7744 -0
- siphrix/console/enterprise_features.py +7970 -0
- siphrix/console/high_assurance_enforcement.py +5910 -0
- siphrix/console/hosted_foundation.py +4561 -0
- siphrix/console/hosted_policy_control_plane.py +8316 -0
- siphrix/console/local_agent.py +991 -0
- siphrix/console/multi_agent_governance.py +9179 -0
- siphrix/console/notifications_alerting.py +9051 -0
- siphrix/console/operator_actions.py +475 -0
- siphrix/console/operator_api.py +2658 -0
- siphrix/console/operator_api_auth.py +206 -0
- siphrix/console/operator_command_execution.py +519 -0
- siphrix/console/operator_commands.py +1143 -0
- siphrix/console/operator_control.py +582 -0
- siphrix/console/org_rbac.py +7651 -0
- siphrix/console/policy_builder.py +1538 -0
- siphrix/console/policy_workspace.py +395 -0
- siphrix/console/replay_lab.py +3370 -0
- siphrix/console/replay_workspace.py +356 -0
- siphrix/console/risk_feed_workspace.py +462 -0
- siphrix/console/routes/__init__.py +5 -0
- siphrix/console/routes/console_routes.py +46 -0
- siphrix/console/runtime_workspace.py +592 -0
- siphrix/console/simulation_projection.py +237 -0
- siphrix/console/ui/__init__.py +93 -0
- siphrix/console/ui/console_app.py +584 -0
- siphrix/console/ui/console_rendering.py +103 -0
- siphrix/console/ui/console_ui_models.py +383 -0
- siphrix/console/ui/workspace_viewers.py +394 -0
- siphrix/console/workspace_links.py +333 -0
- siphrix/constitution/__init__.py +43 -0
- siphrix/constitution/_public_api.py +652 -0
- siphrix/constitution/agent_exchange_record.py +306 -0
- siphrix/constitution/agent_exchange_record_validation.py +46 -0
- siphrix/constitution/agent_handshake_record.py +295 -0
- siphrix/constitution/agent_handshake_record_validation.py +46 -0
- siphrix/constitution/agent_identity_record.py +442 -0
- siphrix/constitution/agent_identity_record_validation.py +127 -0
- siphrix/constitution/approval_envelope_record.py +222 -0
- siphrix/constitution/approval_envelope_record_validation.py +46 -0
- siphrix/constitution/audit_trace_record.py +459 -0
- siphrix/constitution/audit_trace_record_validation.py +128 -0
- siphrix/constitution/audit_trace_validation_pack.py +51 -0
- siphrix/constitution/audit_trace_validation_pack_validation.py +91 -0
- siphrix/constitution/context_window_record.py +466 -0
- siphrix/constitution/context_window_record_validation.py +128 -0
- siphrix/constitution/context_window_validation_pack.py +51 -0
- siphrix/constitution/context_window_validation_pack_validation.py +91 -0
- siphrix/constitution/delegation_authority_record.py +420 -0
- siphrix/constitution/delegation_authority_record_validation.py +77 -0
- siphrix/constitution/distribution_channel_record.py +238 -0
- siphrix/constitution/distribution_channel_record_validation.py +46 -0
- siphrix/constitution/distribution_lineage_record.py +249 -0
- siphrix/constitution/distribution_lineage_record_validation.py +45 -0
- siphrix/constitution/distribution_manifest_record.py +240 -0
- siphrix/constitution/distribution_manifest_record_validation.py +46 -0
- siphrix/constitution/distribution_receipt_record.py +261 -0
- siphrix/constitution/distribution_receipt_record_validation.py +45 -0
- siphrix/constitution/enclave_attestation_record.py +285 -0
- siphrix/constitution/enclave_attestation_record_validation.py +46 -0
- siphrix/constitution/enclave_boundary_record.py +275 -0
- siphrix/constitution/enclave_boundary_record_validation.py +46 -0
- siphrix/constitution/execution/__init__.py +44 -0
- siphrix/constitution/execution/_public_api.py +213 -0
- siphrix/constitution/execution/decision_executor_binding_validation.py +194 -0
- siphrix/constitution/execution/decision_executor_bindings.py +490 -0
- siphrix/constitution/execution/execution_attestation.py +587 -0
- siphrix/constitution/execution/execution_attestation_validation.py +230 -0
- siphrix/constitution/execution/execution_boundaries.py +490 -0
- siphrix/constitution/execution/execution_boundary_validation.py +252 -0
- siphrix/constitution/execution/execution_bridge.py +348 -0
- siphrix/constitution/execution/execution_bridge_resolution.py +104 -0
- siphrix/constitution/execution/execution_bridge_validation.py +114 -0
- siphrix/constitution/execution/execution_conformance.py +562 -0
- siphrix/constitution/execution/execution_conformance_validation.py +230 -0
- siphrix/constitution/execution/execution_handoff.py +603 -0
- siphrix/constitution/execution/execution_handoff_validation.py +227 -0
- siphrix/constitution/execution/execution_refusal.py +541 -0
- siphrix/constitution/execution/execution_refusal_validation.py +208 -0
- siphrix/constitution/execution/executor_capabilities.py +593 -0
- siphrix/constitution/execution/executor_capability_validation.py +299 -0
- siphrix/constitution/execution/executor_contract.py +669 -0
- siphrix/constitution/execution/executor_validation.py +282 -0
- siphrix/constitution/execution/operational/__init__.py +49 -0
- siphrix/constitution/execution/operational/_public_api.py +239 -0
- siphrix/constitution/execution/operational/boundary.py +406 -0
- siphrix/constitution/execution/operational/capability.py +291 -0
- siphrix/constitution/execution/operational/completion.py +340 -0
- siphrix/constitution/execution/operational/completion_validation.py +142 -0
- siphrix/constitution/execution/operational/dispatch_binding.py +319 -0
- siphrix/constitution/execution/operational/dispatch_binding_resolution.py +133 -0
- siphrix/constitution/execution/operational/dispatch_binding_validation.py +123 -0
- siphrix/constitution/execution/operational/handoff.py +335 -0
- siphrix/constitution/execution/operational/handoff_consumption.py +121 -0
- siphrix/constitution/execution/operational/handoff_validation.py +107 -0
- siphrix/constitution/execution/operational/identity.py +322 -0
- siphrix/constitution/execution/operational/outcome_production.py +287 -0
- siphrix/constitution/execution/operational/outcome_production_resolution.py +128 -0
- siphrix/constitution/execution/operational/outcome_production_validation.py +88 -0
- siphrix/constitution/execution/operational/production_completion.py +279 -0
- siphrix/constitution/execution/operational/production_completion_resolution.py +121 -0
- siphrix/constitution/execution/operational/production_completion_validation.py +89 -0
- siphrix/constitution/execution/operational/record.py +258 -0
- siphrix/constitution/execution/operational/refusal.py +306 -0
- siphrix/constitution/execution/operational/refusal_validation.py +126 -0
- siphrix/constitution/execution/operational/registry.py +318 -0
- siphrix/constitution/execution/operational/registry_validation.py +222 -0
- siphrix/constitution/execution/operational/request.py +287 -0
- siphrix/constitution/execution/operational/request_validation.py +126 -0
- siphrix/constitution/execution/operational/result.py +302 -0
- siphrix/constitution/execution/operational/result_validation.py +126 -0
- siphrix/constitution/execution/operational/validation.py +349 -0
- siphrix/constitution/inter_agent_policy_record.py +315 -0
- siphrix/constitution/inter_agent_policy_record_validation.py +66 -0
- siphrix/constitution/mesh_route_record.py +288 -0
- siphrix/constitution/mesh_route_record_validation.py +46 -0
- siphrix/constitution/mesh_topology_record.py +285 -0
- siphrix/constitution/mesh_topology_record_validation.py +46 -0
- siphrix/constitution/organization_entry_gate.py +367 -0
- siphrix/constitution/organization_entry_gate_validation.py +112 -0
- siphrix/constitution/organization_execution_scope_binding.py +360 -0
- siphrix/constitution/organization_execution_scope_binding_validation.py +112 -0
- siphrix/constitution/organization_identity.py +310 -0
- siphrix/constitution/organization_identity_validation.py +100 -0
- siphrix/constitution/organization_membership.py +345 -0
- siphrix/constitution/organization_membership_validation.py +111 -0
- siphrix/constitution/organization_policy_attachment.py +381 -0
- siphrix/constitution/organization_policy_attachment_validation.py +114 -0
- siphrix/constitution/organization_role.py +352 -0
- siphrix/constitution/organization_role_assignment.py +368 -0
- siphrix/constitution/organization_role_assignment_validation.py +113 -0
- siphrix/constitution/organization_role_validation.py +110 -0
- siphrix/constitution/organization_scope.py +333 -0
- siphrix/constitution/organization_scope_bridge.py +365 -0
- siphrix/constitution/organization_scope_bridge_validation.py +112 -0
- siphrix/constitution/organization_scope_validation.py +108 -0
- siphrix/constitution/organization_validation_pack.py +128 -0
- siphrix/constitution/organization_validation_pack_validation.py +133 -0
- siphrix/constitution/quorum_requirement_record.py +220 -0
- siphrix/constitution/quorum_requirement_record_validation.py +46 -0
- siphrix/constitution/replay_record.py +431 -0
- siphrix/constitution/replay_record_validation.py +128 -0
- siphrix/constitution/replay_validation_pack.py +51 -0
- siphrix/constitution/replay_validation_pack_validation.py +90 -0
- siphrix/constitution/trust_attestation_record.py +244 -0
- siphrix/constitution/trust_attestation_record_validation.py +46 -0
- siphrix/constitution/trust_boundary_record.py +253 -0
- siphrix/constitution/trust_boundary_record_validation.py +46 -0
- siphrix/constitution/trust_relation_record.py +228 -0
- siphrix/constitution/trust_relation_record_validation.py +46 -0
- siphrix/contracts/__init__.py +52 -0
- siphrix/contracts/_public_api.py +672 -0
- siphrix/contracts/_validation_base.py +116 -0
- siphrix/contracts/_validation_constitutional.py +2074 -0
- siphrix/contracts/_validation_core.py +2273 -0
- siphrix/contracts/_validation_integration.py +292 -0
- siphrix/contracts/_validation_projected.py +1216 -0
- siphrix/contracts/_validation_risk.py +1772 -0
- siphrix/contracts/_validation_simulation.py +1406 -0
- siphrix/contracts/_validation_workspace.py +4702 -0
- siphrix/contracts/action.py +218 -0
- siphrix/contracts/adapter_capability.py +107 -0
- siphrix/contracts/agent_identity.py +221 -0
- siphrix/contracts/approval_runtime.py +803 -0
- siphrix/contracts/audit.py +18 -0
- siphrix/contracts/audit_event.py +132 -0
- siphrix/contracts/constitutional_audit.py +661 -0
- siphrix/contracts/constitutional_diff.py +1100 -0
- siphrix/contracts/context.py +101 -0
- siphrix/contracts/decision.py +116 -0
- siphrix/contracts/delegation_graph.py +571 -0
- siphrix/contracts/escalation_paths.py +760 -0
- siphrix/contracts/execution.py +183 -0
- siphrix/contracts/flow.py +253 -0
- siphrix/contracts/inter_agent_policy.py +581 -0
- siphrix/contracts/multi_agent.py +12 -0
- siphrix/contracts/planner.py +251 -0
- siphrix/contracts/quorum_resolver.py +753 -0
- siphrix/contracts/risk.py +11 -0
- siphrix/contracts/simulation.py +861 -0
- siphrix/contracts/trust_relations.py +726 -0
- siphrix/contracts/validation.py +229 -0
- siphrix/devtools/__init__.py +1 -0
- siphrix/doctor.py +302 -0
- siphrix/engine/__init__.py +65 -0
- siphrix/engine/canonical_manifest.py +18 -0
- siphrix/engine/gap_audit.py +38 -0
- siphrix/engine/runner_profiles.py +259 -0
- siphrix/engine/stack_declaration.py +30 -0
- siphrix/engine/unified_runner.py +420 -0
- siphrix/examples/__init__.py +47 -0
- siphrix/examples/integration_audit.py +7 -0
- siphrix/examples/integration_layer_utils.py +38 -0
- siphrix/examples/integration_snapshot.py +7 -0
- siphrix/examples/role_policy_resolver.py +18 -0
- siphrix/exec_intercept/__init__.py +4 -0
- siphrix/exec_intercept/evaluator.py +188 -0
- siphrix/exec_intercept/intercept.py +83 -0
- siphrix/exec_intercept/policy.py +25 -0
- siphrix/exec_intercept/types.py +48 -0
- siphrix/explanation.py +114 -0
- siphrix/foundation/__init__.py +111 -0
- siphrix/foundation/analyzer.py +37 -0
- siphrix/foundation/aspl.py +68 -0
- siphrix/foundation/aspl_lexer.py +97 -0
- siphrix/foundation/aspl_types.py +64 -0
- siphrix/foundation/audit_chain.py +99 -0
- siphrix/foundation/canon.py +30 -0
- siphrix/foundation/poe.py +44 -0
- siphrix/foundation/policy_signing.py +139 -0
- siphrix/foundation/policy_sources.py +30 -0
- siphrix/foundation/preflight.py +20 -0
- siphrix/foundation/proof_bundle.py +95 -0
- siphrix/foundation/state.py +30 -0
- siphrix/governance/__init__.py +39 -0
- siphrix/governance/_public_api.py +1012 -0
- siphrix/governance/audit/__init__.py +1 -0
- siphrix/governance/audit/certification.py +114 -0
- siphrix/governance/audit/chain_integrity.py +186 -0
- siphrix/governance/audit/chain_retrieval_truth.py +144 -0
- siphrix/governance/audit/chain_truth.py +175 -0
- siphrix/governance/audit/closure_manifest.py +103 -0
- siphrix/governance/audit/correlation_readiness.py +155 -0
- siphrix/governance/audit/cross_layer_consistency.py +97 -0
- siphrix/governance/audit/evidence_assurance.py +207 -0
- siphrix/governance/audit/export.py +98 -0
- siphrix/governance/audit/exporter.py +173 -0
- siphrix/governance/audit/forensic_readiness.py +245 -0
- siphrix/governance/audit/global_determinism.py +81 -0
- siphrix/governance/audit/global_truth.py +86 -0
- siphrix/governance/audit/handoff.py +84 -0
- siphrix/governance/audit/incident_readiness.py +148 -0
- siphrix/governance/audit/incident_reconstruction.py +137 -0
- siphrix/governance/audit/incident_reproducibility.py +75 -0
- siphrix/governance/audit/index.py +175 -0
- siphrix/governance/audit/index_query_consistency.py +142 -0
- siphrix/governance/audit/integrity.py +166 -0
- siphrix/governance/audit/lineage_confidence.py +201 -0
- siphrix/governance/audit/match_safety.py +114 -0
- siphrix/governance/audit/no_overclaim.py +88 -0
- siphrix/governance/audit/package_safety.py +100 -0
- siphrix/governance/audit/packaging_readiness.py +130 -0
- siphrix/governance/audit/packaging_truth.py +107 -0
- siphrix/governance/audit/query_engine.py +461 -0
- siphrix/governance/audit/query_honesty.py +188 -0
- siphrix/governance/audit/query_integrity.py +346 -0
- siphrix/governance/audit/query_projection.py +90 -0
- siphrix/governance/audit/query_projection_faithfulness.py +154 -0
- siphrix/governance/audit/query_readiness.py +173 -0
- siphrix/governance/audit/query_reproducibility.py +138 -0
- siphrix/governance/audit/query_truth.py +164 -0
- siphrix/governance/audit/reconstruction_chain_truth.py +137 -0
- siphrix/governance/audit/record.py +127 -0
- siphrix/governance/audit/record_admissibility.py +254 -0
- siphrix/governance/audit/reproducibility.py +141 -0
- siphrix/governance/audit/retention_redaction_foundation.py +266 -0
- siphrix/governance/audit/retrieval_readiness.py +156 -0
- siphrix/governance/audit/schema.py +226 -0
- siphrix/governance/audit/tamper_detection.py +136 -0
- siphrix/governance/audit/timeline.py +161 -0
- siphrix/governance/audit/timeline_hardening.py +209 -0
- siphrix/governance/audit/workspace_projection.py +111 -0
- siphrix/governance/compliance/__init__.py +1 -0
- siphrix/governance/compliance/export.py +58 -0
- siphrix/governance/compliance/mapping.py +115 -0
- siphrix/governance/compliance/replay.py +45 -0
- siphrix/governance/correlation_graph.py +391 -0
- siphrix/governance/correlation_graph_integrity.py +120 -0
- siphrix/governance/decision_ledger.py +79 -0
- siphrix/governance/delegated_authority.py +109 -0
- siphrix/governance/evidence/__init__.py +1 -0
- siphrix/governance/evidence/bundle.py +127 -0
- siphrix/governance/evidence/bundle_faithfulness.py +170 -0
- siphrix/governance/evidence/export.py +99 -0
- siphrix/governance/evidence/provenance.py +137 -0
- siphrix/governance/evidence/retention.py +54 -0
- siphrix/governance/exception_governance.py +112 -0
- siphrix/governance/explainability.py +31 -0
- siphrix/governance/governance_record.py +55 -0
- siphrix/governance/incident/__init__.py +1 -0
- siphrix/governance/incident/grouping_honesty.py +105 -0
- siphrix/governance/incident/reconstruction.py +176 -0
- siphrix/governance/incident/review_package.py +156 -0
- siphrix/governance/incident/truth.py +122 -0
- siphrix/governance/operator_investigation_view.py +113 -0
- siphrix/governance/policy_framework.py +45 -0
- siphrix/governance/quorum_approval.py +147 -0
- siphrix/governance/quorum_store.py +348 -0
- siphrix/governance/regulatory_profiles.py +83 -0
- siphrix/governance/retention_workflow.py +41 -0
- siphrix/hosted/__init__.py +36 -0
- siphrix/hosted/admin_dashboard.py +930 -0
- siphrix/hosted/scaffold.py +958 -0
- siphrix/hosted/store.py +1031 -0
- siphrix/identity/__init__.py +3 -0
- siphrix/identity/loader.py +14 -0
- siphrix/identity/schema.py +64 -0
- siphrix/identity/temp_builder.py +29 -0
- siphrix/identity/validator.py +17 -0
- siphrix/integration_flow/__init__.py +5 -0
- siphrix/integration_flow/orchestrator.py +423 -0
- siphrix/integrations/__init__.py +70 -0
- siphrix/integrations/audit.py +100 -0
- siphrix/integrations/layer_utils.py +419 -0
- siphrix/integrations/snapshot.py +245 -0
- siphrix/intention/__init__.py +3 -0
- siphrix/intention/interpreter.py +116 -0
- siphrix/intention/types.py +18 -0
- siphrix/local_agent.py +375 -0
- siphrix/local_daemon.py +1365 -0
- siphrix/local_diagnostics.py +273 -0
- siphrix/local_hosted_import/__init__.py +32 -0
- siphrix/local_hosted_import/cli.py +276 -0
- siphrix/local_hosted_import/daemon_api.py +234 -0
- siphrix/local_hosted_import/store.py +430 -0
- siphrix/local_hosted_import/verifier.py +560 -0
- siphrix/local_state.py +1081 -0
- siphrix/logs/__init__.py +3 -0
- siphrix/logs/logger.py +43 -0
- siphrix/memory/__init__.py +3 -0
- siphrix/memory/api.py +207 -0
- siphrix/memory/schema.py +33 -0
- siphrix/memory/store.py +32 -0
- siphrix/orchestrator/__init__.py +14 -0
- siphrix/orchestrator/llm_stub.py +43 -0
- siphrix/orchestrator/pipeline.py +251 -0
- siphrix/policies/agent_default_v1.yaml +22 -0
- siphrix/policies/global_baseline_v1.yaml +40 -0
- siphrix/policies/index.yaml +5 -0
- siphrix/policies/org_default_v1.yaml +17 -0
- siphrix/policies/team_default_v1.yaml +22 -0
- siphrix/policy_packs/__init__.py +153 -0
- siphrix/policy_packs/bridge.py +223 -0
- siphrix/policy_packs/dev_agent_defaults.yaml +53 -0
- siphrix/policy_packs/enterprise_defaults.yaml +57 -0
- siphrix/policy_packs/resolver.py +83 -0
- siphrix/policy_packs/roles/admin.yaml +33 -0
- siphrix/policy_packs/roles/developer.yaml +36 -0
- siphrix/policy_packs/roles/finance.yaml +26 -0
- siphrix/policy_packs/roles/support.yaml +24 -0
- siphrix/policy_packs/safe_defaults.yaml +279 -0
- siphrix/policy_packs/signing.py +279 -0
- siphrix/policy_remote.py +136 -0
- siphrix/policy_runtime/__init__.py +20 -0
- siphrix/policy_runtime/input.py +178 -0
- siphrix/policy_runtime/loader.py +569 -0
- siphrix/policy_runtime/manager.py +1066 -0
- siphrix/policy_runtime/registry.py +73 -0
- siphrix/policy_runtime/rule_eval.py +91 -0
- siphrix/policy_runtime/types.py +87 -0
- siphrix/policy_sources/source.py +129 -0
- siphrix/policy_versioning/__init__.py +39 -0
- siphrix/policy_versioning/_public_api.py +3994 -0
- siphrix/policy_versioning/activation/__init__.py +1 -0
- siphrix/policy_versioning/activation/activation.py +100 -0
- siphrix/policy_versioning/activation/atomicity.py +96 -0
- siphrix/policy_versioning/activation/atomicity_truth.py +98 -0
- siphrix/policy_versioning/activation/chain_truth.py +113 -0
- siphrix/policy_versioning/activation/eligibility.py +117 -0
- siphrix/policy_versioning/activation/emergency_control.py +125 -0
- siphrix/policy_versioning/activation/emergency_safety.py +94 -0
- siphrix/policy_versioning/activation/foundation_readiness.py +160 -0
- siphrix/policy_versioning/activation/honesty.py +124 -0
- siphrix/policy_versioning/activation/integrity.py +205 -0
- siphrix/policy_versioning/activation/projection.py +121 -0
- siphrix/policy_versioning/activation/projection_faithfulness.py +109 -0
- siphrix/policy_versioning/activation/readiness.py +184 -0
- siphrix/policy_versioning/activation/reproducibility.py +64 -0
- siphrix/policy_versioning/activation/rollback_orchestration.py +190 -0
- siphrix/policy_versioning/activation/rollback_preparation.py +156 -0
- siphrix/policy_versioning/activation/rollback_safety.py +75 -0
- siphrix/policy_versioning/activation/rollback_truth.py +105 -0
- siphrix/policy_versioning/activation/rollout.py +174 -0
- siphrix/policy_versioning/activation/rollout_eligibility.py +169 -0
- siphrix/policy_versioning/activation/staging.py +115 -0
- siphrix/policy_versioning/attestation_view.py +491 -0
- siphrix/policy_versioning/batch_replay_reports.py +626 -0
- siphrix/policy_versioning/compilation/__init__.py +1 -0
- siphrix/policy_versioning/compilation/compiler.py +816 -0
- siphrix/policy_versioning/compilation/compiler_coverage.py +521 -0
- siphrix/policy_versioning/compilation/compiler_diff.py +441 -0
- siphrix/policy_versioning/compilation/compiler_export.py +2350 -0
- siphrix/policy_versioning/compilation/compiler_honesty.py +783 -0
- siphrix/policy_versioning/compilation/compiler_integrity.py +1071 -0
- siphrix/policy_versioning/compilation/compiler_readiness.py +819 -0
- siphrix/policy_versioning/compilation/compiler_reproducibility.py +452 -0
- siphrix/policy_versioning/compilation/compiler_safety.py +636 -0
- siphrix/policy_versioning/compilation/compiler_summary.py +325 -0
- siphrix/policy_versioning/compilation/compiler_trace.py +275 -0
- siphrix/policy_versioning/compilation/consistency.py +117 -0
- siphrix/policy_versioning/compilation/cross_run_analysis.py +154 -0
- siphrix/policy_versioning/compilation/derivation.py +110 -0
- siphrix/policy_versioning/compilation/expected_overlays.py +135 -0
- siphrix/policy_versioning/compilation/fingerprint_registry.py +167 -0
- siphrix/policy_versioning/compilation/gap_enforcement.py +59 -0
- siphrix/policy_versioning/compilation/graph.py +201 -0
- siphrix/policy_versioning/compilation/graph_integrity.py +187 -0
- siphrix/policy_versioning/compilation/graph_projection.py +68 -0
- siphrix/policy_versioning/compilation/lineage.py +73 -0
- siphrix/policy_versioning/compilation/lineage_honesty.py +92 -0
- siphrix/policy_versioning/compilation/models.py +991 -0
- siphrix/policy_versioning/compilation/regression.py +108 -0
- siphrix/policy_versioning/compilation/resolution.py +453 -0
- siphrix/policy_versioning/compilation/semantic_dependency.py +104 -0
- siphrix/policy_versioning/compilation/stage33_export.py +161 -0
- siphrix/policy_versioning/compilation/stage33_reproducibility.py +68 -0
- siphrix/policy_versioning/compilation/stage34_readiness.py +96 -0
- siphrix/policy_versioning/compilation/trace.py +70 -0
- siphrix/policy_versioning/compilation/trace_integrity.py +106 -0
- siphrix/policy_versioning/context/__init__.py +1 -0
- siphrix/policy_versioning/context/compat.py +611 -0
- siphrix/policy_versioning/context/consistency.py +725 -0
- siphrix/policy_versioning/context/fingerprint.py +272 -0
- siphrix/policy_versioning/context/foundation_readiness.py +668 -0
- siphrix/policy_versioning/context/invariants.py +940 -0
- siphrix/policy_versioning/context/migration.py +477 -0
- siphrix/policy_versioning/context/models.py +1908 -0
- siphrix/policy_versioning/context/normalization_hardening.py +444 -0
- siphrix/policy_versioning/context/provenance.py +502 -0
- siphrix/policy_versioning/context/resolver.py +2397 -0
- siphrix/policy_versioning/context/resolver_arbitration.py +783 -0
- siphrix/policy_versioning/context/resolver_export.py +552 -0
- siphrix/policy_versioning/context/resolver_honesty.py +509 -0
- siphrix/policy_versioning/context/resolver_integrity.py +741 -0
- siphrix/policy_versioning/context/resolver_readiness.py +591 -0
- siphrix/policy_versioning/context/resolver_reproducibility.py +347 -0
- siphrix/policy_versioning/counterfactual_models.py +417 -0
- siphrix/policy_versioning/distribution/__init__.py +1 -0
- siphrix/policy_versioning/distribution/foundation_readiness.py +193 -0
- siphrix/policy_versioning/distribution/honesty.py +107 -0
- siphrix/policy_versioning/distribution/integrity.py +182 -0
- siphrix/policy_versioning/distribution/protocol.py +197 -0
- siphrix/policy_versioning/distribution/protocol_readiness.py +173 -0
- siphrix/policy_versioning/distribution/readiness.py +105 -0
- siphrix/policy_versioning/distribution/reproducibility.py +114 -0
- siphrix/policy_versioning/environment_view.py +392 -0
- siphrix/policy_versioning/evaluation/__init__.py +1 -0
- siphrix/policy_versioning/evaluation/contradictions.py +135 -0
- siphrix/policy_versioning/evaluation/engine.py +353 -0
- siphrix/policy_versioning/evaluation/honesty.py +145 -0
- siphrix/policy_versioning/evaluation/integrity.py +226 -0
- siphrix/policy_versioning/evaluation/matching.py +520 -0
- siphrix/policy_versioning/evaluation/models.py +344 -0
- siphrix/policy_versioning/evaluation/projection.py +133 -0
- siphrix/policy_versioning/evaluation/readiness.py +164 -0
- siphrix/policy_versioning/evaluation/reproducibility.py +104 -0
- siphrix/policy_versioning/evaluation/result.py +359 -0
- siphrix/policy_versioning/evaluation/safety.py +103 -0
- siphrix/policy_versioning/explanation/__init__.py +1 -0
- siphrix/policy_versioning/explanation/closure.py +71 -0
- siphrix/policy_versioning/explanation/consistency.py +101 -0
- siphrix/policy_versioning/explanation/contracts.py +120 -0
- siphrix/policy_versioning/explanation/diff.py +231 -0
- siphrix/policy_versioning/explanation/drift.py +73 -0
- siphrix/policy_versioning/explanation/projection.py +143 -0
- siphrix/policy_versioning/explanation/readiness.py +164 -0
- siphrix/policy_versioning/explanation/registry.py +176 -0
- siphrix/policy_versioning/explanation/reproducibility.py +117 -0
- siphrix/policy_versioning/explanation/safety.py +109 -0
- siphrix/policy_versioning/explanation/stability.py +49 -0
- siphrix/policy_versioning/intake_governance.py +378 -0
- siphrix/policy_versioning/integration.py +424 -0
- siphrix/policy_versioning/investigation.py +2222 -0
- siphrix/policy_versioning/investigation_hardening.py +2307 -0
- siphrix/policy_versioning/lifecycle/__init__.py +1 -0
- siphrix/policy_versioning/lifecycle/final_stage3_honesty.py +116 -0
- siphrix/policy_versioning/lifecycle/final_stage3_integrity.py +173 -0
- siphrix/policy_versioning/lifecycle/final_stage3_readiness.py +98 -0
- siphrix/policy_versioning/lifecycle/point2_certification.py +135 -0
- siphrix/policy_versioning/lifecycle/point2_closure_assurance.py +182 -0
- siphrix/policy_versioning/lifecycle/point2_closure_manifest.py +107 -0
- siphrix/policy_versioning/lifecycle/point2_closure_readiness.py +96 -0
- siphrix/policy_versioning/lifecycle/point2_contracts.py +153 -0
- siphrix/policy_versioning/lifecycle/point2_handoff.py +98 -0
- siphrix/policy_versioning/lifecycle/point2_honesty.py +120 -0
- siphrix/policy_versioning/lifecycle/point2_integrity.py +166 -0
- siphrix/policy_versioning/lifecycle/point2_operational_profile.py +97 -0
- siphrix/policy_versioning/lifecycle/point2_postclosure_drift.py +94 -0
- siphrix/policy_versioning/lifecycle/point2_seal_enforcement.py +197 -0
- siphrix/policy_versioning/lifecycle/point2_transition_governance.py +187 -0
- siphrix/policy_versioning/lifecycle/point3_certification.py +194 -0
- siphrix/policy_versioning/lifecycle/point3_certification_stability.py +89 -0
- siphrix/policy_versioning/lifecycle/point3_closure_manifest.py +170 -0
- siphrix/policy_versioning/lifecycle/point3_closure_readiness.py +128 -0
- siphrix/policy_versioning/lifecycle/point3_contract_postclosure.py +85 -0
- siphrix/policy_versioning/lifecycle/point3_contracts.py +139 -0
- siphrix/policy_versioning/lifecycle/point3_drift_detection.py +139 -0
- siphrix/policy_versioning/lifecycle/point3_drift_impact.py +82 -0
- siphrix/policy_versioning/lifecycle/point3_handoff.py +154 -0
- siphrix/policy_versioning/lifecycle/point3_honesty.py +120 -0
- siphrix/policy_versioning/lifecycle/point3_integrity.py +170 -0
- siphrix/policy_versioning/lifecycle/point3_operational_profile.py +158 -0
- siphrix/policy_versioning/lifecycle/point3_postclosure_assurance.py +80 -0
- siphrix/policy_versioning/lifecycle/point3_postclosure_audit.py +78 -0
- siphrix/policy_versioning/lifecycle/point3_recertification.py +98 -0
- siphrix/policy_versioning/lifecycle/point3_seal_enforcement.py +167 -0
- siphrix/policy_versioning/lifecycle/policy_final_point3_readiness.py +135 -0
- siphrix/policy_versioning/lifecycle/stage3_certification.py +114 -0
- siphrix/policy_versioning/lifecycle/stage3_chain_truth.py +94 -0
- siphrix/policy_versioning/lifecycle/stage3_closure_manifest.py +113 -0
- siphrix/policy_versioning/lifecycle/stage3_contracts.py +132 -0
- siphrix/policy_versioning/lifecycle/stage3_drift_preparation.py +97 -0
- siphrix/policy_versioning/lifecycle/stage3_export_integration.py +124 -0
- siphrix/policy_versioning/lifecycle/stage3_handoff.py +92 -0
- siphrix/policy_versioning/lifecycle/stage3_operational_profile.py +83 -0
- siphrix/policy_versioning/lifecycle/stage3_operator_investigation_views.py +95 -0
- siphrix/policy_versioning/lifecycle/stage3_replay_integration.py +150 -0
- siphrix/policy_versioning/lifecycle/stage3_scope_assurance.py +104 -0
- siphrix/policy_versioning/local_policy_intake.py +161 -0
- siphrix/policy_versioning/local_policy_intake_hardening.py +100 -0
- siphrix/policy_versioning/local_policy_trust.py +142 -0
- siphrix/policy_versioning/local_policy_trust_safety.py +66 -0
- siphrix/policy_versioning/manifest/__init__.py +1 -0
- siphrix/policy_versioning/manifest/authority_contracts.py +169 -0
- siphrix/policy_versioning/manifest/authority_lineage.py +215 -0
- siphrix/policy_versioning/manifest/authority_overlap.py +250 -0
- siphrix/policy_versioning/manifest/channel_resolver.py +151 -0
- siphrix/policy_versioning/manifest/compatibility.py +144 -0
- siphrix/policy_versioning/manifest/compatibility_hardening.py +154 -0
- siphrix/policy_versioning/manifest/integrity.py +137 -0
- siphrix/policy_versioning/manifest/manifest.py +310 -0
- siphrix/policy_versioning/manifest/projection.py +143 -0
- siphrix/policy_versioning/manifest/projection_faithfulness.py +108 -0
- siphrix/policy_versioning/manifest/registry.py +156 -0
- siphrix/policy_versioning/manifest/registry_provenance.py +98 -0
- siphrix/policy_versioning/manifest/registry_provenance_truth.py +105 -0
- siphrix/policy_versioning/manifest/remote_channel_resolution.py +104 -0
- siphrix/policy_versioning/manifest/remote_channel_truth.py +100 -0
- siphrix/policy_versioning/manifest/remote_local_consistency.py +106 -0
- siphrix/policy_versioning/manifest/reproducibility.py +103 -0
- siphrix/policy_versioning/operator_hardening.py +2384 -0
- siphrix/policy_versioning/operator_views.py +1762 -0
- siphrix/policy_versioning/orchestration/__init__.py +1 -0
- siphrix/policy_versioning/orchestration/audit.py +60 -0
- siphrix/policy_versioning/orchestration/chain_truth.py +135 -0
- siphrix/policy_versioning/orchestration/fetch.py +158 -0
- siphrix/policy_versioning/orchestration/fetch_selection_safety.py +76 -0
- siphrix/policy_versioning/orchestration/honesty.py +132 -0
- siphrix/policy_versioning/orchestration/integrity.py +235 -0
- siphrix/policy_versioning/orchestration/projection.py +132 -0
- siphrix/policy_versioning/orchestration/projection_faithfulness.py +125 -0
- siphrix/policy_versioning/orchestration/readiness.py +112 -0
- siphrix/policy_versioning/orchestration/reproducibility.py +63 -0
- siphrix/policy_versioning/orchestration/resolution_trace.py +420 -0
- siphrix/policy_versioning/orchestration/revocation.py +160 -0
- siphrix/policy_versioning/orchestration/revocation_truth.py +95 -0
- siphrix/policy_versioning/orchestration/semantic_diff.py +920 -0
- siphrix/policy_versioning/orchestration/state.py +89 -0
- siphrix/policy_versioning/orchestration/target_truth.py +100 -0
- siphrix/policy_versioning/overlays/__init__.py +1 -0
- siphrix/policy_versioning/overlays/applicability.py +482 -0
- siphrix/policy_versioning/overlays/conflicts.py +435 -0
- siphrix/policy_versioning/overlays/explanations.py +519 -0
- siphrix/policy_versioning/overlays/field_merge.py +740 -0
- siphrix/policy_versioning/overlays/merge.py +622 -0
- siphrix/policy_versioning/overlays/models.py +811 -0
- siphrix/policy_versioning/overlays/readiness.py +639 -0
- siphrix/policy_versioning/overlays/scope.py +471 -0
- siphrix/policy_versioning/overlays/selector.py +888 -0
- siphrix/policy_versioning/overlays/semantics.py +353 -0
- siphrix/policy_versioning/overlays/soundness.py +345 -0
- siphrix/policy_versioning/policy_lineage.py +295 -0
- siphrix/policy_versioning/promotion_execution.py +355 -0
- siphrix/policy_versioning/registry_config.py +165 -0
- siphrix/policy_versioning/registry_intake.py +388 -0
- siphrix/policy_versioning/registry_view.py +397 -0
- siphrix/policy_versioning/replay/__init__.py +1 -0
- siphrix/policy_versioning/replay/compat.py +539 -0
- siphrix/policy_versioning/replay/engine.py +1657 -0
- siphrix/policy_versioning/replay/export_integration.py +602 -0
- siphrix/policy_versioning/replay/models.py +1528 -0
- siphrix/policy_versioning/replay/queries.py +549 -0
- siphrix/policy_versioning/replay/view_models.py +708 -0
- siphrix/policy_versioning/replay/workspace.py +366 -0
- siphrix/policy_versioning/resource_classifier.py +270 -0
- siphrix/policy_versioning/rollback_execution.py +471 -0
- siphrix/policy_versioning/runtime_integration/__init__.py +1 -0
- siphrix/policy_versioning/runtime_integration/bundle_assessment.py +85 -0
- siphrix/policy_versioning/runtime_integration/causal_attribution.py +122 -0
- siphrix/policy_versioning/runtime_integration/export_integration.py +162 -0
- siphrix/policy_versioning/runtime_integration/integration_chain_truth.py +113 -0
- siphrix/policy_versioning/runtime_integration/integration_closure_readiness.py +340 -0
- siphrix/policy_versioning/runtime_integration/integration_honesty.py +151 -0
- siphrix/policy_versioning/runtime_integration/integration_integrity.py +257 -0
- siphrix/policy_versioning/runtime_integration/integration_readiness.py +102 -0
- siphrix/policy_versioning/runtime_integration/integration_reproducibility.py +161 -0
- siphrix/policy_versioning/runtime_integration/investigation_views.py +89 -0
- siphrix/policy_versioning/runtime_integration/justification.py +140 -0
- siphrix/policy_versioning/runtime_integration/justification_honesty.py +130 -0
- siphrix/policy_versioning/runtime_integration/operator_views.py +97 -0
- siphrix/policy_versioning/runtime_integration/projection_contracts.py +95 -0
- siphrix/policy_versioning/runtime_integration/projection_faithfulness.py +120 -0
- siphrix/policy_versioning/runtime_integration/provenance_integrity.py +135 -0
- siphrix/policy_versioning/runtime_integration/replay_integration.py +202 -0
- siphrix/policy_versioning/runtime_integration/timeline_truth.py +334 -0
- siphrix/policy_versioning/runtime_integration/timeline_workspace.py +104 -0
- siphrix/policy_versioning/runtime_integration/trace_builder.py +152 -0
- siphrix/policy_versioning/runtime_integration/trace_integrity.py +193 -0
- siphrix/policy_versioning/runtime_integration/trace_linkage.py +58 -0
- siphrix/policy_versioning/runtime_integration/trace_models.py +490 -0
- siphrix/policy_versioning/runtime_integration/view_safety.py +197 -0
- siphrix/policy_versioning/session_resolver.py +303 -0
- siphrix/policy_versioning/snapshots/__init__.py +1 -0
- siphrix/policy_versioning/snapshots/approval_state_resolver.py +229 -0
- siphrix/policy_versioning/snapshots/decision_diff.py +2124 -0
- siphrix/policy_versioning/snapshots/decision_ready_policy.py +215 -0
- siphrix/policy_versioning/snapshots/decision_ready_policy_safety.py +95 -0
- siphrix/policy_versioning/snapshots/decision_snapshot_store.py +861 -0
- siphrix/policy_versioning/snapshots/lineage_engine.py +447 -0
- siphrix/policy_versioning/snapshots/lineage_integrity.py +383 -0
- siphrix/policy_versioning/snapshots/lineage_store.py +145 -0
- siphrix/policy_versioning/snapshots/snapshot_integrity.py +872 -0
- siphrix/policy_versioning/temporal_policy_resolver.py +326 -0
- siphrix/policy_versioning/tenant_view.py +262 -0
- siphrix/policy_versioning/transition_governance.py +356 -0
- siphrix/policy_versioning/transition_ledger.py +278 -0
- siphrix/policy_versioning/trust/__init__.py +1 -0
- siphrix/policy_versioning/trust/chain_consistency.py +173 -0
- siphrix/policy_versioning/trust/chain_risk.py +124 -0
- siphrix/policy_versioning/trust/epoch_drift.py +214 -0
- siphrix/policy_versioning/trust/foundation_readiness.py +127 -0
- siphrix/policy_versioning/trust/governance_readiness.py +154 -0
- siphrix/policy_versioning/trust/history.py +131 -0
- siphrix/policy_versioning/trust/honesty.py +96 -0
- siphrix/policy_versioning/trust/trust.py +373 -0
- siphrix/policy_versioning/versioned_policy_codec.py +312 -0
- siphrix/readiness/__init__.py +32 -0
- siphrix/readiness/assessor.py +260 -0
- siphrix/readiness/checks.py +1325 -0
- siphrix/readiness/models.py +102 -0
- siphrix/release.py +288 -0
- siphrix/resilience/__init__.py +123 -0
- siphrix/resilience/adaptive_guardrail.py +169 -0
- siphrix/resilience/audit_log_model.py +42 -0
- siphrix/resilience/blast_radius_control.py +115 -0
- siphrix/resilience/damage_containment.py +31 -0
- siphrix/resilience/distributed_control.py +150 -0
- siphrix/resilience/distributed_lock.py +34 -0
- siphrix/resilience/enforcement_cluster.py +66 -0
- siphrix/resilience/evidence_adaptation.py +85 -0
- siphrix/resilience/fragmented_kill_switch.py +98 -0
- siphrix/resilience/healing.py +69 -0
- siphrix/resilience/health_monitor.py +71 -0
- siphrix/resilience/human_recovery.py +79 -0
- siphrix/resilience/org_control_plane.py +109 -0
- siphrix/resilience/regional_control.py +122 -0
- siphrix/resilience/split_brain.py +40 -0
- siphrix/resilience/state_engine.py +55 -0
- siphrix/resilience/temporal_dsl.py +104 -0
- siphrix/resilience/temporal_policy.py +58 -0
- siphrix/resilience/temporal_state.py +33 -0
- siphrix/resilience/tenant_isolation.py +79 -0
- siphrix/risk/__init__.py +149 -0
- siphrix/risk/risk_execution.py +277 -0
- siphrix/risk/risk_explainer.py +496 -0
- siphrix/risk/risk_factor_engine.py +578 -0
- siphrix/risk/risk_orchestration.py +424 -0
- siphrix/risk/risk_policy_mapping.py +174 -0
- siphrix/risk/risk_score.py +562 -0
- siphrix/risk/risk_thresholds.py +160 -0
- siphrix/runtime/__init__.py +192 -0
- siphrix/runtime/audit_hardening.py +33 -0
- siphrix/runtime/bridge_analyzer.py +41 -0
- siphrix/runtime/broker_plane.py +146 -0
- siphrix/runtime/broker_protocol.py +40 -0
- siphrix/runtime/broker_socket.py +74 -0
- siphrix/runtime/capabilities.py +30 -0
- siphrix/runtime/capability_coupling.py +48 -0
- siphrix/runtime/contracts.py +93 -0
- siphrix/runtime/decision_snapshot.py +15 -0
- siphrix/runtime/enforcement.py +136 -0
- siphrix/runtime/enforcement_points.py +46 -0
- siphrix/runtime/evidence_ledger.py +148 -0
- siphrix/runtime/exec_intercept.py +6 -0
- siphrix/runtime/execution_guard.py +26 -0
- siphrix/runtime/failure_semantics.py +43 -0
- siphrix/runtime/hooks.py +99 -0
- siphrix/runtime/intervention.py +106 -0
- siphrix/runtime/kernel_syscall_interception.py +351 -0
- siphrix/runtime/linux_kernel_backend.py +131 -0
- siphrix/runtime/mediation.py +155 -0
- siphrix/runtime/policy_remote.py +21 -0
- siphrix/runtime/policy_runtime.py +17 -0
- siphrix/runtime/session_wrappers.py +35 -0
- siphrix/runtime/sessions.py +92 -0
- siphrix/runtime/syscall_intents.py +54 -0
- siphrix/runtime_paths.py +225 -0
- siphrix/simulation/__init__.py +27 -0
- siphrix/simulation/audit.py +397 -0
- siphrix/simulation/engine.py +945 -0
- siphrix/state/__init__.py +3 -0
- siphrix/state/state_manager.py +83 -0
- siphrix/tests_all_global.py +1089 -0
- siphrix/trust/__init__.py +146 -0
- siphrix/trust/attestation.py +105 -0
- siphrix/trust/broker_attestation.py +29 -0
- siphrix/trust/distributed_attestation.py +93 -0
- siphrix/trust/identity.py +13 -0
- siphrix/trust/integrity_chain.py +101 -0
- siphrix/trust/policy_anchor.py +42 -0
- siphrix/trust/policy_remote_guard.py +757 -0
- siphrix/trust/policy_store.py +45 -0
- siphrix/trust/push_updates.py +55 -0
- siphrix/trust/recheck.py +34 -0
- siphrix/trust/remote_policy_server.py +198 -0
- siphrix/trust/remote_sync.py +307 -0
- siphrix/trust/signed_heartbeat.py +145 -0
- siphrix/trust/trust_cascade.py +89 -0
- siphrix/trust/trust_epoch.py +115 -0
- siphrix/trust/trust_mode.py +366 -0
- siphrix/trust/trust_seal.py +190 -0
- siphrix/utils/__init__.py +5 -0
- siphrix/utils/io.py +16 -0
- siphrix/web_console/__init__.py +73 -0
- siphrix/web_console/static/console.css +606 -0
- siphrix/web_console/static/console.js +886 -0
- siphrix/web_console/static/index.html +344 -0
- siphrix-1.0.0.dist-info/METADATA +1543 -0
- siphrix-1.0.0.dist-info/RECORD +816 -0
- siphrix-1.0.0.dist-info/WHEEL +5 -0
- siphrix-1.0.0.dist-info/entry_points.txt +2 -0
- siphrix-1.0.0.dist-info/licenses/LICENSE +21 -0
- siphrix-1.0.0.dist-info/top_level.txt +1 -0
siphrix/logs/__init__.py
ADDED
siphrix/logs/logger.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from datetime import datetime, timezone
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
from siphrix.runtime_paths import siphrix_home, events_log_path
|
|
7
|
+
|
|
8
|
+
# ``BASE_DIR`` and ``DEFAULT_LOG_PATH`` are kept as module-level
|
|
9
|
+
# attributes for backwards compatibility with callers that import them
|
|
10
|
+
# directly (tools, integrations, tests). Resolution is delegated to
|
|
11
|
+
# :mod:`siphrix.runtime_paths` so ``SIPHRIX_HOME`` / ``SIPHRIX_LOG_PATH``
|
|
12
|
+
# overrides are honoured from the single canonical source.
|
|
13
|
+
#
|
|
14
|
+
# Importing this module is side-effect free: no directory is created on
|
|
15
|
+
# import. Parent directories are created lazily on first write inside
|
|
16
|
+
# :func:`log_event`.
|
|
17
|
+
BASE_DIR: Path = siphrix_home()
|
|
18
|
+
DEFAULT_LOG_PATH: Path = events_log_path()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def log_event(
|
|
22
|
+
event_type: str,
|
|
23
|
+
payload: Dict[str, Any],
|
|
24
|
+
log_path: Optional[Path] = None,
|
|
25
|
+
) -> None:
|
|
26
|
+
# The path is resolved lazily on every call so that callers which
|
|
27
|
+
# scope ``SIPHRIX_HOME`` / ``SIPHRIX_LOG_PATH`` (e.g. an in-process
|
|
28
|
+
# test harness) actually see the override take effect. Binding the
|
|
29
|
+
# default at module-import time would freeze the path at the value
|
|
30
|
+
# it had when this module was first loaded.
|
|
31
|
+
if log_path is None:
|
|
32
|
+
log_path = events_log_path()
|
|
33
|
+
log_path = Path(log_path)
|
|
34
|
+
log_path.parent.mkdir(parents=True, exist_ok=True)
|
|
35
|
+
|
|
36
|
+
record = {
|
|
37
|
+
"ts": datetime.now(timezone.utc).isoformat(),
|
|
38
|
+
"event_type": event_type,
|
|
39
|
+
"payload": payload,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
with log_path.open("a", encoding="utf-8") as f:
|
|
43
|
+
f.write(json.dumps(record, ensure_ascii=False) + "\n")
|
siphrix/memory/api.py
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# siphrix/memory/api.py
|
|
2
|
+
"""Public memory API.
|
|
3
|
+
|
|
4
|
+
By default the memory store lives under the Siphrix runtime home —
|
|
5
|
+
``$SIPHRIX_HOME/memory/memory_store.json`` (defaulting to
|
|
6
|
+
``~/.siphrix/memory/memory_store.json``). Callers may still pass an
|
|
7
|
+
explicit ``store_path`` to target a different file; the runtime-home
|
|
8
|
+
resolution only applies when ``store_path`` is omitted.
|
|
9
|
+
|
|
10
|
+
On first default-path use:
|
|
11
|
+
|
|
12
|
+
* the parent directory is created if missing,
|
|
13
|
+
* if an old repository-local seed file exists at
|
|
14
|
+
``<siphrix package>/memory/memory_store.json`` and the canonical
|
|
15
|
+
runtime file does not yet exist, the legacy file is copied across
|
|
16
|
+
verbatim (data is preserved, never overwritten),
|
|
17
|
+
* otherwise the store is seeded with an empty ``{"version": "1.0",
|
|
18
|
+
"items": []}`` document.
|
|
19
|
+
|
|
20
|
+
Package code never writes into the installed ``siphrix`` package
|
|
21
|
+
tree; a writable runtime home is the only destination for mutating
|
|
22
|
+
memory operations.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import shutil
|
|
28
|
+
import uuid
|
|
29
|
+
from datetime import datetime, timezone
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
from typing import Any, Dict, List, Optional, Union
|
|
32
|
+
|
|
33
|
+
from siphrix.runtime_paths import (
|
|
34
|
+
ensure_memory_store_parent,
|
|
35
|
+
memory_store_path,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
from .store import (
|
|
39
|
+
MemoryStoreError,
|
|
40
|
+
load_store,
|
|
41
|
+
save_store,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
StorePath = Union[str, Path]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
MEMORY_STORE_VERSION: str = "1.0"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _empty_store() -> Dict[str, Any]:
|
|
52
|
+
"""Return a fresh, valid, empty memory store document."""
|
|
53
|
+
return {"version": MEMORY_STORE_VERSION, "items": []}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _legacy_package_store_path() -> Path:
|
|
57
|
+
"""Return the historical repo/package-local memory store path.
|
|
58
|
+
|
|
59
|
+
Kept only so the one-time migration in :func:`_resolve_default_store`
|
|
60
|
+
can detect pre-v1 data. The path is deliberately computed relative
|
|
61
|
+
to this module so that both editable installs and wheel installs
|
|
62
|
+
point at the same historical location.
|
|
63
|
+
"""
|
|
64
|
+
return Path(__file__).resolve().parent / "memory_store.json"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def default_store_path() -> Path:
|
|
68
|
+
"""Return the canonical default memory store path.
|
|
69
|
+
|
|
70
|
+
Resolved lazily per call via :func:`siphrix.runtime_paths.memory_store_path`,
|
|
71
|
+
so ``SIPHRIX_HOME`` changes are honoured immediately (e.g. in tests).
|
|
72
|
+
"""
|
|
73
|
+
return memory_store_path()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _resolve_default_store() -> Path:
|
|
77
|
+
"""Return the default store path, creating / migrating as needed.
|
|
78
|
+
|
|
79
|
+
The behaviour is strictly conservative:
|
|
80
|
+
|
|
81
|
+
1. Ensure the parent directory exists (idempotent).
|
|
82
|
+
2. If the canonical runtime file already exists → do nothing.
|
|
83
|
+
3. Else, if a legacy repo-local seed exists → copy it to the
|
|
84
|
+
runtime location (preserves any data a user might have written
|
|
85
|
+
into the historical path).
|
|
86
|
+
4. Else, create a fresh empty store document in the runtime
|
|
87
|
+
location so that :func:`add_memory` / :func:`search_memory` can
|
|
88
|
+
operate on their first call.
|
|
89
|
+
|
|
90
|
+
Never overwrites an existing runtime file. Never mutates the legacy
|
|
91
|
+
file.
|
|
92
|
+
"""
|
|
93
|
+
store_path = ensure_memory_store_parent()
|
|
94
|
+
|
|
95
|
+
if store_path.exists():
|
|
96
|
+
return store_path
|
|
97
|
+
|
|
98
|
+
legacy = _legacy_package_store_path()
|
|
99
|
+
if legacy.is_file():
|
|
100
|
+
try:
|
|
101
|
+
shutil.copy2(legacy, store_path)
|
|
102
|
+
return store_path
|
|
103
|
+
except OSError:
|
|
104
|
+
# Fall through to a clean seed if the copy fails for any
|
|
105
|
+
# reason (permission, cross-device, …). We never want the
|
|
106
|
+
# migration to block first-time use.
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
save_store(store_path, _empty_store())
|
|
110
|
+
return store_path
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _coerce_store_path(store_path: Optional[StorePath]) -> Path:
|
|
114
|
+
"""Resolve an explicit caller path, or bootstrap the default location.
|
|
115
|
+
|
|
116
|
+
* ``None`` → run the default-path bootstrap / migration logic.
|
|
117
|
+
* explicit path → return as-is without any filesystem side effects;
|
|
118
|
+
callers who supply their own path own its lifecycle.
|
|
119
|
+
"""
|
|
120
|
+
if store_path is None:
|
|
121
|
+
return _resolve_default_store()
|
|
122
|
+
return Path(store_path)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def add_memory(
|
|
126
|
+
text: str,
|
|
127
|
+
mem_type: str,
|
|
128
|
+
tags: Optional[List[str]] = None,
|
|
129
|
+
confidence: float = 0.9,
|
|
130
|
+
source: str = "user",
|
|
131
|
+
store_path: Optional[StorePath] = None,
|
|
132
|
+
) -> Dict[str, Any]:
|
|
133
|
+
"""Add a memory item to the store.
|
|
134
|
+
|
|
135
|
+
``mem_type`` must be one of: ``fact | preference | decision | rule | summary``.
|
|
136
|
+
|
|
137
|
+
When ``store_path`` is omitted, the canonical runtime store path
|
|
138
|
+
is used (see :func:`default_store_path`) and is bootstrapped /
|
|
139
|
+
migrated on first use.
|
|
140
|
+
"""
|
|
141
|
+
if tags is None:
|
|
142
|
+
tags = []
|
|
143
|
+
|
|
144
|
+
item = {
|
|
145
|
+
"id": str(uuid.uuid4()),
|
|
146
|
+
"type": mem_type,
|
|
147
|
+
"text": text.strip(),
|
|
148
|
+
"confidence": float(confidence),
|
|
149
|
+
"created_at": datetime.now(timezone.utc).isoformat(),
|
|
150
|
+
"tags": tags,
|
|
151
|
+
"source": source,
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
resolved = _coerce_store_path(store_path)
|
|
155
|
+
store = load_store(resolved)
|
|
156
|
+
store["items"].append(item)
|
|
157
|
+
save_store(resolved, store)
|
|
158
|
+
return item
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def search_memory(
|
|
162
|
+
query: str,
|
|
163
|
+
types: Optional[List[str]] = None,
|
|
164
|
+
tags: Optional[List[str]] = None,
|
|
165
|
+
min_confidence: float = 0.0,
|
|
166
|
+
limit: int = 20,
|
|
167
|
+
store_path: Optional[StorePath] = None,
|
|
168
|
+
) -> List[Dict[str, Any]]:
|
|
169
|
+
"""Simple keyword search (case-insensitive) across memory text.
|
|
170
|
+
|
|
171
|
+
When ``store_path`` is omitted, the canonical runtime store path
|
|
172
|
+
is used (see :func:`default_store_path`) and is bootstrapped /
|
|
173
|
+
migrated on first use, so a search against a fresh install returns
|
|
174
|
+
an empty list instead of raising ``FileNotFoundError``.
|
|
175
|
+
"""
|
|
176
|
+
q = (query or "").strip().lower()
|
|
177
|
+
resolved = _coerce_store_path(store_path)
|
|
178
|
+
store = load_store(resolved)
|
|
179
|
+
items = store["items"]
|
|
180
|
+
|
|
181
|
+
def ok(item: Dict[str, Any]) -> bool:
|
|
182
|
+
if types and item["type"] not in types:
|
|
183
|
+
return False
|
|
184
|
+
if tags:
|
|
185
|
+
itags = {t.lower() for t in item["tags"]}
|
|
186
|
+
for t in tags:
|
|
187
|
+
if t.lower() not in itags:
|
|
188
|
+
return False
|
|
189
|
+
if item["confidence"] < min_confidence:
|
|
190
|
+
return False
|
|
191
|
+
if q and q not in item["text"].lower():
|
|
192
|
+
return False
|
|
193
|
+
return True
|
|
194
|
+
|
|
195
|
+
results = [it for it in items if ok(it)]
|
|
196
|
+
# newest first
|
|
197
|
+
results.sort(key=lambda x: x["created_at"], reverse=True)
|
|
198
|
+
return results[:limit]
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
__all__ = [
|
|
202
|
+
"MEMORY_STORE_VERSION",
|
|
203
|
+
"MemoryStoreError",
|
|
204
|
+
"add_memory",
|
|
205
|
+
"default_store_path",
|
|
206
|
+
"search_memory",
|
|
207
|
+
]
|
siphrix/memory/schema.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# siphrix/memory/schema.py
|
|
2
|
+
|
|
3
|
+
MEMORY_STORE_SCHEMA = {
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["version", "items"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"version": {"type": "string"},
|
|
8
|
+
"items": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"items": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["id", "type", "text", "confidence", "created_at", "tags", "source"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": {"type": "string"},
|
|
15
|
+
"type": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": ["fact", "preference", "decision", "rule", "summary"]
|
|
18
|
+
},
|
|
19
|
+
"text": {"type": "string"},
|
|
20
|
+
"confidence": {"type": "number", "minimum": 0.0, "maximum": 1.0},
|
|
21
|
+
"created_at": {"type": "string"}, # ISO-ish string
|
|
22
|
+
"tags": {"type": "array", "items": {"type": "string"}},
|
|
23
|
+
"source": {"type": "string"} # e.g. "user", "system", "inferred"
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": False
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"additionalProperties": False
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
siphrix/memory/store.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# siphrix/memory/store.py
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
from jsonschema import validate
|
|
6
|
+
from jsonschema.exceptions import ValidationError
|
|
7
|
+
from .schema import MEMORY_STORE_SCHEMA
|
|
8
|
+
|
|
9
|
+
class MemoryStoreError(Exception):
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
def load_store(path: str | Path) -> Dict[str, Any]:
|
|
13
|
+
p = Path(path)
|
|
14
|
+
if not p.exists():
|
|
15
|
+
raise FileNotFoundError(f"Memory store not found: {p}")
|
|
16
|
+
data = json.loads(p.read_text(encoding="utf-8"))
|
|
17
|
+
_validate_store(data)
|
|
18
|
+
return data
|
|
19
|
+
|
|
20
|
+
def save_store(path: str | Path, data: Dict[str, Any]) -> None:
|
|
21
|
+
_validate_store(data)
|
|
22
|
+
p = Path(path)
|
|
23
|
+
p.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
24
|
+
|
|
25
|
+
def _validate_store(data: Dict[str, Any]) -> None:
|
|
26
|
+
try:
|
|
27
|
+
validate(instance=data, schema=MEMORY_STORE_SCHEMA)
|
|
28
|
+
except ValidationError as e:
|
|
29
|
+
raise MemoryStoreError(f"Memory store validation failed: {e.message}") from e
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
"""Canonical orchestrator package for the supported Siphrix pipeline surface.
|
|
5
|
+
|
|
6
|
+
Import `run_pipeline` and `PipelineResult` from here for stable orchestration.
|
|
7
|
+
`generate_reply` remains available as the lightweight local generator used by
|
|
8
|
+
the demo and smoke flows.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from siphrix.orchestrator.llm_stub import generate_reply
|
|
12
|
+
from siphrix.orchestrator.pipeline import PipelineResult, run_pipeline
|
|
13
|
+
|
|
14
|
+
__all__ = ["PipelineResult", "generate_reply", "run_pipeline"]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
def generate_reply(user_text: str, system_context: Optional[str] = None) -> str:
|
|
4
|
+
"""
|
|
5
|
+
Simulare LLM pentru MVP (fără API).
|
|
6
|
+
Dacă system_context există, răspunde orientat pe NOUL scop.
|
|
7
|
+
"""
|
|
8
|
+
t = (user_text or "").strip()
|
|
9
|
+
low = t.lower()
|
|
10
|
+
|
|
11
|
+
# ✅ Dacă avem scope nou, răspundem pe el
|
|
12
|
+
if system_context:
|
|
13
|
+
# răspuns foarte simplu, dar clar orientat pe noul scop
|
|
14
|
+
if "structura proiectului" in low or "structure" in low:
|
|
15
|
+
return (
|
|
16
|
+
"Structura proiectului (agent customer support ecommerce):\n"
|
|
17
|
+
"- app/\n"
|
|
18
|
+
" - main.py (entry)\n"
|
|
19
|
+
" - router.py (routing requests)\n"
|
|
20
|
+
" - intents.py (clasificare intenții)\n"
|
|
21
|
+
" - kb/\n"
|
|
22
|
+
" - faqs.json (knowledge base)\n"
|
|
23
|
+
" - policies.py (refund/return/shipping rules)\n"
|
|
24
|
+
" - llm.py (model adapter)\n"
|
|
25
|
+
" - logs/\n"
|
|
26
|
+
" - events.jsonl\n"
|
|
27
|
+
"- tests/\n"
|
|
28
|
+
"- requirements.txt\n"
|
|
29
|
+
"\nSpune ce vrei: FAQ bot, ticketing, sau integrare shop?"
|
|
30
|
+
)
|
|
31
|
+
return f"[NEW SCOPE ACTIVE] ({system_context})\nAm înțeles: {t}\nSpune următorul pas concret."
|
|
32
|
+
|
|
33
|
+
# ✅ Fallback: Siphrix MVP behavior
|
|
34
|
+
if "orchestrator" in low:
|
|
35
|
+
return "OK. Construim Orchestrator: pipeline input→validate→LLM→validate→output + logs."
|
|
36
|
+
if "coherence" in low:
|
|
37
|
+
return "OK. Implementăm Coherence Enforcer: detect drift, block/ask_confirm, log reasons."
|
|
38
|
+
if "siphrix" in low:
|
|
39
|
+
return "OK. Rămânem pe MVP Siphrix (identity + intention + coherence). Spune următorul pas."
|
|
40
|
+
return f"Am înțeles: {t}. Spune-mi ce vrei să construim în MVP."
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pipeline.py — Siphrix Orchestrator (CANON-ENFORCED)
|
|
3
|
+
|
|
4
|
+
CE ESTE ACEST FIȘIER
|
|
5
|
+
--------------------
|
|
6
|
+
Acesta este orchestratorul principal al Siphrix.
|
|
7
|
+
El leagă toate componentele într-un pipeline coerent și aplică
|
|
8
|
+
Canon v1.0 ca strat de control (identity + intention + coherence).
|
|
9
|
+
|
|
10
|
+
NU ESTE:
|
|
11
|
+
- un chatbot
|
|
12
|
+
- un LLM
|
|
13
|
+
- un truth engine
|
|
14
|
+
|
|
15
|
+
ESTE:
|
|
16
|
+
- un pipeline determinist cu enforcement Canon
|
|
17
|
+
|
|
18
|
+
PIPELINE CANONICAL
|
|
19
|
+
------------------
|
|
20
|
+
Input
|
|
21
|
+
→ Intention Interpreter
|
|
22
|
+
→ Coherence Check (input)
|
|
23
|
+
→ LLM (stub)
|
|
24
|
+
→ Coherence Check (output)
|
|
25
|
+
→ Response
|
|
26
|
+
|
|
27
|
+
Canonul poate opri pipeline-ul în orice punct prin:
|
|
28
|
+
- block
|
|
29
|
+
- ask_confirm
|
|
30
|
+
- clarify
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
from pathlib import Path
|
|
36
|
+
from typing import Any, Dict, Optional
|
|
37
|
+
from dataclasses import dataclass
|
|
38
|
+
|
|
39
|
+
# -------------------------------------------------
|
|
40
|
+
# Canon Runtime Engine
|
|
41
|
+
# -------------------------------------------------
|
|
42
|
+
# Canonul este încărcat o singură dată și folosit ca
|
|
43
|
+
# strat de enforcement (nu decide adevăr).
|
|
44
|
+
from siphrix.canon.canon_runtime import CanonRuleEngine
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# -------------------------------------------------
|
|
48
|
+
# LLM STUB (generator simplu, fără enforcement)
|
|
49
|
+
# -------------------------------------------------
|
|
50
|
+
# În MVP, LLM-ul NU are voie să decidă nimic critic.
|
|
51
|
+
from siphrix.orchestrator.llm_stub import generate_reply
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# -------------------------------------------------
|
|
55
|
+
# Rezultat standard al pipeline-ului
|
|
56
|
+
# -------------------------------------------------
|
|
57
|
+
@dataclass
|
|
58
|
+
class PipelineResult:
|
|
59
|
+
"""
|
|
60
|
+
Rezultatul standard al pipeline-ului.
|
|
61
|
+
|
|
62
|
+
outcome:
|
|
63
|
+
- proceed
|
|
64
|
+
- block
|
|
65
|
+
- ask_confirm
|
|
66
|
+
- clarify
|
|
67
|
+
|
|
68
|
+
final_text:
|
|
69
|
+
- textul generat (dacă există)
|
|
70
|
+
"""
|
|
71
|
+
outcome: str
|
|
72
|
+
final_text: str = ""
|
|
73
|
+
law_id: Optional[str] = None
|
|
74
|
+
reason_code: Optional[str] = None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# -------------------------------------------------
|
|
78
|
+
# Canon Engine (singleton)
|
|
79
|
+
# -------------------------------------------------
|
|
80
|
+
_CANON: Optional[CanonRuleEngine] = None
|
|
81
|
+
|
|
82
|
+
def _get_canon() -> CanonRuleEngine:
|
|
83
|
+
"""
|
|
84
|
+
Încarcă Canonul o singură dată.
|
|
85
|
+
"""
|
|
86
|
+
global _CANON
|
|
87
|
+
if _CANON is None:
|
|
88
|
+
base = Path(__file__).resolve().parents[1] # .../siphrix
|
|
89
|
+
canon_path = base / "canon" / "canon_v1_laws.yaml"
|
|
90
|
+
_CANON = CanonRuleEngine.load_from_file(canon_path)
|
|
91
|
+
return _CANON
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# -------------------------------------------------
|
|
95
|
+
# Canon Gate Helper
|
|
96
|
+
# -------------------------------------------------
|
|
97
|
+
def _canon_gate(stage: str, ctx: Dict[str, Any]) -> Optional[PipelineResult]:
|
|
98
|
+
"""
|
|
99
|
+
Rulează Canonul pe un anumit stage.
|
|
100
|
+
|
|
101
|
+
Dacă Canonul spune:
|
|
102
|
+
- block
|
|
103
|
+
- ask_confirm
|
|
104
|
+
- clarify
|
|
105
|
+
|
|
106
|
+
pipeline-ul se oprește IMEDIAT.
|
|
107
|
+
"""
|
|
108
|
+
hit = _get_canon().evaluate(stage=stage, ctx=ctx)
|
|
109
|
+
if hit and hit["action"] in ("block", "ask_confirm", "clarify"):
|
|
110
|
+
return PipelineResult(
|
|
111
|
+
outcome=hit["action"],
|
|
112
|
+
law_id=hit["law_id"],
|
|
113
|
+
reason_code=hit["reason_code"],
|
|
114
|
+
)
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# -------------------------------------------------
|
|
119
|
+
# Context Builder (suprafața evaluabilă de Canon)
|
|
120
|
+
# -------------------------------------------------
|
|
121
|
+
def _build_ctx(
|
|
122
|
+
*,
|
|
123
|
+
identity_core: Optional[dict] = None,
|
|
124
|
+
intention_result: Optional[dict] = None,
|
|
125
|
+
coherence_result: Optional[dict] = None,
|
|
126
|
+
llm_invoked: bool = False,
|
|
127
|
+
response_returned: bool = False,
|
|
128
|
+
output_checked: bool = False,
|
|
129
|
+
) -> Dict[str, Any]:
|
|
130
|
+
"""
|
|
131
|
+
Construiește contextul pe care Canonul îl poate evalua.
|
|
132
|
+
|
|
133
|
+
IMPORTANT:
|
|
134
|
+
- ctx NU conține adevăr
|
|
135
|
+
- doar stări, flag-uri și rezultate structurale
|
|
136
|
+
"""
|
|
137
|
+
return {
|
|
138
|
+
"identity_core": identity_core,
|
|
139
|
+
"intention_result": intention_result,
|
|
140
|
+
"coherence_result": coherence_result,
|
|
141
|
+
"llm_invoked": llm_invoked,
|
|
142
|
+
"response_returned": response_returned,
|
|
143
|
+
"output_checked": output_checked,
|
|
144
|
+
"coherence_check": {
|
|
145
|
+
"input_performed": intention_result is not None,
|
|
146
|
+
"output_performed": output_checked,
|
|
147
|
+
"reference": identity_core,
|
|
148
|
+
},
|
|
149
|
+
"log_event": {
|
|
150
|
+
"enforcement_enabled_flag": True
|
|
151
|
+
},
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# -------------------------------------------------
|
|
156
|
+
# PIPELINE PRINCIPAL
|
|
157
|
+
# -------------------------------------------------
|
|
158
|
+
def run_pipeline(user_input: str) -> PipelineResult:
|
|
159
|
+
"""
|
|
160
|
+
Orchestratorul principal Siphrix.
|
|
161
|
+
|
|
162
|
+
Rulează pipeline-ul complet și aplică Canonul
|
|
163
|
+
înainte și după generare.
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
# -------------------------
|
|
167
|
+
# 1) Identity Core (MVP)
|
|
168
|
+
# -------------------------
|
|
169
|
+
identity_core = {
|
|
170
|
+
"validated": True,
|
|
171
|
+
"goal": "maintain Siphrix coherence",
|
|
172
|
+
"missing_fields": False,
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# Canon: startup gate
|
|
176
|
+
hit = _canon_gate(
|
|
177
|
+
"startup",
|
|
178
|
+
_build_ctx(identity_core=identity_core)
|
|
179
|
+
)
|
|
180
|
+
if hit:
|
|
181
|
+
return hit
|
|
182
|
+
|
|
183
|
+
# -------------------------
|
|
184
|
+
# 2) Intention Interpreter (MVP simplu)
|
|
185
|
+
# -------------------------
|
|
186
|
+
if "poate" in user_input.lower():
|
|
187
|
+
intention_result = {
|
|
188
|
+
"class": "unknown",
|
|
189
|
+
"confidence": 0.3,
|
|
190
|
+
"recommended_action": "clarify",
|
|
191
|
+
}
|
|
192
|
+
else:
|
|
193
|
+
intention_result = {
|
|
194
|
+
"class": "request",
|
|
195
|
+
"confidence": 0.9,
|
|
196
|
+
"recommended_action": "proceed",
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
# Canon: input gate
|
|
200
|
+
hit = _canon_gate(
|
|
201
|
+
"input",
|
|
202
|
+
_build_ctx(
|
|
203
|
+
identity_core=identity_core,
|
|
204
|
+
intention_result=intention_result,
|
|
205
|
+
)
|
|
206
|
+
)
|
|
207
|
+
if hit:
|
|
208
|
+
return hit
|
|
209
|
+
|
|
210
|
+
# Dacă intenția cere clarify, ne oprim
|
|
211
|
+
if intention_result["recommended_action"] == "clarify":
|
|
212
|
+
return PipelineResult(outcome="clarify")
|
|
213
|
+
|
|
214
|
+
# -------------------------
|
|
215
|
+
# 3) LLM Invocation (stub)
|
|
216
|
+
# -------------------------
|
|
217
|
+
llm_output = generate_reply(user_input)
|
|
218
|
+
|
|
219
|
+
# -------------------------
|
|
220
|
+
# 4) Coherence Check (output) — MVP
|
|
221
|
+
# -------------------------
|
|
222
|
+
coherence_result = {
|
|
223
|
+
"conflict": False,
|
|
224
|
+
"conflict_severity": None,
|
|
225
|
+
"goal_drift_detected": False,
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# Canon: output gate
|
|
229
|
+
hit = _canon_gate(
|
|
230
|
+
"output",
|
|
231
|
+
_build_ctx(
|
|
232
|
+
identity_core=identity_core,
|
|
233
|
+
intention_result=intention_result,
|
|
234
|
+
coherence_result=coherence_result,
|
|
235
|
+
llm_invoked=True,
|
|
236
|
+
output_checked=True,
|
|
237
|
+
)
|
|
238
|
+
)
|
|
239
|
+
if hit:
|
|
240
|
+
return hit
|
|
241
|
+
|
|
242
|
+
# -------------------------
|
|
243
|
+
# 5) Response
|
|
244
|
+
# -------------------------
|
|
245
|
+
return PipelineResult(
|
|
246
|
+
outcome="proceed",
|
|
247
|
+
final_text=llm_output,
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
schema_version: 4
|
|
2
|
+
version: 4
|
|
3
|
+
meta:
|
|
4
|
+
policy_id: "agent.default"
|
|
5
|
+
policy_version: "v1"
|
|
6
|
+
policy_ref: "policy:agent:default:v1"
|
|
7
|
+
created_at: "2026-02-09T00:00:00+00:00"
|
|
8
|
+
author: "siphrix"
|
|
9
|
+
scope: ["network"]
|
|
10
|
+
delegate_to: "policy:team:default:v1"
|
|
11
|
+
default_action: ALLOW
|
|
12
|
+
global:
|
|
13
|
+
rules:
|
|
14
|
+
- id: block_high_risk
|
|
15
|
+
when:
|
|
16
|
+
risk_level: "HIGH"
|
|
17
|
+
then: BLOCK
|
|
18
|
+
reason: "agent_blocks_high_risk"
|
|
19
|
+
boundaries:
|
|
20
|
+
api.external:
|
|
21
|
+
default_action: ALLOW
|
|
22
|
+
rules: []
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
schema_version: 4
|
|
2
|
+
version: 4
|
|
3
|
+
meta:
|
|
4
|
+
policy_id: "global.baseline"
|
|
5
|
+
policy_version: "v1"
|
|
6
|
+
policy_ref: "policy:global:baseline:v1"
|
|
7
|
+
created_at: "2026-02-09T00:00:00+00:00"
|
|
8
|
+
author: "siphrix"
|
|
9
|
+
scope: ["network","api","browser","fs"]
|
|
10
|
+
locked_fields: ["no_side_effects","block_sensitive","filesystem_escape","max_risk"]
|
|
11
|
+
enforcements:
|
|
12
|
+
no_side_effects: true
|
|
13
|
+
block_sensitive: true
|
|
14
|
+
filesystem_escape: true
|
|
15
|
+
max_risk: "MEDIUM"
|
|
16
|
+
default_action: BLOCK
|
|
17
|
+
global:
|
|
18
|
+
rules:
|
|
19
|
+
- id: allow_example_readonly
|
|
20
|
+
when:
|
|
21
|
+
action_name: "http_get"
|
|
22
|
+
resource.domain: "example.com"
|
|
23
|
+
then: ALLOW
|
|
24
|
+
reason: "allow_example_readonly"
|
|
25
|
+
boundaries:
|
|
26
|
+
api.external:
|
|
27
|
+
default_action: BLOCK
|
|
28
|
+
rules:
|
|
29
|
+
- id: allow_example_api
|
|
30
|
+
when:
|
|
31
|
+
action_name: "http_get"
|
|
32
|
+
resource.domain: "example.com"
|
|
33
|
+
then: ALLOW
|
|
34
|
+
reason: "allow_example_api"
|
|
35
|
+
browser.public:
|
|
36
|
+
default_action: BLOCK
|
|
37
|
+
rules: []
|
|
38
|
+
fs.sandbox:
|
|
39
|
+
default_action: BLOCK
|
|
40
|
+
rules: []
|