empathy-framework 4.6.6__py3-none-any.whl → 4.7.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.
Files changed (273) hide show
  1. empathy_framework-4.7.1.dist-info/METADATA +690 -0
  2. empathy_framework-4.7.1.dist-info/RECORD +379 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -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 2.py +173 -0
  130. empathy_os/vscode_bridge.py +173 -0
  131. empathy_os/workflows/__init__.py +212 -120
  132. empathy_os/workflows/batch_processing.py +8 -24
  133. empathy_os/workflows/bug_predict.py +1 -1
  134. empathy_os/workflows/code_review.py +20 -5
  135. empathy_os/workflows/code_review_pipeline.py +13 -8
  136. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  137. empathy_os/workflows/manage_documentation.py +1 -0
  138. empathy_os/workflows/orchestrated_health_check.py +6 -11
  139. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  140. empathy_os/workflows/pr_review.py +18 -10
  141. empathy_os/workflows/progressive/README 2.md +454 -0
  142. empathy_os/workflows/progressive/__init__ 2.py +92 -0
  143. empathy_os/workflows/progressive/__init__.py +2 -12
  144. empathy_os/workflows/progressive/cli 2.py +242 -0
  145. empathy_os/workflows/progressive/cli.py +14 -37
  146. empathy_os/workflows/progressive/core 2.py +488 -0
  147. empathy_os/workflows/progressive/core.py +12 -12
  148. empathy_os/workflows/progressive/orchestrator 2.py +701 -0
  149. empathy_os/workflows/progressive/orchestrator.py +166 -144
  150. empathy_os/workflows/progressive/reports 2.py +528 -0
  151. empathy_os/workflows/progressive/reports.py +22 -31
  152. empathy_os/workflows/progressive/telemetry 2.py +280 -0
  153. empathy_os/workflows/progressive/telemetry.py +8 -14
  154. empathy_os/workflows/progressive/test_gen 2.py +514 -0
  155. empathy_os/workflows/progressive/test_gen.py +29 -48
  156. empathy_os/workflows/progressive/workflow 2.py +628 -0
  157. empathy_os/workflows/progressive/workflow.py +31 -70
  158. empathy_os/workflows/release_prep.py +21 -6
  159. empathy_os/workflows/release_prep_crew.py +1 -0
  160. empathy_os/workflows/secure_release.py +13 -6
  161. empathy_os/workflows/security_audit.py +8 -3
  162. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  163. empathy_os/workflows/test_maintenance_crew.py +1 -0
  164. empathy_os/workflows/test_runner.py +16 -12
  165. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  166. empathy_software_plugin/cli.py +0 -122
  167. patterns/README.md +119 -0
  168. patterns/__init__.py +95 -0
  169. patterns/behavior.py +298 -0
  170. patterns/code_review_memory.json +441 -0
  171. patterns/core.py +97 -0
  172. patterns/debugging.json +3763 -0
  173. patterns/empathy.py +268 -0
  174. patterns/health_check_memory.json +505 -0
  175. patterns/input.py +161 -0
  176. patterns/memory_graph.json +8 -0
  177. patterns/refactoring_memory.json +1113 -0
  178. patterns/registry.py +663 -0
  179. patterns/security_memory.json +8 -0
  180. patterns/structural.py +415 -0
  181. patterns/validation.py +194 -0
  182. coach_wizards/__init__.py +0 -45
  183. coach_wizards/accessibility_wizard.py +0 -91
  184. coach_wizards/api_wizard.py +0 -91
  185. coach_wizards/base_wizard.py +0 -209
  186. coach_wizards/cicd_wizard.py +0 -91
  187. coach_wizards/code_reviewer_README.md +0 -60
  188. coach_wizards/code_reviewer_wizard.py +0 -180
  189. coach_wizards/compliance_wizard.py +0 -91
  190. coach_wizards/database_wizard.py +0 -91
  191. coach_wizards/debugging_wizard.py +0 -91
  192. coach_wizards/documentation_wizard.py +0 -91
  193. coach_wizards/generate_wizards.py +0 -347
  194. coach_wizards/localization_wizard.py +0 -173
  195. coach_wizards/migration_wizard.py +0 -91
  196. coach_wizards/monitoring_wizard.py +0 -91
  197. coach_wizards/observability_wizard.py +0 -91
  198. coach_wizards/performance_wizard.py +0 -91
  199. coach_wizards/prompt_engineering_wizard.py +0 -661
  200. coach_wizards/refactoring_wizard.py +0 -91
  201. coach_wizards/scaling_wizard.py +0 -90
  202. coach_wizards/security_wizard.py +0 -92
  203. coach_wizards/testing_wizard.py +0 -91
  204. empathy_framework-4.6.6.dist-info/METADATA +0 -1597
  205. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  206. empathy_llm_toolkit/wizards/__init__.py +0 -43
  207. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  208. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  209. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  210. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  211. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  212. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  213. empathy_os/wizard_factory_cli.py +0 -170
  214. empathy_software_plugin/wizards/__init__.py +0 -42
  215. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  216. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  217. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  218. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  219. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  220. empathy_software_plugin/wizards/base_wizard.py +0 -288
  221. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  222. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  223. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  224. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  225. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  226. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  227. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  228. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  229. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  230. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  231. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  232. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  233. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  234. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  235. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  236. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  237. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  238. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  239. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  240. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  241. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  242. empathy_software_plugin/wizards/security/__init__.py +0 -32
  243. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  244. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  245. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  246. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  247. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  248. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  249. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  250. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  251. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  252. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  253. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  254. wizards/__init__.py +0 -82
  255. wizards/admission_assessment_wizard.py +0 -644
  256. wizards/care_plan.py +0 -321
  257. wizards/clinical_assessment.py +0 -769
  258. wizards/discharge_planning.py +0 -77
  259. wizards/discharge_summary_wizard.py +0 -468
  260. wizards/dosage_calculation.py +0 -497
  261. wizards/incident_report_wizard.py +0 -454
  262. wizards/medication_reconciliation.py +0 -85
  263. wizards/nursing_assessment.py +0 -171
  264. wizards/patient_education.py +0 -654
  265. wizards/quality_improvement.py +0 -705
  266. wizards/sbar_report.py +0 -324
  267. wizards/sbar_wizard.py +0 -608
  268. wizards/shift_handoff_wizard.py +0 -535
  269. wizards/soap_note_wizard.py +0 -679
  270. wizards/treatment_plan.py +0 -15
  271. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/WHEEL +0 -0
  272. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.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