dialectical-framework 2.0.7__tar.gz → 2.0.8__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 (232) hide show
  1. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/PKG-INFO +1 -1
  2. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/pyproject.toml +1 -1
  3. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/consultant/consultant.py +39 -3
  4. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/views.py +32 -0
  5. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/bedrock_provider.py +14 -1
  6. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/format_compat.py +40 -0
  7. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/LICENSE +0 -0
  8. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/PATENTS +0 -0
  9. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/README.md +0 -0
  10. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/__init__.py +0 -0
  11. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/__init__.py +0 -0
  12. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
  13. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/advisor.py +0 -0
  14. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/build_policy.py +0 -0
  15. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/migration.py +0 -0
  16. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/reply_hygiene.py +0 -0
  17. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/system_prompts.py +0 -0
  18. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
  19. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
  20. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/deepen.py +0 -0
  21. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/explore.py +0 -0
  22. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
  23. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/note.py +0 -0
  24. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/record_decision.py +0 -0
  25. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/scoped.py +0 -0
  26. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/advisor/tools/sync.py +0 -0
  27. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/agent_context.py +0 -0
  28. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
  29. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/analyst.py +0 -0
  30. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
  31. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
  32. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
  33. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
  34. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
  35. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
  36. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/sketch_tetrad.py +0 -0
  37. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
  38. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/system_prompts.py +0 -0
  39. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
  40. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
  41. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/app_spec.py +0 -0
  42. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/apps.py +0 -0
  43. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/consultant/__init__.py +0 -0
  44. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
  45. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/execution_report.py +0 -0
  46. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
  47. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
  48. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
  49. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
  50. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
  51. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
  52. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
  53. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
  54. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
  55. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
  56. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
  57. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
  58. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
  59. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
  60. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
  61. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/audit_feasibility.py +0 -0
  62. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
  63. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
  64. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
  65. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
  66. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
  67. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
  68. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
  69. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
  70. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
  71. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
  72. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/stream_events.py +0 -0
  73. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/toolsets.py +0 -0
  74. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/agents/turn_timing.py +0 -0
  75. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/__init__.py +0 -0
  76. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
  77. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/action_extraction.py +0 -0
  78. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/add_input.py +0 -0
  79. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
  80. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
  81. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
  82. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
  83. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
  84. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
  85. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
  86. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
  87. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/build_status.py +0 -0
  88. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
  89. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
  90. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
  91. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
  92. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
  93. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
  94. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
  95. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
  96. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
  97. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
  98. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
  99. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
  100. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/create_nexus.py +0 -0
  101. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/decision_coherence_check.py +0 -0
  102. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/decision_confirmation_check.py +0 -0
  103. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
  104. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/dialectical_context.py +0 -0
  105. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/discard.py +0 -0
  106. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
  107. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
  108. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
  109. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
  110. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
  111. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/record_decision.py +0 -0
  112. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
  113. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/source_digest.py +0 -0
  114. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/statement_classification.py +0 -0
  115. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
  116. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/statement_headline.py +0 -0
  117. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/statement_placement.py +0 -0
  118. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
  119. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/tetrad_candidates.py +0 -0
  120. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/tetrad_grounding.py +0 -0
  121. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/tetrad_sketch.py +0 -0
  122. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
  123. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
  124. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
  125. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/transformation_sketch.py +0 -0
  126. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/concerns/view_sketch.py +0 -0
  127. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/dialectical_reasoning.py +0 -0
  128. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/enums/__init__.py +0 -0
  129. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/enums/causality_preset.py +0 -0
  130. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/enums/di.py +0 -0
  131. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/events/__init__.py +0 -0
  132. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/events/graph_event.py +0 -0
  133. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/events/graph_event_bus.py +0 -0
  134. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/events/progress_event.py +0 -0
  135. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/exceptions/__init__.py +0 -0
  136. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/exceptions/node_errors.py +0 -0
  137. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/exceptions/provider_errors.py +0 -0
  138. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
  139. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/__init__.py +0 -0
  140. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
  141. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
  142. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/estimation_manager.py +0 -0
  143. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
  144. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
  145. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
  146. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
  147. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
  148. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
  149. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
  150. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/case.py +0 -0
  151. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
  152. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/decision.py +0 -0
  153. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
  154. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
  155. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/input.py +0 -0
  156. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
  157. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/note.py +0 -0
  158. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
  159. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
  160. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
  161. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/statement.py +0 -0
  162. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
  163. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
  164. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/transition.py +0 -0
  165. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
  166. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationship_manager.py +0 -0
  167. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
  168. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
  169. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
  170. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
  171. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
  172. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
  173. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
  174. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
  175. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
  176. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
  177. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/grounded_in_relationship.py +0 -0
  178. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
  179. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
  180. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
  181. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
  182. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
  183. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
  184. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
  185. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
  186. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
  187. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
  188. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
  189. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
  190. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
  191. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/rendering.py +0 -0
  192. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
  193. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
  194. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
  195. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/decision_repository.py +0 -0
  196. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
  197. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
  198. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
  199. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/note_repository.py +0 -0
  200. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
  201. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
  202. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
  203. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
  204. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
  205. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
  206. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/scope_context.py +0 -0
  207. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
  208. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/wheel_segment.py +0 -0
  209. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
  210. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/protocols/__init__.py +0 -0
  211. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/protocols/has_config.py +0 -0
  212. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/protocols/input_resolver.py +0 -0
  213. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/py.typed +0 -0
  214. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/settings.py +0 -0
  215. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/settings_context.py +0 -0
  216. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/__init__.py +0 -0
  217. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/async_drain.py +0 -0
  218. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/call_census.py +0 -0
  219. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/chunking.py +0 -0
  220. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/concurrency.py +0 -0
  221. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/dc_replace.py +0 -0
  222. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
  223. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/edge_context.py +0 -0
  224. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/effect_logger.py +0 -0
  225. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/input_context.py +0 -0
  226. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/order_transitions.py +0 -0
  227. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/progress.py +0 -0
  228. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/retry_accounting.py +0 -0
  229. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/sequence_generation.py +0 -0
  230. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/thinking_compat.py +0 -0
  231. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/use_brain.py +0 -0
  232. {dialectical_framework-2.0.7 → dialectical_framework-2.0.8}/src/dialectical_framework/utils/utterance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dialectical-framework
