dialectical-framework 1.1.0__tar.gz → 1.1.2__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 (163) hide show
  1. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/PKG-INFO +1 -1
  2. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/pyproject.toml +1 -1
  3. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +6 -16
  4. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +41 -11
  5. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/system_prompts.py +2 -0
  6. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/apps.py +8 -1
  7. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/conversation_facilitator.py +6 -0
  8. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/explorer.py +0 -3
  9. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/system_prompts.py +2 -5
  10. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/LICENSE +0 -0
  11. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/README.md +0 -0
  12. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/__init__.py +0 -0
  13. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/__init__.py +0 -0
  14. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/agent_context.py +0 -0
  15. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
  16. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/analyst.py +0 -0
  17. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
  18. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
  19. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
  20. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
  21. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
  22. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
  23. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/tools/create_dx_input.py +0 -0
  24. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
  25. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/execution_report.py +0 -0
  26. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
  27. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
  28. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
  29. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
  30. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
  31. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
  32. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
  33. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
  34. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
  35. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
  36. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
  37. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
  38. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
  39. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
  40. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
  41. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
  42. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/agents/stream_events.py +0 -0
  43. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/__init__.py +0 -0
  44. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
  45. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/action_extraction.py +0 -0
  46. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
  47. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
  48. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
  49. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
  50. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
  51. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
  52. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
  53. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
  54. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
  55. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
  56. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
  57. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
  58. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
  59. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
  60. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
  61. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
  62. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
  63. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
  64. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
  65. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
  66. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
  67. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
  68. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
  69. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/statement_classification.py +0 -0
  70. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
  71. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/statement_placement.py +0 -0
  72. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
  73. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
  74. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
  75. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
  76. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/dialectical_reasoning.py +0 -0
  77. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/enums/__init__.py +0 -0
  78. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/enums/causality_preset.py +0 -0
  79. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/enums/di.py +0 -0
  80. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/events/__init__.py +0 -0
  81. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/events/graph_event.py +0 -0
  82. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/events/graph_event_bus.py +0 -0
  83. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/exceptions/__init__.py +0 -0
  84. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/exceptions/node_errors.py +0 -0
  85. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
  86. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/__init__.py +0 -0
  87. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
  88. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
  89. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/estimation_manager.py +0 -0
  90. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
  91. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
  92. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
  93. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
  94. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
  95. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
  96. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
  97. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/case.py +0 -0
  98. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
  99. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
  100. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
  101. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/input.py +0 -0
  102. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
  103. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
  104. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
  105. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
  106. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/statement.py +0 -0
  107. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
  108. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
  109. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/transition.py +0 -0
  110. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
  111. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationship_manager.py +0 -0
  112. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
  113. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
  114. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
  115. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
  116. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
  117. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
  118. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
  119. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
  120. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
  121. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
  122. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
  123. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
  124. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
  125. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
  126. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
  127. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
  128. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
  129. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
  130. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
  131. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
  132. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
  133. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
  134. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
  135. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
  136. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
  137. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
  138. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
  139. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
  140. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
  141. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
  142. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
  143. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
  144. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
  145. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
  146. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
  147. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/scope_context.py +0 -0
  148. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
  149. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/wheel_segment.py +0 -0
  150. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
  151. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/protocols/__init__.py +0 -0
  152. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/protocols/has_config.py +0 -0
  153. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/protocols/input_resolver.py +0 -0
  154. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/settings.py +0 -0
  155. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/__init__.py +0 -0
  156. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
  157. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/dc_replace.py +0 -0
  158. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
  159. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/edge_context.py +0 -0
  160. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/effect_logger.py +0 -0
  161. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/order_transitions.py +0 -0
  162. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/src/dialectical_framework/utils/sequence_generation.py +0 -0
  163. {dialectical_framework-1.1.0 → dialectical_framework-1.1.2}/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.1.0
3
+ Version: 1.1.2
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.1.0"
3
+ version = "1.1.2"
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"
@@ -91,20 +91,9 @@ class ExpandPolarity(ReasonableConcern[list[Perspective]]):
91
91
  partial_pps = [pp for pp in existing_pps if not pp.is_complete()]
