empathy-framework 4.6.6__py3-none-any.whl → 4.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 (247) hide show
  1. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
  2. empathy_framework-4.7.0.dist-info/RECORD +354 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -2
  4. empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
  5. empathy_llm_toolkit/agent_factory/__init__.py +6 -6
  6. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
  7. empathy_llm_toolkit/agents_md/__init__.py +22 -0
  8. empathy_llm_toolkit/agents_md/loader.py +218 -0
  9. empathy_llm_toolkit/agents_md/parser.py +271 -0
  10. empathy_llm_toolkit/agents_md/registry.py +307 -0
  11. empathy_llm_toolkit/commands/__init__.py +51 -0
  12. empathy_llm_toolkit/commands/context.py +375 -0
  13. empathy_llm_toolkit/commands/loader.py +301 -0
  14. empathy_llm_toolkit/commands/models.py +231 -0
  15. empathy_llm_toolkit/commands/parser.py +371 -0
  16. empathy_llm_toolkit/commands/registry.py +429 -0
  17. empathy_llm_toolkit/config/__init__.py +8 -8
  18. empathy_llm_toolkit/config/unified.py +3 -7
  19. empathy_llm_toolkit/context/__init__.py +22 -0
  20. empathy_llm_toolkit/context/compaction.py +455 -0
  21. empathy_llm_toolkit/context/manager.py +434 -0
  22. empathy_llm_toolkit/hooks/__init__.py +24 -0
  23. empathy_llm_toolkit/hooks/config.py +306 -0
  24. empathy_llm_toolkit/hooks/executor.py +289 -0
  25. empathy_llm_toolkit/hooks/registry.py +302 -0
  26. empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
  27. empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
  28. empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
  29. empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
  30. empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
  31. empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
  32. empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
  33. empathy_llm_toolkit/learning/__init__.py +30 -0
  34. empathy_llm_toolkit/learning/evaluator.py +438 -0
  35. empathy_llm_toolkit/learning/extractor.py +514 -0
  36. empathy_llm_toolkit/learning/storage.py +560 -0
  37. empathy_llm_toolkit/providers.py +4 -11
  38. empathy_llm_toolkit/security/__init__.py +17 -17
  39. empathy_llm_toolkit/utils/tokens.py +2 -5
  40. empathy_os/__init__.py +202 -70
  41. empathy_os/cache_monitor.py +5 -3
  42. empathy_os/cli/__init__.py +11 -55
  43. empathy_os/cli/__main__.py +29 -15
  44. empathy_os/cli/commands/inspection.py +21 -12
  45. empathy_os/cli/commands/memory.py +4 -12
  46. empathy_os/cli/commands/profiling.py +198 -0
  47. empathy_os/cli/commands/utilities.py +27 -7
  48. empathy_os/cli.py +28 -57
  49. empathy_os/cli_unified.py +525 -1164
  50. empathy_os/cost_tracker.py +9 -3
  51. empathy_os/dashboard/server.py +200 -2
  52. empathy_os/hot_reload/__init__.py +7 -7
  53. empathy_os/hot_reload/config.py +6 -7
  54. empathy_os/hot_reload/integration.py +35 -35
  55. empathy_os/hot_reload/reloader.py +57 -57
  56. empathy_os/hot_reload/watcher.py +28 -28
  57. empathy_os/hot_reload/websocket.py +2 -2
  58. empathy_os/memory/__init__.py +11 -4
  59. empathy_os/memory/claude_memory.py +1 -1
  60. empathy_os/memory/cross_session.py +8 -12
  61. empathy_os/memory/edges.py +6 -6
  62. empathy_os/memory/file_session.py +770 -0
  63. empathy_os/memory/graph.py +30 -30
  64. empathy_os/memory/nodes.py +6 -6
  65. empathy_os/memory/short_term.py +15 -9
  66. empathy_os/memory/unified.py +606 -140
  67. empathy_os/meta_workflows/agent_creator.py +3 -9
  68. empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
  69. empathy_os/meta_workflows/form_engine.py +6 -18
  70. empathy_os/meta_workflows/intent_detector.py +64 -24
  71. empathy_os/meta_workflows/models.py +3 -1
  72. empathy_os/meta_workflows/pattern_learner.py +13 -31
  73. empathy_os/meta_workflows/plan_generator.py +55 -47
  74. empathy_os/meta_workflows/session_context.py +2 -3
  75. empathy_os/meta_workflows/workflow.py +20 -51
  76. empathy_os/models/cli.py +2 -2
  77. empathy_os/models/tasks.py +1 -2
  78. empathy_os/models/telemetry.py +4 -1
  79. empathy_os/models/token_estimator.py +3 -1
  80. empathy_os/monitoring/alerts.py +938 -9
  81. empathy_os/monitoring/alerts_cli.py +346 -183
  82. empathy_os/orchestration/execution_strategies.py +12 -29
  83. empathy_os/orchestration/pattern_learner.py +20 -26
  84. empathy_os/orchestration/real_tools.py +6 -15
  85. empathy_os/platform_utils.py +2 -1
  86. empathy_os/plugins/__init__.py +2 -2
  87. empathy_os/plugins/base.py +64 -64
  88. empathy_os/plugins/registry.py +32 -32
  89. empathy_os/project_index/index.py +49 -15
  90. empathy_os/project_index/models.py +1 -2
  91. empathy_os/project_index/reports.py +1 -1
  92. empathy_os/project_index/scanner.py +1 -0
  93. empathy_os/redis_memory.py +10 -7
  94. empathy_os/resilience/__init__.py +1 -1
  95. empathy_os/resilience/health.py +10 -10
  96. empathy_os/routing/__init__.py +7 -7
  97. empathy_os/routing/chain_executor.py +37 -37
  98. empathy_os/routing/classifier.py +36 -36
  99. empathy_os/routing/smart_router.py +40 -40
  100. empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
  101. empathy_os/scaffolding/__init__.py +8 -8
  102. empathy_os/scaffolding/__main__.py +1 -1
  103. empathy_os/scaffolding/cli.py +28 -28
  104. empathy_os/socratic/__init__.py +3 -19
  105. empathy_os/socratic/ab_testing.py +25 -36
  106. empathy_os/socratic/blueprint.py +38 -38
  107. empathy_os/socratic/cli.py +34 -20
  108. empathy_os/socratic/collaboration.py +30 -28
  109. empathy_os/socratic/domain_templates.py +9 -1
  110. empathy_os/socratic/embeddings.py +17 -13
  111. empathy_os/socratic/engine.py +135 -70
  112. empathy_os/socratic/explainer.py +70 -60
  113. empathy_os/socratic/feedback.py +24 -19
  114. empathy_os/socratic/forms.py +15 -10
  115. empathy_os/socratic/generator.py +51 -35
  116. empathy_os/socratic/llm_analyzer.py +25 -23
  117. empathy_os/socratic/mcp_server.py +99 -159
  118. empathy_os/socratic/session.py +19 -13
  119. empathy_os/socratic/storage.py +98 -67
  120. empathy_os/socratic/success.py +38 -27
  121. empathy_os/socratic/visual_editor.py +51 -39
  122. empathy_os/socratic/web_ui.py +99 -66
  123. empathy_os/telemetry/cli.py +3 -1
  124. empathy_os/telemetry/usage_tracker.py +1 -3
  125. empathy_os/test_generator/__init__.py +3 -3
  126. empathy_os/test_generator/cli.py +28 -28
  127. empathy_os/test_generator/generator.py +64 -66
  128. empathy_os/test_generator/risk_analyzer.py +11 -11
  129. empathy_os/vscode_bridge.py +173 -0
  130. empathy_os/workflows/__init__.py +212 -120
  131. empathy_os/workflows/batch_processing.py +8 -24
  132. empathy_os/workflows/bug_predict.py +1 -1
  133. empathy_os/workflows/code_review.py +20 -5
  134. empathy_os/workflows/code_review_pipeline.py +13 -8
  135. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  136. empathy_os/workflows/manage_documentation.py +1 -0
  137. empathy_os/workflows/orchestrated_health_check.py +6 -11
  138. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  139. empathy_os/workflows/pr_review.py +18 -10
  140. empathy_os/workflows/progressive/__init__.py +2 -12
  141. empathy_os/workflows/progressive/cli.py +14 -37
  142. empathy_os/workflows/progressive/core.py +12 -12
  143. empathy_os/workflows/progressive/orchestrator.py +166 -144
  144. empathy_os/workflows/progressive/reports.py +22 -31
  145. empathy_os/workflows/progressive/telemetry.py +8 -14
  146. empathy_os/workflows/progressive/test_gen.py +29 -48
  147. empathy_os/workflows/progressive/workflow.py +31 -70
  148. empathy_os/workflows/release_prep.py +21 -6
  149. empathy_os/workflows/release_prep_crew.py +1 -0
  150. empathy_os/workflows/secure_release.py +13 -6
  151. empathy_os/workflows/security_audit.py +8 -3
  152. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  153. empathy_os/workflows/test_maintenance_crew.py +1 -0
  154. empathy_os/workflows/test_runner.py +16 -12
  155. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  156. empathy_software_plugin/cli.py +0 -122
  157. coach_wizards/__init__.py +0 -45
  158. coach_wizards/accessibility_wizard.py +0 -91
  159. coach_wizards/api_wizard.py +0 -91
  160. coach_wizards/base_wizard.py +0 -209
  161. coach_wizards/cicd_wizard.py +0 -91
  162. coach_wizards/code_reviewer_README.md +0 -60
  163. coach_wizards/code_reviewer_wizard.py +0 -180
  164. coach_wizards/compliance_wizard.py +0 -91
  165. coach_wizards/database_wizard.py +0 -91
  166. coach_wizards/debugging_wizard.py +0 -91
  167. coach_wizards/documentation_wizard.py +0 -91
  168. coach_wizards/generate_wizards.py +0 -347
  169. coach_wizards/localization_wizard.py +0 -173
  170. coach_wizards/migration_wizard.py +0 -91
  171. coach_wizards/monitoring_wizard.py +0 -91
  172. coach_wizards/observability_wizard.py +0 -91
  173. coach_wizards/performance_wizard.py +0 -91
  174. coach_wizards/prompt_engineering_wizard.py +0 -661
  175. coach_wizards/refactoring_wizard.py +0 -91
  176. coach_wizards/scaling_wizard.py +0 -90
  177. coach_wizards/security_wizard.py +0 -92
  178. coach_wizards/testing_wizard.py +0 -91
  179. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  180. empathy_llm_toolkit/wizards/__init__.py +0 -43
  181. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  182. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  183. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  184. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  185. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  186. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  187. empathy_os/wizard_factory_cli.py +0 -170
  188. empathy_software_plugin/wizards/__init__.py +0 -42
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  192. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  194. empathy_software_plugin/wizards/base_wizard.py +0 -288
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  196. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  197. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  203. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  206. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  209. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  216. empathy_software_plugin/wizards/security/__init__.py +0 -32
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  221. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  223. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  226. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  227. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  228. wizards/__init__.py +0 -82
  229. wizards/admission_assessment_wizard.py +0 -644
  230. wizards/care_plan.py +0 -321
  231. wizards/clinical_assessment.py +0 -769
  232. wizards/discharge_planning.py +0 -77
  233. wizards/discharge_summary_wizard.py +0 -468
  234. wizards/dosage_calculation.py +0 -497
  235. wizards/incident_report_wizard.py +0 -454
  236. wizards/medication_reconciliation.py +0 -85
  237. wizards/nursing_assessment.py +0 -171
  238. wizards/patient_education.py +0 -654
  239. wizards/quality_improvement.py +0 -705
  240. wizards/sbar_report.py +0 -324
  241. wizards/sbar_wizard.py +0 -608
  242. wizards/shift_handoff_wizard.py +0 -535
  243. wizards/soap_note_wizard.py +0 -679
  244. wizards/treatment_plan.py +0 -15
  245. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/WHEEL +0 -0
  246. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
  247. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,10 @@
