dialectical-framework 1.8.1__tar.gz → 1.9.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 (221) hide show
  1. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/PKG-INFO +72 -21
  2. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/README.md +71 -20
  3. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/pyproject.toml +1 -1
  4. dialectical_framework-1.9.2/src/dialectical_framework/agents/advisor/advisor.py +2443 -0
  5. dialectical_framework-1.9.2/src/dialectical_framework/agents/advisor/mode.py +59 -0
  6. dialectical_framework-1.9.2/src/dialectical_framework/agents/advisor/reply_hygiene.py +118 -0
  7. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/system_prompts.py +391 -32
  8. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/explore.py +98 -12
  9. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/record_decision.py +20 -10
  10. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/scoped.py +78 -22
  11. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/sync.py +1 -1
  12. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/analyst.py +17 -3
  13. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/system_prompts.py +1 -1
  14. dialectical_framework-1.9.2/src/dialectical_framework/agents/app_spec.py +205 -0
  15. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/apps.py +58 -9
  16. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/conversation_facilitator.py +154 -13
  17. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/explorer.py +287 -44
  18. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +48 -2
  19. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +67 -7
  20. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/system_prompts.py +7 -5
  21. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +12 -8
  22. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/stream_events.py +9 -0
  23. dialectical_framework-1.9.2/src/dialectical_framework/agents/turn_timing.py +371 -0
  24. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/ac_re_taxonomy.py +2 -2
  25. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/action_extraction.py +26 -4
  26. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/decision_confirmation_check.py +85 -12
  27. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/dialectical_context.py +259 -49
  28. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/perspective_combination.py +50 -4
  29. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +94 -35
  30. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/record_decision.py +242 -14
  31. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/synthesis_generation.py +1 -1
  32. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/tetrad_grounding.py +2 -2
  33. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/thesis_extraction.py +76 -5
  34. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/transformation_audit.py +3 -2
  35. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/transformation_generation.py +84 -108
  36. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +30 -13
  37. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/base_node.py +14 -0
  38. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/case.py +4 -1
  39. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/decision.py +9 -3
  40. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/transformation.py +24 -14
  41. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/transition.py +14 -2
  42. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/wheel.py +29 -12
  43. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationship_manager.py +178 -17
  44. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/polarity_relationship.py +11 -6
  45. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/rendering.py +133 -18
  46. dialectical_framework-1.9.2/src/dialectical_framework/graph/repositories/case_repository.py +179 -0
  47. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/cycle_repository.py +9 -1
  48. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/nexus_repository.py +3 -2
  49. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/node_repository.py +70 -14
  50. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/perspective_repository.py +94 -0
  51. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/transformation_repository.py +1 -1
  52. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/wheel_repository.py +132 -7
  53. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/settings.py +132 -4
  54. dialectical_framework-1.9.2/src/dialectical_framework/utils/__init__.py +0 -0
  55. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/call_census.py +8 -0
  56. dialectical_framework-1.9.2/src/dialectical_framework/utils/edge_context.py +201 -0
  57. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/progress.py +68 -0
  58. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/thinking_compat.py +1 -1
  59. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/use_brain.py +45 -3
  60. dialectical_framework-1.8.1/src/dialectical_framework/agents/advisor/advisor.py +0 -890
  61. dialectical_framework-1.8.1/src/dialectical_framework/agents/app_spec.py +0 -119
  62. dialectical_framework-1.8.1/src/dialectical_framework/agents/turn_timing.py +0 -206
  63. dialectical_framework-1.8.1/src/dialectical_framework/graph/repositories/case_repository.py +0 -101
  64. dialectical_framework-1.8.1/src/dialectical_framework/utils/edge_context.py +0 -54
  65. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/LICENSE +0 -0
  66. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/PATENTS +0 -0
  67. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/__init__.py +0 -0
  68. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/__init__.py +0 -0
  69. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
  70. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
  71. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
  72. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/deepen.py +0 -0
  73. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
  74. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/agent_context.py +0 -0
  75. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
  76. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
  77. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
  78. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
  79. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
  80. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
  81. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
  82. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
  83. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
  84. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
  85. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/execution_report.py +0 -0
  86. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
  87. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
  88. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
  89. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
  90. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
  91. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
  92. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
  93. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
  94. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
  95. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
  96. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
  97. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/audit_feasibility.py +0 -0
  98. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
  99. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
  100. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
  101. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
  102. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
  103. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
  104. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
  105. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
  106. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
  107. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/agents/toolsets.py +0 -0
  108. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/__init__.py +0 -0
  109. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/add_input.py +0 -0
  110. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
  111. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
  112. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
  113. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
  114. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
  115. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
  116. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
  117. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
  118. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/build_status.py +0 -0
  119. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
  120. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
  121. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
  122. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
  123. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
  124. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
  125. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
  126. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
  127. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
  128. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
  129. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
  130. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
  131. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/create_nexus.py +0 -0
  132. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/decision_coherence_check.py +0 -0
  133. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
  134. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/discard.py +0 -0
  135. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
  136. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
  137. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
  138. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
  139. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/source_digest.py +0 -0
  140. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/statement_classification.py +0 -0
  141. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
  142. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/statement_headline.py +0 -0
  143. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/concerns/statement_placement.py +0 -0
  144. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/dialectical_reasoning.py +0 -0
  145. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/enums/__init__.py +0 -0
  146. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/enums/causality_preset.py +0 -0
  147. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/enums/di.py +0 -0
  148. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/events/__init__.py +0 -0
  149. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/events/graph_event.py +0 -0
  150. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/events/graph_event_bus.py +0 -0
  151. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/events/progress_event.py +0 -0
  152. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/exceptions/__init__.py +0 -0
  153. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/exceptions/node_errors.py +0 -0
  154. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
  155. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/__init__.py +0 -0
  156. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
  157. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
  158. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/estimation_manager.py +0 -0
  159. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
  160. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
  161. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
  162. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
  163. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
  164. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
  165. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
  166. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
  167. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/input.py +0 -0
  168. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
  169. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
  170. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
  171. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
  172. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/statement.py +0 -0
  173. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
  174. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
  175. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
  176. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
  177. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
  178. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
  179. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
  180. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
  181. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
  182. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
  183. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
  184. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/grounded_in_relationship.py +0 -0
  185. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
  186. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
  187. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
  188. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
  189. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
  190. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
  191. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
  192. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
  193. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
  194. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
  195. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
  196. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
  197. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
  198. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/decision_repository.py +0 -0
  199. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
  200. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
  201. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
  202. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
  203. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/scope_context.py +0 -0
  204. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
  205. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/wheel_segment.py +0 -0
  206. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
  207. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/protocols/__init__.py +0 -0
  208. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/protocols/has_config.py +0 -0
  209. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/protocols/input_resolver.py +0 -0
  210. /dialectical_framework-1.8.1/src/dialectical_framework/utils/__init__.py → /dialectical_framework-1.9.2/src/dialectical_framework/py.typed +0 -0
  211. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/async_drain.py +0 -0
  212. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
  213. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/chunking.py +0 -0
  214. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/concurrency.py +0 -0
  215. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/dc_replace.py +0 -0
  216. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
  217. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/effect_logger.py +0 -0
  218. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/input_context.py +0 -0
  219. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/order_transitions.py +0 -0
  220. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/retry_accounting.py +0 -0
  221. {dialectical_framework-1.8.1 → dialectical_framework-1.9.2}/src/dialectical_framework/utils/sequence_generation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dialectical-framework