92
92
 
93
93
  if not partial_pps:
94
- self._report.ok = True
95
- self._report.summary = (
96
- f"{len(complete_pps)} complete Perspective(s), no partial Perspectives to expand"
97
- )
98
- self._report.artifacts["perspective_hashes"] = [
99
- pp.hash for pp in complete_pps if pp.hash
100
- ]
101
- self._report.artifacts["total_count"] = len(complete_pps)
102
- self._report.artifacts["existing_count"] = len(complete_pps)
103
- self._report.artifacts["new_count"] = 0
104
- self._report.artifacts["perspectives"] = [
105
- self._perspective_final_state(pp) for pp in complete_pps
106
- ]
107
- return complete_pps
94
+ # All existing perspectives are complete — create a new one
95
+ pp = self._create_perspective_for_polarity(polarity)
96
+ partial_pps = [pp]
108
97
 
109
98
  # Complete all partial PPs
110
99
  completed_pps: list[Perspective] = []
@@ -314,7 +303,7 @@ class ExpandPolarity(ReasonableConcern[list[Perspective]]):
314
303
  async def expand_polarities(
315
304
  polarity_hashes: Annotated[list[str], Field(description="Hashes of Polarities to expand into full Perspectives")],
316
305
  ) -> str:
317
- """Build complete Perspectives from Polarities by generating evaluative aspects (T+, T-, A+, A-) for each. Runs in parallel. The Polarities must already exist in the graph."""
306
+ """Build complete Perspectives from Polarities by generating evaluative aspects (T+, T-, A+, A-) for each. Each call generates one new Perspective per Polarity — call multiple times for alternative perspectives on the same Polarity (duplicates in a single call are ignored). The Polarities must already exist in the graph."""
318
307
  import asyncio
319
308
 
320
309
  async def _expand_one(h: str) -> str:
@@ -322,5 +311,6 @@ async def expand_polarities(
322
311
  await concern.resolve()
323
312
  return str(concern.report)
324
313
 
325
- results = await asyncio.gather(*[_expand_one(h) for h in polarity_hashes])
314
+ unique_hashes = list(dict.fromkeys(polarity_hashes))
315
+ results = await asyncio.gather(*[_expand_one(h) for h in unique_hashes])
326
316
  return "\n---\n".join(results)
@@ -119,7 +119,6 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
119
119
  not_like_these = [c["statement"] for c in vocab]
120
120
 
121
121
  results: list[ThesisResult] = []
122
- all_existing: list[Statement] = []
123
122
  newly_extracted: list[Statement] = []
124
123
 
125
124
  # Phase 1: For each thesis, collect existing oppositions + extract new ones (parallel)
@@ -156,13 +155,13 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
156
155
  result.existing = existing_antitheses
157
156
  return result
158
157
 
158
+ unique_hashes = list(dict.fromkeys(self.thesis_hashes))
159
159
  thesis_results = await asyncio.gather(
160
- *[_process_thesis(h) for h in self.thesis_hashes]
160
+ *[_process_thesis(h) for h in unique_hashes]
161
161
  )
162
162
 
163
163
  for result in thesis_results:
164
164
  results.append(result)
165
- all_existing.extend(result.existing)
166
165
  newly_extracted.extend(result.extracted)
167
166
 
168
167
  # Phase 2: Semantic deduplication (only newly extracted, not existing)
@@ -192,6 +191,20 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
192
191
  data["hash"] = dedup_result.replacements[data["hash"]].hash
193
192
  data["deduped"] = True
194
193
 
194
+ # Deduplicate antithesis_data entries per thesis — dedup can merge an
195
+ # extracted antithesis into one already present from existing oppositions,
196
+ # producing duplicate (thesis, antithesis) pairs in the same result.
197
+ for result in results:
198
+ if result.error:
199
+ continue
200
+ seen: set[str] = set()
201
+ unique_data: list[dict] = []
202
+ for data in result.antithesis_data:
203
+ if data["hash"] not in seen:
204
+ seen.add(data["hash"])
205
+ unique_data.append(data)
206
+ result.antithesis_data = unique_data
207
+
195
208
  # Phase 3: Create Polarity nodes for each T-A pair
196
209
  total_antitheses = sum(len(r.antithesis_data) for r in results if not r.error)
197
210
 
@@ -226,9 +239,15 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
226
239
  }
