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
@@ -0,0 +1,242 @@
1
+ """CLI commands for progressive workflow management.
2
+
3
+ Provides commands for:
4
+ - Listing saved results
5
+ - Viewing detailed reports
6
+ - Generating analytics
7
+ - Cleaning up old results
8
+ """
9
+
10
+ import argparse
11
+ import sys
12
+
13
+ from empathy_os.workflows.progressive.reports import (
14
+ cleanup_old_results,
15
+ format_cost_analytics_report,
16
+ generate_cost_analytics,
17
+ list_saved_results,
18
+ load_result_from_disk,
19
+ )
20
+
21
+
22
+ def cmd_list_results(args: argparse.Namespace) -> int:
23
+ """List all saved progressive workflow results.
24
+
25
+ Args:
26
+ args: Parsed command line arguments
27
+
28
+ Returns:
29
+ Exit code (0 for success)
30
+ """
31
+ storage_path = args.storage_path or ".empathy/progressive_runs"
32
+ results = list_saved_results(storage_path)
33
+
34
+ if not results:
35
+ print(f"No results found in {storage_path}")
36
+ return 0
37
+
38
+ print(f"\n📋 Found {len(results)} progressive workflow results:\n")
39
+ print(f"{'Task ID':<40} {'Workflow':<15} {'Cost':<10} {'Savings':<12} {'Success'}")
40
+ print("─" * 90)
41
+
42
+ for result in results:
43
+ task_id = result.get("task_id", "unknown")
44
+ workflow = result.get("workflow", "unknown")[:14]
45
+ cost = result.get("total_cost", 0.0)
46
+ savings = result.get("cost_savings_percent", 0.0)
47
+ success = "✅" if result.get("success", False) else "❌"
48
+
49
+ print(f"{task_id:<40} {workflow:<15} ${cost:<9.2f} {savings:>6.1f}% {success}")
50
+
51
+ print()
52
+ return 0
53
+
54
+
55
+ def cmd_show_report(args: argparse.Namespace) -> int:
56
+ """Show detailed report for a specific task.
57
+
58
+ Args:
59
+ args: Parsed command line arguments
60
+
61
+ Returns:
62
+ Exit code (0 for success, 1 for error)
63
+ """
64
+ task_id = args.task_id
65
+ storage_path = args.storage_path or ".empathy/progressive_runs"
66
+
67
+ try:
68
+ result_data = load_result_from_disk(task_id, storage_path)
69
+
70
+ if args.json:
71
+ import json
72
+ print(json.dumps(result_data, indent=2))
73
+ else:
74
+ # Show human-readable report
75
+ report = result_data.get("report", "")
76
+ if report:
77
+ print(report)
78
+ else:
79
+ print("No report found for this task")
80
+
81
+ return 0
82
+
83
+ except FileNotFoundError as e:
84
+ print(f"Error: {e}", file=sys.stderr)
85
+ return 1
86
+
87
+
88
+ def cmd_analytics(args: argparse.Namespace) -> int:
89
+ """Show cost optimization analytics.
90
+
91
+ Args:
92
+ args: Parsed command line arguments
93
+
94
+ Returns:
95
+ Exit code (0 for success)
96
+ """
97
+ storage_path = args.storage_path or ".empathy/progressive_runs"
98
+ analytics = generate_cost_analytics(storage_path)
99
+
100
+ if analytics["total_runs"] == 0:
101
+ print(f"No results found in {storage_path}")
102
+ return 0
103
+
104
+ if args.json:
105
+ import json
106
+ print(json.dumps(analytics, indent=2))
107
+ else:
108
+ report = format_cost_analytics_report(analytics)
109
+ print(report)
110
+
111
+ return 0
112
+
113
+
114
+ def cmd_cleanup(args: argparse.Namespace) -> int:
115
+ """Clean up old progressive workflow results.
116
+
117
+ Args:
118
+ args: Parsed command line arguments
119
+
120
+ Returns:
121
+ Exit code (0 for success)
122
+ """
123
+ storage_path = args.storage_path or ".empathy/progressive_runs"
124
+ retention_days = args.retention_days
125
+ dry_run = args.dry_run
126
+
127
+ deleted, retained = cleanup_old_results(
128
+ storage_path=storage_path,
129
+ retention_days=retention_days,
130
+ dry_run=dry_run
131
+ )
132
+
133
+ if dry_run:
134
+ print("\n🔍 Dry run mode - no files deleted\n")
135
+ print(f"Would delete: {deleted} results older than {retention_days} days")
136
+ print(f"Would retain: {retained} recent results")
137
+ else:
138
+ print("\n🗑️ Cleanup complete\n")
139
+ print(f"Deleted: {deleted} results older than {retention_days} days")
140
+ print(f"Retained: {retained} recent results")
141
+
142
+ return 0
143
+
144
+
145
+ def create_parser() -> argparse.ArgumentParser:
146
+ """Create argument parser for progressive CLI.
147
+
148
+ Returns:
149
+ Configured argument parser
150
+ """
151
+ parser = argparse.ArgumentParser(
152
+ prog="empathy progressive",
153
+ description="Manage progressive tier escalation workflows"
154
+ )
155
+
156
+ parser.add_argument(
157
+ "--storage-path",
158
+ type=str,
159
+ default=None,
160
+ help="Custom storage path (default: .empathy/progressive_runs)"
161
+ )
162
+
163
+ subparsers = parser.add_subparsers(dest="command", help="Available commands")
164
+
165
+ # List command
166
+ list_parser = subparsers.add_parser(
167
+ "list",
168
+ help="List all saved progressive workflow results"
169
+ )
170
+ list_parser.set_defaults(func=cmd_list_results)
171
+
172
+ # Show command
173
+ show_parser = subparsers.add_parser(
174
+ "show",
175
+ help="Show detailed report for a specific task"
176
+ )
177
+ show_parser.add_argument(
178
+ "task_id",
179
+ type=str,
180
+ help="Task ID to display"
181
+ )
182
+ show_parser.add_argument(
183
+ "--json",
184
+ action="store_true",
185
+ help="Output in JSON format"
186
+ )
187
+ show_parser.set_defaults(func=cmd_show_report)
188
+
189
+ # Analytics command
190
+ analytics_parser = subparsers.add_parser(
191
+ "analytics",
192
+ help="Show cost optimization analytics"
193
+ )
194
+ analytics_parser.add_argument(
195
+ "--json",
196
+ action="store_true",
197
+ help="Output in JSON format"
198
+ )
199
+ analytics_parser.set_defaults(func=cmd_analytics)
200
+
201
+ # Cleanup command
202
+ cleanup_parser = subparsers.add_parser(
203
+ "cleanup",
204
+ help="Clean up old progressive workflow results"
205
+ )
206
+ cleanup_parser.add_argument(
207
+ "--retention-days",
208
+ type=int,
209
+ default=30,
210
+ help="Number of days to retain results (default: 30)"
211
+ )
212
+ cleanup_parser.add_argument(
213
+ "--dry-run",
214
+ action="store_true",
215
+ help="Show what would be deleted without actually deleting"
216
+ )
217
+ cleanup_parser.set_defaults(func=cmd_cleanup)
218
+
219
+ return parser
220
+
221
+
222
+ def main(argv: list[str] | None = None) -> int:
223
+ """Main entry point for progressive CLI.
224
+
225
+ Args:
226
+ argv: Command line arguments (defaults to sys.argv[1:])
227
+
228
+ Returns:
229
+ Exit code
230
+ """
231
+ parser = create_parser()
232
+ args = parser.parse_args(argv)
233
+
234
+ if not hasattr(args, "func"):
235
+ parser.print_help()
236
+ return 1
237
+
238
+ return args.func(args)
239
+
240
+
241
+ if __name__ == "__main__":
242
+ sys.exit(main())
@@ -69,6 +69,7 @@ def cmd_show_report(args: argparse.Namespace) -> int:
69
69
 
