attune-ai 2.0.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 (457) hide show
  1. attune/__init__.py +358 -0
  2. attune/adaptive/__init__.py +13 -0
  3. attune/adaptive/task_complexity.py +127 -0
  4. attune/agent_monitoring.py +414 -0
  5. attune/cache/__init__.py +117 -0
  6. attune/cache/base.py +166 -0
  7. attune/cache/dependency_manager.py +256 -0
  8. attune/cache/hash_only.py +251 -0
  9. attune/cache/hybrid.py +457 -0
  10. attune/cache/storage.py +285 -0
  11. attune/cache_monitor.py +356 -0
  12. attune/cache_stats.py +298 -0
  13. attune/cli/__init__.py +152 -0
  14. attune/cli/__main__.py +12 -0
  15. attune/cli/commands/__init__.py +1 -0
  16. attune/cli/commands/batch.py +264 -0
  17. attune/cli/commands/cache.py +248 -0
  18. attune/cli/commands/help.py +331 -0
  19. attune/cli/commands/info.py +140 -0
  20. attune/cli/commands/inspect.py +436 -0
  21. attune/cli/commands/inspection.py +57 -0
  22. attune/cli/commands/memory.py +48 -0
  23. attune/cli/commands/metrics.py +92 -0
  24. attune/cli/commands/orchestrate.py +184 -0
  25. attune/cli/commands/patterns.py +207 -0
  26. attune/cli/commands/profiling.py +202 -0
  27. attune/cli/commands/provider.py +98 -0
  28. attune/cli/commands/routing.py +285 -0
  29. attune/cli/commands/setup.py +96 -0
  30. attune/cli/commands/status.py +235 -0
  31. attune/cli/commands/sync.py +166 -0
  32. attune/cli/commands/tier.py +121 -0
  33. attune/cli/commands/utilities.py +114 -0
  34. attune/cli/commands/workflow.py +579 -0
  35. attune/cli/core.py +32 -0
  36. attune/cli/parsers/__init__.py +68 -0
  37. attune/cli/parsers/batch.py +118 -0
  38. attune/cli/parsers/cache.py +65 -0
  39. attune/cli/parsers/help.py +41 -0
  40. attune/cli/parsers/info.py +26 -0
  41. attune/cli/parsers/inspect.py +66 -0
  42. attune/cli/parsers/metrics.py +42 -0
  43. attune/cli/parsers/orchestrate.py +61 -0
  44. attune/cli/parsers/patterns.py +54 -0
  45. attune/cli/parsers/provider.py +40 -0
  46. attune/cli/parsers/routing.py +110 -0
  47. attune/cli/parsers/setup.py +42 -0
  48. attune/cli/parsers/status.py +47 -0
  49. attune/cli/parsers/sync.py +31 -0
  50. attune/cli/parsers/tier.py +33 -0
  51. attune/cli/parsers/workflow.py +77 -0
  52. attune/cli/utils/__init__.py +1 -0
  53. attune/cli/utils/data.py +242 -0
  54. attune/cli/utils/helpers.py +68 -0
  55. attune/cli_legacy.py +3957 -0
  56. attune/cli_minimal.py +1159 -0
  57. attune/cli_router.py +437 -0
  58. attune/cli_unified.py +814 -0
  59. attune/config/__init__.py +66 -0
  60. attune/config/xml_config.py +286 -0
  61. attune/config.py +545 -0
  62. attune/coordination.py +870 -0
  63. attune/core.py +1511 -0
  64. attune/core_modules/__init__.py +15 -0
  65. attune/cost_tracker.py +626 -0
  66. attune/dashboard/__init__.py +41 -0
  67. attune/dashboard/app.py +512 -0
  68. attune/dashboard/simple_server.py +435 -0
  69. attune/dashboard/standalone_server.py +547 -0
  70. attune/discovery.py +306 -0
  71. attune/emergence.py +306 -0
  72. attune/exceptions.py +123 -0
  73. attune/feedback_loops.py +373 -0
  74. attune/hot_reload/README.md +473 -0
  75. attune/hot_reload/__init__.py +62 -0
  76. attune/hot_reload/config.py +83 -0
  77. attune/hot_reload/integration.py +229 -0
  78. attune/hot_reload/reloader.py +298 -0
  79. attune/hot_reload/watcher.py +183 -0
  80. attune/hot_reload/websocket.py +177 -0
  81. attune/levels.py +577 -0
  82. attune/leverage_points.py +441 -0
  83. attune/logging_config.py +261 -0
  84. attune/mcp/__init__.py +10 -0
  85. attune/mcp/server.py +506 -0
  86. attune/memory/__init__.py +237 -0
  87. attune/memory/claude_memory.py +469 -0
  88. attune/memory/config.py +224 -0
  89. attune/memory/control_panel.py +1290 -0
  90. attune/memory/control_panel_support.py +145 -0
  91. attune/memory/cross_session.py +845 -0
  92. attune/memory/edges.py +179 -0
  93. attune/memory/encryption.py +159 -0
  94. attune/memory/file_session.py +770 -0
  95. attune/memory/graph.py +570 -0
  96. attune/memory/long_term.py +913 -0
  97. attune/memory/long_term_types.py +99 -0
  98. attune/memory/mixins/__init__.py +25 -0
  99. attune/memory/mixins/backend_init_mixin.py +249 -0
  100. attune/memory/mixins/capabilities_mixin.py +208 -0
  101. attune/memory/mixins/handoff_mixin.py +208 -0
  102. attune/memory/mixins/lifecycle_mixin.py +49 -0
  103. attune/memory/mixins/long_term_mixin.py +352 -0
  104. attune/memory/mixins/promotion_mixin.py +109 -0
  105. attune/memory/mixins/short_term_mixin.py +182 -0
  106. attune/memory/nodes.py +179 -0
  107. attune/memory/redis_bootstrap.py +540 -0
  108. attune/memory/security/__init__.py +31 -0
  109. attune/memory/security/audit_logger.py +932 -0
  110. attune/memory/security/pii_scrubber.py +640 -0
  111. attune/memory/security/secrets_detector.py +678 -0
  112. attune/memory/short_term.py +2192 -0
  113. attune/memory/simple_storage.py +302 -0
  114. attune/memory/storage/__init__.py +15 -0
  115. attune/memory/storage_backend.py +167 -0
  116. attune/memory/summary_index.py +583 -0
  117. attune/memory/types.py +446 -0
  118. attune/memory/unified.py +182 -0
  119. attune/meta_workflows/__init__.py +74 -0
  120. attune/meta_workflows/agent_creator.py +248 -0
  121. attune/meta_workflows/builtin_templates.py +567 -0
  122. attune/meta_workflows/cli_commands/__init__.py +56 -0
  123. attune/meta_workflows/cli_commands/agent_commands.py +321 -0
  124. attune/meta_workflows/cli_commands/analytics_commands.py +442 -0
  125. attune/meta_workflows/cli_commands/config_commands.py +232 -0
  126. attune/meta_workflows/cli_commands/memory_commands.py +182 -0
  127. attune/meta_workflows/cli_commands/template_commands.py +354 -0
  128. attune/meta_workflows/cli_commands/workflow_commands.py +382 -0
  129. attune/meta_workflows/cli_meta_workflows.py +59 -0
  130. attune/meta_workflows/form_engine.py +292 -0
  131. attune/meta_workflows/intent_detector.py +409 -0
  132. attune/meta_workflows/models.py +569 -0
  133. attune/meta_workflows/pattern_learner.py +738 -0
  134. attune/meta_workflows/plan_generator.py +384 -0
  135. attune/meta_workflows/session_context.py +397 -0
  136. attune/meta_workflows/template_registry.py +229 -0
  137. attune/meta_workflows/workflow.py +984 -0
  138. attune/metrics/__init__.py +12 -0
  139. attune/metrics/collector.py +31 -0
  140. attune/metrics/prompt_metrics.py +194 -0
  141. attune/models/__init__.py +172 -0
  142. attune/models/__main__.py +13 -0
  143. attune/models/adaptive_routing.py +437 -0
  144. attune/models/auth_cli.py +444 -0
  145. attune/models/auth_strategy.py +450 -0
  146. attune/models/cli.py +655 -0
  147. attune/models/empathy_executor.py +354 -0
  148. attune/models/executor.py +257 -0
  149. attune/models/fallback.py +762 -0
  150. attune/models/provider_config.py +282 -0
  151. attune/models/registry.py +472 -0
  152. attune/models/tasks.py +359 -0
  153. attune/models/telemetry/__init__.py +71 -0
  154. attune/models/telemetry/analytics.py +594 -0
  155. attune/models/telemetry/backend.py +196 -0
  156. attune/models/telemetry/data_models.py +431 -0
  157. attune/models/telemetry/storage.py +489 -0
  158. attune/models/token_estimator.py +420 -0
  159. attune/models/validation.py +280 -0
  160. attune/monitoring/__init__.py +52 -0
  161. attune/monitoring/alerts.py +946 -0
  162. attune/monitoring/alerts_cli.py +448 -0
  163. attune/monitoring/multi_backend.py +271 -0
  164. attune/monitoring/otel_backend.py +362 -0
  165. attune/optimization/__init__.py +19 -0
  166. attune/optimization/context_optimizer.py +272 -0
  167. attune/orchestration/__init__.py +67 -0
  168. attune/orchestration/agent_templates.py +707 -0
  169. attune/orchestration/config_store.py +499 -0
  170. attune/orchestration/execution_strategies.py +2111 -0
  171. attune/orchestration/meta_orchestrator.py +1168 -0
  172. attune/orchestration/pattern_learner.py +696 -0
  173. attune/orchestration/real_tools.py +931 -0
  174. attune/pattern_cache.py +187 -0
  175. attune/pattern_library.py +542 -0
  176. attune/patterns/debugging/all_patterns.json +81 -0
  177. attune/patterns/debugging/workflow_20260107_1770825e.json +77 -0
  178. attune/patterns/refactoring_memory.json +89 -0
  179. attune/persistence.py +564 -0
  180. attune/platform_utils.py +265 -0
  181. attune/plugins/__init__.py +28 -0
  182. attune/plugins/base.py +361 -0
  183. attune/plugins/registry.py +268 -0
  184. attune/project_index/__init__.py +32 -0
  185. attune/project_index/cli.py +335 -0
  186. attune/project_index/index.py +667 -0
  187. attune/project_index/models.py +504 -0
  188. attune/project_index/reports.py +474 -0
  189. attune/project_index/scanner.py +777 -0
  190. attune/project_index/scanner_parallel.py +291 -0
  191. attune/prompts/__init__.py +61 -0
  192. attune/prompts/config.py +77 -0
  193. attune/prompts/context.py +177 -0
  194. attune/prompts/parser.py +285 -0
  195. attune/prompts/registry.py +313 -0
  196. attune/prompts/templates.py +208 -0
  197. attune/redis_config.py +302 -0
  198. attune/redis_memory.py +799 -0
  199. attune/resilience/__init__.py +56 -0
  200. attune/resilience/circuit_breaker.py +256 -0
  201. attune/resilience/fallback.py +179 -0
  202. attune/resilience/health.py +300 -0
  203. attune/resilience/retry.py +209 -0
  204. attune/resilience/timeout.py +135 -0
  205. attune/routing/__init__.py +43 -0
  206. attune/routing/chain_executor.py +433 -0
  207. attune/routing/classifier.py +217 -0
  208. attune/routing/smart_router.py +234 -0
  209. attune/routing/workflow_registry.py +343 -0
  210. attune/scaffolding/README.md +589 -0
  211. attune/scaffolding/__init__.py +35 -0
  212. attune/scaffolding/__main__.py +14 -0
  213. attune/scaffolding/cli.py +240 -0
  214. attune/scaffolding/templates/base_wizard.py.jinja2 +121 -0
  215. attune/scaffolding/templates/coach_wizard.py.jinja2 +321 -0
  216. attune/scaffolding/templates/domain_wizard.py.jinja2 +408 -0
  217. attune/scaffolding/templates/linear_flow_wizard.py.jinja2 +203 -0
  218. attune/socratic/__init__.py +256 -0
  219. attune/socratic/ab_testing.py +958 -0
  220. attune/socratic/blueprint.py +533 -0
  221. attune/socratic/cli.py +703 -0
  222. attune/socratic/collaboration.py +1114 -0
  223. attune/socratic/domain_templates.py +924 -0
  224. attune/socratic/embeddings.py +738 -0
  225. attune/socratic/engine.py +794 -0
  226. attune/socratic/explainer.py +682 -0
  227. attune/socratic/feedback.py +772 -0
  228. attune/socratic/forms.py +629 -0
  229. attune/socratic/generator.py +732 -0
  230. attune/socratic/llm_analyzer.py +637 -0
  231. attune/socratic/mcp_server.py +702 -0
  232. attune/socratic/session.py +312 -0
  233. attune/socratic/storage.py +667 -0
  234. attune/socratic/success.py +730 -0
  235. attune/socratic/visual_editor.py +860 -0
  236. attune/socratic/web_ui.py +958 -0
  237. attune/telemetry/__init__.py +39 -0
  238. attune/telemetry/agent_coordination.py +475 -0
  239. attune/telemetry/agent_tracking.py +367 -0
  240. attune/telemetry/approval_gates.py +545 -0
  241. attune/telemetry/cli.py +1231 -0
  242. attune/telemetry/commands/__init__.py +14 -0
  243. attune/telemetry/commands/dashboard_commands.py +696 -0
  244. attune/telemetry/event_streaming.py +409 -0
  245. attune/telemetry/feedback_loop.py +567 -0
  246. attune/telemetry/usage_tracker.py +591 -0
  247. attune/templates.py +754 -0
  248. attune/test_generator/__init__.py +38 -0
  249. attune/test_generator/__main__.py +14 -0
  250. attune/test_generator/cli.py +234 -0
  251. attune/test_generator/generator.py +355 -0
  252. attune/test_generator/risk_analyzer.py +216 -0
  253. attune/test_generator/templates/unit_test.py.jinja2 +272 -0
  254. attune/tier_recommender.py +384 -0
  255. attune/tools.py +183 -0
  256. attune/trust/__init__.py +28 -0
  257. attune/trust/circuit_breaker.py +579 -0
  258. attune/trust_building.py +527 -0
  259. attune/validation/__init__.py +19 -0
  260. attune/validation/xml_validator.py +281 -0
  261. attune/vscode_bridge.py +173 -0
  262. attune/workflow_commands.py +780 -0
  263. attune/workflow_patterns/__init__.py +33 -0
  264. attune/workflow_patterns/behavior.py +249 -0
  265. attune/workflow_patterns/core.py +76 -0
  266. attune/workflow_patterns/output.py +99 -0
  267. attune/workflow_patterns/registry.py +255 -0
  268. attune/workflow_patterns/structural.py +288 -0
  269. attune/workflows/__init__.py +539 -0
  270. attune/workflows/autonomous_test_gen.py +1268 -0
  271. attune/workflows/base.py +2667 -0
  272. attune/workflows/batch_processing.py +342 -0
  273. attune/workflows/bug_predict.py +1084 -0
  274. attune/workflows/builder.py +273 -0
  275. attune/workflows/caching.py +253 -0
  276. attune/workflows/code_review.py +1048 -0
  277. attune/workflows/code_review_adapters.py +312 -0
  278. attune/workflows/code_review_pipeline.py +722 -0
  279. attune/workflows/config.py +645 -0
  280. attune/workflows/dependency_check.py +644 -0
  281. attune/workflows/document_gen/__init__.py +25 -0
  282. attune/workflows/document_gen/config.py +30 -0
  283. attune/workflows/document_gen/report_formatter.py +162 -0
  284. attune/workflows/document_gen/workflow.py +1426 -0
  285. attune/workflows/document_manager.py +216 -0
  286. attune/workflows/document_manager_README.md +134 -0
  287. attune/workflows/documentation_orchestrator.py +1205 -0
  288. attune/workflows/history.py +510 -0
  289. attune/workflows/keyboard_shortcuts/__init__.py +39 -0
  290. attune/workflows/keyboard_shortcuts/generators.py +391 -0
  291. attune/workflows/keyboard_shortcuts/parsers.py +416 -0
  292. attune/workflows/keyboard_shortcuts/prompts.py +295 -0
  293. attune/workflows/keyboard_shortcuts/schema.py +193 -0
  294. attune/workflows/keyboard_shortcuts/workflow.py +509 -0
  295. attune/workflows/llm_base.py +363 -0
  296. attune/workflows/manage_docs.py +87 -0
  297. attune/workflows/manage_docs_README.md +134 -0
  298. attune/workflows/manage_documentation.py +821 -0
  299. attune/workflows/new_sample_workflow1.py +149 -0
  300. attune/workflows/new_sample_workflow1_README.md +150 -0
  301. attune/workflows/orchestrated_health_check.py +849 -0
  302. attune/workflows/orchestrated_release_prep.py +600 -0
  303. attune/workflows/output.py +413 -0
  304. attune/workflows/perf_audit.py +863 -0
  305. attune/workflows/pr_review.py +762 -0
  306. attune/workflows/progress.py +785 -0
  307. attune/workflows/progress_server.py +322 -0
  308. attune/workflows/progressive/README 2.md +454 -0
  309. attune/workflows/progressive/README.md +454 -0
  310. attune/workflows/progressive/__init__.py +82 -0
  311. attune/workflows/progressive/cli.py +219 -0
  312. attune/workflows/progressive/core.py +488 -0
  313. attune/workflows/progressive/orchestrator.py +723 -0
  314. attune/workflows/progressive/reports.py +520 -0
  315. attune/workflows/progressive/telemetry.py +274 -0
  316. attune/workflows/progressive/test_gen.py +495 -0
  317. attune/workflows/progressive/workflow.py +589 -0
  318. attune/workflows/refactor_plan.py +694 -0
  319. attune/workflows/release_prep.py +895 -0
  320. attune/workflows/release_prep_crew.py +969 -0
  321. attune/workflows/research_synthesis.py +404 -0
  322. attune/workflows/routing.py +168 -0
  323. attune/workflows/secure_release.py +593 -0
  324. attune/workflows/security_adapters.py +297 -0
  325. attune/workflows/security_audit.py +1329 -0
  326. attune/workflows/security_audit_phase3.py +355 -0
  327. attune/workflows/seo_optimization.py +633 -0
  328. attune/workflows/step_config.py +234 -0
  329. attune/workflows/telemetry_mixin.py +269 -0
  330. attune/workflows/test5.py +125 -0
  331. attune/workflows/test5_README.md +158 -0
  332. attune/workflows/test_coverage_boost_crew.py +849 -0
  333. attune/workflows/test_gen/__init__.py +52 -0
  334. attune/workflows/test_gen/ast_analyzer.py +249 -0
  335. attune/workflows/test_gen/config.py +88 -0
  336. attune/workflows/test_gen/data_models.py +38 -0
  337. attune/workflows/test_gen/report_formatter.py +289 -0
  338. attune/workflows/test_gen/test_templates.py +381 -0
  339. attune/workflows/test_gen/workflow.py +655 -0
  340. attune/workflows/test_gen.py +54 -0
  341. attune/workflows/test_gen_behavioral.py +477 -0
  342. attune/workflows/test_gen_parallel.py +341 -0
  343. attune/workflows/test_lifecycle.py +526 -0
  344. attune/workflows/test_maintenance.py +627 -0
  345. attune/workflows/test_maintenance_cli.py +590 -0
  346. attune/workflows/test_maintenance_crew.py +840 -0
  347. attune/workflows/test_runner.py +622 -0
  348. attune/workflows/tier_tracking.py +531 -0
  349. attune/workflows/xml_enhanced_crew.py +285 -0
  350. attune_ai-2.0.0.dist-info/METADATA +1026 -0
  351. attune_ai-2.0.0.dist-info/RECORD +457 -0
  352. attune_ai-2.0.0.dist-info/WHEEL +5 -0
  353. attune_ai-2.0.0.dist-info/entry_points.txt +26 -0
  354. attune_ai-2.0.0.dist-info/licenses/LICENSE +201 -0
  355. attune_ai-2.0.0.dist-info/licenses/LICENSE_CHANGE_ANNOUNCEMENT.md +101 -0
  356. attune_ai-2.0.0.dist-info/top_level.txt +5 -0
  357. attune_healthcare/__init__.py +13 -0
  358. attune_healthcare/monitors/__init__.py +9 -0
  359. attune_healthcare/monitors/clinical_protocol_monitor.py +315 -0
  360. attune_healthcare/monitors/monitoring/__init__.py +44 -0
  361. attune_healthcare/monitors/monitoring/protocol_checker.py +300 -0
  362. attune_healthcare/monitors/monitoring/protocol_loader.py +214 -0
  363. attune_healthcare/monitors/monitoring/sensor_parsers.py +306 -0
  364. attune_healthcare/monitors/monitoring/trajectory_analyzer.py +389 -0
  365. attune_llm/README.md +553 -0
  366. attune_llm/__init__.py +28 -0
  367. attune_llm/agent_factory/__init__.py +53 -0
  368. attune_llm/agent_factory/adapters/__init__.py +85 -0
  369. attune_llm/agent_factory/adapters/autogen_adapter.py +312 -0
  370. attune_llm/agent_factory/adapters/crewai_adapter.py +483 -0
  371. attune_llm/agent_factory/adapters/haystack_adapter.py +298 -0
  372. attune_llm/agent_factory/adapters/langchain_adapter.py +362 -0
  373. attune_llm/agent_factory/adapters/langgraph_adapter.py +333 -0
  374. attune_llm/agent_factory/adapters/native.py +228 -0
  375. attune_llm/agent_factory/adapters/wizard_adapter.py +423 -0
  376. attune_llm/agent_factory/base.py +305 -0
  377. attune_llm/agent_factory/crews/__init__.py +67 -0
  378. attune_llm/agent_factory/crews/code_review.py +1113 -0
  379. attune_llm/agent_factory/crews/health_check.py +1262 -0
  380. attune_llm/agent_factory/crews/refactoring.py +1128 -0
  381. attune_llm/agent_factory/crews/security_audit.py +1018 -0
  382. attune_llm/agent_factory/decorators.py +287 -0
  383. attune_llm/agent_factory/factory.py +558 -0
  384. attune_llm/agent_factory/framework.py +193 -0
  385. attune_llm/agent_factory/memory_integration.py +328 -0
  386. attune_llm/agent_factory/resilient.py +320 -0
  387. attune_llm/agents_md/__init__.py +22 -0
  388. attune_llm/agents_md/loader.py +218 -0
  389. attune_llm/agents_md/parser.py +271 -0
  390. attune_llm/agents_md/registry.py +307 -0
  391. attune_llm/claude_memory.py +466 -0
  392. attune_llm/cli/__init__.py +8 -0
  393. attune_llm/cli/sync_claude.py +487 -0
  394. attune_llm/code_health.py +1313 -0
  395. attune_llm/commands/__init__.py +51 -0
  396. attune_llm/commands/context.py +375 -0
  397. attune_llm/commands/loader.py +301 -0
  398. attune_llm/commands/models.py +231 -0
  399. attune_llm/commands/parser.py +371 -0
  400. attune_llm/commands/registry.py +429 -0
  401. attune_llm/config/__init__.py +29 -0
  402. attune_llm/config/unified.py +291 -0
  403. attune_llm/context/__init__.py +22 -0
  404. attune_llm/context/compaction.py +455 -0
  405. attune_llm/context/manager.py +434 -0
  406. attune_llm/contextual_patterns.py +361 -0
  407. attune_llm/core.py +907 -0
  408. attune_llm/git_pattern_extractor.py +435 -0
  409. attune_llm/hooks/__init__.py +24 -0
  410. attune_llm/hooks/config.py +306 -0
  411. attune_llm/hooks/executor.py +289 -0
  412. attune_llm/hooks/registry.py +302 -0
  413. attune_llm/hooks/scripts/__init__.py +39 -0
  414. attune_llm/hooks/scripts/evaluate_session.py +201 -0
  415. attune_llm/hooks/scripts/first_time_init.py +285 -0
  416. attune_llm/hooks/scripts/pre_compact.py +207 -0
  417. attune_llm/hooks/scripts/session_end.py +183 -0
  418. attune_llm/hooks/scripts/session_start.py +163 -0
  419. attune_llm/hooks/scripts/suggest_compact.py +225 -0
  420. attune_llm/learning/__init__.py +30 -0
  421. attune_llm/learning/evaluator.py +438 -0
  422. attune_llm/learning/extractor.py +514 -0
  423. attune_llm/learning/storage.py +560 -0
  424. attune_llm/levels.py +227 -0
  425. attune_llm/pattern_confidence.py +414 -0
  426. attune_llm/pattern_resolver.py +272 -0
  427. attune_llm/pattern_summary.py +350 -0
  428. attune_llm/providers.py +967 -0
  429. attune_llm/routing/__init__.py +32 -0
  430. attune_llm/routing/model_router.py +362 -0
  431. attune_llm/security/IMPLEMENTATION_SUMMARY.md +413 -0
  432. attune_llm/security/PHASE2_COMPLETE.md +384 -0
  433. attune_llm/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  434. attune_llm/security/QUICK_REFERENCE.md +316 -0
  435. attune_llm/security/README.md +262 -0
  436. attune_llm/security/__init__.py +62 -0
  437. attune_llm/security/audit_logger.py +929 -0
  438. attune_llm/security/audit_logger_example.py +152 -0
  439. attune_llm/security/pii_scrubber.py +640 -0
  440. attune_llm/security/secrets_detector.py +678 -0
  441. attune_llm/security/secrets_detector_example.py +304 -0
  442. attune_llm/security/secure_memdocs.py +1192 -0
  443. attune_llm/security/secure_memdocs_example.py +278 -0
  444. attune_llm/session_status.py +745 -0
  445. attune_llm/state.py +246 -0
  446. attune_llm/utils/__init__.py +5 -0
  447. attune_llm/utils/tokens.py +349 -0
  448. attune_software/SOFTWARE_PLUGIN_README.md +57 -0
  449. attune_software/__init__.py +13 -0
  450. attune_software/cli/__init__.py +120 -0
  451. attune_software/cli/inspect.py +362 -0
  452. attune_software/cli.py +574 -0
  453. attune_software/plugin.py +188 -0
  454. workflow_scaffolding/__init__.py +11 -0
  455. workflow_scaffolding/__main__.py +12 -0
  456. workflow_scaffolding/cli.py +206 -0
  457. workflow_scaffolding/generator.py +265 -0
