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/__init__.py ADDED
@@ -0,0 +1,358 @@
1
+ """Empathy Framework - AI-Human Collaboration Library
2
+
3
+ A five-level maturity model for building AI systems that progress from
4
+ reactive responses to anticipatory problem prevention.
5
+
6
+ QUICK START:
7
+ from attune import EmpathyOS
8
+
9
+ # Create an EmpathyOS instance
10
+ empathy = EmpathyOS(user_id="developer@company.com")
11
+
12
+ # Use Level 4 (Anticipatory) for predictions
13
+ response = empathy.level_4_anticipatory(
14
+ user_input="How do I optimize database queries?",
15
+ context={"domain": "software"},
16
+ history=[]
17
+ )
18
+
19
+ print(f"Response: {response['response']}")
20
+ print(f"Predictions: {response.get('predictions', [])}")
21
+
22
+ # Store patterns in memory
23
+ empathy.stash("session_context", {"topic": "database optimization"})
24
+ empathy.persist_pattern(
25
+ content="Query optimization technique",
26
+ pattern_type="technique"
27
+ )
28
+
29
+ MEMORY OPERATIONS:
30
+ from attune import UnifiedMemory, Classification
31
+
32
+ # Initialize unified memory (auto-detects environment)
33
+ memory = UnifiedMemory(user_id="agent@company.com")
34
+
35
+ # Short-term (Redis-backed, TTL-based)
36
+ memory.stash("working_data", {"status": "processing"})
37
+ data = memory.retrieve("working_data")
38
+
39
+ # Long-term (persistent, classified)
40
+ result = memory.persist_pattern(
41
+ content="Optimization algorithm for X",
42
+ pattern_type="algorithm",
43
+ classification=Classification.INTERNAL,
44
+ )
45
+ pattern = memory.recall_pattern(result["pattern_id"])
46
+
47
+ KEY EXPORTS:
48
+ - EmpathyOS: Main orchestration class
49
+ - UnifiedMemory: Two-tier memory (short + long term)
50
+ - MemoryConfig, Environment: Memory configuration
51
+ - Classification, AccessTier: Security/access enums
52
+ - Level1-5 classes: Empathy level implementations
53
+
54
+ Copyright 2025 Smart AI Memory, LLC
55
+ Licensed under Fair Source 0.9
56
+ """
57
+
58
+ __version__ = "5.3.0"
59
+ __author__ = "Patrick Roebuck"
60
+ __email__ = "patrick.roebuck@smartaimemory.com"
61
+
62
+ # =============================================================================
63
+ # LAZY IMPORTS - Deferred loading for faster startup
64
+ # =============================================================================
65
+ # Instead of importing everything at module load, we use __getattr__ to load
66
+ # modules only when they're actually accessed. This reduces import time from
67
+ # ~1s to ~0.05s for simple use cases.
68
+
69
+ from typing import TYPE_CHECKING
70
+
71
+ if TYPE_CHECKING:
72
+ # Type hints for IDE support (not evaluated at runtime)
73
+ from .agent_monitoring import AgentMetrics, AgentMonitor, TeamMetrics
74
+ from .config import EmpathyConfig, load_config
75
+ from .coordination import (
76
+ AgentCoordinator,
77
+ AgentTask,
78
+ ConflictResolver,
79
+ ResolutionResult,
80
+ ResolutionStrategy,
81
+ TeamPriorities,
82
+ TeamSession,
83
+ )
84
+ from .core import EmpathyOS
85
+ from .emergence import EmergenceDetector
86
+ from .exceptions import (
87
+ CollaborationStateError,
88
+ ConfidenceThresholdError,
89
+ EmpathyFrameworkError,
90
+ EmpathyLevelError,
91
+ FeedbackLoopError,
92
+ LeveragePointError,
93
+ PatternNotFoundError,
94
+ TrustThresholdError,
95
+ ValidationError,
96
+ )
97
+ from .feedback_loops import FeedbackLoopDetector
98
+ from .levels import (
99
+ Level1Reactive,
100
+ Level2Guided,
101
+ Level3Proactive,
102
+ Level4Anticipatory,
103
+ Level5Systems,
104
+ )
105
+ from .leverage_points import LeveragePointAnalyzer
106
+ from .logging_config import LoggingConfig, get_logger
107
+ from .memory import (
108
+ AccessTier,
109
+ AgentCredentials,
110
+ AuditEvent,
111
+ AuditLogger,
112
+ Classification,
113
+ ClassificationRules,
114
+ ClaudeMemoryConfig,
115
+ ClaudeMemoryLoader,
116
+ ConflictContext,
117
+ EncryptionManager,
118
+ Environment,
119
+ MemDocsStorage,
120
+ MemoryConfig,
121
+ MemoryPermissionError,
122
+ PatternMetadata,
123
+ PIIDetection,
124
+ PIIPattern,
125
+ PIIScrubber,
126
+ RedisShortTermMemory,
127
+ SecretDetection,
128
+ SecretsDetector,
129
+ SecretType,
130
+ SecureMemDocsIntegration,
131
+ SecurePattern,
132
+ SecurityError,
133
+ SecurityViolation,
134
+ Severity,
135
+ StagedPattern,
136
+ TTLStrategy,
137
+ UnifiedMemory,
138
+ check_redis_connection,
139
+ detect_secrets,
140
+ get_railway_redis,
141
+ get_redis_config,
142
+ get_redis_memory,
143
+ )
144
+ from .pattern_library import Pattern, PatternLibrary, PatternMatch
145
+ from .persistence import MetricsCollector, PatternPersistence, StateManager
146
+ from .trust_building import TrustBuildingBehaviors
147
+
148
+ # Mapping of attribute names to their module paths
149
+ _LAZY_IMPORTS: dict[str, tuple[str, str]] = {
150
+ # agent_monitoring
151
+ "AgentMetrics": (".agent_monitoring", "AgentMetrics"),
152
+ "AgentMonitor": (".agent_monitoring", "AgentMonitor"),
153
+ "TeamMetrics": (".agent_monitoring", "TeamMetrics"),
154
+ # config
155
+ "EmpathyConfig": (".config", "EmpathyConfig"),
156
+ "load_config": (".config", "load_config"),
157
+ # coordination
158
+ "AgentCoordinator": (".coordination", "AgentCoordinator"),
159
+ "AgentTask": (".coordination", "AgentTask"),
160
+ "ConflictResolver": (".coordination", "ConflictResolver"),
161
+ "ResolutionResult": (".coordination", "ResolutionResult"),
162
+ "ResolutionStrategy": (".coordination", "ResolutionStrategy"),
163
+ "TeamPriorities": (".coordination", "TeamPriorities"),
164
+ "TeamSession": (".coordination", "TeamSession"),
165
+ # core
166
+ "EmpathyOS": (".core", "EmpathyOS"),
167
+ # emergence
168
+ "EmergenceDetector": (".emergence", "EmergenceDetector"),
169
+ # exceptions
170
+ "CollaborationStateError": (".exceptions", "CollaborationStateError"),
171
+ "ConfidenceThresholdError": (".exceptions", "ConfidenceThresholdError"),
172
+ "EmpathyFrameworkError": (".exceptions", "EmpathyFrameworkError"),
173
+ "EmpathyLevelError": (".exceptions", "EmpathyLevelError"),
174
+ "FeedbackLoopError": (".exceptions", "FeedbackLoopError"),
175
+ "LeveragePointError": (".exceptions", "LeveragePointError"),
176
+ "PatternNotFoundError": (".exceptions", "PatternNotFoundError"),
177
+ "TrustThresholdError": (".exceptions", "TrustThresholdError"),
178
+ "ValidationError": (".exceptions", "ValidationError"),
179
+ # feedback_loops
180
+ "FeedbackLoopDetector": (".feedback_loops", "FeedbackLoopDetector"),
181
+ # levels
182
+ "Level1Reactive": (".levels", "Level1Reactive"),
183
+ "Level2Guided": (".levels", "Level2Guided"),
184
+ "Level3Proactive": (".levels", "Level3Proactive"),
185
+ "Level4Anticipatory": (".levels", "Level4Anticipatory"),
186
+ "Level5Systems": (".levels", "Level5Systems"),
187
+ # leverage_points
188
+ "LeveragePointAnalyzer": (".leverage_points", "LeveragePointAnalyzer"),
189
+ # logging_config
190
+ "LoggingConfig": (".logging_config", "LoggingConfig"),
191
+ "get_logger": (".logging_config", "get_logger"),
192
+ # memory module
193
+ "AccessTier": (".memory", "AccessTier"),
194
+ "AgentCredentials": (".memory", "AgentCredentials"),
195
+ "AuditEvent": (".memory", "AuditEvent"),
196
+ "AuditLogger": (".memory", "AuditLogger"),
197
+ "Classification": (".memory", "Classification"),
198
+ "ClassificationRules": (".memory", "ClassificationRules"),
199
+ "ClaudeMemoryConfig": (".memory", "ClaudeMemoryConfig"),
200
+ "ClaudeMemoryLoader": (".memory", "ClaudeMemoryLoader"),
201
+ "ConflictContext": (".memory", "ConflictContext"),
202
+ "EncryptionManager": (".memory", "EncryptionManager"),
203
+ "Environment": (".memory", "Environment"),
204
+ "MemDocsStorage": (".memory", "MemDocsStorage"),
205
+ "MemoryConfig": (".memory", "MemoryConfig"),
206
+ "MemoryPermissionError": (".memory", "MemoryPermissionError"),
207
+ "PatternMetadata": (".memory", "PatternMetadata"),
208
+ "PIIDetection": (".memory", "PIIDetection"),
209
+ "PIIPattern": (".memory", "PIIPattern"),
210
+ "PIIScrubber": (".memory", "PIIScrubber"),
211
+ "RedisShortTermMemory": (".memory", "RedisShortTermMemory"),
212
+ "SecretDetection": (".memory", "SecretDetection"),
213
+ "SecretsDetector": (".memory", "SecretsDetector"),
214
+ "SecretType": (".memory", "SecretType"),
215
+ "SecureMemDocsIntegration": (".memory", "SecureMemDocsIntegration"),
216
+ "SecurePattern": (".memory", "SecurePattern"),
217
+ "SecurityError": (".memory", "SecurityError"),
218
+ "SecurityViolation": (".memory", "SecurityViolation"),
219
+ "Severity": (".memory", "Severity"),
220
+ "StagedPattern": (".memory", "StagedPattern"),
221
+ "TTLStrategy": (".memory", "TTLStrategy"),
222
+ "UnifiedMemory": (".memory", "UnifiedMemory"),
223
+ "check_redis_connection": (".memory", "check_redis_connection"),
224
+ "detect_secrets": (".memory", "detect_secrets"),
225
+ "get_railway_redis": (".memory", "get_railway_redis"),
226
+ "get_redis_config": (".memory", "get_redis_config"),
227
+ "get_redis_memory": (".memory", "get_redis_memory"),
228
+ # pattern_library
229
+ "Pattern": (".pattern_library", "Pattern"),
230
+ "PatternLibrary": (".pattern_library", "PatternLibrary"),
231
+ "PatternMatch": (".pattern_library", "PatternMatch"),
232
+ # persistence
233
+ "MetricsCollector": (".persistence", "MetricsCollector"),
234
+ "PatternPersistence": (".persistence", "PatternPersistence"),
235
+ "StateManager": (".persistence", "StateManager"),
236
+ # trust_building
237
+ "TrustBuildingBehaviors": (".trust_building", "TrustBuildingBehaviors"),
238
+ }
239
+
240
+ # Cache for loaded modules
241
+ _loaded_modules: dict[str, object] = {}
242
+
243
+
244
+ def __getattr__(name: str) -> object:
245
+ """Lazy import handler - loads modules only when accessed."""
246
+ if name in _LAZY_IMPORTS:
247
+ module_path, attr_name = _LAZY_IMPORTS[name]
248
+
249
+ # Check cache first
250
+ cache_key = f"{module_path}.{attr_name}"
251
+ if cache_key in _loaded_modules:
252
+ return _loaded_modules[cache_key]
253
+
254
+ # Import the module and get the attribute
255
+ import importlib
256
+
257
+ module = importlib.import_module(module_path, package="attune")
258
+ attr = getattr(module, attr_name)
259
+
260
+ # Cache and return
261
+ _loaded_modules[cache_key] = attr
262
+ return attr
263
+
264
+ raise AttributeError(f"module 'attune' has no attribute '{name}'")
265
+
266
+
267
+ __all__ = [
268
+ "AccessTier",
269
+ "AgentCoordinator",
270
+ "AgentCredentials",
271
+ "AgentMetrics",
272
+ # Monitoring (Multi-Agent)
273
+ "AgentMonitor",
274
+ "AgentTask",
275
+ "AuditEvent",
276
+ # Security - Audit
277
+ "AuditLogger",
278
+ "Classification",
279
+ "ClassificationRules",
280
+ # Claude Memory
281
+ "ClaudeMemoryConfig",
282
+ "ClaudeMemoryLoader",
283
+ "CollaborationStateError",
284
+ "ConfidenceThresholdError",
285
+ "ConflictContext",
286
+ # Coordination (Multi-Agent)
287
+ "ConflictResolver",
288
+ "EmergenceDetector",
289
+ # Configuration
290
+ "EmpathyConfig",
291
+ # Exceptions
292
+ "EmpathyFrameworkError",
293
+ "EmpathyLevelError",
294
+ "EmpathyOS",
295
+ "EncryptionManager",
296
+ "Environment",
297
+ "FeedbackLoopDetector",
298
+ "FeedbackLoopError",
299
+ "Level1Reactive",
300
+ "Level2Guided",
301
+ "Level3Proactive",
302
+ "Level4Anticipatory",
303
+ "Level5Systems",
304
+ "LeveragePointAnalyzer",
305
+ "LeveragePointError",
306
+ "LoggingConfig",
307
+ "MemDocsStorage",
308
+ "MemoryConfig",
309
+ "MemoryPermissionError",
310
+ "MetricsCollector",
311
+ "PIIDetection",
312
+ "PIIPattern",
313
+ # Security - PII
314
+ "PIIScrubber",
315
+ "Pattern",
316
+ # Pattern Library
317
+ "PatternLibrary",
318
+ "PatternMatch",
319
+ "PatternMetadata",
320
+ "PatternNotFoundError",
321
+ # Persistence
322
+ "PatternPersistence",
323
+ # Redis Short-Term Memory
324
+ "RedisShortTermMemory",
325
+ "ResolutionResult",
326
+ "ResolutionStrategy",
327
+ "SecretDetection",
328
+ "SecretType",
329
+ # Security - Secrets
330
+ "SecretsDetector",
331
+ # Long-term Memory
332
+ "SecureMemDocsIntegration",
333
+ "SecurePattern",
334
+ "SecurityError",
335
+ "SecurityViolation",
336
+ "Severity",
337
+ "StagedPattern",
338
+ "StateManager",
339
+ "TTLStrategy",
340
+ "TeamMetrics",
341
+ "TeamPriorities",
342
+ "TeamSession",
343
+ # Trust
344
+ "TrustBuildingBehaviors",
345
+ "TrustThresholdError",
346
+ # Unified Memory Interface
347
+ "UnifiedMemory",
348
+ "ValidationError",
349
+ "check_redis_connection",
350
+ "detect_secrets",
351
+ # Logging
352
+ "get_logger",
353
+ "get_railway_redis",
354
+ "get_redis_config",
355
+ # Redis Configuration
356
+ "get_redis_memory",
357
+ "load_config",
358
+ ]
@@ -0,0 +1,13 @@
1
+ """Adaptive prompting system for dynamic model and compression selection.
2
+
3
+ Copyright 2026 Smart-AI-Memory
4
+ Licensed under Fair Source License 0.9
5
+ """
6
+
7
+ from attune.adaptive.task_complexity import (
8
+ ComplexityScore,
9
+ TaskComplexity,
10
+ TaskComplexityScorer,
11
+ )
12
+
13
+ __all__ = ["TaskComplexity", "ComplexityScore", "TaskComplexityScorer"]
@@ -0,0 +1,127 @@
1
+ """Task complexity scoring for adaptive prompt selection.
2
+
3
+ Uses simple heuristics (token count, LOC) to classify tasks as
4
+ simple, moderate, complex, or very complex, enabling dynamic
5
+ model tier and compression level selection.
6
+
7
+ Copyright 2026 Smart-AI-Memory
8
+ Licensed under Fair Source License 0.9
9
+ """
10
+
11
+ from dataclasses import dataclass
12
+ from enum import Enum
13
+
14
+ try:
15
+ import tiktoken
16
+ except ImportError:
17
+ tiktoken = None # type: ignore[assignment]
18
+
19
+
20
+ class TaskComplexity(Enum):
21
+ """Task complexity levels for adaptive prompting."""
22
+
23
+ SIMPLE = "simple" # <100 tokens, <50 LOC
24
+ MODERATE = "moderate" # 100-500 tokens, 50-200 LOC
25
+ COMPLEX = "complex" # 500-2000 tokens, 200-1000 LOC
26
+ VERY_COMPLEX = "very_complex" # >2000 tokens, >1000 LOC
27
+
28
+
29
+ @dataclass
30
+ class ComplexityScore:
31
+ """Task complexity scoring result.
32
+
33
+ Attributes:
34
+ token_count: Estimated input tokens
35
+ line_count: Lines of code in context
36
+ file_count: Number of files involved
37
+ complexity_level: Classified complexity
38
+ confidence: Confidence in classification (0-1)
39
+ """
40
+
41
+ token_count: int
42
+ line_count: int
43
+ file_count: int
44
+ complexity_level: TaskComplexity
45
+ confidence: float
46
+
47
+
48
+ class TaskComplexityScorer:
49
+ """Scores task complexity using simple heuristics.
50
+
51
+ Uses token counting (via tiktoken if available) and line counting
52
+ to estimate task complexity for adaptive prompt selection.
53
+
54
+ Usage:
55
+ scorer = TaskComplexityScorer()
56
+ score = scorer.score_task(
57
+ description="Refactor authentication module",
58
+ context=source_code,
59
+ files=["auth.py", "session.py"]
60
+ )
61
+
62
+ if score.complexity_level == TaskComplexity.VERY_COMPLEX:
63
+ use_premium_model()
64
+ """
65
+
66
+ def __init__(self):
67
+ """Initialize complexity scorer."""
68
+ if tiktoken:
69
+ self.tokenizer = tiktoken.get_encoding("cl100k_base")
70
+ else:
71
+ self.tokenizer = None
72
+
73
+ def score_task(
74
+ self,
75
+ description: str,
76
+ context: str | None = None,
77
+ files: list[str] | None = None,
78
+ ) -> ComplexityScore:
79
+ """Score task complexity.
80
+
81
+ Args:
82
+ description: Task description
83
+ context: Optional context (code, docs, etc.)
84
+ files: Optional list of file paths
85
+
86
+ Returns:
87
+ ComplexityScore with classification and metrics
88
+ """
89
+ # Count tokens
90
+ if self.tokenizer:
91
+ token_count = len(self.tokenizer.encode(description))
92
+ if context:
93
+ token_count += len(self.tokenizer.encode(context))
94
+ else:
95
+ # Fallback: rough estimate (4 chars per token)
96
+ token_count = len(description) // 4
97
+ if context:
98
+ token_count += len(context) // 4
99
+
100
+ # Count lines of code
101
+ line_count = 0
102
+ if context:
103
+ line_count = len(context.split("\n"))
104
+
105
+ # Count files
106
+ file_count = len(files) if files else 0
107
+
108
+ # Determine complexity level using thresholds
109
+ if token_count < 100 and line_count < 50:
110
+ complexity = TaskComplexity.SIMPLE
111
+ elif token_count < 500 and line_count < 200:
112
+ complexity = TaskComplexity.MODERATE
113
+ elif token_count < 2000 and line_count < 1000:
114
+ complexity = TaskComplexity.COMPLEX
115
+ else:
116
+ complexity = TaskComplexity.VERY_COMPLEX
117
+
118
+ # Confidence is moderate for simple heuristics
119
+ confidence = 0.8 if self.tokenizer else 0.6
120
+
121
+ return ComplexityScore(
122
+ token_count=token_count,
123
+ line_count=line_count,
124
+ file_count=file_count,
125
+ complexity_level=complexity,
126
+ confidence=confidence,
127
+ )