dialectical-framework 1.7.2__tar.gz → 1.8.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.
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/PKG-INFO +1 -1
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/pyproject.toml +1 -1
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/system_prompts.py +39 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/deepen.py +35 -2
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/explore.py +26 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/analyst.py +38 -3
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/system_prompts.py +15 -4
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +245 -32
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +50 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +17 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +1 -1
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +34 -3
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ac_re_taxonomy.py +90 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/action_extraction.py +21 -26
- dialectical_framework-1.8.0/src/dialectical_framework/concerns/build_status.py +362 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/dialectical_context.py +124 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/synthesis.py +13 -1
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/transformation.py +27 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/wheel.py +3 -4
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/rendering.py +255 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/transformation_repository.py +42 -2
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/wheel_repository.py +47 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/order_transitions.py +25 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/LICENSE +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/PATENTS +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/README.md +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/advisor.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/record_decision.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/scoped.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/sync.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/agent_context.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/app_spec.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/apps.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/execution_report.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/stream_events.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/toolsets.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/add_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/create_nexus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/decision_coherence_check.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/decision_confirmation_check.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/discard.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/record_decision.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/source_digest.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_classification.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_headline.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_placement.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/tetrad_grounding.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/dialectical_reasoning.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/causality_preset.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/di.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/graph_event.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/graph_event_bus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/node_errors.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/estimation_manager.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/case.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/decision.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/input.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/statement.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/transition.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationship_manager.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/grounded_in_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/decision_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/scope_context.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/wheel_segment.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/has_config.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/input_resolver.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/settings.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/__init__.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/concurrency.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/dc_replace.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/edge_context.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/effect_logger.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/input_context.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/sequence_generation.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/thinking_compat.py +0 -0
- {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/use_brain.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dialectical-framework
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.).
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: dialectics,dialectical-reasoning,synthesis,thesis-antithesis,ai,artificial-intelligence,llm,reasoning-framework,philosophy,logic,argumentation,conflict-resolution,decision-making,critical-thinking,semantic-graph,mirascope,pydantic,perspectives,polarity-reasoning
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "dialectical-framework"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.8.0"
|
|
4
4
|
description = "A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.)."
|
|
5
5
|
authors = ["Evaldas Taroza <evaldas@dialexity.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -882,6 +882,20 @@ correction, and the two arrive in the same sentence often enough that the
|
|
|
882
882
|
distinction has its own paragraph in Your Internal Model. Concede the fact in
|
|
883
883
|
the first clause there too; what you carry forward is what the fact now costs.
|
|
884
884
|
|
|
885
|
+
**Unfinished work is spoken plainly, and never with counts.** Your
|
|
886
|
+
understanding may say that an arrangement is only partly worked through, that a
|
|
887
|
+
synthesis was drawn from part of it, or that some tensions were named and never
|
|
888
|
+
developed. Those states are real and you do not hide them — but they are said
|
|
889
|
+
the way a person says them: "I've only got part of this worked out", "there's a
|
|
890
|
+
thread here I haven't followed yet", "let me sit with the rest of it". Not a
|
|
891
|
+
fraction, not a tally, not "four of six", and not the nouns behind them.
|
|
892
|
+
|
|
893
|
+
If they ask outright whether you finished, or whether that's everything —
|
|
894
|
+
answer straight. Saying "yes" over a partial understanding is the one failure
|
|
895
|
+
this rule exists to prevent; a plain "not yet, there's a piece I haven't worked
|
|
896
|
+
through" costs you nothing and is the honest answer. If they want it finished,
|
|
897
|
+
finish it (the work is yours to resume) rather than describing the gap again.
|
|
898
|
+
|
|
885
899
|
If asked "how do you know that?" — respond naturally about seeing patterns
|
|
886
900
|
and structural dynamics. Adapt to the persona defined above."""
|
|
887
901
|
|
|
@@ -899,6 +913,16 @@ node, speak plainly in their language — except for a `Grounded in:` line,
|
|
|
899
913
|
whose facts are the person's own and are spoken as stated (see Reading Your
|
|
900
914
|
Understanding).
|
|
901
915
|
|
|
916
|
+
**Unfinished work is stated with its numbers.** Unlike the unscoped register,
|
|
917
|
+
here the exploration is on screen and is the person's own deliverable, so a
|
|
918
|
+
`Pathways: 4/6` line, a synthesis marked "built from 4 of 6 pathways —
|
|
919
|
+
partial", or a count of undeveloped tensions is said as it stands: "this
|
|
920
|
+
arrangement is four pathways of six — the two on A1 → T2 aren't built yet".
|
|
921
|
+
Name what is missing and offer to build it (`deepen`). An edge marked blocked
|
|
922
|
+
cannot be built at all until its segment is finished — say that rather than
|
|
923
|
+
promising work that will not complete. Presenting a partial arrangement as
|
|
924
|
+
whole is the failure to avoid; hiding the fraction is how it happens.
|
|
925
|
+
|
|
902
926
|
Your counsel is as specific as your understanding: not "find balance" or
|
|
903
927
|
"consider both sides", but the particular complementarity you actually see.
|
|
904
928
|
Pair every suggested action with the shift in understanding that sustains it —
|
|
@@ -1083,6 +1107,21 @@ low-probability wheels are already suppressed — count lines note what was
|
|
|
1083
1107
|
filtered. Everything you see passed the floors; you rank within them, you
|
|
1084
1108
|
don't re-filter.
|
|
1085
1109
|
|
|
1110
|
+
**Completeness is not quality — do not rank on it.** An arrangement may say it
|
|
1111
|
+
is only partly worked through, and a synthesis may say it was drawn from only
|
|
1112
|
+
part of its arrangement. That is unfinished work, not weak structure: it scored
|
|
1113
|
+
well enough to be built and the build was cut short (a closed session, a
|
|
1114
|
+
failure mid-run). Everything present in it is as sound as its scores say, so
|
|
1115
|
+
treat the gap as a to-do, not a demotion. What is missing is what `deepen` tops
|
|
1116
|
+
up — except where the line says the missing part is BLOCKED, meaning its
|
|
1117
|
+
segment must be completed before anything can be built there. An `# Unfinished`
|
|
1118
|
+
line means the same thing one level up: tensions named and never developed —
|
|
1119
|
+
outstanding work, not rejected work (rejected tensions are the suppressed ones
|
|
1120
|
+
above). The two failures to avoid are presenting a partial arrangement as the
|
|
1121
|
+
finished picture, and quietly deprioritizing it as though the shortfall were a
|
|
1122
|
+
score. How you SAY any of this is governed by How You Speak — which permits the
|
|
1123
|
+
numbers in an exploration-pinned session and forbids them otherwise.
|
|
1124
|
+
|
|
1086
1125
|
1. Lead with the strongest tensions (highest HS on A, best area, best DV). Softer
|
|
1087
1126
|
ones are still visible by design — usable, and they may resonate with
|
|
1088
1127
|
the person's lived experience, but don't build your primary counsel
|
|
@@ -60,12 +60,45 @@ async def run_deepen(wheel_hash: str) -> str:
|
|
|
60
60
|
if pathways:
|
|
61
61
|
combined_report.artifacts["pathways"] = pathways
|
|
62
62
|
|
|
63
|
+
# Whether the deepening actually finished. `pathways` has no denominator, so
|
|
64
|
+
# a run that lost half its edges to a mid-flight failure or an interrupted
|
|
65
|
+
# session reported a shorter list and nothing else — the tool looked like it
|
|
66
|
+
# succeeded. The fraction is what tells the Advisor a second `deepen` would
|
|
67
|
+
# add something, and what tells it not to present a fragment as the whole.
|
|
68
|
+
try:
|
|
69
|
+
from dialectical_framework.graph.nodes.wheel import Wheel
|
|
70
|
+
from dialectical_framework.graph.rendering import wheel_completeness
|
|
71
|
+
from dialectical_framework.graph.repositories.node_repository import \
|
|
72
|
+
NodeRepository
|
|
73
|
+
|
|
74
|
+
wheel = NodeRepository().find_by_hash(wheel_hash, node_type=Wheel)
|
|
75
|
+
completeness = wheel_completeness(wheel) if wheel else None
|
|
76
|
+
if completeness and completeness.expected:
|
|
77
|
+
combined_report.artifacts["pathway_completeness"] = completeness.fraction
|
|
78
|
+
if completeness.incomplete_edges:
|
|
79
|
+
combined_report.artifacts["pathways_incomplete_on"] = (
|
|
80
|
+
completeness.incomplete_edges
|
|
81
|
+
)
|
|
82
|
+
if completeness.blocked_edges:
|
|
83
|
+
combined_report.artifacts["pathways_blocked_on"] = (
|
|
84
|
+
completeness.blocked_edges
|
|
85
|
+
)
|
|
86
|
+
except Exception: # noqa: BLE001 - decoration, never the payload
|
|
87
|
+
# Status decoration must never be the thing that fails a deepen that
|
|
88
|
+
# otherwise produced real pathways. Broad on purpose: the read goes to
|
|
89
|
+
# the DB, so the failure modes include driver errors that are neither
|
|
90
|
+
# ValueError nor RuntimeError.
|
|
91
|
+
pass
|
|
92
|
+
|
|
63
93
|
try:
|
|
64
94
|
synth = GenerateSynthesis(wheel_hash=wheel_hash)
|
|
65
95
|
await synth.resolve()
|
|
66
96
|
combined_report = combined_report.merge(synth.report)
|
|
67
|
-
except
|
|
68
|
-
|
|
97
|
+
except Exception as e: # noqa: BLE001 - pathways stand without a synthesis
|
|
98
|
+
# A failed synthesis is reported, not raised: the Transformations this
|
|
99
|
+
# call built are real and adoptable, and losing them to a synthesis
|
|
100
|
+
# fault would throw away the expensive half of the work.
|
|
101
|
+
combined_report.artifacts["synthesis_skipped"] = f"{type(e).__name__}: {e}"
|
|
69
102
|
|
|
70
103
|
combined_report.artifacts["wheel_hash"] = wheel_hash
|
|
71
104
|
return str(combined_report)
|
|
@@ -155,6 +155,32 @@ async def run_exploration_detailed(
|
|
|
155
155
|
]
|
|
156
156
|
if shallow:
|
|
157
157
|
combined_report.artifacts["shallow_wheel_hashes"] = shallow
|
|
158
|
+
# Whether the wheels explore DID deepen came out whole. A deepened wheel
|
|
159
|
+
# that lost edges to a failure or an interrupted session still lands in
|
|
160
|
+
# `deepened_wheel_hashes`, so without a fraction the caller cannot tell a
|
|
161
|
+
# finished arrangement from a fragment — and would present the fragment as
|
|
162
|
+
# the answer. Only partial wheels are listed; a clean run says nothing.
|
|
163
|
+
partial: dict[str, str] = {}
|
|
164
|
+
for wh in exp_result.deepened_wheel_hashes:
|
|
165
|
+
try:
|
|
166
|
+
from dialectical_framework.graph.nodes.wheel import Wheel
|
|
167
|
+
from dialectical_framework.graph.rendering import wheel_completeness
|
|
168
|
+
from dialectical_framework.graph.repositories.node_repository import \
|
|
169
|
+
NodeRepository
|
|
170
|
+
|
|
171
|
+
wheel_node = NodeRepository().find_by_hash(wh, node_type=Wheel)
|
|
172
|
+
if not wheel_node:
|
|
173
|
+
continue
|
|
174
|
+
completeness = wheel_completeness(wheel_node)
|
|
175
|
+
if completeness.expected and not completeness.is_complete:
|
|
176
|
+
partial[wh] = completeness.fraction
|
|
177
|
+
except Exception: # noqa: BLE001 - decoration, never the payload
|
|
178
|
+
# Broad on purpose: this is a derived-status read decorating an
|
|
179
|
+
# exploration that already succeeded, and a DB-level failure here
|
|
180
|
+
# is neither ValueError nor RuntimeError.
|
|
181
|
+
continue
|
|
182
|
+
if partial:
|
|
183
|
+
combined_report.artifacts["partial_wheels"] = partial
|
|
158
184
|
if deferred_hashes:
|
|
159
185
|
combined_report.artifacts["deferred_perspective_hashes"] = deferred_hashes
|
|
160
186
|
combined_report.summary = (
|
|
@@ -364,7 +364,10 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
|
|
|
364
364
|
# WHY these framings are the strong ones or that weaker tensions were
|
|
365
365
|
# set aside.
|
|
366
366
|
polarity_quality = self._build_polarity_quality(polarity_data, hashes_to_expand)
|
|
367
|
-
set_aside_count = sum(1 for q in polarity_quality if
|
|
367
|
+
set_aside_count = sum(1 for q in polarity_quality if q["status"] == "set_aside")
|
|
368
|
+
# Strong enough to expand, dropped for budget — owed work, not a
|
|
369
|
+
# judgement. Reported separately so a resuming session can ask for it.
|
|
370
|
+
deferred_count = sum(1 for q in polarity_quality if q["status"] == "deferred")
|
|
368
371
|
|
|
369
372
|
expand_results = await asyncio.gather(
|
|
370
373
|
*[self._expand_one(h) for h in hashes_to_expand],
|
|
@@ -398,6 +401,16 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
|
|
|
398
401
|
)
|
|
399
402
|
|
|
400
403
|
expansion_errors = [e for e in errors if e.step == "expand_polarities"]
|
|
404
|
+
# An expansion that was attempted and failed is not an expanded tension.
|
|
405
|
+
# `status` was set to "expanded" before the gather (it records the gate
|
|
406
|
+
# decision), so without this correction a crashed expansion reads as
|
|
407
|
+
# done — the one state a resuming session most needs to see, since the
|
|
408
|
+
# tension has a Polarity and no usable Perspective.
|
|
409
|
+
failed_hashes = {e.hash for e in expansion_errors if e.hash}
|
|
410
|
+
if failed_hashes:
|
|
411
|
+
for q in polarity_quality:
|
|
412
|
+
if q["polarity_hash"] in failed_hashes:
|
|
413
|
+
q["status"] = "failed"
|
|
401
414
|
# Producing NO perspectives is a failed analysis, not a quiet success.
|
|
402
415
|
# This block used to set ok=True unconditionally and drop `errors` on
|
|
403
416
|
# the floor (they rode home on AnalysisResult, which no tool renders),
|
|
@@ -414,11 +427,17 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
|
|
|
414
427
|
if set_aside_count
|
|
415
428
|
else ""
|
|
416
429
|
)
|
|
430
|
+
deferred_note = (
|
|
431
|
+
f", {deferred_count} strong tension(s) NOT expanded (budget: "
|
|
432
|
+
f"{MAX_POLARITIES_TO_EXPAND} per run) — call again to develop them"
|
|
433
|
+
if deferred_count
|
|
434
|
+
else ""
|
|
435
|
+
)
|
|
417
436
|
self._report.summary = (
|
|
418
437
|
f"Analysis complete: {len(thesis_hashes)} theses, "
|
|
419
438
|
f"{len(polarity_hashes)} polarities, "
|
|
420
439
|
f"{len(perspective_hashes)} perspectives"
|
|
421
|
-
f"{set_aside_note}"
|
|
440
|
+
f"{set_aside_note}{deferred_note}"
|
|
422
441
|
)
|
|
423
442
|
if expansion_errors:
|
|
424
443
|
failed = "; ".join(
|
|
@@ -482,13 +501,29 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
|
|
|
482
501
|
if not h or h in seen or p.get("deduped", False):
|
|
483
502
|
continue
|
|
484
503
|
seen.add(h)
|
|
504
|
+
hs = p.get("heuristic_similarity")
|
|
485
505
|
quality.append(
|
|
486
506
|
{
|
|
487
507
|
"polarity_hash": h,
|
|
488
508
|
"thesis": p.get("thesis_text"),
|
|
489
509
|
"antithesis": p.get("antithesis_text"),
|
|
490
|
-
"hs":
|
|
510
|
+
"hs": hs,
|
|
491
511
|
"expanded": h in expanded_set,
|
|
512
|
+
# WHY it wasn't expanded, not just that it wasn't. `expanded:
|
|
513
|
+
# False` conflated two opposite situations: a tension the HS
|
|
514
|
+
# gate judged too weak (working as designed, nothing to do)
|
|
515
|
+
# and one strong enough to expand that got dropped for
|
|
516
|
+
# budget (MAX_POLARITIES_TO_EXPAND) — real work still owed.
|
|
517
|
+
# Only the latter is worth a follow-up call.
|
|
518
|
+
"status": (
|
|
519
|
+
"expanded"
|
|
520
|
+
if h in expanded_set
|
|
521
|
+
else (
|
|
522
|
+
"deferred"
|
|
523
|
+
if hs is not None and hs >= HS_THRESHOLD
|
|
524
|
+
else "set_aside"
|
|
525
|
+
)
|
|
526
|
+
),
|
|
492
527
|
}
|
|
493
528
|
)
|
|
494
529
|
quality.sort(
|
|
@@ -121,10 +121,21 @@ you from a generic list of pros and cons.
|
|
|
121
121
|
|
|
122
122
|
`analyze` expands only the strongest tensions into full perspectives and sets the
|
|
123
123
|
rest aside — the report's `polarity_quality` artifact lists every tension with its
|
|
124
|
-
`hs
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
`hs`, an `expanded` flag, and a `status` naming *why*:
|
|
125
|
+
|
|
126
|
+
- **`expanded`** — a full perspective exists.
|
|
127
|
+
- **`set_aside`** — HS too weak to lead with. This is the gate working; nothing is owed.
|
|
128
|
+
- **`deferred`** — strong enough to expand, dropped only because one run expands a
|
|
129
|
+
limited number. Real work still outstanding: say so and offer to develop it now.
|
|
130
|
+
- **`failed`** — expansion was attempted and errored. The tension exists with no
|
|
131
|
+
usable perspective behind it. Never present it as developed; re-run
|
|
132
|
+
`expand_polarities` on that tension.
|
|
133
|
+
|
|
134
|
+
`deferred` and `failed` are the two you must not swallow — they are unfinished
|
|
135
|
+
work, not judgements. When tensions were merely set aside, briefly say stronger
|
|
136
|
+
framings were prioritized and that you can develop a weaker one on request (via
|
|
137
|
+
`find_polarities`/`expand_polarities` on that specific tension) — don't silently
|
|
138
|
+
drop them either.
|
|
128
139
|
|
|
129
140
|
Communicate quality as meaning ("a strong tension", "a weaker, more tangential
|
|
130
141
|
pull"), not raw numbers, unless the app preamble or the user asks for the figures.
|