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,331 @@
|
|
|
1
|
+
"""Help and information commands for the CLI.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib.metadata import version as get_version
|
|
8
|
+
|
|
9
|
+
from attune.logging_config import get_logger
|
|
10
|
+
|
|
11
|
+
from ..utils.data import CHEATSHEET, EXPLAIN_CONTENT
|
|
12
|
+
from ..utils.helpers import _file_exists, _show_achievements
|
|
13
|
+
|
|
14
|
+
logger = get_logger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def cmd_version(args):
|
|
18
|
+
"""Display version information for Empathy Framework.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
args: Namespace object from argparse (no additional attributes used).
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
None: Prints version, copyright, and license information to stdout.
|
|
25
|
+
"""
|
|
26
|
+
logger.info("Displaying version information")
|
|
27
|
+
try:
|
|
28
|
+
version = get_version("empathy")
|
|
29
|
+
except Exception as e:
|
|
30
|
+
# Package metadata not available or invalid (development install)
|
|
31
|
+
logger.debug(f"Version not available: {e}")
|
|
32
|
+
version = "unknown"
|
|
33
|
+
logger.info(f"Empathy v{version}")
|
|
34
|
+
logger.info("Copyright 2025 Smart-AI-Memory")
|
|
35
|
+
logger.info("Licensed under Fair Source License 0.9")
|
|
36
|
+
logger.info("\n✨ Built with Claude Code + MemDocs + VS Code transformative stack")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def cmd_cheatsheet(args):
|
|
40
|
+
"""Display quick reference cheatsheet for all commands.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
args: Namespace object from argparse with attributes:
|
|
44
|
+
- category (str | None): Specific category to show (e.g., 'daily-workflow').
|
|
45
|
+
- compact (bool): If True, show commands only without descriptions.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
None: Prints formatted cheatsheet to stdout.
|
|
49
|
+
"""
|
|
50
|
+
category = getattr(args, "category", None)
|
|
51
|
+
compact = getattr(args, "compact", False)
|
|
52
|
+
|
|
53
|
+
print()
|
|
54
|
+
print("=" * 60)
|
|
55
|
+
print(" EMPATHY FRAMEWORK - QUICK REFERENCE")
|
|
56
|
+
print("=" * 60)
|
|
57
|
+
|
|
58
|
+
if category:
|
|
59
|
+
# Show specific category
|
|
60
|
+
category_title = category.replace("-", " ").title()
|
|
61
|
+
if category_title in CHEATSHEET:
|
|
62
|
+
print(f"\n {category_title}")
|
|
63
|
+
print(" " + "-" * 40)
|
|
64
|
+
for cmd, desc in CHEATSHEET[category_title]:
|
|
65
|
+
if compact:
|
|
66
|
+
print(f" {cmd}")
|
|
67
|
+
else:
|
|
68
|
+
print(f" {cmd:35} {desc}")
|
|
69
|
+
else:
|
|
70
|
+
print(f"\n Unknown category: {category}")
|
|
71
|
+
print(" Available: " + ", ".join(k.lower().replace(" ", "-") for k in CHEATSHEET))
|
|
72
|
+
else:
|
|
73
|
+
# Show all categories
|
|
74
|
+
for cat_name, commands in CHEATSHEET.items():
|
|
75
|
+
print(f"\n {cat_name}")
|
|
76
|
+
print(" " + "-" * 40)
|
|
77
|
+
for cmd, desc in commands:
|
|
78
|
+
if compact:
|
|
79
|
+
print(f" {cmd}")
|
|
80
|
+
else:
|
|
81
|
+
print(f" {cmd:35} {desc}")
|
|
82
|
+
|
|
83
|
+
print()
|
|
84
|
+
print("-" * 60)
|
|
85
|
+
print(" Use: empathy <command> --explain for detailed explanation")
|
|
86
|
+
print(" Use: empathy onboard for interactive tutorial")
|
|
87
|
+
print("=" * 60)
|
|
88
|
+
print()
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def cmd_onboard(args):
|
|
92
|
+
"""Interactive onboarding tutorial for new users.
|
|
93
|
+
|
|
94
|
+
Guides users through setup steps: init, learn, sync-claude, health check.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
args: Namespace object from argparse with attributes:
|
|
98
|
+
- step (int | None): Jump to specific tutorial step (1-5).
|
|
99
|
+
- reset (bool): If True, reset onboarding progress.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
None: Prints tutorial content and tracks progress.
|
|
103
|
+
"""
|
|
104
|
+
from attune.discovery import get_engine
|
|
105
|
+
|
|
106
|
+
step = getattr(args, "step", None)
|
|
107
|
+
reset = getattr(args, "reset", False)
|
|
108
|
+
|
|
109
|
+
engine = get_engine()
|
|
110
|
+
stats = engine.get_stats()
|
|
111
|
+
|
|
112
|
+
if reset:
|
|
113
|
+
# Reset onboarding progress
|
|
114
|
+
engine.state["onboarding_step"] = 0
|
|
115
|
+
engine.state["onboarding_completed"] = []
|
|
116
|
+
engine._save()
|
|
117
|
+
print("Onboarding progress reset.")
|
|
118
|
+
return
|
|
119
|
+
|
|
120
|
+
# Define onboarding steps
|
|
121
|
+
steps = [
|
|
122
|
+
{
|
|
123
|
+
"title": "Welcome to Empathy Framework",
|
|
124
|
+
"content": """
|
|
125
|
+
Welcome! Empathy Framework helps you build AI systems with 5 levels
|
|
126
|
+
of sophistication, from reactive responses to anticipatory assistance.
|
|
127
|
+
|
|
128
|
+
This tutorial will walk you through the key features.
|
|
129
|
+
|
|
130
|
+
Let's check your current setup first...
|
|
131
|
+
""",
|
|
132
|
+
"check": lambda: True,
|
|
133
|
+
"action": None,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"title": "Step 1: Initialize Your Project",
|
|
137
|
+
"content": """
|
|
138
|
+
First, let's create a configuration file for your project.
|
|
139
|
+
|
|
140
|
+
Run: empathy init
|
|
141
|
+
|
|
142
|
+
This creates attune.config.yaml with sensible defaults.
|
|
143
|
+
Alternatively, use 'empathy workflow' for an interactive setup.
|
|
144
|
+
""",
|
|
145
|
+
"check": lambda: _file_exists("attune.config.yaml")
|
|
146
|
+
or _file_exists("attune.config.yml"),
|
|
147
|
+
"action": "empathy init",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"title": "Step 2: Learn From Your History",
|
|
151
|
+
"content": """
|
|
152
|
+
Empathy can learn patterns from your git commit history.
|
|
153
|
+
This teaches Claude about your codebase's patterns and past bugs.
|
|
154
|
+
|
|
155
|
+
Run: empathy learn --analyze 10
|
|
156
|
+
|
|
157
|
+
This analyzes the last 10 commits and extracts:
|
|
158
|
+
- Bug fix patterns
|
|
159
|
+
- Security decisions
|
|
160
|
+
- Technical debt markers
|
|
161
|
+
""",
|
|
162
|
+
"check": lambda: _file_exists("patterns/debugging.json"),
|
|
163
|
+
"action": "empathy learn --analyze 10",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"title": "Step 3: Sync Patterns to Claude",
|
|
167
|
+
"content": """
|
|
168
|
+
Now let's share what we learned with Claude Code.
|
|
169
|
+
|
|
170
|
+
Run: empathy sync-claude
|
|
171
|
+
|
|
172
|
+
This creates .claude/rules/empathy/ with markdown rules
|
|
173
|
+
that Claude Code automatically loads when you work in this directory.
|
|
174
|
+
""",
|
|
175
|
+
"check": lambda: _file_exists(".claude/rules/empathy/debugging.md"),
|
|
176
|
+
"action": "empathy sync-claude",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"title": "Step 4: Check Code Health",
|
|
180
|
+
"content": """
|
|
181
|
+
Let's run a quick health check on your codebase.
|
|
182
|
+
|
|
183
|
+
Run: empathy health
|
|
184
|
+
|
|
185
|
+
This checks:
|
|
186
|
+
- Linting issues
|
|
187
|
+
- Type errors
|
|
188
|
+
- Formatting problems
|
|
189
|
+
|
|
190
|
+
Try 'empathy health --fix' to auto-fix what's possible.
|
|
191
|
+
""",
|
|
192
|
+
"check": lambda: stats.get("command_counts", {}).get("health", 0) > 0,
|
|
193
|
+
"action": "empathy health",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"title": "Step 5: Daily Workflow",
|
|
197
|
+
"content": """
|
|
198
|
+
You're almost there! Here's your recommended daily workflow:
|
|
199
|
+
|
|
200
|
+
MORNING:
|
|
201
|
+
empathy morning - Get your priority briefing
|
|
202
|
+
|
|
203
|
+
BEFORE COMMITS:
|
|
204
|
+
empathy ship - Validate before committing
|
|
205
|
+
|
|
206
|
+
WEEKLY:
|
|
207
|
+
empathy learn - Update patterns from new commits
|
|
208
|
+
empathy sync-claude - Keep Claude current
|
|
209
|
+
|
|
210
|
+
You've completed the basics! Run 'empathy cheatsheet' anytime
|
|
211
|
+
for a quick reference of all commands.
|
|
212
|
+
""",
|
|
213
|
+
"check": lambda: True,
|
|
214
|
+
"action": None,
|
|
215
|
+
},
|
|
216
|
+
]
|
|
217
|
+
|
|
218
|
+
# Determine current step
|
|
219
|
+
current_step = engine.state.get("onboarding_step", 0)
|
|
220
|
+
if step is not None:
|
|
221
|
+
current_step = max(0, min(step - 1, len(steps) - 1))
|
|
222
|
+
|
|
223
|
+
step_data = steps[current_step]
|
|
224
|
+
|
|
225
|
+
# Display header
|
|
226
|
+
print()
|
|
227
|
+
print("=" * 60)
|
|
228
|
+
print(f" ONBOARDING ({current_step + 1}/{len(steps)})")
|
|
229
|
+
print("=" * 60)
|
|
230
|
+
print()
|
|
231
|
+
print(f" {step_data['title']}")
|
|
232
|
+
print(" " + "-" * 50)
|
|
233
|
+
print(step_data["content"])
|
|
234
|
+
|
|
235
|
+
# Check if step is completed
|
|
236
|
+
if step_data["check"]():
|
|
237
|
+
if current_step < len(steps) - 1:
|
|
238
|
+
print(" [DONE] This step is complete!")
|
|
239
|
+
print()
|
|
240
|
+
print(f" Continue with: empathy onboard --step {current_step + 2}")
|
|
241
|
+
# Auto-advance
|
|
242
|
+
engine.state["onboarding_step"] = current_step + 1
|
|
243
|
+
engine._save()
|
|
244
|
+
else:
|
|
245
|
+
print(" Congratulations! You've completed the onboarding!")
|
|
246
|
+
print()
|
|
247
|
+
_show_achievements(engine)
|
|
248
|
+
elif step_data["action"]:
|
|
249
|
+
print(f" NEXT: Run '{step_data['action']}'")
|
|
250
|
+
print(" Then run 'empathy onboard' to continue")
|
|
251
|
+
|
|
252
|
+
print()
|
|
253
|
+
print("-" * 60)
|
|
254
|
+
print(f" Progress: {'*' * (current_step + 1)}{'.' * (len(steps) - current_step - 1)}")
|
|
255
|
+
print("=" * 60)
|
|
256
|
+
print()
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def cmd_explain(args):
|
|
260
|
+
"""Show detailed explanation for a command.
|
|
261
|
+
|
|
262
|
+
Provides in-depth documentation about how specific commands work.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
args: Namespace object from argparse with attributes:
|
|
266
|
+
- command (str): Command name to explain (e.g., 'morning', 'ship').
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
None: Prints detailed explanation to stdout.
|
|
270
|
+
"""
|
|
271
|
+
command = args.command
|
|
272
|
+
|
|
273
|
+
if command in EXPLAIN_CONTENT:
|
|
274
|
+
print(EXPLAIN_CONTENT[command])
|
|
275
|
+
else:
|
|
276
|
+
available = ", ".join(EXPLAIN_CONTENT.keys())
|
|
277
|
+
print(f"\nNo detailed explanation available for '{command}'")
|
|
278
|
+
print(f"Available: {available}")
|
|
279
|
+
print("\nTry: empathy cheatsheet for a quick reference")
|
|
280
|
+
print()
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def cmd_achievements(args):
|
|
284
|
+
"""Show user achievements and progress.
|
|
285
|
+
|
|
286
|
+
Displays gamification stats including unlocked achievements and usage streaks.
|
|
287
|
+
|
|
288
|
+
Args:
|
|
289
|
+
args: Namespace object from argparse (no additional attributes used).
|
|
290
|
+
|
|
291
|
+
Returns:
|
|
292
|
+
None: Prints achievements and progress to stdout.
|
|
293
|
+
"""
|
|
294
|
+
from attune.discovery import get_engine
|
|
295
|
+
|
|
296
|
+
engine = get_engine()
|
|
297
|
+
stats = engine.get_stats()
|
|
298
|
+
|
|
299
|
+
print()
|
|
300
|
+
print("=" * 60)
|
|
301
|
+
print(" YOUR EMPATHY FRAMEWORK JOURNEY")
|
|
302
|
+
print("=" * 60)
|
|
303
|
+
print()
|
|
304
|
+
|
|
305
|
+
# Stats summary
|
|
306
|
+
print(" STATISTICS")
|
|
307
|
+
print(" " + "-" * 40)
|
|
308
|
+
print(f" Total commands run: {stats.get('total_commands', 0)}")
|
|
309
|
+
print(f" Days active: {stats.get('days_active', 0)}")
|
|
310
|
+
print(f" Patterns learned: {stats.get('patterns_learned', 0)}")
|
|
311
|
+
shown = stats.get("tips_shown", 0)
|
|
312
|
+
total = shown + stats.get("tips_remaining", 0)
|
|
313
|
+
print(f" Tips discovered: {shown}/{total}")
|
|
314
|
+
print()
|
|
315
|
+
|
|
316
|
+
# Command breakdown
|
|
317
|
+
cmd_counts = stats.get("command_counts", {})
|
|
318
|
+
if cmd_counts:
|
|
319
|
+
print(" COMMAND USAGE")
|
|
320
|
+
print(" " + "-" * 40)
|
|
321
|
+
sorted_cmds = sorted(cmd_counts.items(), key=lambda x: x[1], reverse=True)
|
|
322
|
+
for cmd, count in sorted_cmds[:10]:
|
|
323
|
+
bar = "*" * min(count, 20)
|
|
324
|
+
print(f" {cmd:15} {count:4} {bar}")
|
|
325
|
+
print()
|
|
326
|
+
|
|
327
|
+
# Achievements
|
|
328
|
+
_show_achievements(engine)
|
|
329
|
+
|
|
330
|
+
print("=" * 60)
|
|
331
|
+
print()
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Framework information commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from attune import load_config
|
|
8
|
+
from attune.logging_config import get_logger
|
|
9
|
+
|
|
10
|
+
logger = get_logger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def cmd_info(args):
|
|
14
|
+
"""Display information about the framework.
|
|
15
|
+
|
|
16
|
+
Shows configuration, persistence, and feature status.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
args: Namespace object from argparse with attributes:
|
|
20
|
+
- config (str | None): Optional path to configuration file.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
None: Prints framework information to stdout.
|
|
24
|
+
"""
|
|
25
|
+
config_file = args.config
|
|
26
|
+
logger.info("Displaying framework information")
|
|
27
|
+
|
|
28
|
+
if config_file:
|
|
29
|
+
logger.debug(f"Loading config from file: {config_file}")
|
|
30
|
+
config = load_config(filepath=config_file)
|
|
31
|
+
else:
|
|
32
|
+
logger.debug("Loading default configuration")
|
|
33
|
+
config = load_config()
|
|
34
|
+
|
|
35
|
+
logger.info("=== Empathy Framework Info ===\n")
|
|
36
|
+
logger.info("Configuration:")
|
|
37
|
+
logger.info(f" User ID: {config.user_id}")
|
|
38
|
+
logger.info(f" Target Level: {config.target_level}")
|
|
39
|
+
logger.info(f" Confidence Threshold: {config.confidence_threshold}")
|
|
40
|
+
logger.info("\nPersistence:")
|
|
41
|
+
logger.info(f" Backend: {config.persistence_backend}")
|
|
42
|
+
logger.info(f" Path: {config.persistence_path}")
|
|
43
|
+
logger.info(f" Enabled: {config.persistence_enabled}")
|
|
44
|
+
logger.info("\nMetrics:")
|
|
45
|
+
logger.info(f" Enabled: {config.metrics_enabled}")
|
|
46
|
+
logger.info(f" Path: {config.metrics_path}")
|
|
47
|
+
logger.info("\nPattern Library:")
|
|
48
|
+
logger.info(f" Enabled: {config.pattern_library_enabled}")
|
|
49
|
+
logger.info(f" Pattern Sharing: {config.pattern_sharing}")
|
|
50
|
+
logger.info(f" Confidence Threshold: {config.pattern_confidence_threshold}")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def cmd_frameworks(args):
|
|
54
|
+
"""List and manage agent frameworks.
|
|
55
|
+
|
|
56
|
+
Displays available agent frameworks with their capabilities and recommendations.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
args: Namespace object from argparse with attributes:
|
|
60
|
+
- all (bool): If True, show all frameworks including experimental.
|
|
61
|
+
- recommend (str | None): Use case for framework recommendation.
|
|
62
|
+
- json (bool): If True, output as JSON format.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
int: 0 on success, 1 on failure.
|
|
66
|
+
"""
|
|
67
|
+
import json as json_mod
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
from attune_llm.agent_factory import AgentFactory
|
|
71
|
+
from attune_llm.agent_factory.framework import (
|
|
72
|
+
get_framework_info,
|
|
73
|
+
get_recommended_framework,
|
|
74
|
+
)
|
|
75
|
+
except ImportError:
|
|
76
|
+
print("Agent Factory not available. Install empathy-framework with all dependencies.")
|
|
77
|
+
return 1
|
|
78
|
+
|
|
79
|
+
show_all = getattr(args, "all", False)
|
|
80
|
+
recommend_use_case = getattr(args, "recommend", None)
|
|
81
|
+
output_json = getattr(args, "json", False)
|
|
82
|
+
|
|
83
|
+
if recommend_use_case:
|
|
84
|
+
# Recommend a framework
|
|
85
|
+
recommended = get_recommended_framework(recommend_use_case)
|
|
86
|
+
info = get_framework_info(recommended)
|
|
87
|
+
|
|
88
|
+
if output_json:
|
|
89
|
+
print(
|
|
90
|
+
json_mod.dumps(
|
|
91
|
+
{"use_case": recommend_use_case, "recommended": recommended.value, **info},
|
|
92
|
+
indent=2,
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
else:
|
|
96
|
+
print(f"\nRecommended framework for '{recommend_use_case}': {info['name']}")
|
|
97
|
+
print(f" Best for: {', '.join(info['best_for'])}")
|
|
98
|
+
if info.get("install_command"):
|
|
99
|
+
print(f" Install: {info['install_command']}")
|
|
100
|
+
print()
|
|
101
|
+
return 0
|
|
102
|
+
|
|
103
|
+
# List frameworks
|
|
104
|
+
frameworks = AgentFactory.list_frameworks(installed_only=not show_all)
|
|
105
|
+
|
|
106
|
+
if output_json:
|
|
107
|
+
print(
|
|
108
|
+
json_mod.dumps(
|
|
109
|
+
[
|
|
110
|
+
{
|
|
111
|
+
"id": f["framework"].value,
|
|
112
|
+
"name": f["name"],
|
|
113
|
+
"installed": f["installed"],
|
|
114
|
+
"best_for": f["best_for"],
|
|
115
|
+
"install_command": f.get("install_command"),
|
|
116
|
+
}
|
|
117
|
+
for f in frameworks
|
|
118
|
+
],
|
|
119
|
+
indent=2,
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
else:
|
|
123
|
+
print("\n" + "=" * 60)
|
|
124
|
+
print(" AGENT FRAMEWORKS")
|
|
125
|
+
print("=" * 60 + "\n")
|
|
126
|
+
|
|
127
|
+
for f in frameworks:
|
|
128
|
+
status = "INSTALLED" if f["installed"] else "not installed"
|
|
129
|
+
print(f" {f['name']:20} [{status}]")
|
|
130
|
+
print(f" Best for: {', '.join(f['best_for'][:3])}")
|
|
131
|
+
if not f["installed"] and f.get("install_command"):
|
|
132
|
+
print(f" Install: {f['install_command']}")
|
|
133
|
+
print()
|
|
134
|
+
|
|
135
|
+
print("-" * 60)
|
|
136
|
+
print(" Use: empathy frameworks --recommend <use_case>")
|
|
137
|
+
print(" Use cases: general, rag, multi_agent, code_analysis")
|
|
138
|
+
print("=" * 60 + "\n")
|
|
139
|
+
|
|
140
|
+
return 0
|