maestro-care 0.0.1__tar.gz

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 (332) hide show
  1. maestro_care-0.0.1/.env.example +337 -0
  2. maestro_care-0.0.1/.gitignore +43 -0
  3. maestro_care-0.0.1/Makefile +49 -0
  4. maestro_care-0.0.1/PKG-INFO +263 -0
  5. maestro_care-0.0.1/README.md +209 -0
  6. maestro_care-0.0.1/TODO.md +4619 -0
  7. maestro_care-0.0.1/care/__init__.py +222 -0
  8. maestro_care-0.0.1/care/app.py +1780 -0
  9. maestro_care-0.0.1/care/assets/__init__.py +12 -0
  10. maestro_care-0.0.1/care/assets/airi_logo.png +0 -0
  11. maestro_care-0.0.1/care/assets/airi_logo_10.png +0 -0
  12. maestro_care-0.0.1/care/assets/airi_logo_12.png +0 -0
  13. maestro_care-0.0.1/care/assets/airi_logo_16.png +0 -0
  14. maestro_care-0.0.1/care/assets/airi_logo_8.png +0 -0
  15. maestro_care-0.0.1/care/builtin_tools.py +736 -0
  16. maestro_care-0.0.1/care/bulk_import.py +334 -0
  17. maestro_care-0.0.1/care/capability_priming.py +370 -0
  18. maestro_care-0.0.1/care/carl_summary.py +209 -0
  19. maestro_care-0.0.1/care/catalog.py +418 -0
  20. maestro_care-0.0.1/care/chain_export.py +231 -0
  21. maestro_care-0.0.1/care/cli.py +3208 -0
  22. maestro_care-0.0.1/care/config.py +1130 -0
  23. maestro_care-0.0.1/care/conflict.py +358 -0
  24. maestro_care-0.0.1/care/context_md.py +215 -0
  25. maestro_care-0.0.1/care/dotenv.py +166 -0
  26. maestro_care-0.0.1/care/evolution_session.py +410 -0
  27. maestro_care-0.0.1/care/first_run.py +502 -0
  28. maestro_care-0.0.1/care/generation.py +317 -0
  29. maestro_care-0.0.1/care/help.py +463 -0
  30. maestro_care-0.0.1/care/intermediate_artifacts.py +376 -0
  31. maestro_care-0.0.1/care/logging_setup.py +111 -0
  32. maestro_care-0.0.1/care/mage_summary.py +299 -0
  33. maestro_care-0.0.1/care/marketplace.py +216 -0
  34. maestro_care-0.0.1/care/memory.py +752 -0
  35. maestro_care-0.0.1/care/memory_ltm.py +310 -0
  36. maestro_care-0.0.1/care/micro_evolution.py +526 -0
  37. maestro_care-0.0.1/care/platform.py +233 -0
  38. maestro_care-0.0.1/care/preflight.py +277 -0
  39. maestro_care-0.0.1/care/profiling.py +321 -0
  40. maestro_care-0.0.1/care/replay.py +460 -0
  41. maestro_care-0.0.1/care/runtime/__init__.py +641 -0
  42. maestro_care-0.0.1/care/runtime/agent_diff.py +671 -0
  43. maestro_care-0.0.1/care/runtime/artifacts.py +193 -0
  44. maestro_care-0.0.1/care/runtime/bulk_ops.py +543 -0
  45. maestro_care-0.0.1/care/runtime/cancellation.py +313 -0
  46. maestro_care-0.0.1/care/runtime/carl_streamer.py +384 -0
  47. maestro_care-0.0.1/care/runtime/chain_edit_view.py +88 -0
  48. maestro_care-0.0.1/care/runtime/chain_title.py +171 -0
  49. maestro_care-0.0.1/care/runtime/clipboard.py +135 -0
  50. maestro_care-0.0.1/care/runtime/collections.py +475 -0
  51. maestro_care-0.0.1/care/runtime/command_palette.py +619 -0
  52. maestro_care-0.0.1/care/runtime/cost_rollups.py +196 -0
  53. maestro_care-0.0.1/care/runtime/deck_builder.py +176 -0
  54. maestro_care-0.0.1/care/runtime/doctor.py +262 -0
  55. maestro_care-0.0.1/care/runtime/draft.py +251 -0
  56. maestro_care-0.0.1/care/runtime/edit_draft.py +622 -0
  57. maestro_care-0.0.1/care/runtime/empty_state.py +287 -0
  58. maestro_care-0.0.1/care/runtime/executor.py +387 -0
  59. maestro_care-0.0.1/care/runtime/fitness_plot.py +187 -0
  60. maestro_care-0.0.1/care/runtime/global_bindings.py +372 -0
  61. maestro_care-0.0.1/care/runtime/human_input.py +332 -0
  62. maestro_care-0.0.1/care/runtime/keystore.py +604 -0
  63. maestro_care-0.0.1/care/runtime/library_bundle.py +823 -0
  64. maestro_care-0.0.1/care/runtime/library_run.py +347 -0
  65. maestro_care-0.0.1/care/runtime/library_view.py +766 -0
  66. maestro_care-0.0.1/care/runtime/library_watcher.py +260 -0
  67. maestro_care-0.0.1/care/runtime/lineage.py +442 -0
  68. maestro_care-0.0.1/care/runtime/llm_client.py +302 -0
  69. maestro_care-0.0.1/care/runtime/local_run_history.py +572 -0
  70. maestro_care-0.0.1/care/runtime/log_discovery.py +207 -0
  71. maestro_care-0.0.1/care/runtime/mage_poster.py +287 -0
  72. maestro_care-0.0.1/care/runtime/pareto_plot.py +246 -0
  73. maestro_care-0.0.1/care/runtime/pricing.py +140 -0
  74. maestro_care-0.0.1/care/runtime/profiles.py +149 -0
  75. maestro_care-0.0.1/care/runtime/provenance.py +320 -0
  76. maestro_care-0.0.1/care/runtime/row_actions.py +540 -0
  77. maestro_care-0.0.1/care/runtime/run_context_draft.py +564 -0
  78. maestro_care-0.0.1/care/runtime/run_history.py +448 -0
  79. maestro_care-0.0.1/care/runtime/run_recorder.py +288 -0
  80. maestro_care-0.0.1/care/runtime/run_state.py +232 -0
  81. maestro_care-0.0.1/care/runtime/save_agent_form.py +719 -0
  82. maestro_care-0.0.1/care/runtime/session_artifacts.py +633 -0
  83. maestro_care-0.0.1/care/runtime/session_persistence.py +275 -0
  84. maestro_care-0.0.1/care/runtime/skill_runtime_adapter.py +406 -0
  85. maestro_care-0.0.1/care/runtime/status_bar.py +593 -0
  86. maestro_care-0.0.1/care/runtime/task_registry.py +439 -0
  87. maestro_care-0.0.1/care/runtime/telemetry.py +331 -0
  88. maestro_care-0.0.1/care/runtime/theme.py +476 -0
  89. maestro_care-0.0.1/care/runtime/user_paths.py +229 -0
  90. maestro_care-0.0.1/care/sandbox/__init__.py +136 -0
  91. maestro_care-0.0.1/care/sandbox/audit.py +307 -0
  92. maestro_care-0.0.1/care/sandbox/backend.py +227 -0
  93. maestro_care-0.0.1/care/sandbox/docker.py +444 -0
  94. maestro_care-0.0.1/care/sandbox/e2b.py +436 -0
  95. maestro_care-0.0.1/care/sandbox/firejail.py +497 -0
  96. maestro_care-0.0.1/care/sandbox/local.py +255 -0
  97. maestro_care-0.0.1/care/sandbox/network_policy.py +181 -0
  98. maestro_care-0.0.1/care/sandbox/output_mediation.py +401 -0
  99. maestro_care-0.0.1/care/sandbox/resources.py +352 -0
  100. maestro_care-0.0.1/care/sandbox/trust.py +284 -0
  101. maestro_care-0.0.1/care/screens/__init__.py +164 -0
  102. maestro_care-0.0.1/care/screens/artifacts.py +1380 -0
  103. maestro_care-0.0.1/care/screens/catalog.py +487 -0
  104. maestro_care-0.0.1/care/screens/chat.py +13021 -0
  105. maestro_care-0.0.1/care/screens/command_palette.py +252 -0
  106. maestro_care-0.0.1/care/screens/confirm.py +118 -0
  107. maestro_care-0.0.1/care/screens/conflict.py +202 -0
  108. maestro_care-0.0.1/care/screens/cost.py +306 -0
  109. maestro_care-0.0.1/care/screens/demo.py +90 -0
  110. maestro_care-0.0.1/care/screens/diff.py +304 -0
  111. maestro_care-0.0.1/care/screens/edit_agent.py +373 -0
  112. maestro_care-0.0.1/care/screens/evolution.py +1340 -0
  113. maestro_care-0.0.1/care/screens/evolution_compare.py +343 -0
  114. maestro_care-0.0.1/care/screens/evolution_dashboard.py +612 -0
  115. maestro_care-0.0.1/care/screens/evolution_launch.py +288 -0
  116. maestro_care-0.0.1/care/screens/execution.py +366 -0
  117. maestro_care-0.0.1/care/screens/export.py +247 -0
  118. maestro_care-0.0.1/care/screens/export_chain.py +279 -0
  119. maestro_care-0.0.1/care/screens/generation.py +368 -0
  120. maestro_care-0.0.1/care/screens/help.py +313 -0
  121. maestro_care-0.0.1/care/screens/human_input.py +245 -0
  122. maestro_care-0.0.1/care/screens/import_bundle.py +365 -0
  123. maestro_care-0.0.1/care/screens/inspection.py +1629 -0
  124. maestro_care-0.0.1/care/screens/library.py +1531 -0
  125. maestro_care-0.0.1/care/screens/lineage.py +273 -0
  126. maestro_care-0.0.1/care/screens/logs.py +309 -0
  127. maestro_care-0.0.1/care/screens/marketplace.py +562 -0
  128. maestro_care-0.0.1/care/screens/multi_compose.py +141 -0
  129. maestro_care-0.0.1/care/screens/profile.py +239 -0
  130. maestro_care-0.0.1/care/screens/query.py +284 -0
  131. maestro_care-0.0.1/care/screens/replay.py +253 -0
  132. maestro_care-0.0.1/care/screens/resume.py +153 -0
  133. maestro_care-0.0.1/care/screens/run_context.py +341 -0
  134. maestro_care-0.0.1/care/screens/runs.py +328 -0
  135. maestro_care-0.0.1/care/screens/sandbox_trust.py +353 -0
  136. maestro_care-0.0.1/care/screens/save_agent.py +353 -0
  137. maestro_care-0.0.1/care/screens/save_report.py +290 -0
  138. maestro_care-0.0.1/care/screens/settings.py +532 -0
  139. maestro_care-0.0.1/care/screens/tag_editor.py +298 -0
  140. maestro_care-0.0.1/care/screens/task_list.py +271 -0
  141. maestro_care-0.0.1/care/screens/use_it_now.py +390 -0
  142. maestro_care-0.0.1/care/screens/welcome.py +384 -0
  143. maestro_care-0.0.1/care/skill_enforcement.py +215 -0
  144. maestro_care-0.0.1/care/skills.py +180 -0
  145. maestro_care-0.0.1/care/stage_regeneration.py +211 -0
  146. maestro_care-0.0.1/care/styles/demo.tcss +25 -0
  147. maestro_care-0.0.1/care/tool_planning.py +322 -0
  148. maestro_care-0.0.1/care/tool_synthesis.py +667 -0
  149. maestro_care-0.0.1/care/tools.py +107 -0
  150. maestro_care-0.0.1/care/widgets/__init__.py +23 -0
  151. maestro_care-0.0.1/care/widgets/chat_input.py +284 -0
  152. maestro_care-0.0.1/care/widgets/context_menu.py +103 -0
  153. maestro_care-0.0.1/care/widgets/empty_state.py +178 -0
  154. maestro_care-0.0.1/care/widgets/footer.py +154 -0
  155. maestro_care-0.0.1/care/widgets/header.py +267 -0
  156. maestro_care-0.0.1/care/widgets/library_sidebar.py +530 -0
  157. maestro_care-0.0.1/care/widgets/pipeline_preview.py +267 -0
  158. maestro_care-0.0.1/care/widgets/status_bar.py +246 -0
  159. maestro_care-0.0.1/care/widgets/task_setup.py +306 -0
  160. maestro_care-0.0.1/care/widgets/toast.py +172 -0
  161. maestro_care-0.0.1/docs/screens/README.md +110 -0
  162. maestro_care-0.0.1/examples/financier/README.md +111 -0
  163. maestro_care-0.0.1/examples/weather/README.md +87 -0
  164. maestro_care-0.0.1/pyproject.toml +146 -0
  165. maestro_care-0.0.1/tests/conftest.py +36 -0
  166. maestro_care-0.0.1/tests/test_agent_diff.py +574 -0
  167. maestro_care-0.0.1/tests/test_app_global_keys.py +266 -0
  168. maestro_care-0.0.1/tests/test_app_shell.py +516 -0
  169. maestro_care-0.0.1/tests/test_app_theme.py +242 -0
  170. maestro_care-0.0.1/tests/test_architecture_doc.py +145 -0
  171. maestro_care-0.0.1/tests/test_artifacts.py +172 -0
  172. maestro_care-0.0.1/tests/test_asciicast_harness.py +227 -0
  173. maestro_care-0.0.1/tests/test_builtin_tools.py +309 -0
  174. maestro_care-0.0.1/tests/test_bulk_import.py +309 -0
  175. maestro_care-0.0.1/tests/test_bulk_ops.py +541 -0
  176. maestro_care-0.0.1/tests/test_cancellation.py +329 -0
  177. maestro_care-0.0.1/tests/test_capability_memory_recall.py +88 -0
  178. maestro_care-0.0.1/tests/test_capability_priming.py +307 -0
  179. maestro_care-0.0.1/tests/test_carl_streamer.py +415 -0
  180. maestro_care-0.0.1/tests/test_carl_summary.py +215 -0
  181. maestro_care-0.0.1/tests/test_catalog.py +429 -0
  182. maestro_care-0.0.1/tests/test_chain_edit_view.py +90 -0
  183. maestro_care-0.0.1/tests/test_chain_export.py +210 -0
  184. maestro_care-0.0.1/tests/test_chain_title.py +237 -0
  185. maestro_care-0.0.1/tests/test_chat_record_local_run.py +343 -0
  186. maestro_care-0.0.1/tests/test_chat_revise.py +294 -0
  187. maestro_care-0.0.1/tests/test_chat_slash_command_manifest.py +323 -0
  188. maestro_care-0.0.1/tests/test_ci_workflows.py +190 -0
  189. maestro_care-0.0.1/tests/test_cli.py +3176 -0
  190. maestro_care-0.0.1/tests/test_cli_record_run.py +145 -0
  191. maestro_care-0.0.1/tests/test_collections.py +479 -0
  192. maestro_care-0.0.1/tests/test_command_palette.py +517 -0
  193. maestro_care-0.0.1/tests/test_config.py +696 -0
  194. maestro_care-0.0.1/tests/test_config_project_overrides.py +185 -0
  195. maestro_care-0.0.1/tests/test_conflict.py +403 -0
  196. maestro_care-0.0.1/tests/test_context_md.py +196 -0
  197. maestro_care-0.0.1/tests/test_cost_rollups.py +143 -0
  198. maestro_care-0.0.1/tests/test_deck_builder.py +124 -0
  199. maestro_care-0.0.1/tests/test_doctor.py +267 -0
  200. maestro_care-0.0.1/tests/test_draft.py +298 -0
  201. maestro_care-0.0.1/tests/test_edit_draft.py +546 -0
  202. maestro_care-0.0.1/tests/test_empty_state.py +259 -0
  203. maestro_care-0.0.1/tests/test_env_example.py +176 -0
  204. maestro_care-0.0.1/tests/test_evolution_session.py +316 -0
  205. maestro_care-0.0.1/tests/test_example_financier.py +200 -0
  206. maestro_care-0.0.1/tests/test_example_weather.py +171 -0
  207. maestro_care-0.0.1/tests/test_executor.py +550 -0
  208. maestro_care-0.0.1/tests/test_first_run.py +415 -0
  209. maestro_care-0.0.1/tests/test_fitness_plot.py +148 -0
  210. maestro_care-0.0.1/tests/test_generation.py +257 -0
  211. maestro_care-0.0.1/tests/test_global_bindings.py +318 -0
  212. maestro_care-0.0.1/tests/test_help.py +403 -0
  213. maestro_care-0.0.1/tests/test_human_input.py +372 -0
  214. maestro_care-0.0.1/tests/test_intermediate_artifacts.py +399 -0
  215. maestro_care-0.0.1/tests/test_keystore.py +440 -0
  216. maestro_care-0.0.1/tests/test_library_bundle.py +614 -0
  217. maestro_care-0.0.1/tests/test_library_revise.py +71 -0
  218. maestro_care-0.0.1/tests/test_library_run.py +555 -0
  219. maestro_care-0.0.1/tests/test_library_view.py +706 -0
  220. maestro_care-0.0.1/tests/test_library_watcher.py +338 -0
  221. maestro_care-0.0.1/tests/test_lineage.py +520 -0
  222. maestro_care-0.0.1/tests/test_llm_client.py +371 -0
  223. maestro_care-0.0.1/tests/test_local_run_history.py +395 -0
  224. maestro_care-0.0.1/tests/test_log_discovery.py +245 -0
  225. maestro_care-0.0.1/tests/test_mage_poster.py +235 -0
  226. maestro_care-0.0.1/tests/test_mage_summary.py +391 -0
  227. maestro_care-0.0.1/tests/test_marketplace.py +298 -0
  228. maestro_care-0.0.1/tests/test_memory.py +704 -0
  229. maestro_care-0.0.1/tests/test_memory_ltm.py +220 -0
  230. maestro_care-0.0.1/tests/test_micro_evolution.py +487 -0
  231. maestro_care-0.0.1/tests/test_migrate_secrets.py +329 -0
  232. maestro_care-0.0.1/tests/test_network_policy.py +226 -0
  233. maestro_care-0.0.1/tests/test_output_mediation.py +365 -0
  234. maestro_care-0.0.1/tests/test_packaging.py +309 -0
  235. maestro_care-0.0.1/tests/test_pareto.py +283 -0
  236. maestro_care-0.0.1/tests/test_pareto_plot.py +164 -0
  237. maestro_care-0.0.1/tests/test_platform.py +283 -0
  238. maestro_care-0.0.1/tests/test_preflight.py +285 -0
  239. maestro_care-0.0.1/tests/test_pricing.py +115 -0
  240. maestro_care-0.0.1/tests/test_profiles.py +126 -0
  241. maestro_care-0.0.1/tests/test_profiling.py +500 -0
  242. maestro_care-0.0.1/tests/test_provenance.py +358 -0
  243. maestro_care-0.0.1/tests/test_replay.py +430 -0
  244. maestro_care-0.0.1/tests/test_row_actions.py +557 -0
  245. maestro_care-0.0.1/tests/test_run_context_draft.py +500 -0
  246. maestro_care-0.0.1/tests/test_run_edit.py +82 -0
  247. maestro_care-0.0.1/tests/test_run_history.py +484 -0
  248. maestro_care-0.0.1/tests/test_run_history_aggregate.py +215 -0
  249. maestro_care-0.0.1/tests/test_run_recorder.py +348 -0
  250. maestro_care-0.0.1/tests/test_run_state.py +306 -0
  251. maestro_care-0.0.1/tests/test_sandbox_audit.py +308 -0
  252. maestro_care-0.0.1/tests/test_sandbox_docker.py +538 -0
  253. maestro_care-0.0.1/tests/test_sandbox_e2b.py +528 -0
  254. maestro_care-0.0.1/tests/test_sandbox_firejail.py +504 -0
  255. maestro_care-0.0.1/tests/test_sandbox_local.py +391 -0
  256. maestro_care-0.0.1/tests/test_sandbox_resources.py +270 -0
  257. maestro_care-0.0.1/tests/test_sandbox_trust.py +320 -0
  258. maestro_care-0.0.1/tests/test_save_agent_form.py +666 -0
  259. maestro_care-0.0.1/tests/test_screen_artifacts.py +1640 -0
  260. maestro_care-0.0.1/tests/test_screen_catalog.py +1856 -0
  261. maestro_care-0.0.1/tests/test_screen_chat.py +19659 -0
  262. maestro_care-0.0.1/tests/test_screen_command_palette.py +236 -0
  263. maestro_care-0.0.1/tests/test_screen_confirm.py +182 -0
  264. maestro_care-0.0.1/tests/test_screen_conflict.py +236 -0
  265. maestro_care-0.0.1/tests/test_screen_cost.py +279 -0
  266. maestro_care-0.0.1/tests/test_screen_demo.py +71 -0
  267. maestro_care-0.0.1/tests/test_screen_diff.py +261 -0
  268. maestro_care-0.0.1/tests/test_screen_edit_agent.py +334 -0
  269. maestro_care-0.0.1/tests/test_screen_evolution.py +1493 -0
  270. maestro_care-0.0.1/tests/test_screen_evolution_compare.py +283 -0
  271. maestro_care-0.0.1/tests/test_screen_evolution_dashboard.py +592 -0
  272. maestro_care-0.0.1/tests/test_screen_evolution_launch.py +393 -0
  273. maestro_care-0.0.1/tests/test_screen_execution.py +380 -0
  274. maestro_care-0.0.1/tests/test_screen_export.py +256 -0
  275. maestro_care-0.0.1/tests/test_screen_export_chain.py +309 -0
  276. maestro_care-0.0.1/tests/test_screen_generation.py +395 -0
  277. maestro_care-0.0.1/tests/test_screen_help.py +341 -0
  278. maestro_care-0.0.1/tests/test_screen_human_input.py +230 -0
  279. maestro_care-0.0.1/tests/test_screen_import.py +304 -0
  280. maestro_care-0.0.1/tests/test_screen_import_bundle.py +128 -0
  281. maestro_care-0.0.1/tests/test_screen_inspection.py +1035 -0
  282. maestro_care-0.0.1/tests/test_screen_inspection_artifacts.py +148 -0
  283. maestro_care-0.0.1/tests/test_screen_inspection_run_history.py +385 -0
  284. maestro_care-0.0.1/tests/test_screen_library.py +1172 -0
  285. maestro_care-0.0.1/tests/test_screen_library_bulk_select.py +453 -0
  286. maestro_care-0.0.1/tests/test_screen_library_collections.py +236 -0
  287. maestro_care-0.0.1/tests/test_screen_library_row_actions.py +436 -0
  288. maestro_care-0.0.1/tests/test_screen_library_sort.py +296 -0
  289. maestro_care-0.0.1/tests/test_screen_lineage.py +323 -0
  290. maestro_care-0.0.1/tests/test_screen_logs.py +362 -0
  291. maestro_care-0.0.1/tests/test_screen_marketplace.py +518 -0
  292. maestro_care-0.0.1/tests/test_screen_multi_compose.py +109 -0
  293. maestro_care-0.0.1/tests/test_screen_profile.py +225 -0
  294. maestro_care-0.0.1/tests/test_screen_query.py +316 -0
  295. maestro_care-0.0.1/tests/test_screen_replay.py +248 -0
  296. maestro_care-0.0.1/tests/test_screen_resume.py +229 -0
  297. maestro_care-0.0.1/tests/test_screen_run_context.py +287 -0
  298. maestro_care-0.0.1/tests/test_screen_runs.py +352 -0
  299. maestro_care-0.0.1/tests/test_screen_sandbox_trust.py +348 -0
  300. maestro_care-0.0.1/tests/test_screen_save_agent.py +335 -0
  301. maestro_care-0.0.1/tests/test_screen_save_report.py +549 -0
  302. maestro_care-0.0.1/tests/test_screen_settings.py +503 -0
  303. maestro_care-0.0.1/tests/test_screen_tag_editor.py +441 -0
  304. maestro_care-0.0.1/tests/test_screen_task_list.py +240 -0
  305. maestro_care-0.0.1/tests/test_screen_use_it_now.py +371 -0
  306. maestro_care-0.0.1/tests/test_screen_welcome.py +304 -0
  307. maestro_care-0.0.1/tests/test_screen_welcome_recents.py +219 -0
  308. maestro_care-0.0.1/tests/test_screens_demo_pilot.py +261 -0
  309. maestro_care-0.0.1/tests/test_screens_index_doc.py +236 -0
  310. maestro_care-0.0.1/tests/test_session_artifacts.py +387 -0
  311. maestro_care-0.0.1/tests/test_session_persistence.py +222 -0
  312. maestro_care-0.0.1/tests/test_skill_enforcement.py +126 -0
  313. maestro_care-0.0.1/tests/test_skill_runtime_adapter.py +343 -0
  314. maestro_care-0.0.1/tests/test_skills_promotion.py +314 -0
  315. maestro_care-0.0.1/tests/test_stage_regeneration.py +369 -0
  316. maestro_care-0.0.1/tests/test_status_bar.py +516 -0
  317. maestro_care-0.0.1/tests/test_task_registry.py +444 -0
  318. maestro_care-0.0.1/tests/test_telemetry.py +289 -0
  319. maestro_care-0.0.1/tests/test_theme.py +369 -0
  320. maestro_care-0.0.1/tests/test_token_counter_wiring.py +182 -0
  321. maestro_care-0.0.1/tests/test_tool_planning.py +186 -0
  322. maestro_care-0.0.1/tests/test_tool_synthesis.py +403 -0
  323. maestro_care-0.0.1/tests/test_tools_loader.py +187 -0
  324. maestro_care-0.0.1/tests/test_user_paths.py +195 -0
  325. maestro_care-0.0.1/tests/test_uvx_smoke.py +178 -0
  326. maestro_care-0.0.1/tests/test_widget_context_menu.py +260 -0
  327. maestro_care-0.0.1/tests/test_widget_empty_state.py +490 -0
  328. maestro_care-0.0.1/tests/test_widget_footer.py +263 -0
  329. maestro_care-0.0.1/tests/test_widget_header.py +333 -0
  330. maestro_care-0.0.1/tests/test_widget_library_sidebar.py +449 -0
  331. maestro_care-0.0.1/tests/test_widget_status_bar.py +414 -0
  332. maestro_care-0.0.1/tests/test_widget_toast.py +171 -0