3
- Version: 2.0.7
3
+ Version: 2.0.8
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 = "2.0.7"
3
+ version = "2.0.8"
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"
@@ -36,6 +36,7 @@ dropped from BOTH the product and the baseline.
36
36
 
37
37
  from __future__ import annotations
38
38
 
39
+ import logging
39
40
  import re
40
41
  from contextlib import aclosing
41
42
  from typing import Any, AsyncGenerator, Optional
@@ -51,7 +52,14 @@ from dialectical_framework.agents.conversation_facilitator import (
51
52
  FROM_SETTINGS, ConversationFacilitator)
52
53
  from dialectical_framework.agents.stream_events import StreamEvent
53
54
  from dialectical_framework.agents.turn_timing import TurnTiming
54
- from dialectical_framework.graph.views import ExplorationView, PerspectiveView
55
+ from dialectical_framework.exceptions.provider_errors import ModelRefusal
56
+ from dialectical_framework.graph.views import (
57
+ ExplorationView,
58
+ FailedDrawView,
59
+ PerspectiveView,
60
+ )
61
+
62
+ logger = logging.getLogger(__name__)
55
63
 
56
64
  #: Tool verbs → mental acts. These are REWRITES, not drops: dropping every
57
65
  #: paragraph that mentions a tool name would also delete the discrimination test
@@ -135,6 +143,16 @@ _TOOL_TOKENS = (
135
143
  )
136
144
 
137
145
 
146
+ def _failed_draw(error: BaseException) -> FailedDrawView:
147
+ """A failed draw's record: the exception's type, the provider's refusal
148
+ category when it is a `ModelRefusal` that carries one, and its text."""
149
+ return FailedDrawView(
150
+ kind=type(error).__name__,
151
+ category=getattr(error, "category", None) if isinstance(error, ModelRefusal) else None,
152
+ message=str(error) or None,
153
+ )
154
+
155
+
138
156
  def _apply_rewrites(section: str) -> tuple[str, list[str]]:
139
157
  """Apply the rewrite table whitespace-insensitively.
140
158
 
@@ -425,8 +443,22 @@ class Consultant:
425
443
  # measured cold-start rate.
426
444
  drawn = await asyncio.gather(*(draw() for _ in range(n)), return_exceptions=True)
427
445
  sketches = [d for d in drawn if not isinstance(d, BaseException)]
446
+ failures = [d for d in drawn if isinstance(d, BaseException)]
447
+ # A failed draw is a finding, not noise: it costs the card a candidate
448
+ # (or its whole comparison, when two fail) and it costs time before it
449
+ # fails. Said once per failure, by type — the host that counted 8 lost
450
+ # draws in 240 on Opus 5.5 had no cause on record because this branch
451
+ # was silent — and carried on the view as `failed_draws`.
452
+ failed_draws = [_failed_draw(e) for e in failures]
453
+ for failed in failed_draws:
454
+ logger.warning(
455
+ "A view-turn draw failed (%d of %d drawn): %s%s: %s",
456
+ len(sketches), n, failed.kind,
457
+ f" ({failed.category})" if failed.category else "",
458
+ failed.message,
459
+ )
428
460
  if not sketches:
429
- raise next(d for d in drawn if isinstance(d, BaseException))
461
+ raise failures[0]
430
462
  # With several draws the framework's own coherence check picks the one
431
463
  # whose FIRST tension holds best (`concerns/tetrad_candidates.py`); a
432
464
  # draw with no complete first tension sorts last. The card a blindspot
@@ -447,7 +479,11 @@ class Consultant:
447
479
  sketch = sketches[judgeable[0]] if judgeable else sketches[0]
448
480
  else:
449
481
  sketch = sketches[0]
450
- view = dataclasses.replace(exploration_view_from_sketch(sketch), runners_up=runners_up)
482
+ view = dataclasses.replace(
483
+ exploration_view_from_sketch(sketch),
484
+ runners_up=runners_up,
485
+ failed_draws=failed_draws,
486
+ )
451
487
  # What the turn leaves behind is NOT what it sent: the long request and
452
488
  # the DTO come off, and the person's ask plus the drawing in words go
453
489
  # on. Kept as a request→prose pair, the long request taught the next
@@ -326,6 +326,32 @@ class WheelView:
326
326
  return dataclasses.asdict(self)
327
327
 
328
328
 
329
+ @dataclass(frozen=True)
330
+ class FailedDrawView:
331
+ """One best-of-N draw that produced nothing — what failed, by type.
332
+
333
+ A drawn view is best-of-N (`Consultant.exploration_view(attempts=)`), and a
334
+ draw that raises used to vanish: the gather dropped it, nothing logged it,
335
+ and the census never saw a call it could not record. A host measured the
336
+ gap as 8 of 240 draws on Opus 5.5 with no cause on record. `kind` is the
337
+ exception's class name (`ModelRefusal`, `ParseError`, a provider error);
338
+ `category` is the provider's refusal category when the kind is a refusal
339
+ and it sent one; `message` is the exception's text, for a log, never for
340
+ a screen — `without_terminology()` drops it, since a parse error names DTO
341
+ fields.
342
+ """
343
+
344
+ kind: str
345
+ category: Optional[str] = None
346
+ message: Optional[str] = None
347
+
348
+ def without_terminology(self) -> FailedDrawView:
349
+ return dataclasses.replace(self, message=None)
350
+
351
+ def to_dict(self) -> dict[str, Any]:
352
+ return dataclasses.asdict(self)
353
+
354
+
329
355
  @dataclass(frozen=True)
330
356
  class ExplorationView:
331
357
  """The perspectives seen together — an exploration's (a Nexus's) members,
@@ -344,6 +370,11 @@ class ExplorationView:
344
370
  #: host's "again"/"another" can show one without a new reasoning call.
345
371
  #: Empty for a view read off the graph, or drawn once.
346
372
  runners_up: list[PerspectiveView] = field(default_factory=list)
373
+ #: The best-of-N draws that FAILED, in no particular order — so a host can
374
+ #: count them and tell a card chosen among three from one that was the only
375
+ #: draw left. Empty for a view read off the graph. A view with every draw
376
+ #: failed is never returned: the method raises the first failure instead.
377
+ failed_draws: list[FailedDrawView] = field(default_factory=list)
347
378
 
348
379
  def without_terminology(self) -> ExplorationView:
349
380
  return dataclasses.replace(
@@ -351,6 +382,7 @@ class ExplorationView:
351
382
  perspectives=[p.without_terminology() for p in self.perspectives],
352
383
  nexus_hash=None,
353
384
  runners_up=[p.without_terminology() for p in self.runners_up],
385
+ failed_draws=[f.without_terminology() for f in self.failed_draws],
354
386
  )
355
387
 
356
388
  def to_dict(self) -> dict[str, Any]:
@@ -20,6 +20,7 @@ from dialectical_framework.exceptions.provider_errors import ModelRefusal
20
20
  from dialectical_framework.settings import Settings
21
21
  from dialectical_framework.utils.format_compat import (
22
22
  learn_format_mode_from_error,
23
+ structured_output_format,
23
24
  with_format_compat,
24
25
  )
25
26
  from dialectical_framework.utils.thinking_compat import (
@@ -381,7 +382,9 @@ class BedrockAnthropicProvider(AnthropicProvider):
381
382
  5.5); see format_compat. Encoding happens here, BEFORE the request is
382
383
  built, because the mode decides the request's shape — tools and
383
384
  tool_choice for one, system instructions for the other — and the
384
- decoded response's parser follows the resolved format. Earlier turns'
385
+ decoded response's parser follows the resolved format. A JSON-mode
386
+ call to such a model also carries its schema as a structured output
387
+ (`output_config.format`, see `structured_output_format`). Earlier turns'
385
388
  thinking blocks are dropped here too, for a model that binds them to
