dialectical-framework 1.6.7__tar.gz → 1.6.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.
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/PKG-INFO +1 -1
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/pyproject.toml +1 -1
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/advisor.py +29 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/analyst.py +17 -2
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/system_prompts.py +10 -0
- dialectical_framework-1.6.8/src/dialectical_framework/agents/app_spec.py +119 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/apps.py +6 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/explorer.py +15 -1
- dialectical_framework-1.6.8/src/dialectical_framework/agents/toolsets.py +33 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/LICENSE +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/PATENTS +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/README.md +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/system_prompts.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/deepen.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/explore.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/scoped.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/advisor/tools/sync.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/agent_context.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/execution_report.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/stream_events.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/action_extraction.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/add_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/create_nexus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/dialectical_context.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/discard.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/source_digest.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/statement_classification.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/statement_headline.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/statement_placement.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/dialectical_reasoning.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/enums/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/enums/causality_preset.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/enums/di.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/events/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/events/graph_event.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/events/graph_event_bus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/exceptions/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/exceptions/node_errors.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/estimation_manager.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/case.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/input.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/statement.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/transition.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationship_manager.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/rendering.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/scope_context.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/wheel_segment.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/protocols/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/protocols/has_config.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/protocols/input_resolver.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/settings.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/__init__.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/concurrency.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/dc_replace.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/edge_context.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/effect_logger.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/input_context.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/order_transitions.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/utils/sequence_generation.py +0 -0
- {dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/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.6.
|
|
3
|
+
Version: 1.6.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 = "1.6.
|
|
3
|
+
version = "1.6.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"
|
|
@@ -22,7 +22,9 @@ from dialectical_framework.agents.advisor.system_prompts import \
|
|
|
22
22
|
from dialectical_framework.agents.agent_context import agent_scope
|
|
23
23
|
from dialectical_framework.agents.conversation_facilitator import \
|
|
24
24
|
ConversationFacilitator
|
|
25
|
+
from dialectical_framework.agents.app_spec import AppSpec, resolve_app_layer
|
|
25
26
|
from dialectical_framework.agents.stream_events import StreamEvent
|
|
27
|
+
from dialectical_framework.agents.toolsets import merge_app_tools
|
|
26
28
|
|
|
27
29
|
logger = logging.getLogger(__name__)
|
|
28
30
|
|
|
@@ -69,6 +71,18 @@ class Advisor:
|
|
|
69
71
|
advisor = Advisor(app_preamble=COUNSELOR_APP, messages=saved_messages)
|
|
70
72
|
response = await advisor.chat("What about the other angle?")
|
|
71
73
|
|
|
74
|
+
Usage (app-provided domain tools):
|
|
75
|
+
# The app brings field knowledge two ways: prose in the preamble,
|
|
76
|
+
# and callable resources as app @llm.tool functions. The engine
|
|
77
|
+
# prompt carries no docs for app tools (their tool-schema docstrings
|
|
78
|
+
# travel to the LLM automatically) — introduce them and their usage
|
|
79
|
+
# rules in the app preamble, where domain vocabulary lives.
|
|
80
|
+
with scope(case.sid):
|
|
81
|
+
advisor = Advisor(
|
|
82
|
+
app_preamble=ASTRO_COUNSELOR_APP, # explains when to consult the chart
|
|
83
|
+
app_tools=[lookup_natal_chart], # @llm.tool from the app
|
|
84
|
+
)
|
|
85
|
+
|
|
72
86
|
Usage (Advisor mode of an exploration session — Explorer handover):
|
|
73
87
|
# User was chatting in Explorer (operator mode) and asks "what does
|
|
74
88
|
# this all mean for me?" — the host toggles to counsel mode by
|
|
@@ -104,13 +118,28 @@ class Advisor:
|
|
|
104
118
|
dialectical_context: Optional[str] = None,
|
|
105
119
|
messages: Optional[list] = None,
|
|
106
120
|
nexus_hash: Optional[str] = None,
|
|
121
|
+
app_tools: Optional[list] = None,
|
|
122
|
+
app: Optional[AppSpec] = None,
|
|
107
123
|
) -> None:
|
|
108
124
|
self._nexus_hash = nexus_hash
|
|
125
|
+
# app: declarative app definition — composition depends on the mode:
|
|
126
|
+
# counsel toggle (nexus_hash set) keeps the Navigator contract
|
|
127
|
+
# (EXPLORATION_ADVISOR_APP + voicing + tool_guide); standalone uses
|
|
128
|
+
# the spec's advisor_persona (machinery hidden). See AppSpec.
|
|
129
|
+
app_preamble, app_tools = resolve_app_layer(
|
|
130
|
+
app,
|
|
131
|
+
app_preamble,
|
|
132
|
+
app_tools,
|
|
133
|
+
preamble_for="advisor_scoped" if nexus_hash else "advisor_unscoped",
|
|
134
|
+
)
|
|
109
135
|
if nexus_hash:
|
|
110
136
|
self._validate_nexus(nexus_hash)
|
|
111
137
|
self._tools = _build_scoped_tools(nexus_hash)
|
|
112
138
|
else:
|
|
113
139
|
self._tools = _build_tools()
|
|
140
|
+
# App-provided @llm.tool functions (domain resources: chart lookups,
|
|
141
|
+
# methodology references, ...) — see toolsets.merge_app_tools.
|
|
142
|
+
self._tools = merge_app_tools(self._tools, app_tools)
|
|
114
143
|
self._conversation = ConversationFacilitator(tools=self._tools)
|
|
115
144
|
if messages:
|
|
116
145
|
self._conversation._messages = list(messages)
|
|
@@ -20,7 +20,9 @@ from dialectical_framework.agents.analyst.system_prompts import SYSTEM_PROMPT
|
|
|
20
20
|
from dialectical_framework.agents.conversation_facilitator import \
|
|
21
21
|
ConversationFacilitator
|
|
22
22
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
23
|
+
from dialectical_framework.agents.app_spec import AppSpec, resolve_app_layer
|
|
23
24
|
from dialectical_framework.agents.stream_events import StreamEvent
|
|
25
|
+
from dialectical_framework.agents.toolsets import merge_app_tools
|
|
24
26
|
|
|
25
27
|
if TYPE_CHECKING:
|
|
26
28
|
pass
|
|
@@ -48,13 +50,17 @@ class Analyst:
|
|
|
48
50
|
|
|
49
51
|
Usage:
|
|
50
52
|
with scope(case.sid):
|
|
51
|
-
analyst = Analyst(
|
|
53
|
+
analyst = Analyst(app=MY_APP_SPEC) # declarative (see AppSpec)
|
|
52
54
|
response = await analyst.chat("I'm struggling with work-life balance")
|
|
53
55
|
|
|
54
56
|
# Resuming with history:
|
|
55
57
|
with scope(case.sid):
|
|
56
58
|
analyst = Analyst(messages=loaded_messages)
|
|
57
59
|
response = await analyst.chat("What about the second tension?")
|
|
60
|
+
|
|
61
|
+
# Manual preamble control (app_preamble replaces AppSpec composition):
|
|
62
|
+
with scope(case.sid):
|
|
63
|
+
analyst = Analyst(app_preamble="You are a counselor...")
|
|
58
64
|
"""
|
|
59
65
|
|
|
60
66
|
AGENT_NAME = "analyst"
|
|
@@ -63,8 +69,17 @@ class Analyst:
|
|
|
63
69
|
self,
|
|
64
70
|
app_preamble: Optional[str] = None,
|
|
65
71
|
messages: Optional[list] = None,
|
|
72
|
+
app_tools: Optional[list] = None,
|
|
73
|
+
app: Optional[AppSpec] = None,
|
|
66
74
|
) -> None:
|
|
67
|
-
|
|
75
|
+
# app: declarative app definition — the framework composes the
|
|
76
|
+
# Navigator preamble (NAVIGATOR_APP + voicing + tool_guide) and tool
|
|
77
|
+
# set from it. app_preamble/app_tools remain for manual control;
|
|
78
|
+
# mixing them with app= raises (see app_spec.resolve_app_layer).
|
|
79
|
+
app_preamble, app_tools = resolve_app_layer(
|
|
80
|
+
app, app_preamble, app_tools, preamble_for="navigator"
|
|
81
|
+
)
|
|
82
|
+
self._tools = merge_app_tools(_build_tools(), app_tools)
|
|
68
83
|
self._conversation = ConversationFacilitator(tools=self._tools)
|
|
69
84
|
if messages:
|
|
70
85
|
self._conversation._messages = list(messages)
|
|
@@ -130,6 +130,16 @@ the user wants it fixed; absent = not validated (neutral). Communicate the
|
|
|
130
130
|
verdict as meaning ("this one held up under the coherence check"), not as a
|
|
131
131
|
flag name.
|
|
132
132
|
|
|
133
|
+
Validation also scores `DV` (dialectical validity) — how NATURAL the
|
|
134
|
+
tension's dynamics are, separate from coherence: high DV means the poles
|
|
135
|
+
genuinely complement each other and the pathologies arise organically; low
|
|
136
|
+
DV means the framing itself is forced or one-sided even if it reads
|
|
137
|
+
coherently. A low-DV tension is better re-framed (`edit_perspective` or
|
|
138
|
+
discard-and-re-anchor) than polished aspect-by-aspect — the distortion sits
|
|
139
|
+
in the T/A framing, not the aspects. Note: counsel mode prunes very-low-DV
|
|
140
|
+
tensions from its working view, so a framing you keep here may be absent
|
|
141
|
+
there — re-framing it fixes both.
|
|
142
|
+
|
|
133
143
|
## Exploration Setup (Nexus)
|
|
134
144
|
|
|
135
145
|
"Nexus" is the internal name for what the user calls an **Exploration** — same
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AppSpec: declarative app definition — the host describes WHAT its app is,
|
|
3
|
+
each agent head composes the right preamble from it.
|
|
4
|
+
|
|
5
|
+
Without this, an app developer must know framework lore to preamble an app:
|
|
6
|
+
which base constant belongs to which head (NAVIGATOR_APP for Analyst/Explorer,
|
|
7
|
+
EXPLORATION_ADVISOR_APP for the counsel toggle, bare persona for a standalone
|
|
8
|
+
Advisor), that later preamble sections override earlier ones, and that the
|
|
9
|
+
same tool guide must be repeated into every head's preamble. AppSpec owns
|
|
10
|
+
that lore: the app supplies only its custom pieces, the framework supplies
|
|
11
|
+
the generic contract.
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
ASTRO_APP = AppSpec(
|
|
15
|
+
voicing=\"\"\"## Astrological Voicing
|
|
16
|
+
Phrase oppositions in elemental and zodiacal terms where natural...\"\"\",
|
|
17
|
+
advisor_persona=\"\"\"## Persona
|
|
18
|
+
You are a wise astrologer. The person seeks counsel through their chart...\"\"\",
|
|
19
|
+
tool_guide=\"\"\"## Chart Resources
|
|
20
|
+
- lookup_natal_chart(person): fetch a natal chart. Use when...\"\"\",
|
|
21
|
+
tools=[lookup_natal_chart],
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
Analyst(app=ASTRO_APP)
|
|
25
|
+
Explorer(nexus_hash=nx, messages=msgs, app=ASTRO_APP)
|
|
26
|
+
Advisor(nexus_hash=nx, messages=msgs, app=ASTRO_APP) # counsel toggle
|
|
27
|
+
Advisor(app=ASTRO_APP) # standalone advisor
|
|
28
|
+
|
|
29
|
+
Every field is optional — an AppSpec with only `voicing` is a pure
|
|
30
|
+
re-skinning of the Navigator; one with only `tools` + `tool_guide` adds
|
|
31
|
+
domain resources without touching voice. The low-level `app_preamble` /
|
|
32
|
+
`app_tools` constructor params remain for full manual control; passing
|
|
33
|
+
both `app` and either of them raises (ambiguous composition).
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
from dataclasses import dataclass, field
|
|
39
|
+
from typing import Optional
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass(frozen=True)
|
|
43
|
+
class AppSpec:
|
|
44
|
+
"""Declarative definition of a host app, composed per agent head.
|
|
45
|
+
|
|
46
|
+
voicing: Domain flavor layered on the Navigator user contract
|
|
47
|
+
(Analyst/Explorer and the counsel toggle). Vocabulary direction,
|
|
48
|
+
framing, domain emphasis — NOT tool docs, NOT persona for the
|
|
49
|
+
standalone Advisor.
|
|
50
|
+
advisor_persona: Persona for the STANDALONE (unscoped) Advisor, where
|
|
51
|
+
the machinery is hidden and the preamble is the entire user-facing
|
|
52
|
+
identity (like COUNSELOR_APP). Ignored in counsel-toggle mode,
|
|
53
|
+
which keeps the Navigator contract.
|
|
54
|
+
tool_guide: Shared documentation for the app's tools — what each does,
|
|
55
|
+
when to reach for it. Included verbatim in EVERY head's preamble
|
|
56
|
+
so the usage rules cannot drift between heads. How tool use
|
|
57
|
+
SURFACES to the user still follows each head's disclosure rules.
|
|
58
|
+
tools: App-provided @llm.tool functions, passed to every head
|
|
59
|
+
(see toolsets.merge_app_tools).
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
voicing: Optional[str] = None
|
|
63
|
+
advisor_persona: Optional[str] = None
|
|
64
|
+
tool_guide: Optional[str] = None
|
|
65
|
+
tools: list = field(default_factory=list)
|
|
66
|
+
|
|
67
|
+
def navigator_preamble(self, advanced: bool = False) -> str:
|
|
68
|
+
"""Preamble for Analyst/Explorer heads: Navigator contract + app pieces."""
|
|
69
|
+
from dialectical_framework.agents.apps import (
|
|
70
|
+
NAVIGATOR_ADVANCED_MODE_APP, NAVIGATOR_APP)
|
|
71
|
+
|
|
72
|
+
base = NAVIGATOR_ADVANCED_MODE_APP if advanced else NAVIGATOR_APP
|
|
73
|
+
return _join(base, self.voicing, self.tool_guide)
|
|
74
|
+
|
|
75
|
+
def advisor_preamble(self, scoped: bool) -> str:
|
|
76
|
+
"""Preamble for the Advisor head.
|
|
77
|
+
|
|
78
|
+
scoped=True (counsel toggle of a Navigator session): the Navigator
|
|
79
|
+
contract survives the toggle — EXPLORATION_ADVISOR_APP + app pieces.
|
|
80
|
+
scoped=False (standalone Advisor): the persona IS the identity —
|
|
81
|
+
no Navigator base, machinery stays hidden.
|
|
82
|
+
"""
|
|
83
|
+
from dialectical_framework.agents.apps import EXPLORATION_ADVISOR_APP
|
|
84
|
+
|
|
85
|
+
if scoped:
|
|
86
|
+
return _join(EXPLORATION_ADVISOR_APP, self.voicing, self.tool_guide)
|
|
87
|
+
return _join(self.advisor_persona, self.tool_guide)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _join(*parts: Optional[str]) -> str:
|
|
91
|
+
return "\n\n".join(p.strip() for p in parts if p and p.strip())
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def resolve_app_layer(
|
|
95
|
+
app: Optional[AppSpec],
|
|
96
|
+
app_preamble: Optional[str],
|
|
97
|
+
app_tools: Optional[list],
|
|
98
|
+
preamble_for: str, # "navigator" | "advisor_scoped" | "advisor_unscoped"
|
|
99
|
+
) -> tuple[Optional[str], Optional[list]]:
|
|
100
|
+
"""Resolve the (preamble, tools) pair from either an AppSpec or the
|
|
101
|
+
low-level params. Mixing both raises — composition would be ambiguous
|
|
102
|
+
(does app_preamble replace the spec's derived preamble or stack on it?).
|
|
103
|
+
"""
|
|
104
|
+
if app is None:
|
|
105
|
+
return app_preamble, app_tools
|
|
106
|
+
if app_preamble is not None or app_tools is not None:
|
|
107
|
+
raise ValueError(
|
|
108
|
+
"Pass either app= (declarative) or app_preamble=/app_tools= "
|
|
109
|
+
"(manual), not both."
|
|
110
|
+
)
|
|
111
|
+
if preamble_for == "navigator":
|
|
112
|
+
preamble = app.navigator_preamble()
|
|
113
|
+
elif preamble_for == "advisor_scoped":
|
|
114
|
+
preamble = app.advisor_preamble(scoped=True)
|
|
115
|
+
elif preamble_for == "advisor_unscoped":
|
|
116
|
+
preamble = app.advisor_preamble(scoped=False)
|
|
117
|
+
else:
|
|
118
|
+
raise ValueError(f"Unknown preamble_for: {preamble_for}")
|
|
119
|
+
return preamble or None, app.tools or None
|
{dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/agents/apps.py
RENAMED
|
@@ -19,6 +19,12 @@ There are two territories:
|
|
|
19
19
|
Apps define HOW the agents communicate — vocabulary, depth, framing, persona.
|
|
20
20
|
They are injected by the host application at agent construction time.
|
|
21
21
|
|
|
22
|
+
The recommended host interface is `AppSpec` (agents/app_spec.py): the app
|
|
23
|
+
declares its custom pieces (voicing, advisor_persona, tool_guide, tools) and
|
|
24
|
+
each agent head composes the right base from THIS module itself — hosts never
|
|
25
|
+
concatenate these constants by hand. Direct `app_preamble=` passing remains
|
|
26
|
+
for full manual control.
|
|
27
|
+
|
|
22
28
|
Prompt Revision Methodology
|
|
23
29
|
===========================
|
|
24
30
|
When fixing LLM output bugs in these prompts, use /df-review-reasoning-layer for the
|
|
@@ -20,7 +20,9 @@ from dialectical_framework.agents.conversation_facilitator import \
|
|
|
20
20
|
ConversationFacilitator
|
|
21
21
|
from dialectical_framework.agents.explorer.system_prompts import system_prompt
|
|
22
22
|
from dialectical_framework.agents.reasonable_concern import ReasonableConcern
|
|
23
|
+
from dialectical_framework.agents.app_spec import AppSpec, resolve_app_layer
|
|
23
24
|
from dialectical_framework.agents.stream_events import StreamEvent
|
|
25
|
+
from dialectical_framework.agents.toolsets import merge_app_tools
|
|
24
26
|
from dialectical_framework.graph.repositories.nexus_repository import \
|
|
25
27
|
NexusRepository
|
|
26
28
|
|
|
@@ -66,9 +68,21 @@ class Explorer:
|
|
|
66
68
|
nexus_hash: str,
|
|
67
69
|
app_preamble: Optional[str] = None,
|
|
68
70
|
messages: Optional[list] = None,
|
|
71
|
+
app_tools: Optional[list] = None,
|
|
72
|
+
app: Optional[AppSpec] = None,
|
|
69
73
|
) -> None:
|
|
70
74
|
self._nexus_hash = nexus_hash
|
|
71
|
-
|
|
75
|
+
# app: declarative app definition (Navigator base + voicing +
|
|
76
|
+
# tool_guide + tools) — see AppSpec. Pass the SAME AppSpec to every
|
|
77
|
+
# head (Analyst, Explorer, Advisor): the Explorer<->Advisor toggle
|
|
78
|
+
# shares literal history (a missing tool breaks capability
|
|
79
|
+
# mid-conversation), and the Analyst thread owes the user the same
|
|
80
|
+
# domain resources by parity. For advanced-mode preambles compose
|
|
81
|
+
# manually: app_preamble=my_app.navigator_preamble(advanced=True).
|
|
82
|
+
app_preamble, app_tools = resolve_app_layer(
|
|
83
|
+
app, app_preamble, app_tools, preamble_for="navigator"
|
|
84
|
+
)
|
|
85
|
+
self._tools = merge_app_tools(_build_tools(), app_tools)
|
|
72
86
|
self._conversation = ConversationFacilitator(tools=self._tools)
|
|
73
87
|
|
|
74
88
|
if messages:
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Shared helper for merging app-provided tools into an agent's built-in set.
|
|
3
|
+
|
|
4
|
+
All three conversational agents (Analyst, Explorer, Advisor) expose an
|
|
5
|
+
`app_tools` constructor parameter — the app-side seam for domain
|
|
6
|
+
resources (chart lookups, methodology references, knowledge-base fetches).
|
|
7
|
+
The merge rules are identical across agents, so they live here.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Optional
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def merge_app_tools(builtin: list, app_tools: Optional[list]) -> list:
|
|
16
|
+
"""Append app-provided @llm.tool functions to an agent's built-in set.
|
|
17
|
+
|
|
18
|
+
The agent's system prompt has no docs for app tools and skips unknown
|
|
19
|
+
names — apps describe them in the app preamble, where domain vocabulary
|
|
20
|
+
lives; the tool schemas (name, params, docstring) reach the LLM through
|
|
21
|
+
the tool protocol itself.
|
|
22
|
+
|
|
23
|
+
Raises:
|
|
24
|
+
ValueError: If an app tool shadows a built-in tool name — the app
|
|
25
|
+
tool would silently hijack framework machinery.
|
|
26
|
+
"""
|
|
27
|
+
if not app_tools:
|
|
28
|
+
return builtin
|
|
29
|
+
builtin_names = {t.__name__ for t in builtin}
|
|
30
|
+
collisions = [t.__name__ for t in app_tools if t.__name__ in builtin_names]
|
|
31
|
+
if collisions:
|
|
32
|
+
raise ValueError(f"app_tools shadow built-in tools: {collisions}")
|
|
33
|
+
return builtin + list(app_tools)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/enums/di.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-1.6.7 → dialectical_framework-1.6.8}/src/dialectical_framework/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|