@@ -0,0 +1,337 @@
1
+ # CARE environment-variable overrides (TODO §2 P1).
2
+ #
3
+ # Every setting in `CareConfig` has a `CARE_*` env var equivalent.
4
+ # Nested sections use double-underscores (so `[mage] mode = "fast"`
5
+ # in TOML is `CARE_MAGE__MODE=fast` here). Env vars override values
6
+ # from both `~/.config/care/config.toml` and per-project
7
+ # `./care.toml`; defaults from `care.config` apply for anything
8
+ # you leave unset.
9
+ #
10
+ # Precedence: defaults < ~/.config/care/config.toml < ./care.toml < env.
11
+ #
12
+ # Copy this file to `.env` (or export the vars in your shell) and
13
+ # fill in only the values you need to override.
14
+
15
+ # ---------------------------------------------------------------------------
16
+ # [mage] — MAGE generator
17
+ # ---------------------------------------------------------------------------
18
+
19
+ # Generation mode. `deep` does the full multi-stage pipeline; `fast`
20
+ # is single-shot.
21
+ # CARE_MAGE__MODE=deep
22
+
23
+ # Base URL of the OpenAI-compatible HTTP endpoint MAGE / CARL
24
+ # should talk to. Any provider with an OpenAI-shaped API works
25
+ # (OpenAI, OpenRouter, Groq, DeepSeek, Together, a local
26
+ # Ollama / llama.cpp server, etc.). Examples:
27
+ # https://api.openai.com/v1
28
+ # https://openrouter.ai/api/v1
29
+ # http://localhost:11434/v1
30
+ # REQUIRED.
31
+ # CARE_MAGE__BASE_URL=https://openrouter.ai/api/v1
32
+
33
+ # API key sent as `Authorization: Bearer …`. REQUIRED.
34
+ # CARE_MAGE__API_KEY=
35
+
36
+ # Model id the endpoint understands. REQUIRED.
37
+ # CARE_MAGE__MODEL=anthropic/claude-3.5-sonnet
38
+
39
+ # Whether MAGE recalls relevant past chains/knowledge from Memory during
40
+ # generation (stage 0a) and feeds a digest to the planner — generation
41
+ # gets smarter as Memory fills. On by default; costs ~one extra sub-query
42
+ # LLM call per generation. Set to false for the lowest-latency path.
43
+ # Accepts `true` / `false` / `1` / `0`.
44
+ # CARE_MAGE__ENABLE_MEMORY_RESEARCH=true
45
+
46
+ # Strategy for Memory recall during generation. `bm25` (default) suits the
47
+ # bundled Memory deployment, which ships with vector search OFF — `hybrid`
48
+ # /`vector` silently fall back to bm25 with a per-search warning. Flip to
49
+ # `hybrid` once Memory has vector search + sentence-transformers enabled.
50
+ # CARE_MAGE__MEMORY_SEARCH_MODE=bm25
51
+
52
+ # Minimum relevance score for a recalled chain to be kept. Default 0.0 —
53
+ # bm25 scores are small (~0.1), so a higher gate silently drops every real
54
+ # hit (perpetual cold-start). MAGE's applicability gate (an LLM judge)
55
+ # still filters quality downstream.
56
+ # CARE_MAGE__MEMORY_RELEVANCE_THRESHOLD=0.0
57
+
58
+ # Whether MAGE may issue web-search queries. Off by default to keep
59
+ # generation deterministic + cheap.
60
+ # CARE_MAGE__ENABLE_WEB_RESEARCH=false
61
+
62
+ # Web-search engine MAGE uses (tavily / serpapi / brave). Mirrors
63
+ # CARE_TOOLS__WEB_SEARCH_PROVIDER so generation + the runtime
64
+ # web_search tool share one engine.
65
+ # CARE_MAGE__WEB_SEARCH_PROVIDER=tavily
66
+
67
+ # API key for the web-search provider. Only consulted when
68
+ # `enable_web_research=true`.
69
+ # CARE_MAGE__WEB_SEARCH_API_KEY=
70
+
71
+ # --- MAGE planning-stage discovery (forwarded to mmar_mage) ---
72
+ # CARE normally INJECTS capabilities into generation, which bypasses MAGE's
73
+ # own discovery agents — so all three default OFF. Flip them only for
74
+ # deployments where MAGE should discover tools/skills itself.
75
+
76
+ # Run MAGE's CapabilityLookupAgent at plan time.
77
+ # CARE_MAGE__ENABLE_CAPABILITY_LOOKUP=false
78
+
79
+ # Let MAGE query Memory for `agent_skill` entities during capability lookup
80
+ # (needs MAGE's memory client working — Phase C).
81
+ # CARE_MAGE__ENABLE_MEMORY_SKILL_LOOKUP=false
82
+
83
+ # Surface packaged AgentSkills via MAGE's built-in SkillRegistry.
84
+ # CARE_MAGE__ENABLE_SKILL_DISCOVERY=false
85
+
86
+ # --- Chain topology + depth ---
87
+ # MAGE's own defaults bias hard toward short LINEAR chains (it halves the
88
+ # analyzer's suggested step count and never varies the shape), which
89
+ # collapses most generations to a 2-step tool→llm chain. CARE overrides them
90
+ # so generation can pick richer shapes (diamond / map_reduce / tree_of_thought
91
+ # / hierarchical / …) with appropriate depth. Steps whose type the installed
92
+ # CARL can't run are downgraded to `llm` at run time (the DAG shape survives).
93
+
94
+ # Hint the planner toward a task-appropriate topology instead of always a
95
+ # linear pipeline. One extra LLM call per generation. Set false to force
96
+ # linear chains (MAGE's stock behaviour).
97
+ # CARE_MAGE__ENABLE_TOPOLOGY_SELECTION=true
98
+
99
+ # How many ranked topology candidates the selector keeps (1–8).
100
+ # CARE_MAGE__TOPOLOGY_MAX_CANDIDATES=3
101
+
102
+ # Scales the analyzer's suggested step count by (1 - bias), floored at 2.
103
+ # MAGE defaults to 0.5 (aggressive shortening); CARE uses 0.2 so non-trivial
104
+ # tasks keep enough steps to form a real topology. 0.0 = fully trust the
105
+ # analyzer; 0.5+ = force short chains.
106
+ # CARE_MAGE__SIMPLICITY_BIAS=0.2
107
+
108
+ # Hard cap on plan length (2–30) — a longer plan without a filled rationale
109
+ # is truncated. Raise for deliberately long pipelines.
110
+ # CARE_MAGE__SIMPLICITY_MAX_STEPS=7
111
+
112
+ # ---------------------------------------------------------------------------
113
+ # [memory] — GigaEvo Memory connection
114
+ # ---------------------------------------------------------------------------
115
+
116
+ # Base URL for the GigaEvo Memory server.
117
+ # CARE_MEMORY__BASE_URL=http://localhost:8000
118
+
119
+ # API key (sent as `X-API-Key`). Only required when Memory has
120
+ # `AUTH_REQUIRED=true`; dev installs leave it empty.
121
+ # CARE_MEMORY__API_KEY=
122
+
123
+ # Per-request HTTP timeout in seconds.
124
+ # CARE_MEMORY__TIMEOUT=30.0
125
+
126
+ # ---------------------------------------------------------------------------
127
+ # [platform] — GigaEvo Platform connection
128
+ # ---------------------------------------------------------------------------
129
+
130
+ # Base URL for the GigaEvo Platform `master_api`.
131
+ # CARE_PLATFORM__BASE_URL=http://localhost:8001
132
+
133
+ # API key. Same convention as `CARE_MEMORY__API_KEY`.
134
+ # CARE_PLATFORM__API_KEY=
135
+
136
+ # Per-request HTTP timeout.
137
+ # CARE_PLATFORM__TIMEOUT=30.0
138
+
139
+ # ---------------------------------------------------------------------------
140
+ # [upload] — External chain-upload target (Phase 3 P2)
141
+ # ---------------------------------------------------------------------------
142
+
143
+ # POST endpoint that receives a saved chain when the user runs
144
+ # `/upload <chain_id>` in chat. Empty disables the slash
145
+ # command. Body shape: {"chain_id": "...", "chain": {...}}.
146
+ # CARE_UPLOAD__URL=
147
+
148
+ # Optional credential sent in `auth_header`. With the default
149
+ # `Authorization` header, value rides as `Bearer <key>`; with a
150
+ # different header name (e.g. `X-API-Key`) the value is sent
151
+ # raw.
152
+ # CARE_UPLOAD__API_KEY=
153
+
154
+ # Header name to carry the credential. Default fits the
155
+ # canonical OAuth-style `Authorization: Bearer <key>`.
156
+ # CARE_UPLOAD__AUTH_HEADER=Authorization
157
+
158
+ # Per-request HTTP timeout in seconds.
159
+ # CARE_UPLOAD__TIMEOUT=30.0
160
+
161
+ # ---------------------------------------------------------------------------
162
+ # [sandbox] — AgentSkill sandbox backend
163
+ # ---------------------------------------------------------------------------
164
+
165
+ # Backend kind. `local` is unsafe — appropriate only for CARE-internal
166
+ # testing. Choose `docker`, `e2b`, or `firejail` for real runs.
167
+ # CARE_SANDBOX__KIND=docker
168
+
169
+ # CPU limit (cores). Float; passed as the `--cpus` argument to
170
+ # DockerSandboxBackend.
171
+ # CARE_SANDBOX__CPU_LIMIT=2.0
172
+
173
+ # Memory limit. Docker-style suffix: `512k`, `512m`, `1g`, etc.
174
+ # CARE_SANDBOX__MEM_LIMIT=1g
175
+
176
+ # Network policy. `none` = isolated; `skill_declared` = allow the
177
+ # domains the AgentSkill manifest lists; `open` = unrestricted.
178
+ # CARE_SANDBOX__NETWORK_POLICY=skill_declared
179
+
180
+ # Container image (only consulted by DockerSandboxBackend).
181
+ # CARE_SANDBOX__IMAGE=python:3.12-slim
182
+
183
+ # `--pids-limit` for the container.
184
+ # CARE_SANDBOX__PIDS_LIMIT=256
185
+
186
+ # ---------------------------------------------------------------------------
187
+ # [tools] — Tools: user `@carl_tool` registry + bundled builtins + synthesis
188
+ # ---------------------------------------------------------------------------
189
+
190
+ # Directory the loader scans for `*.py` files with
191
+ # `@carl_tool`-decorated callables.
192
+ # CARE_TOOLS__PATH=~/.config/care/tools
193
+
194
+ # Optional tag whitelist — only tools whose
195
+ # `@carl_tool(tags=[...])` intersect this set get registered.
196
+ # Env vars don't support lists natively; use TOML for this.
197
+ # (Setting it via env will be parsed as a single-item list.)
198
+ # CARE_TOOLS__TAG_FILTER=
199
+
200
+ # Optional prefix prepended to every registered tool name. Handy
201
+ # when sourcing third-party tools so they don't collide with
202
+ # built-ins.
203
+ # CARE_TOOLS__NAME_PREFIX=
204
+
205
+ # --- Bundled standard tools (see care.builtin_tools) ---
206
+
207
+ # Register CARE's bundled tools (web_search, fetch_url, http_request,
208
+ # calculator, current_datetime, run_python) into every execution context so
209
+ # MAGE-generated chains that reference them actually run. Set false for a
210
+ # bring-your-own-tools deployment.
211
+ # CARE_TOOLS__ENABLE_BUILTINS=true
212
+
213
+ # Backend for the bundled web_search tool. One of: tavily, serpapi, brave.
214
+ # CARE_TOOLS__WEB_SEARCH_PROVIDER=tavily
215
+
216
+ # API key for the web_search provider. Without it web_search stays
217
+ # registered but inert (returns a "not configured" line, never raises).
218
+ # Tavily keys look like `tvly-...`. REQUIRED for live web search.
219
+ # CARE_TOOLS__WEB_SEARCH_API_KEY=
220
+
221
+ # How many results web_search returns per call (1–20).
222
+ # CARE_TOOLS__WEB_SEARCH_MAX_RESULTS=5
223
+
224
+ # Character cap on text returned by fetch_url / http_request / run_python —
225
+ # keeps one page from blowing the downstream LLM step's context (200–200000).
226
+ # CARE_TOOLS__FETCH_URL_MAX_CHARS=4000
227
+
228
+ # Register the run_python builtin (runs in the [sandbox] Docker sandbox,
229
+ # never in CARE's process). Set false to drop the code-exec surface while
230
+ # keeping the web/http tools.
231
+ # CARE_TOOLS__ENABLE_CODE_EXEC=true
232
+
233
+ # Wall-clock seconds a single run_python sandbox call may run (5–600).
234
+ # CARE_TOOLS__CODE_EXEC_TIMEOUT=60
235
+
236
+ # --- On-the-fly tool synthesis (see care.tool_synthesis) ---
237
+
238
+ # Self-healing synthesis: before a generated chain runs, scan it for tool
239
+ # steps whose tool_name isn't registered and have the LLM write + register
240
+ # a sandboxed implementation. Requires ENABLE_CODE_EXEC.
241
+ # CARE_TOOLS__AUTO_SYNTHESIZE_TOOLS=true
242
+
243
+ # Disk cache for synthesised tools (one <name>.json each; re-registered +
244
+ # advertised to MAGE every run, so a tool is generated once and reused).
245
+ # CARE_TOOLS__SYNTHESIZED_TOOLS_PATH=~/.config/care/synthesized_tools
246
+
247
+ # Also persist each synthesised tool to GigaEvo Memory (as an agent_skill)
248
+ # and check Memory for an existing impl before generating. Best-effort — a
249
+ # Memory outage never blocks a run.
250
+ # CARE_TOOLS__SAVE_SYNTHESIZED_TO_MEMORY=true
251
+
252
+ # At generation time, search Memory for previously-saved tools relevant to
253
+ # the task and advertise them to MAGE (so a tool from an earlier session is
254
+ # reused by name, not re-invented). Best-effort.
255
+ # CARE_TOOLS__RECALL_TOOLS_FROM_MEMORY=true
256
+
257
+ # Before running an all-LLM chain, ask the model whether any step needs
258
+ # live/external data (date, weather, news, prices, web facts) and rewrite it
259
+ # into a tool call if so — the "google anything" routing.
260
+ # CARE_TOOLS__ROUTE_LIVE_DATA_TO_TOOLS=true
261
+
262
+ # Before synthesising a missing tool, web_search for a REAL keyless public
263
+ # API and feed it into codegen — so the tool hits a live endpoint instead of
264
+ # one the LLM guessed. Needs WEB_SEARCH_API_KEY; degrades to ungrounded.
265
+ # CARE_TOOLS__GROUND_SYNTHESIS_WITH_WEB_SEARCH=true
266
+
267
+ # After synthesising a tool, run it once with the model's own sample inputs;
268
+ # on a runtime error (e.g. wrong endpoint) regenerate once with the failure
269
+ # fed back. Costs one extra sandbox run per newly-synthesised tool.
270
+ # CARE_TOOLS__SELF_TEST_SYNTHESIZED_TOOLS=true
271
+
272
+ # ---------------------------------------------------------------------------
273
+ # [telemetry] — Opt-in event-stream recording
274
+ # ---------------------------------------------------------------------------
275
+
276
+ # Master switch. Defaults to `false`; flip to `true` to ship
277
+ # generation/run/evolution events to the configured backend.
278
+ # CARE_TELEMETRY__ENABLED=false
279
+
280
+ # Backend identifier. Built-ins: `null` (no-op, for debugging the
281
+ # pipeline without a remote sink), `langfuse`. Custom backends
282
+ # register via `care.runtime.register_telemetry_backend()`.
283
+ # CARE_TELEMETRY__BACKEND=null
284
+
285
+ # Langfuse host. Defaults to Langfuse cloud; point at a self-
286
+ # hosted deployment for on-prem.
287
+ # CARE_TELEMETRY__HOST=https://cloud.langfuse.com
288
+
289
+ # Langfuse public + secret keys. Required only when
290
+ # `backend=langfuse` and `enabled=true`.
291
+ # CARE_TELEMETRY__PUBLIC_KEY=
292
+ # CARE_TELEMETRY__SECRET_KEY=
293
+
294
+ # ---------------------------------------------------------------------------
295
+ # [defaults] — UI defaults
296
+ # ---------------------------------------------------------------------------
297
+
298
+ # TUI language. Currently `en` or `ru`.
299
+ # CARE_DEFAULTS__LANGUAGE=en
300
+
301
+ # How many entries the history widgets retain. 1–10000.
302
+ # CARE_DEFAULTS__MAX_HISTORY_ENTRIES=50
303
+
304
+ # ---------------------------------------------------------------------------
305
+ # [chat] — ChatScreen (the primary chat surface)
306
+ # ---------------------------------------------------------------------------
307
+
308
+ # Which mode the chat boots into.
309
+ # ad_hoc — generate-and-execute on the spot, ReAct-style loop.
310
+ # Nothing is persisted to Memory.
311
+ # production — generate, save to Memory under a stable chain_id,
312
+ # seed a dataset card, and (when Platform is wired)
313
+ # kick off evolution.
314
+ # Accepted aliases: ad-hoc / adhoc / prod. Default: ad_hoc.
315
+ # CARE_CHAT__DEFAULT_MODE=ad_hoc
316
+
317
+ # ── Context / memory (CARE.md + CARL LTM) ────────────────────────────────
318
+ # Persistent user/project context (CARE.md) injected into generation, plus
319
+ # CARL's long-term memory injected into every answer + planner prompt.
320
+ # CARE_CONTEXT__ENABLED=true
321
+ # CARE_CONTEXT__GLOBAL_PATH=~/.config/care/CARE.md
322
+ # CARE_CONTEXT__PROJECT_FILENAME=CARE.md
323
+ # CARE_CONTEXT__MAX_CHARS=8000
324
+ # Post-turn: extract durable user facts into CARE.md (one extra LLM call).
325
+ # CARE_CONTEXT__AUTO_LEARN_FACTS=false
326
+ # CARL long-term memory: attach + inject + post-turn save-decision.
327
+ # CARE_CONTEXT__LTM_ENABLED=true
328
+ # CARE_CONTEXT__LTM_DIR=~/.config/care/ltm
329
+ # CARE_CONTEXT__LTM_SESSION_ID=default
330
+ # CARE_CONTEXT__LTM_INJECT_MAX_CHARS=2000
331
+ # CARE_CONTEXT__LTM_AUTOSAVE=true
332
+
333
+ # ── Artifacts (P6.5) ─────────────────────────────────────────────────────
334
+ # Root directory for files a chain/skill produces (.pptx/.xlsx/.docx/…).
335
+ # Unset → defaults to ~/.care/artifacts (cross-platform, under your home).
336
+ # Each saved file is surfaced in the TUI as a `📄 saved: <path>` line.
337
+ # CARE_ARTIFACTS__DIR=~/.care/artifacts
@@ -0,0 +1,43 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ *.egg
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ .eggs/
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ env/
16
+
17
+ # IDE
18
+ .idea/
19
+ .vscode/
20
+ *.swp
21
+ *.swo
22
+
23
+ # Environment files
24
+ deploy/.env
25
+ .env
26
+
27
+ # Docker
28
+ docker-compose.override.yml
29
+
30
+ # Testing
31
+ .pytest_cache/
32
+ .coverage
33
+ htmlcov/
34
+ .mypy_cache/
35
+ .ruff_cache
36
+
37
+ # OS
38
+ .DS_Store
39
+ Thumbs.db
40
+ uv.lock
41
+ .claude
42
+ logs/*
43
+ !logs/.gitkeep
@@ -0,0 +1,49 @@
1
+ .PHONY: run sync help test lint
2
+
3
+ LOG_DIR := logs
4
+ TIMESTAMP := $(shell date +%Y%m%d-%H%M%S)
5
+ UI_LOG := $(LOG_DIR)/care-ui-$(TIMESTAMP).log
6
+ APP_LOG := $(LOG_DIR)/care-app-$(TIMESTAMP).log
7
+
8
+ # `make run` launches the TUI. Pass `LOG=1` to also capture
9
+ # debug logs to `./logs`:
10
+ #
11
+ # * care-ui-<timestamp>.log — Textual UI events (compose,
12
+ # mount, dispatch, render)
13
+ # driven by TEXTUAL_LOG.
14
+ # * care-app-<timestamp>.log — Python app/client log
15
+ # (care.* modules, httpx Memory
16
+ # / Platform calls, MAGE / CARL
17
+ # workers) driven by CARE_LOG_FILE
18
+ # / CARE_LOG_LEVEL.
19
+ #
20
+ # Pass `LOG_LEVEL=DEBUG` to widen the app-log channel (default INFO).
21
+ # `PYTHONIOENCODING=utf-8` keeps non-ASCII output safe when LC_*
22
+ # is unset or set to `C`.
23
+ LOG_LEVEL ?= INFO
24
+
25
+ run: sync
26
+ ifeq ($(LOG),1)
27
+ @mkdir -p $(LOG_DIR)
28
+ @echo "UI log -> $(UI_LOG)"
29
+ @echo "App log -> $(APP_LOG) (level=$(LOG_LEVEL))"
30
+ PYTHONIOENCODING=utf-8 \
31
+ TEXTUAL_LOG=$(UI_LOG) \
32
+ CARE_LOG_FILE=$(APP_LOG) \
33
+ CARE_LOG_LEVEL=$(LOG_LEVEL) \
34
+ uv run care
35
+ else
36
+ PYTHONIOENCODING=utf-8 uv run care
37
+ endif
38
+
39
+ sync:
40
+ uv sync
41
+
42
+ help:
43
+ uv run care --help
44
+
45
+ test:
46
+ uv run pytest
47
+
48
+ lint:
49
+ uv run ruff check .
@@ -0,0 +1,263 @@
1
+ Metadata-Version: 2.4
2
+ Name: maestro-care
3
+ Version: 0.0.1
4
+ Summary: Collaborative Agent Reasoning Ecosystem — Textual TUI demo
5
+ Project-URL: Homepage, https://github.com/AIRI-Institute/care
6
+ Project-URL: Repository, https://github.com/AIRI-Institute/care
7
+ Project-URL: Issues, https://github.com/AIRI-Institute/care/issues
8
+ Keywords: agents,care,carl,evolution,llm,mage,textual,tui
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: MacOS
13
+ Classifier: Operating System :: POSIX :: Linux
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development
18
+ Classifier: Topic :: Software Development :: Code Generators
19
+ Classifier: Topic :: Terminals
20
+ Requires-Python: >=3.12
21
+ Requires-Dist: gigaevo-client>=0.3.0
22
+ Requires-Dist: httpx>=0.27
23
+ Requires-Dist: mmar-mage>=0.1
24
+ Requires-Dist: pydantic>=2.11
25
+ Requires-Dist: pypdf>=4.0
26
+ Requires-Dist: python-pptx>=0.6.21
27
+ Requires-Dist: rich-pixels>=3.0
28
+ Requires-Dist: textual>=8.2.6
29
+ Provides-Extra: anthropic
30
+ Requires-Dist: anthropic>=0.20; extra == 'anthropic'
31
+ Provides-Extra: carl
32
+ Requires-Dist: mmar-carl>=0.2; extra == 'carl'
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
35
+ Requires-Dist: pytest>=8.0; extra == 'dev'
36
+ Requires-Dist: respx>=0.21; extra == 'dev'
37
+ Requires-Dist: ruff>=0.5; extra == 'dev'
38
+ Provides-Extra: docker
39
+ Requires-Dist: docker>=7.0; extra == 'docker'
40
+ Provides-Extra: e2b
41
+ Requires-Dist: e2b>=0.17; extra == 'e2b'
42
+ Provides-Extra: full
43
+ Requires-Dist: anthropic>=0.20; extra == 'full'
44
+ Requires-Dist: docker>=7.0; extra == 'full'
45
+ Requires-Dist: e2b>=0.17; extra == 'full'
46
+ Requires-Dist: mmar-carl>=0.2; extra == 'full'
47
+ Requires-Dist: openai>=1.0; extra == 'full'
48
+ Requires-Dist: plotext>=5.2; extra == 'full'
49
+ Provides-Extra: openai
50
+ Requires-Dist: openai>=1.0; extra == 'openai'
51
+ Provides-Extra: plots
52
+ Requires-Dist: plotext>=5.2; extra == 'plots'
53
+ Description-Content-Type: text/markdown
54
+
55
+ # CARE — Collaborative Agent Reasoning Ecosystem
56
+
57
+ A Textual TUI + CLI for generating, running, and evolving CARL agent
58
+ chains. CARE is the user-facing consumer on top of a four-module stack —
59
+ **MAGE** for chain generation, **CARL** for execution, **GigaEvo Memory**
60
+ for persistence, and **GigaEvo Platform** for evolution.
61
+
62
+ ## Run
63
+
64
+ ```bash
65
+ uv sync
66
+ uv run care init # one-shot: write a minimal .env with MAGE creds
67
+ uv run care # launch the TUI
68
+ uv run care --help # list CLI subcommands
69
+ ```
70
+
71
+ `care init` walks the minimum MAGE credentials (base URL, API key,
72
+ model) and writes a `./.env` so a fresh checkout can boot. Use
73
+ `--non-interactive` with explicit flags for CI / scripted setup:
74
+ `care init --non-interactive --api-key sk-... --base-url ... --model ...`.
75
+
76
+ The TUI opens directly into the **chat surface** — a Claude-Code-style
77
+ transcript with a prompt at the bottom and a mode toggle above it.
78
+ Type a task in natural language to generate + run an agent chain;
79
+ type a slash command (`/help`, `/mode`, `/library`, `/dataset`,
80
+ `/evolution`, `/tour`, …) for the non-chat affordances. First-time
81
+ users see a one-line offer to type `/tour` for a 5-step walkthrough.
82
+
83
+ ### Chat modes
84
+
85
+ The toggle above the prompt picks one of two modes; `/mode` switches
86
+ the same setting via the keyboard. Default is **Ad-Hoc** —
87
+ configurable per-deployment with `CARE_CHAT__DEFAULT_MODE`.
88
+
89
+ | Mode | What happens on every prompt |
90
+ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
91
+ | **Ad-Hoc** | MAGE generates a chain, CARL runs it on the spot, the answer prints inline. The agent may loop (ReAct) until it decides the task is done. **Nothing is saved.** |
92
+ | **Production** | MAGE generates a _reproducible_ chain, CARE saves it to Memory under a stable `chain_id`, runs one baseline to seed a dataset entry, and (when Platform is wired) kicks off an evolution run. Use `/dataset list <chain_id>` / `/dataset run <chain_id>` / `/evolution watch <run_id>` to follow up. |
93
+
94
+ Production requires `CARE_MEMORY__BASE_URL` (and `CARE_MEMORY__API_KEY`
95
+ when the deployment enforces auth). Without Memory configured,
96
+ selecting Production auto-falls back to Ad-Hoc with a warning line —
97
+ the toggle's tooltip explains why.
98
+
99
+ First boot (no `~/.config/care/config.toml` on disk) lands on the
100
+ **Settings** screen so you can configure Memory / Platform base URLs +
101
+ the MAGE LLM credentials before doing anything else. Returning users
102
+ land on the chat surface; `/library` opens the saved-agents table
103
+ (last-run time, favourite status, fitness scores, row-action keys
104
+ below).
105
+
106
+ ## Canonical user flow
107
+
108
+ Generate Agent A → save it → generate B and C → return to A from the
109
+ library → re-run from the same task + context files → optionally
110
+ evolve A and accept the best individual back into the stable channel.
111
+
112
+ ## Screens
113
+
114
+ CARE ships **18+ screens** covering the full lifecycle:
115
+
116
+ | Screen | Purpose |
117
+ | --------------------- | ------------------------------------------------ |
118
+ | `WelcomeScreen` | Boot splash + recents sidebar |
119
+ | `LibraryScreen` | Saved-agent table, row actions, search |
120
+ | `QueryScreen` | + New agent — task description + context files |
121
+ | `GenerationScreen` | Live MAGE progress |
122
+ | `InspectionScreen` | Saved-chain detail + run history |
123
+ | `EditAgentScreen` | Inline edit + Save / Promote-to-stable |
124
+ | `ExecutionScreen` | Live CARL run + token streaming |
125
+ | `EvolutionScreen` | GA + Pareto picker + accept-winner |
126
+ | `ReplayScreen` | Step through a saved ReasoningResult |
127
+ | `CatalogScreen` | Browse installed capabilities (skills/MCP/tools) |
128
+ | `MarketplaceScreen` | Search shared agent_skill listings on Memory |
129
+ | `HelpScreen` | Tutorial + key cheat-sheet |
130
+ | `SettingsScreen` | Edit MAGE / Memory / Platform / theme |
131
+ | `TaskListDrawer` | In-flight tasks panel |
132
+ | `CommandPaletteModal` | Fuzzy palette over commands + saved entities |
133
+ | `DiffModal` | Side-by-side compare two chains |
134
+ | `LineageModal` | Walk a chain's ancestry DAG |
135
+ | `ConflictModal` | Resolve a name collision on save |
136
+
137
+ ## Global keys
138
+
139
+ - `Ctrl+P` — Command palette (search commands + chains + skills)
140
+ - `Ctrl+B` — Task list drawer
141
+ - `Ctrl+K` — Capability catalog
142
+ - `Ctrl+S` — Save current artifact
143
+ - `Ctrl+R` — Re-run current chain
144
+ - `?` — Help (tutorial + every binding)
145
+ - `Esc` — Back / cancel
146
+ - `Ctrl+Q` — Quit
147
+
148
+ Each screen layers its own bindings — see `?` (Help) for the full set
149
+ filtered by the active screen.
150
+
151
+ A single-page reference table covering every screen + modal lives at
152
+ [`docs/screens/README.md`](docs/screens/README.md). It maps each
153
+ surface to its slash command + status (M0/M1) + primary purpose so a
154
+ new contributor can locate the right module from one click.
155
+
156
+ ## Demo
157
+
158
+ A short asciicast walks the three CLI surfaces against a
159
+ hermetic seed directory. Reproduce or re-record with:
160
+
161
+ ```bash
162
+ scripts/record_demo.sh
163
+ ```
164
+
165
+ See [`examples/asciicast/recording_script.md`](examples/asciicast/recording_script.md)
166
+ for the per-act keystroke list. The output lands at
167
+ `docs/asciicasts/care-tour.cast` and can be embedded in this
168
+ README once recorded (`asciinema upload` for a hosted player or
169
+ a local relative link for offline reading).
170
+
171
+ ## Architecture
172
+
173
+ CARE is the consumer at the top of a four-module stack — see
174
+ [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the layer-by-layer
175
+ walk-through (generation / execution / persistence / evolution) with
176
+ cross-links to the upstream modules and CARE's internal module
177
+ boundaries.
178
+
179
+ ## Configuration
180
+
181
+ CARE reads its configuration from three sources, in increasing precedence:
182
+
183
+ 1. Defaults baked into `care.config.CareConfig`.
184
+ 2. `~/.config/care/config.toml` (user-global TOML).
185
+ 3. `./care.toml` in the current working directory (per-project overrides).
186
+ 4. `CARE_*` environment variables.
187
+
188
+ Nested fields use double-underscores in env-var form, mirroring how the
189
+ TOML sections nest. For example, `[mage] mode = "fast"` in TOML is
190
+ `CARE_MAGE__MODE=fast` in the environment.
191
+
192
+ See [`.env.example`](.env.example) for the complete list of supported
193
+ variables with descriptions and defaults. Copy it to `.env` (or export the
194
+ vars in your shell) and override only what you need.
195
+
196
+ ### Quick reference
197
+
198
+ | Section | Env-var prefix | Purpose |
199
+ | ----------- | ------------------- | -------------------------------------- |
200
+ | `mage` | `CARE_MAGE__*` | MAGE generator (provider, API key, …) |
201
+ | `memory` | `CARE_MEMORY__*` | GigaEvo Memory connection |
202
+ | `platform` | `CARE_PLATFORM__*` | GigaEvo Platform connection |
203
+ | `sandbox` | `CARE_SANDBOX__*` | AgentSkill sandbox backend + limits |
204
+ | `tools` | `CARE_TOOLS__*` | `@carl_tool` registry + bundled builtins (web_search, …) + on-the-fly synthesis |
205
+ | `telemetry` | `CARE_TELEMETRY__*` | Opt-in event-stream sink (Langfuse, …) |
206
+ | `defaults` | `CARE_DEFAULTS__*` | UI defaults (language, history size) |
207
+
208
+ ## CLI
209
+
210
+ `care` (no subcommand) launches the TUI. The headless subcommands share
211
+ the `CareConfig` and data layers the TUI uses — every screen's primary
212
+ affordance has a terminal twin.
213
+
214
+ **Setup**
215
+
216
+ - `care init [--non-interactive] [--api-key X] [--base-url Y] [--model Z] [--mode ad_hoc|production] [--force]` —
217
+ one-shot quick-start: writes a minimal `.env` with the four MAGE +
218
+ chat keys a fresh checkout needs. Refuses to overwrite an existing
219
+ `.env` without `--force`.
220
+
221
+ **Discovery & validation**
222
+
223
+ - `care catalog [--json] [--kind ...]` — list installed AgentSkills,
224
+ MCP servers, tools, capability memory cards.
225
+ - `care validate <chain.json>` — parse + preflight a CARL chain.
226
+ - `care import <pattern>... [--apply]` — batch-validate (dry-run
227
+ default) or import chain JSON files.
228
+
229
+ **Generate / run / replay**
230
+
231
+ - `care generate "<task>" [--mode fast|deep] [--save NAME] [--output PATH]` —
232
+ one-shot MAGE generation.
233
+ - `care run <chain_id> [--execute] [--task TEXT] [--input KEY=VAL] [--save-result NAME]` —
234
+ fetch a saved chain, preflight, and optionally execute via CARL.
235
+ - `care replay <run.json>` — step through a saved
236
+ `ReasoningResult` / `RunRecord` JSON.
237
+
238
+ **Memory browse**
239
+
240
+ - `care memory ls [--entity-type ...] [--tag ...] [--q ...]` —
241
+ list saved entities.
242
+ - `care memory show <entity_id> [--content-only]` — drill down on
243
+ a single entity.
244
+ - `care memory history <chain_id>` — list recorded runs for a
245
+ chain.
246
+ - `care search "<query>" [--search-type bm25|vector|hybrid]` —
247
+ BM25 / vector / hybrid search across saved entities.
248
+ - `care diff <left_id> <right_id>` — side-by-side chain compare.
249
+ - `care lineage <chain_id>` — walk the ancestry DAG.
250
+ - `care favourite <entity_id> [--off]` — star / unstar a library
251
+ entity.
252
+
253
+ **Capabilities & evolution**
254
+
255
+ - `care marketplace "<query>"` — search shared agent_skill listings.
256
+ - `care evolve <chain_id> [--wait] [--accept]` — submit + watch +
257
+ accept an evolution run.
258
+
259
+ **UX**
260
+
261
+ - `care help [--markdown]` — render the tutorial + cheat-sheet.
262
+
263
+ Run `care <subcommand> --help` for the full flag set on each.