227
240
  )
228
241
 
229
- # Build summary
230
- existing_count = len(all_existing)
231
- new_count = len(newly_extracted)
242
+ # Build summary — derive counts from deduplicated antithesis_data
243
+ existing_count = sum(
244
+ 1 for r in results if not r.error
245
+ for d in r.antithesis_data if d.get("existing")
246
+ )
247
+ new_count = sum(
248
+ 1 for r in results if not r.error
249
+ for d in r.antithesis_data if not d.get("existing")
250
+ )
232
251
 
233
252
  self._report.ok = True
234
253
  self._report.artifacts["thesis_count"] = len(self.thesis_hashes)
@@ -429,6 +448,11 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
429
448
  if data["hash"] == result.thesis.hash:
430
449
  continue
431
450
 
451
+ # Skip if this T-A pair was already processed (e.g. dedup merged
452
+ # an extracted antithesis into one already seen via existing oppositions)
453
+ if (result.thesis.hash, data["hash"]) in polarity_map:
454
+ continue
455
+
432
456
  antithesis = self._resolve_component(data["hash"])
433
457
  if antithesis is None:
434
458
  continue
@@ -486,15 +510,21 @@ class FindPolarities(ReasonableConcern[Optional[Ideas]]):
486
510
  ideas.inputs.connect(inp)
487
511
  self._report.relationship_created(ideas.inputs, ideas, inp)
488
512
 
489
- # Connect all theses and antitheses
513
+ # Connect all theses and antitheses (deduplicated across theses)
514
+ connected_hashes: set[str] = set()
490
515
  for result in valid_results:
491
- ideas.statements.connect(result.thesis)
492
- self._report.relationship_created(
493
- ideas.statements, ideas, result.thesis
494
- )
516
+ if result.thesis.hash not in connected_hashes:
517
+ connected_hashes.add(result.thesis.hash)
518
+ ideas.statements.connect(result.thesis)
519
+ self._report.relationship_created(
520
+ ideas.statements, ideas, result.thesis
521
+ )
495
522
  for data in result.antithesis_data:
523
+ if data["hash"] in connected_hashes:
524
+ continue
496
525
  comp = self._resolve_component(data["hash"])
497
526
  if comp:
527
+ connected_hashes.add(data["hash"])
498
528
  ideas.statements.connect(comp)
