attune-ai 2.0.2__tar.gz → 2.1.0__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.
- {attune_ai-2.0.2 → attune_ai-2.1.0}/CHANGELOG.md +7 -25
- {attune_ai-2.0.2 → attune_ai-2.1.0}/CONTRIBUTING.md +29 -25
- {attune_ai-2.0.2 → attune_ai-2.1.0}/PKG-INFO +187 -63
- {attune_ai-2.0.2 → attune_ai-2.1.0}/README.md +186 -62
- {attune_ai-2.0.2 → attune_ai-2.1.0}/SECURITY.md +4 -5
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/PKG-INFO +187 -63
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/SOURCES.txt +0 -19
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/README.md +3 -3
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/config.md +3 -3
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/core.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/empathy-os.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/index.md +3 -3
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/security-scanner.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/wizards.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/adaptive-learning-system.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/generated-plan-release-prep.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/sbar-clinical-handoff.md +3 -3
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/simple-chatbot.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/webhook-event-integration.md +6 -6
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/choose-your-path.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/first-steps.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/index.md +4 -4
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/installation.md +3 -3
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/mcp-integration.md +5 -5
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/getting-started/redis-setup.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/DISTRIBUTION_POLICY.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/MCP_PUBLISH_INSTRUCTIONS.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/MKDOCS_TUTORIAL.md +13 -13
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/RELEASE_PREPARATION.md +4 -4
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/WORKFLOW_PATTERNS.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/claude-memory-integration.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/five-levels-of-empathy.md +10 -10
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/foreword.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/how-to-read-this-book.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/pattern-catalog.md +2 -2
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/preface.md +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/signoz-integration.md +10 -10
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/teaching-ai-your-standards.md +4 -4
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/xml-enhanced-prompts.md +5 -5
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/index.md +4 -4
- {attune_ai-2.0.2 → attune_ai-2.1.0}/pyproject.toml +1 -1
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/perf_audit.py +11 -15
- attune_ai-2.0.2/docs/api-reference/memory 2.md +0 -305
- attune_ai-2.0.2/docs/api-reference/security-scanner 2.md +0 -859
- attune_ai-2.0.2/docs/api-reference/workflows 2.md +0 -406
- attune_ai-2.0.2/docs/getting-started/installation 2.md +0 -175
- attune_ai-2.0.2/docs/getting-started/mcp-integration 2.md +0 -140
- attune_ai-2.0.2/examples/adaptive_routing_workflow_demo 2.py +0 -157
- attune_ai-2.0.2/examples/agent_coordination_demo 2.py +0 -234
- attune_ai-2.0.2/examples/agent_tracking_demo 2.py +0 -169
- attune_ai-2.0.2/examples/approval_gates_demo 2.py +0 -365
- attune_ai-2.0.2/examples/coordinated_workflow_demo 2.py +0 -363
- attune_ai-2.0.2/examples/dashboard_demo 2.py +0 -227
- attune_ai-2.0.2/examples/event_streaming_demo 2.py +0 -318
- attune_ai-2.0.2/examples/feedback_loop_demo 2.py +0 -382
- attune_ai-2.0.2/examples/scanner_usage 2.py +0 -277
- attune_ai-2.0.2/examples/suggest_adaptive_routing 2.py +0 -153
- attune_ai-2.0.2/examples/test_approval_gates 2.py +0 -121
- attune_ai-2.0.2/examples/workflow_chaining_demo 2.py +0 -254
- attune_ai-2.0.2/src/.empathy/discovery_stats.json +0 -15
- attune_ai-2.0.2/src/attune/workflows/progressive/README 2.md +0 -454
- {attune_ai-2.0.2 → attune_ai-2.1.0}/.bandit +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/CODE_OF_CONDUCT.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/LICENSE +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/LICENSE_CHANGE_ANNOUNCEMENT.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/MANIFEST.in +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_B112.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_F541.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/dependency_links.txt +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/entry_points.txt +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/requires.txt +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_ai.egg-info/top_level.txt +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/clinical_protocol_monitor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/monitoring/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/monitoring/protocol_checker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/monitoring/protocol_loader.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/monitoring/sensor_parsers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_healthcare/monitors/monitoring/trajectory_analyzer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/autogen_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/crewai_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/haystack_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/langchain_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/langgraph_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/native.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/adapters/wizard_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/crews/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/crews/code_review.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/crews/health_check.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/crews/refactoring.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/crews/security_audit.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/decorators.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/factory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/framework.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/memory_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agent_factory/resilient.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agents_md/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agents_md/loader.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agents_md/parser.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/agents_md/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/claude_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/cli/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/cli/sync_claude.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/code_health.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/context.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/loader.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/models.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/parser.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/commands/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/config/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/config/unified.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/context/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/context/compaction.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/context/manager.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/contextual_patterns.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/git_pattern_extractor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/executor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/evaluate_session.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/first_time_init.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/pre_compact.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/session_end.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/session_start.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/hooks/scripts/suggest_compact.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/learning/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/learning/evaluator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/learning/extractor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/learning/storage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/levels.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/pattern_confidence.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/pattern_resolver.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/pattern_summary.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/providers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/routing/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/routing/model_router.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/IMPLEMENTATION_SUMMARY.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/PHASE2_COMPLETE.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/QUICK_REFERENCE.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/audit_logger.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/audit_logger_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/pii_scrubber.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/secrets_detector.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/secrets_detector_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/secure_memdocs.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/security/secure_memdocs_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/session_status.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/state.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/utils/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_llm/utils/tokens.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/SOFTWARE_PLUGIN_README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/cli/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/cli/inspect.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/attune_software/plugin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/llm-toolkit.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/memory.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/meta-orchestration.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/multi-agent.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/pattern-library.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/persistence.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/software-wizards.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/api-reference/workflows.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/examples/multi-agent-team-coordination.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/PUBLISHING.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/healthcare-wizards.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/multi-model-workflows.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/docs/guides/trust-circuit-breaker.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/WIZARD_DASHBOARD_IMPLEMENTATION.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/WIZARD_DASHBOARD_STATE_MANAGEMENT.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/WIZARD_DASHBOARD_WIREFRAMES.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/adaptive_routing_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/adaptive_routing_workflow_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/agent_coordination_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/agent_tracking_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/anthropic_patterns_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/anthropic_patterns_simple_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/approval_gates_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/claude_memory/README-SECURITY.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/claude_memory/enterprise-CLAUDE-secure.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/claude_memory/example-with-imports.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/claude_memory/project-CLAUDE.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/claude_memory/user-CLAUDE.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/complete-workflow/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/complete-workflow/workflow_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/config/empathy.config.example.yml +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/coordinated_workflow_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/dashboard_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_end_to_end_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_memory_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_meta_workflows.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_progressive_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_security_complete.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/demos/demo_test_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/domain_wizards/all_domain_wizards_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/domain_wizards/healthcare_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/domain_wizards/tests/test_healthcare_wizard.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/event_streaming_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/feedback_loop_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/hybrid_cli_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/interactive_team_creation.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/level_5_transformative/BLOG_POST.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/level_5_transformative/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/level_5_transformative/data/deployment_pipeline.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/level_5_transformative/data/healthcare_handoff_code.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/llm_toolkit_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/meta_orchestrator_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/multi_llm_usage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/orchestration/advanced_composition.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/orchestration/basic_usage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/orchestration/custom_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/progressive_test_gen_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/quickstart/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/quickstart.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/redis_exploration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/scanner_usage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/security_integration_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/SOCRATIC_DEMO.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/complete_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/config.yaml +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/dashboard_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/live_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/seo_agent.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/utils.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/seo_optimization/with_memory_backend.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/simple_usage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/smart_team_quickstart.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/sonnet_opus_fallback_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/suggest_adaptive_routing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/test_approval_gates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/test_debugging_wizard.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflow_chaining_demo.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflows/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflows/code_review_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflows/doc_gen_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflows/multi_model_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/examples/workflows/research_example.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/requirements.txt +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/setup.cfg +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/adaptive/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/adaptive/task_complexity.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/agent_monitoring.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/dependency_manager.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/hash_only.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/hybrid.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache/storage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache_monitor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cache_stats.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/__main__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/batch.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/cache.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/help.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/info.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/inspect.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/inspection.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/metrics.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/orchestrate.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/patterns.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/profiling.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/provider.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/routing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/setup.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/status.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/sync.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/tier.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/utilities.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/commands/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/batch.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/cache.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/help.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/info.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/inspect.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/metrics.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/orchestrate.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/patterns.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/provider.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/routing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/setup.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/status.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/sync.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/tier.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/parsers/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/utils/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/utils/data.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli/utils/helpers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli_legacy.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli_minimal.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli_router.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cli_unified.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/config/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/config/xml_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/coordination.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/core_modules/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/cost_tracker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/dashboard/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/dashboard/app.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/dashboard/simple_server.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/dashboard/standalone_server.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/discovery.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/emergence.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/exceptions.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/feedback_loops.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/reloader.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/watcher.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/hot_reload/websocket.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/levels.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/leverage_points.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/logging_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/mcp/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/mcp/server.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/claude_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/control_panel.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/control_panel_support.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/cross_session.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/edges.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/encryption.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/file_session.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/graph.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/long_term.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/long_term_types.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/backend_init_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/capabilities_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/handoff_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/lifecycle_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/long_term_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/promotion_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/mixins/short_term_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/nodes.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/redis_bootstrap.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/security/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/security/audit_logger.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/security/pii_scrubber.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/security/secrets_detector.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/short_term.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/simple_storage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/storage/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/storage_backend.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/summary_index.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/types.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/memory/unified.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/agent_creator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/builtin_templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/agent_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/analytics_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/config_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/memory_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/template_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_commands/workflow_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/cli_meta_workflows.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/form_engine.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/intent_detector.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/models.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/pattern_learner.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/plan_generator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/session_context.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/template_registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/meta_workflows/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/metrics/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/metrics/collector.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/metrics/prompt_metrics.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/__main__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/adaptive_routing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/auth_cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/auth_strategy.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/empathy_executor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/executor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/fallback.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/provider_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/tasks.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/telemetry/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/telemetry/analytics.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/telemetry/backend.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/telemetry/data_models.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/telemetry/storage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/token_estimator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/models/validation.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/monitoring/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/monitoring/alerts.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/monitoring/alerts_cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/monitoring/multi_backend.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/monitoring/otel_backend.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/optimization/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/optimization/context_optimizer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/agent_templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/config_store.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/execution_strategies.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/meta_orchestrator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/pattern_learner.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/orchestration/real_tools.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/pattern_cache.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/pattern_library.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/patterns/debugging/all_patterns.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/patterns/debugging/workflow_20260107_1770825e.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/patterns/refactoring_memory.json +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/persistence.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/platform_utils.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/plugins/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/plugins/base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/plugins/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/index.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/models.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/reports.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/scanner.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/project_index/scanner_parallel.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/context.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/parser.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/prompts/templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/redis_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/redis_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/circuit_breaker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/fallback.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/health.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/retry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/resilience/timeout.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/routing/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/routing/chain_executor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/routing/classifier.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/routing/smart_router.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/routing/workflow_registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/__main__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/templates/base_wizard.py.jinja2 +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/templates/coach_wizard.py.jinja2 +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/templates/domain_wizard.py.jinja2 +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/scaffolding/templates/linear_flow_wizard.py.jinja2 +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/ab_testing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/blueprint.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/collaboration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/domain_templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/embeddings.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/engine.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/explainer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/feedback.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/forms.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/generator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/llm_analyzer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/mcp_server.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/session.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/storage.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/success.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/visual_editor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/socratic/web_ui.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/agent_coordination.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/agent_tracking.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/approval_gates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/commands/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/commands/dashboard_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/event_streaming.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/feedback_loop.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/telemetry/usage_tracker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/__main__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/generator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/risk_analyzer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/test_generator/templates/unit_test.py.jinja2 +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/tier_recommender.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/tools.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/trust/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/trust/circuit_breaker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/trust_building.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/validation/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/validation/xml_validator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/vscode_bridge.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/behavior.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/output.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflow_patterns/structural.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/autonomous_test_gen.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/batch_processing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/bug_predict.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/builder.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/caching.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/code_review.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/code_review_adapters.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/code_review_pipeline.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/dependency_check.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_gen/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_gen/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_gen/report_formatter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_gen/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_manager.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/document_manager_README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/documentation_orchestrator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/history.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/generators.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/parsers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/prompts.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/schema.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/keyboard_shortcuts/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/llm_base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/manage_docs.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/manage_docs_README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/manage_documentation.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/new_sample_workflow1.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/new_sample_workflow1_README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/orchestrated_health_check.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/orchestrated_release_prep.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/output.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/pr_review.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progress.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progress_server.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/orchestrator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/reports.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/telemetry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/test_gen.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/progressive/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/refactor_plan.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/release_prep.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/release_prep_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/research_synthesis.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/routing.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/secure_release.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/security_adapters.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/security_audit.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/security_audit_phase3.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/seo_optimization.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/step_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/telemetry_mixin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test5.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test5_README.md +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_coverage_boost_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/ast_analyzer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/data_models.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/report_formatter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/test_templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen/workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen_behavioral.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_gen_parallel.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_lifecycle.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_maintenance.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_maintenance_cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_maintenance_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/test_runner.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/tier_tracking.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/src/attune/workflows/xml_enhanced_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_agent_factory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_agent_factory_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_agent_factory_resilience.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_audit_logger.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_audit_logger_extended.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_baseline.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_book_production_agents.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_bug_predict_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_claude_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_claude_memory_extended.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_clinical_protocol_monitor.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_health.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_review.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_review_crew_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_review_pipeline.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_review_pipeline_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_code_review_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_control_panel.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_control_panel_security.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_coordination.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_core_reliability.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_cost_tracker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_dependency_check.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_dependency_check_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_discovery.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_document_gen.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_document_gen_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_emergence.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_empathy_llm_core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_empathy_llm_security.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_empathy_os.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_exceptions.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_executor_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_fallback.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_fallback_suite.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_feedback_loops.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_finding_extraction.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_graph.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_health_check.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_healthcare_plugin.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_intelligence_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_levels.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_leverage_points.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_agents.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_decorators.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_empathy_core.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_langgraph_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_levels.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_patterns.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_providers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_security.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_session_status.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_llm_toolkit_wizard_adapter.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_logging_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_long_term.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_memory_graph.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_model_registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_model_router.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_monitoring.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pattern_cache.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pattern_library.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_perf_audit_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_persistence.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pii_scrubber.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pii_scrubber_extended.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_platform_compat_ci.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_platform_utils.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_plugin_base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_plugin_registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pr_review.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_pr_review_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_production_smoke.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_progress.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_protocol_checker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_protocol_loader.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_provider_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_providers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_redis_bootstrap.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_redis_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_redis_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_redis_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_redis_memory_errors.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_refactor_golden.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_refactor_plan_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_refactoring.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_refactoring_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_registry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_release_prep.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_reporting.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_reports.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_resilience.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_sbar_wizard.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_scanner.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_scanner_exceptions.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_secrets_detector.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_secure_memdocs.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_secure_memdocs_extended.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_secure_release.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_secure_release_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_audit.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_audit_crew.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_audit_workflow.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_crew_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_negative_cases.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_security_scan.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_sensor_parsers.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_session_status.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_short_term.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_smart_router.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_smoke.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_sonnet_opus_fallback.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_state.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_step_config.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_summary_index.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_sync_claude.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_tech_debt_wizard.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_telemetry.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_templates.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_timeout.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_token_estimator.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_trajectory_analyzer.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_trust_building.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_trust_circuit_breaker.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_unified_memory.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_validation.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_wizard_outputs.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_wizard_site_comprehensive.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_workflow_base.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_workflow_commands.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_workflow_wizard_integration.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_xml_prompts.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/tests/test_xml_spec_generation.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/workflow_scaffolding/__init__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/workflow_scaffolding/__main__.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/workflow_scaffolding/cli.py +0 -0
- {attune_ai-2.0.2 → attune_ai-2.1.0}/workflow_scaffolding/generator.py +0 -0
|
@@ -7,39 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [2.0
|
|
10
|
+
## [2.1.0] - 2026-02-01
|
|
11
11
|
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
- **README.md**: Removed outdated "Transitioning to Claude-Native Architecture" section
|
|
15
|
-
- Eliminated confusing timeline with old version numbers (v4.8.0, v5.0.0, v5.0.2)
|
|
16
|
-
- Package is already Claude-native, no need for transition messaging
|
|
17
|
-
- Cleaner, more focused README presentation
|
|
12
|
+
### Added
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
- **Unified `/attune` command**: Single entry point with Socratic discovery for all workflows
|
|
15
|
+
- **Interactive workflow navigation**: Question-based flow guides users to the right tool
|
|
20
16
|
|
|
21
17
|
### Changed
|
|
22
18
|
|
|
23
|
-
- **
|
|
24
|
-
|
|
25
|
-
- Clean, focused presentation of Attune AI features
|
|
26
|
-
- Updated test badge to show 13,489 tests collected
|
|
27
|
-
- Clarified $0 workflows caveat for 1M API context requirement
|
|
28
|
-
|
|
29
|
-
- **Website Branding**: Updated all references across 20+ pages
|
|
30
|
-
- "Empathy Framework" → "Attune AI"
|
|
31
|
-
- `empathy-framework` → `attune-ai` in all install commands
|
|
32
|
-
- GitHub URLs updated to `Smart-AI-Memory/attune-ai`
|
|
33
|
-
|
|
34
|
-
- **Documentation**: Comprehensive branding updates
|
|
35
|
-
- 1,116+ references updated across all markdown files
|
|
36
|
-
- All package names and commands updated
|
|
37
|
-
- Consistent "Attune AI" branding throughout
|
|
19
|
+
- **Consolidated command hubs**: Removed 9 separate hub commands in favor of unified `/attune`
|
|
20
|
+
- **Performance audit**: Removed `large_list_copy` false positive detection
|
|
38
21
|
|
|
39
22
|
### Fixed
|
|
40
23
|
|
|
41
|
-
-
|
|
42
|
-
- Accurate description of cost model for workflows
|
|
24
|
+
- **perf_audit.py**: No longer flags intentional patterns like `dirs[:]` for os.walk or defensive list copies
|
|
43
25
|
|
|
44
26
|
## [2.0.0] - 2026-02-01
|
|
45
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Contributing to
|
|
1
|
+
# Contributing to Attune AI
|
|
2
2
|
|
|
3
|
-
Thank you for your interest in contributing to
|
|
3
|
+
Thank you for your interest in contributing to Attune AI! This document provides guidelines and best practices for contributing.
|
|
4
4
|
|
|
5
5
|
## Table of Contents
|
|
6
6
|
|
|
@@ -28,8 +28,8 @@ We are committed to providing a welcoming and inclusive environment. Please be r
|
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
# Clone the repository
|
|
31
|
-
git clone https://github.com/
|
|
32
|
-
cd
|
|
31
|
+
git clone https://github.com/Smart-AI-Memory/attune-ai.git
|
|
32
|
+
cd attune-ai
|
|
33
33
|
|
|
34
34
|
# Create virtual environment
|
|
35
35
|
python3 -m venv venv
|
|
@@ -49,8 +49,7 @@ pytest tests/
|
|
|
49
49
|
|
|
50
50
|
### Branch Strategy
|
|
51
51
|
|
|
52
|
-
- `main` - Stable releases
|
|
53
|
-
- `develop` - Development branch
|
|
52
|
+
- `main` - Stable releases (merge via pull request)
|
|
54
53
|
- `feature/*` - New features
|
|
55
54
|
- `fix/*` - Bug fixes
|
|
56
55
|
- `docs/*` - Documentation updates
|
|
@@ -58,9 +57,9 @@ pytest tests/
|
|
|
58
57
|
### Creating a Feature
|
|
59
58
|
|
|
60
59
|
```bash
|
|
61
|
-
# Create feature branch from
|
|
62
|
-
git checkout
|
|
63
|
-
git pull origin
|
|
60
|
+
# Create feature branch from main
|
|
61
|
+
git checkout main
|
|
62
|
+
git pull origin main
|
|
64
63
|
git checkout -b feature/your-feature-name
|
|
65
64
|
|
|
66
65
|
# Make your changes
|
|
@@ -82,7 +81,7 @@ git push origin feature/your-feature-name
|
|
|
82
81
|
|
|
83
82
|
We follow conventional commits:
|
|
84
83
|
|
|
85
|
-
```
|
|
84
|
+
```text
|
|
86
85
|
<type>: <subject>
|
|
87
86
|
|
|
88
87
|
<body>
|
|
@@ -91,6 +90,7 @@ We follow conventional commits:
|
|
|
91
90
|
```
|
|
92
91
|
|
|
93
92
|
**Types:**
|
|
93
|
+
|
|
94
94
|
- `feat`: New feature
|
|
95
95
|
- `fix`: Bug fix
|
|
96
96
|
- `docs`: Documentation changes
|
|
@@ -102,7 +102,7 @@ We follow conventional commits:
|
|
|
102
102
|
|
|
103
103
|
**Examples:**
|
|
104
104
|
|
|
105
|
-
```
|
|
105
|
+
```text
|
|
106
106
|
feat: Add Level 5 systems thinking module
|
|
107
107
|
|
|
108
108
|
Implements pattern sharing between multiple AI agents
|
|
@@ -111,7 +111,7 @@ for emergent collaboration capabilities.
|
|
|
111
111
|
Closes #42
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
```
|
|
114
|
+
```text
|
|
115
115
|
fix: Correct trust calculation in feedback loops
|
|
116
116
|
|
|
117
117
|
Trust erosion was not properly clamped to [0,1] range.
|
|
@@ -132,8 +132,8 @@ All new code must include tests. We aim for **70%+ coverage**.
|
|
|
132
132
|
"""
|
|
133
133
|
Tests for Module Name
|
|
134
134
|
|
|
135
|
-
Copyright 2025
|
|
136
|
-
Licensed under
|
|
135
|
+
Copyright 2025 Patrick Roebuck
|
|
136
|
+
Licensed under Apache License 2.0
|
|
137
137
|
"""
|
|
138
138
|
|
|
139
139
|
import pytest
|
|
@@ -186,9 +186,9 @@ pytest tests/ -s
|
|
|
186
186
|
|
|
187
187
|
### Coverage Requirements
|
|
188
188
|
|
|
189
|
-
- Minimum **
|
|
190
|
-
- New modules should have **
|
|
191
|
-
- Critical modules (core,
|
|
189
|
+
- Minimum **80% overall coverage**
|
|
190
|
+
- New modules should have **90%+ coverage**
|
|
191
|
+
- Critical modules (core, workflows, security) should have **95%+ coverage**
|
|
192
192
|
|
|
193
193
|
### Test Categories
|
|
194
194
|
|
|
@@ -256,6 +256,7 @@ class LeveragePointAnalyzer:
|
|
|
256
256
|
```
|
|
257
257
|
|
|
258
258
|
**Docstring Sections:**
|
|
259
|
+
|
|
259
260
|
- **Summary**: One-line description
|
|
260
261
|
- **Extended Description**: Detailed explanation (optional)
|
|
261
262
|
- **Example**: Usage example with >>> prompts
|
|
@@ -332,6 +333,7 @@ def process_data(data: List[Dict]) -> Dict:
|
|
|
332
333
|
### When to Update Documentation
|
|
333
334
|
|
|
334
335
|
Update documentation when:
|
|
336
|
+
|
|
335
337
|
- Adding new features
|
|
336
338
|
- Changing public APIs
|
|
337
339
|
- Adding examples
|
|
@@ -348,6 +350,7 @@ Update documentation when:
|
|
|
348
350
|
### Writing Examples
|
|
349
351
|
|
|
350
352
|
Good examples are:
|
|
353
|
+
|
|
351
354
|
- **Self-contained**: Run without external dependencies
|
|
352
355
|
- **Well-commented**: Explain what and why
|
|
353
356
|
- **Practical**: Show real-world use cases
|
|
@@ -360,8 +363,8 @@ Example: Building Trust Through Anticipation
|
|
|
360
363
|
Demonstrates Level 4 Anticipatory Empathy by predicting
|
|
361
364
|
user needs before they arise.
|
|
362
365
|
|
|
363
|
-
Copyright 2025
|
|
364
|
-
Licensed under
|
|
366
|
+
Copyright 2025 Patrick Roebuck
|
|
367
|
+
Licensed under Apache License 2.0
|
|
365
368
|
"""
|
|
366
369
|
|
|
367
370
|
from attune import EmpathyOS
|
|
@@ -386,7 +389,7 @@ if __name__ == "__main__":
|
|
|
386
389
|
### Before Submitting
|
|
387
390
|
|
|
388
391
|
1. **Run all tests**: `pytest tests/ --cov=src/attune`
|
|
389
|
-
2. **Check coverage**: Ensure
|
|
392
|
+
2. **Check coverage**: Ensure 80%+ coverage
|
|
390
393
|
3. **Update documentation**: Add/update relevant docs
|
|
391
394
|
4. **Add examples**: If adding features, add example
|
|
392
395
|
5. **Self-review**: Read through your changes
|
|
@@ -394,13 +397,13 @@ if __name__ == "__main__":
|
|
|
394
397
|
### PR Checklist
|
|
395
398
|
|
|
396
399
|
- [ ] Tests pass locally
|
|
397
|
-
- [ ] Coverage is
|
|
398
|
-
- [ ] New code has tests (
|
|
400
|
+
- [ ] Coverage is 80%+ overall
|
|
401
|
+
- [ ] New code has tests (90%+ coverage for new modules)
|
|
399
402
|
- [ ] Documentation updated
|
|
400
403
|
- [ ] Examples added/updated if relevant
|
|
401
404
|
- [ ] Commit messages follow conventional format
|
|
402
405
|
- [ ] Code follows style guide
|
|
403
|
-
- [ ] No merge conflicts with
|
|
406
|
+
- [ ] No merge conflicts with main
|
|
404
407
|
|
|
405
408
|
### PR Template
|
|
406
409
|
|
|
@@ -445,7 +448,7 @@ Any additional context or notes for reviewers.
|
|
|
445
448
|
|
|
446
449
|
- Your contribution will be included in next release
|
|
447
450
|
- You'll be added to contributors list
|
|
448
|
-
- Thank you for improving
|
|
451
|
+
- Thank you for improving Attune AI!
|
|
449
452
|
|
|
450
453
|
## Getting Help
|
|
451
454
|
|
|
@@ -456,6 +459,7 @@ Any additional context or notes for reviewers.
|
|
|
456
459
|
## Recognition
|
|
457
460
|
|
|
458
461
|
Contributors are recognized in:
|
|
462
|
+
|
|
459
463
|
- README.md contributors section
|
|
460
464
|
- Release notes
|
|
461
465
|
- Project documentation
|
|
@@ -466,4 +470,4 @@ By contributing, you agree that your contributions will be licensed under the Ap
|
|
|
466
470
|
|
|
467
471
|
---
|
|
468
472
|
|
|
469
|
-
Thank you for contributing to
|
|
473
|
+
Thank you for contributing to Attune AI! 🤝
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: attune-ai
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: AI collaboration framework with real LLM agent execution, AskUserQuestion tool integration, Socratic agent generation, progressive tier escalation (70-85% cost savings), meta-orchestration, dynamic agent composition (10 patterns including Anthropic-inspired), intelligent caching (85% hit rate), semantic workflow discovery, visual workflow editor, MCP integration for Claude Code, and multi-agent orchestration.
|
|
5
5
|
Author-email: Patrick Roebuck <admin@smartaimemory.com>
|
|
6
6
|
Maintainer-email: Smart-AI-Memory <admin@smartaimemory.com>
|
|
@@ -421,14 +421,14 @@ Requires-Dist: aiohttp<4.0.0,>=3.10.0; extra == "all"
|
|
|
421
421
|
Requires-Dist: filelock<4.0.0,>=3.16.0; extra == "all"
|
|
422
422
|
Dynamic: license-file
|
|
423
423
|
|
|
424
|
-
#
|
|
424
|
+
# Empathy Framework
|
|
425
425
|
|
|
426
426
|
**AI-powered developer workflows with cost optimization and pattern learning.**
|
|
427
427
|
|
|
428
428
|
Run code review, debugging, testing, and release workflows from your terminal or Claude Code. Smart tier routing saves 34-86% on LLM costs.
|
|
429
429
|
|
|
430
430
|
[](https://pypi.org/project/attune-ai/)
|
|
431
|
-
[-brightgreen)](https://github.com/Smart-AI-Memory/attune-ai/actions)
|
|
432
432
|
[](https://www.python.org)
|
|
433
433
|
[](LICENSE)
|
|
434
434
|
[](https://github.com/Smart-AI-Memory/attune-ai/blob/main/CHANGELOG.md)
|
|
@@ -439,64 +439,188 @@ pip install attune-ai[developer]
|
|
|
439
439
|
|
|
440
440
|
---
|
|
441
441
|
|
|
442
|
-
##
|
|
442
|
+
## 🎯 Transitioning to Claude-Native Architecture
|
|
443
443
|
|
|
444
|
-
|
|
444
|
+
**Empathy Framework is evolving to focus exclusively on Anthropic/Claude** to unlock features impossible with multi-provider abstraction:
|
|
445
445
|
|
|
446
|
-
|
|
446
|
+
- **📦 Prompt Caching:** 90% cost reduction on repeated prompts
|
|
447
|
+
- **📖 Flexible Context:** 200K via subscription for most tasks, up to 1M via API for large codebases
|
|
448
|
+
- **🧠 Extended Thinking:** See Claude's internal reasoning process
|
|
449
|
+
- **🔧 Advanced Tool Use:** Optimized for agentic workflows
|
|
447
450
|
|
|
448
|
-
|
|
449
|
-
- All capabilities from v5.x preserved
|
|
450
|
-
- Starting fresh at v2.0.0 to mark the new brand
|
|
451
|
+
**Timeline:**
|
|
451
452
|
|
|
452
|
-
|
|
453
|
+
- ✅ **v4.8.0 (Jan 2026):** Deprecation warnings for OpenAI/Google/Ollama providers
|
|
454
|
+
- ✅ **v5.0.0 (Jan 26, 2026):** Non-Anthropic providers removed (BREAKING - COMPLETE)
|
|
455
|
+
- ✅ **v5.0.2 (Jan 28, 2026):** Cost optimization suite with batch processing and caching monitoring
|
|
453
456
|
|
|
454
|
-
|
|
455
|
-
- **Custom Agents** - Create specialized agents for your workflow needs
|
|
456
|
-
- **LLM Agents** - Leverage Claude's advanced capabilities
|
|
457
|
-
- Dashboard at `http://localhost:8000` with `python examples/dashboard_demo.py` (requires Redis)
|
|
457
|
+
**Migration Guide:** [docs/CLAUDE_NATIVE.md](docs/CLAUDE_NATIVE.md)
|
|
458
458
|
|
|
459
|
-
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## What's New in v5.3.0
|
|
462
|
+
|
|
463
|
+
**🎨 Dashboard Enhancements** - Improved usability and clarity:
|
|
464
|
+
|
|
465
|
+
- **Agent Display Names** - Human-readable labels for agents in dashboard (e.g., "Code Analyzer" instead of UUID)
|
|
466
|
+
- **Comprehensive Help Panel** - 5-section accordion explaining dashboard features, use cases, and Redis setup
|
|
467
|
+
- **UX Improvements** - "Source Agent:" label clarity, "Redis Requires Enabling" status message
|
|
468
|
+
- **Browser Cache Busting** - Date-based versioning ensures updates appear immediately
|
|
460
469
|
|
|
461
|
-
|
|
462
|
-
- **Batch API** - 50% cost savings for non-urgent tasks
|
|
463
|
-
- **Smart Tier Routing** - Automatic model selection saves 34-86% on costs
|
|
464
|
-
- **Precise Token Counting** - >98% accurate cost tracking
|
|
470
|
+
**📚 Documentation Improvements**:
|
|
465
471
|
|
|
466
|
-
|
|
472
|
+
- Clarified flexible context strategy (200K subscription + 1M API routing)
|
|
473
|
+
- Added Redis requirement documentation for dashboard
|
|
474
|
+
- Root directory cleanup (8 archived files)
|
|
467
475
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
-
|
|
471
|
-
-
|
|
476
|
+
**🧪 Test Infrastructure**:
|
|
477
|
+
|
|
478
|
+
- Sequential test execution to fix import timing issues
|
|
479
|
+
- All agent tracking tests passing (19/19)
|
|
480
|
+
|
|
481
|
+
[See Full Changelog](CHANGELOG.md#530---2026-01-31)
|
|
482
|
+
|
|
483
|
+
---
|
|
472
484
|
|
|
473
|
-
|
|
485
|
+
## What's New in v5.1.0
|
|
474
486
|
|
|
475
|
-
- **
|
|
476
|
-
- **Path Traversal Protection** - All file operations validated
|
|
477
|
-
- **HIPAA/GDPR Compliance** - Enterprise-ready security options
|
|
487
|
+
**🤖 Multi-Agent Orchestration** - Full support for custom agents and Anthropic LLM agents:
|
|
478
488
|
|
|
479
|
-
|
|
489
|
+
- **Agent Coordination Dashboard** - Real-time monitoring with 6 coordination patterns:
|
|
490
|
+
- Agent heartbeats and status tracking
|
|
491
|
+
- Inter-agent coordination signals
|
|
492
|
+
- Event streaming across agent workflows
|
|
493
|
+
- Approval gates for human-in-the-loop
|
|
494
|
+
- Quality feedback and performance metrics
|
|
495
|
+
- Demo mode with test data generation
|
|
480
496
|
|
|
481
|
-
- **
|
|
482
|
-
- **
|
|
483
|
-
-
|
|
484
|
-
- **$0 Workflows** - Run via Claude Code with no API costs, unless a 1 million API context is required.
|
|
497
|
+
- **Custom Agents** - Build specialized agents for your workflow needs
|
|
498
|
+
- **LLM Agents from Anthropic** - Leverage Claude's advanced capabilities
|
|
499
|
+
- Dashboard accessible at `http://localhost:8000` with `python examples/dashboard_demo.py` **(Requires Redis)**
|
|
485
500
|
|
|
486
|
-
**
|
|
501
|
+
**🔐 Authentication Strategy System** - Intelligent routing between Claude subscriptions and Anthropic API:
|
|
487
502
|
|
|
488
503
|
```bash
|
|
489
|
-
#
|
|
490
|
-
|
|
504
|
+
# Interactive setup
|
|
505
|
+
python -m attune.models.auth_cli setup
|
|
491
506
|
|
|
492
|
-
#
|
|
493
|
-
|
|
507
|
+
# View current configuration
|
|
508
|
+
python -m attune.models.auth_cli status
|
|
509
|
+
|
|
510
|
+
# Get recommendation for a file
|
|
511
|
+
python -m attune.models.auth_cli recommend src/module.py
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
**💰 Automatic Cost Optimization** - Workflows choose the best auth method:
|
|
515
|
+
|
|
516
|
+
- Small/medium modules (<2000 LOC) → Claude subscription (free)
|
|
517
|
+
- Large modules (>2000 LOC) → Anthropic API (pay for what you need)
|
|
518
|
+
- 7 workflows integrated: document-gen, test-gen, code-review, bug-predict, security-audit, perf-audit, release-prep
|
|
519
|
+
- Auth mode tracking in all workflow outputs for telemetry
|
|
520
|
+
|
|
521
|
+
**🧪 Comprehensive Testing** - 7 new integration tests for auth strategy:
|
|
522
|
+
|
|
523
|
+
- All workflows tested with auth enabled/disabled
|
|
524
|
+
- API and subscription mode verification
|
|
525
|
+
- Cost tracking validation
|
|
526
|
+
|
|
527
|
+
**📖 Documentation** - 950+ lines across 3 guides:
|
|
528
|
+
|
|
529
|
+
- [AUTH_STRATEGY_GUIDE.md](docs/AUTH_STRATEGY_GUIDE.md) - User guide for configuration
|
|
530
|
+
- [AUTH_CLI_IMPLEMENTATION.md](docs/AUTH_CLI_IMPLEMENTATION.md) - CLI command reference
|
|
531
|
+
- [AUTH_WORKFLOW_INTEGRATIONS.md](docs/AUTH_WORKFLOW_INTEGRATIONS.md) - Integration patterns
|
|
532
|
+
|
|
533
|
+
[See Full Changelog](CHANGELOG.md#510---2026-01-29)
|
|
534
|
+
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
## What's New in v5.0.2
|
|
538
|
+
|
|
539
|
+
**💰 50% Cost Savings with Batch API** - Process non-urgent tasks asynchronously:
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
empathy batch submit batch_requests.json # Submit batch job
|
|
543
|
+
empathy batch status msgbatch_abc123 # Check progress
|
|
544
|
+
empathy batch results msgbatch_abc123 output.json # Download results
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
Perfect for: log analysis, report generation, bulk classification, test generation
|
|
548
|
+
|
|
549
|
+
**📊 Precise Token Counting** - >98% accurate cost tracking:
|
|
550
|
+
|
|
551
|
+
- Integrated Anthropic's `count_tokens()` API for billing-accurate measurements
|
|
552
|
+
- 3-tier fallback: API → tiktoken (local) → heuristic
|
|
553
|
+
- Cache-aware cost calculation (25% write markup, 90% read discount)
|
|
554
|
+
|
|
555
|
+
**📈 Cache Performance Monitoring** - Track your 20-30% caching savings:
|
|
556
|
+
|
|
557
|
+
```bash
|
|
558
|
+
empathy cache stats # Show hit rates and cost savings
|
|
559
|
+
empathy cache stats --verbose # Detailed token metrics
|
|
560
|
+
empathy cache stats --format json # Machine-readable output
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
**🧭 Adaptive Routing Analytics** - Intelligent tier recommendations:
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
empathy routing stats <workflow> # Performance metrics
|
|
567
|
+
empathy routing check --all # Tier upgrade recommendations
|
|
568
|
+
empathy routing models --provider anthropic # Compare models
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
**🔧 Dashboard Fixes** - All 6 agent coordination patterns now operational:
|
|
572
|
+
- Agent heartbeats displaying correctly
|
|
573
|
+
- Event streaming functional
|
|
574
|
+
- Coordination signals working
|
|
575
|
+
- Approval gates operational
|
|
576
|
+
|
|
577
|
+
[See Full Changelog](CHANGELOG.md#502---2026-01-28) | [Batch API Guide](docs/BATCH_API_GUIDE.md) | [User API Docs](docs/USER_API_DOCUMENTATION.md)
|
|
494
578
|
|
|
495
|
-
|
|
496
|
-
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
## What's New in v4.9.0
|
|
582
|
+
|
|
583
|
+
**⚡ 18x Faster Performance** - Massive performance gains through Phase 2 optimizations:
|
|
584
|
+
|
|
585
|
+
- **Redis Two-Tier Caching:** 2x faster memory operations (37,000x for cached keys)
|
|
586
|
+
- **Generator Expressions:** 99.9% memory reduction across 27 optimizations
|
|
587
|
+
- **Parallel Scanning:** Multi-core processing enabled by default (2-4x faster)
|
|
588
|
+
- **Incremental Scanning:** Git diff-based updates (10x faster)
|
|
589
|
+
|
|
590
|
+
**🧭 Natural Language Workflows** - Use plain English instead of workflow names:
|
|
591
|
+
|
|
592
|
+
```bash
|
|
593
|
+
/workflows "find security vulnerabilities" # → security-audit
|
|
594
|
+
/workflows "check code performance" # → perf-audit
|
|
595
|
+
/workflows "predict bugs" # → bug-predict
|
|
596
|
+
/plan "review my code" # → code-review
|
|
497
597
|
```
|
|
498
598
|
|
|
499
|
-
|
|
599
|
+
**📊 Real-World Performance:**
|
|
600
|
+
|
|
601
|
+
- Combined workflow: 3.59s → 0.2s (**18x faster**)
|
|
602
|
+
- Full scan: 3,472 files in 0.98s (was 3.59s)
|
|
603
|
+
- Redis cached operations: 37ms → 0.001ms
|
|
604
|
+
|
|
605
|
+
**🎯 Improved Navigation:**
|
|
606
|
+
|
|
607
|
+
- Split `/workflow` into `/workflows` (automated analysis) and `/plan` (planning/review)
|
|
608
|
+
- Clearer hub organization with better categorization
|
|
609
|
+
- Natural language routing matches intent to workflow
|
|
610
|
+
|
|
611
|
+
[See CHANGELOG.md](CHANGELOG.md) | [Performance Docs](docs/REDIS_OPTIMIZATION_SUMMARY.md)
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## What's New in v4.7.0
|
|
616
|
+
|
|
617
|
+
**$0 Workflows via Skills** - Multi-agent workflows run through Claude Code's Task tool instead of API calls. No additional cost with your Claude subscription.
|
|
618
|
+
|
|
619
|
+
**Socratic Workflows** - Interactive discovery through guided questions. Workflows ask what you need rather than requiring upfront configuration.
|
|
620
|
+
|
|
621
|
+
**Security Hardened** - Fixed critical vulnerabilities (path traversal, JWT, SSRF).
|
|
622
|
+
|
|
623
|
+
**Hub-Based Commands** - Organized workflows into intuitive command hubs.
|
|
500
624
|
|
|
501
625
|
---
|
|
502
626
|
|
|
@@ -535,7 +659,7 @@ python -m attune.models.cli provider --set anthropic
|
|
|
535
659
|
/plan "review my code"
|
|
536
660
|
|
|
537
661
|
# Direct tool access via MCP (v5.1.1+):
|
|
538
|
-
# Claude Code automatically discovers
|
|
662
|
+
# Claude Code automatically discovers Empathy tools through the MCP server
|
|
539
663
|
# Just describe what you need in natural language:
|
|
540
664
|
"Run a security audit on src/" → Invokes security_audit tool
|
|
541
665
|
"Generate tests for config.py" → Invokes test_generation tool
|
|
@@ -545,7 +669,7 @@ python -m attune.models.cli provider --set anthropic
|
|
|
545
669
|
|
|
546
670
|
**MCP Server Integration (v5.1.1+):**
|
|
547
671
|
|
|
548
|
-
|
|
672
|
+
Empathy Framework now includes a Model Context Protocol (MCP) server that exposes all workflows as native Claude Code tools:
|
|
549
673
|
|
|
550
674
|
- **10 Tools Available:** security_audit, bug_predict, code_review, test_generation, performance_audit, release_prep, auth_status, auth_recommend, telemetry_stats, dashboard_status
|
|
551
675
|
- **Automatic Discovery:** No manual configuration needed - Claude Code finds tools via `.claude/mcp.json`
|
|
@@ -567,9 +691,9 @@ See [.claude/MCP_TEST_RESULTS.md](.claude/MCP_TEST_RESULTS.md) for full integrat
|
|
|
567
691
|
**CLI:**
|
|
568
692
|
|
|
569
693
|
```bash
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
694
|
+
empathy workflow run security-audit --path ./src
|
|
695
|
+
empathy workflow run test-coverage --target 90
|
|
696
|
+
empathy telemetry show # View cost savings
|
|
573
697
|
```
|
|
574
698
|
|
|
575
699
|
**Python:**
|
|
@@ -577,8 +701,8 @@ attune telemetry show # View cost savings
|
|
|
577
701
|
```python
|
|
578
702
|
from attune import EmpathyOS
|
|
579
703
|
|
|
580
|
-
async with EmpathyOS() as
|
|
581
|
-
result = await
|
|
704
|
+
async with EmpathyOS() as empathy:
|
|
705
|
+
result = await empathy.level_2_guided(
|
|
582
706
|
"Review this code for security issues"
|
|
583
707
|
)
|
|
584
708
|
print(result["response"])
|
|
@@ -688,7 +812,7 @@ For programmatic use, smart tier routing saves 34-86%:
|
|
|
688
812
|
|
|
689
813
|
```bash
|
|
690
814
|
# Track API usage and savings
|
|
691
|
-
|
|
815
|
+
empathy telemetry savings --days 30
|
|
692
816
|
```
|
|
693
817
|
|
|
694
818
|
---
|
|
@@ -699,10 +823,10 @@ attune telemetry savings --days 30
|
|
|
699
823
|
|
|
700
824
|
```bash
|
|
701
825
|
# 4 parallel agents check release readiness
|
|
702
|
-
|
|
826
|
+
empathy orchestrate release-prep
|
|
703
827
|
|
|
704
828
|
# Sequential coverage improvement
|
|
705
|
-
|
|
829
|
+
empathy orchestrate test-coverage --target 90
|
|
706
830
|
```
|
|
707
831
|
|
|
708
832
|
### Response Caching
|
|
@@ -750,21 +874,21 @@ python -m attune.models.cli provider
|
|
|
750
874
|
python -m attune.models.cli provider --set hybrid
|
|
751
875
|
|
|
752
876
|
# Workflows
|
|
753
|
-
|
|
754
|
-
|
|
877
|
+
empathy workflow list
|
|
878
|
+
empathy workflow run <workflow-name>
|
|
755
879
|
|
|
756
880
|
# Cost tracking
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
881
|
+
empathy telemetry show
|
|
882
|
+
empathy telemetry savings --days 30
|
|
883
|
+
empathy telemetry export --format csv
|
|
760
884
|
|
|
761
885
|
# Orchestration
|
|
762
|
-
|
|
763
|
-
|
|
886
|
+
empathy orchestrate release-prep
|
|
887
|
+
empathy orchestrate test-coverage --target 90
|
|
764
888
|
|
|
765
889
|
# Meta-workflows
|
|
766
|
-
|
|
767
|
-
|
|
890
|
+
empathy meta-workflow list
|
|
891
|
+
empathy meta-workflow run release-prep --real
|
|
768
892
|
```
|
|
769
893
|
|
|
770
894
|
---
|
|
@@ -810,7 +934,7 @@ export REDIS_URL="redis://localhost:6379"
|
|
|
810
934
|
|
|
811
935
|
## VSCode Extension
|
|
812
936
|
|
|
813
|
-
Install the
|
|
937
|
+
Install the Empathy VSCode extension for:
|
|
814
938
|
|
|
815
939
|
- **Dashboard** - Health score, costs, patterns
|
|
816
940
|
- **One-Click Workflows** - Run from command palette
|
|
@@ -845,10 +969,10 @@ See [SECURITY.md](SECURITY.md) for vulnerability reporting.
|
|
|
845
969
|
|
|
846
970
|
```bash
|
|
847
971
|
# Run security audit locally
|
|
848
|
-
|
|
972
|
+
empathy workflow run security-audit
|
|
849
973
|
|
|
850
974
|
# Scan specific directory
|
|
851
|
-
|
|
975
|
+
empathy workflow run security-audit --input '{"path":"./src"}'
|
|
852
976
|
```
|
|
853
977
|
|
|
854
978
|
**Documentation:**
|