empathy-framework 3.9.0__py3-none-any.whl → 3.9.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: empathy-framework
3
- Version: 3.9.0
3
+ Version: 3.9.1
4
4
  Summary: AI collaboration framework with intelligent caching (up to 57% cache hit rate), tier routing (34-86% cost savings depending on task complexity), XML-enhanced prompts, persistent memory, CrewAI integration, and multi-agent orchestration. Includes HIPAA-compliant healthcare wizards.
5
5
  Author-email: Patrick Roebuck <admin@smartaimemory.com>
6
6
  Maintainer-email: Smart-AI-Memory <admin@smartaimemory.com>
@@ -368,7 +368,48 @@ Dynamic: license-file
368
368
  pip install empathy-framework[developer] # Lightweight for individual developers
369
369
  ```
370
370
 
371
- ## What's New in v3.8.3 (Current Release)
371
+ ## What's New in v3.9.0 (Current Release)
372
+
373
+ ### 🔒 **Security Hardening: 174 Security Tests (Up from 14)**
374
+
375
+ **Production-ready security with comprehensive file path validation across the entire framework.**
376
+
377
+ - ✅ **6 modules secured** with Pattern 6 (File Path Validation)
378
+ - ✅ **13 file write operations** validated to prevent path traversal (CWE-22)
379
+ - ✅ **174 security tests** (100% passing) - up from 14 tests (+1143% increase)
380
+ - ✅ **Zero blind exception handlers** - all errors now properly typed and logged
381
+
382
+ ```python
383
+ # All file writes now validated for security
384
+ from empathy_os.config import EmpathyConfig
385
+
386
+ config = EmpathyConfig(user_id="alice")
387
+ config.to_yaml("/etc/passwd") # ❌ ValueError: Cannot write to system directory
388
+ config.to_yaml("./empathy.yml") # ✅ Safe write
389
+ ```
390
+
391
+ **Attack vectors blocked:**
392
+
393
+ - Path traversal: `../../../etc/passwd` → `ValueError`
394
+ - Null byte injection: `config\x00.json` → `ValueError`
395
+ - System directory writes: `/etc`, `/sys`, `/proc`, `/dev` → All blocked
396
+
397
+ See [SECURITY.md](https://github.com/Smart-AI-Memory/empathy-framework/blob/main/SECURITY.md) for complete security documentation.
398
+
399
+ ### 🛡️ **Exception Handling Improvements**
400
+
401
+ **Better error messages with graceful degradation.**
402
+
403
+ - Fixed 8 blind `except Exception:` handlers in workflow base
404
+ - Specific exception types for better debugging
405
+ - Enhanced error logging while maintaining graceful degradation
406
+ - All intentional broad catches documented with design rationale
407
+
408
+ ---
409
+
410
+ ### Previous Releases
411
+
412
+ #### v3.8.3
372
413
 
373
414
  ### 🎯 **Transparent Cost Claims: Honest Role-Based Savings (34-86%)**
374
415
 
@@ -413,7 +454,7 @@ empathy telemetry export --format csv --output usage.csv
413
454
 
414
455
  ---
415
456
 
416
- ### Previous Release: v3.7.0
457
+ #### v3.7.0
417
458
 
418
459
  #### 🚀 **XML-Enhanced Prompting: 15-35% Token Reduction + Graceful Validation**
419
460
 
@@ -20,7 +20,7 @@ coach_wizards/refactoring_wizard.py,sha256=X0MTx3BHpOlOMAYDow-3HX5GyryY70JGAF5vA
20
20
  coach_wizards/scaling_wizard.py,sha256=n1RLtpWmj1RSEGSWssMiUPwCdpskO3z2Z3yhLlTdXro,2598
21
21
  coach_wizards/security_wizard.py,sha256=19SOClSxo6N-QqUc_QsFXOE7yEquiZF4kLi7jRomA7g,2605
22
22
  coach_wizards/testing_wizard.py,sha256=vKFgFG4uJfAVFmCIQbkrWNvZhIfLC6ve_XbvWZKrPg4,2563
23
- empathy_framework-3.9.0.dist-info/licenses/LICENSE,sha256=IJ9eeI5KSrD5P7alsn7sI_6_1bDihxBA5S4Sen4jf2k,4937
23
+ empathy_framework-3.9.1.dist-info/licenses/LICENSE,sha256=IJ9eeI5KSrD5P7alsn7sI_6_1bDihxBA5S4Sen4jf2k,4937
24
24
  empathy_healthcare_plugin/__init__.py,sha256=4NioL1_86UXzkd-QNkQZUSZ8rKTQGSP0TC9VXP32kQs,295
25
25
  empathy_healthcare_plugin/monitors/__init__.py,sha256=Udp8qfZR504QAq5_eQjvtIaE7v06Yguc7nuF40KllQc,196
26
26
  empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py,sha256=GkNh2Yuw9cvuKuPh3mriWtKJZFq_sTxBD7Ci8lFV9gQ,11620
@@ -218,7 +218,7 @@ empathy_os/telemetry/usage_tracker.py,sha256=acRhJyovJDoWXGsRFzwQcN83MnCS_gL4mH4
218
218
  empathy_os/test_generator/__init__.py,sha256=d7grN2uxoRqcTsiZAC-kgEad48Z9rDunOZ6TycS3fy4,913
219
219
  empathy_os/test_generator/__main__.py,sha256=YY_HE1xg4zKZkHHAd6sSzWvJCvLFOtmpawCrNlGjWAc,345
220
220
  empathy_os/test_generator/cli.py,sha256=u8WL1X3reqSYfVGjYiET7fmxqQDIIOzAE5HMQquhl7M,6862
221
- empathy_os/test_generator/generator.py,sha256=uDvG01hJUxbfI-eBIB4SsCxPZnWoNYqSMB3rZt0zem0,9692
221
+ empathy_os/test_generator/generator.py,sha256=w0BXCZg_BphJ4kaA3FkbBC2uZK2xamN4XfWTtlvWdgc,9791
222
222
  empathy_os/test_generator/risk_analyzer.py,sha256=5vEncQDmxUXglZBX9-DdCcsz4yjvuY9IhJGjIfTH9fE,7486
223
223
  empathy_os/trust/__init__.py,sha256=ou4rlQ3smvivC8b-z-1E0vbqyGnLveRcggf270pTa_E,833
224
224
  empathy_os/trust/circuit_breaker.py,sha256=VMuVmH_lZ_RB0E-tjE150Qtbk7WnkLQXc-fp_8NR5AQ,20716
@@ -231,7 +231,7 @@ empathy_os/workflow_patterns/output.py,sha256=ArpR4D_z5MtRlWCKlKUmSWfXlMw-nkBukM
231
231
  empathy_os/workflow_patterns/registry.py,sha256=0U_XT0hdQ5fLHuEJlrvzjaCBUyeWDA675_hEyvHxT0o,7461
232
232
  empathy_os/workflow_patterns/structural.py,sha256=nDwWuZYnXbm21Gsr0yMoMQiOcU07VuNlpsUGPyZ2efk,9470
233
233
  empathy_os/workflows/__init__.py,sha256=UYXKvpkaLEAGqnMpUHrdR8TZiqmR8k47lpdEs2cs9B0,12022
234
- empathy_os/workflows/base.py,sha256=bDFuKnGxeQYMjkd5FgZeKXsGe9eRnrhcbXXsznnyS1k,66281
234
+ empathy_os/workflows/base.py,sha256=fnKeZXaFfPk6SUKbqV1P7aJVGueFJSd0O32PPoquWG8,66320
235
235
  empathy_os/workflows/bug_predict.py,sha256=Td2XtawwTSqBOOIqlziNXcOt4YRMMeya2W1tFOJKytY,35726
236
236
  empathy_os/workflows/code_review.py,sha256=SWNXSuJ2v4to8sZiHSQ2Z06gVCJ10L1LQr77Jf1SUyM,35647
237
237
  empathy_os/workflows/code_review_adapters.py,sha256=9aGUDAgE1B1EUJ-Haz2Agwo4RAwY2aqHtNYKEbJq2yc,11065
@@ -337,8 +337,8 @@ workflow_scaffolding/__init__.py,sha256=UpX5vjjjPjIaAKyIV1D4GxJzLUZy5DzdzgSkePYM
337
337
  workflow_scaffolding/__main__.py,sha256=0qspuNoadTDqyskXTlT8Sahqau-XIxN35NHTSGVW6z4,236
338
338
  workflow_scaffolding/cli.py,sha256=R4rCTDENRMil2c3v32MnisqteFRDfilS6RHBNlYV39Q,6752
339
339
  workflow_scaffolding/generator.py,sha256=whWbBmWEA0rN3M3X9EzTjfbwBxHcF40Jin8-nbj0S0E,8858
340
- empathy_framework-3.9.0.dist-info/METADATA,sha256=D8RjLJ4FEGvvTwAqYlpqycoV91b7hyJkCps5DNPjjxg,48626
341
- empathy_framework-3.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
342
- empathy_framework-3.9.0.dist-info/entry_points.txt,sha256=zMu7sKCiLndbEEXjTecltS-1P_JZoEUKrifuRBBbroc,1268
343
- empathy_framework-3.9.0.dist-info/top_level.txt,sha256=wrNU1aVMutVDACer58H-udv0P_171Dv6z_42sZtZ-xM,124
344
- empathy_framework-3.9.0.dist-info/RECORD,,
340
+ empathy_framework-3.9.1.dist-info/METADATA,sha256=g7iTmZn_uTu8A5iAPall5wTQHkkhKdrkLr5P5iZTfKc,50099
341
+ empathy_framework-3.9.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
342
+ empathy_framework-3.9.1.dist-info/entry_points.txt,sha256=zMu7sKCiLndbEEXjTecltS-1P_JZoEUKrifuRBBbroc,1268
343
+ empathy_framework-3.9.1.dist-info/top_level.txt,sha256=wrNU1aVMutVDACer58H-udv0P_171Dv6z_42sZtZ-xM,124
344
+ empathy_framework-3.9.1.dist-info/RECORD,,
@@ -48,6 +48,7 @@ class TestGenerator:
48
48
  loader=FileSystemLoader(str(template_dir)),
49
49
  trim_blocks=True,
50
50
  lstrip_blocks=True,
51
+ autoescape=True, # Enable autoescape for security (test gen templates should be safe)
51
52
  )
52
53
 
53
54
  self.risk_analyzer = RiskAnalyzer()
@@ -57,6 +57,7 @@ from .progress import ProgressCallback, ProgressTracker
57
57
  # Import telemetry tracking
58
58
  try:
59
59
  from empathy_os.telemetry import UsageTracker
60
+
60
61
  TELEMETRY_AVAILABLE = True
61
62
  except ImportError:
62
63
  TELEMETRY_AVAILABLE = False
@@ -602,7 +603,9 @@ class BaseWorkflow(ABC):
602
603
  logger.debug(f"Cache lookup failed (malformed data): {e}, continuing with LLM call")
603
604
  except (OSError, PermissionError) as e:
604
605
  # File system errors - continue with LLM call
605
- logger.debug(f"Cache lookup failed (file system error): {e}, continuing with LLM call")
606
+ logger.debug(
607
+ f"Cache lookup failed (file system error): {e}, continuing with LLM call"
608
+ )
606
609
 
607
610
  # Create a step config for this call
608
611
  step = WorkflowStepConfig(