499
529
  self._report.relationship_created(
500
530
  ideas.statements, ideas, comp
@@ -94,6 +94,8 @@ Adapt depth and presentation to the persona defined in the app preamble.
94
94
  ## Rules
95
95
 
96
96
  - Never dump raw tool output. Synthesize into appropriate presentation.
97
+ - Never rephrase Statement text. Use exact text (or display_text) from the graph — paraphrasing makes it ambiguous which node you're referring to.
98
+ - When referencing structural nodes (Polarity, Perspective, Nexus, Cycle, Wheel, Transformation, Transition, Synthesis), always include the short hash for disambiguation.
97
99
  - User corrections take priority — act immediately, don't push back.
98
100
  - When resuming a session with existing data, use `present_analysis` to orient before acting.
99
101
  - Skill reports may contain truncated text previews. When you need to present exact node text to the user, use `inspect_node` or `present_analysis` by hash — never reconstruct or guess full text from truncated previews.
@@ -199,6 +199,13 @@ both sides contribute", "constructive co-existence", "where 1+1 > 2".
199
199
  - Frame pathways as options, not prescriptions. There are many valid recipes.
200
200
  - Present tensions as legitimate — both poles have constructive potential.
201
201
 
202
+ ## Viewport Scope
203
+
204
+ Messages may include context about what the user is currently viewing. This tells you their active focus. Respect it:
205
+
206
+ - Only operate on the node(s) in the user's viewport unless they explicitly reference something else or ask to switch.
207
+ - Never silently pivot to other nodes outside the viewport. If you think working on a different node would help, ask first.
208
+
202
209
  ## Presentation Defaults
203
210
 
204
211
  Example of a correctly labeled position table:
@@ -213,7 +220,7 @@ Example of a correctly labeled position table:
213
220
  The "blindspot" label belongs ONLY to A+ and A- (the opposition's territory).
214
221
  T+ and T- are the holder's own visible territory — never label them as blindspots.
215
222
 
216
- - Never mention tool names, pipelines, graph operations, or node hashes.
223
+ - Never mention tool names, pipelines, or graph operations.
217
224
  - User-facing structural terms (Wheel, Nexus, Cycle, Transformation, Position,
218
225
  Polarity) are fine to use — these are part of the UX vocabulary.
219
226
  - Position labels (T+, T-, A+, A-) can be introduced once the user understands
@@ -293,6 +293,12 @@ class ConversationFacilitator(SettingsAware):
293
293
  """Call LLM with format for structured output."""
294
294
  messages = self._messages
295
295
 
296
+ # Bedrock requires conversations to end with a user message.
297
+ # After the agentic tool loop, messages end with assistant — inject a
298
+ # user prompt so the extraction call is valid for all providers.
299
+ if messages and messages[-1].role == "assistant":
300
+ messages = [*messages, llm.messages.user("Provide your structured response.")]
301
+
296
302
  @use_brain(format=response_model)
297
303
  async def _llm_call():
298
304
  return messages
@@ -119,8 +119,6 @@ def _build_tools() -> list:
119
119
  build_wheels
120
120
  from dialectical_framework.agents.explorer.skills.explore_transformations import \
121
121
  explore_transformations
122
- from dialectical_framework.agents.explorer.tools.create_nexus import \
123
- create_nexus
124
122
  from dialectical_framework.agents.explorer.tools.present_exploration import \
125
123
  present_exploration
126
124
  from dialectical_framework.agents.orchestrator.tools.get_schema import \
@@ -133,7 +131,6 @@ def _build_tools() -> list:
133
131
  return [
134
132
  build_wheels,
135
133
  explore_transformations,
136
- create_nexus,
137
134
  present_exploration,
138
135
  inspect_node,
139
136
  query_graph,
@@ -44,14 +44,10 @@ When the user wants to go deeper on a specific transformation:
44
44
  - Use `inspect_node` to show full detail.
45
45
  - Explain the tetrad structure: Ac/Ac+/Ac- and Re/Re+/Re-.
46
46
 
47
- When the user wants to create a sub-exploration:
48
- - Use `create_nexus` to group a subset of perspectives for focused exploration.
49
-
50
47
  ## Tools
51
48
 
52
49
  - `build_wheels` -- Generate causal structures (Cycles + Wheels) from this Nexus. Use nexus_hash: "{nexus_hash}".
53
50
  - `explore_transformations` -- Generate Action-Reflection transformations for a Wheel.
54
- - `create_nexus` -- Create a sub-nexus for focused exploration of specific perspectives.
55
51
  - `present_exploration` -- Show current state of this Nexus: perspectives, wheels, transformations.
56
52
  - `inspect_node` -- Deep-dive any node by hash.
57
53
  - `query_graph` -- Raw Cypher for custom queries. Call `get_schema` first.
@@ -64,7 +60,8 @@ Adapt depth and presentation to the persona defined in the app preamble.
64
60
  ## Rules
65
61
 
66
62
  - Never dump raw tool output. Synthesize into appropriate presentation.
67
- - Always work within this Nexus ({nexus_hash}) unless creating a sub-nexus.
63
+ - Never rephrase Statement text. Use exact text (or display_text) from the graph — paraphrasing makes it ambiguous which node you're referring to.
64
+ - When referencing structural nodes (Polarity, Perspective, Nexus, Cycle, Wheel, Transformation, Transition, Synthesis), always include the short hash for disambiguation.
68
65
  - If the user wants to analyze new material, suggest they return to the analysis thread.
69
66
  - Skill reports may contain truncated text previews. When you need to present exact node text to the user, use `inspect_node` or `present_analysis` by hash — never reconstruct or guess full text from truncated previews.
70
67
  """