dialectical-framework 1.3.0__tar.gz → 1.4.1__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.3.0 → dialectical_framework-1.4.1}/PKG-INFO +1 -1
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/pyproject.toml +1 -1
- dialectical_framework-1.4.1/src/dialectical_framework/agents/analyst/tools/create_dx_input.py +22 -0
- dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/add_input.py +27 -0
- dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +28 -0
- dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/discard.py +23 -0
- {dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools → dialectical_framework-1.4.1/src/dialectical_framework/concerns}/add_input.py +1 -21
- {dialectical_framework-1.3.0/src/dialectical_framework/agents/analyst/tools → dialectical_framework-1.4.1/src/dialectical_framework/concerns}/create_dx_input.py +3 -15
- {dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools → dialectical_framework-1.4.1/src/dialectical_framework/concerns}/discard.py +2 -15
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/source_digest.py +64 -33
- dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -92
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/LICENSE +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/README.md +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/agent_context.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/analyst.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/system_prompts.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/apps.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/execution_report.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/stream_events.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/action_extraction.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/create_nexus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_classification.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_placement.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/dialectical_reasoning.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/causality_preset.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/di.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/graph_event.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/graph_event_bus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/node_errors.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/estimation_manager.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/case.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/input.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/statement.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/transition.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationship_manager.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/scope_context.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/wheel_segment.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/has_config.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/input_resolver.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/settings.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/__init__.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/concurrency.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/dc_replace.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/edge_context.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/effect_logger.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/input_context.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/order_transitions.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/sequence_generation.py +0 -0
- {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/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.4.1
|
|
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.4.1"
|
|
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"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
create_dx_input: Tool for creating an Input node referencing a Transition via dx:// URI.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from mirascope import llm
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from dialectical_framework.concerns.create_dx_input import CreateDxInput
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@llm.tool
|
|
16
|
+
async def create_dx_input(
|
|
17
|
+
transition_hash: Annotated[str, Field(description="Hash (or 7+ char prefix) of the Transition node to reference")],
|
|
18
|
+
) -> str:
|
|
19
|
+
"""Create an Input that references a Transition node via dx:// URI. This feeds the transition's insight back into the analyst pipeline as a new input source that can be processed selectively."""
|
|
20
|
+
concern = CreateDxInput()
|
|
21
|
+
await concern.resolve(transition_hash=transition_hash)
|
|
22
|
+
return str(concern.report)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
add_input: Tool for capturing source material into the case.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from mirascope import llm
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from dialectical_framework.concerns.add_input import AddInput
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@llm.tool
|
|
16
|
+
async def add_input(
|
|
17
|
+
content: Annotated[
|
|
18
|
+
str,
|
|
19
|
+
Field(
|
|
20
|
+
description="Source material: user-provided text, URL, or captured conversation fragment"
|
|
21
|
+
),
|
|
22
|
+
],
|
|
23
|
+
) -> str:
|
|
24
|
+
"""Add source material for analysis — user-provided text, URL, or captured conversation fragment. Use proactively when the user describes their situation. Not for storing your analytical outputs."""
|
|
25
|
+
concern = AddInput()
|
|
26
|
+
input_node = await concern.resolve(content=content)
|
|
27
|
+
return str(concern.report)
|
dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/digest_input.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
digest_input: Tool for generating/refining the living digest of an Input source.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from mirascope import llm
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from dialectical_framework.concerns.source_digest import SourceDigest
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@llm.tool
|
|
16
|
+
async def digest_input(
|
|
17
|
+
input_hash: Annotated[str, Field(description="Hash of the Input node to digest")],
|
|
18
|
+
context: Annotated[
|
|
19
|
+
str,
|
|
20
|
+
Field(
|
|
21
|
+
description="Direction for the digest: user guidance, framework state, or focus instructions"
|
|
22
|
+
),
|
|
23
|
+
] = "",
|
|
24
|
+
) -> str:
|
|
25
|
+
"""Generate or refine the analytical digest of an input source. Use to build initial understanding of new inputs, or to sharpen the digest with user direction or framework learnings."""
|
|
26
|
+
concern = SourceDigest()
|
|
27
|
+
await concern.resolve(input_hash=input_hash, context=context)
|
|
28
|
+
return str(concern.report)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
discard: Tool for marking statements/perspectives as discarded.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from mirascope import llm
|
|
10
|
+
from pydantic import Field
|
|
11
|
+
|
|
12
|
+
from dialectical_framework.concerns.discard import Discard
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@llm.tool
|
|
16
|
+
async def discard(
|
|
17
|
+
hash: Annotated[str, Field(description="Hash (or prefix) of the Statement or Perspective to discard")],
|
|
18
|
+
reason: Annotated[str, Field(description="Why it's being discarded")] = "discarded",
|
|
19
|
+
) -> str:
|
|
20
|
+
"""Mark a Statement or Perspective as discarded when the user disagrees with it or finds it irrelevant. Uncommitted Perspectives are discarded entirely; committed ones are soft-discarded and filtered from future queries. Will refuse if the target participates in existing Cycles/Wheels — in that case, use edit_perspective to replace it."""
|
|
21
|
+
concern = Discard()
|
|
22
|
+
await concern.resolve(hash=hash, reason=reason)
|
|
23
|
+
return str(concern.report)
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
"""
|
|
2
|
-
AddInput: Concern
|
|
2
|
+
AddInput: Concern for capturing source material into the case.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from typing import Annotated
|
|
8
|
-
|
|
9
|
-
from mirascope import llm
|
|
10
|
-
from pydantic import Field
|
|
11
|
-
|
|
12
7
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
13
8
|
from dialectical_framework.graph.nodes.input import Input
|
|
14
9
|
from dialectical_framework.graph.repositories.case_repository import CaseRepository
|
|
@@ -42,18 +37,3 @@ class AddInput(ReasonableConcern[Input]):
|
|
|
42
37
|
self._report.artifacts["input_hash"] = input_node.short_hash
|
|
43
38
|
|
|
44
39
|
return input_node
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@llm.tool
|
|
48
|
-
async def add_input(
|
|
49
|
-
content: Annotated[
|
|
50
|
-
str,
|
|
51
|
-
Field(
|
|
52
|
-
description="Source material: user-provided text, URL, or captured conversation fragment"
|
|
53
|
-
),
|
|
54
|
-
],
|
|
55
|
-
) -> str:
|
|
56
|
-
"""Add source material for analysis — user-provided text, URL, or captured conversation fragment. Use proactively when the user describes their situation. Not for storing your analytical outputs."""
|
|
57
|
-
concern = AddInput()
|
|
58
|
-
input_node = await concern.resolve(content=content)
|
|
59
|
-
return str(concern.report)
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
"""
|
|
2
|
-
CreateDxInput:
|
|
2
|
+
CreateDxInput: Concern for creating an Input node referencing a Transition via dx:// URI.
|
|
3
3
|
|
|
4
|
-
Enables the Explorer
|
|
4
|
+
Enables the Explorer->Analyst feedback loop: the Analyst creates dx:// Inputs
|
|
5
5
|
from Transition nodes discovered during exploration, then processes them
|
|
6
6
|
selectively via surface_theses or analyze.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import Optional, Union
|
|
12
12
|
|
|
13
13
|
from dependency_injector.wiring import Provide, inject
|
|
14
14
|
from gqlalchemy import Memgraph, Neo4j
|
|
15
|
-
from mirascope import llm
|
|
16
|
-
from pydantic import Field
|
|
17
15
|
|
|
18
16
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
19
17
|
from dialectical_framework.enums.di import DI
|
|
@@ -66,13 +64,3 @@ class CreateDxInput(ReasonableConcern[Input]):
|
|
|
66
64
|
self._report.artifacts["transition_hash"] = node.hash
|
|
67
65
|
|
|
68
66
|
return input_node
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@llm.tool
|
|
72
|
-
async def create_dx_input(
|
|
73
|
-
transition_hash: Annotated[str, Field(description="Hash (or 7+ char prefix) of the Transition node to reference")],
|
|
74
|
-
) -> str:
|
|
75
|
-
"""Create an Input that references a Transition node via dx:// URI. This feeds the transition's insight back into the analyst pipeline as a new input source that can be processed selectively."""
|
|
76
|
-
concern = CreateDxInput()
|
|
77
|
-
await concern.resolve(transition_hash=transition_hash)
|
|
78
|
-
return str(concern.report)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Discard: Concern
|
|
2
|
+
Discard: Concern for marking statements/perspectives as discarded.
|
|
3
3
|
|
|
4
4
|
Blocking rules:
|
|
5
5
|
- Statement: blocked if used by any non-discarded Perspective.
|
|
@@ -9,12 +9,10 @@ Blocking rules:
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
11
|
from dataclasses import dataclass
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Optional, Union
|
|
13
13
|
|
|
14
14
|
from dependency_injector.wiring import Provide, inject
|
|
15
15
|
from gqlalchemy import Memgraph, Neo4j
|
|
16
|
-
from mirascope import llm
|
|
17
|
-
from pydantic import Field
|
|
18
16
|
|
|
19
17
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
20
18
|
from dialectical_framework.enums.di import DI
|
|
@@ -150,14 +148,3 @@ class Discard(ReasonableConcern[DiscardResult]):
|
|
|
150
148
|
hash=pp_hash,
|
|
151
149
|
affected_perspectives=[],
|
|
152
150
|
)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
@llm.tool
|
|
156
|
-
async def discard(
|
|
157
|
-
hash: Annotated[str, Field(description="Hash (or prefix) of the Statement or Perspective to discard")],
|
|
158
|
-
reason: Annotated[str, Field(description="Why it's being discarded")] = "discarded",
|
|
159
|
-
) -> str:
|
|
160
|
-
"""Mark a Statement or Perspective as discarded when the user disagrees with it or finds it irrelevant. Uncommitted Perspectives are discarded entirely; committed ones are soft-discarded and filtered from future queries. Will refuse if the target participates in existing Cycles/Wheels — in that case, use edit_perspective to replace it."""
|
|
161
|
-
concern = Discard()
|
|
162
|
-
await concern.resolve(hash=hash, reason=reason)
|
|
163
|
-
return str(concern.report)
|
|
@@ -3,30 +3,39 @@ SourceDigest: Concern for generating and refining the living digest of an Input
|
|
|
3
3
|
|
|
4
4
|
The digest is the framework's evolving understanding of a source — not a naked summary,
|
|
5
5
|
but a directed analytical document shaped by both the source material and user/framework
|
|
6
|
-
guidance.
|
|
6
|
+
guidance.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
# Initial digest
|
|
8
|
+
Programmatic usage:
|
|
10
9
|
concern = SourceDigest()
|
|
11
|
-
|
|
10
|
+
input_node = await concern.resolve(input_hash="abc123")
|
|
12
11
|
|
|
13
12
|
# Refine with context
|
|
14
13
|
concern = SourceDigest()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
existing_digest="Previous understanding...",
|
|
14
|
+
input_node = await concern.resolve(
|
|
15
|
+
input_hash="abc123",
|
|
18
16
|
context="User says: focus on regulatory tensions",
|
|
19
17
|
)
|
|
20
18
|
"""
|
|
21
19
|
|
|
22
20
|
from __future__ import annotations
|
|
23
21
|
|
|
22
|
+
from typing import Union
|
|
23
|
+
|
|
24
|
+
from dependency_injector.wiring import Provide, inject
|
|
25
|
+
from gqlalchemy import Memgraph, Neo4j
|
|
24
26
|
from pydantic import BaseModel, Field
|
|
25
27
|
|
|
26
28
|
from dialectical_framework.agents.conversation_facilitator import \
|
|
27
29
|
ConversationFacilitator
|
|
28
30
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
31
|
+
from dialectical_framework.enums.di import DI
|
|
32
|
+
from dialectical_framework.graph.nodes.input import Input
|
|
33
|
+
from dialectical_framework.graph.repositories.node_repository import \
|
|
34
|
+
NodeRepository
|
|
29
35
|
from dialectical_framework.protocols.has_config import SettingsAware
|
|
36
|
+
from dialectical_framework.protocols.input_resolver import InputResolver
|
|
37
|
+
|
|
38
|
+
DIGEST_THRESHOLD = 1500
|
|
30
39
|
|
|
31
40
|
SYSTEM_PROMPT = """You are an analytical reader producing a **digest** — a living document that captures understanding of a source.
|
|
32
41
|
|
|
@@ -50,44 +59,73 @@ class DigestDto(BaseModel):
|
|
|
50
59
|
"""Structured output for digest generation."""
|
|
51
60
|
|
|
52
61
|
digest: str = Field(
|
|
53
|
-
description="The analytical digest text
|
|
62
|
+
description="The analytical digest text"
|
|
54
63
|
)
|
|
55
64
|
reasoning: str = Field(
|
|
56
65
|
description="Brief explanation of what was emphasized and why"
|
|
57
66
|
)
|
|
58
67
|
|
|
59
68
|
|
|
60
|
-
class SourceDigest(ReasonableConcern[
|
|
69
|
+
class SourceDigest(ReasonableConcern[Input], SettingsAware):
|
|
61
70
|
"""
|
|
62
|
-
Generates or refines the analytical digest
|
|
71
|
+
Generates or refines the analytical digest for an Input node.
|
|
63
72
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
Resolves the full content, applies threshold logic (short content
|
|
74
|
+
is used as its own digest without an LLM call), then persists the
|
|
75
|
+
result back to the Input's digest field.
|
|
76
|
+
|
|
77
|
+
Programmatic usage:
|
|
78
|
+
concern = SourceDigest()
|
|
79
|
+
input_node = await concern.resolve(input_hash="abc123", context="focus on X")
|
|
67
80
|
"""
|
|
68
81
|
|
|
69
82
|
def __init__(self) -> None:
|
|
70
83
|
self._conversation = ConversationFacilitator()
|
|
71
84
|
|
|
85
|
+
@inject
|
|
72
86
|
async def resolve(
|
|
87
|
+
self,
|
|
88
|
+
input_hash: str,
|
|
89
|
+
context: str = "",
|
|
90
|
+
input_resolver: InputResolver = Provide[DI.input_resolver],
|
|
91
|
+
graph_db: Union[Memgraph, Neo4j] = Provide[DI.graph_db],
|
|
92
|
+
) -> Input:
|
|
93
|
+
repo = NodeRepository()
|
|
94
|
+
input_node = repo.find_by_hash(input_hash, node_type=Input)
|
|
95
|
+
|
|
96
|
+
if not input_node:
|
|
97
|
+
raise ValueError(f"Input not found: {input_hash}")
|
|
98
|
+
|
|
99
|
+
resolved_content = await input_resolver.resolve(input_node)
|
|
100
|
+
if not resolved_content:
|
|
101
|
+
raise ValueError(f"Input {input_hash} has no resolvable content")
|
|
102
|
+
|
|
103
|
+
if len(resolved_content) <= DIGEST_THRESHOLD and not input_node.digest:
|
|
104
|
+
new_digest = resolved_content
|
|
105
|
+
self._report.summary = f"Content compact enough to use as digest for input {input_node.short_hash}"
|
|
106
|
+
else:
|
|
107
|
+
new_digest = await self._generate_digest(
|
|
108
|
+
content=resolved_content,
|
|
109
|
+
existing_digest=input_node.digest,
|
|
110
|
+
context=context,
|
|
111
|
+
)
|
|
112
|
+
self._report.summary = f"Digest {'refined' if input_node.digest else 'created'} for input {input_node.short_hash}"
|
|
113
|
+
|
|
114
|
+
input_node.digest = new_digest
|
|
115
|
+
input_node.save()
|
|
116
|
+
|
|
117
|
+
self._report.ok = True
|
|
118
|
+
self._report.artifacts["input_hash"] = input_node.short_hash
|
|
119
|
+
self._report.artifacts["digest"] = new_digest
|
|
120
|
+
|
|
121
|
+
return input_node
|
|
122
|
+
|
|
123
|
+
async def _generate_digest(
|
|
73
124
|
self,
|
|
74
125
|
content: str,
|
|
75
126
|
existing_digest: str | None = None,
|
|
76
127
|
context: str = "",
|
|
77
128
|
) -> str:
|
|
78
|
-
"""
|
|
79
|
-
Generate or refine a digest for source content.
|
|
80
|
-
|
|
81
|
-
Args:
|
|
82
|
-
content: The full resolved source text
|
|
83
|
-
existing_digest: Current digest if refining (None for initial creation)
|
|
84
|
-
context: Direction from user or framework state that should shape
|
|
85
|
-
the digest (e.g., "focus on ethical arguments",
|
|
86
|
-
"we've identified tension between growth and stability")
|
|
87
|
-
|
|
88
|
-
Returns:
|
|
89
|
-
The new digest text
|
|
90
|
-
"""
|
|
91
129
|
self._conversation.set_system_prompt(SYSTEM_PROMPT)
|
|
92
130
|
|
|
93
131
|
prompt = self._build_prompt(content, existing_digest, context)
|
|
@@ -97,13 +135,7 @@ class SourceDigest(ReasonableConcern[str], SettingsAware):
|
|
|
97
135
|
user_content=prompt,
|
|
98
136
|
)
|
|
99
137
|
|
|
100
|
-
self._report.ok = True
|
|
101
138
|
self._report.artifacts["reasoning"] = result.reasoning
|
|
102
|
-
if existing_digest:
|
|
103
|
-
self._report.summary = "Refined existing digest"
|
|
104
|
-
else:
|
|
105
|
-
self._report.summary = "Generated initial digest"
|
|
106
|
-
|
|
107
139
|
return result.digest
|
|
108
140
|
|
|
109
141
|
def _build_prompt(
|
|
@@ -112,7 +144,6 @@ class SourceDigest(ReasonableConcern[str], SettingsAware):
|
|
|
112
144
|
existing_digest: str | None,
|
|
113
145
|
context: str,
|
|
114
146
|
) -> str:
|
|
115
|
-
"""Build the user prompt based on whether this is creation or refinement."""
|
|
116
147
|
sections = []
|
|
117
148
|
|
|
118
149
|
if existing_digest:
|
dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools/digest_input.py
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
DigestInput: Concern + tool for generating/refining the living digest of an Input source.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
|
|
7
|
-
from typing import Annotated, Union
|
|
8
|
-
|
|
9
|
-
from dependency_injector.wiring import Provide, inject
|
|
10
|
-
from gqlalchemy import Memgraph, Neo4j
|
|
11
|
-
from mirascope import llm
|
|
12
|
-
from pydantic import Field
|
|
13
|
-
|
|
14
|
-
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
15
|
-
from dialectical_framework.concerns.source_digest import SourceDigest
|
|
16
|
-
from dialectical_framework.enums.di import DI
|
|
17
|
-
from dialectical_framework.graph.nodes.input import Input
|
|
18
|
-
from dialectical_framework.graph.repositories.node_repository import \
|
|
19
|
-
NodeRepository
|
|
20
|
-
from dialectical_framework.protocols.input_resolver import InputResolver
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# Content shorter than this is used as its own digest (no LLM call needed)
|
|
24
|
-
DIGEST_THRESHOLD = 1500
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class DigestInput(ReasonableConcern[Input]):
|
|
28
|
-
"""
|
|
29
|
-
Generates or refines the digest for an Input node.
|
|
30
|
-
|
|
31
|
-
Resolves the full content, runs SourceDigest with any provided context,
|
|
32
|
-
and persists the result to the Input's digest field.
|
|
33
|
-
|
|
34
|
-
Short content (under ~1500 chars) is used directly as the digest
|
|
35
|
-
without an LLM call — it's already compact enough.
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
@inject
|
|
39
|
-
async def resolve(
|
|
40
|
-
self,
|
|
41
|
-
input_hash: str,
|
|
42
|
-
context: str = "",
|
|
43
|
-
input_resolver: InputResolver = Provide[DI.input_resolver],
|
|
44
|
-
graph_db: Union[Memgraph, Neo4j] = Provide[DI.graph_db],
|
|
45
|
-
) -> Input:
|
|
46
|
-
repo = NodeRepository()
|
|
47
|
-
input_node = repo.find_by_hash(input_hash, node_type=Input)
|
|
48
|
-
|
|
49
|
-
if not input_node:
|
|
50
|
-
raise ValueError(f"Input not found: {input_hash}")
|
|
51
|
-
|
|
52
|
-
resolved_content = await input_resolver.resolve(input_node)
|
|
53
|
-
if not resolved_content:
|
|
54
|
-
raise ValueError(f"Input {input_hash} has no resolvable content")
|
|
55
|
-
|
|
56
|
-
if len(resolved_content) <= DIGEST_THRESHOLD and not input_node.digest:
|
|
57
|
-
new_digest = resolved_content
|
|
58
|
-
self._report.summary = f"Content compact enough to use as digest for input {input_node.short_hash}"
|
|
59
|
-
else:
|
|
60
|
-
concern = SourceDigest()
|
|
61
|
-
new_digest = await concern.resolve(
|
|
62
|
-
content=resolved_content,
|
|
63
|
-
existing_digest=input_node.digest,
|
|
64
|
-
context=context,
|
|
65
|
-
)
|
|
66
|
-
self._report = self._report.merge(concern.report)
|
|
67
|
-
self._report.summary = f"Digest {'refined' if input_node.digest else 'created'} for input {input_node.short_hash}"
|
|
68
|
-
|
|
69
|
-
input_node.digest = new_digest
|
|
70
|
-
input_node.save()
|
|
71
|
-
|
|
72
|
-
self._report.ok = True
|
|
73
|
-
self._report.artifacts["input_hash"] = input_node.short_hash
|
|
74
|
-
self._report.artifacts["digest"] = new_digest
|
|
75
|
-
|
|
76
|
-
return input_node
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@llm.tool
|
|
80
|
-
async def digest_input(
|
|
81
|
-
input_hash: Annotated[str, Field(description="Hash of the Input node to digest")],
|
|
82
|
-
context: Annotated[
|
|
83
|
-
str,
|
|
84
|
-
Field(
|
|
85
|
-
description="Direction for the digest: user guidance, framework state, or focus instructions"
|
|
86
|
-
),
|
|
87
|
-
] = "",
|
|
88
|
-
) -> str:
|
|
89
|
-
"""Generate or refine the analytical digest of an input source. Use to build initial understanding of new inputs, or to sharpen the digest with user direction or framework learnings."""
|
|
90
|
-
concern = DigestInput()
|
|
91
|
-
await concern.resolve(input_hash=input_hash, context=context)
|
|
92
|
-
return str(concern.report)
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/apps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/di.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|