empathy-framework 5.2.1__py3-none-any.whl → 5.3.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.2.1.dist-info → empathy_framework-5.3.0.dist-info}/METADATA +28 -4
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/RECORD +27 -49
- empathy_os/__init__.py +1 -1
- empathy_os/cache/hybrid.py +5 -1
- empathy_os/cli/commands/batch.py +8 -0
- empathy_os/cli/commands/profiling.py +4 -0
- empathy_os/cli/commands/workflow.py +8 -4
- empathy_os/config.py +15 -2
- empathy_os/dashboard/simple_server.py +62 -30
- empathy_os/memory/long_term.py +5 -5
- empathy_os/memory/mixins/backend_init_mixin.py +6 -1
- empathy_os/memory/mixins/capabilities_mixin.py +12 -3
- empathy_os/memory/short_term.py +54 -12
- empathy_os/memory/simple_storage.py +3 -3
- empathy_os/memory/types.py +8 -3
- empathy_os/telemetry/agent_coordination.py +2 -3
- empathy_os/telemetry/agent_tracking.py +26 -7
- empathy_os/telemetry/approval_gates.py +18 -24
- empathy_os/telemetry/event_streaming.py +7 -3
- empathy_os/telemetry/feedback_loop.py +28 -15
- empathy_os/workflows/output.py +4 -1
- empathy_os/workflows/progress.py +8 -2
- empathy_os/cli/parsers/cache 2.py +0 -65
- empathy_os/cli_router 2.py +0 -416
- empathy_os/dashboard/app 2.py +0 -512
- empathy_os/dashboard/simple_server 2.py +0 -403
- empathy_os/dashboard/standalone_server 2.py +0 -536
- empathy_os/models/adaptive_routing 2.py +0 -437
- empathy_os/project_index/scanner_parallel 2.py +0 -291
- empathy_os/telemetry/agent_coordination 2.py +0 -478
- empathy_os/telemetry/agent_tracking 2.py +0 -350
- empathy_os/telemetry/approval_gates 2.py +0 -563
- empathy_os/telemetry/event_streaming 2.py +0 -405
- empathy_os/telemetry/feedback_loop 2.py +0 -557
- empathy_os/vscode_bridge 2.py +0 -173
- empathy_os/workflows/document_gen.py +0 -29
- empathy_os/workflows/progressive/__init__ 2.py +0 -92
- empathy_os/workflows/progressive/cli 2.py +0 -242
- empathy_os/workflows/progressive/core 2.py +0 -488
- empathy_os/workflows/progressive/orchestrator 2.py +0 -701
- empathy_os/workflows/progressive/reports 2.py +0 -528
- empathy_os/workflows/progressive/telemetry 2.py +0 -280
- empathy_os/workflows/progressive/test_gen 2.py +0 -514
- empathy_os/workflows/progressive/workflow 2.py +0 -628
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/WHEEL +0 -0
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/entry_points.txt +0 -0
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/licenses/LICENSE +0 -0
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md +0 -0
- {empathy_framework-5.2.1.dist-info → empathy_framework-5.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: empathy-framework
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.0
|
|
4
4
|
Summary: AI collaboration framework with real LLM agent execution, AskUserQuestion tool integration, Socratic agent generation, progressive tier escalation (70-85% cost savings), meta-orchestration, dynamic agent composition (10 patterns including Anthropic-inspired), intelligent caching (85% hit rate), semantic workflow discovery, visual workflow editor, MCP integration for Claude Code, and multi-agent orchestration.
|
|
5
5
|
Author-email: Patrick Roebuck <admin@smartaimemory.com>
|
|
6
6
|
Maintainer-email: Smart-AI-Memory <admin@smartaimemory.com>
|
|
@@ -444,7 +444,7 @@ pip install empathy-framework[developer]
|
|
|
444
444
|
**Empathy Framework is evolving to focus exclusively on Anthropic/Claude** to unlock features impossible with multi-provider abstraction:
|
|
445
445
|
|
|
446
446
|
- **📦 Prompt Caching:** 90% cost reduction on repeated prompts
|
|
447
|
-
- **📖
|
|
447
|
+
- **📖 Flexible Context:** 200K via subscription for most tasks, up to 1M via API for large codebases
|
|
448
448
|
- **🧠 Extended Thinking:** See Claude's internal reasoning process
|
|
449
449
|
- **🔧 Advanced Tool Use:** Optimized for agentic workflows
|
|
450
450
|
|
|
@@ -458,6 +458,30 @@ pip install empathy-framework[developer]
|
|
|
458
458
|
|
|
459
459
|
---
|
|
460
460
|
|
|
461
|
+
## What's New in v5.3.0
|
|
462
|
+
|
|
463
|
+
**🎨 Dashboard Enhancements** - Improved usability and clarity:
|
|
464
|
+
|
|
465
|
+
- **Agent Display Names** - Human-readable labels for agents in dashboard (e.g., "Code Analyzer" instead of UUID)
|
|
466
|
+
- **Comprehensive Help Panel** - 5-section accordion explaining dashboard features, use cases, and Redis setup
|
|
467
|
+
- **UX Improvements** - "Source Agent:" label clarity, "Redis Requires Enabling" status message
|
|
468
|
+
- **Browser Cache Busting** - Date-based versioning ensures updates appear immediately
|
|
469
|
+
|
|
470
|
+
**📚 Documentation Improvements**:
|
|
471
|
+
|
|
472
|
+
- Clarified flexible context strategy (200K subscription + 1M API routing)
|
|
473
|
+
- Added Redis requirement documentation for dashboard
|
|
474
|
+
- Root directory cleanup (8 archived files)
|
|
475
|
+
|
|
476
|
+
**🧪 Test Infrastructure**:
|
|
477
|
+
|
|
478
|
+
- Sequential test execution to fix import timing issues
|
|
479
|
+
- All agent tracking tests passing (19/19)
|
|
480
|
+
|
|
481
|
+
[See Full Changelog](CHANGELOG.md#530---2026-01-31)
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
461
485
|
## What's New in v5.1.0
|
|
462
486
|
|
|
463
487
|
**🤖 Multi-Agent Orchestration** - Full support for custom agents and Anthropic LLM agents:
|
|
@@ -472,7 +496,7 @@ pip install empathy-framework[developer]
|
|
|
472
496
|
|
|
473
497
|
- **Custom Agents** - Build specialized agents for your workflow needs
|
|
474
498
|
- **LLM Agents from Anthropic** - Leverage Claude's advanced capabilities
|
|
475
|
-
- Dashboard accessible at `http://localhost:8000` with `python examples/dashboard_demo.py`
|
|
499
|
+
- Dashboard accessible at `http://localhost:8000` with `python examples/dashboard_demo.py` **(Requires Redis)**
|
|
476
500
|
|
|
477
501
|
**🔐 Authentication Strategy System** - Intelligent routing between Claude subscriptions and Anthropic API:
|
|
478
502
|
|
|
@@ -902,7 +926,7 @@ export ANTHROPIC_API_KEY="sk-ant-..."
|
|
|
902
926
|
export OPENAI_API_KEY="sk-..."
|
|
903
927
|
export GOOGLE_API_KEY="..."
|
|
904
928
|
|
|
905
|
-
# Optional: Redis for memory
|
|
929
|
+
# Optional (but required for Agent Dashboard): Redis for memory
|
|
906
930
|
export REDIS_URL="redis://localhost:6379"
|
|
907
931
|
```
|
|
908
932
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
empathy_framework-5.
|
|
2
|
-
empathy_framework-5.
|
|
1
|
+
empathy_framework-5.3.0.dist-info/licenses/LICENSE,sha256=kqe3EeGatNB79lUTHxjLnxDe7VJr0iYetThOr4_Fx7A,11348
|
|
2
|
+
empathy_framework-5.3.0.dist-info/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md,sha256=Grc_xHyZL62DTvEQ-fPH2sgX8mdkgjws4yeDFWTJRV0,3868
|
|
3
3
|
empathy_healthcare_plugin/__init__.py,sha256=4NioL1_86UXzkd-QNkQZUSZ8rKTQGSP0TC9VXP32kQs,295
|
|
4
4
|
empathy_healthcare_plugin/monitors/__init__.py,sha256=Udp8qfZR504QAq5_eQjvtIaE7v06Yguc7nuF40KllQc,196
|
|
5
5
|
empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py,sha256=MWE5t8tW9HWZn_SNo-inx8-0nhdTNGhbcB8ZeDWyXa0,11648
|
|
@@ -95,16 +95,15 @@ empathy_llm_toolkit/security/secure_memdocs.py,sha256=x6won-u3tiBkv5ZPVRpSJKTs1m
|
|
|
95
95
|
empathy_llm_toolkit/security/secure_memdocs_example.py,sha256=4UwbaM5X-c93p4_3pz6LKaeNYzfxptzbsYY_-ZuG0A0,8359
|
|
96
96
|
empathy_llm_toolkit/utils/__init__.py,sha256=b2Juy_nuMJ7Ax9tck725V7i3s5shaMSfqZZbiJ2-rOc,187
|
|
97
97
|
empathy_llm_toolkit/utils/tokens.py,sha256=vu5aggQYmoESIG1dkFahfX6hs6QiyPPF0gMTEp9mGak,11220
|
|
98
|
-
empathy_os/__init__.py,sha256=
|
|
98
|
+
empathy_os/__init__.py,sha256=5ng8THjtd_o6UYa5rGNfchWaCfDWyaF2adJSs8pHvHs,12061
|
|
99
99
|
empathy_os/agent_monitoring.py,sha256=s4seLC_J4AtQ3PYWrRPO8YHM-Fbm0Q36kPEdlTHf2HI,13375
|
|
100
100
|
empathy_os/cache_monitor.py,sha256=lcBqODhYY9iPaH35PWkOSgyMavdvXneHv9F57dPmjnc,11190
|
|
101
101
|
empathy_os/cache_stats.py,sha256=rWJPBNFEfhuLwKYKy89D_Qa9GPIyVso2jdCKp_cdJhI,10232
|
|
102
102
|
empathy_os/cli_legacy.py,sha256=x5z48dIfBcUHdhkMLT2q99iVZ2o7UFXyk46P4bgfj0s,140265
|
|
103
103
|
empathy_os/cli_minimal.py,sha256=Tp47-M7ptrBAAsdkwFXrE2IK7SJPj3_EjHZP1DtpWVM,41188
|
|
104
|
-
empathy_os/cli_router 2.py,sha256=86gc917B1hfmnv1nEfNLQU7_uyDbuu9ORSH5eofcIXE,14616
|
|
105
104
|
empathy_os/cli_router.py,sha256=rSGEKafKLvFO-LUlJfcwdvMS32xBhmVNyRcPcxc1h3s,16131
|
|
106
105
|
empathy_os/cli_unified.py,sha256=w80cyED93QFu3puC4qiIrrLtTmsfTi2stPsHGqroUfI,25387
|
|
107
|
-
empathy_os/config.py,sha256=
|
|
106
|
+
empathy_os/config.py,sha256=wzBHoUjfdU6WWNoKxQpTrCuaH0psJmnr5QRxBd0aUaI,16731
|
|
108
107
|
empathy_os/coordination.py,sha256=E2HvHxKk1xbYswtgxhnVKB6DRxfXUV5pCt-XWHOvNKM,28509
|
|
109
108
|
empathy_os/core.py,sha256=JSqejXdUIced5FZpoOr2_DF5BaRfWnXlZkuDDQkg5Cw,53968
|
|
110
109
|
empathy_os/cost_tracker.py,sha256=00QFmAsV0k4aJ8_TjcsOrUGLvG7I-BSJgs3TjBPHfIo,22997
|
|
@@ -125,7 +124,6 @@ empathy_os/templates.py,sha256=B5fzlc6wU3lwdaKK4ZUdytqOYrM6TEnFteZ0nCSp_EI,17220
|
|
|
125
124
|
empathy_os/tier_recommender.py,sha256=oYOKhnrTG2sqYsDvojQyaKuyC4ac_weSz4Xv0j0TuP8,14305
|
|
126
125
|
empathy_os/tools.py,sha256=YCfHTm9Es6wwh7oESt4q0mDz7AV8ecvMAB_1_0516r4,6225
|
|
127
126
|
empathy_os/trust_building.py,sha256=z2ZsQWK5QjX6d7pxFWrFD54J1keUguTog6YztZJVPKI,19180
|
|
128
|
-
empathy_os/vscode_bridge 2.py,sha256=SgFmWFCoAoPww-g2hsRC2VeqAMTqUmXXxJ3hglykxP4,4967
|
|
129
127
|
empathy_os/vscode_bridge.py,sha256=SgFmWFCoAoPww-g2hsRC2VeqAMTqUmXXxJ3hglykxP4,4967
|
|
130
128
|
empathy_os/workflow_commands.py,sha256=tps6norBiw7Q2hV0qdqwdX4B7Kedt_FwYBQWhc2oEYg,25482
|
|
131
129
|
empathy_os/adaptive/__init__.py,sha256=07m_Gsdxmm9mDBjJRFz7a8wZK-Tdd2QFRQOUw6yCc1w,342
|
|
@@ -134,13 +132,13 @@ empathy_os/cache/__init__.py,sha256=nKHyWnQmyBU6f24UOq5iZ4ULUFys5Dhl6dFZlU0jlHU,
|
|
|
134
132
|
empathy_os/cache/base.py,sha256=1waj2OZ_5gRhwYhSfsSfgQs1N_ftZcAq6UAV9RctSek,3968
|
|
135
133
|
empathy_os/cache/dependency_manager.py,sha256=lObktgRVeN-Z1ajGpAPuTvW1bOlLaHBNvoeGoCdOhAo,7747
|
|
136
134
|
empathy_os/cache/hash_only.py,sha256=N9fJw-IGOzgfDOuKe15e3AzLrxkjDBbwDXEgR1DYXAo,7492
|
|
137
|
-
empathy_os/cache/hybrid.py,sha256=
|
|
135
|
+
empathy_os/cache/hybrid.py,sha256=uRby-q75IWTOAmubH0jKHdc2h0lZW-xh5T-1cdm69wQ,15542
|
|
138
136
|
empathy_os/cache/storage.py,sha256=eTXP8rZRlalNRlsZxsaolMg81JNfjDrD129e-p9Wjk0,7792
|
|
139
137
|
empathy_os/cli/__init__.py,sha256=7PFURX1O4_sX14kWvNrnAV1Ndeixrx_nI8IN8eLQpQs,4951
|
|
140
138
|
empathy_os/cli/__main__.py,sha256=md0GsFpiTgifmJ0MJQ_E6Daq9JCxyCUgOUJRdJ69Ews,215
|
|
141
139
|
empathy_os/cli/core.py,sha256=USK7MwpSqxKcMP0rxtf9qqTgQ1GMmcPpXBw9uadQ3sM,883
|
|
142
140
|
empathy_os/cli/commands/__init__.py,sha256=GYdoNv80KS2p7bCThuoRbhiLmIZW6ddPqPEFEx567nQ,35
|
|
143
|
-
empathy_os/cli/commands/batch.py,sha256=
|
|
141
|
+
empathy_os/cli/commands/batch.py,sha256=ldSUkCbwcKW3g_icAPmNT1-TPcJcUIWzpmtYShr1EO4,8570
|
|
144
142
|
empathy_os/cli/commands/cache.py,sha256=1KSX_4dv1ZfwtfGxhb5kop-8mSPBCkFFFAI9BCfh9Wk,8188
|
|
145
143
|
empathy_os/cli/commands/help.py,sha256=AerAgAl0zW8YCCQIkxxc9p9K_wAskDGNhq211elPY_k,10082
|
|
146
144
|
empathy_os/cli/commands/info.py,sha256=SFwOAhHjIoHRguqbMEPT0lG7bbt72Zv5AFpZjJPfHm8,4794
|
|
@@ -150,7 +148,7 @@ empathy_os/cli/commands/memory.py,sha256=1NTgfIHGdjKwsU5fAZZwZI5HUN7b4AE62_UF9ps
|
|
|
150
148
|
empathy_os/cli/commands/metrics.py,sha256=pX41tJpvRu-rGip2drdCkgZ0LDxOd0DVGXuV_hEY7ng,3176
|
|
151
149
|
empathy_os/cli/commands/orchestrate.py,sha256=ifqEGUGaz8aF1mW3muGrbaJRqqJodcBXIyZDIIf1WPA,6553
|
|
152
150
|
empathy_os/cli/commands/patterns.py,sha256=EVLX4akwGdkZOvJEQZDUojIAa5yK_50rE-TTFzEs-9w,7938
|
|
153
|
-
empathy_os/cli/commands/profiling.py,sha256=
|
|
151
|
+
empathy_os/cli/commands/profiling.py,sha256=C0yLguK3fzLXEqE-FHfxvG59_N0OBIZm054ee4DyEyc,6021
|
|
154
152
|
empathy_os/cli/commands/provider.py,sha256=Mg8SjNsWKfhhdEZ0RvyfEaR3yiYcGj5L6OE5YFZRRFw,3095
|
|
155
153
|
empathy_os/cli/commands/routing.py,sha256=5pcDRiSqCHZRJt1m1nU2upEZrvNCM2O84NAzPCA06_c,9904
|
|
156
154
|
empathy_os/cli/commands/setup.py,sha256=cF_3u7lrxfoyTr-ucu4D4Gc01EqtAQSxrwwU32tDsA0,3456
|
|
@@ -158,10 +156,9 @@ empathy_os/cli/commands/status.py,sha256=ZIJx4Y0iMVFW_NDnoio1R6NBcXXS543QD9MwdaP
|
|
|
158
156
|
empathy_os/cli/commands/sync.py,sha256=5ABcmJ--puRXEH10yXBMOnqaue1miEPCzYhIbov5pq8,5094
|
|
159
157
|
empathy_os/cli/commands/tier.py,sha256=3l3j7m83lcaKUFClTb2iU5vkH06zC8-eLGrt-KHdz0M,3745
|
|
160
158
|
empathy_os/cli/commands/utilities.py,sha256=e4izGTS_uOy4YJDPwPbQnQ20p9M2v3JUyqAQEPwitMc,3737
|
|
161
|
-
empathy_os/cli/commands/workflow.py,sha256=
|
|
159
|
+
empathy_os/cli/commands/workflow.py,sha256=ThU0g2a-4roFHHSfBR6pyKJTV2c2BawpVxvXvTT5YFY,23577
|
|
162
160
|
empathy_os/cli/parsers/__init__.py,sha256=Oihx1jb5wN_4GS3RxZiEYhQhglI44idOOlFJs9a6e5g,1677
|
|
163
161
|
empathy_os/cli/parsers/batch.py,sha256=wSutRqerJZxUNVNIotU9qtI8EGP6IzVihEZUViCItCQ,3236
|
|
164
|
-
empathy_os/cli/parsers/cache 2.py,sha256=_SpFE48JM1xfAvb_ndqYNR0bP4EyMb_T_PlmIsIHf5o,1797
|
|
165
162
|
empathy_os/cli/parsers/cache.py,sha256=_SpFE48JM1xfAvb_ndqYNR0bP4EyMb_T_PlmIsIHf5o,1797
|
|
166
163
|
empathy_os/cli/parsers/help.py,sha256=I3QFDVABxZpYDCJ52GNWwfQlKEdV72Yr9A8spPHqUqU,1642
|
|
167
164
|
empathy_os/cli/parsers/info.py,sha256=525oPlxKkOJk8tra_a2ga9DKm6VtejQUBWzBCDQK1v4,989
|
|
@@ -183,11 +180,8 @@ empathy_os/config/__init__.py,sha256=veciTnRf0kNm9L8wxF95-FBnNjXdxucNnbnLlERpO2Y
|
|
|
183
180
|
empathy_os/config/xml_config.py,sha256=iXFJvGPlSoxRdARlxx-7YIdxb8eRiFHVRWM6-HwOWBc,8899
|
|
184
181
|
empathy_os/core_modules/__init__.py,sha256=jUbjfT2UHOLrJStqvIPqxbr02_2fofqTYqGdXvKxwFI,274
|
|
185
182
|
empathy_os/dashboard/__init__.py,sha256=gJXfr0R0uA3nHJnay2oYJlWYcGfZIZykr0O_hCUPfLQ,1412
|
|
186
|
-
empathy_os/dashboard/app 2.py,sha256=taCHkhSAsnna_joClhLTai5ayevYbh67nJDpOYOU-EA,16147
|
|
187
183
|
empathy_os/dashboard/app.py,sha256=J1OSKQRDxv6uYTI30fEycpktpDzTn6J5pEO3NhLMkEE,16147
|
|
188
|
-
empathy_os/dashboard/simple_server
|
|
189
|
-
empathy_os/dashboard/simple_server.py,sha256=L2uSgCJtiHS7TZSu-iEXpImNTAW4w3zNVg8YNsj5vPs,14667
|
|
190
|
-
empathy_os/dashboard/standalone_server 2.py,sha256=c6csNtVFTeQNgaCTYC7EhC9A5AyQab8wbFPHy07rZdE,20331
|
|
184
|
+
empathy_os/dashboard/simple_server.py,sha256=XGdSi98eOqvVi7JA3f4_tJogH35WQKgJ5s8No5Q3CHM,16106
|
|
191
185
|
empathy_os/dashboard/standalone_server.py,sha256=rsJdlHZii3UUbA4Yi3H8KDmc77RGqBbyZUHIOKvFE2M,20862
|
|
192
186
|
empathy_os/hot_reload/README.md,sha256=FnQWSX-dfTIJvXHjjiWRWBjMK2DR-eyOfDHJlGIzm0o,10406
|
|
193
187
|
empathy_os/hot_reload/__init__.py,sha256=Aos2tLSKRzOLr5zRomLyzrz6qDRd1_PlinI3vrJcCTo,1642
|
|
@@ -208,19 +202,19 @@ empathy_os/memory/edges.py,sha256=O-GVRS9q12-NBGVun8FUbEHE0y3CjHCV1s_KrzC_WZw,59
|
|
|
208
202
|
empathy_os/memory/encryption.py,sha256=onZIElhiBBJQ0snIxWnWT9zfzV_g7JPrAMXYNmEUoiY,5140
|
|
209
203
|
empathy_os/memory/file_session.py,sha256=Iisrqom4bsodpeRFTnugoTcH_fZEhfwgtCD3_oNxXd4,25985
|
|
210
204
|
empathy_os/memory/graph.py,sha256=JSAag-p5vCh4jznjUTUHdMNfyOAHjtOUDix6eLUeIcA,19023
|
|
211
|
-
empathy_os/memory/long_term.py,sha256=
|
|
205
|
+
empathy_os/memory/long_term.py,sha256=H2yKuuKoLxGHWcspsNp6ixUYIjj_jdhxeRG-7WKhk5c,32447
|
|
212
206
|
empathy_os/memory/long_term_types.py,sha256=tkzcQUmbF-DQEYpjdy5uqThPNI_wK15y96rFYk58e3c,2870
|
|
213
207
|
empathy_os/memory/nodes.py,sha256=h71kV3x2ALzuTOdrB7LQswZWai71HzGHKlFBzf7TwrI,4795
|
|
214
208
|
empathy_os/memory/redis_bootstrap.py,sha256=G71loEE2LTcn0BCp_mN96Bk37ygFz1ImORiLoEmg9jA,16508
|
|
215
|
-
empathy_os/memory/short_term.py,sha256=
|
|
216
|
-
empathy_os/memory/simple_storage.py,sha256=
|
|
209
|
+
empathy_os/memory/short_term.py,sha256=MjFZuD2d-1Nrh_K7eRZwuqCTUmU8DR21hJq5_0jgB7g,71964
|
|
210
|
+
empathy_os/memory/simple_storage.py,sha256=8nLhB7HOWJCLew-f3C_Apqltfy44L3UshNx3yjRUi9Q,9837
|
|
217
211
|
empathy_os/memory/storage_backend.py,sha256=E9z8iALiNkwIDbEx9vc4rA4ePv0YDqi0oW81RHddWrc,5046
|
|
218
212
|
empathy_os/memory/summary_index.py,sha256=7m_m2xH3KMBJWRJFvk3hAws_tgPD4VCfFBxwAbV9fCo,20777
|
|
219
|
-
empathy_os/memory/types.py,sha256=
|
|
213
|
+
empathy_os/memory/types.py,sha256=MvF82iV9Tb5Wui0PKZGwPTVU4cK977qWOdCKHFkCnHY,14542
|
|
220
214
|
empathy_os/memory/unified.py,sha256=yHcM6oBNi3Mk7fXaiCig2HxOkGV0kMiIVbmAnExy2Yw,6802
|
|
221
215
|
empathy_os/memory/mixins/__init__.py,sha256=QhddBtH1TiXrde8d1lUhLSqPrSPK8y8rozSBkXWMV-w,745
|
|
222
|
-
empathy_os/memory/mixins/backend_init_mixin.py,sha256=
|
|
223
|
-
empathy_os/memory/mixins/capabilities_mixin.py,sha256=
|
|
216
|
+
empathy_os/memory/mixins/backend_init_mixin.py,sha256=BINJ_XYHA1GZI1HCEPgXuB5Yole8F-__5sky6nKEKRo,10279
|
|
217
|
+
empathy_os/memory/mixins/capabilities_mixin.py,sha256=i5UxT8ZyEhnZLASJKm3qm5_C2G18ChdcOmBo2CfRkf8,7094
|
|
224
218
|
empathy_os/memory/mixins/handoff_mixin.py,sha256=lh-TIkMmUmZeB0BeWBksau77Alc5Jc5PAbBTxFUWenM,6938
|
|
225
219
|
empathy_os/memory/mixins/lifecycle_mixin.py,sha256=zOUpyl0OI2rF49ersLpG7nYPH87rW7-4Fsp4X-VCIas,1356
|
|
226
220
|
empathy_os/memory/mixins/long_term_mixin.py,sha256=L0O3kbXU0ymkHtrxoU52u0Efw6j3LHqYNBDNzgAOjpA,12328
|
|
@@ -255,7 +249,6 @@ empathy_os/metrics/collector.py,sha256=WBrUklvZ9T80a5iz1XyRPvmteMOpftqBYHdBb4DpZ
|
|
|
255
249
|
empathy_os/metrics/prompt_metrics.py,sha256=C9N8uIynTP8XiGcwUeOoJRU48vLiS3uK0SKFmVefalo,6518
|
|
256
250
|
empathy_os/models/__init__.py,sha256=_-s1n1EBdyAdhJE6vd48DQjk3QRQ3ZL-8aW6ccgJLxM,3936
|
|
257
251
|
empathy_os/models/__main__.py,sha256=V7uZJ_XT__ROZsmnEI4-U7hNsOH1oqzfnWb2o6xJ0g4,296
|
|
258
|
-
empathy_os/models/adaptive_routing 2.py,sha256=lbUIb9axWwCyjYN6NpMcnSu-eccxT09xfo3guwndFr4,15224
|
|
259
252
|
empathy_os/models/adaptive_routing.py,sha256=lbUIb9axWwCyjYN6NpMcnSu-eccxT09xfo3guwndFr4,15224
|
|
260
253
|
empathy_os/models/auth_cli.py,sha256=gNtugIkCpBloN-xM1jjc7f8mF0OyXDhQo_LXNWUg90s,15754
|
|
261
254
|
empathy_os/models/auth_strategy.py,sha256=RCWxZYXtViVY6_TKXfP3-67Cn9P0LFMkEKf51QUfG6M,15461
|
|
@@ -299,7 +292,6 @@ empathy_os/project_index/index.py,sha256=ZQ53xtPYO2U3E2FyUJF3gQU-8LX_wf5uqr2sj7r
|
|
|
299
292
|
empathy_os/project_index/models.py,sha256=_m12jDd4qAzsf5aVVYTwrL36GDor04i4QJobEYLqAMw,17626
|
|
300
293
|
empathy_os/project_index/reports.py,sha256=MTs2JbMx-mDR6RCUF-KRLkdf5wZOw7AsntdHTH2tcFk,17043
|
|
301
294
|
empathy_os/project_index/scanner.py,sha256=E1ochUusLcPwOCPezSoEip22qKjTzcPHAnM6-ag1yGQ,31339
|
|
302
|
-
empathy_os/project_index/scanner_parallel 2.py,sha256=Dq3f957Yxwu3Dp4c6flVrO9TyRw9O-GWH33jIBMcgBE,10019
|
|
303
295
|
empathy_os/project_index/scanner_parallel.py,sha256=Dq3f957Yxwu3Dp4c6flVrO9TyRw9O-GWH33jIBMcgBE,10019
|
|
304
296
|
empathy_os/prompts/__init__.py,sha256=8sbL94w0h6P6kZcZbrXZnGlPqYTz3Fw1VUfCaMLrzlM,1554
|
|
305
297
|
empathy_os/prompts/config.py,sha256=aV_NbUKwtHJJkggvGSykHApor_EaMJSkAGM5IFzd3NM,3009
|
|
@@ -342,17 +334,12 @@ empathy_os/socratic/success.py,sha256=wZoHBkfkzmZwwbEMNdUj8cWw4nLCyKFtGNcWHJDoV9
|
|
|
342
334
|
empathy_os/socratic/visual_editor.py,sha256=Nk2vJaTKtcwhHH04KTzRnAVyae6AeA03je2-y74d1kk,27912
|
|
343
335
|
empathy_os/socratic/web_ui.py,sha256=Sg7pSS1043ecVt_yYpSLnv_6pvGnt6aM742fXq6uJ7M,25375
|
|
344
336
|
empathy_os/telemetry/__init__.py,sha256=DpNi4Eglyj7mAA4XT3GFpidnvvbVNC7Qo1Te9Q5wQ44,1295
|
|
345
|
-
empathy_os/telemetry/agent_coordination
|
|
346
|
-
empathy_os/telemetry/
|
|
347
|
-
empathy_os/telemetry/
|
|
348
|
-
empathy_os/telemetry/agent_tracking.py,sha256=sdGQN2NGk2F9BUYxAt37ENw8-wpYs4qUWkB6LbpJ228,11659
|
|
349
|
-
empathy_os/telemetry/approval_gates 2.py,sha256=WwYolC-3LKR8ippu5qna1GUtiAmZfuHFwMt9vcnxyvo,19933
|
|
350
|
-
empathy_os/telemetry/approval_gates.py,sha256=1h3vZyD3rBdVQ2og3kTsXtDFm52sf6w5j1XU4lPEYoM,19300
|
|
337
|
+
empathy_os/telemetry/agent_coordination.py,sha256=PUkdEgBRVqyjVMR0oCv9EifJrYGkN1X1u09zpruDSic,15850
|
|
338
|
+
empathy_os/telemetry/agent_tracking.py,sha256=Gy3YlrPBkSpmlIh3oUgXOVdP3B49G9Zr2Q49NfxFPX0,12324
|
|
339
|
+
empathy_os/telemetry/approval_gates.py,sha256=Kj7i1P8tofoy8CXCRwKa6FBEONEZmm2GdWMPVaCo2vA,19080
|
|
351
340
|
empathy_os/telemetry/cli.py,sha256=UDldU7zwW8WS7TC7HY3f6BzSEzcs7rr9A59BwgO8Lds,45540
|
|
352
|
-
empathy_os/telemetry/event_streaming
|
|
353
|
-
empathy_os/telemetry/
|
|
354
|
-
empathy_os/telemetry/feedback_loop 2.py,sha256=PLfR4EJuXlyVhJMxKcgNwXrLy7nP8cxiLX_21WRI4Aw,19423
|
|
355
|
-
empathy_os/telemetry/feedback_loop.py,sha256=yu4oo6eANJsDnEG13C4LnsTrlOMY4YcJFqnhv6QC39k,19303
|
|
341
|
+
empathy_os/telemetry/event_streaming.py,sha256=nkR155uaKXx74U-YnxayusNbaQZl6hp12xHwNT25u-4,13413
|
|
342
|
+
empathy_os/telemetry/feedback_loop.py,sha256=AnbDPBxawbOHQp71hmgpq8oNLLry2if3qE65RU42iDE,20058
|
|
356
343
|
empathy_os/telemetry/usage_tracker.py,sha256=Be409JSeweps3GEN3k66u_0I1594KTWoH_bRzelih9U,21184
|
|
357
344
|
empathy_os/telemetry/commands/__init__.py,sha256=UVKjQBaY0bd8iTlnbQSpd8jA_CjOCfPLGqmplt68P8c,338
|
|
358
345
|
empathy_os/telemetry/commands/dashboard_commands.py,sha256=36V-g1Ng9lN4nEqNODfDudQ-nkITWkZgce1b7ceIH1M,24029
|
|
@@ -383,7 +370,6 @@ empathy_os/workflows/code_review_adapters.py,sha256=2AKLnOQKIoZi4-SFYFfmSSQPrrT8
|
|
|
383
370
|
empathy_os/workflows/code_review_pipeline.py,sha256=m-LWxE8MHzn0HxpHmL0ntssWTcDRxscVbAIB1OTwL3g,24460
|
|
384
371
|
empathy_os/workflows/config.py,sha256=qahi2OOs-5ahaZd4LWkH2uX0N8YV9KxY-o6popeS4Io,22865
|
|
385
372
|
empathy_os/workflows/dependency_check.py,sha256=zWwSCAWThnAUkOqEUx2GTl5Vgf2fW9P5HRqwWhYZXlc,23452
|
|
386
|
-
empathy_os/workflows/document_gen.py,sha256=k382gDQP7v6aF2dXA3kekut576A-UwGC7qlS2NFbnyo,751
|
|
387
373
|
empathy_os/workflows/document_manager.py,sha256=mP6YFO9eKbKRLc5EuJdYYxL2tIylkNswpm3Npf1T0UM,7385
|
|
388
374
|
empathy_os/workflows/document_manager_README.md,sha256=aKegxvNXTHpxQsShpSp9cdhF6rT2rhdLB5CsfsdA7YI,2157
|
|
389
375
|
empathy_os/workflows/documentation_orchestrator.py,sha256=sSzTsLJPkSlHcE_o-pfM-27DVAVpwPcmxPZT71GYfeo,43013
|
|
@@ -396,10 +382,10 @@ empathy_os/workflows/new_sample_workflow1.py,sha256=W59znXxsq5kgk4ZI3psC41KtzkLo
|
|
|
396
382
|
empathy_os/workflows/new_sample_workflow1_README.md,sha256=bzLyqukgaKilG1OnCdLsc5GNWsYEagI7mn3n80BPMHY,2366
|
|
397
383
|
empathy_os/workflows/orchestrated_health_check.py,sha256=sKmdvKrDhDe3bRSFVhPt7XeiexC-TKy0EK6TbVXLxQw,30492
|
|
398
384
|
empathy_os/workflows/orchestrated_release_prep.py,sha256=Erp2rw-EBNOfIwyT0nJhGqpYPg2v-YL_h06aMtaALlA,20224
|
|
399
|
-
empathy_os/workflows/output.py,sha256=
|
|
385
|
+
empathy_os/workflows/output.py,sha256=BJHDdaYB7ptemZy8KHbuLkSmrEAiFCArjOfvQfRMnCU,12829
|
|
400
386
|
empathy_os/workflows/perf_audit.py,sha256=vuIrCkxrWVwY0dS3SYsnINch2Je_7BUne0HqwSqV6K0,32068
|
|
401
387
|
empathy_os/workflows/pr_review.py,sha256=lR7TxvGjBj1fIMxYgBtgxuSvWFTGqQHTsVpL5zKLUB8,26796
|
|
402
|
-
empathy_os/workflows/progress.py,sha256=
|
|
388
|
+
empathy_os/workflows/progress.py,sha256=z_0UV2uH4Xu9fG85VYtcqJwJWQhTfa7WvFqrtIe-ISE,26588
|
|
403
389
|
empathy_os/workflows/progress_server.py,sha256=aLDrcBuxqN9_mfJRcRLJypuB4uRMFq9u4C_li9HioOM,10233
|
|
404
390
|
empathy_os/workflows/refactor_plan.py,sha256=JmW0bMuQDHwCL77ZHC76pVFpp_UY9vke9phVVJfHyDw,25600
|
|
405
391
|
empathy_os/workflows/release_prep.py,sha256=5TjAXzMiHBG9v0xJnakqMYxsoufmWZ6HFB_0HbVV6fU,31082
|
|
@@ -438,21 +424,13 @@ empathy_os/workflows/keyboard_shortcuts/schema.py,sha256=MwvM63J9WTO6nqtwes5A04H
|
|
|
438
424
|
empathy_os/workflows/keyboard_shortcuts/workflow.py,sha256=FOEQwc8IR0PEYim05zjR-uIlw6oPZHW9jQZ8skxXp0c,17678
|
|
439
425
|
empathy_os/workflows/progressive/README 2.md,sha256=ngn3ZC48LW-ON5Vow90dW4UvEWeOKuU7V-W4JdudqJo,13793
|
|
440
426
|
empathy_os/workflows/progressive/README.md,sha256=ngn3ZC48LW-ON5Vow90dW4UvEWeOKuU7V-W4JdudqJo,13793
|
|
441
|
-
empathy_os/workflows/progressive/__init__ 2.py,sha256=l18JX30ONk8H08Wm210k1W3AKat2tVzI840JqlzTBpU,2203
|
|
442
427
|
empathy_os/workflows/progressive/__init__.py,sha256=qkPVjO_MtHjxVcHMr5jbU9NMZTxVCGHXVD3EkngyCso,2179
|
|
443
|
-
empathy_os/workflows/progressive/cli 2.py,sha256=WIFxTBUsCL2hvKKoPFxYUgfhRFjMm-HVUjRp3Y-pvXA,6305
|
|
444
428
|
empathy_os/workflows/progressive/cli.py,sha256=jbl5jSk3wlbjGc00Ao06OO7aU53AZuVZVKJpJJAajX4,6122
|
|
445
|
-
empathy_os/workflows/progressive/core 2.py,sha256=891OttvWkFokBRVzvqVUxwpcNlgc7edlVYqGUCkn0vs,16101
|
|
446
429
|
empathy_os/workflows/progressive/core.py,sha256=2FzIsy0xKyP91-aMTGfERbX5Mow5CSlfR9RUmHU4GeM,16070
|
|
447
|
-
empathy_os/workflows/progressive/orchestrator 2.py,sha256=FsLcoRC8jujRcOV87PyN-0jzlLvStIQQqMFisxWWg0I,26786
|
|
448
430
|
empathy_os/workflows/progressive/orchestrator.py,sha256=LssTqdy4ufqhgpgS3QNZEdpeSkdg-MgpFyhW5zCJmAY,27733
|
|
449
|
-
empathy_os/workflows/progressive/reports 2.py,sha256=F2p3HyInGH8fT9-e_BsOVcgeQBtOugYsSyBn49yhhmc,17588
|
|
450
431
|
empathy_os/workflows/progressive/reports.py,sha256=VgymV6v7owodELf_QLQTwqGOEZjaFKclKxeQ0-vow0k,17631
|
|
451
|
-
empathy_os/workflows/progressive/telemetry 2.py,sha256=5ZjCmeGjtfESejocWdtvnm5iCTAQv5_3NRTYmuoIbVs,9427
|
|
452
432
|
empathy_os/workflows/progressive/telemetry.py,sha256=DiDTrkeKDjsWJnA57UrNfhbSG6qv9LaTP2wqHPcRscA,9398
|
|
453
|
-
empathy_os/workflows/progressive/test_gen 2.py,sha256=rNjjrQ8AFoXRe99X1Yk020gX6tcTxLh5pGMXXho8XRs,15802
|
|
454
433
|
empathy_os/workflows/progressive/test_gen.py,sha256=wdpjx-Tlz-dWqOwHwoblbgEABr7EjTRV2faXMTad1M0,15759
|
|
455
|
-
empathy_os/workflows/progressive/workflow 2.py,sha256=bGXKmB9UFLfDw5c9MsW6Zw4GSbknCP-9HnaIEX36nhY,21597
|
|
456
434
|
empathy_os/workflows/progressive/workflow.py,sha256=FD3MzRSMV1n_c1S8jSlLLIrcewcus6Niyml6-EMdk_E,21146
|
|
457
435
|
empathy_os/workflows/test_gen/__init__.py,sha256=x891W01J_ve3RufDSbtuasCl8xHzccGF8a72WeNnMdw,1230
|
|
458
436
|
empathy_os/workflows/test_gen/ast_analyzer.py,sha256=I50uqEZ-8oX31Ap7Yl02id9Bnvxa6u5OmKPe4iL4N2k,9140
|
|
@@ -471,8 +449,8 @@ workflow_scaffolding/__init__.py,sha256=UpX5vjjjPjIaAKyIV1D4GxJzLUZy5DzdzgSkePYM
|
|
|
471
449
|
workflow_scaffolding/__main__.py,sha256=0qspuNoadTDqyskXTlT8Sahqau-XIxN35NHTSGVW6z4,236
|
|
472
450
|
workflow_scaffolding/cli.py,sha256=yLgvMsPbqI-LHt7UKXMuj-Dc0-44EqWiChldysrw1YQ,6763
|
|
473
451
|
workflow_scaffolding/generator.py,sha256=9eEmm324kVzf8BCtXEML090pyke06o0U7aGATzZIaPM,8869
|
|
474
|
-
empathy_framework-5.
|
|
475
|
-
empathy_framework-5.
|
|
476
|
-
empathy_framework-5.
|
|
477
|
-
empathy_framework-5.
|
|
478
|
-
empathy_framework-5.
|
|
452
|
+
empathy_framework-5.3.0.dist-info/METADATA,sha256=uTY8UwkjZwNmYlXcBdQSyuElhcAvGnU-bG06aBF4ffc,45238
|
|
453
|
+
empathy_framework-5.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
454
|
+
empathy_framework-5.3.0.dist-info/entry_points.txt,sha256=Ox9iu_2Fx66x5fyZ5L1NJrrFFekD-BZJIudHNzKwYPs,1565
|
|
455
|
+
empathy_framework-5.3.0.dist-info/top_level.txt,sha256=YJNBYFE2u5f2XnveFqYO-rZDcHR_aMOHAiIIf9tl72c,102
|
|
456
|
+
empathy_framework-5.3.0.dist-info/RECORD,,
|
empathy_os/__init__.py
CHANGED
empathy_os/cache/hybrid.py
CHANGED
|
@@ -256,7 +256,11 @@ class HybridCache(BaseCache):
|
|
|
256
256
|
return None
|
|
257
257
|
|
|
258
258
|
if self._model is None:
|
|
259
|
-
raise RuntimeError(
|
|
259
|
+
raise RuntimeError(
|
|
260
|
+
f"Sentence transformer model '{self.model_name}' not loaded. "
|
|
261
|
+
"Install required dependencies with: pip install empathy-framework[cache] "
|
|
262
|
+
"or pip install sentence-transformers torch"
|
|
263
|
+
)
|
|
260
264
|
|
|
261
265
|
# Encode prompt
|
|
262
266
|
prompt_embedding = self._model.encode(prompt, convert_to_numpy=True)
|
empathy_os/cli/commands/batch.py
CHANGED
|
@@ -47,6 +47,8 @@ def cmd_batch_submit(args):
|
|
|
47
47
|
api_key = os.getenv("ANTHROPIC_API_KEY")
|
|
48
48
|
if not api_key:
|
|
49
49
|
print("❌ Error: ANTHROPIC_API_KEY environment variable not set")
|
|
50
|
+
print(" Set it with: export ANTHROPIC_API_KEY='your-api-key-here'")
|
|
51
|
+
print(" Or get a key from: https://console.anthropic.com/")
|
|
50
52
|
return 1
|
|
51
53
|
|
|
52
54
|
# Load requests from file
|
|
@@ -100,6 +102,8 @@ def cmd_batch_status(args):
|
|
|
100
102
|
api_key = os.getenv("ANTHROPIC_API_KEY")
|
|
101
103
|
if not api_key:
|
|
102
104
|
print("❌ Error: ANTHROPIC_API_KEY environment variable not set")
|
|
105
|
+
print(" Set it with: export ANTHROPIC_API_KEY='your-api-key-here'")
|
|
106
|
+
print(" Or get a key from: https://console.anthropic.com/")
|
|
103
107
|
return 1
|
|
104
108
|
|
|
105
109
|
workflow = BatchProcessingWorkflow(api_key=api_key)
|
|
@@ -154,6 +158,8 @@ def cmd_batch_results(args):
|
|
|
154
158
|
api_key = os.getenv("ANTHROPIC_API_KEY")
|
|
155
159
|
if not api_key:
|
|
156
160
|
print("❌ Error: ANTHROPIC_API_KEY environment variable not set")
|
|
161
|
+
print(" Set it with: export ANTHROPIC_API_KEY='your-api-key-here'")
|
|
162
|
+
print(" Or get a key from: https://console.anthropic.com/")
|
|
157
163
|
return 1
|
|
158
164
|
|
|
159
165
|
workflow = BatchProcessingWorkflow(api_key=api_key)
|
|
@@ -214,6 +220,8 @@ def cmd_batch_wait(args):
|
|
|
214
220
|
api_key = os.getenv("ANTHROPIC_API_KEY")
|
|
215
221
|
if not api_key:
|
|
216
222
|
print("❌ Error: ANTHROPIC_API_KEY environment variable not set")
|
|
223
|
+
print(" Set it with: export ANTHROPIC_API_KEY='your-api-key-here'")
|
|
224
|
+
print(" Or get a key from: https://console.anthropic.com/")
|
|
217
225
|
return 1
|
|
218
226
|
|
|
219
227
|
workflow = BatchProcessingWorkflow(api_key=api_key)
|
|
@@ -86,6 +86,8 @@ def memory_scan(
|
|
|
86
86
|
if not scanner_path.exists():
|
|
87
87
|
console.print("[red]Error:[/red] Memory leak scanner not found at expected path")
|
|
88
88
|
console.print(f"Expected: {scanner_path}")
|
|
89
|
+
console.print("\nThe scanner script may have been moved or renamed.")
|
|
90
|
+
console.print("Check the scripts/ directory or reinstall the package.")
|
|
89
91
|
raise typer.Exit(1)
|
|
90
92
|
|
|
91
93
|
args = [sys.executable, str(scanner_path), "--path", str(path)]
|
|
@@ -135,6 +137,8 @@ def memory_test(
|
|
|
135
137
|
if not profile_script.exists():
|
|
136
138
|
console.print("[red]Error:[/red] Memory profiling script not found")
|
|
137
139
|
console.print(f"Expected: {profile_script}")
|
|
140
|
+
console.print("\nInstall memory_profiler with: pip install memory-profiler")
|
|
141
|
+
console.print("Or check that the benchmarks directory exists.")
|
|
138
142
|
raise typer.Exit(1)
|
|
139
143
|
|
|
140
144
|
console.print(f"[bold]Profiling memory module: {module}[/bold]\n")
|
|
@@ -151,8 +151,9 @@ def cmd_workflow(args):
|
|
|
151
151
|
print(f"Provider: {actual_provider}")
|
|
152
152
|
print(workflow.describe())
|
|
153
153
|
|
|
154
|
-
except KeyError
|
|
155
|
-
print(f"Error: {
|
|
154
|
+
except KeyError:
|
|
155
|
+
print(f"Error: Workflow '{name}' not found")
|
|
156
|
+
print("\nRun 'empathy workflow list' to see available workflows")
|
|
156
157
|
return 1
|
|
157
158
|
|
|
158
159
|
elif action == "run":
|
|
@@ -366,11 +367,14 @@ def cmd_workflow(args):
|
|
|
366
367
|
error_msg = error_msg or "Unknown error"
|
|
367
368
|
print(f"\n✗ Workflow failed: {error_msg}\n")
|
|
368
369
|
|
|
369
|
-
except KeyError
|
|
370
|
-
print(f"Error: {
|
|
370
|
+
except KeyError:
|
|
371
|
+
print(f"Error: Workflow '{name}' not found")
|
|
372
|
+
print("\nRun 'empathy workflow list' to see available workflows")
|
|
371
373
|
return 1
|
|
372
374
|
except json_mod.JSONDecodeError as e:
|
|
373
375
|
print(f"Error parsing input JSON: {e}")
|
|
376
|
+
print('\nExpected valid JSON, e.g.: --input \'{"key": "value"}\'')
|
|
377
|
+
print("Make sure to use single quotes around JSON and double quotes inside")
|
|
374
378
|
return 1
|
|
375
379
|
|
|
376
380
|
elif action == "config":
|
empathy_os/config.py
CHANGED
|
@@ -61,9 +61,22 @@ def _validate_file_path(path: str, allowed_dir: str | None = None) -> Path:
|
|
|
61
61
|
raise ValueError(f"path must be within {allowed_dir}")
|
|
62
62
|
|
|
63
63
|
# Check for dangerous system paths
|
|
64
|
-
|
|
64
|
+
# Note: On macOS, /etc is a symlink to /private/etc, so we check both
|
|
65
|
+
dangerous_paths = [
|
|
66
|
+
"/etc",
|
|
67
|
+
"/sys",
|
|
68
|
+
"/proc",
|
|
69
|
+
"/dev",
|
|
70
|
+
"/private/etc", # macOS: /etc -> /private/etc
|
|
71
|
+
"/private/var/root", # macOS: root's home directory
|
|
72
|
+
"/usr/bin", # System binaries
|
|
73
|
+
"/usr/sbin", # System admin binaries
|
|
74
|
+
"/bin", # Essential binaries
|
|
75
|
+
"/sbin", # System binaries
|
|
76
|
+
]
|
|
77
|
+
resolved_str = str(resolved)
|
|
65
78
|
for dangerous in dangerous_paths:
|
|
66
|
-
if
|
|
79
|
+
if resolved_str.startswith(dangerous + "/") or resolved_str == dangerous:
|
|
67
80
|
raise ValueError(f"Cannot write to system directory: {dangerous}")
|
|
68
81
|
|
|
69
82
|
return resolved
|
|
@@ -39,6 +39,8 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
39
39
|
# Route requests
|
|
40
40
|
if path == "/" or path == "/index.html":
|
|
41
41
|
self.serve_file("index.html", "text/html")
|
|
42
|
+
elif path == "/test.html":
|
|
43
|
+
self.serve_file("test.html", "text/html")
|
|
42
44
|
elif path == "/static/style.css":
|
|
43
45
|
self.serve_file("style.css", "text/css")
|
|
44
46
|
elif path == "/static/app.js":
|
|
@@ -132,12 +134,15 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
132
134
|
def api_health(self):
|
|
133
135
|
"""System health endpoint."""
|
|
134
136
|
try:
|
|
135
|
-
|
|
136
|
-
has_redis = coordinator.memory is not None
|
|
137
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
137
138
|
|
|
139
|
+
memory = RedisShortTermMemory()
|
|
140
|
+
has_redis = memory._client is not None
|
|
141
|
+
|
|
142
|
+
coordinator = HeartbeatCoordinator(memory=memory)
|
|
138
143
|
active_agents = len(coordinator.get_active_agents()) if has_redis else 0
|
|
139
144
|
|
|
140
|
-
gate = ApprovalGate()
|
|
145
|
+
gate = ApprovalGate(memory=memory)
|
|
141
146
|
pending_approvals = len(gate.get_pending_approvals()) if has_redis else 0
|
|
142
147
|
|
|
143
148
|
self.send_json(
|
|
@@ -155,22 +160,24 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
155
160
|
def api_agents(self):
|
|
156
161
|
"""List active agents."""
|
|
157
162
|
try:
|
|
158
|
-
|
|
163
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
164
|
+
|
|
165
|
+
memory = RedisShortTermMemory()
|
|
166
|
+
coordinator = HeartbeatCoordinator(memory=memory)
|
|
159
167
|
active_agents = coordinator.get_active_agents()
|
|
160
168
|
|
|
161
169
|
result = []
|
|
162
|
-
for
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
)
|
|
170
|
+
for agent in active_agents:
|
|
171
|
+
result.append(
|
|
172
|
+
{
|
|
173
|
+
"agent_id": agent.agent_id,
|
|
174
|
+
"display_name": agent.display_name,
|
|
175
|
+
"status": agent.status,
|
|
176
|
+
"last_seen": agent.last_beat.isoformat(),
|
|
177
|
+
"progress": agent.progress,
|
|
178
|
+
"current_task": agent.current_task,
|
|
179
|
+
}
|
|
180
|
+
)
|
|
174
181
|
|
|
175
182
|
self.send_json(result)
|
|
176
183
|
except Exception as e:
|
|
@@ -180,8 +187,11 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
180
187
|
def api_agent_detail(self, agent_id: str):
|
|
181
188
|
"""Get specific agent details."""
|
|
182
189
|
try:
|
|
183
|
-
|
|
184
|
-
|
|
190
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
191
|
+
|
|
192
|
+
memory = RedisShortTermMemory()
|
|
193
|
+
coordinator = HeartbeatCoordinator(memory=memory)
|
|
194
|
+
heartbeat = coordinator.get_agent_status(agent_id)
|
|
185
195
|
|
|
186
196
|
if not heartbeat:
|
|
187
197
|
self.send_json({"error": f"Agent {agent_id} not found"}, status=404)
|
|
@@ -189,9 +199,9 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
189
199
|
|
|
190
200
|
self.send_json(
|
|
191
201
|
{
|
|
192
|
-
"agent_id": agent_id,
|
|
202
|
+
"agent_id": heartbeat.agent_id,
|
|
193
203
|
"status": heartbeat.status,
|
|
194
|
-
"last_seen": heartbeat.
|
|
204
|
+
"last_seen": heartbeat.last_beat.isoformat(),
|
|
195
205
|
"progress": heartbeat.progress,
|
|
196
206
|
"current_task": heartbeat.current_task,
|
|
197
207
|
"metadata": heartbeat.metadata,
|
|
@@ -203,8 +213,12 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
203
213
|
def api_signals(self, limit: int):
|
|
204
214
|
"""Get recent coordination signals."""
|
|
205
215
|
try:
|
|
206
|
-
|
|
207
|
-
|
|
216
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
217
|
+
|
|
218
|
+
memory = RedisShortTermMemory()
|
|
219
|
+
# Use broadcast target to get all signals (not just for dashboard)
|
|
220
|
+
signals = CoordinationSignals(memory=memory, agent_id="*")
|
|
221
|
+
recent = signals.get_pending_signals()[:limit]
|
|
208
222
|
|
|
209
223
|
result = [
|
|
210
224
|
{
|
|
@@ -225,15 +239,18 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
225
239
|
def api_events(self, event_type: str | None, limit: int):
|
|
226
240
|
"""Get recent events."""
|
|
227
241
|
try:
|
|
228
|
-
|
|
242
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
243
|
+
|
|
244
|
+
memory = RedisShortTermMemory()
|
|
245
|
+
streamer = EventStreamer(memory=memory)
|
|
229
246
|
|
|
230
247
|
if event_type:
|
|
231
|
-
events = list(streamer.get_recent_events(event_type,
|
|
248
|
+
events = list(streamer.get_recent_events(event_type, count=limit))
|
|
232
249
|
else:
|
|
233
250
|
# Get events from multiple streams
|
|
234
251
|
all_events = []
|
|
235
252
|
for evt_type in ["agent_heartbeat", "coordination_signal", "workflow_progress"]:
|
|
236
|
-
events = list(streamer.get_recent_events(evt_type,
|
|
253
|
+
events = list(streamer.get_recent_events(evt_type, count=20))
|
|
237
254
|
all_events.extend(events)
|
|
238
255
|
|
|
239
256
|
all_events.sort(key=lambda e: e.timestamp, reverse=True)
|
|
@@ -258,7 +275,10 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
258
275
|
def api_approvals(self):
|
|
259
276
|
"""Get pending approvals."""
|
|
260
277
|
try:
|
|
261
|
-
|
|
278
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
279
|
+
|
|
280
|
+
memory = RedisShortTermMemory()
|
|
281
|
+
gate = ApprovalGate(memory=memory)
|
|
262
282
|
pending = gate.get_pending_approvals()
|
|
263
283
|
|
|
264
284
|
result = [
|
|
@@ -281,7 +301,10 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
281
301
|
def api_approve(self, request_id: str, reason: str):
|
|
282
302
|
"""Approve request."""
|
|
283
303
|
try:
|
|
284
|
-
|
|
304
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
305
|
+
|
|
306
|
+
memory = RedisShortTermMemory()
|
|
307
|
+
gate = ApprovalGate(memory=memory)
|
|
285
308
|
success = gate.respond_to_approval(
|
|
286
309
|
request_id=request_id, approved=True, responder="dashboard", reason=reason
|
|
287
310
|
)
|
|
@@ -296,7 +319,10 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
296
319
|
def api_reject(self, request_id: str, reason: str):
|
|
297
320
|
"""Reject request."""
|
|
298
321
|
try:
|
|
299
|
-
|
|
322
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
323
|
+
|
|
324
|
+
memory = RedisShortTermMemory()
|
|
325
|
+
gate = ApprovalGate(memory=memory)
|
|
300
326
|
success = gate.respond_to_approval(
|
|
301
327
|
request_id=request_id, approved=False, responder="dashboard", reason=reason
|
|
302
328
|
)
|
|
@@ -311,7 +337,10 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
311
337
|
def api_feedback_workflows(self):
|
|
312
338
|
"""Get workflow quality metrics."""
|
|
313
339
|
try:
|
|
314
|
-
|
|
340
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
341
|
+
|
|
342
|
+
memory = RedisShortTermMemory()
|
|
343
|
+
feedback = FeedbackLoop(memory=memory)
|
|
315
344
|
|
|
316
345
|
workflows = ["code-review", "test-generation", "refactoring"]
|
|
317
346
|
results = []
|
|
@@ -340,7 +369,10 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
|
340
369
|
def api_underperforming(self, threshold: float):
|
|
341
370
|
"""Get underperforming stages."""
|
|
342
371
|
try:
|
|
343
|
-
|
|
372
|
+
from empathy_os.memory.short_term import RedisShortTermMemory
|
|
373
|
+
|
|
374
|
+
memory = RedisShortTermMemory()
|
|
375
|
+
feedback = FeedbackLoop(memory=memory)
|
|
344
376
|
|
|
345
377
|
workflows = ["code-review", "test-generation", "refactoring"]
|
|
346
378
|
all_underperforming = []
|
empathy_os/memory/long_term.py
CHANGED
|
@@ -225,11 +225,11 @@ class SecureMemDocsIntegration:
|
|
|
225
225
|
try:
|
|
226
226
|
# Pattern 1: String ID validation
|
|
227
227
|
if not content or not content.strip():
|
|
228
|
-
raise ValueError("content cannot be empty")
|
|
228
|
+
raise ValueError(f"content cannot be empty. Got: {content!r}")
|
|
229
229
|
if not pattern_type or not pattern_type.strip():
|
|
230
|
-
raise ValueError("pattern_type cannot be empty")
|
|
230
|
+
raise ValueError(f"pattern_type cannot be empty. Got: {pattern_type!r}")
|
|
231
231
|
if not user_id or not user_id.strip():
|
|
232
|
-
raise ValueError("user_id cannot be empty")
|
|
232
|
+
raise ValueError(f"user_id cannot be empty. Got: {user_id!r}")
|
|
233
233
|
|
|
234
234
|
# Pattern 5: Type validation
|
|
235
235
|
if custom_metadata is not None and not isinstance(custom_metadata, dict):
|
|
@@ -446,7 +446,7 @@ class SecureMemDocsIntegration:
|
|
|
446
446
|
"""
|
|
447
447
|
# Pattern 1: String ID validation
|
|
448
448
|
if not pattern_id or not pattern_id.strip():
|
|
449
|
-
raise ValueError("pattern_id cannot be empty")
|
|
449
|
+
raise ValueError(f"pattern_id cannot be empty. Got: {pattern_id!r}")
|
|
450
450
|
if not user_id or not user_id.strip():
|
|
451
451
|
raise ValueError("user_id cannot be empty")
|
|
452
452
|
|
|
@@ -793,7 +793,7 @@ class SecureMemDocsIntegration:
|
|
|
793
793
|
"""
|
|
794
794
|
# Pattern 1: String ID validation
|
|
795
795
|
if not pattern_id or not pattern_id.strip():
|
|
796
|
-
raise ValueError("pattern_id cannot be empty")
|
|
796
|
+
raise ValueError(f"pattern_id cannot be empty. Got: {pattern_id!r}")
|
|
797
797
|
if not user_id or not user_id.strip():
|
|
798
798
|
raise ValueError("user_id cannot be empty")
|
|
799
799
|
|