1
- """Memory Graph - Cross-Wizard Knowledge Base
1
+ """Memory Graph - Cross-Workflow Knowledge Base
2
2
 
3
- A knowledge graph that connects findings across all wizards,
3
+ A knowledge graph that connects findings across all workflows,
4
4
  enabling intelligent correlation and learning.
5
5
 
6
6
  Features:
7
- - Add findings from any wizard as nodes
7
+ - Add findings from any workflow as nodes
8
8
  - Connect related findings with typed edges
9
9
  - Query for similar past findings
10
10
  - Traverse relationships to find root causes
@@ -29,17 +29,17 @@ from .nodes import Node, NodeType
29
29
 
30
30
 
31
31
  class MemoryGraph:
32
- """Knowledge graph for cross-wizard intelligence.
32
+ """Knowledge graph for cross-workflow intelligence.
33
33
 
34
34
  Stores nodes (findings) and edges (relationships) discovered
35
- by wizards, enabling pattern correlation across sessions.
35
+ by workflows, enabling pattern correlation across sessions.
36
36
 
37
37
  Usage:
38
38
  graph = MemoryGraph()
39
39
 
40
40
  # Add a bug finding
41
41
  bug_id = graph.add_finding(
42
- wizard="bug-predict",
42
+ workflow="bug-predict",
43
43
  finding={
44
44
  "type": "bug",
45
45
  "name": "Null reference in auth.py",
@@ -52,7 +52,7 @@ class MemoryGraph:
52
52
 
53
53
  # Connect to a fix
54
54
  fix_id = graph.add_finding(
55
- wizard="bug-predict",
55
+ workflow="bug-predict",
56
56
  finding={
57
57
  "type": "fix",
58
58
  "name": "Add null check",
@@ -80,7 +80,7 @@ class MemoryGraph:
80
80
  self._edges_by_source: dict[str, list[Edge]] = defaultdict(list)
81
81
  self._edges_by_target: dict[str, list[Edge]] = defaultdict(list)
82
82
  self._nodes_by_type: dict[NodeType, list[str]] = defaultdict(list)
83
- self._nodes_by_wizard: dict[str, list[str]] = defaultdict(list)
83
+ self._nodes_by_workflow: dict[str, list[str]] = defaultdict(list)
84
84
  self._nodes_by_file: dict[str, list[str]] = defaultdict(list)
85
85
 
86
86
  self._load()
@@ -133,8 +133,8 @@ class MemoryGraph:
133
133
  def _index_node(self, node: Node) -> None:
134
134
  """Add node to indexes."""
135
135
  self._nodes_by_type[node.type].append(node.id)
136
- if node.source_wizard:
137
- self._nodes_by_wizard[node.source_wizard].append(node.id)
136
+ if node.source_workflow:
137
+ self._nodes_by_workflow[node.source_workflow].append(node.id)
138
138
  if node.source_file:
139
139
  self._nodes_by_file[node.source_file].append(node.id)
140
140
 
@@ -151,11 +151,11 @@ class MemoryGraph:
151
151
  timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
152
152
  return f"{finding.get('type', 'node')}_{timestamp}_{hash_val}"
153
153
 
154
- def add_finding(self, wizard: str, finding: dict[str, Any]) -> str:
155
- """Add a finding from any wizard, return node ID.
154
+ def add_finding(self, workflow: str, finding: dict[str, Any]) -> str:
155
+ """Add a finding from any workflow, return node ID.
156
156
 
157
157
  Args:
158
- wizard: Name of the wizard adding this finding
158
+ workflow: Name of the workflow adding this finding
159
159
  finding: Dict with at least 'type' and 'name' keys
160
160
 
161
161
  Returns:
@@ -163,7 +163,7 @@ class MemoryGraph:
163
163
 
164
164
  Example:
165
165
  node_id = graph.add_finding(
166
- wizard="security-audit",
166
+ workflow="security-audit",
167
167
  finding={
168
168
  "type": "vulnerability",
169
169
  "name": "SQL Injection in query builder",
@@ -189,7 +189,7 @@ class MemoryGraph:
189
189
  type=node_type,
190
190
  name=finding.get("name", "Unnamed finding"),
191
191
  description=finding.get("description", ""),
192
- source_wizard=wizard,
192
+ source_workflow=workflow,
193
193
  source_file=finding.get("file", finding.get("source_file", "")),
194
194
  source_line=finding.get("line", finding.get("source_line")),
195
195
  severity=finding.get("severity", ""),
@@ -210,7 +210,7 @@ class MemoryGraph:
210
210
  target_id: str,
211
211
  edge_type: EdgeType,
212
212
  description: str = "",
213
- wizard: str = "",
213
+ workflow: str = "",
214
214
  weight: float = 1.0,
215
215
  bidirectional: bool = False,
216
216
  ) -> str:
@@ -221,7 +221,7 @@ class MemoryGraph:
221
221
  target_id: Target node ID
222
222
  edge_type: Type of relationship
223
223
  description: Optional description of the relationship
224
- wizard: Wizard that created this edge
224
+ workflow: Workflow that created this edge
225
225
  weight: Strength of relationship (0.0 - 1.0)
226
226
  bidirectional: If True, also create reverse edge
227
227
 
@@ -239,7 +239,7 @@ class MemoryGraph:
239
239
  target_id=target_id,
240
240
  type=edge_type,
241
241
  description=description,
242
- source_wizard=wizard,
242
+ source_workflow=workflow,
243
243
  weight=weight,
244
244
  )
245
245
 
@@ -254,7 +254,7 @@ class MemoryGraph:
254
254
  target_id=source_id,
255
255
  type=reverse_type,
256
256
  description=description,
257
- source_wizard=wizard,
257
+ source_workflow=workflow,
258
258
  weight=weight,
259
259
  )
260
260
  self.edges.append(reverse_edge)
@@ -404,9 +404,9 @@ class MemoryGraph:
404
404
  node_ids = self._nodes_by_type.get(node_type, [])
405
405
  return [self.nodes[nid] for nid in node_ids if nid in self.nodes]
406
406
 
407
- def find_by_wizard(self, wizard: str) -> list[Node]:
408
- """Find all nodes created by a specific wizard."""
409
- node_ids = self._nodes_by_wizard.get(wizard, [])
407
+ def find_by_workflow(self, workflow: str) -> list[Node]:
408
+ """Find all nodes created by a specific workflow."""
409
+ node_ids = self._nodes_by_workflow.get(workflow, [])
410
410
  return [self.nodes[nid] for nid in node_ids if nid in self.nodes]
411
411
 
412
412
  def find_by_file(self, file_path: str) -> list[Node]:
@@ -463,13 +463,13 @@ class MemoryGraph:
463
463
  def get_statistics(self) -> dict[str, Any]:
464
464
  """Get graph statistics."""
465
465
  type_counts: dict[str, int] = defaultdict(int)
466
- wizard_counts: dict[str, int] = defaultdict(int)
466
+ workflow_counts: dict[str, int] = defaultdict(int)
467
467
  severity_counts: dict[str, int] = defaultdict(int)
468
468
 
469
469
  for node in self.nodes.values():
470
470
  type_counts[node.type.value] += 1
471
- if node.source_wizard:
472
- wizard_counts[node.source_wizard] += 1
471
+ if node.source_workflow:
472
+ workflow_counts[node.source_workflow] += 1
473
473
  if node.severity:
474
474
  severity_counts[node.severity] += 1
475
475
 
@@ -481,7 +481,7 @@ class MemoryGraph:
481
481
  "total_nodes": len(self.nodes),
482
482
  "total_edges": len(self.edges),
483
483
  "nodes_by_type": dict(type_counts),
484
- "nodes_by_wizard": dict(wizard_counts),
484
+ "nodes_by_workflow": dict(workflow_counts),
485
485
  "nodes_by_severity": dict(severity_counts),
486
486
  "edges_by_type": dict(edge_type_counts),
487
487
  "unique_files": len(self._nodes_by_file),
@@ -537,9 +537,9 @@ class MemoryGraph:
537
537
  self._nodes_by_type[node.type] = [
538
538
  nid for nid in self._nodes_by_type[node.type] if nid != node_id
539
539
  ]
540
- if node.source_wizard in self._nodes_by_wizard:
541
- self._nodes_by_wizard[node.source_wizard] = [
542
- nid for nid in self._nodes_by_wizard[node.source_wizard] if nid != node_id
540
+ if node.source_workflow in self._nodes_by_workflow:
541
+ self._nodes_by_workflow[node.source_workflow] = [
542
+ nid for nid in self._nodes_by_workflow[node.source_workflow] if nid != node_id
543
543
  ]
544
544
  if node.source_file in self._nodes_by_file:
545
545
  self._nodes_by_file[node.source_file] = [
@@ -565,6 +565,6 @@ class MemoryGraph:
565
565
  self._edges_by_source = defaultdict(list)
566
566
  self._edges_by_target = defaultdict(list)
567
567
  self._nodes_by_type = defaultdict(list)
568
- self._nodes_by_wizard = defaultdict(list)
568
+ self._nodes_by_workflow = defaultdict(list)
569
569
  self._nodes_by_file = defaultdict(list)
570
570
  self._save()
@@ -1,7 +1,7 @@
1
1
  """Memory Graph Node Types
2
2
 
3
- Defines node types for the cross-wizard knowledge graph.
4
- Each node represents an entity discovered by a wizard.
3
+ Defines node types for the cross-workflow knowledge graph.
4
+ Each node represents an entity discovered by a workflow.
5
5
 
6
6
  Copyright 2025 Smart AI Memory, LLC
7
7
  Licensed under Fair Source 0.9
@@ -52,7 +52,7 @@ class NodeType(Enum):
52
52
  class Node:
53
53
  """A node in the memory graph.
54
54
 
55
- Represents any entity that wizards discover or create.
55
+ Represents any entity that workflows discover or create.
56
56
  """
57
57
 
58
58
  id: str
@@ -61,7 +61,7 @@ class Node:
61
61
  description: str = ""
62
62
 
63
63
  # Where this node came from
64
- source_wizard: str = ""
64
+ source_workflow: str = ""
65
65
  source_file: str = ""
66
66
  source_line: int | None = None
67
67
 
@@ -87,7 +87,7 @@ class Node:
87
87
  "type": self.type.value,
88
88
  "name": self.name,
89
89
  "description": self.description,
90
- "source_wizard": self.source_wizard,
90
+ "source_workflow": self.source_workflow,
91
91
  "source_file": self.source_file,
92
92
  "source_line": self.source_line,
93
93
  "severity": self.severity,
@@ -107,7 +107,7 @@ class Node:
107
107
  type=NodeType(data["type"]),
108
108
  name=data["name"],
109
109
  description=data.get("description", ""),
110
- source_wizard=data.get("source_wizard", ""),
110
+ source_workflow=data.get("source_workflow", data.get("source_wizard", "")),
111
111
  source_file=data.get("source_file", ""),
112
112
  source_line=data.get("source_line"),
113
113
  severity=data.get("severity", ""),
@@ -560,11 +560,15 @@ class RedisShortTermMemory:
560
560
 
561
561
  if self._config.pii_scrub_enabled:
562
562
  self._pii_scrubber = PIIScrubber(enable_name_detection=False)
563
- logger.debug("pii_scrubber_enabled", message="PII scrubbing active for short-term memory")
563
+ logger.debug(
564
+ "pii_scrubber_enabled", message="PII scrubbing active for short-term memory"
565
+ )
564
566
 
565
567
  if self._config.secrets_detection_enabled:
566
568
  self._secrets_detector = SecretsDetector()
567
- logger.debug("secrets_detector_enabled", message="Secrets detection active for short-term memory")
569
+ logger.debug(
570
+ "secrets_detector_enabled", message="Secrets detection active for short-term memory"
571
+ )
568
572
 
569
573
  if self.use_mock:
570
574
  self._client = None
@@ -735,7 +739,8 @@ class RedisShortTermMemory:
735
739
  detections = self._secrets_detector.detect(data_str)
736
740
  # Block critical and high severity secrets
737
741
  critical_secrets = [
738
- d for d in detections
742
+ d
743
+ for d in detections
739
744
  if d.severity in (SecretSeverity.CRITICAL, SecretSeverity.HIGH)
740
745
  ]
741
746
  if critical_secrets:
@@ -1378,17 +1383,18 @@ class RedisShortTermMemory:
1378
1383
 
1379
1384
  """
1380
1385
  if self.use_mock:
1386
+ # Use generator expressions for memory-efficient counting
1381
1387
  return {
1382
1388
  "mode": "mock",
1383
1389
  "total_keys": len(self._mock_storage),
1384
- "working_keys": len(
1385
- [k for k in self._mock_storage if k.startswith(self.PREFIX_WORKING)],
1390
+ "working_keys": sum(
1391
+ 1 for k in self._mock_storage if k.startswith(self.PREFIX_WORKING)
1386
1392
  ),
1387
- "staged_keys": len(
1388
- [k for k in self._mock_storage if k.startswith(self.PREFIX_STAGED)],
1393
+ "staged_keys": sum(
1394
+ 1 for k in self._mock_storage if k.startswith(self.PREFIX_STAGED)
1389
1395
  ),
1390
- "conflict_keys": len(
1391
- [k for k in self._mock_storage if k.startswith(self.PREFIX_CONFLICT)],
1396
+ "conflict_keys": sum(
1397
+ 1 for k in self._mock_storage if k.startswith(self.PREFIX_CONFLICT)
1392
1398
  ),
1393
1399
  }
1394
1400