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.
Files changed (72) hide show
  1. agents/compliance_anticipation_agent.py +113 -118
  2. agents/compliance_db.py +339 -0
  3. agents/epic_integration_wizard.py +37 -48
  4. agents/notifications.py +291 -0
  5. agents/trust_building_behaviors.py +66 -85
  6. coach_wizards/__init__.py +11 -12
  7. coach_wizards/accessibility_wizard.py +12 -12
  8. coach_wizards/api_wizard.py +12 -12
  9. coach_wizards/base_wizard.py +26 -20
  10. coach_wizards/cicd_wizard.py +15 -13
  11. coach_wizards/compliance_wizard.py +12 -12
  12. coach_wizards/database_wizard.py +12 -12
  13. coach_wizards/debugging_wizard.py +12 -12
  14. coach_wizards/documentation_wizard.py +12 -12
  15. coach_wizards/generate_wizards.py +1 -2
  16. coach_wizards/localization_wizard.py +21 -14
  17. coach_wizards/migration_wizard.py +12 -12
  18. coach_wizards/monitoring_wizard.py +12 -12
  19. coach_wizards/observability_wizard.py +12 -12
  20. coach_wizards/performance_wizard.py +12 -12
  21. coach_wizards/prompt_engineering_wizard.py +22 -25
  22. coach_wizards/refactoring_wizard.py +12 -12
  23. coach_wizards/scaling_wizard.py +12 -12
  24. coach_wizards/security_wizard.py +12 -12
  25. coach_wizards/testing_wizard.py +12 -12
  26. {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/METADATA +234 -30
  27. empathy_framework-3.7.0.dist-info/RECORD +105 -0
  28. empathy_healthcare_plugin/__init__.py +1 -2
  29. empathy_llm_toolkit/__init__.py +5 -6
  30. empathy_llm_toolkit/claude_memory.py +14 -15
  31. empathy_llm_toolkit/code_health.py +27 -19
  32. empathy_llm_toolkit/contextual_patterns.py +11 -12
  33. empathy_llm_toolkit/core.py +43 -49
  34. empathy_llm_toolkit/git_pattern_extractor.py +16 -12
  35. empathy_llm_toolkit/levels.py +6 -13
  36. empathy_llm_toolkit/pattern_confidence.py +14 -18
  37. empathy_llm_toolkit/pattern_resolver.py +10 -12
  38. empathy_llm_toolkit/pattern_summary.py +13 -11
  39. empathy_llm_toolkit/providers.py +27 -38
  40. empathy_llm_toolkit/session_status.py +18 -20
  41. empathy_llm_toolkit/state.py +20 -21
  42. empathy_os/__init__.py +72 -73
  43. empathy_os/cli.py +193 -98
  44. empathy_os/cli_unified.py +68 -41
  45. empathy_os/config.py +31 -31
  46. empathy_os/coordination.py +48 -54
  47. empathy_os/core.py +90 -99
  48. empathy_os/cost_tracker.py +20 -23
  49. empathy_os/discovery.py +9 -11
  50. empathy_os/emergence.py +20 -21
  51. empathy_os/exceptions.py +18 -30
  52. empathy_os/feedback_loops.py +27 -30
  53. empathy_os/levels.py +31 -34
  54. empathy_os/leverage_points.py +27 -28
  55. empathy_os/logging_config.py +11 -12
  56. empathy_os/monitoring.py +27 -27
  57. empathy_os/pattern_library.py +29 -28
  58. empathy_os/persistence.py +30 -34
  59. empathy_os/platform_utils.py +46 -47
  60. empathy_os/redis_config.py +14 -15
  61. empathy_os/redis_memory.py +53 -56
  62. empathy_os/templates.py +12 -11
  63. empathy_os/trust_building.py +44 -36
  64. empathy_os/workflow_commands.py +123 -31
  65. empathy_software_plugin/__init__.py +1 -2
  66. empathy_software_plugin/cli.py +32 -25
  67. empathy_software_plugin/plugin.py +4 -8
  68. empathy_framework-3.5.6.dist-info/RECORD +0 -103
  69. {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/WHEEL +0 -0
  70. {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/entry_points.txt +0 -0
  71. {empathy_framework-3.5.6.dist-info → empathy_framework-3.7.0.dist-info}/licenses/LICENSE +0 -0
  72. {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.5.6
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 <patrick.roebuck@smartAImemory.com>
6
- Maintainer-email: Smart-AI-Memory <patrick.roebuck@smartAImemory.com>
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.8.0; extra == "anthropic"
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.6.0; extra == "openai"
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.8.0; extra == "google"
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.8.0; extra == "llm"
185
- Requires-Dist: openai<2.0.0,>=1.6.0; extra == "llm"
186
- Requires-Dist: google-generativeai<1.0.0,>=0.8.0; extra == "llm"
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.3.0,>=0.1.0; extra == "agents"
191
- Requires-Dist: langchain-core<0.3.0,>=0.1.0; extra == "agents"
192
- Requires-Dist: langgraph<0.2.0,>=0.1.0; extra == "agents"
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.8.0; extra == "full"
232
- Requires-Dist: openai<2.0.0,>=1.6.0; extra == "full"
233
- Requires-Dist: google-generativeai<1.0.0,>=0.8.0; extra == "full"
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.3.0,>=0.1.0; extra == "full"
236
- Requires-Dist: langchain-core<0.3.0,>=0.1.0; extra == "full"
237
- Requires-Dist: langgraph<0.2.0,>=0.1.0; extra == "full"
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.8.0; extra == "all"
242
- Requires-Dist: openai<2.0.0,>=1.6.0; extra == "all"
243
- Requires-Dist: google-generativeai<1.0.0,>=0.8.0; extra == "all"
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.3.0,>=0.1.0; extra == "all"
246
- Requires-Dist: langchain-core<0.3.0,>=0.1.0; extra == "all"
247
- Requires-Dist: langgraph<0.2.0,>=0.1.0; extra == "all"
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
  [![PyPI](https://img.shields.io/pypi/v/empathy-framework)](https://pypi.org/project/empathy-framework/)
281
- [![Tests](https://img.shields.io/badge/tests-5%2C603%20passing-brightgreen)](https://github.com/Smart-AI-Memory/empathy-framework/actions)
339
+ [![Tests](https://img.shields.io/badge/tests-5%2C941%20passing-brightgreen)](https://github.com/Smart-AI-Memory/empathy-framework/actions)
282
340
  [![Coverage](https://img.shields.io/badge/coverage-64%25-yellow)](https://github.com/Smart-AI-Memory/empathy-framework)
283
341
  [![License](https://img.shields.io/badge/license-Fair%20Source%200.9-blue)](LICENSE)
284
342
  [![Python](https://img.shields.io/badge/python-3.10+-blue)](https://www.python.org)
285
343
 
286
344
  ```bash
287
- pip install empathy-framework[full]
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
- ## What's New in v3.5.x
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
- ### Project Indexing & Test Suite Expansion (v3.5.4)
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[full]
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,,
@@ -1,5 +1,4 @@
1
- """
2
- Empathy Healthcare Plugin
1
+ """Empathy Healthcare Plugin
3
2
 
4
3
  Clinical protocol monitoring using the empathy framework.
5
4
 
@@ -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
- "CollaborationState",
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), level="import", depth=depth + 1
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"