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,382 @@
1
+ """CLI Workflow Commands.
2
+
3
+ Workflow Commands for meta-workflow system.
4
+
5
+ Copyright 2025 Smart-AI-Memory
6
+ Licensed under Fair Source License 0.9
7
+ """
8
+
9
+
10
+ import typer
11
+ from rich.console import Console
12
+ from rich.panel import Panel
13
+ from rich.table import Table
14
+
15
+ from attune.meta_workflows import (
16
+ MetaWorkflow,
17
+ PatternLearner,
18
+ TemplateRegistry,
19
+ )
20
+ from attune.meta_workflows.intent_detector import IntentDetector
21
+
22
+ from . import meta_workflow_app
23
+
24
+ console = Console()
25
+
26
+
27
+ @meta_workflow_app.command("run")
28
+ def run_workflow(
29
+ template_id: str = typer.Argument(..., help="Template ID to execute"),
30
+ mock: bool = typer.Option(
31
+ True,
32
+ "--mock/--real",
33
+ help="Use mock execution (for testing)",
34
+ ),
35
+ use_memory: bool = typer.Option(
36
+ False,
37
+ "--use-memory",
38
+ "-m",
39
+ help="Enable memory integration for enhanced analytics",
40
+ ),
41
+ use_defaults: bool = typer.Option(
42
+ False,
43
+ "--use-defaults",
44
+ "-d",
45
+ help="Use default values instead of asking questions (non-interactive mode)",
46
+ ),
47
+ user_id: str = typer.Option(
48
+ "cli_user",
49
+ "--user-id",
50
+ "-u",
51
+ help="User ID for memory integration",
52
+ ),
53
+ json_output: bool = typer.Option(
54
+ False,
55
+ "--json",
56
+ "-j",
57
+ help="Output result as JSON (for programmatic use)",
58
+ ),
59
+ ):
60
+ """Execute a meta-workflow from template.
61
+
62
+ This will:
63
+ 1. Load the template
64
+ 2. Ask form questions interactively (or use defaults with --use-defaults)
65
+ 3. Generate dynamic agent team
66
+ 4. Execute agents (mock or real)
67
+ 5. Save results (files + optional memory)
68
+ 6. Display summary
69
+
70
+ Examples:
71
+ empathy meta-workflow run release-prep
72
+ empathy meta-workflow run test-coverage-boost --real
73
+ empathy meta-workflow run manage-docs --use-defaults
74
+ empathy meta-workflow run release-prep --json --use-defaults
75
+ """
76
+ import json
77
+
78
+ try:
79
+ # Load template
80
+ if not json_output:
81
+ console.print(f"\n[bold]Loading template:[/bold] {template_id}")
82
+ registry = TemplateRegistry()
83
+ template = registry.load_template(template_id)
84
+
85
+ if not template:
86
+ if json_output:
87
+ print(json.dumps({"success": False, "error": f"Template not found: {template_id}"}))
88
+ else:
89
+ console.print(f"[red]Template not found:[/red] {template_id}")
90
+ raise typer.Exit(code=1)
91
+
92
+ if not json_output:
93
+ console.print(f"[green]✓[/green] {template.name}")
94
+
95
+ # Setup memory if requested
96
+ pattern_learner = None
97
+ if use_memory:
98
+ if not json_output:
99
+ console.print("\n[bold]Initializing memory integration...[/bold]")
100
+ from attune.memory.unified import UnifiedMemory
101
+
102
+ try:
103
+ memory = UnifiedMemory(user_id=user_id)
104
+ pattern_learner = PatternLearner(memory=memory)
105
+ if not json_output:
106
+ console.print("[green]✓[/green] Memory enabled")
107
+ except Exception as e:
108
+ if not json_output:
109
+ console.print(f"[yellow]Warning:[/yellow] Memory initialization failed: {e}")
110
+ console.print("[yellow]Continuing without memory integration[/yellow]")
111
+
112
+ # Create workflow
113
+ workflow = MetaWorkflow(
114
+ template=template,
115
+ pattern_learner=pattern_learner,
116
+ )
117
+
118
+ # Execute (will ask questions via AskUserQuestion unless --use-defaults)
119
+ if not json_output:
120
+ console.print("\n[bold]Executing workflow...[/bold]")
121
+ console.print(f"Mode: {'Mock' if mock else 'Real'}")
122
+ if use_defaults:
123
+ console.print("[cyan]Using default values (non-interactive)[/cyan]")
124
+
125
+ result = workflow.execute(mock_execution=mock, use_defaults=use_defaults)
126
+
127
+ # JSON output mode - print result as JSON and exit
128
+ if json_output:
129
+ output = {
130
+ "run_id": result.run_id,
131
+ "template_id": template_id,
132
+ "timestamp": result.timestamp,
133
+ "success": result.success,
134
+ "error": result.error,
135
+ "total_cost": result.total_cost,
136
+ "total_duration": result.total_duration,
137
+ "agents_created": len(result.agents_created),
138
+ "form_responses": {
139
+ "template_id": result.form_responses.template_id,
140
+ "responses": result.form_responses.responses,
141
+ "timestamp": result.form_responses.timestamp,
142
+ "response_id": result.form_responses.response_id,
143
+ },
144
+ "agent_results": [
145
+ {
146
+ "agent_id": ar.agent_id,
147
+ "role": ar.role,
148
+ "success": ar.success,
149
+ "cost": ar.cost,
150
+ "duration": ar.duration,
151
+ "tier_used": ar.tier_used,
152
+ "output": ar.output,
153
+ "error": ar.error,
154
+ }
155
+ for ar in result.agent_results
156
+ ],
157
+ }
158
+ print(json.dumps(output))
159
+ return
160
+
161
+ # Display summary (normal mode)
162
+ console.print("\n[bold green]Execution Complete![/bold green]\n")
163
+
164
+ summary_lines = [
165
+ f"[bold]Run ID:[/bold] {result.run_id}",
166
+ f"[bold]Status:[/bold] {'✅ Success' if result.success else '❌ Failed'}",
167
+ "",
168
+ f"[bold]Agents Created:[/bold] {len(result.agents_created)}",
169
+ f"[bold]Agents Executed:[/bold] {len(result.agent_results)}",
170
+ f"[bold]Total Cost:[/bold] ${result.total_cost:.2f}",
171
+ f"[bold]Duration:[/bold] {result.total_duration:.1f}s",
172
+ ]
173
+
174
+ if result.error:
175
+ summary_lines.append(f"\n[bold red]Error:[/bold red] {result.error}")
176
+
177
+ console.print(
178
+ Panel("\n".join(summary_lines), title="Execution Summary", border_style="green")
179
+ )
180
+
181
+ # Show agents
182
+ console.print("\n[bold]Agents Executed:[/bold]\n")
183
+
184
+ for agent_result in result.agent_results:
185
+ status = "✅" if agent_result.success else "❌"
186
+ console.print(
187
+ f" {status} [cyan]{agent_result.role}[/cyan] "
188
+ f"(tier: {agent_result.tier_used}, cost: ${agent_result.cost:.2f})"
189
+ )
190
+
191
+ # Show where results saved
192
+ console.print("\n[bold]Results saved to:[/bold]")
193
+ console.print(f" 📁 Files: .attune/meta_workflows/executions/{result.run_id}/")
194
+ if use_memory and pattern_learner and pattern_learner.memory:
195
+ console.print(" 🧠 Memory: Long-term storage")
196
+
197
+ console.print(f"\n[dim]View details: empathy meta-workflow show {result.run_id}[/dim]")
198
+ console.print()
199
+
200
+ except Exception as e:
201
+ if json_output:
202
+ print(json.dumps({"success": False, "error": str(e)}))
203
+ else:
204
+ console.print(f"\n[red]Error:[/red] {e}")
205
+ import traceback
206
+
207
+ traceback.print_exc()
208
+ raise typer.Exit(code=1)
209
+
210
+
211
+
212
+ @meta_workflow_app.command("ask")
213
+ def natural_language_run(
214
+ request: str = typer.Argument(..., help="Natural language description of what you need"),
215
+ auto_run: bool = typer.Option(
216
+ False,
217
+ "--auto",
218
+ "-a",
219
+ help="Automatically run if high confidence match (>60%)",
220
+ ),
221
+ mock: bool = typer.Option(
222
+ True,
223
+ "--mock/--real",
224
+ help="Use mock execution (for testing)",
225
+ ),
226
+ use_defaults: bool = typer.Option(
227
+ True,
228
+ "--use-defaults/--interactive",
229
+ "-d/-i",
230
+ help="Use default values (non-interactive)",
231
+ ),
232
+ ):
233
+ """Create agent teams using natural language.
234
+
235
+ Analyzes your request and suggests appropriate agent teams.
236
+ Use --auto to automatically run the best match.
237
+
238
+ Examples:
239
+ empathy meta-workflow ask "I need to prepare for a release"
240
+ empathy meta-workflow ask "improve my test coverage" --auto --real
241
+ empathy meta-workflow ask "check if documentation is up to date"
242
+ """
243
+ try:
244
+ detector = IntentDetector()
245
+ matches = detector.detect(request)
246
+
247
+ if not matches:
248
+ console.print(
249
+ "\n[yellow]I couldn't identify a matching agent team for your request.[/yellow]"
250
+ )
251
+ console.print("\n[bold]Available agent teams:[/bold]")
252
+ console.print(
253
+ " • [cyan]release-prep[/cyan] - Security, testing, code quality, documentation checks"
254
+ )
255
+ console.print(
256
+ " • [cyan]test-coverage-boost[/cyan] - Analyze and improve test coverage"
257
+ )
258
+ console.print(" • [cyan]test-maintenance[/cyan] - Test lifecycle management")
259
+ console.print(" • [cyan]manage-docs[/cyan] - Documentation sync and gap detection")
260
+ console.print("\n[dim]Try: empathy meta-workflow run <template-id>[/dim]\n")
261
+ return
262
+
263
+ # Show detected matches
264
+ console.print(f'\n[bold]Analyzing:[/bold] "{request}"\n')
265
+
266
+ best_match = matches[0]
267
+ confidence_pct = int(best_match.confidence * 100)
268
+
269
+ # If auto-run and high confidence, run immediately
270
+ if auto_run and best_match.confidence >= 0.6:
271
+ console.print(
272
+ f"[bold green]Auto-detected:[/bold green] {best_match.template_name} ({confidence_pct}% confidence)"
273
+ )
274
+ console.print(f"[dim]{best_match.description}[/dim]\n")
275
+ console.print(f"[bold]Running {best_match.template_id}...[/bold]\n")
276
+
277
+ # Run the workflow
278
+ run_workflow(
279
+ template_id=best_match.template_id,
280
+ mock=mock,
281
+ use_memory=False,
282
+ use_defaults=use_defaults,
283
+ user_id="cli_user",
284
+ )
285
+ return
286
+
287
+ # Show suggestions
288
+ console.print("[bold]Suggested Agent Teams:[/bold]\n")
289
+
290
+ for i, match in enumerate(matches[:3], 1):
291
+ confidence = int(match.confidence * 100)
292
+ style = (
293
+ "green"
294
+ if match.confidence >= 0.6
295
+ else "yellow" if match.confidence >= 0.4 else "dim"
296
+ )
297
+
298
+ console.print(f" {i}. [{style}]{match.template_name}[/{style}] ({confidence}% match)")
299
+ console.print(f" [dim]{match.description}[/dim]")
300
+ if match.matched_keywords:
301
+ keywords = ", ".join(match.matched_keywords[:5])
302
+ console.print(f" [dim]Matched: {keywords}[/dim]")
303
+ console.print(f" Run: [cyan]empathy meta-workflow run {match.template_id}[/cyan]")
304
+ console.print()
305
+
306
+ # Prompt to run best match
307
+ if best_match.confidence >= 0.5:
308
+ console.print(
309
+ "[bold]Quick Run:[/bold] Use [cyan]--auto[/cyan] to automatically run the best match"
310
+ )
311
+ console.print(
312
+ f'[dim]Example: empathy meta-workflow ask "{request}" --auto --real[/dim]\n'
313
+ )
314
+
315
+ except Exception as e:
316
+ console.print(f"[red]Error:[/red] {e}")
317
+ raise typer.Exit(code=1)
318
+
319
+
320
+
321
+ @meta_workflow_app.command("detect")
322
+ def detect_intent(
323
+ request: str = typer.Argument(..., help="Natural language request to analyze"),
324
+ threshold: float = typer.Option(
325
+ 0.3,
326
+ "--threshold",
327
+ "-t",
328
+ help="Minimum confidence threshold (0.0-1.0)",
329
+ ),
330
+ ):
331
+ """Detect intent from natural language without running.
332
+
333
+ Useful for testing what agent teams would be suggested for a given request.
334
+
335
+ Examples:
336
+ empathy meta-workflow detect "check security vulnerabilities"
337
+ empathy meta-workflow detect "generate more tests" --threshold 0.5
338
+ """
339
+ try:
340
+ detector = IntentDetector()
341
+ matches = detector.detect(request, threshold=threshold)
342
+
343
+ console.print(f'\n[bold]Intent Analysis:[/bold] "{request}"\n')
344
+ console.print(f"[dim]Threshold: {threshold:.0%}[/dim]\n")
345
+
346
+ if not matches:
347
+ console.print("[yellow]No matches above threshold.[/yellow]\n")
348
+ return
349
+
350
+ # Create table
351
+ table = Table(show_header=True)
352
+ table.add_column("Template", style="cyan")
353
+ table.add_column("Confidence", justify="right")
354
+ table.add_column("Matched Keywords")
355
+ table.add_column("Would Auto-Run?")
356
+
357
+ for match in matches:
358
+ confidence = f"{match.confidence:.0%}"
359
+ keywords = ", ".join(match.matched_keywords[:4])
360
+ auto_run = "✅ Yes" if match.confidence >= 0.6 else "❌ No"
361
+
362
+ table.add_row(
363
+ match.template_id,
364
+ confidence,
365
+ keywords or "-",
366
+ auto_run,
367
+ )
368
+
369
+ console.print(table)
370
+ console.print()
371
+
372
+ except Exception as e:
373
+ console.print(f"[red]Error:[/red] {e}")
374
+ raise typer.Exit(code=1)
375
+
376
+
377
+ # =============================================================================
378
+ # Analytics Commands
379
+ # =============================================================================
380
+
381
+
382
+
@@ -0,0 +1,59 @@
1
+ """CLI Commands for Meta-Workflow System (Backward Compatible Entry Point).
2
+
3
+ This module maintains backward compatibility by re-exporting all CLI commands
4
+ from the cli_commands package.
5
+
6
+ For new code, import from the package directly:
7
+ from attune.meta_workflows.cli_commands import meta_workflow_app
8
+
9
+ Copyright 2025 Smart-AI-Memory
10
+ Licensed under Fair Source License 0.9
11
+ """
12
+
13
+ # Re-export all commands and the Typer app from the package
14
+ from .cli_commands import (
15
+ cleanup_executions,
16
+ create_agent,
17
+ create_team,
18
+ detect_intent,
19
+ generate_plan_cmd,
20
+ inspect_template,
21
+ list_runs,
22
+ list_templates,
23
+ meta_workflow_app,
24
+ natural_language_run,
25
+ run_workflow,
26
+ search_memory,
27
+ show_analytics,
28
+ show_execution,
29
+ show_migration_guide,
30
+ show_session_stats,
31
+ suggest_defaults_cmd,
32
+ )
33
+
34
+ __all__ = [
35
+ # Typer app
36
+ "meta_workflow_app",
37
+ # Template commands
38
+ "list_templates",
39
+ "inspect_template",
40
+ "generate_plan_cmd",
41
+ # Workflow commands
42
+ "run_workflow",
43
+ "natural_language_run",
44
+ "detect_intent",
45
+ # Analytics commands
46
+ "show_analytics",
47
+ "list_runs",
48
+ "show_execution",
49
+ "cleanup_executions",
50
+ # Memory commands
51
+ "search_memory",
52
+ "show_session_stats",
53
+ # Config commands
54
+ "suggest_defaults_cmd",
55
+ "show_migration_guide",
56
+ # Agent commands
57
+ "create_agent",
58
+ "create_team",
59
+ ]