empathy-framework 3.5.6__py3-none-any.whl → 3.7.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.
- agents/compliance_anticipation_agent.py +113 -118
- agents/compliance_db.py +339 -0
- agents/epic_integration_wizard.py +37 -48
- agents/notifications.py +291 -0
- agents/trust_building_behaviors.py +66 -85
- coach_wizards/__init__.py +11 -12
- coach_wizards/accessibility_wizard.py +12 -12
- coach_wizards/api_wizard.py +12 -12
- coach_wizards/base_wizard.py +26 -20
- coach_wizards/cicd_wizard.py +15 -13
- coach_wizards/compliance_wizard.py +12 -12
- coach_wizards/database_wizard.py +12 -12
- coach_wizards/debugging_wizard.py +12 -12
- coach_wizards/documentation_wizard.py +12 -12
- coach_wizards/generate_wizards.py +1 -2
- coach_wizards/localization_wizard.py +21 -14
- coach_wizards/migration_wizard.py +12 -12
- coach_wizards/monitoring_wizard.py +12 -12
- coach_wizards/observability_wizard.py +12 -12
- coach_wizards/performance_wizard.py +12 -12
- coach_wizards/prompt_engineering_wizard.py +22 -25
- coach_wizards/refactoring_wizard.py +12 -12
- coach_wizards/scaling_wizard.py +12 -12
- coach_wizards/security_wizard.py +12 -12
- coach_wizards/testing_wizard.py +12 -12
- {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/METADATA +234 -30
- empathy_framework-3.7.0.dist-info/RECORD +105 -0
- empathy_healthcare_plugin/__init__.py +1 -2
- empathy_llm_toolkit/__init__.py +5 -6
- empathy_llm_toolkit/claude_memory.py +14 -15
- empathy_llm_toolkit/code_health.py +27 -19
- empathy_llm_toolkit/contextual_patterns.py +11 -12
- empathy_llm_toolkit/core.py +43 -49
- empathy_llm_toolkit/git_pattern_extractor.py +16 -12
- empathy_llm_toolkit/levels.py +6 -13
- empathy_llm_toolkit/pattern_confidence.py +14 -18
- empathy_llm_toolkit/pattern_resolver.py +10 -12
- empathy_llm_toolkit/pattern_summary.py +13 -11
- empathy_llm_toolkit/providers.py +27 -38
- empathy_llm_toolkit/session_status.py +18 -20
- empathy_llm_toolkit/state.py +20 -21
- empathy_os/__init__.py +72 -73
- empathy_os/cli.py +193 -98
- empathy_os/cli_unified.py +68 -41
- empathy_os/config.py +31 -31
- empathy_os/coordination.py +48 -54
- empathy_os/core.py +90 -99
- empathy_os/cost_tracker.py +20 -23
- empathy_os/discovery.py +9 -11
- empathy_os/emergence.py +20 -21
- empathy_os/exceptions.py +18 -30
- empathy_os/feedback_loops.py +27 -30
- empathy_os/levels.py +31 -34
- empathy_os/leverage_points.py +27 -28
- empathy_os/logging_config.py +11 -12
- empathy_os/monitoring.py +27 -27
- empathy_os/pattern_library.py +29 -28
- empathy_os/persistence.py +30 -34
- empathy_os/platform_utils.py +46 -47
- empathy_os/redis_config.py +14 -15
- empathy_os/redis_memory.py +53 -56
- empathy_os/templates.py +12 -11
- empathy_os/trust_building.py +44 -36
- empathy_os/workflow_commands.py +123 -31
- empathy_software_plugin/__init__.py +1 -2
- empathy_software_plugin/cli.py +32 -25
- empathy_software_plugin/plugin.py +4 -8
- empathy_framework-3.5.6.dist-info/RECORD +0 -103
- {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/WHEEL +0 -0
- {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/entry_points.txt +0 -0
- {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/licenses/LICENSE +0 -0
- {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: empathy-framework
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.7.0
|
|
4
4
|
Summary: AI collaboration framework with persistent memory, anticipatory intelligence, code inspection, and multi-agent orchestration
|
|
5
|
-
Author-email: Patrick Roebuck <
|
|
6
|
-
Maintainer-email: Smart-AI-Memory <
|
|
5
|
+
Author-email: Patrick Roebuck <admin@smartaimemory.com>
|
|
6
|
+
Maintainer-email: Smart-AI-Memory <admin@smartaimemory.com>
|
|
7
7
|
License: # Fair Source License, version 0.9
|
|
8
8
|
|
|
9
9
|
**Copyright © 2025 Deep Study AI, LLC**
|
|
@@ -175,26 +175,44 @@ Requires-Dist: defusedxml<1.0.0,>=0.7.0
|
|
|
175
175
|
Requires-Dist: rich<14.0.0,>=13.0.0
|
|
176
176
|
Requires-Dist: typer<1.0.0,>=0.9.0
|
|
177
177
|
Provides-Extra: anthropic
|
|
178
|
-
Requires-Dist: anthropic<1.0.0,>=0.
|
|
178
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "anthropic"
|
|
179
179
|
Provides-Extra: openai
|
|
180
|
-
Requires-Dist: openai<2.0.0,>=1.
|
|
180
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "openai"
|
|
181
181
|
Provides-Extra: google
|
|
182
|
-
Requires-Dist: google-generativeai<1.0.0,>=0.
|
|
182
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "google"
|
|
183
183
|
Provides-Extra: llm
|
|
184
|
-
Requires-Dist: anthropic<1.0.0,>=0.
|
|
185
|
-
Requires-Dist: openai<2.0.0,>=1.
|
|
186
|
-
Requires-Dist: google-generativeai<1.0.0,>=0.
|
|
184
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "llm"
|
|
185
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "llm"
|
|
186
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "llm"
|
|
187
187
|
Provides-Extra: memdocs
|
|
188
188
|
Requires-Dist: memdocs>=1.0.0; extra == "memdocs"
|
|
189
189
|
Provides-Extra: agents
|
|
190
|
-
Requires-Dist: langchain<0.
|
|
191
|
-
Requires-Dist: langchain-core<0.
|
|
192
|
-
Requires-Dist:
|
|
190
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "agents"
|
|
191
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "agents"
|
|
192
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "agents"
|
|
193
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "agents"
|
|
194
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "agents"
|
|
195
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "agents"
|
|
193
196
|
Provides-Extra: crewai
|
|
194
197
|
Requires-Dist: crewai<1.0.0,>=0.1.0; extra == "crewai"
|
|
195
198
|
Provides-Extra: healthcare
|
|
199
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "healthcare"
|
|
200
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "healthcare"
|
|
201
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "healthcare"
|
|
202
|
+
Requires-Dist: memdocs>=1.0.0; extra == "healthcare"
|
|
203
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "healthcare"
|
|
204
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "healthcare"
|
|
205
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "healthcare"
|
|
206
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "healthcare"
|
|
207
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "healthcare"
|
|
208
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "healthcare"
|
|
196
209
|
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "healthcare"
|
|
197
210
|
Requires-Dist: pyyaml<7.0,>=6.0; extra == "healthcare"
|
|
211
|
+
Requires-Dist: fastapi<1.0.0,>=0.109.1; extra == "healthcare"
|
|
212
|
+
Requires-Dist: uvicorn<1.0.0,>=0.20.0; extra == "healthcare"
|
|
213
|
+
Requires-Dist: starlette<1.0.0,>=0.40.0; extra == "healthcare"
|
|
214
|
+
Requires-Dist: bcrypt<5.0.0,>=4.0.0; extra == "healthcare"
|
|
215
|
+
Requires-Dist: PyJWT[crypto]>=2.8.0; extra == "healthcare"
|
|
198
216
|
Requires-Dist: redis<6.0.0,>=5.0.0; extra == "healthcare"
|
|
199
217
|
Provides-Extra: software
|
|
200
218
|
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "software"
|
|
@@ -203,6 +221,7 @@ Provides-Extra: backend
|
|
|
203
221
|
Requires-Dist: fastapi<1.0.0,>=0.109.1; extra == "backend"
|
|
204
222
|
Requires-Dist: uvicorn<1.0.0,>=0.20.0; extra == "backend"
|
|
205
223
|
Requires-Dist: starlette<1.0.0,>=0.40.0; extra == "backend"
|
|
224
|
+
Requires-Dist: bcrypt<5.0.0,>=4.0.0; extra == "backend"
|
|
206
225
|
Requires-Dist: PyJWT[crypto]>=2.8.0; extra == "backend"
|
|
207
226
|
Provides-Extra: lsp
|
|
208
227
|
Requires-Dist: pygls<2.0.0,>=1.0.0; extra == "lsp"
|
|
@@ -227,29 +246,68 @@ Requires-Dist: bandit<2.0,>=1.7; extra == "dev"
|
|
|
227
246
|
Requires-Dist: pre-commit<4.0,>=3.0; extra == "dev"
|
|
228
247
|
Requires-Dist: httpx<1.0.0,>=0.27.0; extra == "dev"
|
|
229
248
|
Requires-Dist: fastapi<1.0.0,>=0.109.1; extra == "dev"
|
|
249
|
+
Provides-Extra: developer
|
|
250
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "developer"
|
|
251
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "developer"
|
|
252
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "developer"
|
|
253
|
+
Requires-Dist: memdocs>=1.0.0; extra == "developer"
|
|
254
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "developer"
|
|
255
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "developer"
|
|
256
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "developer"
|
|
257
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "developer"
|
|
258
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "developer"
|
|
259
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "developer"
|
|
260
|
+
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "developer"
|
|
261
|
+
Requires-Dist: pyyaml<7.0,>=6.0; extra == "developer"
|
|
262
|
+
Provides-Extra: enterprise
|
|
263
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "enterprise"
|
|
264
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "enterprise"
|
|
265
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "enterprise"
|
|
266
|
+
Requires-Dist: memdocs>=1.0.0; extra == "enterprise"
|
|
267
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "enterprise"
|
|
268
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "enterprise"
|
|
269
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "enterprise"
|
|
270
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "enterprise"
|
|
271
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "enterprise"
|
|
272
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "enterprise"
|
|
273
|
+
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "enterprise"
|
|
274
|
+
Requires-Dist: pyyaml<7.0,>=6.0; extra == "enterprise"
|
|
275
|
+
Requires-Dist: fastapi<1.0.0,>=0.109.1; extra == "enterprise"
|
|
276
|
+
Requires-Dist: uvicorn<1.0.0,>=0.20.0; extra == "enterprise"
|
|
277
|
+
Requires-Dist: starlette<1.0.0,>=0.40.0; extra == "enterprise"
|
|
278
|
+
Requires-Dist: bcrypt<5.0.0,>=4.0.0; extra == "enterprise"
|
|
279
|
+
Requires-Dist: PyJWT[crypto]>=2.8.0; extra == "enterprise"
|
|
230
280
|
Provides-Extra: full
|
|
231
|
-
Requires-Dist: anthropic<1.0.0,>=0.
|
|
232
|
-
Requires-Dist: openai<2.0.0,>=1.
|
|
233
|
-
Requires-Dist: google-generativeai<1.0.0,>=0.
|
|
281
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "full"
|
|
282
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "full"
|
|
283
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "full"
|
|
234
284
|
Requires-Dist: memdocs>=1.0.0; extra == "full"
|
|
235
|
-
Requires-Dist: langchain<0.
|
|
236
|
-
Requires-Dist: langchain-core<0.
|
|
237
|
-
Requires-Dist:
|
|
285
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "full"
|
|
286
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "full"
|
|
287
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "full"
|
|
288
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "full"
|
|
289
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "full"
|
|
290
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "full"
|
|
238
291
|
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "full"
|
|
239
292
|
Requires-Dist: pyyaml<7.0,>=6.0; extra == "full"
|
|
240
293
|
Provides-Extra: all
|
|
241
|
-
Requires-Dist: anthropic<1.0.0,>=0.
|
|
242
|
-
Requires-Dist: openai<2.0.0,>=1.
|
|
243
|
-
Requires-Dist: google-generativeai<1.0.0,>=0.
|
|
294
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "all"
|
|
295
|
+
Requires-Dist: openai<2.0.0,>=1.12.0; extra == "all"
|
|
296
|
+
Requires-Dist: google-generativeai<1.0.0,>=0.3.0; extra == "all"
|
|
244
297
|
Requires-Dist: memdocs>=1.0.0; extra == "all"
|
|
245
|
-
Requires-Dist: langchain<0.
|
|
246
|
-
Requires-Dist: langchain-core<0.
|
|
247
|
-
Requires-Dist:
|
|
298
|
+
Requires-Dist: langchain<2.0.0,>=1.0.0; extra == "all"
|
|
299
|
+
Requires-Dist: langchain-core<2.0.0,>=1.2.5; extra == "all"
|
|
300
|
+
Requires-Dist: langchain-text-splitters<0.4.0,>=0.3.9; extra == "all"
|
|
301
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0; extra == "all"
|
|
302
|
+
Requires-Dist: langgraph-checkpoint<4.0.0,>=3.0.0; extra == "all"
|
|
303
|
+
Requires-Dist: marshmallow<5.0.0,>=4.1.2; extra == "all"
|
|
248
304
|
Requires-Dist: python-docx<1.0.0,>=0.8.11; extra == "all"
|
|
249
305
|
Requires-Dist: pyyaml<7.0,>=6.0; extra == "all"
|
|
250
306
|
Requires-Dist: fastapi<1.0.0,>=0.109.1; extra == "all"
|
|
251
307
|
Requires-Dist: uvicorn<1.0.0,>=0.20.0; extra == "all"
|
|
252
308
|
Requires-Dist: starlette<1.0.0,>=0.40.0; extra == "all"
|
|
309
|
+
Requires-Dist: bcrypt<5.0.0,>=4.0.0; extra == "all"
|
|
310
|
+
Requires-Dist: PyJWT[crypto]>=2.8.0; extra == "all"
|
|
253
311
|
Requires-Dist: pygls<2.0.0,>=1.0.0; extra == "all"
|
|
254
312
|
Requires-Dist: lsprotocol<2024.0.0,>=2023.0.0; extra == "all"
|
|
255
313
|
Requires-Dist: colorama<1.0.0,>=0.4.6; extra == "all"
|
|
@@ -278,18 +336,136 @@ Dynamic: license-file
|
|
|
278
336
|
**The AI collaboration framework that predicts problems before they happen.**
|
|
279
337
|
|
|
280
338
|
[](https://pypi.org/project/empathy-framework/)
|
|
281
|
-
[](https://github.com/Smart-AI-Memory/empathy-framework/actions)
|
|
282
340
|
[](https://github.com/Smart-AI-Memory/empathy-framework)
|
|
283
341
|
[](LICENSE)
|
|
284
342
|
[](https://www.python.org)
|
|
285
343
|
|
|
286
344
|
```bash
|
|
287
|
-
pip install empathy-framework[
|
|
345
|
+
pip install empathy-framework[developer] # Lightweight for individual developers
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## What's New in v3.7.0
|
|
349
|
+
|
|
350
|
+
### 🚀 **XML-Enhanced Prompting: 15-35% Token Reduction + Graceful Validation**
|
|
351
|
+
|
|
352
|
+
**Slash your API costs and eliminate response parsing errors with production-ready XML enhancements.**
|
|
353
|
+
|
|
354
|
+
#### Context Window Optimization — **Save 15-35% on Every Request**
|
|
355
|
+
|
|
356
|
+
```python
|
|
357
|
+
from empathy_os.optimization import ContextOptimizer, CompressionLevel
|
|
358
|
+
|
|
359
|
+
optimizer = ContextOptimizer(CompressionLevel.MODERATE)
|
|
360
|
+
optimized_prompt = optimizer.optimize(your_xml_prompt)
|
|
361
|
+
# Achieves 15-25% token reduction automatically
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- **Tag compression**: `<thinking>` → `<t>`, `<answer>` → `<a>` (15+ common tags)
|
|
365
|
+
- **Whitespace optimization**: Removes excess whitespace while preserving structure
|
|
366
|
+
- **Redundancy elimination**: Strips "Please note that", "Make sure to", etc.
|
|
367
|
+
- **Real-world impact**: Integration tests achieved **49.7% reduction** on typical prompts
|
|
368
|
+
- **Bidirectional**: Full decompression to restore original tag names
|
|
369
|
+
|
|
370
|
+
#### XML Validation — **Never Crash on Malformed Responses Again**
|
|
371
|
+
|
|
372
|
+
```python
|
|
373
|
+
from empathy_os.validation import validate_xml_response
|
|
374
|
+
|
|
375
|
+
result = validate_xml_response(llm_response)
|
|
376
|
+
if result.is_valid:
|
|
377
|
+
data = result.parsed_data
|
|
378
|
+
else:
|
|
379
|
+
# Fallback extraction worked - you still get partial data
|
|
380
|
+
data = result.parsed_data or {}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
- **Graceful fallback parsing**: Regex extraction when XML is malformed
|
|
384
|
+
- **Optional XSD validation**: Full schema validation with lxml
|
|
385
|
+
- **Schema caching**: Performance optimization for repeated validations
|
|
386
|
+
- **25 comprehensive tests**: Covers edge cases, malformed input, and XSD validation
|
|
387
|
+
|
|
388
|
+
#### Migration Made Easy
|
|
389
|
+
|
|
390
|
+
See [XML_WORKFLOW_MIGRATION_GUIDE.md](XML_WORKFLOW_MIGRATION_GUIDE.md) for complete migration guide with:
|
|
391
|
+
|
|
392
|
+
- XMLAgent/XMLTask patterns with before/after examples
|
|
393
|
+
- Configuration options (`config.xml.use_xml_structure`)
|
|
394
|
+
- Benefits: **40-60% fewer misinterpretations**, **20-30% fewer retries**
|
|
395
|
+
|
|
396
|
+
**Test Coverage**: **229 new tests** (86 XML enhancement + 143 robustness) — **100% passing**
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## What's New in v3.6.0
|
|
401
|
+
|
|
402
|
+
### 💡 **Finally! Error Messages That Actually Help You**
|
|
403
|
+
|
|
404
|
+
**No more cryptic `NotImplementedError` when extending the framework!**
|
|
405
|
+
|
|
406
|
+
We completely rewrote error messages across **5 base classes**. Now when you're building plugins or extensions, you get:
|
|
407
|
+
|
|
408
|
+
✅ **Exactly which method** you need to implement
|
|
409
|
+
✅ **Which base class** to extend
|
|
410
|
+
✅ **Real working examples** from the codebase to copy
|
|
411
|
+
✅ **Clear explanations** of what each method should return
|
|
412
|
+
|
|
413
|
+
**Before** (frustrating 😤):
|
|
414
|
+
|
|
415
|
+
```python
|
|
416
|
+
NotImplementedError
|
|
417
|
+
# ...now what? Time to dig through source code for 30 minutes
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**After** (helpful 🎯):
|
|
421
|
+
|
|
422
|
+
```python
|
|
423
|
+
NotImplementedError: BaseLinterParser.parse() must be implemented.
|
|
424
|
+
Create a subclass of BaseLinterParser and implement the parse() method.
|
|
425
|
+
See ESLintParser, PylintParser, or MyPyParser for examples.
|
|
426
|
+
# Perfect! Now I know exactly what to do
|
|
288
427
|
```
|
|
289
428
|
|
|
290
|
-
|
|
429
|
+
#### Plus: 9 Integration TODOs Now Link to Working Code
|
|
430
|
+
|
|
431
|
+
- **Want to add compliance tracking?** → See `ComplianceDatabase` class (agents/compliance_db.py)
|
|
432
|
+
- **Need multi-channel notifications?** → See `NotificationService` class (agents/notifications.py)
|
|
433
|
+
- **Wondering about MemDocs integration?** → We documented why local cache works better (with rationale)
|
|
434
|
+
- **Need secure document storage?** → S3/Azure/SharePoint recommendations with HIPAA requirements
|
|
435
|
+
|
|
436
|
+
**Impact**: Onboard new contributors in **minutes instead of hours**. Build your first plugin in **one sitting**.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
### 🔐 Production-Grade Security & Compliance
|
|
441
|
+
|
|
442
|
+
#### Secure Authentication System ✅ *Deployed in Backend API*
|
|
291
443
|
|
|
292
|
-
|
|
444
|
+
- **Bcrypt password hashing** with cost factor 12 (industry standard 2026)
|
|
445
|
+
- **JWT tokens** with 30-minute expiration and automatic refresh
|
|
446
|
+
- **Rate limiting**: 5 failed attempts = 15-minute lockout (prevents brute force)
|
|
447
|
+
- **18 comprehensive security tests** covering all attack vectors
|
|
448
|
+
- **Status**: Fully integrated into `backend/api/wizard_api.py`
|
|
449
|
+
|
|
450
|
+
#### HIPAA/GDPR Compliance Database 🛠️ *Infrastructure Ready*
|
|
451
|
+
|
|
452
|
+
- **Append-only architecture** (INSERT only, no UPDATE/DELETE) - satisfies regulators
|
|
453
|
+
- **Immutable audit trail** for healthcare and enterprise compliance
|
|
454
|
+
- **Compliance gap detection** with severity classification
|
|
455
|
+
- **12 tests** ensuring regulatory compliance
|
|
456
|
+
- **Status**: Production-ready code with [integration points documented](agents/compliance_db.py). See [compliance_anticipation_agent.py](agents/compliance_anticipation_agent.py) for usage examples.
|
|
457
|
+
|
|
458
|
+
#### Multi-Channel Notification System 🛠️ *Infrastructure Ready*
|
|
459
|
+
|
|
460
|
+
- **Email** (SMTP), **Slack** (webhooks), **SMS** (Twilio)
|
|
461
|
+
- **Graceful fallback** when channels unavailable
|
|
462
|
+
- **Smart routing**: SMS only for critical alerts (cost optimization)
|
|
463
|
+
- **10 tests** covering all notification scenarios
|
|
464
|
+
- **Status**: Production-ready code with [integration points documented](agents/notifications.py). See TODOs in compliance agent for usage examples.
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
### Previous: Project Indexing & Test Suite Expansion (v3.5.4)
|
|
293
469
|
|
|
294
470
|
- **Project Indexing System** — JSON-based file tracking with automatic structure scanning, metadata tracking, and CrewAI integration
|
|
295
471
|
- **5,603 Tests** — Comprehensive test coverage at 64% with 30+ new test modules
|
|
@@ -336,10 +512,37 @@ pip install empathy-framework[full]
|
|
|
336
512
|
|
|
337
513
|
### 1. Install
|
|
338
514
|
|
|
515
|
+
**Individual Developers (Recommended):**
|
|
516
|
+
|
|
339
517
|
```bash
|
|
340
|
-
pip install empathy-framework[
|
|
518
|
+
pip install empathy-framework[developer]
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
**Teams/Enterprises (Backend + Auth):**
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
pip install empathy-framework[enterprise]
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**Healthcare Organizations (HIPAA/GDPR Compliance):**
|
|
528
|
+
|
|
529
|
+
```bash
|
|
530
|
+
pip install empathy-framework[healthcare]
|
|
341
531
|
```
|
|
342
532
|
|
|
533
|
+
<details>
|
|
534
|
+
<summary><b>What's the difference?</b></summary>
|
|
535
|
+
|
|
536
|
+
- **`[developer]`** - Lightweight install for individual developers. Includes CLI tools, VSCode extension, LLM providers, agents. **No backend server needed.**
|
|
537
|
+
|
|
538
|
+
- **`[enterprise]`** - Everything in `[developer]` plus backend API server with authentication (bcrypt, JWT, rate limiting). For teams deploying to production.
|
|
539
|
+
|
|
540
|
+
- **`[healthcare]`** - Everything in `[enterprise]` plus HIPAA/GDPR compliance database, redis, and healthcare-specific plugins. Only needed for regulated industries.
|
|
541
|
+
|
|
542
|
+
**Most developers should use `[developer]`** - it's fast to install and has everything you need for software development.
|
|
543
|
+
|
|
544
|
+
</details>
|
|
545
|
+
|
|
343
546
|
### 2. Configure Provider
|
|
344
547
|
|
|
345
548
|
```bash
|
|
@@ -387,9 +590,10 @@ print(result.prevention_steps) # How to prevent it
|
|
|
387
590
|
### Level 1: Basic Usage
|
|
388
591
|
|
|
389
592
|
```bash
|
|
390
|
-
pip install empathy-framework
|
|
593
|
+
pip install empathy-framework[developer]
|
|
391
594
|
```
|
|
392
595
|
|
|
596
|
+
- Lightweight install with CLI tools, LLM providers, and agents
|
|
393
597
|
- Works out of the box with sensible defaults
|
|
394
598
|
- Auto-detects your API keys
|
|
395
599
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
agents/compliance_anticipation_agent.py,sha256=CB0WSYOWBx1m6AdD2eLz5nr9xDOEp7k8_B22ngu5iJE,50870
|
|
2
|
+
agents/compliance_db.py,sha256=KdfEQdNzIQS9ftKDlH31Tm-RbW8gc51eutBMjIM0jcQ,12112
|
|
3
|
+
agents/epic_integration_wizard.py,sha256=Tb0ulU2KB6qUvdKG-lV0G4Qhwovnbd-GSOVIiLbbfmY,17250
|
|
4
|
+
agents/notifications.py,sha256=oFwO_Bp9pVifZEq1-nVm1tSU_LxAnHIuoRL9wbH1Uac,9056
|
|
5
|
+
agents/trust_building_behaviors.py,sha256=z9r9-gXpXGs1B3dNqhb4ag-HLkkb4LpRmUgdYKNL1Pc,32999
|
|
6
|
+
agents/code_inspection/patterns/inspection/recurring_B112.json,sha256=i0Oy4i8FoNb7wghhLJBscuac6dRrWCgjmxOQJejiJqk,745
|
|
7
|
+
agents/code_inspection/patterns/inspection/recurring_F541.json,sha256=zKKZs_6BkDRslzEuor78BS1nr49oUR426r2MQMOVUXs,492
|
|
8
|
+
agents/code_inspection/patterns/inspection/recurring_FORMAT.json,sha256=o-Xe8X5gbHvZyPXcZPpYam7icVYx0fwQIMX9YHVtg70,1490
|
|
9
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json,sha256=-ZMxXDBqXFLX1DXe4p1yI5U6lMwn-zH2zmLZB8Ylwgc,464
|
|
10
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json,sha256=ek_2bKCUSwdHoyHM3xEWEC_4IaJO9HAS_51oUI7lRfU,464
|
|
11
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json,sha256=fAVGiraItm_ltT_ULR4ueSQJ2k4BYc8rcU69hhddSGE,469
|
|
12
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json,sha256=YkH2fZXGVGv-xv0pw0W8qmRxvrdRdSIgnukfzIXsCTU,469
|
|
13
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json,sha256=JoBXmzdcFAX6DBGlM3Nb2430D8FWFLR3Mx66yYFwb6I,469
|
|
14
|
+
agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json,sha256=RnqaCoqGdNUVN36hx2tlyRMulzCuzXvpqNMYOPZLTwk,469
|
|
15
|
+
agents/code_inspection/patterns/inspection/recurring_bug_null_001.json,sha256=yztgivhfu8JRevB8AleGmNWSJpLUtWVRnZN3bMIJoLU,442
|
|
16
|
+
agents/code_inspection/patterns/inspection/recurring_builtin.json,sha256=ax-DHlUPqP3_gZK7mpEmn0VMqieQ4IikrY4bWaY-Xws,405
|
|
17
|
+
coach_wizards/__init__.py,sha256=gbAl8_31gjPVWmkrBlgn1M5sZt-DaG7NOBE-Q2kVu2A,1445
|
|
18
|
+
coach_wizards/accessibility_wizard.py,sha256=G0J70ZhFV4B9typeHQwj5IMRXuN1QA02G9wZCQSkItE,2624
|
|
19
|
+
coach_wizards/api_wizard.py,sha256=GcwvvcC7CjBLXA-m7CZki7lTGQnYN3qXZS1IdRgVAJ8,2558
|
|
20
|
+
coach_wizards/base_wizard.py,sha256=FFuGrSsMExp3-dLP4YULUNb4ZklFmcEQhQ7TjFJUZdY,5861
|
|
21
|
+
coach_wizards/cicd_wizard.py,sha256=wxWChOEIcXiPssZ-Lxu6QNJn78qKZWtrLbBi4Kyp5o8,2510
|
|
22
|
+
coach_wizards/compliance_wizard.py,sha256=HKFJ7w2XJTi5wv2NX_Yo-yr1Z2oL9Z69d8GmiIUC89g,2578
|
|
23
|
+
coach_wizards/database_wizard.py,sha256=rQkSDPYgut73q1MRU-KKH1F9DxyE3ReVOqijNwNxhB4,2588
|
|
24
|
+
coach_wizards/debugging_wizard.py,sha256=jXA8YIlfr8tngpr6eksaBHWdUMttU8nBqA9Wq3OfwF8,2607
|
|
25
|
+
coach_wizards/documentation_wizard.py,sha256=7o_OIyyxFaQ6SkFuSl7YkEYO81ZBdTkc2yf0UV2D-RE,2631
|
|
26
|
+
coach_wizards/generate_wizards.py,sha256=0hUy7wyMjVUidwnEFt_cxSVjmBZFZbybdGTM2u7vX6w,12374
|
|
27
|
+
coach_wizards/localization_wizard.py,sha256=RfPpQkTyK3xEyrR1h764XnNil22LhBYLTf3chEQBB10,6095
|
|
28
|
+
coach_wizards/migration_wizard.py,sha256=42Anm9qKwv5idWic2HjmFKXhilD1FYPADN4lMlflSvI,2587
|
|
29
|
+
coach_wizards/monitoring_wizard.py,sha256=fpRLrMkYEU-0L3mYQcmqpOJMJNVE1RI4f7W1Vuak040,2559
|
|
30
|
+
coach_wizards/observability_wizard.py,sha256=UZryRWlgR2bXzksF6g-fvCWItfYwJ_SVWQMK7g_VTq4,2624
|
|
31
|
+
coach_wizards/performance_wizard.py,sha256=i5HXxXZ2_XUc2mn2JfMUM9WITepONNisbgBeGzCmejo,2650
|
|
32
|
+
coach_wizards/prompt_engineering_wizard.py,sha256=K4Y_a_E0_N93DqPa9gSzyab8U1KulZDByFucvpvuadc,21294
|
|
33
|
+
coach_wizards/refactoring_wizard.py,sha256=X0MTx3BHpOlOMAYDow-3HX5GyryY70JGAF5vAAEVuRE,2629
|
|
34
|
+
coach_wizards/scaling_wizard.py,sha256=n1RLtpWmj1RSEGSWssMiUPwCdpskO3z2Z3yhLlTdXro,2598
|
|
35
|
+
coach_wizards/security_wizard.py,sha256=19SOClSxo6N-QqUc_QsFXOE7yEquiZF4kLi7jRomA7g,2605
|
|
36
|
+
coach_wizards/testing_wizard.py,sha256=vKFgFG4uJfAVFmCIQbkrWNvZhIfLC6ve_XbvWZKrPg4,2563
|
|
37
|
+
empathy_framework-3.7.0.dist-info/licenses/LICENSE,sha256=IJ9eeI5KSrD5P7alsn7sI_6_1bDihxBA5S4Sen4jf2k,4937
|
|
38
|
+
empathy_healthcare_plugin/__init__.py,sha256=4NioL1_86UXzkd-QNkQZUSZ8rKTQGSP0TC9VXP32kQs,295
|
|
39
|
+
empathy_healthcare_plugin/protocols/cardiac.json,sha256=uShOvI2RQJYLZacLT2R_aHfsjvJdyCu_gYfpMfK3N74,2088
|
|
40
|
+
empathy_healthcare_plugin/protocols/post_operative.json,sha256=nqh3ydPY8FNSLv-Q3QmH8Dsyc1c4LvQxUSP84B8W6xk,2021
|
|
41
|
+
empathy_healthcare_plugin/protocols/respiratory.json,sha256=wNDprggFDGRxxHNwchC19N8aoyaN74RnhYN7lNookDI,2136
|
|
42
|
+
empathy_healthcare_plugin/protocols/sepsis.json,sha256=yXKt8QmDaAeTgHitqJJ-N9J9pkHRqGxZM_jJl_wDG6A,3631
|
|
43
|
+
empathy_llm_toolkit/README.md,sha256=wKfp80nOvQkyU2qkBMAdF9cPPR3iaHuia_2AfiXVaFM,12273
|
|
44
|
+
empathy_llm_toolkit/__init__.py,sha256=c07s4-Otc5miOpWB1g4v77EbvJr9IWsQsMpNnMx9PHc,704
|
|
45
|
+
empathy_llm_toolkit/claude_memory.py,sha256=IIwm3su_vyyyoLy4NrpwVk96KLnIgq1A_TfBhjcUZk4,14878
|
|
46
|
+
empathy_llm_toolkit/code_health.py,sha256=9CVYiX1AlwYkfyyv58ZA6TGJOPyBaXww-Gk1qXrbWBs,42719
|
|
47
|
+
empathy_llm_toolkit/contextual_patterns.py,sha256=HEaCATf9BvoGeNdC-SWRRYxYU6H-i_yboukXCgnxTPg,12057
|
|
48
|
+
empathy_llm_toolkit/core.py,sha256=WHdlQrWTxZzIi0MdumW877Gy9eA7JSMidufh2Aq6trQ,34404
|
|
49
|
+
empathy_llm_toolkit/git_pattern_extractor.py,sha256=pn_ZtycTGMlP2BVxxzUkghcLCpHtpZ01uGOoxf02vOc,14892
|
|
50
|
+
empathy_llm_toolkit/levels.py,sha256=Hu9G83iY-BRyjMJKNoDNYZ9xFD0Y0LIn_XEBc5aRWx0,7135
|
|
51
|
+
empathy_llm_toolkit/pattern_confidence.py,sha256=6plkrdDTb3GcjeNxohJlpeHnNWFRRcj5U76D2hvLSGA,14153
|
|
52
|
+
empathy_llm_toolkit/pattern_resolver.py,sha256=VLTeGvEDfQyDwNy5u-t18A5c0BcCpp1FqdExxfqZSlw,9292
|
|
53
|
+
empathy_llm_toolkit/pattern_summary.py,sha256=gA_rCXgfOT1Kp6FP5f1UZqXPp8_mkYXlAfTxc2lhOnc,12286
|
|
54
|
+
empathy_llm_toolkit/providers.py,sha256=K5Oz4DOrVIVQZcnjfE2M4d9FmFFZyA8zvAembaRy4bI,19752
|
|
55
|
+
empathy_llm_toolkit/session_status.py,sha256=a8QPYf8Sp7jnzHkeRNOyXqoj0QwwoVwkvxPXW9qdvgc,25722
|
|
56
|
+
empathy_llm_toolkit/state.py,sha256=diLXx8QKzfucVDhbKNWej40JXQFmIeM1Qvvzg92pmjU,8030
|
|
57
|
+
empathy_os/__init__.py,sha256=NdvNo4Zd96nCxfWcNQ4K_7CJhSN9NsiAizNXsibY_8c,5895
|
|
58
|
+
empathy_os/cli.py,sha256=RKMcnPf0x9dR70QRLiEvYi91TvZIPTjd8qWZ5QNcqV4,94071
|
|
59
|
+
empathy_os/cli_unified.py,sha256=wyp0XheRh7AVhGCa1uD0aGahZErybc0aEb3-5CiFmqM,14943
|
|
60
|
+
empathy_os/config.py,sha256=Ec2WJUZuDgNyyD00VCpsaGz2LbKdoJlgnrSFvEf7LsU,14706
|
|
61
|
+
empathy_os/coordination.py,sha256=E2HvHxKk1xbYswtgxhnVKB6DRxfXUV5pCt-XWHOvNKM,28509
|
|
62
|
+
empathy_os/core.py,sha256=PvrPs8JQPwQjPZZQj6zy6xQTFGHKziaeRxCIlIs3iHA,52951
|
|
63
|
+
empathy_os/cost_tracker.py,sha256=Cd07k2ecpYH2Xq968Ed1YsyqvEXQ5Cn6RqoAENVEE_k,12524
|
|
64
|
+
empathy_os/discovery.py,sha256=FjaLzLfrZ_X9z0RZ_vpT1xI-D8uffIWZznloqBTTh7I,9823
|
|
65
|
+
empathy_os/emergence.py,sha256=uMNcB3npENNEharvgXAaRazXLMn5fsKtp-p-PFzhyi8,11361
|
|
66
|
+
empathy_os/exceptions.py,sha256=OUJga73z94f4jHPWvU7neBUnsVhCSQXrvr9KUP2MIhw,3272
|
|
67
|
+
empathy_os/feedback_loops.py,sha256=MjraZ_f2JpuYLRUYtC2XQH2cZelE7_OsklrEcwJqmkY,13242
|
|
68
|
+
empathy_os/levels.py,sha256=KsdNdRURRl1UtCnduWSunzktP_qsFT4lemSPKgWdmXw,19131
|
|
69
|
+
empathy_os/leverage_points.py,sha256=LVYtvd260bjt-j4IuZRyhE7z1pX4P3D0ocWIDOGC1V4,16717
|
|
70
|
+
empathy_os/logging_config.py,sha256=HecUoSF0QCgtr3_1czz9EoedcG0gAYNmq7Hc8lDxG1Y,8102
|
|
71
|
+
empathy_os/monitoring.py,sha256=s4seLC_J4AtQ3PYWrRPO8YHM-Fbm0Q36kPEdlTHf2HI,13375
|
|
72
|
+
empathy_os/pattern_library.py,sha256=iz_PcWeeZR1vUi8r2tkbdeMBxPU8EnOWOZFEVgquGqs,13969
|
|
73
|
+
empathy_os/persistence.py,sha256=ooW-Nu-vANpJn4AQGpRGapIIIoFbgwohUvNrpozSA-M,17547
|
|
74
|
+
empathy_os/platform_utils.py,sha256=VXv3IgK0ykKCBJlsxB4xSwJQteKu3Ds-1UDmHl9fHmo,7256
|
|
75
|
+
empathy_os/redis_config.py,sha256=6khRnNSA3gljmrH4w38h5nrVUfA8DvXRFbDXAJVzl6o,9754
|
|
76
|
+
empathy_os/redis_memory.py,sha256=e8cqZtcnVGLCAI4sgv5zzoZB9xo-UPwJQ8gzbEKWnwM,23119
|
|
77
|
+
empathy_os/templates.py,sha256=uSJQbHE55R8kuuvEyPLxTxFPXstybrsKvGOhhiy93sE,17047
|
|
78
|
+
empathy_os/trust_building.py,sha256=plCmSQSzgU2ryMMmJqawQ4l7fIoFmwsx53BDYQv4jhU,18836
|
|
79
|
+
empathy_os/workflow_commands.py,sha256=PqzpsXVB7Vk2raMbSYTDICETb1PZJ4u7IXb7HQdKSYo,25174
|
|
80
|
+
empathy_software_plugin/SOFTWARE_PLUGIN_README.md,sha256=RXIOB9Mt-8JrfGAA3ZUuRPT34sThubrwUgg5iNcSKIc,22591
|
|
81
|
+
empathy_software_plugin/__init__.py,sha256=OceDhLoQrjD0jTPlI4418608l97OT48u4SCL5yEDPQc,309
|
|
82
|
+
empathy_software_plugin/cli.py,sha256=kp7jZni94Bv6_0D7hdk4gT10NT6HsemFLJkWKAVMHj0,22682
|
|
83
|
+
empathy_software_plugin/plugin.py,sha256=jjIrGOtitOUzmLqfsgML5lsGx7bXaI9WURgucPY7rb0,6676
|
|
84
|
+
wizards/__init__.py,sha256=5JJ6rtS5mwJtuZIgO2sYHZlCy0XJP2eyyCK5zMD6ZAc,2452
|
|
85
|
+
wizards/admission_assessment_wizard.py,sha256=-Th9bwu6Sd6V2jA4fciK35QpoFc40U1quZHDMdOH93U,23609
|
|
86
|
+
wizards/care_plan.py,sha256=YVjjmbdUptOSkgkbhCIioHbcgISgzvIhlRiHZ3xvUJQ,10728
|
|
87
|
+
wizards/clinical_assessment.py,sha256=LrH_ATyYw8e1IWPwR9GNtc4acnqLC3PaqTH-RMGtRQE,29581
|
|
88
|
+
wizards/discharge_planning.py,sha256=17oN6EvSaRS8kSGV4xkXmu_wx4qOAOzMOUnWAzHa3_Y,2364
|
|
89
|
+
wizards/discharge_summary_wizard.py,sha256=47hFpLNUXmRYPaaWK7ptVCtwHD8AuY8v-bbPzDeTO-c,17916
|
|
90
|
+
wizards/dosage_calculation.py,sha256=UST0Y2hwRPcEomqXm6u_TxcDO6tvBvKdYb3lVuzGZUQ,20167
|
|
91
|
+
wizards/incident_report_wizard.py,sha256=IbKcvtDynNTDSFSN4SWG4FpXpyQrjaRE4dADMvHDjQk,17131
|
|
92
|
+
wizards/medication_reconciliation.py,sha256=QYF-_k85oHNU9VHvHJ8XxLxBops9j0b2EI9_G5TvWxI,2708
|
|
93
|
+
wizards/nursing_assessment.py,sha256=WHh-co87ZaFgZRl7Ss1ldJ4lBanDm_3ePVpqWkdT0m4,5967
|
|
94
|
+
wizards/patient_education.py,sha256=1Tkh_z_R4OxgsUaHU8qmlsqS1EYR-WN_dLl3Hvrpkkk,23493
|
|
95
|
+
wizards/quality_improvement.py,sha256=eY4KEbHQOfvNI8ybgFwDR5BmRDAw7fQ-x6dtFmIUyik,27690
|
|
96
|
+
wizards/sbar_report.py,sha256=sVkiF6Vq3FFYqXIdI-ueN2HCMiGOTC519jcf1ccqEUQ,11519
|
|
97
|
+
wizards/sbar_wizard.py,sha256=CJ63JAXwcfBf6C3aYyxY2LODbARP9GPl0ZGJWLbx88E,21790
|
|
98
|
+
wizards/shift_handoff_wizard.py,sha256=SkoNB0nLQGg92yz4j1j3NBR2mGVe_rw1pTjOFDy-JH0,19092
|
|
99
|
+
wizards/soap_note_wizard.py,sha256=DBzuuuOvIONhwdfn8jaE4PCuGeKsFwM65XTb6gKFIy4,23572
|
|
100
|
+
wizards/treatment_plan.py,sha256=t2Qk5eCa1gobEUaBztnwem_p9OuJK5BKqJ-Po8vXuns,512
|
|
101
|
+
empathy_framework-3.7.0.dist-info/METADATA,sha256=YHFPVpKETugcbzAQ1ODOEigkLQoa7c0rmFISPbZHhiw,39800
|
|
102
|
+
empathy_framework-3.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
103
|
+
empathy_framework-3.7.0.dist-info/entry_points.txt,sha256=zMu7sKCiLndbEEXjTecltS-1P_JZoEUKrifuRBBbroc,1268
|
|
104
|
+
empathy_framework-3.7.0.dist-info/top_level.txt,sha256=8zHB-_f0MI2K55LIEjCeaFNcog3_KgLBa_dDfzE8ESI,110
|
|
105
|
+
empathy_framework-3.7.0.dist-info/RECORD,,
|
empathy_llm_toolkit/__init__.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Empathy LLM Toolkit
|
|
1
|
+
"""Empathy LLM Toolkit
|
|
3
2
|
|
|
4
3
|
Wraps LLM providers (OpenAI, Anthropic, local models) with Empathy Framework levels.
|
|
5
4
|
|
|
@@ -18,12 +17,12 @@ from .state import CollaborationState, UserPattern
|
|
|
18
17
|
__version__ = "1.9.5"
|
|
19
18
|
|
|
20
19
|
__all__ = [
|
|
21
|
-
"EmpathyLLM",
|
|
22
|
-
"OpenAIProvider",
|
|
23
20
|
"AnthropicProvider",
|
|
21
|
+
"CollaborationState",
|
|
22
|
+
"EmpathyLLM",
|
|
23
|
+
"EmpathyLevel",
|
|
24
24
|
"GeminiProvider",
|
|
25
25
|
"LocalProvider",
|
|
26
|
-
"
|
|
26
|
+
"OpenAIProvider",
|
|
27
27
|
"UserPattern",
|
|
28
|
-
"EmpathyLevel",
|
|
29
28
|
]
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Claude Memory Integration Module
|
|
1
|
+
"""Claude Memory Integration Module
|
|
3
2
|
|
|
4
3
|
Reads and integrates Claude Code's CLAUDE.md memory files with the Empathy Framework.
|
|
5
4
|
Supports hierarchical memory loading (Enterprise → Project → User) and @import directives.
|
|
@@ -64,8 +63,7 @@ class MemoryFile:
|
|
|
64
63
|
|
|
65
64
|
|
|
66
65
|
class ClaudeMemoryLoader:
|
|
67
|
-
"""
|
|
68
|
-
Loads and manages Claude Code memory files (CLAUDE.md).
|
|
66
|
+
"""Loads and manages Claude Code memory files (CLAUDE.md).
|
|
69
67
|
|
|
70
68
|
Follows Claude Code's hierarchical memory system:
|
|
71
69
|
1. Enterprise memory (organization-wide)
|
|
@@ -81,8 +79,7 @@ class ClaudeMemoryLoader:
|
|
|
81
79
|
self._import_stack: list[str] = [] # Track imports to detect cycles
|
|
82
80
|
|
|
83
81
|
def load_all_memory(self, project_root: str | None = None) -> str:
|
|
84
|
-
"""
|
|
85
|
-
Load all Claude memory files and return combined content.
|
|
82
|
+
"""Load all Claude memory files and return combined content.
|
|
86
83
|
|
|
87
84
|
Args:
|
|
88
85
|
project_root: Project root directory (defaults to cwd)
|
|
@@ -94,6 +91,7 @@ class ClaudeMemoryLoader:
|
|
|
94
91
|
loader = ClaudeMemoryLoader(ClaudeMemoryConfig(enabled=True))
|
|
95
92
|
memory = loader.load_all_memory("/path/to/project")
|
|
96
93
|
# Use memory in LLM system prompt
|
|
94
|
+
|
|
97
95
|
"""
|
|
98
96
|
if not self.config.enabled:
|
|
99
97
|
logger.debug("claude_memory_disabled")
|
|
@@ -185,8 +183,7 @@ class ClaudeMemoryLoader:
|
|
|
185
183
|
return None
|
|
186
184
|
|
|
187
185
|
def _load_memory_file(self, file_path: str, level: str, depth: int = 0) -> MemoryFile | None:
|
|
188
|
-
"""
|
|
189
|
-
Load a single memory file and process imports.
|
|
186
|
+
"""Load a single memory file and process imports.
|
|
190
187
|
|
|
191
188
|
Args:
|
|
192
189
|
file_path: Path to CLAUDE.md file
|
|
@@ -195,6 +192,7 @@ class ClaudeMemoryLoader:
|
|
|
195
192
|
|
|
196
193
|
Returns:
|
|
197
194
|
MemoryFile object or None if failed
|
|
195
|
+
|
|
198
196
|
"""
|
|
199
197
|
# Check depth limit
|
|
200
198
|
if depth > self.config.max_import_depth:
|
|
@@ -270,8 +268,7 @@ class ClaudeMemoryLoader:
|
|
|
270
268
|
return None
|
|
271
269
|
|
|
272
270
|
def _process_imports(self, content: str, base_dir: Path, depth: int) -> tuple[str, list[str]]:
|
|
273
|
-
"""
|
|
274
|
-
Process @import directives in memory content.
|
|
271
|
+
"""Process @import directives in memory content.
|
|
275
272
|
|
|
276
273
|
Supports syntax: @path/to/file.md
|
|
277
274
|
|
|
@@ -282,6 +279,7 @@ class ClaudeMemoryLoader:
|
|
|
282
279
|
|
|
283
280
|
Returns:
|
|
284
281
|
(processed_content, list_of_imported_paths)
|
|
282
|
+
|
|
285
283
|
"""
|
|
286
284
|
# Match @import syntax: @path/to/file
|
|
287
285
|
import_pattern = re.compile(r"^@([^\s]+)$", re.MULTILINE)
|
|
@@ -301,7 +299,9 @@ class ClaudeMemoryLoader:
|
|
|
301
299
|
if resolved_path.exists():
|
|
302
300
|
# Recursively load imported file
|
|
303
301
|
imported_file = self._load_memory_file(
|
|
304
|
-
str(resolved_path),
|
|
302
|
+
str(resolved_path),
|
|
303
|
+
level="import",
|
|
304
|
+
depth=depth + 1,
|
|
305
305
|
)
|
|
306
306
|
|
|
307
307
|
if imported_file:
|
|
@@ -322,8 +322,7 @@ class ClaudeMemoryLoader:
|
|
|
322
322
|
return "\n".join(processed_lines), imports
|
|
323
323
|
|
|
324
324
|
def _combine_memory_files(self, memory_files: list[MemoryFile]) -> str:
|
|
325
|
-
"""
|
|
326
|
-
Combine multiple memory files into a single memory string.
|
|
325
|
+
"""Combine multiple memory files into a single memory string.
|
|
327
326
|
|
|
328
327
|
Files are combined in load order with clear section markers.
|
|
329
328
|
"""
|
|
@@ -355,8 +354,7 @@ class ClaudeMemoryLoader:
|
|
|
355
354
|
|
|
356
355
|
|
|
357
356
|
def create_default_project_memory(project_root: str, framework: str = "empathy"):
|
|
358
|
-
"""
|
|
359
|
-
Create a default .claude/CLAUDE.md file for a project.
|
|
357
|
+
"""Create a default .claude/CLAUDE.md file for a project.
|
|
360
358
|
|
|
361
359
|
Args:
|
|
362
360
|
project_root: Project root directory
|
|
@@ -364,6 +362,7 @@ def create_default_project_memory(project_root: str, framework: str = "empathy")
|
|
|
364
362
|
|
|
365
363
|
Example:
|
|
366
364
|
create_default_project_memory("/path/to/project")
|
|
365
|
+
|
|
367
366
|
"""
|
|
368
367
|
project_path = Path(project_root)
|
|
369
368
|
claude_dir = project_path / ".claude"
|