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,321 @@
|
|
|
1
|
+
"""CLI Agent Commands.
|
|
2
|
+
|
|
3
|
+
Agent 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
|
+
|
|
14
|
+
from attune.config import _validate_file_path
|
|
15
|
+
|
|
16
|
+
from . import meta_workflow_app
|
|
17
|
+
|
|
18
|
+
console = Console()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@meta_workflow_app.command("create-agent")
|
|
22
|
+
def create_agent(
|
|
23
|
+
interactive: bool = typer.Option(
|
|
24
|
+
True,
|
|
25
|
+
"--interactive/--quick",
|
|
26
|
+
"-i/-q",
|
|
27
|
+
help="Use interactive Socratic-guided creation",
|
|
28
|
+
),
|
|
29
|
+
name: str = typer.Option(
|
|
30
|
+
None,
|
|
31
|
+
"--name",
|
|
32
|
+
"-n",
|
|
33
|
+
help="Agent name (for quick mode)",
|
|
34
|
+
),
|
|
35
|
+
role: str = typer.Option(
|
|
36
|
+
None,
|
|
37
|
+
"--role",
|
|
38
|
+
"-r",
|
|
39
|
+
help="Agent role description (for quick mode)",
|
|
40
|
+
),
|
|
41
|
+
tier: str = typer.Option(
|
|
42
|
+
"capable",
|
|
43
|
+
"--tier",
|
|
44
|
+
"-t",
|
|
45
|
+
help="Model tier: cheap, capable, or premium",
|
|
46
|
+
),
|
|
47
|
+
output_file: str = typer.Option(
|
|
48
|
+
None,
|
|
49
|
+
"--output",
|
|
50
|
+
"-o",
|
|
51
|
+
help="Save agent spec to file",
|
|
52
|
+
),
|
|
53
|
+
):
|
|
54
|
+
"""Create a custom AI agent with Socratic-guided questions.
|
|
55
|
+
|
|
56
|
+
Interactive mode asks clarifying questions to help you define:
|
|
57
|
+
- Agent capabilities and responsibilities
|
|
58
|
+
- Model tier selection (cost vs quality tradeoff)
|
|
59
|
+
- Tools and success criteria
|
|
60
|
+
|
|
61
|
+
Quick mode creates an agent directly from provided options.
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
empathy meta-workflow create-agent --interactive
|
|
65
|
+
empathy meta-workflow create-agent -q --name "SecurityBot" --role "Scan for vulnerabilities"
|
|
66
|
+
"""
|
|
67
|
+
import json
|
|
68
|
+
|
|
69
|
+
if interactive:
|
|
70
|
+
console.print("\n[bold cyan]🤖 Create Custom Agent - Socratic Guide[/bold cyan]\n")
|
|
71
|
+
console.print("[dim]I'll ask you a few questions to help define your agent.[/dim]\n")
|
|
72
|
+
|
|
73
|
+
# Question 1: Purpose
|
|
74
|
+
console.print("[bold]1. What should this agent do?[/bold]")
|
|
75
|
+
purpose = typer.prompt(" Describe the agent's main purpose")
|
|
76
|
+
|
|
77
|
+
# Question 2: Specific tasks
|
|
78
|
+
console.print("\n[bold]2. What specific tasks will it perform?[/bold]")
|
|
79
|
+
console.print(
|
|
80
|
+
" [dim]Examples: analyze code, generate tests, review PRs, write docs[/dim]"
|
|
81
|
+
)
|
|
82
|
+
tasks = typer.prompt(" List main tasks (comma-separated)")
|
|
83
|
+
|
|
84
|
+
# Question 3: Tier selection
|
|
85
|
+
console.print("\n[bold]3. What quality/cost balance do you need?[/bold]")
|
|
86
|
+
console.print(" [dim]cheap[/dim] - Fast & low-cost, good for simple analysis")
|
|
87
|
+
console.print(" [dim]capable[/dim] - Balanced, good for most development tasks")
|
|
88
|
+
console.print(" [dim]premium[/dim] - Highest quality, for complex reasoning")
|
|
89
|
+
tier = typer.prompt(" Select tier", default="capable")
|
|
90
|
+
|
|
91
|
+
# Question 4: Tools
|
|
92
|
+
console.print("\n[bold]4. What tools should it have access to?[/bold]")
|
|
93
|
+
console.print(" [dim]Examples: file_read, file_write, web_search, code_exec[/dim]")
|
|
94
|
+
tools_input = typer.prompt(" List tools (comma-separated, or 'none')", default="none")
|
|
95
|
+
tools = [t.strip() for t in tools_input.split(",")] if tools_input != "none" else []
|
|
96
|
+
|
|
97
|
+
# Question 5: Success criteria
|
|
98
|
+
console.print("\n[bold]5. How will you measure success?[/bold]")
|
|
99
|
+
success = typer.prompt(" Describe success criteria")
|
|
100
|
+
|
|
101
|
+
# Generate name from purpose
|
|
102
|
+
name = purpose.split()[0].title() + "Agent" if not name else name
|
|
103
|
+
|
|
104
|
+
# Build agent spec
|
|
105
|
+
agent_spec = {
|
|
106
|
+
"name": name,
|
|
107
|
+
"role": purpose,
|
|
108
|
+
"tasks": [t.strip() for t in tasks.split(",")],
|
|
109
|
+
"tier": tier,
|
|
110
|
+
"tools": tools,
|
|
111
|
+
"success_criteria": success,
|
|
112
|
+
"base_template": "generic",
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
else:
|
|
116
|
+
# Quick mode
|
|
117
|
+
if not name or not role:
|
|
118
|
+
console.print("[red]Error:[/red] --name and --role required in quick mode")
|
|
119
|
+
console.print("[dim]Use --interactive for guided creation[/dim]")
|
|
120
|
+
raise typer.Exit(code=1)
|
|
121
|
+
|
|
122
|
+
agent_spec = {
|
|
123
|
+
"name": name,
|
|
124
|
+
"role": role,
|
|
125
|
+
"tier": tier,
|
|
126
|
+
"tools": [],
|
|
127
|
+
"success_criteria": "Task completed successfully",
|
|
128
|
+
"base_template": "generic",
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
# Display result
|
|
132
|
+
console.print("\n[bold green]✓ Agent Specification Created[/bold green]\n")
|
|
133
|
+
|
|
134
|
+
spec_json = json.dumps(agent_spec, indent=2)
|
|
135
|
+
console.print(Panel(spec_json, title=f"Agent: {agent_spec['name']}", border_style="green"))
|
|
136
|
+
|
|
137
|
+
# Save if requested
|
|
138
|
+
if output_file:
|
|
139
|
+
validated_output = _validate_file_path(output_file)
|
|
140
|
+
validated_output.write_text(spec_json)
|
|
141
|
+
console.print(f"\n[green]Saved to:[/green] {validated_output}")
|
|
142
|
+
|
|
143
|
+
# Show usage
|
|
144
|
+
console.print("\n[bold]Next Steps:[/bold]")
|
|
145
|
+
console.print(
|
|
146
|
+
" 1. Use this agent in a custom team: [cyan]empathy meta-workflow create-team[/cyan]"
|
|
147
|
+
)
|
|
148
|
+
console.print(" 2. Or add to an existing template manually")
|
|
149
|
+
console.print(f"\n[dim]Agent tier '{tier}' will cost approximately:")
|
|
150
|
+
costs = {"cheap": "$0.001-0.01", "capable": "$0.01-0.05", "premium": "$0.05-0.20"}
|
|
151
|
+
console.print(f" {costs.get(tier, costs['capable'])} per execution[/dim]\n")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@meta_workflow_app.command("create-team")
|
|
156
|
+
def create_team(
|
|
157
|
+
interactive: bool = typer.Option(
|
|
158
|
+
True,
|
|
159
|
+
"--interactive/--quick",
|
|
160
|
+
"-i/-q",
|
|
161
|
+
help="Use interactive Socratic-guided creation",
|
|
162
|
+
),
|
|
163
|
+
name: str = typer.Option(
|
|
164
|
+
None,
|
|
165
|
+
"--name",
|
|
166
|
+
"-n",
|
|
167
|
+
help="Team name (for quick mode)",
|
|
168
|
+
),
|
|
169
|
+
goal: str = typer.Option(
|
|
170
|
+
None,
|
|
171
|
+
"--goal",
|
|
172
|
+
"-g",
|
|
173
|
+
help="Team goal description (for quick mode)",
|
|
174
|
+
),
|
|
175
|
+
output_file: str = typer.Option(
|
|
176
|
+
None,
|
|
177
|
+
"--output",
|
|
178
|
+
"-o",
|
|
179
|
+
help="Save team template to file",
|
|
180
|
+
),
|
|
181
|
+
):
|
|
182
|
+
"""Create a custom AI agent team with Socratic-guided workflow.
|
|
183
|
+
|
|
184
|
+
Interactive mode asks clarifying questions to help you define:
|
|
185
|
+
- Team composition and agent roles
|
|
186
|
+
- Collaboration pattern (sequential, parallel, mixed)
|
|
187
|
+
- Success criteria and cost estimates
|
|
188
|
+
|
|
189
|
+
Examples:
|
|
190
|
+
empathy meta-workflow create-team --interactive
|
|
191
|
+
empathy meta-workflow create-team -q --name "ReviewTeam" --goal "Code review pipeline"
|
|
192
|
+
"""
|
|
193
|
+
import json
|
|
194
|
+
|
|
195
|
+
if interactive:
|
|
196
|
+
console.print("\n[bold cyan]👥 Create Custom Agent Team - Socratic Guide[/bold cyan]\n")
|
|
197
|
+
console.print("[dim]I'll help you design a team of agents that work together.[/dim]\n")
|
|
198
|
+
|
|
199
|
+
# Question 1: Goal
|
|
200
|
+
console.print("[bold]1. What is the team's overall goal?[/bold]")
|
|
201
|
+
console.print(" [dim]Example: prepare code for production release[/dim]")
|
|
202
|
+
goal = typer.prompt(" Describe the team's mission")
|
|
203
|
+
|
|
204
|
+
# Question 2: Agent count
|
|
205
|
+
console.print("\n[bold]2. How many agents should be on this team?[/bold]")
|
|
206
|
+
console.print(" [dim]Typical teams have 2-5 agents with specialized roles[/dim]")
|
|
207
|
+
agent_count = typer.prompt(" Number of agents", default="3")
|
|
208
|
+
agent_count = int(agent_count)
|
|
209
|
+
|
|
210
|
+
# Question 3: Agent roles
|
|
211
|
+
console.print(f"\n[bold]3. Define {agent_count} agent roles:[/bold]")
|
|
212
|
+
console.print(
|
|
213
|
+
" [dim]Common roles: analyst, reviewer, generator, validator, reporter[/dim]"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
agents = []
|
|
217
|
+
for i in range(agent_count):
|
|
218
|
+
console.print(f"\n [bold]Agent {i + 1}:[/bold]")
|
|
219
|
+
role = typer.prompt(" Role name")
|
|
220
|
+
purpose = typer.prompt(" What does this agent do?")
|
|
221
|
+
tier = typer.prompt(" Tier (cheap/capable/premium)", default="capable")
|
|
222
|
+
|
|
223
|
+
agents.append(
|
|
224
|
+
{
|
|
225
|
+
"role": role,
|
|
226
|
+
"purpose": purpose,
|
|
227
|
+
"tier": tier,
|
|
228
|
+
"base_template": "generic",
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
# Question 4: Collaboration pattern
|
|
233
|
+
console.print("\n[bold]4. How should agents collaborate?[/bold]")
|
|
234
|
+
console.print(" [dim]sequential[/dim] - Each agent waits for the previous one")
|
|
235
|
+
console.print(" [dim]parallel[/dim] - All agents run simultaneously")
|
|
236
|
+
console.print(" [dim]mixed[/dim] - Some parallel, then sequential synthesis")
|
|
237
|
+
pattern = typer.prompt(" Collaboration pattern", default="sequential")
|
|
238
|
+
|
|
239
|
+
# Question 5: Team name
|
|
240
|
+
console.print("\n[bold]5. What should we call this team?[/bold]")
|
|
241
|
+
name = typer.prompt(" Team name", default=goal.split()[0].title() + "Team")
|
|
242
|
+
|
|
243
|
+
# Build team template
|
|
244
|
+
team_template = {
|
|
245
|
+
"id": name.lower().replace(" ", "-"),
|
|
246
|
+
"name": name,
|
|
247
|
+
"description": goal,
|
|
248
|
+
"collaboration_pattern": pattern,
|
|
249
|
+
"agents": agents,
|
|
250
|
+
"estimated_cost_range": {
|
|
251
|
+
"min": len(agents) * 0.01,
|
|
252
|
+
"max": len(agents) * 0.15,
|
|
253
|
+
},
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
else:
|
|
257
|
+
# Quick mode
|
|
258
|
+
if not name or not goal:
|
|
259
|
+
console.print("[red]Error:[/red] --name and --goal required in quick mode")
|
|
260
|
+
console.print("[dim]Use --interactive for guided creation[/dim]")
|
|
261
|
+
raise typer.Exit(code=1)
|
|
262
|
+
|
|
263
|
+
# Create a default 3-agent team
|
|
264
|
+
team_template = {
|
|
265
|
+
"id": name.lower().replace(" ", "-"),
|
|
266
|
+
"name": name,
|
|
267
|
+
"description": goal,
|
|
268
|
+
"collaboration_pattern": "sequential",
|
|
269
|
+
"agents": [
|
|
270
|
+
{
|
|
271
|
+
"role": "Analyst",
|
|
272
|
+
"purpose": "Analyze requirements",
|
|
273
|
+
"tier": "cheap",
|
|
274
|
+
"base_template": "generic",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"role": "Executor",
|
|
278
|
+
"purpose": "Perform main task",
|
|
279
|
+
"tier": "capable",
|
|
280
|
+
"base_template": "generic",
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"role": "Validator",
|
|
284
|
+
"purpose": "Verify results",
|
|
285
|
+
"tier": "capable",
|
|
286
|
+
"base_template": "generic",
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
"estimated_cost_range": {"min": 0.03, "max": 0.45},
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
# Display result
|
|
293
|
+
console.print("\n[bold green]✓ Agent Team Template Created[/bold green]\n")
|
|
294
|
+
|
|
295
|
+
spec_json = json.dumps(team_template, indent=2)
|
|
296
|
+
console.print(Panel(spec_json, title=f"Team: {team_template['name']}", border_style="green"))
|
|
297
|
+
|
|
298
|
+
# Save if requested
|
|
299
|
+
if output_file:
|
|
300
|
+
validated_output = _validate_file_path(output_file)
|
|
301
|
+
validated_output.write_text(spec_json)
|
|
302
|
+
console.print(f"\n[green]Saved to:[/green] {validated_output}")
|
|
303
|
+
|
|
304
|
+
# Show usage
|
|
305
|
+
console.print("\n[bold]Next Steps:[/bold]")
|
|
306
|
+
console.print(
|
|
307
|
+
f" 1. Save as template: [cyan]--output .attune/meta_workflows/templates/{team_template['id']}.json[/cyan]"
|
|
308
|
+
)
|
|
309
|
+
console.print(
|
|
310
|
+
f" 2. Run the team: [cyan]empathy meta-workflow run {team_template['id']}[/cyan]"
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
cost_min = team_template["estimated_cost_range"]["min"]
|
|
314
|
+
cost_max = team_template["estimated_cost_range"]["max"]
|
|
315
|
+
console.print(f"\n[dim]Estimated cost: ${cost_min:.2f} - ${cost_max:.2f} per execution[/dim]\n")
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
if __name__ == "__main__":
|
|
319
|
+
meta_workflow_app()
|
|
320
|
+
|
|
321
|
+
|