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,47 @@
|
|
|
1
|
+
"""Parser definitions for status and health commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from ..commands import status as status_commands
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def register_parsers(subparsers):
|
|
11
|
+
"""Register status command parsers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
subparsers: ArgumentParser subparsers object
|
|
15
|
+
"""
|
|
16
|
+
# status command
|
|
17
|
+
parser_status = subparsers.add_parser("status", help="Show project status")
|
|
18
|
+
parser_status.add_argument("--patterns-dir", default="./patterns", help="Patterns directory")
|
|
19
|
+
parser_status.add_argument("--project-root", default=".", help="Project root")
|
|
20
|
+
parser_status.add_argument(
|
|
21
|
+
"--inactivity", type=int, default=30, help="Inactivity threshold (minutes)"
|
|
22
|
+
)
|
|
23
|
+
parser_status.add_argument("--full", action="store_true", help="Show all items")
|
|
24
|
+
parser_status.add_argument("--json", action="store_true", help="Output as JSON")
|
|
25
|
+
parser_status.add_argument("--select", type=int, help="Select item for action")
|
|
26
|
+
parser_status.add_argument("--force", action="store_true", help="Force show status")
|
|
27
|
+
parser_status.set_defaults(func=status_commands.cmd_status)
|
|
28
|
+
|
|
29
|
+
# review command (deprecated)
|
|
30
|
+
parser_review = subparsers.add_parser("review", help="Code review (deprecated)")
|
|
31
|
+
parser_review.set_defaults(func=status_commands.cmd_review)
|
|
32
|
+
|
|
33
|
+
# health command
|
|
34
|
+
parser_health = subparsers.add_parser("health", help="Run health checks")
|
|
35
|
+
parser_health.add_argument("--check", help="Specific check (lint/type/format/test)")
|
|
36
|
+
parser_health.add_argument("--deep", action="store_true", help="Run all checks")
|
|
37
|
+
parser_health.add_argument("--fix", action="store_true", help="Auto-fix issues")
|
|
38
|
+
parser_health.add_argument("--dry-run", action="store_true", help="Preview fixes only")
|
|
39
|
+
parser_health.add_argument(
|
|
40
|
+
"--interactive", action="store_true", help="Interactive fix mode"
|
|
41
|
+
)
|
|
42
|
+
parser_health.add_argument("--project-root", default=".", help="Project root")
|
|
43
|
+
parser_health.add_argument("--details", action="store_true", help="Show details")
|
|
44
|
+
parser_health.add_argument("--full", action="store_true", help="Show all details")
|
|
45
|
+
parser_health.add_argument("--trends", type=int, help="Show trends (days)")
|
|
46
|
+
parser_health.add_argument("--json", action="store_true", help="Output as JSON")
|
|
47
|
+
parser_health.set_defaults(func=status_commands.cmd_health)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Parser definitions for sync commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from ..commands import sync
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def register_parsers(subparsers):
|
|
11
|
+
"""Register sync command parsers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
subparsers: ArgumentParser subparsers object from main parser
|
|
15
|
+
"""
|
|
16
|
+
# Sync-claude command
|
|
17
|
+
parser_sync_claude = subparsers.add_parser(
|
|
18
|
+
"sync-claude",
|
|
19
|
+
help="Sync learned patterns to Claude Code rules",
|
|
20
|
+
)
|
|
21
|
+
parser_sync_claude.add_argument(
|
|
22
|
+
"--patterns-dir",
|
|
23
|
+
default="patterns",
|
|
24
|
+
help="Source patterns directory (default: patterns)",
|
|
25
|
+
)
|
|
26
|
+
parser_sync_claude.add_argument(
|
|
27
|
+
"--output-dir",
|
|
28
|
+
default=".claude/rules/empathy",
|
|
29
|
+
help="Target Claude Code rules directory (default: .claude/rules/empathy)",
|
|
30
|
+
)
|
|
31
|
+
parser_sync_claude.set_defaults(func=sync.cmd_sync_claude)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Parser definitions for tier commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from ..commands import tier as tier_commands
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def register_parsers(subparsers):
|
|
11
|
+
"""Register tier command parsers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
subparsers: ArgumentParser subparsers object
|
|
15
|
+
"""
|
|
16
|
+
# Create tier subcommand group
|
|
17
|
+
tier_parser = subparsers.add_parser("tier", help="Tier management commands")
|
|
18
|
+
tier_subparsers = tier_parser.add_subparsers(dest="tier_command")
|
|
19
|
+
|
|
20
|
+
# tier recommend
|
|
21
|
+
parser_recommend = tier_subparsers.add_parser(
|
|
22
|
+
"recommend", help="Get tier recommendation"
|
|
23
|
+
)
|
|
24
|
+
parser_recommend.add_argument("description", help="Bug or task description")
|
|
25
|
+
parser_recommend.add_argument("--files", help="Comma-separated list of files")
|
|
26
|
+
parser_recommend.add_argument(
|
|
27
|
+
"--complexity", choices=["low", "medium", "high"], help="Complexity hint"
|
|
28
|
+
)
|
|
29
|
+
parser_recommend.set_defaults(func=tier_commands.cmd_tier_recommend)
|
|
30
|
+
|
|
31
|
+
# tier stats
|
|
32
|
+
parser_stats = tier_subparsers.add_parser("stats", help="Show tier statistics")
|
|
33
|
+
parser_stats.set_defaults(func=tier_commands.cmd_tier_stats)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""Parser definitions for workflow commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from ..commands import workflow
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def register_parsers(subparsers):
|
|
11
|
+
"""Register workflow command parsers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
subparsers: ArgumentParser subparsers object from main parser
|
|
15
|
+
"""
|
|
16
|
+
# Main workflow command - multi-model workflow management
|
|
17
|
+
parser_workflow = subparsers.add_parser(
|
|
18
|
+
"workflow",
|
|
19
|
+
help="Multi-model workflows for cost-optimized task pipelines",
|
|
20
|
+
)
|
|
21
|
+
parser_workflow.add_argument(
|
|
22
|
+
"action",
|
|
23
|
+
choices=["list", "describe", "run", "config"],
|
|
24
|
+
help="Action: list, describe, run, or config",
|
|
25
|
+
)
|
|
26
|
+
parser_workflow.add_argument(
|
|
27
|
+
"name",
|
|
28
|
+
nargs="?",
|
|
29
|
+
help="Workflow name (for describe/run)",
|
|
30
|
+
)
|
|
31
|
+
parser_workflow.add_argument(
|
|
32
|
+
"--input",
|
|
33
|
+
"-i",
|
|
34
|
+
help="JSON input data for workflow execution",
|
|
35
|
+
)
|
|
36
|
+
parser_workflow.add_argument(
|
|
37
|
+
"--provider",
|
|
38
|
+
"-p",
|
|
39
|
+
choices=["anthropic", "openai", "google", "ollama", "hybrid"],
|
|
40
|
+
default=None, # None means use config
|
|
41
|
+
help="Model provider: anthropic, openai, google, ollama, or hybrid (mix of best models)",
|
|
42
|
+
)
|
|
43
|
+
parser_workflow.add_argument(
|
|
44
|
+
"--force",
|
|
45
|
+
action="store_true",
|
|
46
|
+
help="Force overwrite existing config file",
|
|
47
|
+
)
|
|
48
|
+
parser_workflow.add_argument("--json", action="store_true", help="Output as JSON")
|
|
49
|
+
parser_workflow.add_argument(
|
|
50
|
+
"--use-recommended-tier",
|
|
51
|
+
action="store_true",
|
|
52
|
+
help="Enable intelligent tier fallback: start with CHEAP tier and automatically upgrade if quality gates fail",
|
|
53
|
+
)
|
|
54
|
+
parser_workflow.add_argument(
|
|
55
|
+
"--write-tests",
|
|
56
|
+
action="store_true",
|
|
57
|
+
help="(test-gen workflow) Write generated tests to disk",
|
|
58
|
+
)
|
|
59
|
+
parser_workflow.add_argument(
|
|
60
|
+
"--output-dir",
|
|
61
|
+
default="tests/generated",
|
|
62
|
+
help="(test-gen workflow) Output directory for generated tests",
|
|
63
|
+
)
|
|
64
|
+
parser_workflow.add_argument(
|
|
65
|
+
"--health-score-threshold",
|
|
66
|
+
type=int,
|
|
67
|
+
default=95,
|
|
68
|
+
help="(health-check workflow) Minimum health score required (0-100, default: 95 for very strict quality)",
|
|
69
|
+
)
|
|
70
|
+
parser_workflow.set_defaults(func=workflow.cmd_workflow)
|
|
71
|
+
|
|
72
|
+
# Legacy workflow-setup command (DEPRECATED)
|
|
73
|
+
parser_workflow_setup = subparsers.add_parser(
|
|
74
|
+
"workflow-setup",
|
|
75
|
+
help="[DEPRECATED] Interactive setup wizard (use 'empathy init' instead)",
|
|
76
|
+
)
|
|
77
|
+
parser_workflow_setup.set_defaults(func=workflow.cmd_workflow_legacy)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""CLI utility functions."""
|
attune/cli/utils/data.py
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"""Help text and documentation data for CLI commands.
|
|
2
|
+
|
|
3
|
+
This module contains static help content displayed by various CLI commands.
|
|
4
|
+
|
|
5
|
+
Copyright 2025 Smart-AI-Memory
|
|
6
|
+
Licensed under Fair Source License 0.9
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
CHEATSHEET = {
|
|
10
|
+
"Getting Started": [
|
|
11
|
+
("empathy init", "Create a new config file"),
|
|
12
|
+
("empathy workflow", "Interactive setup workflow"),
|
|
13
|
+
("empathy run", "Interactive REPL mode"),
|
|
14
|
+
],
|
|
15
|
+
"Daily Workflow": [
|
|
16
|
+
("empathy morning", "Start-of-day briefing"),
|
|
17
|
+
("empathy status", "What needs attention now"),
|
|
18
|
+
("empathy ship", "Pre-commit validation"),
|
|
19
|
+
],
|
|
20
|
+
"Code Quality": [
|
|
21
|
+
("empathy health", "Quick health check"),
|
|
22
|
+
("empathy health --deep", "Comprehensive check"),
|
|
23
|
+
("empathy health --fix", "Auto-fix issues"),
|
|
24
|
+
("empathy fix-all", "Fix all lint/format issues"),
|
|
25
|
+
],
|
|
26
|
+
"Pattern Learning": [
|
|
27
|
+
("empathy learn --analyze 20", "Learn from last 20 commits"),
|
|
28
|
+
("empathy sync-claude", "Sync patterns to Claude Code"),
|
|
29
|
+
("empathy inspect patterns", "View learned patterns"),
|
|
30
|
+
],
|
|
31
|
+
"Code Review": [
|
|
32
|
+
("empathy review", "Review recent changes"),
|
|
33
|
+
("empathy review --staged", "Review staged changes only"),
|
|
34
|
+
],
|
|
35
|
+
"Memory & State": [
|
|
36
|
+
("empathy inspect state", "View saved states"),
|
|
37
|
+
("empathy inspect metrics --user-id X", "View user metrics"),
|
|
38
|
+
("empathy export patterns.json", "Export patterns"),
|
|
39
|
+
],
|
|
40
|
+
"Advanced": [
|
|
41
|
+
("empathy costs", "View API cost tracking"),
|
|
42
|
+
("empathy dashboard", "Launch visual dashboard"),
|
|
43
|
+
("empathy frameworks", "List agent frameworks"),
|
|
44
|
+
("empathy workflow list", "List multi-model workflows"),
|
|
45
|
+
("empathy new <template>", "Create project from template"),
|
|
46
|
+
],
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
EXPLAIN_CONTENT = {
|
|
50
|
+
"morning": """
|
|
51
|
+
HOW 'empathy morning' WORKS:
|
|
52
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
53
|
+
This command aggregates multiple data sources to give you a prioritized
|
|
54
|
+
start-of-day briefing:
|
|
55
|
+
|
|
56
|
+
1. PATTERNS ANALYSIS
|
|
57
|
+
Reads ./patterns/*.json to find:
|
|
58
|
+
- Unresolved bugs (status: investigating)
|
|
59
|
+
- Recent security decisions
|
|
60
|
+
- Tech debt trends
|
|
61
|
+
|
|
62
|
+
2. GIT CONTEXT
|
|
63
|
+
Checks your recent git activity:
|
|
64
|
+
- Commits from yesterday
|
|
65
|
+
- Uncommitted changes
|
|
66
|
+
- Branch status
|
|
67
|
+
|
|
68
|
+
3. HEALTH SNAPSHOT
|
|
69
|
+
Runs quick health checks:
|
|
70
|
+
- Lint issues count
|
|
71
|
+
- Type errors
|
|
72
|
+
- Test status
|
|
73
|
+
|
|
74
|
+
4. PRIORITY SCORING
|
|
75
|
+
Items are scored and sorted by:
|
|
76
|
+
- Age (older = higher priority)
|
|
77
|
+
- Severity (critical > high > medium)
|
|
78
|
+
- Your recent activity patterns
|
|
79
|
+
|
|
80
|
+
TIPS:
|
|
81
|
+
• Run this first thing each day
|
|
82
|
+
• Use 'empathy morning --verbose' for details
|
|
83
|
+
• Pair with 'empathy status --select N' to dive deeper
|
|
84
|
+
""",
|
|
85
|
+
"ship": """
|
|
86
|
+
HOW 'empathy ship' WORKS:
|
|
87
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
88
|
+
Pre-commit validation pipeline that ensures code quality before shipping:
|
|
89
|
+
|
|
90
|
+
1. HEALTH CHECKS
|
|
91
|
+
- Runs lint checks (ruff/flake8)
|
|
92
|
+
- Validates types (mypy/pyright)
|
|
93
|
+
- Checks formatting (black/prettier)
|
|
94
|
+
|
|
95
|
+
2. PATTERN REVIEW
|
|
96
|
+
- Compares changes against known bug patterns
|
|
97
|
+
- Flags code that matches historical issues
|
|
98
|
+
- Suggests fixes based on past resolutions
|
|
99
|
+
|
|
100
|
+
3. SECURITY SCAN
|
|
101
|
+
- Checks for hardcoded secrets
|
|
102
|
+
- Validates against security patterns
|
|
103
|
+
- Reports potential vulnerabilities
|
|
104
|
+
|
|
105
|
+
4. PATTERN SYNC (optional)
|
|
106
|
+
- Updates Claude Code rules
|
|
107
|
+
- Syncs new patterns discovered
|
|
108
|
+
- Skip with --skip-sync
|
|
109
|
+
|
|
110
|
+
EXIT CODES:
|
|
111
|
+
• 0 = All checks passed, safe to commit
|
|
112
|
+
• 1 = Issues found, review before committing
|
|
113
|
+
|
|
114
|
+
TIPS:
|
|
115
|
+
• Add to pre-commit hook: empathy ship --skip-sync
|
|
116
|
+
• Use 'empathy ship --verbose' to see all checks
|
|
117
|
+
""",
|
|
118
|
+
"learn": """
|
|
119
|
+
HOW 'empathy learn' WORKS:
|
|
120
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
+
Extracts patterns from your git history to teach Claude about your codebase:
|
|
122
|
+
|
|
123
|
+
1. COMMIT ANALYSIS
|
|
124
|
+
Parses commit messages looking for:
|
|
125
|
+
- fix: Bug fixes → debugging.json
|
|
126
|
+
- security: decisions → security.json
|
|
127
|
+
- TODO/FIXME in code → tech_debt.json
|
|
128
|
+
|
|
129
|
+
2. DIFF INSPECTION
|
|
130
|
+
Analyzes code changes to:
|
|
131
|
+
- Identify affected files
|
|
132
|
+
- Extract error types
|
|
133
|
+
- Record fix patterns
|
|
134
|
+
|
|
135
|
+
3. PATTERN STORAGE
|
|
136
|
+
Saves to ./patterns/:
|
|
137
|
+
- debugging.json: Bug patterns
|
|
138
|
+
- security.json: Security decisions
|
|
139
|
+
- tech_debt.json: Technical debt
|
|
140
|
+
- inspection.json: Code review findings
|
|
141
|
+
|
|
142
|
+
4. SUMMARY GENERATION
|
|
143
|
+
Creates .claude/patterns_summary.md:
|
|
144
|
+
- Human-readable pattern overview
|
|
145
|
+
- Loaded by Claude Code automatically
|
|
146
|
+
|
|
147
|
+
USAGE EXAMPLES:
|
|
148
|
+
• empathy learn --analyze 10 # Last 10 commits
|
|
149
|
+
• empathy learn --analyze 100 # Deeper history
|
|
150
|
+
• empathy sync-claude # Apply patterns to Claude
|
|
151
|
+
|
|
152
|
+
TIPS:
|
|
153
|
+
• Run weekly to keep patterns current
|
|
154
|
+
• Use good commit messages (fix:, feat:, etc.)
|
|
155
|
+
• Check ./patterns/ to see what was learned
|
|
156
|
+
""",
|
|
157
|
+
"health": """
|
|
158
|
+
HOW 'empathy health' WORKS:
|
|
159
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
160
|
+
Code health dashboard that runs multiple quality checks:
|
|
161
|
+
|
|
162
|
+
1. QUICK MODE (default)
|
|
163
|
+
Fast checks that run in seconds:
|
|
164
|
+
- Lint: ruff check or flake8
|
|
165
|
+
- Format: black --check or prettier
|
|
166
|
+
- Basic type checking
|
|
167
|
+
|
|
168
|
+
2. DEEP MODE (--deep)
|
|
169
|
+
Comprehensive checks (slower):
|
|
170
|
+
- Full type analysis (mypy --strict)
|
|
171
|
+
- Test suite execution
|
|
172
|
+
- Security scanning
|
|
173
|
+
- Dependency audit
|
|
174
|
+
|
|
175
|
+
3. SCORING
|
|
176
|
+
Health score 0-100 based on:
|
|
177
|
+
- Lint issues (×2 penalty each)
|
|
178
|
+
- Type errors (×5 penalty each)
|
|
179
|
+
- Test failures (×10 penalty each)
|
|
180
|
+
- Security issues (×20 penalty each)
|
|
181
|
+
|
|
182
|
+
4. AUTO-FIX (--fix)
|
|
183
|
+
Can automatically fix:
|
|
184
|
+
- Formatting issues
|
|
185
|
+
- Import sorting
|
|
186
|
+
- Simple lint errors
|
|
187
|
+
|
|
188
|
+
USAGE:
|
|
189
|
+
• empathy health # Quick check
|
|
190
|
+
• empathy health --deep # Full check
|
|
191
|
+
• empathy health --fix # Auto-fix issues
|
|
192
|
+
• empathy health --trends 30 # 30-day trend
|
|
193
|
+
|
|
194
|
+
TIPS:
|
|
195
|
+
• Run quick checks before commits
|
|
196
|
+
• Run deep checks in CI/CD
|
|
197
|
+
• Track trends to catch regressions
|
|
198
|
+
""",
|
|
199
|
+
"sync-claude": """
|
|
200
|
+
HOW 'empathy sync-claude' WORKS:
|
|
201
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
202
|
+
Converts learned patterns into Claude Code rules:
|
|
203
|
+
|
|
204
|
+
1. READS PATTERNS
|
|
205
|
+
Loads from ./patterns/:
|
|
206
|
+
- debugging.json → Bug fix patterns
|
|
207
|
+
- security.json → Security decisions
|
|
208
|
+
- tech_debt.json → Known debt items
|
|
209
|
+
|
|
210
|
+
2. GENERATES RULES
|
|
211
|
+
Creates .claude/rules/empathy/:
|
|
212
|
+
- debugging.md
|
|
213
|
+
- security.md
|
|
214
|
+
- tech_debt.md
|
|
215
|
+
|
|
216
|
+
3. CLAUDE CODE INTEGRATION
|
|
217
|
+
Rules are automatically loaded when:
|
|
218
|
+
- Claude Code starts in this directory
|
|
219
|
+
- Combined with CLAUDE.md instructions
|
|
220
|
+
|
|
221
|
+
HOW CLAUDE USES THESE:
|
|
222
|
+
• Sees historical bugs before suggesting code
|
|
223
|
+
• Knows about accepted security patterns
|
|
224
|
+
• Understands existing tech debt
|
|
225
|
+
|
|
226
|
+
FILE STRUCTURE:
|
|
227
|
+
./patterns/ # Your pattern storage
|
|
228
|
+
debugging.json
|
|
229
|
+
security.json
|
|
230
|
+
.claude/
|
|
231
|
+
CLAUDE.md # Project instructions
|
|
232
|
+
rules/
|
|
233
|
+
empathy/ # Generated rules
|
|
234
|
+
debugging.md
|
|
235
|
+
security.md
|
|
236
|
+
|
|
237
|
+
TIPS:
|
|
238
|
+
• Run after 'empathy learn'
|
|
239
|
+
• Commit .claude/rules/ to share with team
|
|
240
|
+
• Weekly sync keeps Claude current
|
|
241
|
+
""",
|
|
242
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Helper utilities for CLI commands.
|
|
2
|
+
|
|
3
|
+
Copyright 2025 Smart-AI-Memory
|
|
4
|
+
Licensed under Fair Source License 0.9
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _file_exists(path: str) -> bool:
|
|
11
|
+
"""Check if a file exists.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
path: File path to check
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
True if file exists, False otherwise
|
|
18
|
+
"""
|
|
19
|
+
return Path(path).exists()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _show_achievements(engine) -> None:
|
|
23
|
+
"""Show user achievements based on usage.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
engine: Engine instance with stats
|
|
27
|
+
"""
|
|
28
|
+
stats = engine.get_stats()
|
|
29
|
+
|
|
30
|
+
achievements = []
|
|
31
|
+
total_cmds = stats.get("total_commands", 0)
|
|
32
|
+
cmd_counts = stats.get("command_counts", {})
|
|
33
|
+
|
|
34
|
+
# Check achievements
|
|
35
|
+
if total_cmds >= 1:
|
|
36
|
+
achievements.append(("First Steps", "Ran your first command"))
|
|
37
|
+
if total_cmds >= 10:
|
|
38
|
+
achievements.append(("Getting Started", "Ran 10+ commands"))
|
|
39
|
+
if total_cmds >= 50:
|
|
40
|
+
achievements.append(("Power User", "Ran 50+ commands"))
|
|
41
|
+
if total_cmds >= 100:
|
|
42
|
+
achievements.append(("Expert", "Ran 100+ commands"))
|
|
43
|
+
|
|
44
|
+
if cmd_counts.get("learn", 0) >= 1:
|
|
45
|
+
achievements.append(("Pattern Learner", "Learned from git history"))
|
|
46
|
+
if cmd_counts.get("sync-claude", 0) >= 1:
|
|
47
|
+
achievements.append(("Claude Whisperer", "Synced patterns to Claude"))
|
|
48
|
+
if cmd_counts.get("morning", 0) >= 5:
|
|
49
|
+
achievements.append(("Early Bird", "Used morning briefing 5+ times"))
|
|
50
|
+
if cmd_counts.get("ship", 0) >= 10:
|
|
51
|
+
achievements.append(("Quality Shipper", "Used pre-commit checks 10+ times"))
|
|
52
|
+
if cmd_counts.get("health", 0) >= 1 and cmd_counts.get("fix-all", 0) >= 1:
|
|
53
|
+
achievements.append(("Code Doctor", "Used health checks and fixes"))
|
|
54
|
+
|
|
55
|
+
if stats.get("patterns_learned", 0) >= 10:
|
|
56
|
+
achievements.append(("Pattern Master", "Learned 10+ patterns"))
|
|
57
|
+
|
|
58
|
+
if stats.get("days_active", 0) >= 7:
|
|
59
|
+
achievements.append(("Week Warrior", "Active for 7+ days"))
|
|
60
|
+
if stats.get("days_active", 0) >= 30:
|
|
61
|
+
achievements.append(("Monthly Maven", "Active for 30+ days"))
|
|
62
|
+
|
|
63
|
+
if achievements:
|
|
64
|
+
print(" ACHIEVEMENTS UNLOCKED")
|
|
65
|
+
print(" " + "-" * 30)
|
|
66
|
+
for name, desc in achievements:
|
|
67
|
+
print(f" * {name}: {desc}")
|
|
68
|
+
print()
|