386
389
  their prefix (see `without_earlier_turn_thinking`).
387
390
 
@@ -411,6 +414,16 @@ class BedrockAnthropicProvider(AnthropicProvider):
411
414
  )
412
415
  if compatible is not format and "thinking" not in kwargs:
413
416
  kwargs["thinking"] = {"type": "disabled"}
417
+ # A JSON-mode call to a model whose structured calls go in JSON mode
418
+ # is constrained to its schema (`output_config.format`): JSON asked for
419
+ # in prose came back with trailing commas often enough to cost a whole
420
+ # re-ask per 2.5 cards on Sonnet 5.5 (see format_compat). The thinking
421
+ # layer merges its `effort` into the same `output_config` later.
422
+ constraint = structured_output_format(model_name, compatible)
423
+ if constraint is not None:
424
+ output_config = dict(kwargs.get("output_config") or {})
425
+ output_config["format"] = constraint
426
+ kwargs["output_config"] = output_config
414
427
  _fix_cache_breakpoints(kwargs)
415
428
  return input_messages, resolved_format, kwargs
416
429
 
@@ -23,6 +23,21 @@ that accept both. It parses as reliably on a DTO-shaped call and costs less
23
23
  prefill (`probe_format_mode_thinking.py`), but the framework's measured figures
24
24
  were taken on forced tool use, so switching every model is a measurement, not
25
25
  a compatibility fix.
26
+
27
+ **A JSON-mode call to such a model is also sent as a structured output**
28
+ (`output_config.format`, a JSON-schema constraint on the reply; since
29
+ 2026-10-09). JSON mode alone asks for JSON and gets prose-shaped JSON back
30
+ often enough to cost whole calls: a host measured 32 parse re-asks in 80 cards
31
+ on Sonnet 5.5 (25 on `TransformationSketchDto`, 7 on `ViewSketchDto` —
32
+ trailing commas, invalid JSON), each a full extra generation on the
33
+ framework's parse ladder. The constraint removes the class; Bedrock takes it
34
+ through the client the framework uses on Sonnet 5, Sonnet 5.5 and Opus 5.5,
35
+ with every thinking shape the framework sends and with the real DTO schemas
36
+ (`tests/e2e/probe_structured_outputs.py`). Applied to the SAME models that
37
+ refuse forced tool use — the ones whose structured calls go in JSON mode in
38
+ the first place, explicitly (`format_mode="json"`) or by substitution — and
39
+ to no other: Sonnet 5 / Opus 5 took it too in the probe, but every judged
40
+ figure there was taken without it, so widening it is a measurement.
26
41
  """
27
42
 
28
43
  from __future__ import annotations
@@ -31,8 +46,10 @@ import logging
31
46
  import re
32
47
  from typing import Any, Optional, get_origin
33
48
 
49
+ from anthropic.lib._parse._transform import transform_schema
34
50
  from mirascope import llm
35
51
  from mirascope.llm.formatting.format import Format
52
+ from pydantic import BaseModel
36
53
 
37
54
  logger = logging.getLogger(__name__)
38
55
 
@@ -131,6 +148,29 @@ def learn_format_mode_from_error(
131
148
  return True
132
149
 
133
150
 
151
+ def structured_output_format(model_name: str, format: Any) -> Optional[dict[str, Any]]:
152
+ """The ``output_config.format`` for this request, or None when it gets none.
153
+
154
+ Given the format AS RESOLVED for the model (after `with_format_compat`):
155
+ a `Format` in JSON mode on a model whose structured calls go in JSON mode
156
+ (`refuses_forced_tool_use`) gets a ``json_schema`` constraint on the reply;
157
+ everything else — forced tool use, parser mode, a primitive or an output
158
+ parser, a model that keeps forced tool use — gets None and goes as it
159
+ always did. The schema is the SDK's own strict transform of the DTO
160
+ (``additionalProperties: false`` on every object, the constraints the
161
+ grammar cannot hold moved into descriptions), the same one
162
+ ``messages.parse`` would send.
163
+ """
164
+ if format is None or not refuses_forced_tool_use(model_name):
165
+ return None
166
+ if not isinstance(format, Format) or format.mode != JSON:
167
+ return None
168
+ formattable = format.formattable
169
+ if not (isinstance(formattable, type) and issubclass(formattable, BaseModel)):
170
+ return None
171
+ return {"type": "json_schema", "schema": transform_schema(formattable)}
172
+
173
+
134
174
  def reset_learned_format_modes() -> None:
135
175
  """Test seam — the learned map is process-global by design."""
136
176
  _LEARNED.clear()