@@ -0,0 +1,47 @@
1
+ """Parser definitions for status and health commands.
2
+
3
+ Copyright 2025 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from ..commands import status as status_commands
8
+
9
+
10
+ def register_parsers(subparsers):
11
+ """Register status command parsers.
12
+
13
+ Args:
14
+ subparsers: ArgumentParser subparsers object
15
+ """
16
+ # status command
17
+ parser_status = subparsers.add_parser("status", help="Show project status")
18
+ parser_status.add_argument("--patterns-dir", default="./patterns", help="Patterns directory")
19
+ parser_status.add_argument("--project-root", default=".", help="Project root")
20
+ parser_status.add_argument(
21
+ "--inactivity", type=int, default=30, help="Inactivity threshold (minutes)"
22
+ )
23
+ parser_status.add_argument("--full", action="store_true", help="Show all items")
24
+ parser_status.add_argument("--json", action="store_true", help="Output as JSON")
25
+ parser_status.add_argument("--select", type=int, help="Select item for action")
26
+ parser_status.add_argument("--force", action="store_true", help="Force show status")
27
+ parser_status.set_defaults(func=status_commands.cmd_status)
28
+
29
+ # review command (deprecated)
30
+ parser_review = subparsers.add_parser("review", help="Code review (deprecated)")
31
+ parser_review.set_defaults(func=status_commands.cmd_review)
32
+
33
+ # health command
34
+ parser_health = subparsers.add_parser("health", help="Run health checks")
35
+ parser_health.add_argument("--check", help="Specific check (lint/type/format/test)")
36
+ parser_health.add_argument("--deep", action="store_true", help="Run all checks")
37
+ parser_health.add_argument("--fix", action="store_true", help="Auto-fix issues")
38
+ parser_health.add_argument("--dry-run", action="store_true", help="Preview fixes only")
39
+ parser_health.add_argument(
40
+ "--interactive", action="store_true", help="Interactive fix mode"
41
+ )
42
+ parser_health.add_argument("--project-root", default=".", help="Project root")
43
+ parser_health.add_argument("--details", action="store_true", help="Show details")
44
+ parser_health.add_argument("--full", action="store_true", help="Show all details")
45
+ parser_health.add_argument("--trends", type=int, help="Show trends (days)")
46
+ parser_health.add_argument("--json", action="store_true", help="Output as JSON")
47
+ parser_health.set_defaults(func=status_commands.cmd_health)
@@ -0,0 +1,31 @@
1
+ """Parser definitions for sync commands.
2
+
3
+ Copyright 2025 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from ..commands import sync
8
+
9
+
10
+ def register_parsers(subparsers):
11
+ """Register sync command parsers.
12
+
13
+ Args:
14
+ subparsers: ArgumentParser subparsers object from main parser
15
+ """
16
+ # Sync-claude command
17
+ parser_sync_claude = subparsers.add_parser(
18
+ "sync-claude",
19
+ help="Sync learned patterns to Claude Code rules",
20
+ )
21
+ parser_sync_claude.add_argument(
22
+ "--patterns-dir",
23
+ default="patterns",
24
+ help="Source patterns directory (default: patterns)",
25
+ )
26
+ parser_sync_claude.add_argument(
27
+ "--output-dir",
28
+ default=".claude/rules/empathy",
29
+ help="Target Claude Code rules directory (default: .claude/rules/empathy)",
30
+ )
31
+ parser_sync_claude.set_defaults(func=sync.cmd_sync_claude)
@@ -0,0 +1,33 @@
1
+ """Parser definitions for tier commands.
2
+
3
+ Copyright 2025 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from ..commands import tier as tier_commands
8
+
9
+
10
+ def register_parsers(subparsers):
11
+ """Register tier command parsers.
12
+
13
+ Args:
14
+ subparsers: ArgumentParser subparsers object
15
+ """
16
+ # Create tier subcommand group
17
+ tier_parser = subparsers.add_parser("tier", help="Tier management commands")
18
+ tier_subparsers = tier_parser.add_subparsers(dest="tier_command")
19
+
20
+ # tier recommend
21
+ parser_recommend = tier_subparsers.add_parser(
22
+ "recommend", help="Get tier recommendation"
23
+ )
24
+ parser_recommend.add_argument("description", help="Bug or task description")
25
+ parser_recommend.add_argument("--files", help="Comma-separated list of files")
26
+ parser_recommend.add_argument(
27
+ "--complexity", choices=["low", "medium", "high"], help="Complexity hint"
28
+ )
29
+ parser_recommend.set_defaults(func=tier_commands.cmd_tier_recommend)
30
+
31
+ # tier stats
32
+ parser_stats = tier_subparsers.add_parser("stats", help="Show tier statistics")
33
+ parser_stats.set_defaults(func=tier_commands.cmd_tier_stats)
@@ -0,0 +1,77 @@
1
+ """Parser definitions for workflow commands.
2
+
3
+ Copyright 2025 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from ..commands import workflow
8
+
9
+
10
+ def register_parsers(subparsers):
11
+ """Register workflow command parsers.
12
+
13
+ Args:
14
+ subparsers: ArgumentParser subparsers object from main parser
15
+ """
16
+ # Main workflow command - multi-model workflow management
17
+ parser_workflow = subparsers.add_parser(
18
+ "workflow",
19
+ help="Multi-model workflows for cost-optimized task pipelines",
20
+ )
21
+ parser_workflow.add_argument(
22
+ "action",
23
+ choices=["list", "describe", "run", "config"],
24
+ help="Action: list, describe, run, or config",
25
+ )
26
+ parser_workflow.add_argument(
27
+ "name",
28
+ nargs="?",
29
+ help="Workflow name (for describe/run)",
30
+ )
31
+ parser_workflow.add_argument(
32
+ "--input",
33
+ "-i",
34
+ help="JSON input data for workflow execution",
35
+ )
36
+ parser_workflow.add_argument(
37
+ "--provider",
38
+ "-p",
39
+ choices=["anthropic", "openai", "google", "ollama", "hybrid"],
40
+ default=None, # None means use config
41
+ help="Model provider: anthropic, openai, google, ollama, or hybrid (mix of best models)",
42
+ )
43
+ parser_workflow.add_argument(
44
+ "--force",
45
+ action="store_true",
46
+ help="Force overwrite existing config file",
47
+ )
48
+ parser_workflow.add_argument("--json", action="store_true", help="Output as JSON")
49
+ parser_workflow.add_argument(
50
+ "--use-recommended-tier",
51
+ action="store_true",
52
+ help="Enable intelligent tier fallback: start with CHEAP tier and automatically upgrade if quality gates fail",
53
+ )
54
+ parser_workflow.add_argument(
55
+ "--write-tests",
56
+ action="store_true",
57
+ help="(test-gen workflow) Write generated tests to disk",
58
+ )
59
+ parser_workflow.add_argument(
60
+ "--output-dir",
61
+ default="tests/generated",
62
+ help="(test-gen workflow) Output directory for generated tests",
63
+ )
64
+ parser_workflow.add_argument(
65
+ "--health-score-threshold",
66
+ type=int,
67
+ default=95,
68
+ help="(health-check workflow) Minimum health score required (0-100, default: 95 for very strict quality)",
69
+ )
70
+ parser_workflow.set_defaults(func=workflow.cmd_workflow)
71
+
72
+ # Legacy workflow-setup command (DEPRECATED)
73
+ parser_workflow_setup = subparsers.add_parser(
74
+ "workflow-setup",
75
+ help="[DEPRECATED] Interactive setup wizard (use 'empathy init' instead)",
76
+ )
77
+ parser_workflow_setup.set_defaults(func=workflow.cmd_workflow_legacy)
@@ -0,0 +1 @@
1
+ """CLI utility functions."""
@@ -0,0 +1,242 @@
1
+ """Help text and documentation data for CLI commands.
2
+
3
+ This module contains static help content displayed by various CLI commands.
4
+
5
+ Copyright 2025 Smart-AI-Memory
6
+ Licensed under Fair Source License 0.9
7
+ """
8
+
9
+ CHEATSHEET = {
10
+ "Getting Started": [
11
+ ("empathy init", "Create a new config file"),
12
+ ("empathy workflow", "Interactive setup workflow"),
13
+ ("empathy run", "Interactive REPL mode"),
14
+ ],
15
+ "Daily Workflow": [
16
+ ("empathy morning", "Start-of-day briefing"),
17
+ ("empathy status", "What needs attention now"),
18
+ ("empathy ship", "Pre-commit validation"),
19
+ ],
20
+ "Code Quality": [
21
+ ("empathy health", "Quick health check"),
22
+ ("empathy health --deep", "Comprehensive check"),
23
+ ("empathy health --fix", "Auto-fix issues"),
24
+ ("empathy fix-all", "Fix all lint/format issues"),
25
+ ],
26
+ "Pattern Learning": [
27
+ ("empathy learn --analyze 20", "Learn from last 20 commits"),
28
+ ("empathy sync-claude", "Sync patterns to Claude Code"),
29
+ ("empathy inspect patterns", "View learned patterns"),
30
+ ],
31
+ "Code Review": [
32
+ ("empathy review", "Review recent changes"),
33
+ ("empathy review --staged", "Review staged changes only"),
34
+ ],
35
+ "Memory & State": [
36
+ ("empathy inspect state", "View saved states"),
37
+ ("empathy inspect metrics --user-id X", "View user metrics"),
38
+ ("empathy export patterns.json", "Export patterns"),
39
+ ],
40
+ "Advanced": [
41
+ ("empathy costs", "View API cost tracking"),
42
+ ("empathy dashboard", "Launch visual dashboard"),
43
+ ("empathy frameworks", "List agent frameworks"),
44
+ ("empathy workflow list", "List multi-model workflows"),
45
+ ("empathy new <template>", "Create project from template"),
46
+ ],
47
+ }
48
+
49
+ EXPLAIN_CONTENT = {
50
+ "morning": """
51
+ HOW 'empathy morning' WORKS:
52
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━
53
+ This command aggregates multiple data sources to give you a prioritized
54
+ start-of-day briefing:
55
+
56
+ 1. PATTERNS ANALYSIS
57
+ Reads ./patterns/*.json to find:
58
+ - Unresolved bugs (status: investigating)
59
+ - Recent security decisions
60
+ - Tech debt trends
61
+
62
+ 2. GIT CONTEXT
63
+ Checks your recent git activity:
64
+ - Commits from yesterday
65
+ - Uncommitted changes
66
+ - Branch status
67
+
68
+ 3. HEALTH SNAPSHOT
69
+ Runs quick health checks:
70
+ - Lint issues count
71
+ - Type errors
72
+ - Test status
73
+
74
+ 4. PRIORITY SCORING
75
+ Items are scored and sorted by:
76
+ - Age (older = higher priority)
77
+ - Severity (critical > high > medium)
78
+ - Your recent activity patterns
79
+
80
+ TIPS:
81
+ • Run this first thing each day
82
+ • Use 'empathy morning --verbose' for details
83
+ • Pair with 'empathy status --select N' to dive deeper
84
+ """,
85
+ "ship": """
86
+ HOW 'empathy ship' WORKS:
87
+ ━━━━━━━━━━━━━━━━━━━━━━━━━
88
+ Pre-commit validation pipeline that ensures code quality before shipping:
89
+
90
+ 1. HEALTH CHECKS
91
+ - Runs lint checks (ruff/flake8)
92
+ - Validates types (mypy/pyright)
93
+ - Checks formatting (black/prettier)
94
+
95
+ 2. PATTERN REVIEW
96
+ - Compares changes against known bug patterns
97
+ - Flags code that matches historical issues
98
+ - Suggests fixes based on past resolutions
99
+
100
+ 3. SECURITY SCAN
101
+ - Checks for hardcoded secrets
102
+ - Validates against security patterns
103
+ - Reports potential vulnerabilities
104
+
105
+ 4. PATTERN SYNC (optional)
106
+ - Updates Claude Code rules
107
+ - Syncs new patterns discovered
108
+ - Skip with --skip-sync
109
+
110
+ EXIT CODES:
111
+ • 0 = All checks passed, safe to commit
112
+ • 1 = Issues found, review before committing
113
+
114
+ TIPS:
115
+ • Add to pre-commit hook: empathy ship --skip-sync
116
+ • Use 'empathy ship --verbose' to see all checks
117
+ """,
118
+ "learn": """
119
+ HOW 'empathy learn' WORKS:
120
+ ━━━━━━━━━━━━━━━━━━━━━━━━━
121
+ Extracts patterns from your git history to teach Claude about your codebase:
122
+
123
+ 1. COMMIT ANALYSIS
124
+ Parses commit messages looking for:
125
+ - fix: Bug fixes → debugging.json
126
+ - security: decisions → security.json
127
+ - TODO/FIXME in code → tech_debt.json
128
+
129
+ 2. DIFF INSPECTION
130
+ Analyzes code changes to:
131
+ - Identify affected files
132
+ - Extract error types
133
+ - Record fix patterns
134
+
135
+ 3. PATTERN STORAGE
136
+ Saves to ./patterns/:
137
+ - debugging.json: Bug patterns
138
+ - security.json: Security decisions
139
+ - tech_debt.json: Technical debt
140
+ - inspection.json: Code review findings
141
+
142
+ 4. SUMMARY GENERATION
143
+ Creates .claude/patterns_summary.md:
144
+ - Human-readable pattern overview
145
+ - Loaded by Claude Code automatically
146
+
147
+ USAGE EXAMPLES:
148
+ • empathy learn --analyze 10 # Last 10 commits
149
+ • empathy learn --analyze 100 # Deeper history
150
+ • empathy sync-claude # Apply patterns to Claude
151
+
152
+ TIPS:
153
+ • Run weekly to keep patterns current
154
+ • Use good commit messages (fix:, feat:, etc.)
155
+ • Check ./patterns/ to see what was learned
156
+ """,
157
+ "health": """
158
+ HOW 'empathy health' WORKS:
159
+ ━━━━━━━━━━━━━━━━━━━━━━━━━
160
+ Code health dashboard that runs multiple quality checks:
161
+
162
+ 1. QUICK MODE (default)
163
+ Fast checks that run in seconds:
164
+ - Lint: ruff check or flake8
165
+ - Format: black --check or prettier
166
+ - Basic type checking
167
+
168
+ 2. DEEP MODE (--deep)
169
+ Comprehensive checks (slower):
170
+ - Full type analysis (mypy --strict)
171
+ - Test suite execution
172
+ - Security scanning
173
+ - Dependency audit
174
+
175
+ 3. SCORING
176
+ Health score 0-100 based on:
177
+ - Lint issues (×2 penalty each)
178
+ - Type errors (×5 penalty each)
179
+ - Test failures (×10 penalty each)
180
+ - Security issues (×20 penalty each)
181
+
182
+ 4. AUTO-FIX (--fix)
183
+ Can automatically fix:
184
+ - Formatting issues
185
+ - Import sorting
186
+ - Simple lint errors
187
+
188
+ USAGE:
189
+ • empathy health # Quick check
190
+ • empathy health --deep # Full check
191
+ • empathy health --fix # Auto-fix issues
192
+ • empathy health --trends 30 # 30-day trend
193
+
194
+ TIPS:
195
+ • Run quick checks before commits
196
+ • Run deep checks in CI/CD
197
+ • Track trends to catch regressions
198
+ """,
199
+ "sync-claude": """
200
+ HOW 'empathy sync-claude' WORKS:
201
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
202
+ Converts learned patterns into Claude Code rules:
203
+
204
+ 1. READS PATTERNS
205
+ Loads from ./patterns/:
206
+ - debugging.json → Bug fix patterns
207
+ - security.json → Security decisions
208
+ - tech_debt.json → Known debt items
209
+
210
+ 2. GENERATES RULES
211
+ Creates .claude/rules/empathy/:
212
+ - debugging.md
213
+ - security.md
214
+ - tech_debt.md
215
+
216
+ 3. CLAUDE CODE INTEGRATION
217
+ Rules are automatically loaded when:
218
+ - Claude Code starts in this directory
219
+ - Combined with CLAUDE.md instructions
220
+
221
+ HOW CLAUDE USES THESE:
222
+ • Sees historical bugs before suggesting code
223
+ • Knows about accepted security patterns
224
+ • Understands existing tech debt
225
+
226
+ FILE STRUCTURE:
227
+ ./patterns/ # Your pattern storage
228
+ debugging.json
229
+ security.json
230
+ .claude/
231
+ CLAUDE.md # Project instructions
232
+ rules/
233
+ empathy/ # Generated rules
234
+ debugging.md
235
+ security.md
236
+
237
+ TIPS:
238
+ • Run after 'empathy learn'
239
+ • Commit .claude/rules/ to share with team
240
+ • Weekly sync keeps Claude current
241
+ """,
242
+ }
@@ -0,0 +1,68 @@
1
+ """Helper utilities for CLI commands.
2
+
3
+ Copyright 2025 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from pathlib import Path
8
+
9
+
10
+ def _file_exists(path: str) -> bool:
11
+ """Check if a file exists.
12
+
13
+ Args:
14
+ path: File path to check
15
+
16
+ Returns:
17
+ True if file exists, False otherwise
18
+ """
19
+ return Path(path).exists()
20
+
21
+
22
+ def _show_achievements(engine) -> None:
23
+ """Show user achievements based on usage.
24
+
25
+ Args:
26
+ engine: Engine instance with stats
27
+ """
28
+ stats = engine.get_stats()
29
+
30
+ achievements = []
31
+ total_cmds = stats.get("total_commands", 0)
32
+ cmd_counts = stats.get("command_counts", {})
33
+
34
+ # Check achievements
35
+ if total_cmds >= 1:
36
+ achievements.append(("First Steps", "Ran your first command"))
37
+ if total_cmds >= 10:
38
+ achievements.append(("Getting Started", "Ran 10+ commands"))
39
+ if total_cmds >= 50:
40
+ achievements.append(("Power User", "Ran 50+ commands"))
41
+ if total_cmds >= 100:
42
+ achievements.append(("Expert", "Ran 100+ commands"))
43
+
44
+ if cmd_counts.get("learn", 0) >= 1:
45
+ achievements.append(("Pattern Learner", "Learned from git history"))
46
+ if cmd_counts.get("sync-claude", 0) >= 1:
47
+ achievements.append(("Claude Whisperer", "Synced patterns to Claude"))
48
+ if cmd_counts.get("morning", 0) >= 5:
49
+ achievements.append(("Early Bird", "Used morning briefing 5+ times"))
50
+ if cmd_counts.get("ship", 0) >= 10:
51
+ achievements.append(("Quality Shipper", "Used pre-commit checks 10+ times"))
52
+ if cmd_counts.get("health", 0) >= 1 and cmd_counts.get("fix-all", 0) >= 1:
53
+ achievements.append(("Code Doctor", "Used health checks and fixes"))
54
+
55
+ if stats.get("patterns_learned", 0) >= 10:
56
+ achievements.append(("Pattern Master", "Learned 10+ patterns"))
57
+
58
+ if stats.get("days_active", 0) >= 7:
59
+ achievements.append(("Week Warrior", "Active for 7+ days"))
60
+ if stats.get("days_active", 0) >= 30:
61
+ achievements.append(("Monthly Maven", "Active for 30+ days"))
62
+
63
+ if achievements:
64
+ print(" ACHIEVEMENTS UNLOCKED")
65
+ print(" " + "-" * 30)
66
+ for name, desc in achievements:
67
+ print(f" * {name}: {desc}")
68
+ print()