3
- Version: 1.8.1
3
+ Version: 1.9.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
@@ -57,7 +57,9 @@ And the synthesis is *earned*, not asserted. Where "think step by step" leaves r
57
57
 
58
58
  ## How It Works
59
59
 
60
- 1. **Input** — text, URLs, or raw ideas from any domain
60
+ 1. **Input** — text or raw ideas from any domain (URLs, uploads and other sources
61
+ once you supply an [`InputResolver`](docs/graph.md#input-resolution) — the default
62
+ fetches nothing)
61
63
  2. **Analysis** — extract the theses, find each one's true antithesis, develop the four aspects (T+, T-, A+, A-) that say where each side helps and where it overreaches
62
64
  3. **Graph curation** — commit every insight as content-addressed, rule-validated nodes and edges — nothing is stored until it holds up
63
65
  4. **Exploration** — combine perspectives into Cycles, arrange them into Wheels, and trace the Transformations whose circular causality yields synthesis
@@ -82,6 +84,9 @@ An **agent** is the entry point — a thin LLM orchestrator that manages a conve
82
84
  - [Agents: Analyst, Explorer, Advisor](docs/agents.md) — the building blocks, their tools, and the UX to build around them
83
85
  - [Graph Data Model](docs/graph.md)
84
86
  - [Scoring & Metrics](docs/scoring.md)
87
+ - Runnable: [examples/advisor_chat.py](examples/advisor_chat.py) (console chat),
88
+ [notebooks/minds.ipynb](notebooks/minds.ipynb) and
89
+ [notebooks/seasons.ipynb](notebooks/seasons.ipynb) (building an app with `AppSpec`)
85
90
 
86
91
  ## Why a Reasoning Graph
87
92
 
@@ -124,11 +129,12 @@ Wherever the answer is a tension rather than a fact, this drops in as the reason
124
129
 
125
130
  - **Analyst** — turns raw material into structured tensions, up to grouping them into a Nexus (Case-scoped).
126
131
  - **Explorer** — takes one Nexus and works out its causal pathways and synthesis (Nexus-scoped).
127
- - **Advisor** — runs the whole machine silently and returns pure counsel, with no framework vocabulary exposed (Case-scoped).
132
+ - **Advisor** — runs the whole machine silently and returns pure counsel, with no framework vocabulary exposed (Case-scoped). Its **Consultant** mode (`Advisor(mode=AdvisorMode.CONSULTANT)`) is the same head over a graph that already exists: it reads, records decisions, and never builds — the fast surface for a return visit.
128
133
 
129
134
  Analyst + Explorer are the structure-forward "graph navigator" experience; the Advisor is a chat-only product over the same graph. See [docs/agents.md](docs/agents.md) for full specs, tool lists, and the UX to build around each.
130
135
 
131
136
  ```python
137
+ import asyncio
132
138
  from contextlib import aclosing
133
139
 
134
140
  from dialectical_framework.dialectical_reasoning import DialecticalReasoning
@@ -136,26 +142,53 @@ from dialectical_framework.settings import Settings
136
142
  from dialectical_framework.graph.nodes.case import Case
137
143
  from dialectical_framework.graph.scope_context import scope
138
144
  from dialectical_framework.agents.advisor.advisor import Advisor
139
-
140
- # Initialize once
141
- DialecticalReasoning.setup(Settings.from_env())
142
-
143
- # A Case owns the scope id (sid); all graph writes are sid-scoped.
144
- case = Case(); case.commit()
145
-
146
- with scope(case.sid):
147
- advisor = Advisor(app_preamble="You are a systems thinking coach...")
148
- # `aclosing` because a host that stops early must CLOSE the generator — that
149
- # is what releases the provider connection and records the turn's seconds.
150
- # See docs/agents.md.
151
- async with aclosing(
152
- advisor.chat_stream("Analyze the tension between growth and sustainability")
153
- ) as events:
154
- async for event in events:
155
- # ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
156
- handle(event)
145
+ from dialectical_framework.agents.stream_events import TextDelta
146
+
147
+
148
+ async def main():
149
+ # Initialize once
150
+ DialecticalReasoning.setup(Settings.from_env())
151
+
152
+ # A Case owns the scope id (sid); all graph writes are sid-scoped.
153
+ case = Case(); case.commit()
154
+
155
+ with scope(case.sid):
156
+ # `principal="human"` because a real person is on the other end: it is
157
+ # what lets a decision they confirm be recorded as THEIR confirmation.
158
+ # The default attests nobody — see docs/agents.md.
159
+ advisor = Advisor(
160
+ app_preamble="You are a systems thinking coach...", principal="human"
161
+ )
162
+ # `aclosing` because a host that stops MID-TURN must CLOSE the generator
163
+ # — that is what releases the provider connection and records the turn's
164
+ # seconds. Breaking on `ResponseComplete` needs none of it: that event is
165
+ # yielded after the turn's closing work. See docs/agents.md.
166
+ async with aclosing(
167
+ advisor.chat_stream("Analyze the tension between growth and sustainability")
168
+ ) as events:
169
+ async for event in events:
170
+ # ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
171
+ if isinstance(event, TextDelta):
172
+ print(event.text, end="", flush=True)
173
+
174
+ # Once, after the last turn: the Advisor weaves a decision's pathway off
175
+ # the turn, and this is where that finishes. See docs/agents.md.
176
+ await advisor.wait_for_deferred_work()
177
+
178
+
179
+ asyncio.run(main())
157
180
  ```
158
181
 
182
+ Runnable versions of the above:
183
+
184
+ - **[examples/advisor_chat.py](examples/advisor_chat.py)** — a console chat, and the
185
+ smallest program in which all five host obligations are load-bearing (`poetry run
186
+ python examples/advisor_chat.py`).
187
+ - **[notebooks/minds.ipynb](notebooks/minds.ipynb)** — plugging your own domain in
188
+ with a single declarative `AppSpec`.
189
+ - **[notebooks/seasons.ipynb](notebooks/seasons.ipynb)** — one `AppSpec` across every
190
+ agent head (Analyst, Explorer, Advisor, and the advisory toggle).
191
+
159
192
  ## Setup
160
193
 
161
194
  ### Requirements
@@ -166,11 +199,29 @@ with scope(case.sid):
166
199
 
167
200
  ### Install
168
201
 
202
+ Into your own application:
203
+
204
+ ```bash
205
+ pip install dialectical-framework
206
+ ```
207
+
208
+ To work on the framework itself:
209
+
169
210
  ```bash
170
211
  poetry install
212
+ ```
213
+
214
+ Either way, configuration comes from the environment:
215
+
216
+ ```bash
171
217
  cp .env.example .env # then fill in the values (see .env.example for details)
172
218
  ```
173
219
 
220
+ `DIALEXITY_DEFAULT_MODEL` is the only variable the framework itself requires (plus
221
+ whatever credentials your provider's SDK reads). Everything else is commented out in
222
+ `.env.example`, where each commented value **is** the code default — so the graph
223
+ connection works as-is against Memgraph on `127.0.0.1:7687`.
224
+
174
225
  ### Run Tests
175
226
 
176
227
  ```bash
@@ -16,7 +16,9 @@ And the synthesis is *earned*, not asserted. Where "think step by step" leaves r
16
16
 
17
17
  ## How It Works
18
18
 
19
- 1. **Input** — text, URLs, or raw ideas from any domain
19
+ 1. **Input** — text or raw ideas from any domain (URLs, uploads and other sources
20
+ once you supply an [`InputResolver`](docs/graph.md#input-resolution) — the default
21
+ fetches nothing)
20
22
  2. **Analysis** — extract the theses, find each one's true antithesis, develop the four aspects (T+, T-, A+, A-) that say where each side helps and where it overreaches
21
23
  3. **Graph curation** — commit every insight as content-addressed, rule-validated nodes and edges — nothing is stored until it holds up
22
24
  4. **Exploration** — combine perspectives into Cycles, arrange them into Wheels, and trace the Transformations whose circular causality yields synthesis
@@ -41,6 +43,9 @@ An **agent** is the entry point — a thin LLM orchestrator that manages a conve
41
43
  - [Agents: Analyst, Explorer, Advisor](docs/agents.md) — the building blocks, their tools, and the UX to build around them
42
44
  - [Graph Data Model](docs/graph.md)
43
45
  - [Scoring & Metrics](docs/scoring.md)
46
+ - Runnable: [examples/advisor_chat.py](examples/advisor_chat.py) (console chat),
47
+ [notebooks/minds.ipynb](notebooks/minds.ipynb) and
48
+ [notebooks/seasons.ipynb](notebooks/seasons.ipynb) (building an app with `AppSpec`)
44
49
 
45
50
  ## Why a Reasoning Graph
46
51
 
@@ -83,11 +88,12 @@ Wherever the answer is a tension rather than a fact, this drops in as the reason
83
88
 
84
89
  - **Analyst** — turns raw material into structured tensions, up to grouping them into a Nexus (Case-scoped).
85
90
  - **Explorer** — takes one Nexus and works out its causal pathways and synthesis (Nexus-scoped).
86
- - **Advisor** — runs the whole machine silently and returns pure counsel, with no framework vocabulary exposed (Case-scoped).
91
+ - **Advisor** — runs the whole machine silently and returns pure counsel, with no framework vocabulary exposed (Case-scoped). Its **Consultant** mode (`Advisor(mode=AdvisorMode.CONSULTANT)`) is the same head over a graph that already exists: it reads, records decisions, and never builds — the fast surface for a return visit.
87
92
 
88
93
  Analyst + Explorer are the structure-forward "graph navigator" experience; the Advisor is a chat-only product over the same graph. See [docs/agents.md](docs/agents.md) for full specs, tool lists, and the UX to build around each.
89
94
 
90
95
  ```python
96
+ import asyncio
91
97
  from contextlib import aclosing
92
98
 
93
99
  from dialectical_framework.dialectical_reasoning import DialecticalReasoning
@@ -95,26 +101,53 @@ from dialectical_framework.settings import Settings
95
101
  from dialectical_framework.graph.nodes.case import Case
96
102
  from dialectical_framework.graph.scope_context import scope
97
103
  from dialectical_framework.agents.advisor.advisor import Advisor
98
-
99
- # Initialize once
100
- DialecticalReasoning.setup(Settings.from_env())
101
-
102
- # A Case owns the scope id (sid); all graph writes are sid-scoped.
103
- case = Case(); case.commit()
104
-
105
- with scope(case.sid):
106
- advisor = Advisor(app_preamble="You are a systems thinking coach...")
107
- # `aclosing` because a host that stops early must CLOSE the generator — that
108
- # is what releases the provider connection and records the turn's seconds.
109
- # See docs/agents.md.
110
- async with aclosing(
111
- advisor.chat_stream("Analyze the tension between growth and sustainability")
112
- ) as events:
113
- async for event in events:
114
- # ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
115
- handle(event)
104
+ from dialectical_framework.agents.stream_events import TextDelta
105
+
106
+
107
+ async def main():
108
+ # Initialize once
109
+ DialecticalReasoning.setup(Settings.from_env())
110
+
111
+ # A Case owns the scope id (sid); all graph writes are sid-scoped.
112
+ case = Case(); case.commit()
113
+
114
+ with scope(case.sid):
115
+ # `principal="human"` because a real person is on the other end: it is
116
+ # what lets a decision they confirm be recorded as THEIR confirmation.
117
+ # The default attests nobody — see docs/agents.md.
118
+ advisor = Advisor(
119
+ app_preamble="You are a systems thinking coach...", principal="human"
120
+ )
121
+ # `aclosing` because a host that stops MID-TURN must CLOSE the generator
122
+ # — that is what releases the provider connection and records the turn's
123
+ # seconds. Breaking on `ResponseComplete` needs none of it: that event is
124
+ # yielded after the turn's closing work. See docs/agents.md.
125
+ async with aclosing(
126
+ advisor.chat_stream("Analyze the tension between growth and sustainability")
127
+ ) as events:
128
+ async for event in events:
129
+ # ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
130
+ if isinstance(event, TextDelta):
131
+ print(event.text, end="", flush=True)
132
+
133
+ # Once, after the last turn: the Advisor weaves a decision's pathway off
134
+ # the turn, and this is where that finishes. See docs/agents.md.
135
+ await advisor.wait_for_deferred_work()
136
+
137
+
138
+ asyncio.run(main())
116
139
  ```
117
140
 
141
+ Runnable versions of the above:
142
+
143
+ - **[examples/advisor_chat.py](examples/advisor_chat.py)** — a console chat, and the
144
+ smallest program in which all five host obligations are load-bearing (`poetry run
145
+ python examples/advisor_chat.py`).
146
+ - **[notebooks/minds.ipynb](notebooks/minds.ipynb)** — plugging your own domain in
147
+ with a single declarative `AppSpec`.
148
+ - **[notebooks/seasons.ipynb](notebooks/seasons.ipynb)** — one `AppSpec` across every
149
+ agent head (Analyst, Explorer, Advisor, and the advisory toggle).
150
+
118
151
  ## Setup
119
152
 
120
153
  ### Requirements
@@ -125,11 +158,29 @@ with scope(case.sid):
125
158
 
126
159
  ### Install
127
160
 
161
+ Into your own application:
162
+
163
+ ```bash
164
+ pip install dialectical-framework
165
+ ```
166
+
167
+ To work on the framework itself:
168
+
128
169
  ```bash
129
170
  poetry install
171
+ ```
172
+
173
+ Either way, configuration comes from the environment:
174
+
175
+ ```bash
130
176
  cp .env.example .env # then fill in the values (see .env.example for details)
131
177
  ```
132
178
 
179
+ `DIALEXITY_DEFAULT_MODEL` is the only variable the framework itself requires (plus
180
+ whatever credentials your provider's SDK reads). Everything else is commented out in
181
+ `.env.example`, where each commented value **is** the code default — so the graph
182
+ connection works as-is against Memgraph on `127.0.0.1:7687`.
183
+
133
184
  ### Run Tests
134
185
 
135
186
  ```bash
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "dialectical-framework"
3
- version = "1.8.1"
3
+ version = "1.9.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"