attune-ai 2.0.0__py3-none-any.whl
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/__init__.py +358 -0
- attune/adaptive/__init__.py +13 -0
- attune/adaptive/task_complexity.py +127 -0
- attune/agent_monitoring.py +414 -0
- attune/cache/__init__.py +117 -0
- attune/cache/base.py +166 -0
- attune/cache/dependency_manager.py +256 -0
- attune/cache/hash_only.py +251 -0
- attune/cache/hybrid.py +457 -0
- attune/cache/storage.py +285 -0
- attune/cache_monitor.py +356 -0
- attune/cache_stats.py +298 -0
- attune/cli/__init__.py +152 -0
- attune/cli/__main__.py +12 -0
- attune/cli/commands/__init__.py +1 -0
- attune/cli/commands/batch.py +264 -0
- attune/cli/commands/cache.py +248 -0
- attune/cli/commands/help.py +331 -0
- attune/cli/commands/info.py +140 -0
- attune/cli/commands/inspect.py +436 -0
- attune/cli/commands/inspection.py +57 -0
- attune/cli/commands/memory.py +48 -0
- attune/cli/commands/metrics.py +92 -0
- attune/cli/commands/orchestrate.py +184 -0
- attune/cli/commands/patterns.py +207 -0
- attune/cli/commands/profiling.py +202 -0
- attune/cli/commands/provider.py +98 -0
- attune/cli/commands/routing.py +285 -0
- attune/cli/commands/setup.py +96 -0
- attune/cli/commands/status.py +235 -0
- attune/cli/commands/sync.py +166 -0
- attune/cli/commands/tier.py +121 -0
- attune/cli/commands/utilities.py +114 -0
- attune/cli/commands/workflow.py +579 -0
- attune/cli/core.py +32 -0
- attune/cli/parsers/__init__.py +68 -0
- attune/cli/parsers/batch.py +118 -0
- attune/cli/parsers/cache.py +65 -0
- attune/cli/parsers/help.py +41 -0
- attune/cli/parsers/info.py +26 -0
- attune/cli/parsers/inspect.py +66 -0
- attune/cli/parsers/metrics.py +42 -0
- attune/cli/parsers/orchestrate.py +61 -0
- attune/cli/parsers/patterns.py +54 -0
- attune/cli/parsers/provider.py +40 -0
- attune/cli/parsers/routing.py +110 -0
- attune/cli/parsers/setup.py +42 -0
- attune/cli/parsers/status.py +47 -0
- attune/cli/parsers/sync.py +31 -0
- attune/cli/parsers/tier.py +33 -0
- attune/cli/parsers/workflow.py +77 -0
- attune/cli/utils/__init__.py +1 -0
- attune/cli/utils/data.py +242 -0
- attune/cli/utils/helpers.py +68 -0
- attune/cli_legacy.py +3957 -0
- attune/cli_minimal.py +1159 -0
- attune/cli_router.py +437 -0
- attune/cli_unified.py +814 -0
- attune/config/__init__.py +66 -0
- attune/config/xml_config.py +286 -0
- attune/config.py +545 -0
- attune/coordination.py +870 -0
- attune/core.py +1511 -0
- attune/core_modules/__init__.py +15 -0
- attune/cost_tracker.py +626 -0
- attune/dashboard/__init__.py +41 -0
- attune/dashboard/app.py +512 -0
- attune/dashboard/simple_server.py +435 -0
- attune/dashboard/standalone_server.py +547 -0
- attune/discovery.py +306 -0
- attune/emergence.py +306 -0
- attune/exceptions.py +123 -0
- attune/feedback_loops.py +373 -0
- attune/hot_reload/README.md +473 -0
- attune/hot_reload/__init__.py +62 -0
- attune/hot_reload/config.py +83 -0
- attune/hot_reload/integration.py +229 -0
- attune/hot_reload/reloader.py +298 -0
- attune/hot_reload/watcher.py +183 -0
- attune/hot_reload/websocket.py +177 -0
- attune/levels.py +577 -0
- attune/leverage_points.py +441 -0
- attune/logging_config.py +261 -0
- attune/mcp/__init__.py +10 -0
- attune/mcp/server.py +506 -0
- attune/memory/__init__.py +237 -0
- attune/memory/claude_memory.py +469 -0
- attune/memory/config.py +224 -0
- attune/memory/control_panel.py +1290 -0
- attune/memory/control_panel_support.py +145 -0
- attune/memory/cross_session.py +845 -0
- attune/memory/edges.py +179 -0
- attune/memory/encryption.py +159 -0
- attune/memory/file_session.py +770 -0
- attune/memory/graph.py +570 -0
- attune/memory/long_term.py +913 -0
- attune/memory/long_term_types.py +99 -0
- attune/memory/mixins/__init__.py +25 -0
- attune/memory/mixins/backend_init_mixin.py +249 -0
- attune/memory/mixins/capabilities_mixin.py +208 -0
- attune/memory/mixins/handoff_mixin.py +208 -0
- attune/memory/mixins/lifecycle_mixin.py +49 -0
- attune/memory/mixins/long_term_mixin.py +352 -0
- attune/memory/mixins/promotion_mixin.py +109 -0
- attune/memory/mixins/short_term_mixin.py +182 -0
- attune/memory/nodes.py +179 -0
- attune/memory/redis_bootstrap.py +540 -0
- attune/memory/security/__init__.py +31 -0
- attune/memory/security/audit_logger.py +932 -0
- attune/memory/security/pii_scrubber.py +640 -0
- attune/memory/security/secrets_detector.py +678 -0
- attune/memory/short_term.py +2192 -0
- attune/memory/simple_storage.py +302 -0
- attune/memory/storage/__init__.py +15 -0
- attune/memory/storage_backend.py +167 -0
- attune/memory/summary_index.py +583 -0
- attune/memory/types.py +446 -0
- attune/memory/unified.py +182 -0
- attune/meta_workflows/__init__.py +74 -0
- attune/meta_workflows/agent_creator.py +248 -0
- attune/meta_workflows/builtin_templates.py +567 -0
- attune/meta_workflows/cli_commands/__init__.py +56 -0
- attune/meta_workflows/cli_commands/agent_commands.py +321 -0
- attune/meta_workflows/cli_commands/analytics_commands.py +442 -0
- attune/meta_workflows/cli_commands/config_commands.py +232 -0
- attune/meta_workflows/cli_commands/memory_commands.py +182 -0
- attune/meta_workflows/cli_commands/template_commands.py +354 -0
- attune/meta_workflows/cli_commands/workflow_commands.py +382 -0
- attune/meta_workflows/cli_meta_workflows.py +59 -0
- attune/meta_workflows/form_engine.py +292 -0
- attune/meta_workflows/intent_detector.py +409 -0
- attune/meta_workflows/models.py +569 -0
- attune/meta_workflows/pattern_learner.py +738 -0
- attune/meta_workflows/plan_generator.py +384 -0
- attune/meta_workflows/session_context.py +397 -0
- attune/meta_workflows/template_registry.py +229 -0
- attune/meta_workflows/workflow.py +984 -0
- attune/metrics/__init__.py +12 -0
- attune/metrics/collector.py +31 -0
- attune/metrics/prompt_metrics.py +194 -0
- attune/models/__init__.py +172 -0
- attune/models/__main__.py +13 -0
- attune/models/adaptive_routing.py +437 -0
- attune/models/auth_cli.py +444 -0
- attune/models/auth_strategy.py +450 -0
- attune/models/cli.py +655 -0
- attune/models/empathy_executor.py +354 -0
- attune/models/executor.py +257 -0
- attune/models/fallback.py +762 -0
- attune/models/provider_config.py +282 -0
- attune/models/registry.py +472 -0
- attune/models/tasks.py +359 -0
- attune/models/telemetry/__init__.py +71 -0
- attune/models/telemetry/analytics.py +594 -0
- attune/models/telemetry/backend.py +196 -0
- attune/models/telemetry/data_models.py +431 -0
- attune/models/telemetry/storage.py +489 -0
- attune/models/token_estimator.py +420 -0
- attune/models/validation.py +280 -0
- attune/monitoring/__init__.py +52 -0
- attune/monitoring/alerts.py +946 -0
- attune/monitoring/alerts_cli.py +448 -0
- attune/monitoring/multi_backend.py +271 -0
- attune/monitoring/otel_backend.py +362 -0
- attune/optimization/__init__.py +19 -0
- attune/optimization/context_optimizer.py +272 -0
- attune/orchestration/__init__.py +67 -0
- attune/orchestration/agent_templates.py +707 -0
- attune/orchestration/config_store.py +499 -0
- attune/orchestration/execution_strategies.py +2111 -0
- attune/orchestration/meta_orchestrator.py +1168 -0
- attune/orchestration/pattern_learner.py +696 -0
- attune/orchestration/real_tools.py +931 -0
- attune/pattern_cache.py +187 -0
- attune/pattern_library.py +542 -0
- attune/patterns/debugging/all_patterns.json +81 -0
- attune/patterns/debugging/workflow_20260107_1770825e.json +77 -0
- attune/patterns/refactoring_memory.json +89 -0
- attune/persistence.py +564 -0
- attune/platform_utils.py +265 -0
- attune/plugins/__init__.py +28 -0
- attune/plugins/base.py +361 -0
- attune/plugins/registry.py +268 -0
- attune/project_index/__init__.py +32 -0
- attune/project_index/cli.py +335 -0
- attune/project_index/index.py +667 -0
- attune/project_index/models.py +504 -0
- attune/project_index/reports.py +474 -0
- attune/project_index/scanner.py +777 -0
- attune/project_index/scanner_parallel.py +291 -0
- attune/prompts/__init__.py +61 -0
- attune/prompts/config.py +77 -0
- attune/prompts/context.py +177 -0
- attune/prompts/parser.py +285 -0
- attune/prompts/registry.py +313 -0
- attune/prompts/templates.py +208 -0
- attune/redis_config.py +302 -0
- attune/redis_memory.py +799 -0
- attune/resilience/__init__.py +56 -0
- attune/resilience/circuit_breaker.py +256 -0
- attune/resilience/fallback.py +179 -0
- attune/resilience/health.py +300 -0
- attune/resilience/retry.py +209 -0
- attune/resilience/timeout.py +135 -0
- attune/routing/__init__.py +43 -0
- attune/routing/chain_executor.py +433 -0
- attune/routing/classifier.py +217 -0
- attune/routing/smart_router.py +234 -0
- attune/routing/workflow_registry.py +343 -0
- attune/scaffolding/README.md +589 -0
- attune/scaffolding/__init__.py +35 -0
- attune/scaffolding/__main__.py +14 -0
- attune/scaffolding/cli.py +240 -0
- attune/scaffolding/templates/base_wizard.py.jinja2 +121 -0
- attune/scaffolding/templates/coach_wizard.py.jinja2 +321 -0
- attune/scaffolding/templates/domain_wizard.py.jinja2 +408 -0
- attune/scaffolding/templates/linear_flow_wizard.py.jinja2 +203 -0
- attune/socratic/__init__.py +256 -0
- attune/socratic/ab_testing.py +958 -0
- attune/socratic/blueprint.py +533 -0
- attune/socratic/cli.py +703 -0
- attune/socratic/collaboration.py +1114 -0
- attune/socratic/domain_templates.py +924 -0
- attune/socratic/embeddings.py +738 -0
- attune/socratic/engine.py +794 -0
- attune/socratic/explainer.py +682 -0
- attune/socratic/feedback.py +772 -0
- attune/socratic/forms.py +629 -0
- attune/socratic/generator.py +732 -0
- attune/socratic/llm_analyzer.py +637 -0
- attune/socratic/mcp_server.py +702 -0
- attune/socratic/session.py +312 -0
- attune/socratic/storage.py +667 -0
- attune/socratic/success.py +730 -0
- attune/socratic/visual_editor.py +860 -0
- attune/socratic/web_ui.py +958 -0
- attune/telemetry/__init__.py +39 -0
- attune/telemetry/agent_coordination.py +475 -0
- attune/telemetry/agent_tracking.py +367 -0
- attune/telemetry/approval_gates.py +545 -0
- attune/telemetry/cli.py +1231 -0
- attune/telemetry/commands/__init__.py +14 -0
- attune/telemetry/commands/dashboard_commands.py +696 -0
- attune/telemetry/event_streaming.py +409 -0
- attune/telemetry/feedback_loop.py +567 -0
- attune/telemetry/usage_tracker.py +591 -0
- attune/templates.py +754 -0
- attune/test_generator/__init__.py +38 -0
- attune/test_generator/__main__.py +14 -0
- attune/test_generator/cli.py +234 -0
- attune/test_generator/generator.py +355 -0
- attune/test_generator/risk_analyzer.py +216 -0
- attune/test_generator/templates/unit_test.py.jinja2 +272 -0
- attune/tier_recommender.py +384 -0
- attune/tools.py +183 -0
- attune/trust/__init__.py +28 -0
- attune/trust/circuit_breaker.py +579 -0
- attune/trust_building.py +527 -0
- attune/validation/__init__.py +19 -0
- attune/validation/xml_validator.py +281 -0
- attune/vscode_bridge.py +173 -0
- attune/workflow_commands.py +780 -0
- attune/workflow_patterns/__init__.py +33 -0
- attune/workflow_patterns/behavior.py +249 -0
- attune/workflow_patterns/core.py +76 -0
- attune/workflow_patterns/output.py +99 -0
- attune/workflow_patterns/registry.py +255 -0
- attune/workflow_patterns/structural.py +288 -0
- attune/workflows/__init__.py +539 -0
- attune/workflows/autonomous_test_gen.py +1268 -0
- attune/workflows/base.py +2667 -0
- attune/workflows/batch_processing.py +342 -0
- attune/workflows/bug_predict.py +1084 -0
- attune/workflows/builder.py +273 -0
- attune/workflows/caching.py +253 -0
- attune/workflows/code_review.py +1048 -0
- attune/workflows/code_review_adapters.py +312 -0
- attune/workflows/code_review_pipeline.py +722 -0
- attune/workflows/config.py +645 -0
- attune/workflows/dependency_check.py +644 -0
- attune/workflows/document_gen/__init__.py +25 -0
- attune/workflows/document_gen/config.py +30 -0
- attune/workflows/document_gen/report_formatter.py +162 -0
- attune/workflows/document_gen/workflow.py +1426 -0
- attune/workflows/document_manager.py +216 -0
- attune/workflows/document_manager_README.md +134 -0
- attune/workflows/documentation_orchestrator.py +1205 -0
- attune/workflows/history.py +510 -0
- attune/workflows/keyboard_shortcuts/__init__.py +39 -0
- attune/workflows/keyboard_shortcuts/generators.py +391 -0
- attune/workflows/keyboard_shortcuts/parsers.py +416 -0
- attune/workflows/keyboard_shortcuts/prompts.py +295 -0
- attune/workflows/keyboard_shortcuts/schema.py +193 -0
- attune/workflows/keyboard_shortcuts/workflow.py +509 -0
- attune/workflows/llm_base.py +363 -0
- attune/workflows/manage_docs.py +87 -0
- attune/workflows/manage_docs_README.md +134 -0
- attune/workflows/manage_documentation.py +821 -0
- attune/workflows/new_sample_workflow1.py +149 -0
- attune/workflows/new_sample_workflow1_README.md +150 -0
- attune/workflows/orchestrated_health_check.py +849 -0
- attune/workflows/orchestrated_release_prep.py +600 -0
- attune/workflows/output.py +413 -0
- attune/workflows/perf_audit.py +863 -0
- attune/workflows/pr_review.py +762 -0
- attune/workflows/progress.py +785 -0
- attune/workflows/progress_server.py +322 -0
- attune/workflows/progressive/README 2.md +454 -0
- attune/workflows/progressive/README.md +454 -0
- attune/workflows/progressive/__init__.py +82 -0
- attune/workflows/progressive/cli.py +219 -0
- attune/workflows/progressive/core.py +488 -0
- attune/workflows/progressive/orchestrator.py +723 -0
- attune/workflows/progressive/reports.py +520 -0
- attune/workflows/progressive/telemetry.py +274 -0
- attune/workflows/progressive/test_gen.py +495 -0
- attune/workflows/progressive/workflow.py +589 -0
- attune/workflows/refactor_plan.py +694 -0
- attune/workflows/release_prep.py +895 -0
- attune/workflows/release_prep_crew.py +969 -0
- attune/workflows/research_synthesis.py +404 -0
- attune/workflows/routing.py +168 -0
- attune/workflows/secure_release.py +593 -0
- attune/workflows/security_adapters.py +297 -0
- attune/workflows/security_audit.py +1329 -0
- attune/workflows/security_audit_phase3.py +355 -0
- attune/workflows/seo_optimization.py +633 -0
- attune/workflows/step_config.py +234 -0
- attune/workflows/telemetry_mixin.py +269 -0
- attune/workflows/test5.py +125 -0
- attune/workflows/test5_README.md +158 -0
- attune/workflows/test_coverage_boost_crew.py +849 -0
- attune/workflows/test_gen/__init__.py +52 -0
- attune/workflows/test_gen/ast_analyzer.py +249 -0
- attune/workflows/test_gen/config.py +88 -0
- attune/workflows/test_gen/data_models.py +38 -0
- attune/workflows/test_gen/report_formatter.py +289 -0
- attune/workflows/test_gen/test_templates.py +381 -0
- attune/workflows/test_gen/workflow.py +655 -0
- attune/workflows/test_gen.py +54 -0
- attune/workflows/test_gen_behavioral.py +477 -0
- attune/workflows/test_gen_parallel.py +341 -0
- attune/workflows/test_lifecycle.py +526 -0
- attune/workflows/test_maintenance.py +627 -0
- attune/workflows/test_maintenance_cli.py +590 -0
- attune/workflows/test_maintenance_crew.py +840 -0
- attune/workflows/test_runner.py +622 -0
- attune/workflows/tier_tracking.py +531 -0
- attune/workflows/xml_enhanced_crew.py +285 -0
- attune_ai-2.0.0.dist-info/METADATA +1026 -0
- attune_ai-2.0.0.dist-info/RECORD +457 -0
- attune_ai-2.0.0.dist-info/WHEEL +5 -0
- attune_ai-2.0.0.dist-info/entry_points.txt +26 -0
- attune_ai-2.0.0.dist-info/licenses/LICENSE +201 -0
- attune_ai-2.0.0.dist-info/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md +101 -0
- attune_ai-2.0.0.dist-info/top_level.txt +5 -0
- attune_healthcare/__init__.py +13 -0
- attune_healthcare/monitors/__init__.py +9 -0
- attune_healthcare/monitors/clinical_protocol_monitor.py +315 -0
- attune_healthcare/monitors/monitoring/__init__.py +44 -0
- attune_healthcare/monitors/monitoring/protocol_checker.py +300 -0
- attune_healthcare/monitors/monitoring/protocol_loader.py +214 -0
- attune_healthcare/monitors/monitoring/sensor_parsers.py +306 -0
- attune_healthcare/monitors/monitoring/trajectory_analyzer.py +389 -0
- attune_llm/README.md +553 -0
- attune_llm/__init__.py +28 -0
- attune_llm/agent_factory/__init__.py +53 -0
- attune_llm/agent_factory/adapters/__init__.py +85 -0
- attune_llm/agent_factory/adapters/autogen_adapter.py +312 -0
- attune_llm/agent_factory/adapters/crewai_adapter.py +483 -0
- attune_llm/agent_factory/adapters/haystack_adapter.py +298 -0
- attune_llm/agent_factory/adapters/langchain_adapter.py +362 -0
- attune_llm/agent_factory/adapters/langgraph_adapter.py +333 -0
- attune_llm/agent_factory/adapters/native.py +228 -0
- attune_llm/agent_factory/adapters/wizard_adapter.py +423 -0
- attune_llm/agent_factory/base.py +305 -0
- attune_llm/agent_factory/crews/__init__.py +67 -0
- attune_llm/agent_factory/crews/code_review.py +1113 -0
- attune_llm/agent_factory/crews/health_check.py +1262 -0
- attune_llm/agent_factory/crews/refactoring.py +1128 -0
- attune_llm/agent_factory/crews/security_audit.py +1018 -0
- attune_llm/agent_factory/decorators.py +287 -0
- attune_llm/agent_factory/factory.py +558 -0
- attune_llm/agent_factory/framework.py +193 -0
- attune_llm/agent_factory/memory_integration.py +328 -0
- attune_llm/agent_factory/resilient.py +320 -0
- attune_llm/agents_md/__init__.py +22 -0
- attune_llm/agents_md/loader.py +218 -0
- attune_llm/agents_md/parser.py +271 -0
- attune_llm/agents_md/registry.py +307 -0
- attune_llm/claude_memory.py +466 -0
- attune_llm/cli/__init__.py +8 -0
- attune_llm/cli/sync_claude.py +487 -0
- attune_llm/code_health.py +1313 -0
- attune_llm/commands/__init__.py +51 -0
- attune_llm/commands/context.py +375 -0
- attune_llm/commands/loader.py +301 -0
- attune_llm/commands/models.py +231 -0
- attune_llm/commands/parser.py +371 -0
- attune_llm/commands/registry.py +429 -0
- attune_llm/config/__init__.py +29 -0
- attune_llm/config/unified.py +291 -0
- attune_llm/context/__init__.py +22 -0
- attune_llm/context/compaction.py +455 -0
- attune_llm/context/manager.py +434 -0
- attune_llm/contextual_patterns.py +361 -0
- attune_llm/core.py +907 -0
- attune_llm/git_pattern_extractor.py +435 -0
- attune_llm/hooks/__init__.py +24 -0
- attune_llm/hooks/config.py +306 -0
- attune_llm/hooks/executor.py +289 -0
- attune_llm/hooks/registry.py +302 -0
- attune_llm/hooks/scripts/__init__.py +39 -0
- attune_llm/hooks/scripts/evaluate_session.py +201 -0
- attune_llm/hooks/scripts/first_time_init.py +285 -0
- attune_llm/hooks/scripts/pre_compact.py +207 -0
- attune_llm/hooks/scripts/session_end.py +183 -0
- attune_llm/hooks/scripts/session_start.py +163 -0
- attune_llm/hooks/scripts/suggest_compact.py +225 -0
- attune_llm/learning/__init__.py +30 -0
- attune_llm/learning/evaluator.py +438 -0
- attune_llm/learning/extractor.py +514 -0
- attune_llm/learning/storage.py +560 -0
- attune_llm/levels.py +227 -0
- attune_llm/pattern_confidence.py +414 -0
- attune_llm/pattern_resolver.py +272 -0
- attune_llm/pattern_summary.py +350 -0
- attune_llm/providers.py +967 -0
- attune_llm/routing/__init__.py +32 -0
- attune_llm/routing/model_router.py +362 -0
- attune_llm/security/IMPLEMENTATION_SUMMARY.md +413 -0
- attune_llm/security/PHASE2_COMPLETE.md +384 -0
- attune_llm/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
- attune_llm/security/QUICK_REFERENCE.md +316 -0
- attune_llm/security/README.md +262 -0
- attune_llm/security/__init__.py +62 -0
- attune_llm/security/audit_logger.py +929 -0
- attune_llm/security/audit_logger_example.py +152 -0
- attune_llm/security/pii_scrubber.py +640 -0
- attune_llm/security/secrets_detector.py +678 -0
- attune_llm/security/secrets_detector_example.py +304 -0
- attune_llm/security/secure_memdocs.py +1192 -0
- attune_llm/security/secure_memdocs_example.py +278 -0
- attune_llm/session_status.py +745 -0
- attune_llm/state.py +246 -0
- attune_llm/utils/__init__.py +5 -0
- attune_llm/utils/tokens.py +349 -0
- attune_software/SOFTWARE_PLUGIN_README.md +57 -0
- attune_software/__init__.py +13 -0
- attune_software/cli/__init__.py +120 -0
- attune_software/cli/inspect.py +362 -0
- attune_software/cli.py +574 -0
- attune_software/plugin.py +188 -0
- workflow_scaffolding/__init__.py +11 -0
- workflow_scaffolding/__main__.py +12 -0
- workflow_scaffolding/cli.py +206 -0
- workflow_scaffolding/generator.py +265 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"""CLI Workflow Commands.
|
|
2
|
+
|
|
3
|
+
Workflow Commands for meta-workflow system.
|
|
4
|
+
|
|
5
|
+
Copyright 2025 Smart-AI-Memory
|
|
6
|
+
Licensed under Fair Source License 0.9
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
import typer
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
from rich.panel import Panel
|
|
13
|
+
from rich.table import Table
|
|
14
|
+
|
|
15
|
+
from attune.meta_workflows import (
|
|
16
|
+
MetaWorkflow,
|
|
17
|
+
PatternLearner,
|
|
18
|
+
TemplateRegistry,
|
|
19
|
+
)
|
|
20
|
+
from attune.meta_workflows.intent_detector import IntentDetector
|
|
21
|
+
|
|
22
|
+
from . import meta_workflow_app
|
|
23
|
+
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@meta_workflow_app.command("run")
|
|
28
|
+
def run_workflow(
|
|
29
|
+
template_id: str = typer.Argument(..., help="Template ID to execute"),
|
|
30
|
+
mock: bool = typer.Option(
|
|
31
|
+
True,
|
|
32
|
+
"--mock/--real",
|
|
33
|
+
help="Use mock execution (for testing)",
|
|
34
|
+
),
|
|
35
|
+
use_memory: bool = typer.Option(
|
|
36
|
+
False,
|
|
37
|
+
"--use-memory",
|
|
38
|
+
"-m",
|
|
39
|
+
help="Enable memory integration for enhanced analytics",
|
|
40
|
+
),
|
|
41
|
+
use_defaults: bool = typer.Option(
|
|
42
|
+
False,
|
|
43
|
+
"--use-defaults",
|
|
44
|
+
"-d",
|
|
45
|
+
help="Use default values instead of asking questions (non-interactive mode)",
|
|
46
|
+
),
|
|
47
|
+
user_id: str = typer.Option(
|
|
48
|
+
"cli_user",
|
|
49
|
+
"--user-id",
|
|
50
|
+
"-u",
|
|
51
|
+
help="User ID for memory integration",
|
|
52
|
+
),
|
|
53
|
+
json_output: bool = typer.Option(
|
|
54
|
+
False,
|
|
55
|
+
"--json",
|
|
56
|
+
"-j",
|
|
57
|
+
help="Output result as JSON (for programmatic use)",
|
|
58
|
+
),
|
|
59
|
+
):
|
|
60
|
+
"""Execute a meta-workflow from template.
|
|
61
|
+
|
|
62
|
+
This will:
|
|
63
|
+
1. Load the template
|
|
64
|
+
2. Ask form questions interactively (or use defaults with --use-defaults)
|
|
65
|
+
3. Generate dynamic agent team
|
|
66
|
+
4. Execute agents (mock or real)
|
|
67
|
+
5. Save results (files + optional memory)
|
|
68
|
+
6. Display summary
|
|
69
|
+
|
|
70
|
+
Examples:
|
|
71
|
+
empathy meta-workflow run release-prep
|
|
72
|
+
empathy meta-workflow run test-coverage-boost --real
|
|
73
|
+
empathy meta-workflow run manage-docs --use-defaults
|
|
74
|
+
empathy meta-workflow run release-prep --json --use-defaults
|
|
75
|
+
"""
|
|
76
|
+
import json
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
# Load template
|
|
80
|
+
if not json_output:
|
|
81
|
+
console.print(f"\n[bold]Loading template:[/bold] {template_id}")
|
|
82
|
+
registry = TemplateRegistry()
|
|
83
|
+
template = registry.load_template(template_id)
|
|
84
|
+
|
|
85
|
+
if not template:
|
|
86
|
+
if json_output:
|
|
87
|
+
print(json.dumps({"success": False, "error": f"Template not found: {template_id}"}))
|
|
88
|
+
else:
|
|
89
|
+
console.print(f"[red]Template not found:[/red] {template_id}")
|
|
90
|
+
raise typer.Exit(code=1)
|
|
91
|
+
|
|
92
|
+
if not json_output:
|
|
93
|
+
console.print(f"[green]✓[/green] {template.name}")
|
|
94
|
+
|
|
95
|
+
# Setup memory if requested
|
|
96
|
+
pattern_learner = None
|
|
97
|
+
if use_memory:
|
|
98
|
+
if not json_output:
|
|
99
|
+
console.print("\n[bold]Initializing memory integration...[/bold]")
|
|
100
|
+
from attune.memory.unified import UnifiedMemory
|
|
101
|
+
|
|
102
|
+
try:
|
|
103
|
+
memory = UnifiedMemory(user_id=user_id)
|
|
104
|
+
pattern_learner = PatternLearner(memory=memory)
|
|
105
|
+
if not json_output:
|
|
106
|
+
console.print("[green]✓[/green] Memory enabled")
|
|
107
|
+
except Exception as e:
|
|
108
|
+
if not json_output:
|
|
109
|
+
console.print(f"[yellow]Warning:[/yellow] Memory initialization failed: {e}")
|
|
110
|
+
console.print("[yellow]Continuing without memory integration[/yellow]")
|
|
111
|
+
|
|
112
|
+
# Create workflow
|
|
113
|
+
workflow = MetaWorkflow(
|
|
114
|
+
template=template,
|
|
115
|
+
pattern_learner=pattern_learner,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Execute (will ask questions via AskUserQuestion unless --use-defaults)
|
|
119
|
+
if not json_output:
|
|
120
|
+
console.print("\n[bold]Executing workflow...[/bold]")
|
|
121
|
+
console.print(f"Mode: {'Mock' if mock else 'Real'}")
|
|
122
|
+
if use_defaults:
|
|
123
|
+
console.print("[cyan]Using default values (non-interactive)[/cyan]")
|
|
124
|
+
|
|
125
|
+
result = workflow.execute(mock_execution=mock, use_defaults=use_defaults)
|
|
126
|
+
|
|
127
|
+
# JSON output mode - print result as JSON and exit
|
|
128
|
+
if json_output:
|
|
129
|
+
output = {
|
|
130
|
+
"run_id": result.run_id,
|
|
131
|
+
"template_id": template_id,
|
|
132
|
+
"timestamp": result.timestamp,
|
|
133
|
+
"success": result.success,
|
|
134
|
+
"error": result.error,
|
|
135
|
+
"total_cost": result.total_cost,
|
|
136
|
+
"total_duration": result.total_duration,
|
|
137
|
+
"agents_created": len(result.agents_created),
|
|
138
|
+
"form_responses": {
|
|
139
|
+
"template_id": result.form_responses.template_id,
|
|
140
|
+
"responses": result.form_responses.responses,
|
|
141
|
+
"timestamp": result.form_responses.timestamp,
|
|
142
|
+
"response_id": result.form_responses.response_id,
|
|
143
|
+
},
|
|
144
|
+
"agent_results": [
|
|
145
|
+
{
|
|
146
|
+
"agent_id": ar.agent_id,
|
|
147
|
+
"role": ar.role,
|
|
148
|
+
"success": ar.success,
|
|
149
|
+
"cost": ar.cost,
|
|
150
|
+
"duration": ar.duration,
|
|
151
|
+
"tier_used": ar.tier_used,
|
|
152
|
+
"output": ar.output,
|
|
153
|
+
"error": ar.error,
|
|
154
|
+
}
|
|
155
|
+
for ar in result.agent_results
|
|
156
|
+
],
|
|
157
|
+
}
|
|
158
|
+
print(json.dumps(output))
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
# Display summary (normal mode)
|
|
162
|
+
console.print("\n[bold green]Execution Complete![/bold green]\n")
|
|
163
|
+
|
|
164
|
+
summary_lines = [
|
|
165
|
+
f"[bold]Run ID:[/bold] {result.run_id}",
|
|
166
|
+
f"[bold]Status:[/bold] {'✅ Success' if result.success else '❌ Failed'}",
|
|
167
|
+
"",
|
|
168
|
+
f"[bold]Agents Created:[/bold] {len(result.agents_created)}",
|
|
169
|
+
f"[bold]Agents Executed:[/bold] {len(result.agent_results)}",
|
|
170
|
+
f"[bold]Total Cost:[/bold] ${result.total_cost:.2f}",
|
|
171
|
+
f"[bold]Duration:[/bold] {result.total_duration:.1f}s",
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
if result.error:
|
|
175
|
+
summary_lines.append(f"\n[bold red]Error:[/bold red] {result.error}")
|
|
176
|
+
|
|
177
|
+
console.print(
|
|
178
|
+
Panel("\n".join(summary_lines), title="Execution Summary", border_style="green")
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Show agents
|
|
182
|
+
console.print("\n[bold]Agents Executed:[/bold]\n")
|
|
183
|
+
|
|
184
|
+
for agent_result in result.agent_results:
|
|
185
|
+
status = "✅" if agent_result.success else "❌"
|
|
186
|
+
console.print(
|
|
187
|
+
f" {status} [cyan]{agent_result.role}[/cyan] "
|
|
188
|
+
f"(tier: {agent_result.tier_used}, cost: ${agent_result.cost:.2f})"
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# Show where results saved
|
|
192
|
+
console.print("\n[bold]Results saved to:[/bold]")
|
|
193
|
+
console.print(f" 📁 Files: .attune/meta_workflows/executions/{result.run_id}/")
|
|
194
|
+
if use_memory and pattern_learner and pattern_learner.memory:
|
|
195
|
+
console.print(" 🧠 Memory: Long-term storage")
|
|
196
|
+
|
|
197
|
+
console.print(f"\n[dim]View details: empathy meta-workflow show {result.run_id}[/dim]")
|
|
198
|
+
console.print()
|
|
199
|
+
|
|
200
|
+
except Exception as e:
|
|
201
|
+
if json_output:
|
|
202
|
+
print(json.dumps({"success": False, "error": str(e)}))
|
|
203
|
+
else:
|
|
204
|
+
console.print(f"\n[red]Error:[/red] {e}")
|
|
205
|
+
import traceback
|
|
206
|
+
|
|
207
|
+
traceback.print_exc()
|
|
208
|
+
raise typer.Exit(code=1)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
@meta_workflow_app.command("ask")
|
|
213
|
+
def natural_language_run(
|
|
214
|
+
request: str = typer.Argument(..., help="Natural language description of what you need"),
|
|
215
|
+
auto_run: bool = typer.Option(
|
|
216
|
+
False,
|
|
217
|
+
"--auto",
|
|
218
|
+
"-a",
|
|
219
|
+
help="Automatically run if high confidence match (>60%)",
|
|
220
|
+
),
|
|
221
|
+
mock: bool = typer.Option(
|
|
222
|
+
True,
|
|
223
|
+
"--mock/--real",
|
|
224
|
+
help="Use mock execution (for testing)",
|
|
225
|
+
),
|
|
226
|
+
use_defaults: bool = typer.Option(
|
|
227
|
+
True,
|
|
228
|
+
"--use-defaults/--interactive",
|
|
229
|
+
"-d/-i",
|
|
230
|
+
help="Use default values (non-interactive)",
|
|
231
|
+
),
|
|
232
|
+
):
|
|
233
|
+
"""Create agent teams using natural language.
|
|
234
|
+
|
|
235
|
+
Analyzes your request and suggests appropriate agent teams.
|
|
236
|
+
Use --auto to automatically run the best match.
|
|
237
|
+
|
|
238
|
+
Examples:
|
|
239
|
+
empathy meta-workflow ask "I need to prepare for a release"
|
|
240
|
+
empathy meta-workflow ask "improve my test coverage" --auto --real
|
|
241
|
+
empathy meta-workflow ask "check if documentation is up to date"
|
|
242
|
+
"""
|
|
243
|
+
try:
|
|
244
|
+
detector = IntentDetector()
|
|
245
|
+
matches = detector.detect(request)
|
|
246
|
+
|
|
247
|
+
if not matches:
|
|
248
|
+
console.print(
|
|
249
|
+
"\n[yellow]I couldn't identify a matching agent team for your request.[/yellow]"
|
|
250
|
+
)
|
|
251
|
+
console.print("\n[bold]Available agent teams:[/bold]")
|
|
252
|
+
console.print(
|
|
253
|
+
" • [cyan]release-prep[/cyan] - Security, testing, code quality, documentation checks"
|
|
254
|
+
)
|
|
255
|
+
console.print(
|
|
256
|
+
" • [cyan]test-coverage-boost[/cyan] - Analyze and improve test coverage"
|
|
257
|
+
)
|
|
258
|
+
console.print(" • [cyan]test-maintenance[/cyan] - Test lifecycle management")
|
|
259
|
+
console.print(" • [cyan]manage-docs[/cyan] - Documentation sync and gap detection")
|
|
260
|
+
console.print("\n[dim]Try: empathy meta-workflow run <template-id>[/dim]\n")
|
|
261
|
+
return
|
|
262
|
+
|
|
263
|
+
# Show detected matches
|
|
264
|
+
console.print(f'\n[bold]Analyzing:[/bold] "{request}"\n')
|
|
265
|
+
|
|
266
|
+
best_match = matches[0]
|
|
267
|
+
confidence_pct = int(best_match.confidence * 100)
|
|
268
|
+
|
|
269
|
+
# If auto-run and high confidence, run immediately
|
|
270
|
+
if auto_run and best_match.confidence >= 0.6:
|
|
271
|
+
console.print(
|
|
272
|
+
f"[bold green]Auto-detected:[/bold green] {best_match.template_name} ({confidence_pct}% confidence)"
|
|
273
|
+
)
|
|
274
|
+
console.print(f"[dim]{best_match.description}[/dim]\n")
|
|
275
|
+
console.print(f"[bold]Running {best_match.template_id}...[/bold]\n")
|
|
276
|
+
|
|
277
|
+
# Run the workflow
|
|
278
|
+
run_workflow(
|
|
279
|
+
template_id=best_match.template_id,
|
|
280
|
+
mock=mock,
|
|
281
|
+
use_memory=False,
|
|
282
|
+
use_defaults=use_defaults,
|
|
283
|
+
user_id="cli_user",
|
|
284
|
+
)
|
|
285
|
+
return
|
|
286
|
+
|
|
287
|
+
# Show suggestions
|
|
288
|
+
console.print("[bold]Suggested Agent Teams:[/bold]\n")
|
|
289
|
+
|
|
290
|
+
for i, match in enumerate(matches[:3], 1):
|
|
291
|
+
confidence = int(match.confidence * 100)
|
|
292
|
+
style = (
|
|
293
|
+
"green"
|
|
294
|
+
if match.confidence >= 0.6
|
|
295
|
+
else "yellow" if match.confidence >= 0.4 else "dim"
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
console.print(f" {i}. [{style}]{match.template_name}[/{style}] ({confidence}% match)")
|
|
299
|
+
console.print(f" [dim]{match.description}[/dim]")
|
|
300
|
+
if match.matched_keywords:
|
|
301
|
+
keywords = ", ".join(match.matched_keywords[:5])
|
|
302
|
+
console.print(f" [dim]Matched: {keywords}[/dim]")
|
|
303
|
+
console.print(f" Run: [cyan]empathy meta-workflow run {match.template_id}[/cyan]")
|
|
304
|
+
console.print()
|
|
305
|
+
|
|
306
|
+
# Prompt to run best match
|
|
307
|
+
if best_match.confidence >= 0.5:
|
|
308
|
+
console.print(
|
|
309
|
+
"[bold]Quick Run:[/bold] Use [cyan]--auto[/cyan] to automatically run the best match"
|
|
310
|
+
)
|
|
311
|
+
console.print(
|
|
312
|
+
f'[dim]Example: empathy meta-workflow ask "{request}" --auto --real[/dim]\n'
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
except Exception as e:
|
|
316
|
+
console.print(f"[red]Error:[/red] {e}")
|
|
317
|
+
raise typer.Exit(code=1)
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
@meta_workflow_app.command("detect")
|
|
322
|
+
def detect_intent(
|
|
323
|
+
request: str = typer.Argument(..., help="Natural language request to analyze"),
|
|
324
|
+
threshold: float = typer.Option(
|
|
325
|
+
0.3,
|
|
326
|
+
"--threshold",
|
|
327
|
+
"-t",
|
|
328
|
+
help="Minimum confidence threshold (0.0-1.0)",
|
|
329
|
+
),
|
|
330
|
+
):
|
|
331
|
+
"""Detect intent from natural language without running.
|
|
332
|
+
|
|
333
|
+
Useful for testing what agent teams would be suggested for a given request.
|
|
334
|
+
|
|
335
|
+
Examples:
|
|
336
|
+
empathy meta-workflow detect "check security vulnerabilities"
|
|
337
|
+
empathy meta-workflow detect "generate more tests" --threshold 0.5
|
|
338
|
+
"""
|
|
339
|
+
try:
|
|
340
|
+
detector = IntentDetector()
|
|
341
|
+
matches = detector.detect(request, threshold=threshold)
|
|
342
|
+
|
|
343
|
+
console.print(f'\n[bold]Intent Analysis:[/bold] "{request}"\n')
|
|
344
|
+
console.print(f"[dim]Threshold: {threshold:.0%}[/dim]\n")
|
|
345
|
+
|
|
346
|
+
if not matches:
|
|
347
|
+
console.print("[yellow]No matches above threshold.[/yellow]\n")
|
|
348
|
+
return
|
|
349
|
+
|
|
350
|
+
# Create table
|
|
351
|
+
table = Table(show_header=True)
|
|
352
|
+
table.add_column("Template", style="cyan")
|
|
353
|
+
table.add_column("Confidence", justify="right")
|
|
354
|
+
table.add_column("Matched Keywords")
|
|
355
|
+
table.add_column("Would Auto-Run?")
|
|
356
|
+
|
|
357
|
+
for match in matches:
|
|
358
|
+
confidence = f"{match.confidence:.0%}"
|
|
359
|
+
keywords = ", ".join(match.matched_keywords[:4])
|
|
360
|
+
auto_run = "✅ Yes" if match.confidence >= 0.6 else "❌ No"
|
|
361
|
+
|
|
362
|
+
table.add_row(
|
|
363
|
+
match.template_id,
|
|
364
|
+
confidence,
|
|
365
|
+
keywords or "-",
|
|
366
|
+
auto_run,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
console.print(table)
|
|
370
|
+
console.print()
|
|
371
|
+
|
|
372
|
+
except Exception as e:
|
|
373
|
+
console.print(f"[red]Error:[/red] {e}")
|
|
374
|
+
raise typer.Exit(code=1)
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
# =============================================================================
|
|
378
|
+
# Analytics Commands
|
|
379
|
+
# =============================================================================
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""CLI Commands for Meta-Workflow System (Backward Compatible Entry Point).
|
|
2
|
+
|
|
3
|
+
This module maintains backward compatibility by re-exporting all CLI commands
|
|
4
|
+
from the cli_commands package.
|
|
5
|
+
|
|
6
|
+
For new code, import from the package directly:
|
|
7
|
+
from attune.meta_workflows.cli_commands import meta_workflow_app
|
|
8
|
+
|
|
9
|
+
Copyright 2025 Smart-AI-Memory
|
|
10
|
+
Licensed under Fair Source License 0.9
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
# Re-export all commands and the Typer app from the package
|
|
14
|
+
from .cli_commands import (
|
|
15
|
+
cleanup_executions,
|
|
16
|
+
create_agent,
|
|
17
|
+
create_team,
|
|
18
|
+
detect_intent,
|
|
19
|
+
generate_plan_cmd,
|
|
20
|
+
inspect_template,
|
|
21
|
+
list_runs,
|
|
22
|
+
list_templates,
|
|
23
|
+
meta_workflow_app,
|
|
24
|
+
natural_language_run,
|
|
25
|
+
run_workflow,
|
|
26
|
+
search_memory,
|
|
27
|
+
show_analytics,
|
|
28
|
+
show_execution,
|
|
29
|
+
show_migration_guide,
|
|
30
|
+
show_session_stats,
|
|
31
|
+
suggest_defaults_cmd,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
# Typer app
|
|
36
|
+
"meta_workflow_app",
|
|
37
|
+
# Template commands
|
|
38
|
+
"list_templates",
|
|
39
|
+
"inspect_template",
|
|
40
|
+
"generate_plan_cmd",
|
|
41
|
+
# Workflow commands
|
|
42
|
+
"run_workflow",
|
|
43
|
+
"natural_language_run",
|
|
44
|
+
"detect_intent",
|
|
45
|
+
# Analytics commands
|
|
46
|
+
"show_analytics",
|
|
47
|
+
"list_runs",
|
|
48
|
+
"show_execution",
|
|
49
|
+
"cleanup_executions",
|
|
50
|
+
# Memory commands
|
|
51
|
+
"search_memory",
|
|
52
|
+
"show_session_stats",
|
|
53
|
+
# Config commands
|
|
54
|
+
"suggest_defaults_cmd",
|
|
55
|
+
"show_migration_guide",
|
|
56
|
+
# Agent commands
|
|
57
|
+
"create_agent",
|
|
58
|
+
"create_team",
|
|
59
|
+
]
|