empathy-framework 5.3.0__py3-none-any.whl → 5.4.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.
- empathy_framework-5.4.0.dist-info/METADATA +47 -0
- empathy_framework-5.4.0.dist-info/RECORD +8 -0
- {empathy_framework-5.3.0.dist-info → empathy_framework-5.4.0.dist-info}/top_level.txt +0 -1
- empathy_healthcare_plugin/__init__.py +12 -11
- empathy_llm_toolkit/__init__.py +12 -26
- empathy_os/__init__.py +12 -356
- empathy_software_plugin/__init__.py +12 -11
- empathy_framework-5.3.0.dist-info/METADATA +0 -1026
- empathy_framework-5.3.0.dist-info/RECORD +0 -456
- empathy_framework-5.3.0.dist-info/entry_points.txt +0 -26
- empathy_framework-5.3.0.dist-info/licenses/LICENSE +0 -201
- empathy_framework-5.3.0.dist-info/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md +0 -101
- empathy_healthcare_plugin/monitors/__init__.py +0 -9
- empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +0 -315
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +0 -44
- empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +0 -300
- empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +0 -214
- empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +0 -306
- empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +0 -389
- empathy_healthcare_plugin/protocols/cardiac.json +0 -93
- empathy_healthcare_plugin/protocols/post_operative.json +0 -92
- empathy_healthcare_plugin/protocols/respiratory.json +0 -92
- empathy_healthcare_plugin/protocols/sepsis.json +0 -141
- empathy_llm_toolkit/README.md +0 -553
- empathy_llm_toolkit/agent_factory/__init__.py +0 -53
- empathy_llm_toolkit/agent_factory/adapters/__init__.py +0 -85
- empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +0 -312
- empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +0 -483
- empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +0 -298
- empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +0 -362
- empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +0 -333
- empathy_llm_toolkit/agent_factory/adapters/native.py +0 -228
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +0 -423
- empathy_llm_toolkit/agent_factory/base.py +0 -305
- empathy_llm_toolkit/agent_factory/crews/__init__.py +0 -67
- empathy_llm_toolkit/agent_factory/crews/code_review.py +0 -1113
- empathy_llm_toolkit/agent_factory/crews/health_check.py +0 -1262
- empathy_llm_toolkit/agent_factory/crews/refactoring.py +0 -1128
- empathy_llm_toolkit/agent_factory/crews/security_audit.py +0 -1018
- empathy_llm_toolkit/agent_factory/decorators.py +0 -287
- empathy_llm_toolkit/agent_factory/factory.py +0 -558
- empathy_llm_toolkit/agent_factory/framework.py +0 -193
- empathy_llm_toolkit/agent_factory/memory_integration.py +0 -328
- empathy_llm_toolkit/agent_factory/resilient.py +0 -320
- empathy_llm_toolkit/agents_md/__init__.py +0 -22
- empathy_llm_toolkit/agents_md/loader.py +0 -218
- empathy_llm_toolkit/agents_md/parser.py +0 -271
- empathy_llm_toolkit/agents_md/registry.py +0 -307
- empathy_llm_toolkit/claude_memory.py +0 -466
- empathy_llm_toolkit/cli/__init__.py +0 -8
- empathy_llm_toolkit/cli/sync_claude.py +0 -487
- empathy_llm_toolkit/code_health.py +0 -1313
- empathy_llm_toolkit/commands/__init__.py +0 -51
- empathy_llm_toolkit/commands/context.py +0 -375
- empathy_llm_toolkit/commands/loader.py +0 -301
- empathy_llm_toolkit/commands/models.py +0 -231
- empathy_llm_toolkit/commands/parser.py +0 -371
- empathy_llm_toolkit/commands/registry.py +0 -429
- empathy_llm_toolkit/config/__init__.py +0 -29
- empathy_llm_toolkit/config/unified.py +0 -291
- empathy_llm_toolkit/context/__init__.py +0 -22
- empathy_llm_toolkit/context/compaction.py +0 -455
- empathy_llm_toolkit/context/manager.py +0 -434
- empathy_llm_toolkit/contextual_patterns.py +0 -361
- empathy_llm_toolkit/core.py +0 -907
- empathy_llm_toolkit/git_pattern_extractor.py +0 -435
- empathy_llm_toolkit/hooks/__init__.py +0 -24
- empathy_llm_toolkit/hooks/config.py +0 -306
- empathy_llm_toolkit/hooks/executor.py +0 -289
- empathy_llm_toolkit/hooks/registry.py +0 -302
- empathy_llm_toolkit/hooks/scripts/__init__.py +0 -39
- empathy_llm_toolkit/hooks/scripts/evaluate_session.py +0 -201
- empathy_llm_toolkit/hooks/scripts/first_time_init.py +0 -285
- empathy_llm_toolkit/hooks/scripts/pre_compact.py +0 -207
- empathy_llm_toolkit/hooks/scripts/session_end.py +0 -183
- empathy_llm_toolkit/hooks/scripts/session_start.py +0 -163
- empathy_llm_toolkit/hooks/scripts/suggest_compact.py +0 -225
- empathy_llm_toolkit/learning/__init__.py +0 -30
- empathy_llm_toolkit/learning/evaluator.py +0 -438
- empathy_llm_toolkit/learning/extractor.py +0 -514
- empathy_llm_toolkit/learning/storage.py +0 -560
- empathy_llm_toolkit/levels.py +0 -227
- empathy_llm_toolkit/pattern_confidence.py +0 -414
- empathy_llm_toolkit/pattern_resolver.py +0 -272
- empathy_llm_toolkit/pattern_summary.py +0 -350
- empathy_llm_toolkit/providers.py +0 -967
- empathy_llm_toolkit/routing/__init__.py +0 -32
- empathy_llm_toolkit/routing/model_router.py +0 -362
- empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +0 -413
- empathy_llm_toolkit/security/PHASE2_COMPLETE.md +0 -384
- empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +0 -271
- empathy_llm_toolkit/security/QUICK_REFERENCE.md +0 -316
- empathy_llm_toolkit/security/README.md +0 -262
- empathy_llm_toolkit/security/__init__.py +0 -62
- empathy_llm_toolkit/security/audit_logger.py +0 -929
- empathy_llm_toolkit/security/audit_logger_example.py +0 -152
- empathy_llm_toolkit/security/pii_scrubber.py +0 -640
- empathy_llm_toolkit/security/secrets_detector.py +0 -678
- empathy_llm_toolkit/security/secrets_detector_example.py +0 -304
- empathy_llm_toolkit/security/secure_memdocs.py +0 -1192
- empathy_llm_toolkit/security/secure_memdocs_example.py +0 -278
- empathy_llm_toolkit/session_status.py +0 -745
- empathy_llm_toolkit/state.py +0 -246
- empathy_llm_toolkit/utils/__init__.py +0 -5
- empathy_llm_toolkit/utils/tokens.py +0 -349
- empathy_os/adaptive/__init__.py +0 -13
- empathy_os/adaptive/task_complexity.py +0 -127
- empathy_os/agent_monitoring.py +0 -414
- empathy_os/cache/__init__.py +0 -117
- empathy_os/cache/base.py +0 -166
- empathy_os/cache/dependency_manager.py +0 -256
- empathy_os/cache/hash_only.py +0 -251
- empathy_os/cache/hybrid.py +0 -457
- empathy_os/cache/storage.py +0 -285
- empathy_os/cache_monitor.py +0 -356
- empathy_os/cache_stats.py +0 -298
- empathy_os/cli/__init__.py +0 -152
- empathy_os/cli/__main__.py +0 -12
- empathy_os/cli/commands/__init__.py +0 -1
- empathy_os/cli/commands/batch.py +0 -264
- empathy_os/cli/commands/cache.py +0 -248
- empathy_os/cli/commands/help.py +0 -331
- empathy_os/cli/commands/info.py +0 -140
- empathy_os/cli/commands/inspect.py +0 -436
- empathy_os/cli/commands/inspection.py +0 -57
- empathy_os/cli/commands/memory.py +0 -48
- empathy_os/cli/commands/metrics.py +0 -92
- empathy_os/cli/commands/orchestrate.py +0 -184
- empathy_os/cli/commands/patterns.py +0 -207
- empathy_os/cli/commands/profiling.py +0 -202
- empathy_os/cli/commands/provider.py +0 -98
- empathy_os/cli/commands/routing.py +0 -285
- empathy_os/cli/commands/setup.py +0 -96
- empathy_os/cli/commands/status.py +0 -235
- empathy_os/cli/commands/sync.py +0 -166
- empathy_os/cli/commands/tier.py +0 -121
- empathy_os/cli/commands/utilities.py +0 -114
- empathy_os/cli/commands/workflow.py +0 -579
- empathy_os/cli/core.py +0 -32
- empathy_os/cli/parsers/__init__.py +0 -68
- empathy_os/cli/parsers/batch.py +0 -118
- empathy_os/cli/parsers/cache.py +0 -65
- empathy_os/cli/parsers/help.py +0 -41
- empathy_os/cli/parsers/info.py +0 -26
- empathy_os/cli/parsers/inspect.py +0 -66
- empathy_os/cli/parsers/metrics.py +0 -42
- empathy_os/cli/parsers/orchestrate.py +0 -61
- empathy_os/cli/parsers/patterns.py +0 -54
- empathy_os/cli/parsers/provider.py +0 -40
- empathy_os/cli/parsers/routing.py +0 -110
- empathy_os/cli/parsers/setup.py +0 -42
- empathy_os/cli/parsers/status.py +0 -47
- empathy_os/cli/parsers/sync.py +0 -31
- empathy_os/cli/parsers/tier.py +0 -33
- empathy_os/cli/parsers/workflow.py +0 -77
- empathy_os/cli/utils/__init__.py +0 -1
- empathy_os/cli/utils/data.py +0 -242
- empathy_os/cli/utils/helpers.py +0 -68
- empathy_os/cli_legacy.py +0 -3957
- empathy_os/cli_minimal.py +0 -1159
- empathy_os/cli_router.py +0 -437
- empathy_os/cli_unified.py +0 -814
- empathy_os/config/__init__.py +0 -66
- empathy_os/config/xml_config.py +0 -286
- empathy_os/config.py +0 -545
- empathy_os/coordination.py +0 -870
- empathy_os/core.py +0 -1511
- empathy_os/core_modules/__init__.py +0 -15
- empathy_os/cost_tracker.py +0 -626
- empathy_os/dashboard/__init__.py +0 -41
- empathy_os/dashboard/app.py +0 -512
- empathy_os/dashboard/simple_server.py +0 -435
- empathy_os/dashboard/standalone_server.py +0 -547
- empathy_os/discovery.py +0 -306
- empathy_os/emergence.py +0 -306
- empathy_os/exceptions.py +0 -123
- empathy_os/feedback_loops.py +0 -373
- empathy_os/hot_reload/README.md +0 -473
- empathy_os/hot_reload/__init__.py +0 -62
- empathy_os/hot_reload/config.py +0 -83
- empathy_os/hot_reload/integration.py +0 -229
- empathy_os/hot_reload/reloader.py +0 -298
- empathy_os/hot_reload/watcher.py +0 -183
- empathy_os/hot_reload/websocket.py +0 -177
- empathy_os/levels.py +0 -577
- empathy_os/leverage_points.py +0 -441
- empathy_os/logging_config.py +0 -261
- empathy_os/mcp/__init__.py +0 -10
- empathy_os/mcp/server.py +0 -506
- empathy_os/memory/__init__.py +0 -237
- empathy_os/memory/claude_memory.py +0 -469
- empathy_os/memory/config.py +0 -224
- empathy_os/memory/control_panel.py +0 -1290
- empathy_os/memory/control_panel_support.py +0 -145
- empathy_os/memory/cross_session.py +0 -845
- empathy_os/memory/edges.py +0 -179
- empathy_os/memory/encryption.py +0 -159
- empathy_os/memory/file_session.py +0 -770
- empathy_os/memory/graph.py +0 -570
- empathy_os/memory/long_term.py +0 -913
- empathy_os/memory/long_term_types.py +0 -99
- empathy_os/memory/mixins/__init__.py +0 -25
- empathy_os/memory/mixins/backend_init_mixin.py +0 -249
- empathy_os/memory/mixins/capabilities_mixin.py +0 -208
- empathy_os/memory/mixins/handoff_mixin.py +0 -208
- empathy_os/memory/mixins/lifecycle_mixin.py +0 -49
- empathy_os/memory/mixins/long_term_mixin.py +0 -352
- empathy_os/memory/mixins/promotion_mixin.py +0 -109
- empathy_os/memory/mixins/short_term_mixin.py +0 -182
- empathy_os/memory/nodes.py +0 -179
- empathy_os/memory/redis_bootstrap.py +0 -540
- empathy_os/memory/security/__init__.py +0 -31
- empathy_os/memory/security/audit_logger.py +0 -932
- empathy_os/memory/security/pii_scrubber.py +0 -640
- empathy_os/memory/security/secrets_detector.py +0 -678
- empathy_os/memory/short_term.py +0 -2192
- empathy_os/memory/simple_storage.py +0 -302
- empathy_os/memory/storage/__init__.py +0 -15
- empathy_os/memory/storage_backend.py +0 -167
- empathy_os/memory/summary_index.py +0 -583
- empathy_os/memory/types.py +0 -446
- empathy_os/memory/unified.py +0 -182
- empathy_os/meta_workflows/__init__.py +0 -74
- empathy_os/meta_workflows/agent_creator.py +0 -248
- empathy_os/meta_workflows/builtin_templates.py +0 -567
- empathy_os/meta_workflows/cli_commands/__init__.py +0 -56
- empathy_os/meta_workflows/cli_commands/agent_commands.py +0 -321
- empathy_os/meta_workflows/cli_commands/analytics_commands.py +0 -442
- empathy_os/meta_workflows/cli_commands/config_commands.py +0 -232
- empathy_os/meta_workflows/cli_commands/memory_commands.py +0 -182
- empathy_os/meta_workflows/cli_commands/template_commands.py +0 -354
- empathy_os/meta_workflows/cli_commands/workflow_commands.py +0 -382
- empathy_os/meta_workflows/cli_meta_workflows.py +0 -59
- empathy_os/meta_workflows/form_engine.py +0 -292
- empathy_os/meta_workflows/intent_detector.py +0 -409
- empathy_os/meta_workflows/models.py +0 -569
- empathy_os/meta_workflows/pattern_learner.py +0 -738
- empathy_os/meta_workflows/plan_generator.py +0 -384
- empathy_os/meta_workflows/session_context.py +0 -397
- empathy_os/meta_workflows/template_registry.py +0 -229
- empathy_os/meta_workflows/workflow.py +0 -984
- empathy_os/metrics/__init__.py +0 -12
- empathy_os/metrics/collector.py +0 -31
- empathy_os/metrics/prompt_metrics.py +0 -194
- empathy_os/models/__init__.py +0 -172
- empathy_os/models/__main__.py +0 -13
- empathy_os/models/adaptive_routing.py +0 -437
- empathy_os/models/auth_cli.py +0 -444
- empathy_os/models/auth_strategy.py +0 -450
- empathy_os/models/cli.py +0 -655
- empathy_os/models/empathy_executor.py +0 -354
- empathy_os/models/executor.py +0 -257
- empathy_os/models/fallback.py +0 -762
- empathy_os/models/provider_config.py +0 -282
- empathy_os/models/registry.py +0 -472
- empathy_os/models/tasks.py +0 -359
- empathy_os/models/telemetry/__init__.py +0 -71
- empathy_os/models/telemetry/analytics.py +0 -594
- empathy_os/models/telemetry/backend.py +0 -196
- empathy_os/models/telemetry/data_models.py +0 -431
- empathy_os/models/telemetry/storage.py +0 -489
- empathy_os/models/token_estimator.py +0 -420
- empathy_os/models/validation.py +0 -280
- empathy_os/monitoring/__init__.py +0 -52
- empathy_os/monitoring/alerts.py +0 -946
- empathy_os/monitoring/alerts_cli.py +0 -448
- empathy_os/monitoring/multi_backend.py +0 -271
- empathy_os/monitoring/otel_backend.py +0 -362
- empathy_os/optimization/__init__.py +0 -19
- empathy_os/optimization/context_optimizer.py +0 -272
- empathy_os/orchestration/__init__.py +0 -67
- empathy_os/orchestration/agent_templates.py +0 -707
- empathy_os/orchestration/config_store.py +0 -499
- empathy_os/orchestration/execution_strategies.py +0 -2111
- empathy_os/orchestration/meta_orchestrator.py +0 -1168
- empathy_os/orchestration/pattern_learner.py +0 -696
- empathy_os/orchestration/real_tools.py +0 -931
- empathy_os/pattern_cache.py +0 -187
- empathy_os/pattern_library.py +0 -542
- empathy_os/patterns/debugging/all_patterns.json +0 -81
- empathy_os/patterns/debugging/workflow_20260107_1770825e.json +0 -77
- empathy_os/patterns/refactoring_memory.json +0 -89
- empathy_os/persistence.py +0 -564
- empathy_os/platform_utils.py +0 -265
- empathy_os/plugins/__init__.py +0 -28
- empathy_os/plugins/base.py +0 -361
- empathy_os/plugins/registry.py +0 -268
- empathy_os/project_index/__init__.py +0 -32
- empathy_os/project_index/cli.py +0 -335
- empathy_os/project_index/index.py +0 -667
- empathy_os/project_index/models.py +0 -504
- empathy_os/project_index/reports.py +0 -474
- empathy_os/project_index/scanner.py +0 -777
- empathy_os/project_index/scanner_parallel.py +0 -291
- empathy_os/prompts/__init__.py +0 -61
- empathy_os/prompts/config.py +0 -77
- empathy_os/prompts/context.py +0 -177
- empathy_os/prompts/parser.py +0 -285
- empathy_os/prompts/registry.py +0 -313
- empathy_os/prompts/templates.py +0 -208
- empathy_os/redis_config.py +0 -302
- empathy_os/redis_memory.py +0 -799
- empathy_os/resilience/__init__.py +0 -56
- empathy_os/resilience/circuit_breaker.py +0 -256
- empathy_os/resilience/fallback.py +0 -179
- empathy_os/resilience/health.py +0 -300
- empathy_os/resilience/retry.py +0 -209
- empathy_os/resilience/timeout.py +0 -135
- empathy_os/routing/__init__.py +0 -43
- empathy_os/routing/chain_executor.py +0 -433
- empathy_os/routing/classifier.py +0 -217
- empathy_os/routing/smart_router.py +0 -234
- empathy_os/routing/workflow_registry.py +0 -343
- empathy_os/scaffolding/README.md +0 -589
- empathy_os/scaffolding/__init__.py +0 -35
- empathy_os/scaffolding/__main__.py +0 -14
- empathy_os/scaffolding/cli.py +0 -240
- empathy_os/socratic/__init__.py +0 -256
- empathy_os/socratic/ab_testing.py +0 -958
- empathy_os/socratic/blueprint.py +0 -533
- empathy_os/socratic/cli.py +0 -703
- empathy_os/socratic/collaboration.py +0 -1114
- empathy_os/socratic/domain_templates.py +0 -924
- empathy_os/socratic/embeddings.py +0 -738
- empathy_os/socratic/engine.py +0 -794
- empathy_os/socratic/explainer.py +0 -682
- empathy_os/socratic/feedback.py +0 -772
- empathy_os/socratic/forms.py +0 -629
- empathy_os/socratic/generator.py +0 -732
- empathy_os/socratic/llm_analyzer.py +0 -637
- empathy_os/socratic/mcp_server.py +0 -702
- empathy_os/socratic/session.py +0 -312
- empathy_os/socratic/storage.py +0 -667
- empathy_os/socratic/success.py +0 -730
- empathy_os/socratic/visual_editor.py +0 -860
- empathy_os/socratic/web_ui.py +0 -958
- empathy_os/telemetry/__init__.py +0 -39
- empathy_os/telemetry/agent_coordination.py +0 -475
- empathy_os/telemetry/agent_tracking.py +0 -367
- empathy_os/telemetry/approval_gates.py +0 -545
- empathy_os/telemetry/cli.py +0 -1231
- empathy_os/telemetry/commands/__init__.py +0 -14
- empathy_os/telemetry/commands/dashboard_commands.py +0 -696
- empathy_os/telemetry/event_streaming.py +0 -409
- empathy_os/telemetry/feedback_loop.py +0 -567
- empathy_os/telemetry/usage_tracker.py +0 -591
- empathy_os/templates.py +0 -754
- empathy_os/test_generator/__init__.py +0 -38
- empathy_os/test_generator/__main__.py +0 -14
- empathy_os/test_generator/cli.py +0 -234
- empathy_os/test_generator/generator.py +0 -355
- empathy_os/test_generator/risk_analyzer.py +0 -216
- empathy_os/tier_recommender.py +0 -384
- empathy_os/tools.py +0 -183
- empathy_os/trust/__init__.py +0 -28
- empathy_os/trust/circuit_breaker.py +0 -579
- empathy_os/trust_building.py +0 -527
- empathy_os/validation/__init__.py +0 -19
- empathy_os/validation/xml_validator.py +0 -281
- empathy_os/vscode_bridge.py +0 -173
- empathy_os/workflow_commands.py +0 -780
- empathy_os/workflow_patterns/__init__.py +0 -33
- empathy_os/workflow_patterns/behavior.py +0 -249
- empathy_os/workflow_patterns/core.py +0 -76
- empathy_os/workflow_patterns/output.py +0 -99
- empathy_os/workflow_patterns/registry.py +0 -255
- empathy_os/workflow_patterns/structural.py +0 -288
- empathy_os/workflows/__init__.py +0 -539
- empathy_os/workflows/autonomous_test_gen.py +0 -1268
- empathy_os/workflows/base.py +0 -2667
- empathy_os/workflows/batch_processing.py +0 -342
- empathy_os/workflows/bug_predict.py +0 -1084
- empathy_os/workflows/builder.py +0 -273
- empathy_os/workflows/caching.py +0 -253
- empathy_os/workflows/code_review.py +0 -1048
- empathy_os/workflows/code_review_adapters.py +0 -312
- empathy_os/workflows/code_review_pipeline.py +0 -722
- empathy_os/workflows/config.py +0 -645
- empathy_os/workflows/dependency_check.py +0 -644
- empathy_os/workflows/document_gen/__init__.py +0 -25
- empathy_os/workflows/document_gen/config.py +0 -30
- empathy_os/workflows/document_gen/report_formatter.py +0 -162
- empathy_os/workflows/document_gen/workflow.py +0 -1426
- empathy_os/workflows/document_manager.py +0 -216
- empathy_os/workflows/document_manager_README.md +0 -134
- empathy_os/workflows/documentation_orchestrator.py +0 -1205
- empathy_os/workflows/history.py +0 -510
- empathy_os/workflows/keyboard_shortcuts/__init__.py +0 -39
- empathy_os/workflows/keyboard_shortcuts/generators.py +0 -391
- empathy_os/workflows/keyboard_shortcuts/parsers.py +0 -416
- empathy_os/workflows/keyboard_shortcuts/prompts.py +0 -295
- empathy_os/workflows/keyboard_shortcuts/schema.py +0 -193
- empathy_os/workflows/keyboard_shortcuts/workflow.py +0 -509
- empathy_os/workflows/llm_base.py +0 -363
- empathy_os/workflows/manage_docs.py +0 -87
- empathy_os/workflows/manage_docs_README.md +0 -134
- empathy_os/workflows/manage_documentation.py +0 -821
- empathy_os/workflows/new_sample_workflow1.py +0 -149
- empathy_os/workflows/new_sample_workflow1_README.md +0 -150
- empathy_os/workflows/orchestrated_health_check.py +0 -849
- empathy_os/workflows/orchestrated_release_prep.py +0 -600
- empathy_os/workflows/output.py +0 -413
- empathy_os/workflows/perf_audit.py +0 -863
- empathy_os/workflows/pr_review.py +0 -762
- empathy_os/workflows/progress.py +0 -785
- empathy_os/workflows/progress_server.py +0 -322
- empathy_os/workflows/progressive/README 2.md +0 -454
- empathy_os/workflows/progressive/README.md +0 -454
- empathy_os/workflows/progressive/__init__.py +0 -82
- empathy_os/workflows/progressive/cli.py +0 -219
- empathy_os/workflows/progressive/core.py +0 -488
- empathy_os/workflows/progressive/orchestrator.py +0 -723
- empathy_os/workflows/progressive/reports.py +0 -520
- empathy_os/workflows/progressive/telemetry.py +0 -274
- empathy_os/workflows/progressive/test_gen.py +0 -495
- empathy_os/workflows/progressive/workflow.py +0 -589
- empathy_os/workflows/refactor_plan.py +0 -694
- empathy_os/workflows/release_prep.py +0 -895
- empathy_os/workflows/release_prep_crew.py +0 -969
- empathy_os/workflows/research_synthesis.py +0 -404
- empathy_os/workflows/routing.py +0 -168
- empathy_os/workflows/secure_release.py +0 -593
- empathy_os/workflows/security_adapters.py +0 -297
- empathy_os/workflows/security_audit.py +0 -1329
- empathy_os/workflows/security_audit_phase3.py +0 -355
- empathy_os/workflows/seo_optimization.py +0 -633
- empathy_os/workflows/step_config.py +0 -234
- empathy_os/workflows/telemetry_mixin.py +0 -269
- empathy_os/workflows/test5.py +0 -125
- empathy_os/workflows/test5_README.md +0 -158
- empathy_os/workflows/test_coverage_boost_crew.py +0 -849
- empathy_os/workflows/test_gen/__init__.py +0 -52
- empathy_os/workflows/test_gen/ast_analyzer.py +0 -249
- empathy_os/workflows/test_gen/config.py +0 -88
- empathy_os/workflows/test_gen/data_models.py +0 -38
- empathy_os/workflows/test_gen/report_formatter.py +0 -289
- empathy_os/workflows/test_gen/test_templates.py +0 -381
- empathy_os/workflows/test_gen/workflow.py +0 -655
- empathy_os/workflows/test_gen.py +0 -54
- empathy_os/workflows/test_gen_behavioral.py +0 -477
- empathy_os/workflows/test_gen_parallel.py +0 -341
- empathy_os/workflows/test_lifecycle.py +0 -526
- empathy_os/workflows/test_maintenance.py +0 -627
- empathy_os/workflows/test_maintenance_cli.py +0 -590
- empathy_os/workflows/test_maintenance_crew.py +0 -840
- empathy_os/workflows/test_runner.py +0 -622
- empathy_os/workflows/tier_tracking.py +0 -531
- empathy_os/workflows/xml_enhanced_crew.py +0 -285
- empathy_software_plugin/SOFTWARE_PLUGIN_README.md +0 -57
- empathy_software_plugin/cli/__init__.py +0 -120
- empathy_software_plugin/cli/inspect.py +0 -362
- empathy_software_plugin/cli.py +0 -574
- empathy_software_plugin/plugin.py +0 -188
- workflow_scaffolding/__init__.py +0 -11
- workflow_scaffolding/__main__.py +0 -12
- workflow_scaffolding/cli.py +0 -206
- workflow_scaffolding/generator.py +0 -265
- {empathy_framework-5.3.0.dist-info → empathy_framework-5.4.0.dist-info}/WHEEL +0 -0
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"""Task complexity scoring for adaptive prompt selection.
|
|
2
|
-
|
|
3
|
-
Uses simple heuristics (token count, LOC) to classify tasks as
|
|
4
|
-
simple, moderate, complex, or very complex, enabling dynamic
|
|
5
|
-
model tier and compression level selection.
|
|
6
|
-
|
|
7
|
-
Copyright 2026 Smart-AI-Memory
|
|
8
|
-
Licensed under Fair Source License 0.9
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
from dataclasses import dataclass
|
|
12
|
-
from enum import Enum
|
|
13
|
-
|
|
14
|
-
try:
|
|
15
|
-
import tiktoken
|
|
16
|
-
except ImportError:
|
|
17
|
-
tiktoken = None # type: ignore[assignment]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class TaskComplexity(Enum):
|
|
21
|
-
"""Task complexity levels for adaptive prompting."""
|
|
22
|
-
|
|
23
|
-
SIMPLE = "simple" # <100 tokens, <50 LOC
|
|
24
|
-
MODERATE = "moderate" # 100-500 tokens, 50-200 LOC
|
|
25
|
-
COMPLEX = "complex" # 500-2000 tokens, 200-1000 LOC
|
|
26
|
-
VERY_COMPLEX = "very_complex" # >2000 tokens, >1000 LOC
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@dataclass
|
|
30
|
-
class ComplexityScore:
|
|
31
|
-
"""Task complexity scoring result.
|
|
32
|
-
|
|
33
|
-
Attributes:
|
|
34
|
-
token_count: Estimated input tokens
|
|
35
|
-
line_count: Lines of code in context
|
|
36
|
-
file_count: Number of files involved
|
|
37
|
-
complexity_level: Classified complexity
|
|
38
|
-
confidence: Confidence in classification (0-1)
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
token_count: int
|
|
42
|
-
line_count: int
|
|
43
|
-
file_count: int
|
|
44
|
-
complexity_level: TaskComplexity
|
|
45
|
-
confidence: float
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
class TaskComplexityScorer:
|
|
49
|
-
"""Scores task complexity using simple heuristics.
|
|
50
|
-
|
|
51
|
-
Uses token counting (via tiktoken if available) and line counting
|
|
52
|
-
to estimate task complexity for adaptive prompt selection.
|
|
53
|
-
|
|
54
|
-
Usage:
|
|
55
|
-
scorer = TaskComplexityScorer()
|
|
56
|
-
score = scorer.score_task(
|
|
57
|
-
description="Refactor authentication module",
|
|
58
|
-
context=source_code,
|
|
59
|
-
files=["auth.py", "session.py"]
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
if score.complexity_level == TaskComplexity.VERY_COMPLEX:
|
|
63
|
-
use_premium_model()
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
def __init__(self):
|
|
67
|
-
"""Initialize complexity scorer."""
|
|
68
|
-
if tiktoken:
|
|
69
|
-
self.tokenizer = tiktoken.get_encoding("cl100k_base")
|
|
70
|
-
else:
|
|
71
|
-
self.tokenizer = None
|
|
72
|
-
|
|
73
|
-
def score_task(
|
|
74
|
-
self,
|
|
75
|
-
description: str,
|
|
76
|
-
context: str | None = None,
|
|
77
|
-
files: list[str] | None = None,
|
|
78
|
-
) -> ComplexityScore:
|
|
79
|
-
"""Score task complexity.
|
|
80
|
-
|
|
81
|
-
Args:
|
|
82
|
-
description: Task description
|
|
83
|
-
context: Optional context (code, docs, etc.)
|
|
84
|
-
files: Optional list of file paths
|
|
85
|
-
|
|
86
|
-
Returns:
|
|
87
|
-
ComplexityScore with classification and metrics
|
|
88
|
-
"""
|
|
89
|
-
# Count tokens
|
|
90
|
-
if self.tokenizer:
|
|
91
|
-
token_count = len(self.tokenizer.encode(description))
|
|
92
|
-
if context:
|
|
93
|
-
token_count += len(self.tokenizer.encode(context))
|
|
94
|
-
else:
|
|
95
|
-
# Fallback: rough estimate (4 chars per token)
|
|
96
|
-
token_count = len(description) // 4
|
|
97
|
-
if context:
|
|
98
|
-
token_count += len(context) // 4
|
|
99
|
-
|
|
100
|
-
# Count lines of code
|
|
101
|
-
line_count = 0
|
|
102
|
-
if context:
|
|
103
|
-
line_count = len(context.split("\n"))
|
|
104
|
-
|
|
105
|
-
# Count files
|
|
106
|
-
file_count = len(files) if files else 0
|
|
107
|
-
|
|
108
|
-
# Determine complexity level using thresholds
|
|
109
|
-
if token_count < 100 and line_count < 50:
|
|
110
|
-
complexity = TaskComplexity.SIMPLE
|
|
111
|
-
elif token_count < 500 and line_count < 200:
|
|
112
|
-
complexity = TaskComplexity.MODERATE
|
|
113
|
-
elif token_count < 2000 and line_count < 1000:
|
|
114
|
-
complexity = TaskComplexity.COMPLEX
|
|
115
|
-
else:
|
|
116
|
-
complexity = TaskComplexity.VERY_COMPLEX
|
|
117
|
-
|
|
118
|
-
# Confidence is moderate for simple heuristics
|
|
119
|
-
confidence = 0.8 if self.tokenizer else 0.6
|
|
120
|
-
|
|
121
|
-
return ComplexityScore(
|
|
122
|
-
token_count=token_count,
|
|
123
|
-
line_count=line_count,
|
|
124
|
-
file_count=file_count,
|
|
125
|
-
complexity_level=complexity,
|
|
126
|
-
confidence=confidence,
|
|
127
|
-
)
|
empathy_os/agent_monitoring.py
DELETED
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
"""Agent Monitoring for Distributed Memory Networks
|
|
2
|
-
|
|
3
|
-
Provides monitoring and metrics collection for multi-agent systems.
|
|
4
|
-
Tracks individual agent performance, pattern contributions, and
|
|
5
|
-
team-wide collaboration metrics.
|
|
6
|
-
|
|
7
|
-
Key metrics tracked:
|
|
8
|
-
- Agent interaction counts and response times
|
|
9
|
-
- Pattern discovery and reuse rates
|
|
10
|
-
- Cross-agent collaboration efficiency
|
|
11
|
-
- System health and performance
|
|
12
|
-
|
|
13
|
-
Copyright 2025 Smart AI Memory, LLC
|
|
14
|
-
Licensed under Fair Source 0.9
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
from dataclasses import dataclass, field
|
|
18
|
-
from datetime import datetime
|
|
19
|
-
from typing import Any
|
|
20
|
-
|
|
21
|
-
from .pattern_library import PatternLibrary
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
@dataclass
|
|
25
|
-
class AgentMetrics:
|
|
26
|
-
"""Metrics for a single agent"""
|
|
27
|
-
|
|
28
|
-
agent_id: str
|
|
29
|
-
total_interactions: int = 0
|
|
30
|
-
total_response_time_ms: float = 0.0
|
|
31
|
-
patterns_discovered: int = 0
|
|
32
|
-
patterns_used: int = 0
|
|
33
|
-
successful_pattern_uses: int = 0
|
|
34
|
-
failed_pattern_uses: int = 0
|
|
35
|
-
first_seen: datetime = field(default_factory=datetime.now)
|
|
36
|
-
last_active: datetime = field(default_factory=datetime.now)
|
|
37
|
-
|
|
38
|
-
@property
|
|
39
|
-
def avg_response_time_ms(self) -> float:
|
|
40
|
-
"""Average response time in milliseconds"""
|
|
41
|
-
if self.total_interactions == 0:
|
|
42
|
-
return 0.0
|
|
43
|
-
return self.total_response_time_ms / self.total_interactions
|
|
44
|
-
|
|
45
|
-
@property
|
|
46
|
-
def success_rate(self) -> float:
|
|
47
|
-
"""Pattern usage success rate"""
|
|
48
|
-
total = self.successful_pattern_uses + self.failed_pattern_uses
|
|
49
|
-
if total == 0:
|
|
50
|
-
return 0.0
|
|
51
|
-
return self.successful_pattern_uses / total
|
|
52
|
-
|
|
53
|
-
@property
|
|
54
|
-
def pattern_contribution_rate(self) -> float:
|
|
55
|
-
"""Rate of pattern discovery per interaction"""
|
|
56
|
-
if self.total_interactions == 0:
|
|
57
|
-
return 0.0
|
|
58
|
-
return self.patterns_discovered / self.total_interactions
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@dataclass
|
|
62
|
-
class TeamMetrics:
|
|
63
|
-
"""Aggregated metrics for an agent team"""
|
|
64
|
-
|
|
65
|
-
active_agents: int = 0
|
|
66
|
-
total_agents: int = 0
|
|
67
|
-
shared_patterns: int = 0
|
|
68
|
-
total_interactions: int = 0
|
|
69
|
-
pattern_reuse_count: int = 0
|
|
70
|
-
cross_agent_reuses: int = 0
|
|
71
|
-
|
|
72
|
-
@property
|
|
73
|
-
def pattern_reuse_rate(self) -> float:
|
|
74
|
-
"""Rate at which patterns are reused"""
|
|
75
|
-
if self.shared_patterns == 0:
|
|
76
|
-
return 0.0
|
|
77
|
-
return self.pattern_reuse_count / self.shared_patterns
|
|
78
|
-
|
|
79
|
-
@property
|
|
80
|
-
def collaboration_efficiency(self) -> float:
|
|
81
|
-
"""Measure of how effectively agents collaborate.
|
|
82
|
-
|
|
83
|
-
Higher values indicate more cross-agent pattern reuse,
|
|
84
|
-
meaning agents are learning from each other.
|
|
85
|
-
"""
|
|
86
|
-
if self.pattern_reuse_count == 0:
|
|
87
|
-
return 0.0
|
|
88
|
-
return self.cross_agent_reuses / self.pattern_reuse_count
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
class AgentMonitor:
|
|
92
|
-
"""Monitors and tracks metrics for multi-agent systems.
|
|
93
|
-
|
|
94
|
-
Provides insights into:
|
|
95
|
-
- Individual agent performance
|
|
96
|
-
- Pattern discovery and sharing
|
|
97
|
-
- Team collaboration effectiveness
|
|
98
|
-
- System health
|
|
99
|
-
|
|
100
|
-
Example:
|
|
101
|
-
>>> monitor = AgentMonitor()
|
|
102
|
-
>>>
|
|
103
|
-
>>> # Record agent activity
|
|
104
|
-
>>> monitor.record_interaction("code_reviewer", response_time_ms=150.0)
|
|
105
|
-
>>> monitor.record_pattern_discovery("code_reviewer")
|
|
106
|
-
>>> monitor.record_pattern_use("test_gen", pattern_agent="code_reviewer", success=True)
|
|
107
|
-
>>>
|
|
108
|
-
>>> # Get individual stats
|
|
109
|
-
>>> stats = monitor.get_agent_stats("code_reviewer")
|
|
110
|
-
>>> print(f"Interactions: {stats['total_interactions']}")
|
|
111
|
-
>>> print(f"Patterns discovered: {stats['patterns_discovered']}")
|
|
112
|
-
>>>
|
|
113
|
-
>>> # Get team stats
|
|
114
|
-
>>> team = monitor.get_team_stats()
|
|
115
|
-
>>> print(f"Collaboration efficiency: {team['collaboration_efficiency']:.0%}")
|
|
116
|
-
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
def __init__(self, pattern_library: PatternLibrary | None = None):
|
|
120
|
-
"""Initialize the AgentMonitor.
|
|
121
|
-
|
|
122
|
-
Args:
|
|
123
|
-
pattern_library: Optional pattern library to track for shared patterns
|
|
124
|
-
|
|
125
|
-
"""
|
|
126
|
-
self.agents: dict[str, AgentMetrics] = {}
|
|
127
|
-
self.pattern_library = pattern_library
|
|
128
|
-
|
|
129
|
-
# Track pattern reuse events
|
|
130
|
-
self.pattern_uses: list[dict[str, Any]] = []
|
|
131
|
-
|
|
132
|
-
# Track alerts
|
|
133
|
-
self.alerts: list[dict[str, Any]] = []
|
|
134
|
-
|
|
135
|
-
def record_interaction(
|
|
136
|
-
self,
|
|
137
|
-
agent_id: str,
|
|
138
|
-
response_time_ms: float = 0.0,
|
|
139
|
-
):
|
|
140
|
-
"""Record an agent interaction.
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
agent_id: ID of the agent
|
|
144
|
-
response_time_ms: Response time in milliseconds
|
|
145
|
-
|
|
146
|
-
"""
|
|
147
|
-
agent = self._get_or_create_agent(agent_id)
|
|
148
|
-
agent.total_interactions += 1
|
|
149
|
-
agent.total_response_time_ms += response_time_ms
|
|
150
|
-
agent.last_active = datetime.now()
|
|
151
|
-
|
|
152
|
-
# Check for performance alerts
|
|
153
|
-
if response_time_ms > 5000: # Over 5 seconds
|
|
154
|
-
self._add_alert(
|
|
155
|
-
agent_id=agent_id,
|
|
156
|
-
alert_type="slow_response",
|
|
157
|
-
message=f"Agent {agent_id} response time: {response_time_ms:.0f}ms",
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
def record_pattern_discovery(self, agent_id: str, pattern_id: str | None = None):
|
|
161
|
-
"""Record that an agent discovered a new pattern.
|
|
162
|
-
|
|
163
|
-
Args:
|
|
164
|
-
agent_id: ID of the agent that discovered the pattern
|
|
165
|
-
pattern_id: Optional pattern ID for tracking
|
|
166
|
-
|
|
167
|
-
"""
|
|
168
|
-
agent = self._get_or_create_agent(agent_id)
|
|
169
|
-
agent.patterns_discovered += 1
|
|
170
|
-
agent.last_active = datetime.now()
|
|
171
|
-
|
|
172
|
-
def record_pattern_use(
|
|
173
|
-
self,
|
|
174
|
-
agent_id: str,
|
|
175
|
-
pattern_id: str | None = None,
|
|
176
|
-
pattern_agent: str | None = None,
|
|
177
|
-
success: bool = True,
|
|
178
|
-
):
|
|
179
|
-
"""Record that an agent used a pattern.
|
|
180
|
-
|
|
181
|
-
Args:
|
|
182
|
-
agent_id: ID of the agent using the pattern
|
|
183
|
-
pattern_id: ID of the pattern being used
|
|
184
|
-
pattern_agent: ID of the agent that contributed the pattern
|
|
185
|
-
success: Whether the pattern use was successful
|
|
186
|
-
|
|
187
|
-
"""
|
|
188
|
-
agent = self._get_or_create_agent(agent_id)
|
|
189
|
-
agent.patterns_used += 1
|
|
190
|
-
|
|
191
|
-
if success:
|
|
192
|
-
agent.successful_pattern_uses += 1
|
|
193
|
-
else:
|
|
194
|
-
agent.failed_pattern_uses += 1
|
|
195
|
-
|
|
196
|
-
agent.last_active = datetime.now()
|
|
197
|
-
|
|
198
|
-
# Track cross-agent pattern reuse
|
|
199
|
-
is_cross_agent = pattern_agent is not None and pattern_agent != agent_id
|
|
200
|
-
self.pattern_uses.append(
|
|
201
|
-
{
|
|
202
|
-
"user_agent": agent_id,
|
|
203
|
-
"pattern_agent": pattern_agent,
|
|
204
|
-
"pattern_id": pattern_id,
|
|
205
|
-
"cross_agent": is_cross_agent,
|
|
206
|
-
"success": success,
|
|
207
|
-
"timestamp": datetime.now(),
|
|
208
|
-
},
|
|
209
|
-
)
|
|
210
|
-
|
|
211
|
-
def get_agent_stats(self, agent_id: str) -> dict[str, Any]:
|
|
212
|
-
"""Get statistics for a specific agent.
|
|
213
|
-
|
|
214
|
-
Args:
|
|
215
|
-
agent_id: ID of the agent
|
|
216
|
-
|
|
217
|
-
Returns:
|
|
218
|
-
Dictionary with agent statistics
|
|
219
|
-
|
|
220
|
-
"""
|
|
221
|
-
agent = self.agents.get(agent_id)
|
|
222
|
-
|
|
223
|
-
if agent is None:
|
|
224
|
-
return {
|
|
225
|
-
"agent_id": agent_id,
|
|
226
|
-
"total_interactions": 0,
|
|
227
|
-
"avg_response_time_ms": 0.0,
|
|
228
|
-
"patterns_discovered": 0,
|
|
229
|
-
"patterns_used": 0,
|
|
230
|
-
"success_rate": 0.0,
|
|
231
|
-
"status": "unknown",
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
# Determine agent status
|
|
235
|
-
inactive_threshold = 3600 # 1 hour
|
|
236
|
-
seconds_inactive = (datetime.now() - agent.last_active).total_seconds()
|
|
237
|
-
status = "active" if seconds_inactive < inactive_threshold else "inactive"
|
|
238
|
-
|
|
239
|
-
return {
|
|
240
|
-
"agent_id": agent_id,
|
|
241
|
-
"total_interactions": agent.total_interactions,
|
|
242
|
-
"avg_response_time_ms": agent.avg_response_time_ms,
|
|
243
|
-
"patterns_discovered": agent.patterns_discovered,
|
|
244
|
-
"patterns_used": agent.patterns_used,
|
|
245
|
-
"success_rate": agent.success_rate,
|
|
246
|
-
"pattern_contribution_rate": agent.pattern_contribution_rate,
|
|
247
|
-
"first_seen": agent.first_seen.isoformat(),
|
|
248
|
-
"last_active": agent.last_active.isoformat(),
|
|
249
|
-
"status": status,
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
def get_team_stats(self) -> dict[str, Any]:
|
|
253
|
-
"""Get aggregated statistics for the entire agent team.
|
|
254
|
-
|
|
255
|
-
Returns:
|
|
256
|
-
Dictionary with team-wide statistics
|
|
257
|
-
|
|
258
|
-
"""
|
|
259
|
-
if not self.agents:
|
|
260
|
-
# Get shared patterns count from library even if no agents
|
|
261
|
-
shared_patterns = 0
|
|
262
|
-
if self.pattern_library:
|
|
263
|
-
shared_patterns = len(self.pattern_library.patterns)
|
|
264
|
-
|
|
265
|
-
return {
|
|
266
|
-
"active_agents": 0,
|
|
267
|
-
"total_agents": 0,
|
|
268
|
-
"shared_patterns": shared_patterns,
|
|
269
|
-
"total_interactions": 0,
|
|
270
|
-
"total_patterns_discovered": 0,
|
|
271
|
-
"pattern_reuse_count": 0,
|
|
272
|
-
"cross_agent_reuses": 0,
|
|
273
|
-
"pattern_reuse_rate": 0.0,
|
|
274
|
-
"collaboration_efficiency": 0.0,
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
# Count active agents (active in last hour)
|
|
278
|
-
inactive_threshold = 3600
|
|
279
|
-
now = datetime.now()
|
|
280
|
-
active_count = sum(
|
|
281
|
-
1
|
|
282
|
-
for agent in self.agents.values()
|
|
283
|
-
if (now - agent.last_active).total_seconds() < inactive_threshold
|
|
284
|
-
)
|
|
285
|
-
|
|
286
|
-
# Calculate totals
|
|
287
|
-
total_interactions = sum(a.total_interactions for a in self.agents.values())
|
|
288
|
-
total_patterns_discovered = sum(a.patterns_discovered for a in self.agents.values())
|
|
289
|
-
|
|
290
|
-
# Calculate pattern reuse metrics
|
|
291
|
-
pattern_reuse_count = len(self.pattern_uses)
|
|
292
|
-
cross_agent_reuses = sum(1 for use in self.pattern_uses if use["cross_agent"])
|
|
293
|
-
|
|
294
|
-
# Get shared patterns count from library if available
|
|
295
|
-
shared_patterns = 0
|
|
296
|
-
if self.pattern_library:
|
|
297
|
-
shared_patterns = len(self.pattern_library.patterns)
|
|
298
|
-
else:
|
|
299
|
-
shared_patterns = total_patterns_discovered
|
|
300
|
-
|
|
301
|
-
# Calculate rates
|
|
302
|
-
reuse_rate = pattern_reuse_count / shared_patterns if shared_patterns > 0 else 0.0
|
|
303
|
-
collab_efficiency = (
|
|
304
|
-
cross_agent_reuses / pattern_reuse_count if pattern_reuse_count > 0 else 0.0
|
|
305
|
-
)
|
|
306
|
-
|
|
307
|
-
return {
|
|
308
|
-
"active_agents": active_count,
|
|
309
|
-
"total_agents": len(self.agents),
|
|
310
|
-
"shared_patterns": shared_patterns,
|
|
311
|
-
"total_interactions": total_interactions,
|
|
312
|
-
"total_patterns_discovered": total_patterns_discovered,
|
|
313
|
-
"pattern_reuse_count": pattern_reuse_count,
|
|
314
|
-
"cross_agent_reuses": cross_agent_reuses,
|
|
315
|
-
"pattern_reuse_rate": reuse_rate,
|
|
316
|
-
"collaboration_efficiency": collab_efficiency,
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
def get_top_contributors(self, n: int = 5) -> list[dict[str, Any]]:
|
|
320
|
-
"""Get the top pattern-contributing agents.
|
|
321
|
-
|
|
322
|
-
Args:
|
|
323
|
-
n: Number of agents to return
|
|
324
|
-
|
|
325
|
-
Returns:
|
|
326
|
-
List of agent stats, sorted by patterns discovered
|
|
327
|
-
|
|
328
|
-
"""
|
|
329
|
-
sorted_agents = sorted(
|
|
330
|
-
self.agents.values(),
|
|
331
|
-
key=lambda a: a.patterns_discovered,
|
|
332
|
-
reverse=True,
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
return [self.get_agent_stats(agent.agent_id) for agent in sorted_agents[:n]]
|
|
336
|
-
|
|
337
|
-
def get_alerts(self, limit: int = 100) -> list[dict[str, Any]]:
|
|
338
|
-
"""Get recent alerts.
|
|
339
|
-
|
|
340
|
-
Args:
|
|
341
|
-
limit: Maximum number of alerts to return
|
|
342
|
-
|
|
343
|
-
Returns:
|
|
344
|
-
List of alert dictionaries
|
|
345
|
-
|
|
346
|
-
"""
|
|
347
|
-
return self.alerts[-limit:]
|
|
348
|
-
|
|
349
|
-
def check_health(self) -> dict[str, Any]:
|
|
350
|
-
"""Check overall system health.
|
|
351
|
-
|
|
352
|
-
Returns:
|
|
353
|
-
Health status dictionary
|
|
354
|
-
|
|
355
|
-
"""
|
|
356
|
-
team_stats = self.get_team_stats()
|
|
357
|
-
recent_alerts = [
|
|
358
|
-
a for a in self.alerts if (datetime.now() - a["timestamp"]).total_seconds() < 3600
|
|
359
|
-
]
|
|
360
|
-
|
|
361
|
-
# Determine health status
|
|
362
|
-
issues = []
|
|
363
|
-
if team_stats["active_agents"] == 0:
|
|
364
|
-
issues.append("No active agents")
|
|
365
|
-
if team_stats["collaboration_efficiency"] < 0.1 and team_stats["pattern_reuse_count"] > 10:
|
|
366
|
-
issues.append("Low collaboration efficiency")
|
|
367
|
-
if len(recent_alerts) > 10:
|
|
368
|
-
issues.append("High alert volume")
|
|
369
|
-
|
|
370
|
-
status = "healthy"
|
|
371
|
-
if issues:
|
|
372
|
-
status = "degraded" if len(issues) == 1 else "unhealthy"
|
|
373
|
-
|
|
374
|
-
return {
|
|
375
|
-
"status": status,
|
|
376
|
-
"issues": issues,
|
|
377
|
-
"active_agents": team_stats["active_agents"],
|
|
378
|
-
"recent_alerts": len(recent_alerts),
|
|
379
|
-
"timestamp": datetime.now().isoformat(),
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
def _get_or_create_agent(self, agent_id: str) -> AgentMetrics:
|
|
383
|
-
"""Get existing agent metrics or create new"""
|
|
384
|
-
if agent_id not in self.agents:
|
|
385
|
-
self.agents[agent_id] = AgentMetrics(agent_id=agent_id)
|
|
386
|
-
return self.agents[agent_id]
|
|
387
|
-
|
|
388
|
-
def _add_alert(
|
|
389
|
-
self,
|
|
390
|
-
agent_id: str,
|
|
391
|
-
alert_type: str,
|
|
392
|
-
message: str,
|
|
393
|
-
severity: str = "warning",
|
|
394
|
-
):
|
|
395
|
-
"""Add an alert to the monitoring system"""
|
|
396
|
-
self.alerts.append(
|
|
397
|
-
{
|
|
398
|
-
"agent_id": agent_id,
|
|
399
|
-
"alert_type": alert_type,
|
|
400
|
-
"message": message,
|
|
401
|
-
"severity": severity,
|
|
402
|
-
"timestamp": datetime.now(),
|
|
403
|
-
},
|
|
404
|
-
)
|
|
405
|
-
|
|
406
|
-
# Keep alerts bounded
|
|
407
|
-
if len(self.alerts) > 1000:
|
|
408
|
-
self.alerts = self.alerts[-500:]
|
|
409
|
-
|
|
410
|
-
def reset(self):
|
|
411
|
-
"""Reset all monitoring data"""
|
|
412
|
-
self.agents = {}
|
|
413
|
-
self.pattern_uses = []
|
|
414
|
-
self.alerts = []
|
empathy_os/cache/__init__.py
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"""Response caching for Empathy Framework workflows.
|
|
2
|
-
|
|
3
|
-
Provides hybrid hash + semantic similarity caching to reduce API costs by 70%.
|
|
4
|
-
|
|
5
|
-
Usage:
|
|
6
|
-
from empathy_os.cache import create_cache
|
|
7
|
-
|
|
8
|
-
# Auto-detect best cache (hybrid if deps available, hash-only otherwise)
|
|
9
|
-
cache = create_cache()
|
|
10
|
-
|
|
11
|
-
# Manual cache selection
|
|
12
|
-
from empathy_os.cache import HashOnlyCache, HybridCache
|
|
13
|
-
|
|
14
|
-
cache = HashOnlyCache() # Always available
|
|
15
|
-
cache = HybridCache() # Requires sentence-transformers
|
|
16
|
-
|
|
17
|
-
Copyright 2025 Smart-AI-Memory
|
|
18
|
-
Licensed under Fair Source License 0.9
|
|
19
|
-
"""
|
|
20
|
-
|
|
21
|
-
import logging
|
|
22
|
-
from typing import Optional
|
|
23
|
-
|
|
24
|
-
from .base import BaseCache, CacheEntry, CacheStats
|
|
25
|
-
from .hash_only import HashOnlyCache
|
|
26
|
-
|
|
27
|
-
logger = logging.getLogger(__name__)
|
|
28
|
-
|
|
29
|
-
# Try to import HybridCache (requires optional dependencies)
|
|
30
|
-
try:
|
|
31
|
-
from .hybrid import HybridCache
|
|
32
|
-
|
|
33
|
-
HYBRID_AVAILABLE = True
|
|
34
|
-
except ImportError:
|
|
35
|
-
HYBRID_AVAILABLE = False
|
|
36
|
-
HybridCache = None # type: ignore
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def create_cache(
|
|
40
|
-
cache_type: str | None = None,
|
|
41
|
-
**kwargs,
|
|
42
|
-
) -> BaseCache:
|
|
43
|
-
"""Create appropriate cache based on available dependencies.
|
|
44
|
-
|
|
45
|
-
Auto-detects if sentence-transformers is available and creates
|
|
46
|
-
HybridCache if possible, otherwise falls back to HashOnlyCache.
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
cache_type: Force specific cache type ("hash" | "hybrid" | None for auto).
|
|
50
|
-
**kwargs: Additional arguments passed to cache constructor.
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
BaseCache instance (HybridCache or HashOnlyCache).
|
|
54
|
-
|
|
55
|
-
Example:
|
|
56
|
-
# Auto-detect (recommended)
|
|
57
|
-
cache = create_cache()
|
|
58
|
-
|
|
59
|
-
# Force hash-only
|
|
60
|
-
cache = create_cache(cache_type="hash")
|
|
61
|
-
|
|
62
|
-
# Force hybrid (raises ImportError if deps missing)
|
|
63
|
-
cache = create_cache(cache_type="hybrid")
|
|
64
|
-
|
|
65
|
-
"""
|
|
66
|
-
# Force hash-only
|
|
67
|
-
if cache_type == "hash":
|
|
68
|
-
logger.info("Using hash-only cache (explicit)")
|
|
69
|
-
return HashOnlyCache(**kwargs)
|
|
70
|
-
|
|
71
|
-
# Force hybrid
|
|
72
|
-
if cache_type == "hybrid":
|
|
73
|
-
if not HYBRID_AVAILABLE:
|
|
74
|
-
raise ImportError(
|
|
75
|
-
"HybridCache requires sentence-transformers. "
|
|
76
|
-
"Install with: pip install empathy-framework[cache]"
|
|
77
|
-
)
|
|
78
|
-
logger.info("Using hybrid cache (explicit)")
|
|
79
|
-
return HybridCache(**kwargs)
|
|
80
|
-
|
|
81
|
-
# Auto-detect (default)
|
|
82
|
-
if HYBRID_AVAILABLE:
|
|
83
|
-
logger.info("Using hybrid cache (auto-detected)")
|
|
84
|
-
return HybridCache(**kwargs)
|
|
85
|
-
else:
|
|
86
|
-
logger.info(
|
|
87
|
-
"Using hash-only cache (sentence-transformers not available). "
|
|
88
|
-
"For 70% cost savings, install with: pip install empathy-framework[cache]"
|
|
89
|
-
)
|
|
90
|
-
return HashOnlyCache(**kwargs)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def auto_setup_cache() -> None:
|
|
94
|
-
"""Auto-setup cache with one-time prompt if dependencies missing.
|
|
95
|
-
|
|
96
|
-
Called automatically by BaseWorkflow on first run.
|
|
97
|
-
Prompts user to install cache dependencies if not available.
|
|
98
|
-
|
|
99
|
-
"""
|
|
100
|
-
from .dependency_manager import DependencyManager
|
|
101
|
-
|
|
102
|
-
manager = DependencyManager()
|
|
103
|
-
|
|
104
|
-
if manager.should_prompt_cache_install():
|
|
105
|
-
manager.prompt_cache_install()
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
__all__ = [
|
|
109
|
-
"BaseCache",
|
|
110
|
-
"CacheEntry",
|
|
111
|
-
"CacheStats",
|
|
112
|
-
"HashOnlyCache",
|
|
113
|
-
"HybridCache",
|
|
114
|
-
"create_cache",
|
|
115
|
-
"auto_setup_cache",
|
|
116
|
-
"HYBRID_AVAILABLE",
|
|
117
|
-
]
|