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.
Files changed (178) hide show
  1. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/PKG-INFO +1 -1
  2. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/pyproject.toml +1 -1
  3. dialectical_framework-1.4.1/src/dialectical_framework/agents/analyst/tools/create_dx_input.py +22 -0
  4. dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/add_input.py +27 -0
  5. dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +28 -0
  6. dialectical_framework-1.4.1/src/dialectical_framework/agents/orchestrator/tools/discard.py +23 -0
  7. {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
  8. {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
  9. {dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools → dialectical_framework-1.4.1/src/dialectical_framework/concerns}/discard.py +2 -15
  10. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/source_digest.py +64 -33
  11. dialectical_framework-1.3.0/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -92
  12. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/LICENSE +0 -0
  13. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/README.md +0 -0
  14. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/__init__.py +0 -0
  15. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/__init__.py +0 -0
  16. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/agent_context.py +0 -0
  17. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
  18. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/analyst.py +0 -0
  19. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
  20. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
  21. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
  22. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
  23. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
  24. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
  25. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
  26. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/system_prompts.py +0 -0
  27. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
  28. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
  29. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/apps.py +0 -0
  30. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
  31. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/execution_report.py +0 -0
  32. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
  33. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
  34. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
  35. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
  36. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
  37. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
  38. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
  39. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
  40. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
  41. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
  42. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
  43. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
  44. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
  45. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
  46. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
  47. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
  48. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
  49. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
  50. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
  51. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
  52. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
  53. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/agents/stream_events.py +0 -0
  54. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/__init__.py +0 -0
  55. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
  56. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/action_extraction.py +0 -0
  57. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
  58. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
  59. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
  60. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
  61. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
  62. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
  63. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
  64. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
  65. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
  66. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
  67. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
  68. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
  69. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
  70. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
  71. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
  72. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
  73. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
  74. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
  75. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/create_nexus.py +0 -0
  76. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
  77. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
  78. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
  79. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
  80. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
  81. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
  82. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_classification.py +0 -0
  83. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
  84. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/statement_placement.py +0 -0
  85. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
  86. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
  87. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
  88. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
  89. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/dialectical_reasoning.py +0 -0
  90. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/__init__.py +0 -0
  91. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/causality_preset.py +0 -0
  92. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/enums/di.py +0 -0
  93. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/__init__.py +0 -0
  94. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/graph_event.py +0 -0
  95. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/events/graph_event_bus.py +0 -0
  96. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/__init__.py +0 -0
  97. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/node_errors.py +0 -0
  98. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
  99. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/__init__.py +0 -0
  100. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
  101. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
  102. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/estimation_manager.py +0 -0
  103. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
  104. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
  105. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
  106. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
  107. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
  108. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
  109. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
  110. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/case.py +0 -0
  111. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
  112. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
  113. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
  114. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/input.py +0 -0
  115. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
  116. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
  117. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
  118. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
  119. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/statement.py +0 -0
  120. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
  121. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
  122. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/transition.py +0 -0
  123. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
  124. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationship_manager.py +0 -0
  125. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
  126. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
  127. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
  128. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
  129. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
  130. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
  131. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
  132. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
  133. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
  134. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
  135. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
  136. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
  137. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
  138. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
  139. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
  140. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
  141. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
  142. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
  143. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
  144. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
  145. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
  146. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
  147. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
  148. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
  149. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
  150. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
  151. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
  152. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
  153. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
  154. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
  155. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
  156. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
  157. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
  158. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
  159. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
  160. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/scope_context.py +0 -0
  161. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
  162. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/wheel_segment.py +0 -0
  163. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
  164. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/__init__.py +0 -0
  165. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/has_config.py +0 -0
  166. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/protocols/input_resolver.py +0 -0
  167. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/settings.py +0 -0
  168. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/__init__.py +0 -0
  169. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
  170. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/concurrency.py +0 -0
  171. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/dc_replace.py +0 -0
  172. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
  173. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/edge_context.py +0 -0
  174. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/effect_logger.py +0 -0
  175. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/input_context.py +0 -0
  176. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/order_transitions.py +0 -0
  177. {dialectical_framework-1.3.0 → dialectical_framework-1.4.1}/src/dialectical_framework/utils/sequence_generation.py +0 -0
  178. {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.0
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.0"
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)
@@ -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 + tool for capturing source material into the case.
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: Creates an Input node referencing a Transition via dx:// URI.
2
+ CreateDxInput: Concern for creating an Input node referencing a Transition via dx:// URI.
3
3
 
4
- Enables the ExplorerAnalyst feedback loop: the Analyst creates dx:// Inputs
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 Annotated, Optional, Union
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 + tool for marking statements/perspectives as discarded.
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 Annotated, Optional, Union
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. It focuses on dialectical material: tensions, oppositions, values, assertions.
6
+ guidance.
7
7
 
8
- Usage:
9
- # Initial digest
8
+ Programmatic usage:
10
9
  concern = SourceDigest()
11
- digest = await concern.resolve(content="Full text of the article...")
10
+ input_node = await concern.resolve(input_hash="abc123")
12
11
 
13
12
  # Refine with context
14
13
  concern = SourceDigest()
15
- digest = await concern.resolve(
16
- content="Full text...",
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 — focused on dialectical material"
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[str], SettingsAware):
69
+ class SourceDigest(ReasonableConcern[Input], SettingsAware):
61
70
  """
62
- Generates or refines the analytical digest of an Input source.
71
+ Generates or refines the analytical digest for an Input node.
63
72
 
64
- The digest captures the framework's evolving understanding of a source,
65
- shaped by both the content itself and any direction from the user or
66
- framework state (perspectives discovered, user guidance, etc.).
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:
@@ -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)