70
70
  if args.json:
71
71
  import json
72
+
72
73
  print(json.dumps(result_data, indent=2))
73
74
  else:
74
75
  # Show human-readable report
@@ -103,6 +104,7 @@ def cmd_analytics(args: argparse.Namespace) -> int:
103
104
 
104
105
  if args.json:
105
106
  import json
107
+
106
108
  print(json.dumps(analytics, indent=2))
107
109
  else:
108
110
  report = format_cost_analytics_report(analytics)
@@ -125,9 +127,7 @@ def cmd_cleanup(args: argparse.Namespace) -> int:
125
127
  dry_run = args.dry_run
126
128
 
127
129
  deleted, retained = cleanup_old_results(
128
- storage_path=storage_path,
129
- retention_days=retention_days,
130
- dry_run=dry_run
130
+ storage_path=storage_path, retention_days=retention_days, dry_run=dry_run
131
131
  )
132
132
 
133
133
  if dry_run:
@@ -149,70 +149,47 @@ def create_parser() -> argparse.ArgumentParser:
149
149
  Configured argument parser
150
150
  """
151
151
  parser = argparse.ArgumentParser(
152
- prog="empathy progressive",
153
- description="Manage progressive tier escalation workflows"
152
+ prog="empathy progressive", description="Manage progressive tier escalation workflows"
154
153
  )
155
154
 
156
155
  parser.add_argument(
157
156
  "--storage-path",
158
157
  type=str,
159
158
  default=None,
160
- help="Custom storage path (default: .empathy/progressive_runs)"
159
+ help="Custom storage path (default: .empathy/progressive_runs)",
161
160
  )
162
161
 
163
162
  subparsers = parser.add_subparsers(dest="command", help="Available commands")
164
163
 
165
164
  # List command
166
- list_parser = subparsers.add_parser(
167
- "list",
168
- help="List all saved progressive workflow results"
169
- )
165
+ list_parser = subparsers.add_parser("list", help="List all saved progressive workflow results")
170
166
  list_parser.set_defaults(func=cmd_list_results)
171
167
 
172
168
  # Show command
173
- show_parser = subparsers.add_parser(
174
- "show",
175
- help="Show detailed report for a specific task"
176
- )
177
- show_parser.add_argument(
178
- "task_id",
179
- type=str,
180
- help="Task ID to display"
181
- )
182
- show_parser.add_argument(
183
- "--json",
184
- action="store_true",
185
- help="Output in JSON format"
186
- )
169
+ show_parser = subparsers.add_parser("show", help="Show detailed report for a specific task")
170
+ show_parser.add_argument("task_id", type=str, help="Task ID to display")
171
+ show_parser.add_argument("--json", action="store_true", help="Output in JSON format")
187
172
  show_parser.set_defaults(func=cmd_show_report)
188
173
 
189
174
  # Analytics command
190
- analytics_parser = subparsers.add_parser(
191
- "analytics",
192
- help="Show cost optimization analytics"
193
- )
194
- analytics_parser.add_argument(
195
- "--json",
196
- action="store_true",
197
- help="Output in JSON format"
198
- )
175
+ analytics_parser = subparsers.add_parser("analytics", help="Show cost optimization analytics")
176
+ analytics_parser.add_argument("--json", action="store_true", help="Output in JSON format")
199
177
  analytics_parser.set_defaults(func=cmd_analytics)
200
178
 
201
179
  # Cleanup command
202
180
  cleanup_parser = subparsers.add_parser(
203
- "cleanup",
204
- help="Clean up old progressive workflow results"
181
+ "cleanup", help="Clean up old progressive workflow results"
205
182
  )
206
183
  cleanup_parser.add_argument(
207
184
  "--retention-days",
208
185
  type=int,
209
186
  default=30,
210
- help="Number of days to retain results (default: 30)"
187
+ help="Number of days to retain results (default: 30)",
211
188
  )
212
189
  cleanup_parser.add_argument(
213
190
  "--dry-run",
214
191
  action="store_true",
215
- help="Show what would be deleted without actually deleting"
192
+ help="Show what would be deleted without actually deleting",
216
193
  )
217
194
  cleanup_parser.set_defaults(func=cmd_cleanup)
218
195