mindroot 9.11.0__py3-none-any.whl → 9.12.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.

Potentially problematic release.


This version of mindroot might be problematic. Click here for more details.

Files changed (415) hide show
  1. mindroot/coreplugins/home/templates/home.jinja2 +1 -0
  2. mindroot/docs/Makefile +20 -0
  3. mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
  4. mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
  5. mindroot/docs/_build/doctrees/environment.pickle +0 -0
  6. mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
  7. mindroot/docs/_build/doctrees/index.doctree +0 -0
  8. mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
  9. mindroot/docs/_build/doctrees/installation.doctree +0 -0
  10. mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
  11. mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
  12. mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
  13. mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
  14. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
  15. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
  16. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
  17. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
  18. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
  19. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
  20. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
  21. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
  22. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
  23. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
  24. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
  25. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
  26. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
  27. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
  28. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
  29. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
  30. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
  31. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
  32. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
  33. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
  34. mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
  35. mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
  36. mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
  37. mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
  38. mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
  39. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
  40. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
  41. mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
  42. mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
  43. mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
  44. mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
  45. mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
  46. mindroot/docs/_build/html/.buildinfo +4 -0
  47. mindroot/docs/_build/html/.buildinfo.bak +4 -0
  48. mindroot/docs/_build/html/_images/envvar.png +0 -0
  49. mindroot/docs/_build/html/_images/files.png +0 -0
  50. mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
  51. mindroot/docs/_build/html/_images/mood.png +0 -0
  52. mindroot/docs/_build/html/_images/moon.png +0 -0
  53. mindroot/docs/_build/html/_images/openrouter.png +0 -0
  54. mindroot/docs/_build/html/_images/restart.png +0 -0
  55. mindroot/docs/_build/html/_modules/index.html +425 -0
  56. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
  57. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
  58. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
  59. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
  60. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
  61. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
  62. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
  63. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
  64. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
  65. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
  66. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
  67. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
  68. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
  69. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
  70. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
  71. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
  72. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
  73. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
  74. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
  75. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
  76. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
  77. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
  78. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
  79. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
  80. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
  81. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
  82. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
  83. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
  84. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
  85. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
  86. mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
  87. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
  88. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
  89. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
  90. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
  91. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
  92. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
  93. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
  94. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
  95. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
  96. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
  97. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
  98. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
  99. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
  100. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
  101. mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
  102. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
  103. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
  104. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
  105. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
  106. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
  107. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
  108. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
  109. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
  110. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
  111. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
  112. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
  113. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
  114. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
  115. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
  116. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
  117. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
  118. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
  119. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
  120. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
  121. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
  122. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
  123. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
  124. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
  125. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
  126. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
  127. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
  128. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
  129. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
  130. mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
  131. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
  132. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
  133. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
  134. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
  135. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
  136. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
  137. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
  138. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
  139. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
  140. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
  141. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
  142. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
  143. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
  144. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
  145. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
  146. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
  147. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
  148. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
  149. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
  150. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
  151. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
  152. mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
  153. mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
  154. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
  155. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
  156. mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
  157. mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
  158. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
  159. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
  160. mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
  161. mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
  162. mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
  163. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
  164. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
  165. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
  166. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
  167. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
  168. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
  169. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
  170. mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
  171. mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
  172. mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
  173. mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
  174. mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
  175. mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
  176. mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
  177. mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
  178. mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
  179. mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
  180. mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
  181. mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
  182. mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
  183. mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
  184. mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
  185. mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
  186. mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
  187. mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
  188. mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
  189. mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
  190. mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
  191. mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
  192. mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
  193. mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
  194. mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
  195. mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
  196. mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
  197. mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
  198. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
  199. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
  200. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
  201. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
  202. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
  203. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
  204. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
  205. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
  206. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
  207. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
  208. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
  209. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
  210. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
  211. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
  212. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
  213. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
  214. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
  215. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
  216. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
  217. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
  218. mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
  219. mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
  220. mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
  221. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
  222. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
  223. mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
  224. mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
  225. mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
  226. mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
  227. mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
  228. mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
  229. mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
  230. mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  231. mindroot/docs/_build/html/_static/basic.css +906 -0
  232. mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
  233. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  234. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  235. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  236. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  237. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  238. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  239. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  240. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  241. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  242. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  243. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  244. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  245. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  246. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  247. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  248. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  249. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  250. mindroot/docs/_build/html/_static/css/theme.css +4 -0
  251. mindroot/docs/_build/html/_static/custom.css +19 -0
  252. mindroot/docs/_build/html/_static/debug.css +69 -0
  253. mindroot/docs/_build/html/_static/doctools.js +149 -0
  254. mindroot/docs/_build/html/_static/documentation_options.js +13 -0
  255. mindroot/docs/_build/html/_static/file.png +0 -0
  256. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  257. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  258. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  259. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  260. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  261. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  262. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  263. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  264. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  265. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  266. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  267. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  268. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  269. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  270. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  271. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  272. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  273. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  274. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  275. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  276. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  277. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  278. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  279. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  280. mindroot/docs/_build/html/_static/jquery.js +2 -0
  281. mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
  282. mindroot/docs/_build/html/_static/js/theme.js +1 -0
  283. mindroot/docs/_build/html/_static/js/versions.js +228 -0
  284. mindroot/docs/_build/html/_static/language_data.js +192 -0
  285. mindroot/docs/_build/html/_static/minus.png +0 -0
  286. mindroot/docs/_build/html/_static/plus.png +0 -0
  287. mindroot/docs/_build/html/_static/pygments.css +232 -0
  288. mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
  289. mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
  290. mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
  291. mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
  292. mindroot/docs/_build/html/_static/searchtools.js +635 -0
  293. mindroot/docs/_build/html/_static/skeleton.css +296 -0
  294. mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
  295. mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
  296. mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
  297. mindroot/docs/_build/html/_static/styles/furo.css +2 -0
  298. mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
  299. mindroot/docs/_build/html/chat_with_assistant.html +329 -0
  300. mindroot/docs/_build/html/developer_documentation.html +338 -0
  301. mindroot/docs/_build/html/genindex.html +4690 -0
  302. mindroot/docs/_build/html/getting_started.html +423 -0
  303. mindroot/docs/_build/html/index.html +357 -0
  304. mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
  305. mindroot/docs/_build/html/installation.html +330 -0
  306. mindroot/docs/_build/html/llm_api_key.html +337 -0
  307. mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
  308. mindroot/docs/_build/html/objects.inv +0 -0
  309. mindroot/docs/_build/html/programming_task.html +326 -0
  310. mindroot/docs/_build/html/py-modindex.html +1307 -0
  311. mindroot/docs/_build/html/search.html +307 -0
  312. mindroot/docs/_build/html/searchindex.js +1 -0
  313. mindroot/docs/_build/html/source/ahp.html +302 -0
  314. mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
  315. mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
  316. mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
  317. mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
  318. mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
  319. mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
  320. mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
  321. mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
  322. mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
  323. mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
  324. mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
  325. mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
  326. mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
  327. mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
  328. mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
  329. mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
  330. mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
  331. mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
  332. mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
  333. mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
  334. mindroot/docs/_build/html/source/mindroot.html +811 -0
  335. mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
  336. mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
  337. mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
  338. mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
  339. mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
  340. mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
  341. mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
  342. mindroot/docs/_build/html/source/modules.html +377 -0
  343. mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
  344. mindroot/docs/_build/html/starting_mindroot.html +325 -0
  345. mindroot/docs/_build/html/user_documentation.html +333 -0
  346. mindroot/docs/_static/custom.css +19 -0
  347. mindroot/docs/chat_with_assistant.rst +14 -0
  348. mindroot/docs/conf.py +54 -0
  349. mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
  350. mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
  351. mindroot/docs/data/equivalent_flags.json +1 -0
  352. mindroot/docs/data/mcp/servers.json +9 -0
  353. mindroot/docs/data/models.json +57 -0
  354. mindroot/docs/data/plugin_manifest.json +95 -0
  355. mindroot/docs/data/preferred_models.json +12 -0
  356. mindroot/docs/data/providers.json +62 -0
  357. mindroot/docs/developer_documentation.rst +26 -0
  358. mindroot/docs/envvar.png +0 -0
  359. mindroot/docs/files.png +0 -0
  360. mindroot/docs/getting_started.rst +139 -0
  361. mindroot/docs/index.rst +38 -0
  362. mindroot/docs/install_plugins_with_tools.rst +25 -0
  363. mindroot/docs/installation.rst +21 -0
  364. mindroot/docs/installopenrouter.png +0 -0
  365. mindroot/docs/llm_api_key.rst +22 -0
  366. mindroot/docs/llm_plugin_installation.rst +27 -0
  367. mindroot/docs/make.bat +35 -0
  368. mindroot/docs/mood.png +0 -0
  369. mindroot/docs/moon.png +0 -0
  370. mindroot/docs/openrouter.png +0 -0
  371. mindroot/docs/personas/local/Assistant/avatar.png +0 -0
  372. mindroot/docs/personas/local/Assistant/faceref.png +0 -0
  373. mindroot/docs/personas/local/Assistant/persona.json +7 -0
  374. mindroot/docs/programming_task.rst +10 -0
  375. mindroot/docs/restart.png +0 -0
  376. mindroot/docs/source/ahp.rst +7 -0
  377. mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
  378. mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
  379. mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
  380. mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
  381. mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
  382. mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
  383. mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
  384. mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
  385. mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
  386. mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
  387. mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
  388. mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
  389. mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
  390. mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
  391. mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
  392. mindroot/docs/source/mindroot.coreplugins.rst +35 -0
  393. mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
  394. mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
  395. mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
  396. mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
  397. mindroot/docs/source/mindroot.lib.auth.rst +29 -0
  398. mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
  399. mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
  400. mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
  401. mindroot/docs/source/mindroot.lib.providers.rst +61 -0
  402. mindroot/docs/source/mindroot.lib.rst +152 -0
  403. mindroot/docs/source/mindroot.registry.rst +29 -0
  404. mindroot/docs/source/mindroot.rst +54 -0
  405. mindroot/docs/source/modules.rst +7 -0
  406. mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
  407. mindroot/docs/starting_mindroot.rst +12 -0
  408. mindroot/docs/user_documentation.rst +16 -0
  409. mindroot/server.py +10 -1
  410. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
  411. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +415 -8
  412. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
  413. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
  414. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
  415. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,460 @@
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="../../../../">
5
+ <head>
6
+ <meta charset="utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>mindroot.coreplugins.check_list.mod &mdash; MindRoot 9.10.0 documentation</title>
9
+ <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
10
+ <link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
11
+
12
+
13
+ <script src="../../../../_static/jquery.js?v=5d32c60e"></script>
14
+ <script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
15
+ <script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
16
+ <script src="../../../../_static/doctools.js?v=9bcbadda"></script>
17
+ <script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
18
+ <script src="../../../../_static/js/theme.js"></script>
19
+ <link rel="index" title="Index" href="../../../../genindex.html" />
20
+ <link rel="search" title="Search" href="../../../../search.html" />
21
+ </head>
22
+
23
+ <body class="wy-body-for-nav">
24
+ <div class="wy-grid-for-nav">
25
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
26
+ <div class="wy-side-scroll">
27
+ <div class="wy-side-nav-search" style="background: #343131" >
28
+
29
+
30
+
31
+ <a href="../../../../index.html" class="icon icon-home">
32
+ MindRoot
33
+ </a>
34
+ <div role="search">
35
+ <form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
36
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
37
+ <input type="hidden" name="check_keywords" value="yes" />
38
+ <input type="hidden" name="area" value="default" />
39
+ </form>
40
+ </div>
41
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
42
+ <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
43
+ <ul>
44
+ <li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
45
+ </ul>
46
+
47
+ </div>
48
+ </div>
49
+ </nav>
50
+
51
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
52
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
53
+ <a href="../../../../index.html">MindRoot</a>
54
+ </nav>
55
+
56
+ <div class="wy-nav-content">
57
+ <div class="rst-content">
58
+ <div role="navigation" aria-label="Page navigation">
59
+ <ul class="wy-breadcrumbs">
60
+ <li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
61
+ <li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
62
+ <li class="breadcrumb-item active">mindroot.coreplugins.check_list.mod</li>
63
+ <li class="wy-breadcrumbs-aside">
64
+ </li>
65
+ </ul>
66
+ <hr/>
67
+ </div>
68
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
69
+ <div itemprop="articleBody">
70
+
71
+ <h1>Source code for mindroot.coreplugins.check_list.mod</h1><div class="highlight"><pre>
72
+ <span></span><span class="sd">&quot;&quot;&quot;</span>
73
+ <span class="sd">checklist helper for an LLM‑agent system</span>
74
+ <span class="sd">—————————————————————————————————————————————————————————————————————————————</span>
75
+ <span class="sd">Purpose</span>
76
+ <span class="sd">-------</span>
77
+ <span class="sd">• Parse a Markdown &quot;##\tChecklist&quot; section where each subtask is</span>
78
+ <span class="sd"> written as a task‑list line:</span>
79
+
80
+ <span class="sd"> - [ ] label of subtask</span>
81
+ <span class="sd"> arbitrary markdown body… (until next task or heading)</span>
82
+
83
+ <span class="sd">• Store parsed tasks + cursor in `context.data[&#39;checklist&#39;]`.</span>
84
+
85
+ <span class="sd">• Runtime helpers:</span>
86
+ <span class="sd"> load_checklist(md, ctx) → parse markdown + reset state</span>
87
+ <span class="sd"> complete_subtask(subtask_id, context) → mark subtask done, advance cursor</span>
88
+ <span class="sd"> goto_subtask(subtask_id, context) → move to a specific subtask</span>
89
+ <span class="sd"> clear_subtask(subtask_id, context) → mark a subtask as incomplete</span>
90
+ <span class="sd"> get_checklist_status(context) → show the full checklist status</span>
91
+
92
+ <span class="sd">`complete_subtask` and other commands live at module level so the agent can call them</span>
93
+ <span class="sd">as tools. No third‑party deps—only Python&#39;s `re` module.</span>
94
+ <span class="sd">&quot;&quot;&quot;</span>
95
+
96
+ <span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
97
+ <span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">command</span>
98
+ <span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.services</span><span class="w"> </span><span class="kn">import</span> <span class="n">service</span>
99
+ <span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
100
+
101
+ <span class="c1"># ---------- parsing ------------------------------------------------------</span>
102
+
103
+ <span class="n">TASK_RE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^-\s*\[(?P&lt;done&gt;[ xX])\]\s*(?P&lt;label&gt;.*?)\s*$&#39;</span><span class="p">)</span>
104
+ <span class="n">HEADER_RE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^#{1,6}\s&#39;</span><span class="p">)</span> <span class="c1"># any Markdown heading</span>
105
+ <span class="n">CHECKLIST_HEADER_RE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^#{1,6}\s+Checklist\b&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span><span class="p">)</span> <span class="c1"># Checklist heading</span>
106
+
107
+ <span class="k">def</span><span class="w"> </span><span class="nf">_parse</span><span class="p">(</span><span class="n">md</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
108
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Extract tasks as a list of dicts: {label, body, done}.&quot;&quot;&quot;</span>
109
+ <span class="n">lines</span><span class="p">,</span> <span class="n">tasks</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">md</span><span class="o">.</span><span class="n">splitlines</span><span class="p">(),</span> <span class="p">[],</span> <span class="mi">0</span>
110
+ <span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">):</span>
111
+ <span class="n">m</span> <span class="o">=</span> <span class="n">TASK_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
112
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">m</span><span class="p">:</span> <span class="c1"># not a task‑list line</span>
113
+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
114
+ <span class="k">continue</span>
115
+
116
+ <span class="n">done</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;done&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="s2">&quot;✓&quot;</span><span class="p">)</span>
117
+ <span class="n">label</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;label&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
118
+
119
+ <span class="c1"># collect everything until next task or heading</span>
120
+ <span class="n">body_lines</span> <span class="o">=</span> <span class="p">[]</span>
121
+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
122
+ <span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
123
+ <span class="n">TASK_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="ow">or</span> <span class="n">HEADER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
124
+ <span class="p">):</span>
125
+ <span class="n">body_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
126
+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
127
+
128
+ <span class="n">tasks</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
129
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
130
+ <span class="s2">&quot;body&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">body_lines</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span>
131
+ <span class="s2">&quot;done&quot;</span><span class="p">:</span> <span class="n">done</span><span class="p">,</span>
132
+ <span class="p">})</span>
133
+ <span class="k">return</span> <span class="n">tasks</span>
134
+
135
+
136
+ <div class="viewcode-block" id="extract_checklist_section">
137
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.extract_checklist_section">[docs]</a>
138
+ <span class="k">def</span><span class="w"> </span><span class="nf">extract_checklist_section</span><span class="p">(</span><span class="n">md</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
139
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Extract the checklist section from larger text.</span>
140
+ <span class="sd"> </span>
141
+ <span class="sd"> Looks for a heading like &#39;# Checklist&#39;, &#39;## Checklist&#39;, etc., and extracts</span>
142
+ <span class="sd"> all content from that heading until the next heading of the same or lower level,</span>
143
+ <span class="sd"> or the end of the text.</span>
144
+ <span class="sd"> </span>
145
+ <span class="sd"> Returns the extracted section, or the original text if no checklist section is found.</span>
146
+ <span class="sd"> &quot;&quot;&quot;</span>
147
+ <span class="n">lines</span> <span class="o">=</span> <span class="n">md</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
148
+ <span class="n">start_idx</span> <span class="o">=</span> <span class="kc">None</span>
149
+ <span class="n">checklist_level</span> <span class="o">=</span> <span class="mi">0</span>
150
+
151
+ <span class="c1"># Find the checklist heading</span>
152
+ <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">):</span>
153
+ <span class="n">match</span> <span class="o">=</span> <span class="n">CHECKLIST_HEADER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
154
+ <span class="k">if</span> <span class="n">match</span><span class="p">:</span>
155
+ <span class="n">start_idx</span> <span class="o">=</span> <span class="n">i</span>
156
+ <span class="c1"># Count the number of # to determine heading level</span>
157
+ <span class="n">checklist_level</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">))</span>
158
+ <span class="k">break</span>
159
+
160
+ <span class="k">if</span> <span class="n">start_idx</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
161
+ <span class="k">return</span> <span class="n">md</span> <span class="c1"># No checklist section found, return original text</span>
162
+
163
+ <span class="c1"># Find the end of the section (next heading of same or lower level)</span>
164
+ <span class="n">end_idx</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
165
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)):</span>
166
+ <span class="k">if</span> <span class="n">HEADER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">))</span> <span class="o">&lt;=</span> <span class="n">checklist_level</span><span class="p">:</span>
167
+ <span class="n">end_idx</span> <span class="o">=</span> <span class="n">i</span>
168
+ <span class="k">break</span>
169
+
170
+ <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">start_idx</span><span class="p">:</span><span class="n">end_idx</span><span class="p">])</span></div>
171
+
172
+
173
+
174
+ <span class="c1"># ---------- state helpers ------------------------------------------------</span>
175
+
176
+ <span class="k">def</span><span class="w"> </span><span class="nf">_state</span><span class="p">(</span><span class="n">ctx</span><span class="p">):</span>
177
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the mutable checklist state in ctx.data.&quot;&quot;&quot;</span>
178
+ <span class="k">return</span> <span class="n">ctx</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">&quot;checklist&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;tasks&quot;</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">&quot;cursor&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">})</span>
179
+
180
+ <div class="viewcode-block" id="load_checklist">
181
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.load_checklist">[docs]</a>
182
+ <span class="k">def</span><span class="w"> </span><span class="nf">load_checklist</span><span class="p">(</span><span class="n">md</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
183
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Parse markdown and reset cursor to first unchecked subtask.&quot;&quot;&quot;</span>
184
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
185
+ <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">_parse</span><span class="p">(</span><span class="n">md</span><span class="p">)</span>
186
+ <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span>
187
+ <span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">])</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">t</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]),</span>
188
+ <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]),</span>
189
+ <span class="p">)</span></div>
190
+
191
+
192
+
193
+ <div class="viewcode-block" id="load_checklist_from_instructions">
194
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.load_checklist_from_instructions">[docs]</a>
195
+ <span class="nd">@service</span><span class="p">()</span>
196
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">load_checklist_from_instructions</span><span class="p">(</span><span class="n">md</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
197
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Extract checklist section from instructions and load it.</span>
198
+ <span class="sd"> </span>
199
+ <span class="sd"> Looks for a section starting with &#39;# Checklist&#39; or similar heading.</span>
200
+ <span class="sd"> </span>
201
+ <span class="sd"> Example:</span>
202
+ <span class="sd"> { &quot;load_checklist_from_instructions&quot;: { &quot;md&quot;: &quot;Full instructions with embedded checklist&quot; } }</span>
203
+ <span class="sd"> &quot;&quot;&quot;</span>
204
+ <span class="n">checklist_section</span> <span class="o">=</span> <span class="n">extract_checklist_section</span><span class="p">(</span><span class="n">md</span><span class="p">)</span>
205
+ <span class="n">load_checklist</span><span class="p">(</span><span class="n">checklist_section</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
206
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;Loaded checklist from instructions.</span><span class="se">\n\n</span><span class="si">{</span><span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span></div>
207
+
208
+
209
+
210
+ <span class="c1"># ---------- helper functions ---------------------------------------------</span>
211
+
212
+ <span class="k">def</span><span class="w"> </span><span class="nf">_resolve_subtask_id</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
213
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve a subtask_id to an index (0-based).</span>
214
+ <span class="sd"> </span>
215
+ <span class="sd"> subtask_id can be:</span>
216
+ <span class="sd"> - A number (1-based index, converted to 0-based)</span>
217
+ <span class="sd"> - A string matching a subtask label</span>
218
+ <span class="sd"> - None/default (-1) to use the current cursor position</span>
219
+ <span class="sd"> &quot;&quot;&quot;</span>
220
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
221
+
222
+ <span class="c1"># Default to current cursor position</span>
223
+ <span class="k">if</span> <span class="n">subtask_id</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">subtask_id</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
224
+ <span class="k">return</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span>
225
+
226
+ <span class="c1"># If it&#39;s a number, convert from 1-based to 0-based</span>
227
+ <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
228
+ <span class="n">idx</span> <span class="o">=</span> <span class="n">subtask_id</span> <span class="o">-</span> <span class="mi">1</span>
229
+ <span class="k">else</span><span class="p">:</span>
230
+ <span class="c1"># It&#39;s a string, try to find a matching label</span>
231
+ <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">task</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
232
+ <span class="k">if</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">subtask_id</span><span class="p">:</span>
233
+ <span class="k">return</span> <span class="n">i</span>
234
+ <span class="c1"># No match found</span>
235
+ <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
236
+
237
+ <span class="k">return</span> <span class="n">idx</span>
238
+
239
+
240
+ <span class="k">def</span><span class="w"> </span><span class="nf">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
241
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Format the full checklist status as a markdown string.&quot;&quot;&quot;</span>
242
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
243
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]:</span>
244
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
245
+
246
+ <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;### Checklist Status</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">]</span>
247
+
248
+ <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">task</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
249
+ <span class="c1"># Determine status indicator</span>
250
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]:</span>
251
+ <span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;➡️ &quot;</span> <span class="c1"># Current task</span>
252
+ <span class="k">elif</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]:</span>
253
+ <span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;✅ &quot;</span> <span class="c1"># Completed</span>
254
+ <span class="k">else</span><span class="p">:</span>
255
+ <span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;❌ &quot;</span> <span class="c1"># Not completed</span>
256
+
257
+ <span class="c1"># Add task line</span>
258
+ <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">status</span><span class="si">}</span><span class="s2">**Subtask**: </span><span class="si">{</span><span class="n">task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
259
+
260
+ <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
261
+
262
+
263
+ <span class="c1"># ---------- module‑level tool commands ----------------------------------</span>
264
+
265
+ <div class="viewcode-block" id="complete_subtask">
266
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.complete_subtask">[docs]</a>
267
+ <span class="nd">@command</span><span class="p">()</span>
268
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">complete_subtask</span><span class="p">(</span><span class="n">subtask_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
269
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
270
+ <span class="sd"> Mark a subtask complete and return a Markdown status message.</span>
271
+ <span class="sd"> </span>
272
+ <span class="sd"> Parameters:</span>
273
+ <span class="sd"> - subtask_id: Optional. The subtask to complete, specified by:</span>
274
+ <span class="sd"> - The exact subtask label text</span>
275
+ <span class="sd"> - Omit to complete the current subtask</span>
276
+ <span class="sd"> </span>
277
+ <span class="sd"> Example:</span>
278
+ <span class="sd"> { &quot;complete_subtask&quot;: {} } # Complete current subtask</span>
279
+ <span class="sd"> { &quot;complete_subtask&quot;: { &quot;subtask_id&quot;: &quot;Review documents&quot; } } # Complete by label</span>
280
+ <span class="sd"> &quot;&quot;&quot;</span>
281
+ <span class="k">if</span> <span class="n">context</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
282
+ <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
283
+
284
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
285
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]:</span>
286
+ <span class="k">try</span><span class="p">:</span>
287
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Loading checklist from instructions...&quot;</span><span class="p">)</span>
288
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Agent is&quot;</span><span class="p">)</span>
289
+ <span class="nb">print</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">agent</span><span class="p">)</span>
290
+ <span class="n">instructions</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;instructions&quot;</span><span class="p">]</span>
291
+ <span class="k">await</span> <span class="n">load_checklist_from_instructions</span><span class="p">(</span><span class="n">instructions</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
292
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
293
+ <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error loading checklist: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
294
+ <span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
295
+ <span class="nb">print</span><span class="p">(</span><span class="n">trace</span><span class="p">)</span>
296
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
297
+
298
+ <span class="n">idx</span> <span class="o">=</span> <span class="n">_resolve_subtask_id</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
299
+ <span class="k">if</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
300
+ <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
301
+
302
+ <span class="c1"># mark as done</span>
303
+ <span class="n">done_task</span> <span class="o">=</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">][</span><span class="n">idx</span><span class="p">]</span>
304
+ <span class="n">done_task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
305
+
306
+ <span class="c1"># advance cursor to next open subtask</span>
307
+ <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span>
308
+ <span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">][</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:],</span> <span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">t</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]),</span>
309
+ <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]),</span>
310
+ <span class="p">)</span>
311
+
312
+ <span class="c1"># build markdown response</span>
313
+ <span class="n">completed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Completed Subtask </span><span class="si">{</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2">: - [x] </span><span class="si">{</span><span class="n">done_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
314
+ <span class="k">if</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
315
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">completed</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">All subtasks complete ✅</span><span class="se">\n\n</span><span class="si">{</span><span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
316
+
317
+ <span class="n">next_task</span> <span class="o">=</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">][</span><span class="n">st</span><span class="p">[</span><span class="s1">&#39;cursor&#39;</span><span class="p">]]</span>
318
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span>
319
+ <span class="s2"> </span><span class="si">{</span><span class="n">completed</span><span class="si">}</span>
320
+
321
+ <span class="s2"> Next subtask (Subtask </span><span class="si">{</span><span class="n">st</span><span class="p">[</span><span class="s1">&#39;cursor&#39;</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2">)</span>
322
+ <span class="s2"> - [ ] </span><span class="si">{</span><span class="n">next_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span>
323
+ <span class="s2"> </span><span class="si">{</span><span class="n">next_task</span><span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">]</span><span class="si">}</span>
324
+
325
+ <span class="s2"> </span><span class="si">{</span><span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span><span class="si">}</span>
326
+ <span class="s2"> &quot;&quot;&quot;</span></div>
327
+
328
+
329
+ <div class="viewcode-block" id="goto_subtask">
330
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.goto_subtask">[docs]</a>
331
+ <span class="nd">@command</span><span class="p">()</span>
332
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">goto_subtask</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
333
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
334
+ <span class="sd"> Move to a specific subtask without changing its completion status.</span>
335
+ <span class="sd"> </span>
336
+ <span class="sd"> Parameters:</span>
337
+ <span class="sd"> - subtask_id: Required. The subtask to navigate to, specified by:</span>
338
+ <span class="sd"> - The exact subtask label text</span>
339
+ <span class="sd"> </span>
340
+ <span class="sd"> Example:</span>
341
+ <span class="sd"> { &quot;goto_subtask&quot;: { &quot;subtask_id&quot;: &quot;Data analysis&quot; } } # Go to by label</span>
342
+ <span class="sd"> &quot;&quot;&quot;</span>
343
+ <span class="k">if</span> <span class="n">context</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
344
+ <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
345
+
346
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
347
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]:</span>
348
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
349
+
350
+ <span class="n">idx</span> <span class="o">=</span> <span class="n">_resolve_subtask_id</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
351
+ <span class="k">if</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
352
+ <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
353
+
354
+ <span class="c1"># Update cursor position</span>
355
+ <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">idx</span>
356
+
357
+ <span class="c1"># Get the current task</span>
358
+ <span class="n">current_task</span> <span class="o">=</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">][</span><span class="n">idx</span><span class="p">]</span>
359
+
360
+ <span class="c1"># Build response</span>
361
+ <span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;✅&quot;</span> <span class="k">if</span> <span class="n">current_task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;❌&quot;</span>
362
+ <span class="k">return</span> <span class="p">(</span>
363
+ <span class="sa">f</span><span class="s2">&quot;Moved to Subtask </span><span class="si">{</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">status</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">current_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
364
+ <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">current_task</span><span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
365
+ <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
366
+ <span class="p">)</span></div>
367
+
368
+
369
+
370
+ <div class="viewcode-block" id="clear_subtask">
371
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.clear_subtask">[docs]</a>
372
+ <span class="nd">@command</span><span class="p">()</span>
373
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">clear_subtask</span><span class="p">(</span><span class="n">subtask_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
374
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
375
+ <span class="sd"> Mark a subtask as incomplete (not done).</span>
376
+ <span class="sd"> </span>
377
+ <span class="sd"> Parameters:</span>
378
+ <span class="sd"> - subtask_id: Optional. The subtask to clear, specified by:</span>
379
+ <span class="sd"> - The exact subtask label text</span>
380
+ <span class="sd"> - Omit to clear the current subtask</span>
381
+ <span class="sd"> </span>
382
+ <span class="sd"> Example:</span>
383
+ <span class="sd"> { &quot;clear_subtask&quot;: {} } # Clear current subtask</span>
384
+ <span class="sd"> { &quot;clear_subtask&quot;: { &quot;subtask_id&quot;: &quot;Review documents&quot; } } # Clear by label</span>
385
+ <span class="sd"> &quot;&quot;&quot;</span>
386
+ <span class="k">if</span> <span class="n">context</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
387
+ <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
388
+
389
+ <span class="n">st</span> <span class="o">=</span> <span class="n">_state</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
390
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]:</span>
391
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
392
+
393
+ <span class="n">idx</span> <span class="o">=</span> <span class="n">_resolve_subtask_id</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
394
+ <span class="k">if</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">]):</span>
395
+ <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
396
+
397
+ <span class="c1"># Mark as not done</span>
398
+ <span class="n">task</span> <span class="o">=</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;tasks&quot;</span><span class="p">][</span><span class="n">idx</span><span class="p">]</span>
399
+ <span class="n">was_done</span> <span class="o">=</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span>
400
+ <span class="n">task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
401
+
402
+ <span class="c1"># If we cleared the current or earlier task, update cursor</span>
403
+ <span class="k">if</span> <span class="n">idx</span> <span class="o">&lt;=</span> <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]:</span>
404
+ <span class="n">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">idx</span>
405
+
406
+ <span class="c1"># Build response</span>
407
+ <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;Cleared&quot;</span> <span class="k">if</span> <span class="n">was_done</span> <span class="k">else</span> <span class="s2">&quot;Already clear&quot;</span>
408
+ <span class="k">return</span> <span class="p">(</span>
409
+ <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> Subtask </span><span class="si">{</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2">: - [ ] </span><span class="si">{</span><span class="n">task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
410
+ <span class="sa">f</span><span class="s2">&quot;Current subtask is now Subtask </span><span class="si">{</span><span class="n">st</span><span class="p">[</span><span class="s1">&#39;cursor&#39;</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
411
+ <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
412
+ <span class="p">)</span></div>
413
+
414
+
415
+
416
+ <div class="viewcode-block" id="get_checklist_status">
417
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.get_checklist_status">[docs]</a>
418
+ <span class="nd">@command</span><span class="p">()</span>
419
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
420
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
421
+ <span class="sd"> Show the full status of the checklist.</span>
422
+ <span class="sd"> </span>
423
+ <span class="sd"> Example:</span>
424
+ <span class="sd"> { &quot;get_checklist_status&quot;: {} }</span>
425
+ <span class="sd"> &quot;&quot;&quot;</span>
426
+ <span class="k">if</span> <span class="n">context</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
427
+ <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
428
+
429
+ <span class="k">return</span> <span class="n">_format_checklist_status</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></div>
430
+
431
+ </pre></div>
432
+
433
+ </div>
434
+ </div>
435
+ <footer>
436
+
437
+ <hr/>
438
+
439
+ <div role="contentinfo">
440
+ <p>&#169; Copyright 2025, Jason Livesay.</p>
441
+ </div>
442
+
443
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
444
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
445
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
446
+
447
+
448
+ </footer>
449
+ </div>
450
+ </div>
451
+ </section>
452
+ </div>
453
+ <script>
454
+ jQuery(function () {
455
+ SphinxRtdTheme.Navigation.enable(true);
456
+ });
457
+ </script>
458
+
459
+ </body>
460
+ </html>