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
attune/models/tasks.py ADDED
@@ -0,0 +1,359 @@
1
+ """Shared Task-Type Schema for Empathy Framework
2
+
3
+ Provides a unified vocabulary for task types across:
4
+ - attune_llm.routing.ModelRouter
5
+ - src/attune/workflows.WorkflowBase
6
+
7
+ This module defines:
8
+ - TaskType enum with canonical task names
9
+ - Task-to-tier mappings
10
+ - Task normalization and lookup functions
11
+
12
+ Copyright 2025 Smart-AI-Memory
13
+ Licensed under Fair Source License 0.9
14
+ """
15
+
16
+ from dataclasses import dataclass
17
+ from enum import Enum
18
+
19
+ from .registry import ModelTier
20
+
21
+
22
+ class TaskType(Enum):
23
+ """Canonical task types for model routing.
24
+
25
+ Tasks are organized by their typical tier:
26
+ - CHEAP tier: Simple, fast tasks
27
+ - CAPABLE tier: Standard development work
28
+ - PREMIUM tier: Complex reasoning and coordination
29
+ """
30
+
31
+ # =========================================================================
32
+ # CHEAP TIER TASKS (~$0.15-1.00/M input)
33
+ # Fast models for simple, well-defined tasks
34
+ # =========================================================================
35
+ SUMMARIZE = "summarize"
36
+ CLASSIFY = "classify"
37
+ TRIAGE = "triage"
38
+ MATCH_PATTERN = "match_pattern"
39
+ EXTRACT_TOPICS = "extract_topics"
40
+ LINT_CHECK = "lint_check"
41
+ FORMAT_CODE = "format_code"
42
+ SIMPLE_QA = "simple_qa"
43
+ CATEGORIZE = "categorize"
44
+
45
+ # =========================================================================
46
+ # CAPABLE TIER TASKS (~$2.50-3.00/M input)
47
+ # Balanced models for standard development work
48
+ # =========================================================================
49
+ GENERATE_CODE = "generate_code"
50
+ FIX_BUG = "fix_bug"
51
+ REVIEW_SECURITY = "review_security"
52
+ ANALYZE_PERFORMANCE = "analyze_performance"
53
+ WRITE_TESTS = "write_tests"
54
+ REFACTOR = "refactor"
55
+ EXPLAIN_CODE = "explain_code"
56
+ DOCUMENT_CODE = "document_code"
57
+ ANALYZE_ERROR = "analyze_error"
58
+ SUGGEST_FIX = "suggest_fix"
59
+
60
+ # =========================================================================
61
+ # PREMIUM TIER TASKS (~$15.00/M input)
62
+ # Highest capability for complex reasoning
63
+ # =========================================================================
64
+ COORDINATE = "coordinate"
65
+ SYNTHESIZE_RESULTS = "synthesize_results"
66
+ ARCHITECTURAL_DECISION = "architectural_decision"
67
+ NOVEL_PROBLEM = "novel_problem"
68
+ FINAL_REVIEW = "final_review"
69
+ COMPLEX_REASONING = "complex_reasoning"
70
+ MULTI_STEP_PLANNING = "multi_step_planning"
71
+ CRITICAL_DECISION = "critical_decision"
72
+
73
+
74
+ @dataclass(frozen=True)
75
+ class TaskInfo:
76
+ """Information about a task type."""
77
+
78
+ task_type: TaskType
79
+ tier: ModelTier
80
+ description: str
81
+
82
+
83
+ # =============================================================================
84
+ # TASK-TO-TIER MAPPINGS
85
+ # =============================================================================
86
+
87
+ # Cheap tier tasks
88
+ CHEAP_TASKS: frozenset[str] = frozenset(
89
+ [
90
+ TaskType.SUMMARIZE.value,
91
+ TaskType.CLASSIFY.value,
92
+ TaskType.TRIAGE.value,
93
+ TaskType.MATCH_PATTERN.value,
94
+ TaskType.EXTRACT_TOPICS.value,
95
+ TaskType.LINT_CHECK.value,
96
+ TaskType.FORMAT_CODE.value,
97
+ TaskType.SIMPLE_QA.value,
98
+ TaskType.CATEGORIZE.value,
99
+ ],
100
+ )
101
+
102
+ # Capable tier tasks
103
+ CAPABLE_TASKS: frozenset[str] = frozenset(
104
+ [
105
+ TaskType.GENERATE_CODE.value,
106
+ TaskType.FIX_BUG.value,
107
+ TaskType.REVIEW_SECURITY.value,
108
+ TaskType.ANALYZE_PERFORMANCE.value,
109
+ TaskType.WRITE_TESTS.value,
110
+ TaskType.REFACTOR.value,
111
+ TaskType.EXPLAIN_CODE.value,
112
+ TaskType.DOCUMENT_CODE.value,
113
+ TaskType.ANALYZE_ERROR.value,
114
+ TaskType.SUGGEST_FIX.value,
115
+ ],
116
+ )
117
+
118
+ # Premium tier tasks
119
+ PREMIUM_TASKS: frozenset[str] = frozenset(
120
+ [
121
+ TaskType.COORDINATE.value,
122
+ TaskType.SYNTHESIZE_RESULTS.value,
123
+ TaskType.ARCHITECTURAL_DECISION.value,
124
+ TaskType.NOVEL_PROBLEM.value,
125
+ TaskType.FINAL_REVIEW.value,
126
+ TaskType.COMPLEX_REASONING.value,
127
+ TaskType.MULTI_STEP_PLANNING.value,
128
+ TaskType.CRITICAL_DECISION.value,
129
+ ],
130
+ )
131
+
132
+ # Complete mapping for lookup
133
+ TASK_TIER_MAP: dict[str, ModelTier] = {
134
+ **dict.fromkeys(CHEAP_TASKS, ModelTier.CHEAP),
135
+ **dict.fromkeys(CAPABLE_TASKS, ModelTier.CAPABLE),
136
+ **dict.fromkeys(PREMIUM_TASKS, ModelTier.PREMIUM),
137
+ }
138
+
139
+ # =============================================================================
140
+ # BATCH API TASK CLASSIFICATION
141
+ # Tasks eligible for Anthropic Batch API (50% cost savings, 24-hour processing)
142
+ # =============================================================================
143
+
144
+ # Tasks eligible for batch processing (non-interactive, non-urgent)
145
+ BATCH_ELIGIBLE_TASKS: frozenset[str] = frozenset(
146
+ [
147
+ # Analytics & Reporting
148
+ "analyze_logs",
149
+ "generate_report",
150
+ "compute_metrics",
151
+ "aggregate_stats",
152
+ # Data Processing
153
+ "classify_bulk",
154
+ "extract_bulk",
155
+ "transform_bulk",
156
+ "validate_bulk",
157
+ # Code Analysis (bulk)
158
+ "analyze_codebase",
159
+ "detect_patterns",
160
+ "compute_complexity",
161
+ "find_vulnerabilities",
162
+ # Content Generation (non-urgent)
163
+ "generate_docs",
164
+ "generate_tests",
165
+ "generate_comments",
166
+ "translate_bulk",
167
+ # Evaluation & Testing
168
+ "evaluate_responses",
169
+ "run_test_suite",
170
+ "validate_outputs",
171
+ # Existing tasks that can be batched
172
+ TaskType.SUMMARIZE.value, # Batch summarization
173
+ TaskType.CLASSIFY.value, # Bulk classification
174
+ TaskType.DOCUMENT_CODE.value, # Batch documentation
175
+ ]
176
+ )
177
+
178
+ # Tasks requiring real-time response (cannot be batched)
179
+ REALTIME_REQUIRED_TASKS: frozenset[str] = frozenset(
180
+ [
181
+ # Interactive
182
+ "chat",
183
+ "interactive_debug",
184
+ "live_coding",
185
+ "user_query",
186
+ "workflow_step",
187
+ # Urgent Actions
188
+ "critical_fix",
189
+ "security_incident",
190
+ "emergency_response",
191
+ # Real-time Analysis
192
+ "stream_analysis",
193
+ "realtime_monitoring",
194
+ ]
195
+ )
196
+
197
+
198
+ # =============================================================================
199
+ # HELPER FUNCTIONS
200
+ # =============================================================================
201
+
202
+
203
+ def normalize_task_type(task_type: str) -> str:
204
+ """Normalize a task type string for lookup.
205
+
206
+ Converts to lowercase and normalizes separators to underscores.
207
+
208
+ Args:
209
+ task_type: Task type string (e.g., "Fix-Bug", "fix bug", "FIX_BUG")
210
+
211
+ Returns:
212
+ Normalized task type (e.g., "fix_bug")
213
+
214
+ """
215
+ return task_type.lower().replace("-", "_").replace(" ", "_")
216
+
217
+
218
+ def get_tier_for_task(task_type: str | TaskType) -> ModelTier:
219
+ """Get the appropriate tier for a task type.
220
+
221
+ Args:
222
+ task_type: Task type string or TaskType enum
223
+
224
+ Returns:
225
+ ModelTier for the task (defaults to CAPABLE for unknown tasks)
226
+
227
+ Example:
228
+ >>> get_tier_for_task("summarize")
229
+ ModelTier.CHEAP
230
+ >>> get_tier_for_task("fix_bug")
231
+ ModelTier.CAPABLE
232
+ >>> get_tier_for_task("coordinate")
233
+ ModelTier.PREMIUM
234
+ >>> get_tier_for_task("unknown_task")
235
+ ModelTier.CAPABLE
236
+
237
+ """
238
+ # Handle TaskType enum
239
+ if isinstance(task_type, TaskType):
240
+ task_str = task_type.value
241
+ else:
242
+ task_str = normalize_task_type(task_type)
243
+
244
+ # Lookup in mapping
245
+ return TASK_TIER_MAP.get(task_str, ModelTier.CAPABLE)
246
+
247
+
248
+ def get_tasks_for_tier(tier: ModelTier) -> list[str]:
249
+ """Get all task types for a given tier.
250
+
251
+ Args:
252
+ tier: ModelTier to get tasks for
253
+
254
+ Returns:
255
+ List of task type strings
256
+
257
+ """
258
+ if tier == ModelTier.CHEAP:
259
+ return list(CHEAP_TASKS)
260
+ if tier == ModelTier.CAPABLE:
261
+ return list(CAPABLE_TASKS)
262
+ if tier == ModelTier.PREMIUM:
263
+ return list(PREMIUM_TASKS)
264
+ return []
265
+
266
+
267
+ def get_all_tasks() -> dict[str, list[str]]:
268
+ """Get all known task types organized by tier.
269
+
270
+ Returns:
271
+ Dict mapping tier name to list of task types
272
+
273
+ """
274
+ return {
275
+ "cheap": list(CHEAP_TASKS),
276
+ "capable": list(CAPABLE_TASKS),
277
+ "premium": list(PREMIUM_TASKS),
278
+ }
279
+
280
+
281
+ def is_known_task(task_type: str) -> bool:
282
+ """Check if a task type is known/defined.
283
+
284
+ Args:
285
+ task_type: Task type string
286
+
287
+ Returns:
288
+ True if task is defined, False otherwise
289
+
290
+ """
291
+ normalized = normalize_task_type(task_type)
292
+ return normalized in TASK_TIER_MAP
293
+
294
+
295
+ # =============================================================================
296
+ # TASK INFO REGISTRY
297
+ # =============================================================================
298
+ # Detailed information about each task type
299
+
300
+ TASK_INFO: dict[TaskType, TaskInfo] = {
301
+ # Cheap tasks
302
+ TaskType.SUMMARIZE: TaskInfo(
303
+ TaskType.SUMMARIZE,
304
+ ModelTier.CHEAP,
305
+ "Summarize text or code into concise form",
306
+ ),
307
+ TaskType.CLASSIFY: TaskInfo(
308
+ TaskType.CLASSIFY,
309
+ ModelTier.CHEAP,
310
+ "Classify input into predefined categories",
311
+ ),
312
+ TaskType.TRIAGE: TaskInfo(
313
+ TaskType.TRIAGE,
314
+ ModelTier.CHEAP,
315
+ "Quick assessment and prioritization",
316
+ ),
317
+ TaskType.SIMPLE_QA: TaskInfo(
318
+ TaskType.SIMPLE_QA,
319
+ ModelTier.CHEAP,
320
+ "Answer simple, factual questions",
321
+ ),
322
+ # Capable tasks
323
+ TaskType.GENERATE_CODE: TaskInfo(
324
+ TaskType.GENERATE_CODE,
325
+ ModelTier.CAPABLE,
326
+ "Generate new code from requirements",
327
+ ),
328
+ TaskType.FIX_BUG: TaskInfo(
329
+ TaskType.FIX_BUG,
330
+ ModelTier.CAPABLE,
331
+ "Identify and fix bugs in code",
332
+ ),
333
+ TaskType.REVIEW_SECURITY: TaskInfo(
334
+ TaskType.REVIEW_SECURITY,
335
+ ModelTier.CAPABLE,
336
+ "Review code for security vulnerabilities",
337
+ ),
338
+ TaskType.WRITE_TESTS: TaskInfo(
339
+ TaskType.WRITE_TESTS,
340
+ ModelTier.CAPABLE,
341
+ "Write unit or integration tests",
342
+ ),
343
+ # Premium tasks
344
+ TaskType.COORDINATE: TaskInfo(
345
+ TaskType.COORDINATE,
346
+ ModelTier.PREMIUM,
347
+ "Coordinate multi-agent workflows",
348
+ ),
349
+ TaskType.ARCHITECTURAL_DECISION: TaskInfo(
350
+ TaskType.ARCHITECTURAL_DECISION,
351
+ ModelTier.PREMIUM,
352
+ "Make complex architectural decisions",
353
+ ),
354
+ TaskType.COMPLEX_REASONING: TaskInfo(
355
+ TaskType.COMPLEX_REASONING,
356
+ ModelTier.PREMIUM,
357
+ "Handle complex multi-step reasoning",
358
+ ),
359
+ }
@@ -0,0 +1,71 @@
1
+ """Telemetry tracking and analytics.
2
+
3
+ Modular telemetry system for tracking LLM calls, workflows, tests, and agent performance.
4
+
5
+ Copyright 2025 Smart-AI-Memory
6
+ Licensed under Fair Source License 0.9
7
+ """
8
+
9
+ # Data models
10
+ # Analytics
11
+ from .analytics import TelemetryAnalytics
12
+
13
+ # Backend interface
14
+ from .backend import TelemetryBackend
15
+ from .data_models import (
16
+ AgentAssignmentRecord,
17
+ CoverageRecord,
18
+ FileTestRecord,
19
+ LLMCallRecord,
20
+ TaskRoutingRecord,
21
+ TestExecutionRecord,
22
+ WorkflowRunRecord,
23
+ WorkflowStageRecord,
24
+ )
25
+
26
+ # Storage implementation
27
+ from .storage import TelemetryStore
28
+
29
+ # Singleton store instance
30
+ _store_instance: TelemetryStore | None = None
31
+
32
+
33
+ def get_telemetry_store() -> TelemetryStore:
34
+ """Get singleton telemetry store instance."""
35
+ global _store_instance
36
+ if _store_instance is None:
37
+ _store_instance = TelemetryStore()
38
+ return _store_instance
39
+
40
+
41
+ def log_llm_call(record: LLMCallRecord):
42
+ """Log an LLM API call."""
43
+ get_telemetry_store().log_llm_call(record)
44
+
45
+
46
+ def log_workflow_run(record: WorkflowRunRecord):
47
+ """Log a workflow run."""
48
+ get_telemetry_store().log_workflow_run(record)
49
+
50
+
51
+ __all__ = [
52
+ # Data models
53
+ "LLMCallRecord",
54
+ "WorkflowStageRecord",
55
+ "WorkflowRunRecord",
56
+ "TaskRoutingRecord",
57
+ "TestExecutionRecord",
58
+ "CoverageRecord",
59
+ "AgentAssignmentRecord",
60
+ "FileTestRecord",
61
+ # Backend
62
+ "TelemetryBackend",
63
+ # Storage
64
+ "TelemetryStore",
65
+ # Analytics
66
+ "TelemetryAnalytics",
67
+ # Utilities
68
+ "get_telemetry_store",
69
+ "log_llm_call",
70
+ "log_workflow_run",
71
+ ]