mindroot 10.0.0__py3-none-any.whl → 10.3.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 (269) hide show
  1. mindroot/coreplugins/agent/agent.py +19 -3
  2. mindroot/coreplugins/agent/agent.py.bak +507 -0
  3. mindroot/coreplugins/chat/buwidget_routes.py +287 -0
  4. mindroot/coreplugins/chat/services.py +66 -2
  5. mindroot/coreplugins/chat/static/css/mobile.css +37 -0
  6. mindroot/coreplugins/chat/static/js/chat.js +26 -4
  7. mindroot/coreplugins/chat/templates/chat.jinja2 +1 -1
  8. mindroot/coreplugins/chat/widget_routes.py +53 -10
  9. mindroot/coreplugins/check_list/mod.py +52 -0
  10. mindroot/coreplugins/check_list/mod_create_checklist_lol.py +756 -0
  11. mindroot/coreplugins/check_list/plugin_info.json +1 -0
  12. mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
  13. mindroot/docs/_build/doctrees/embed_chat.doctree +0 -0
  14. mindroot/docs/_build/doctrees/environment.pickle +0 -0
  15. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
  16. mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
  17. mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
  18. mindroot/docs/_build/html/_images/apikey.png +0 -0
  19. mindroot/docs/_build/html/_images/chatwidgetx.png +0 -0
  20. mindroot/docs/_build/html/_images/disablechatavatar.png +0 -0
  21. mindroot/docs/_build/html/_images/widgetform.png +0 -0
  22. mindroot/docs/_build/html/_images/widgetonpage.png +0 -0
  23. mindroot/docs/_build/html/_modules/index.html +1 -0
  24. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +282 -86
  25. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +281 -88
  26. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +280 -84
  27. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +281 -88
  28. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +279 -86
  29. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +284 -91
  30. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +284 -91
  31. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +281 -88
  32. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +280 -84
  33. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +280 -87
  34. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +282 -86
  35. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +285 -89
  36. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +281 -88
  37. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +280 -87
  38. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +280 -87
  39. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +280 -87
  40. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +281 -88
  41. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +280 -84
  42. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +280 -87
  43. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +1 -0
  44. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +280 -87
  45. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +279 -86
  46. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +280 -87
  47. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +281 -88
  48. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +279 -86
  49. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +280 -87
  50. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +281 -88
  51. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +283 -90
  52. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +279 -86
  53. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +279 -86
  54. mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +669 -213
  55. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +280 -87
  56. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +281 -88
  57. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +281 -88
  58. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +279 -86
  59. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +279 -86
  60. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +279 -86
  61. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +280 -87
  62. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +284 -91
  63. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +280 -87
  64. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +280 -87
  65. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +280 -87
  66. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +280 -87
  67. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +281 -88
  68. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +280 -87
  69. mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +280 -87
  70. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +280 -87
  71. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +280 -87
  72. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +284 -91
  73. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +281 -88
  74. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +279 -86
  75. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +282 -86
  76. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +284 -91
  77. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +282 -86
  78. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +1 -0
  79. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +279 -86
  80. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +280 -87
  81. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +280 -84
  82. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +280 -84
  83. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +282 -86
  84. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +280 -84
  85. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +282 -86
  86. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +282 -86
  87. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +280 -84
  88. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +282 -86
  89. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +280 -84
  90. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +280 -84
  91. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +282 -86
  92. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +282 -86
  93. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +280 -84
  94. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +282 -86
  95. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +285 -89
  96. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +280 -84
  97. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +282 -86
  98. mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +282 -86
  99. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +280 -84
  100. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +282 -86
  101. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +280 -84
  102. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +285 -89
  103. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +282 -86
  104. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +280 -84
  105. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +280 -84
  106. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +280 -84
  107. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +282 -86
  108. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +282 -86
  109. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +282 -86
  110. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +282 -86
  111. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +282 -86
  112. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +285 -89
  113. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +282 -86
  114. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +282 -86
  115. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +280 -84
  116. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +282 -86
  117. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +282 -86
  118. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +282 -86
  119. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +282 -86
  120. mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +280 -84
  121. mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +282 -86
  122. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +285 -89
  123. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +282 -86
  124. mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +282 -86
  125. mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +285 -89
  126. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +440 -91
  127. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +282 -86
  128. mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +280 -84
  129. mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +282 -86
  130. mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +282 -86
  131. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +280 -84
  132. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +280 -84
  133. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +282 -86
  134. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +282 -86
  135. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +282 -86
  136. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +280 -84
  137. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +282 -86
  138. mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +282 -86
  139. mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +282 -87
  140. mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +280 -85
  141. mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +282 -87
  142. mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +1 -0
  143. mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +282 -87
  144. mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +285 -89
  145. mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +282 -86
  146. mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +282 -86
  147. mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +282 -86
  148. mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +1 -0
  149. mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +280 -84
  150. mindroot/docs/_build/html/_modules/mindroot/migrate.html +282 -86
  151. mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +282 -86
  152. mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +285 -89
  153. mindroot/docs/_build/html/_modules/mindroot/server.html +1 -0
  154. mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +282 -86
  155. mindroot/docs/_build/html/_modules/mindroot/server_prev.html +282 -86
  156. mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +1 -1
  157. mindroot/docs/_build/html/_sources/embed_chat.rst.txt +54 -0
  158. mindroot/docs/_build/html/_sources/user_documentation.rst.txt +6 -1
  159. mindroot/docs/_build/html/chat_with_assistant.html +1 -0
  160. mindroot/docs/_build/html/developer_documentation.html +5 -4
  161. mindroot/docs/_build/html/embed_chat.html +381 -0
  162. mindroot/docs/_build/html/genindex.html +9 -2
  163. mindroot/docs/_build/html/getting_started.html +1 -0
  164. mindroot/docs/_build/html/index.html +2 -0
  165. mindroot/docs/_build/html/install_plugins_with_tools.html +1 -0
  166. mindroot/docs/_build/html/installation.html +1 -0
  167. mindroot/docs/_build/html/llm_api_key.html +1 -0
  168. mindroot/docs/_build/html/llm_plugin_installation.html +1 -0
  169. mindroot/docs/_build/html/objects.inv +0 -0
  170. mindroot/docs/_build/html/programming_task.html +4 -3
  171. mindroot/docs/_build/html/py-modindex.html +2 -1
  172. mindroot/docs/_build/html/search.html +1 -0
  173. mindroot/docs/_build/html/searchindex.js +1 -1
  174. mindroot/docs/_build/html/source/ahp.html +1 -0
  175. mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +1 -0
  176. mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +1 -0
  177. mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1 -0
  178. mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +1 -0
  179. mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +76 -45
  180. mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +1 -0
  181. mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +1 -0
  182. mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +1 -0
  183. mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +1 -0
  184. mindroot/docs/_build/html/source/mindroot.coreplugins.html +3 -0
  185. mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +1 -0
  186. mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +1 -0
  187. mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +1 -0
  188. mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +1 -0
  189. mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1 -0
  190. mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +1 -0
  191. mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +1 -0
  192. mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1 -0
  193. mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +1 -0
  194. mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +1 -0
  195. mindroot/docs/_build/html/source/mindroot.html +2 -0
  196. mindroot/docs/_build/html/source/mindroot.lib.auth.html +1 -0
  197. mindroot/docs/_build/html/source/mindroot.lib.html +34 -3
  198. mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +1 -0
  199. mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1 -0
  200. mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +1 -0
  201. mindroot/docs/_build/html/source/mindroot.lib.providers.html +1 -0
  202. mindroot/docs/_build/html/source/mindroot.registry.html +1 -0
  203. mindroot/docs/_build/html/source/modules.html +1 -0
  204. mindroot/docs/_build/html/source/mr_agent_expert_instr.html +1 -0
  205. mindroot/docs/_build/html/starting_mindroot.html +1 -0
  206. mindroot/docs/_build/html/user_documentation.html +9 -0
  207. mindroot/docs/apikey.png +0 -0
  208. mindroot/docs/chatwidget1.png +0 -0
  209. mindroot/docs/chatwidgetx.png +0 -0
  210. mindroot/docs/disablechatavatar.png +0 -0
  211. mindroot/docs/embed_chat.rst +54 -0
  212. mindroot/docs/user_documentation.rst +6 -1
  213. mindroot/docs/widgetform.png +0 -0
  214. mindroot/docs/widgetonpage.png +0 -0
  215. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/METADATA +1 -1
  216. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/RECORD +220 -251
  217. mindroot/docs/_build/html/.buildinfo.bak +0 -4
  218. mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -123
  219. mindroot/docs/_build/html/_static/css/badge_only.css +0 -1
  220. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  221. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  222. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  223. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  224. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  225. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -2671
  226. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  227. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  228. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  229. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  230. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  231. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  232. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  233. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  234. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  235. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  236. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  237. mindroot/docs/_build/html/_static/css/theme.css +0 -4
  238. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  239. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  240. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  241. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  242. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  243. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  244. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  245. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  246. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  247. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  248. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  249. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  250. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  251. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  252. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  253. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  254. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  255. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  256. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  257. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  258. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  259. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  260. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  261. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  262. mindroot/docs/_build/html/_static/jquery.js +0 -2
  263. mindroot/docs/_build/html/_static/js/badge_only.js +0 -1
  264. mindroot/docs/_build/html/_static/js/theme.js +0 -1
  265. mindroot/docs/_build/html/_static/js/versions.js +0 -228
  266. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/WHEEL +0 -0
  267. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/entry_points.txt +0 -0
  268. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/licenses/LICENSE +0 -0
  269. {mindroot-10.0.0.dist-info → mindroot-10.3.0.dist-info}/top_level.txt +0 -0
@@ -1,173 +1,389 @@
1
+ <!doctype html>
2
+ <html class="no-js" lang="en" data-content_root="../../../../">
3
+ <head><meta charset="utf-8"/>
4
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
5
+ <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
6
+
7
+ <!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
8
+ <title>mindroot.coreplugins.check_list.mod - MindRoot 9.10.0 documentation</title>
9
+ <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=d111a655" />
10
+ <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?v=25af2a20" />
11
+ <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
12
+ <link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=f4b9d74b" />
13
+
14
+
1
15
 
2
16
 
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
-
17
+ <style>
18
+ body {
19
+ --color-code-background: #f2f2f2;
20
+ --color-code-foreground: #1e1e1e;
21
+ --color-brand-primary: #007acc;
22
+ --color-brand-content: #007acc;
23
+
24
+ }
25
+ @media not print {
26
+ body[data-theme="dark"] {
27
+ --color-code-background: #2b2b2b;
28
+ --color-code-foreground: #f8f8f2;
29
+ --color-brand-primary: #ff7b72;
30
+ --color-brand-content: #ff7b72;
31
+
32
+ }
33
+ @media (prefers-color-scheme: dark) {
34
+ body:not([data-theme="light"]) {
35
+ --color-code-background: #2b2b2b;
36
+ --color-code-foreground: #f8f8f2;
37
+ --color-brand-primary: #ff7b72;
38
+ --color-brand-content: #ff7b72;
12
39
 
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" >
40
+ }
41
+ }
42
+ }
43
+ </style></head>
44
+ <body>
45
+
46
+ <script>
47
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
48
+ </script>
49
+
28
50
 
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>
51
+ <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
52
+ <symbol id="svg-toc" viewBox="0 0 24 24">
53
+ <title>Contents</title>
54
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
55
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
56
+ </svg>
57
+ </symbol>
58
+ <symbol id="svg-menu" viewBox="0 0 24 24">
59
+ <title>Menu</title>
60
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
61
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
62
+ <line x1="3" y1="12" x2="21" y2="12"></line>
63
+ <line x1="3" y1="6" x2="21" y2="6"></line>
64
+ <line x1="3" y1="18" x2="21" y2="18"></line>
65
+ </svg>
66
+ </symbol>
67
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
68
+ <title>Expand</title>
69
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
70
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
71
+ <polyline points="9 18 15 12 9 6"></polyline>
72
+ </svg>
73
+ </symbol>
74
+ <symbol id="svg-sun" viewBox="0 0 24 24">
75
+ <title>Light mode</title>
76
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
77
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
78
+ <circle cx="12" cy="12" r="5"></circle>
79
+ <line x1="12" y1="1" x2="12" y2="3"></line>
80
+ <line x1="12" y1="21" x2="12" y2="23"></line>
81
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
82
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
83
+ <line x1="1" y1="12" x2="3" y2="12"></line>
84
+ <line x1="21" y1="12" x2="23" y2="12"></line>
85
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
86
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
87
+ </svg>
88
+ </symbol>
89
+ <symbol id="svg-moon" viewBox="0 0 24 24">
90
+ <title>Dark mode</title>
91
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
92
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
93
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
94
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
95
+ </svg>
96
+ </symbol>
97
+ <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
98
+ <title>Auto light/dark, in light mode</title>
99
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
100
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
101
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
102
+ <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
103
+ <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
104
+ <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
105
+ <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
106
+ <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
107
+ <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
108
+ <line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
109
+ <line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
110
+ <line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
111
+ <circle cx="14.5" cy="9.55" r="3.6"/>
112
+ </svg>
113
+ </symbol>
114
+ <symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
115
+ <title>Auto light/dark, in dark mode</title>
116
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
117
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
118
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
119
+ <path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
120
+ <line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
121
+ <line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
122
+ <line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
123
+ <line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
124
+ <line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
125
+ <line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
126
+ <line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
127
+ <line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
128
+ <circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
129
+ </svg>
130
+ </symbol>
131
+ <symbol id="svg-pencil" viewBox="0 0 24 24">
132
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
133
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
134
+ <path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
135
+ <path d="M13.5 6.5l4 4" />
136
+ <path d="M20 21l2 -2l-2 -2" />
137
+ <path d="M17 17l-2 2l2 2" />
138
+ </svg>
139
+ </symbol>
140
+ <symbol id="svg-eye" viewBox="0 0 24 24">
141
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
142
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
143
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
144
+ <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
145
+ <path
146
+ d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
147
+ <path d="M20 21l2 -2l-2 -2" />
148
+ <path d="M17 17l-2 2l2 2" />
149
+ </svg>
150
+ </symbol>
151
+ </svg>
152
+
153
+ <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
154
+ <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
155
+ <label class="overlay sidebar-overlay" for="__navigation">
156
+ <div class="visually-hidden">Hide navigation sidebar</div>
157
+ </label>
158
+ <label class="overlay toc-overlay" for="__toc">
159
+ <div class="visually-hidden">Hide table of contents sidebar</div>
160
+ </label>
161
+
162
+ <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
163
+
164
+
165
+
166
+ <div class="page">
167
+ <header class="mobile-header">
168
+ <div class="header-left">
169
+ <label class="nav-overlay-icon" for="__navigation">
170
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
171
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
172
+ </label>
173
+ </div>
174
+ <div class="header-center">
175
+ <a href="../../../../index.html"><div class="brand">MindRoot 9.10.0 documentation</div></a>
176
+ </div>
177
+ <div class="header-right">
178
+ <div class="theme-toggle-container theme-toggle-header">
179
+ <button class="theme-toggle">
180
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
181
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
182
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
183
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
184
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
185
+ </button>
186
+ </div>
187
+ <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
188
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
189
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
190
+ </label>
191
+ </div>
192
+ </header>
193
+ <aside class="sidebar-drawer">
194
+ <div class="sidebar-container">
195
+
196
+ <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
197
+
198
+
199
+ </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
200
+ <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
201
+ <input type="hidden" name="check_keywords" value="yes">
202
+ <input type="hidden" name="area" value="default">
203
+ </form>
204
+ <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
205
+ <p class="caption" role="heading"><span class="caption-text">User Documentation:</span></p>
206
+ <ul>
207
+ <li class="toctree-l1 has-children"><a class="reference internal" href="../../../../user_documentation.html">User Documentation</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of User Documentation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
208
+ <li class="toctree-l2"><a class="reference internal" href="../../../../installation.html">Installation</a></li>
209
+ <li class="toctree-l2"><a class="reference internal" href="../../../../starting_mindroot.html">Starting MindRoot</a></li>
210
+ <li class="toctree-l2"><a class="reference internal" href="../../../../llm_plugin_installation.html">LLM Plugin Installation</a></li>
211
+ <li class="toctree-l2"><a class="reference internal" href="../../../../llm_api_key.html">LLM API Key</a></li>
212
+ <li class="toctree-l2"><a class="reference internal" href="../../../../chat_with_assistant.html">Chat with Assistant</a></li>
213
+ <li class="toctree-l2"><a class="reference internal" href="../../../../install_plugins_with_tools.html">Install Plugins with Tools</a></li>
214
+ <li class="toctree-l2"><a class="reference internal" href="../../../../programming_task.html">Give Assistant a Programming Task</a></li>
215
+ <li class="toctree-l2"><a class="reference internal" href="../../../../embed_chat.html">Embed Agent Chat on Your Website</a></li>
216
+ </ul>
217
+ </li>
218
+ </ul>
219
+ <p class="caption" role="heading"><span class="caption-text">Developer Documentation:</span></p>
43
220
  <ul>
44
- <li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
221
+ <li class="toctree-l1"><a class="reference internal" href="../../../../developer_documentation.html">Developer Documentation</a></li>
45
222
  </ul>
46
223
 
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
224
  </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>
225
+ </div>
226
+
227
+ </div>
228
+
229
+ </div>
230
+ </aside>
231
+ <div class="main">
232
+ <div class="content">
233
+ <div class="article-container">
234
+ <a href="#" class="back-to-top muted-link">
235
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
236
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
237
+ </svg>
238
+ <span>Back to top</span>
239
+ </a>
240
+ <div class="content-icon-container">
241
+ <div class="theme-toggle-container theme-toggle-content">
242
+ <button class="theme-toggle">
243
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
244
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
245
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
246
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
247
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
248
+ </button>
249
+ </div>
250
+ <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
251
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
252
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
253
+ </label>
254
+ </div>
255
+ <article role="main" id="furo-main-content">
256
+ <h1>Source code for mindroot.coreplugins.check_list.mod</h1><div class="highlight"><pre>
72
257
  <span></span><span class="sd">&quot;&quot;&quot;</span>
73
- <span class="sd">checklist helper for an LLMagent system</span>
74
- <span class="sd">—————————————————————————————————————————————————————————————————————————————</span>
258
+ <span class="sd">checklist helper for an LLM-agent system</span>
259
+ <span class="sd">————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————</span>
75
260
  <span class="sd">Purpose</span>
76
261
  <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
262
 
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>
263
+ <span class="sd">• Parse a Markdown checklist section where each subtask is written as a task-list line</span>
264
+ <span class="sd">• Store parsed tasks + cursor in `context.data[&#39;checklist&#39;]`</span>
265
+ <span class="sd">• Support nested subtasks within parent task bodies</span>
266
+ <span class="sd">• Runtime helpers for managing both top-level and nested subtasks</span>
91
267
 
92
268
  <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 thirdparty deps—only Python&#39;s `re` module.</span>
269
+ <span class="sd">as tools. No third-party deps—only Python&#39;s `re` module.</span>
94
270
  <span class="sd">&quot;&quot;&quot;</span>
95
271
 
96
272
  <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>
273
+ <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><span class="p">,</span> <span class="n">command_manager</span>
98
274
  <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
275
  <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>
276
+ <span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">Counter</span>
277
+ <span class="kn">from</span><span class="w"> </span><span class="nn">.helpers</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
278
+ <span class="n">find_nested_subtask</span><span class="p">,</span>
279
+ <span class="n">update_nested_subtask_status</span><span class="p">,</span>
280
+ <span class="n">resolve_subtask_id_with_nesting</span><span class="p">,</span>
281
+ <span class="n">format_nested_task_status</span><span class="p">,</span>
282
+ <span class="n">get_next_incomplete_task</span><span class="p">,</span>
283
+ <span class="n">has_incomplete_nested_tasks</span>
284
+ <span class="p">)</span>
285
+
286
+ <span class="c1"># ---------- simple parsing -----------------------------------------------</span>
287
+
288
+ <span class="k">def</span><span class="w"> </span><span class="nf">_parse</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
289
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Simple, robust checklist parser.</span>
290
+ <span class="sd"> </span>
291
+ <span class="sd"> Finds checklist items (- [ ] or - [x]) at any indentation level,</span>
292
+ <span class="sd"> but only processes items at the same indentation as the first one found.</span>
293
+ <span class="sd"> </span>
294
+ <span class="sd"> Returns list of {label, body, done} dicts.</span>
295
+ <span class="sd"> &quot;&quot;&quot;</span>
296
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;parsing:&quot;</span><span class="p">)</span>
297
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;---------------------------------------------&quot;</span><span class="p">)</span>
298
+ <span class="nb">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
299
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;---------------------------------------------&#39;</span><span class="p">)</span>
300
+ <span class="n">lines</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
301
+ <span class="n">tasks</span> <span class="o">=</span> <span class="p">[]</span>
302
+ <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
303
+ <span class="n">first_task_indent</span> <span class="o">=</span> <span class="kc">None</span>
304
+
305
+ <span class="c1"># Find all task lines and their indentations first</span>
306
+ <span class="n">task_indents</span> <span class="o">=</span> <span class="p">[]</span>
307
+ <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
308
+ <span class="n">stripped</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span>
309
+ <span class="k">if</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [ ]&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [x]&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [X]&#39;</span><span class="p">):</span>
310
+ <span class="n">indent</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">stripped</span><span class="p">)</span>
311
+ <span class="n">task_indents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">indent</span><span class="p">)</span>
312
+
313
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">task_indents</span><span class="p">:</span>
314
+ <span class="k">return</span> <span class="n">tasks</span>
315
+
316
+ <span class="c1"># Use the SMALLEST indentation level as reference (top-level tasks)</span>
317
+ <span class="n">reference_indent</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">task_indents</span><span class="p">)</span>
318
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;reference indent:&quot;</span><span class="p">,</span> <span class="n">reference_indent</span><span class="p">)</span>
110
319
  <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>
320
+ <span class="n">line</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
321
+ <span class="n">stripped</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span>
322
+ <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
323
+ <span class="c1"># Check if this line is a checklist item</span>
324
+ <span class="k">if</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [ ]&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [x]&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [X]&#39;</span><span class="p">):</span>
325
+ <span class="c1"># Calculate indentation</span>
326
+ <span class="n">current_indent</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">stripped</span><span class="p">)</span>
327
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;found task at indent:&quot;</span><span class="p">,</span> <span class="n">current_indent</span><span class="p">)</span>
328
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;reference indent:&quot;</span><span class="p">,</span> <span class="n">reference_indent</span><span class="p">)</span>
329
+ <span class="c1"># Only process tasks at the reference indentation level</span>
330
+ <span class="k">if</span> <span class="n">current_indent</span> <span class="o">==</span> <span class="n">reference_indent</span><span class="p">:</span>
331
+ <span class="c1"># Extract task info</span>
332
+ <span class="n">done</span> <span class="o">=</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [x]&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [X]&#39;</span><span class="p">)</span>
333
+
334
+ <span class="c1"># Extract label (everything after the checkbox)</span>
335
+ <span class="k">if</span> <span class="n">stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [ ]&#39;</span><span class="p">):</span>
336
+ <span class="n">label</span> <span class="o">=</span> <span class="n">stripped</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
337
+ <span class="k">else</span><span class="p">:</span> <span class="c1"># - [x] or - [X]</span>
338
+ <span class="n">label</span> <span class="o">=</span> <span class="n">stripped</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
339
+
340
+ <span class="c1"># Collect body lines until next task at same level or end</span>
341
+ <span class="n">body_lines</span> <span class="o">=</span> <span class="p">[]</span>
342
+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
343
+
344
+ <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>
345
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;checking line for body:&quot;</span><span class="p">,</span><span class="n">i</span><span class="p">,</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
346
+ <span class="n">next_line</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
347
+ <span class="n">next_stripped</span> <span class="o">=</span> <span class="n">next_line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span>
348
+ <span class="n">next_indent</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">next_line</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">next_stripped</span><span class="p">)</span>
349
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;next_stripped:&quot;</span><span class="p">,</span> <span class="n">next_stripped</span><span class="p">)</span>
350
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;next_indent:&quot;</span><span class="p">,</span> <span class="n">next_indent</span><span class="p">)</span>
351
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;reference_indent:&quot;</span><span class="p">,</span> <span class="n">reference_indent</span><span class="p">)</span>
352
+ <span class="c1"># Stop if we hit another task at the same indentation level</span>
353
+ <span class="k">if</span> <span class="p">((</span><span class="n">next_stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [ ]&#39;</span><span class="p">)</span> <span class="ow">or</span>
354
+ <span class="n">next_stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [x]&#39;</span><span class="p">)</span> <span class="ow">or</span>
355
+ <span class="n">next_stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;- [X]&#39;</span><span class="p">))</span> <span class="ow">and</span>
356
+ <span class="n">next_indent</span> <span class="o">&lt;=</span> <span class="n">reference_indent</span><span class="p">):</span>
357
+ <span class="k">break</span>
358
+
359
+ <span class="c1"># Stop if we hit a markdown heading</span>
360
+ <span class="k">if</span> <span class="n">next_stripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">):</span>
361
+ <span class="k">break</span>
362
+
363
+ <span class="n">body_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">next_line</span><span class="p">)</span>
364
+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
365
+
366
+ <span class="n">tasks</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
367
+ <span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
368
+ <span class="s1">&#39;body&#39;</span><span class="p">:</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</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="c1">#.strip(),</span>
369
+ <span class="s1">&#39;done&#39;</span><span class="p">:</span> <span class="n">done</span>
370
+ <span class="p">})</span>
371
+ <span class="k">continue</span>
372
+
121
373
  <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>
374
+
133
375
  <span class="k">return</span> <span class="n">tasks</span>
134
376
 
135
377
 
136
378
  <div class="viewcode-block" id="extract_checklist_section">
137
379
  <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.extract_checklist_section">[docs]</a>
138
380
  <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>
381
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Extract checklist items from the entire markdown text.</span>
140
382
  <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>
383
+ <span class="sd"> No longer requires a specific &#39;Checklist&#39; heading - processes the entire text</span>
384
+ <span class="sd"> and extracts only top-level checklist items, leaving nested ones intact.</span>
146
385
  <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>
386
+ <span class="k">return</span> <span class="n">md</span></div>
171
387
 
172
388
 
173
389
 
@@ -194,12 +410,9 @@
194
410
  <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.load_checklist_from_instructions">[docs]</a>
195
411
  <span class="nd">@service</span><span class="p">()</span>
196
412
  <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>
413
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Load checklist from instructions.</span>
198
414
  <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>
415
+ <span class="sd"> Processes the entire text and extracts top-level checklist items.</span>
203
416
  <span class="sd"> &quot;&quot;&quot;</span>
204
417
  <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
418
  <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>
@@ -210,31 +423,17 @@
210
423
  <span class="c1"># ---------- helper functions ---------------------------------------------</span>
211
424
 
212
425
  <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>
426
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve a subtask_id to an index (0-based) with nested task support.</span>
214
427
  <span class="sd"> </span>
215
428
  <span class="sd"> subtask_id can be:</span>
216
429
  <span class="sd"> - A number (1-based index, converted to 0-based)</span>
217
- <span class="sd"> - A string matching a subtask label</span>
430
+ <span class="sd"> - A string matching a subtask label (top-level or nested)</span>
218
431
  <span class="sd"> - None/default (-1) to use the current cursor position</span>
432
+ <span class="sd"> </span>
433
+ <span class="sd"> Returns tuple of (index, nested_info) where nested_info is None for top-level tasks</span>
219
434
  <span class="sd"> &quot;&quot;&quot;</span>
220
435
  <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>
436
+ <span class="k">return</span> <span class="n">resolve_subtask_id_with_nesting</span><span class="p">(</span><span class="n">subtask_id</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">st</span><span class="p">[</span><span class="s2">&quot;cursor&quot;</span><span class="p">])</span>
238
437
 
239
438
 
240
439
  <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>
@@ -256,11 +455,18 @@
256
455
 
257
456
  <span class="c1"># Add task line</span>
258
457
  <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>
458
+
459
+ <span class="c1"># Show nested task status if any</span>
460
+ <span class="n">nested_tasks</span> <span class="o">=</span> <span class="n">_parse</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">])</span>
461
+ <span class="k">if</span> <span class="n">nested_tasks</span><span class="p">:</span>
462
+ <span class="k">for</span> <span class="n">nested_task</span> <span class="ow">in</span> <span class="n">nested_tasks</span><span class="p">:</span>
463
+ <span class="n">nested_status</span> <span class="o">=</span> <span class="s2">&quot;✅&quot;</span> <span class="k">if</span> <span class="n">nested_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>
464
+ <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">nested_status</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_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
465
 
260
466
  <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
467
 
262
468
 
263
- <span class="c1"># ---------- modulelevel tool commands ----------------------------------</span>
469
+ <span class="c1"># ---------- module-level tool commands ----------------------------------</span>
264
470
 
265
471
  <div class="viewcode-block" id="complete_subtask">
266
472
  <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.complete_subtask">[docs]</a>
@@ -268,15 +474,17 @@
268
474
  <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
475
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
270
476
  <span class="sd"> Mark a subtask complete and return a Markdown status message.</span>
477
+ <span class="sd"> Now supports both top-level and nested subtasks.</span>
271
478
  <span class="sd"> </span>
272
479
  <span class="sd"> Parameters:</span>
273
480
  <span class="sd"> - subtask_id: Optional. The subtask to complete, specified by:</span>
274
- <span class="sd"> - The exact subtask label text</span>
481
+ <span class="sd"> - The exact subtask label text (top-level or nested)</span>
275
482
  <span class="sd"> - Omit to complete the current subtask</span>
276
483
  <span class="sd"> </span>
277
484
  <span class="sd"> Example:</span>
278
485
  <span class="sd"> { &quot;complete_subtask&quot;: {} } # Complete current subtask</span>
279
486
  <span class="sd"> { &quot;complete_subtask&quot;: { &quot;subtask_id&quot;: &quot;Review documents&quot; } } # Complete by label</span>
487
+ <span class="sd"> { &quot;complete_subtask&quot;: { &quot;subtask_id&quot;: &quot;USP&quot; } } # Complete nested subtask</span>
280
488
  <span class="sd"> &quot;&quot;&quot;</span>
281
489
  <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
490
  <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
@@ -295,19 +503,56 @@
295
503
  <span class="nb">print</span><span class="p">(</span><span class="n">trace</span><span class="p">)</span>
296
504
  <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
297
505
 
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>
506
+ <span class="n">idx</span><span class="p">,</span> <span class="n">nested_info</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
507
  <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
508
  <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
301
509
 
302
- <span class="c1"># mark as done</span>
510
+ <span class="c1"># Handle nested subtask completion</span>
511
+ <span class="k">if</span> <span class="n">nested_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
512
+ <span class="c1"># Mark nested subtask as done</span>
513
+ <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_task&#39;</span><span class="p">][</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
514
+
515
+ <span class="c1"># Update the parent task&#39;s body with the new nested task status</span>
516
+ <span class="n">parent_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>
517
+ <span class="n">updated_body</span> <span class="o">=</span> <span class="n">update_nested_subtask_status</span><span class="p">(</span>
518
+ <span class="n">parent_task</span><span class="p">,</span>
519
+ <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_index&#39;</span><span class="p">],</span>
520
+ <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;parent_nested_tasks&#39;</span><span class="p">],</span>
521
+ <span class="kc">True</span>
522
+ <span class="p">)</span>
523
+ <span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">updated_body</span>
524
+
525
+ <span class="c1"># Check if all nested tasks in this parent are complete</span>
526
+ <span class="n">all_nested_complete</span> <span class="o">=</span> <span class="nb">all</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;parent_nested_tasks&#39;</span><span class="p">])</span>
527
+ <span class="k">if</span> <span class="n">all_nested_complete</span><span class="p">:</span>
528
+ <span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
529
+ <span class="c1"># Advance cursor to next incomplete top-level task</span>
530
+ <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">get_next_incomplete_task</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>
531
+
532
+ <span class="n">completed_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Completed Nested Subtask: - [x] </span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_task&#39;</span><span class="p">][</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> (within &#39;</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;)&quot;</span>
533
+
534
+ <span class="k">if</span> <span class="n">all_nested_complete</span><span class="p">:</span>
535
+ <span class="n">completed_msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Parent task &#39;</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39; is now complete!&quot;</span>
536
+
537
+ <span class="c1"># Show next task info</span>
538
+ <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>
539
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">completed_msg</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>
540
+
541
+ <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>
542
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span><span class="si">{</span><span class="n">completed_msg</span><span class="si">}</span>
543
+
544
+ <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>
545
+ <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>
546
+ <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>
547
+
548
+ <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;&quot;&quot;</span>
549
+
550
+ <span class="c1"># Handle top-level subtask completion</span>
303
551
  <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
552
  <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
553
 
306
554
  <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>
555
+ <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">get_next_incomplete_task</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>
311
556
 
312
557
  <span class="c1"># build markdown response</span>
313
558
  <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>
@@ -315,15 +560,14 @@
315
560
  <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
561
 
317
562
  <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>
563
+ <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span><span class="si">{</span><span class="n">completed</span><span class="si">}</span>
564
+
565
+ <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>
566
+ <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>
567
+ <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>
320
568
 
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>
569
+ <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;&quot;&quot;</span></div>
324
570
 
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
571
 
328
572
 
329
573
  <div class="viewcode-block" id="goto_subtask">
@@ -332,13 +576,15 @@
332
576
  <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
577
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
334
578
  <span class="sd"> Move to a specific subtask without changing its completion status.</span>
579
+ <span class="sd"> Now supports both top-level and nested subtasks.</span>
335
580
  <span class="sd"> </span>
336
581
  <span class="sd"> Parameters:</span>
337
582
  <span class="sd"> - subtask_id: Required. The subtask to navigate to, specified by:</span>
338
- <span class="sd"> - The exact subtask label text</span>
583
+ <span class="sd"> - The exact subtask label text (top-level or nested)</span>
339
584
  <span class="sd"> </span>
340
585
  <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>
586
+ <span class="sd"> { &quot;goto_subtask&quot;: { &quot;subtask_id&quot;: &quot;Data analysis&quot; } } # Go to top-level task</span>
587
+ <span class="sd"> { &quot;goto_subtask&quot;: { &quot;subtask_id&quot;: &quot;USP&quot; } } # Go to nested task</span>
342
588
  <span class="sd"> &quot;&quot;&quot;</span>
343
589
  <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
590
  <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
@@ -347,17 +593,22 @@
347
593
  <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
594
  <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
349
595
 
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>
596
+ <span class="n">idx</span><span class="p">,</span> <span class="n">nested_info</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
597
  <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
598
  <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
353
599
 
354
- <span class="c1"># Update cursor position</span>
600
+ <span class="c1"># Update cursor position to the parent task</span>
355
601
  <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
602
 
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>
603
+ <span class="c1"># Handle nested subtask navigation</span>
604
+ <span class="k">if</span> <span class="n">nested_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
605
+ <span class="k">return</span> <span class="p">(</span>
606
+ <span class="sa">f</span><span class="s2">&quot;Moved to Nested Subtask: </span><span class="si">{</span><span class="n">format_nested_task_status</span><span class="p">(</span><span class="n">nested_info</span><span class="p">)</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
607
+ <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>
608
+ <span class="p">)</span>
359
609
 
360
- <span class="c1"># Build response</span>
610
+ <span class="c1"># Handle top-level subtask navigation</span>
611
+ <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>
361
612
  <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
613
  <span class="k">return</span> <span class="p">(</span>
363
614
  <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>
@@ -373,15 +624,17 @@
373
624
  <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
625
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
375
626
  <span class="sd"> Mark a subtask as incomplete (not done).</span>
627
+ <span class="sd"> Now supports both top-level and nested subtasks.</span>
376
628
  <span class="sd"> </span>
377
629
  <span class="sd"> Parameters:</span>
378
630
  <span class="sd"> - subtask_id: Optional. The subtask to clear, specified by:</span>
379
- <span class="sd"> - The exact subtask label text</span>
631
+ <span class="sd"> - The exact subtask label text (top-level or nested)</span>
380
632
  <span class="sd"> - Omit to clear the current subtask</span>
381
633
  <span class="sd"> </span>
382
634
  <span class="sd"> Example:</span>
383
635
  <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>
636
+ <span class="sd"> { &quot;clear_subtask&quot;: { &quot;subtask_id&quot;: &quot;Review documents&quot; } } # Clear top-level by label</span>
637
+ <span class="sd"> { &quot;clear_subtask&quot;: { &quot;subtask_id&quot;: &quot;USP&quot; } } # Clear nested subtask</span>
385
638
  <span class="sd"> &quot;&quot;&quot;</span>
386
639
  <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
640
  <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
@@ -390,11 +643,43 @@
390
643
  <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
644
  <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
392
645
 
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>
646
+ <span class="n">idx</span><span class="p">,</span> <span class="n">nested_info</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
647
  <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
648
  <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
396
649
 
397
- <span class="c1"># Mark as not done</span>
650
+ <span class="c1"># Handle nested subtask clearing</span>
651
+ <span class="k">if</span> <span class="n">nested_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
652
+ <span class="c1"># Mark nested subtask as not done</span>
653
+ <span class="n">nested_task</span> <span class="o">=</span> <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_task&#39;</span><span class="p">]</span>
654
+ <span class="n">was_done</span> <span class="o">=</span> <span class="n">nested_task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span>
655
+ <span class="n">nested_task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
656
+
657
+ <span class="c1"># Update the parent task&#39;s body</span>
658
+ <span class="n">parent_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>
659
+ <span class="n">updated_body</span> <span class="o">=</span> <span class="n">update_nested_subtask_status</span><span class="p">(</span>
660
+ <span class="n">parent_task</span><span class="p">,</span>
661
+ <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_index&#39;</span><span class="p">],</span>
662
+ <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;parent_nested_tasks&#39;</span><span class="p">],</span>
663
+ <span class="kc">False</span>
664
+ <span class="p">)</span>
665
+ <span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">updated_body</span>
666
+
667
+ <span class="c1"># If parent was complete but now has incomplete nested tasks, mark parent incomplete</span>
668
+ <span class="k">if</span> <span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">has_incomplete_nested_tasks</span><span class="p">(</span><span class="n">parent_task</span><span class="p">):</span>
669
+ <span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;done&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
670
+
671
+ <span class="c1"># Update cursor to this parent task if needed</span>
672
+ <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>
673
+ <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>
674
+
675
+ <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>
676
+ <span class="k">return</span> <span class="p">(</span>
677
+ <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"> Nested Subtask: - [ ] </span><span class="si">{</span><span class="n">nested_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> (within &#39;</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;)</span><span class="se">\n</span><span class="s2">&quot;</span>
678
+ <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>
679
+ <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>
680
+ <span class="p">)</span>
681
+
682
+ <span class="c1"># Handle top-level subtask clearing</span>
398
683
  <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
684
  <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
685
  <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>
@@ -428,33 +713,204 @@
428
713
 
429
714
  <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
715
 
431
- </pre></div>
432
716
 
433
- </div>
434
- </div>
435
- <footer>
436
717
 
437
- <hr/>
718
+ <div class="viewcode-block" id="get_parsed_subtasks">
719
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.get_parsed_subtasks">[docs]</a>
720
+ <span class="nd">@command</span><span class="p">()</span>
721
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_parsed_subtasks</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>
722
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
723
+ <span class="sd"> Return parsed subtasks with their name/id and body for verification.</span>
724
+ <span class="sd"> Now supports getting nested subtasks from within parent tasks.</span>
725
+ <span class="sd"> </span>
726
+ <span class="sd"> Parameters:</span>
727
+ <span class="sd"> - subtask_id: Optional. If provided, parse subtasks from the body of this specific subtask.</span>
728
+ <span class="sd"> If omitted, returns all top-level subtasks from the main checklist.</span>
729
+ <span class="sd"> </span>
730
+ <span class="sd"> Returns a list of dictionaries with:</span>
731
+ <span class="sd"> - label: The subtask name/label</span>
732
+ <span class="sd"> - body: The subtask body content</span>
733
+ <span class="sd"> - done: Whether the subtask is marked as complete</span>
734
+ <span class="sd"> - index: The 0-based index of the subtask</span>
735
+ <span class="sd"> </span>
736
+ <span class="sd"> Example:</span>
737
+ <span class="sd"> { &quot;get_parsed_subtasks&quot;: {} } # Get all top-level subtasks</span>
738
+ <span class="sd"> { &quot;get_parsed_subtasks&quot;: { &quot;subtask_id&quot;: &quot;Research phase&quot; } } # Get nested subtasks from &quot;Research phase&quot;</span>
739
+ <span class="sd"> { &quot;get_parsed_subtasks&quot;: { &quot;subtask_id&quot;: &quot;Core&quot; } } # Get nested subtasks from &quot;Core&quot;</span>
740
+ <span class="sd"> &quot;&quot;&quot;</span>
741
+ <span class="k">if</span> <span class="n">context</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
742
+ <span class="k">return</span> <span class="s2">&quot;_Context is required._&quot;</span>
743
+
744
+ <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>
745
+ <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>
746
+ <span class="k">try</span><span class="p">:</span>
747
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Loading checklist from instructions...&quot;</span><span class="p">)</span>
748
+ <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>
749
+ <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>
750
+ <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> <span class="c1"># Refresh state after loading</span>
751
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
752
+ <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>
753
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
754
+
755
+ <span class="c1"># If no subtask_id provided, return all top-level subtasks</span>
756
+ <span class="k">if</span> <span class="n">subtask_id</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
757
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
758
+ <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>
759
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
760
+ <span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="n">i</span><span class="p">,</span>
761
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">],</span>
762
+ <span class="s2">&quot;body&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;body&quot;</span><span class="p">],</span>
763
+ <span class="s2">&quot;done&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span>
764
+ <span class="p">})</span>
765
+ <span class="k">return</span> <span class="p">{</span>
766
+ <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="s2">&quot;top-level checklist&quot;</span><span class="p">,</span>
767
+ <span class="s2">&quot;subtasks&quot;</span><span class="p">:</span> <span class="n">result</span>
768
+ <span class="p">}</span>
769
+
770
+ <span class="c1"># Find the specified subtask and parse its body for nested subtasks</span>
771
+ <span class="n">idx</span><span class="p">,</span> <span class="n">nested_info</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>
772
+ <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>
773
+ <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
774
+
775
+ <span class="c1"># If it&#39;s a nested subtask, get its nested tasks</span>
776
+ <span class="k">if</span> <span class="n">nested_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
777
+ <span class="n">target_task</span> <span class="o">=</span> <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_task&#39;</span><span class="p">]</span>
778
+ <span class="n">source_desc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;nested subtasks from &#39;</span><span class="si">{</span><span class="n">target_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39; (within &#39;</span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;parent_task&#39;</span><span class="p">][</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;)&quot;</span>
779
+ <span class="k">else</span><span class="p">:</span>
780
+ <span class="n">target_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>
781
+ <span class="n">source_desc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;nested subtasks from &#39;</span><span class="si">{</span><span class="n">target_task</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
782
+
783
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Parsing nested subtasks from:&quot;</span><span class="p">,</span> <span class="n">subtask_id</span><span class="p">)</span>
784
+ <span class="n">nested_tasks</span> <span class="o">=</span> <span class="n">_parse</span><span class="p">(</span><span class="n">target_task</span><span class="p">[</span><span class="s2">&quot;body&quot;</span><span class="p">])</span>
785
+
786
+ <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
787
+ <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">nested_tasks</span><span class="p">):</span>
788
+ <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
789
+ <span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="n">i</span><span class="p">,</span>
790
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">],</span>
791
+ <span class="s2">&quot;body&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;body&quot;</span><span class="p">],</span>
792
+ <span class="s2">&quot;done&quot;</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span>
793
+ <span class="p">})</span>
794
+
795
+ <span class="k">return</span> <span class="p">{</span>
796
+ <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="n">source_desc</span><span class="p">,</span>
797
+ <span class="s2">&quot;parent_task&quot;</span><span class="p">:</span> <span class="p">{</span>
798
+ <span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="n">idx</span><span class="p">,</span>
799
+ <span class="s2">&quot;label&quot;</span><span class="p">:</span> <span class="n">target_task</span><span class="p">[</span><span class="s2">&quot;label&quot;</span><span class="p">],</span>
800
+ <span class="s2">&quot;done&quot;</span><span class="p">:</span> <span class="n">target_task</span><span class="p">[</span><span class="s2">&quot;done&quot;</span><span class="p">]</span>
801
+ <span class="p">},</span>
802
+ <span class="s2">&quot;subtasks&quot;</span><span class="p">:</span> <span class="n">result</span>
803
+ <span class="p">}</span></div>
438
804
 
439
- <div role="contentinfo">
440
- <p>&#169; Copyright 2025, Jason Livesay.</p>
441
- </div>
442
805
 
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
806
 
448
- </footer>
449
- </div>
807
+ <div class="viewcode-block" id="delegate_subtask">
808
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.check_list.html#mindroot.coreplugins.check_list.mod.delegate_subtask">[docs]</a>
809
+ <span class="nd">@command</span><span class="p">()</span>
810
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">delegate_subtask</span><span class="p">(</span><span class="n">subtask_id</span><span class="p">,</span> <span class="n">details</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agent</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>
811
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
812
+ <span class="sd"> Delegate a subtask to an agent, automatically passing the subtask body as</span>
813
+ <span class="sd"> instructions, along with any details you add.</span>
814
+ <span class="sd"> Now supports both top-level and nested subtasks.</span>
815
+
816
+ <span class="sd"> IMPORTANT: You can only delegate ONE task a time.</span>
817
+ <span class="sd"> You must wait for this task delegation to complete before issuing </span>
818
+ <span class="sd"> more delegate_subtask commands.</span>
819
+
820
+ <span class="sd"> If agent is not specified, the current agent name will be used for the subtask.</span>
821
+ <span class="sd"> </span>
822
+ <span class="sd"> IMPORTANT: Subtask ID may only contain alphanumerics; all other special characters are invalid.</span>
823
+
824
+ <span class="sd"> Example:</span>
825
+ <span class="sd"> { &quot;delegate_subtask&quot;: { &quot;subtask_id&quot;: &quot;Research&quot;, </span>
826
+ <span class="sd"> &quot;details&quot;: &quot;Session data in /data/sess_1234/&quot; }} </span>
827
+ <span class="sd"> { &quot;delegate_subtask&quot;: { &quot;subtask_id&quot;: &quot;USP&quot;, </span>
828
+ <span class="sd"> &quot;details&quot;: &quot;Focus on unique selling proposition analysis&quot; }} </span>
829
+
830
+ <span class="sd"> Note that you do not need to repeat the text of the subtask item from the checklist</span>
831
+ <span class="sd"> in your details.</span>
832
+ <span class="sd"> &quot;&quot;&quot;</span>
833
+ <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>
834
+ <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>
835
+ <span class="k">try</span><span class="p">:</span>
836
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Loading checklist from instructions...&quot;</span><span class="p">)</span>
837
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Agent is&quot;</span><span class="p">)</span>
838
+ <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>
839
+ <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>
840
+ <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>
841
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
842
+ <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>
843
+ <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>
844
+ <span class="nb">print</span><span class="p">(</span><span class="n">trace</span><span class="p">)</span>
845
+ <span class="k">return</span> <span class="s2">&quot;_No checklist found. Make sure to include a checklist in your instructions._&quot;</span>
846
+
847
+ <span class="n">idx</span><span class="p">,</span> <span class="n">nested_info</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>
848
+ <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>
849
+ <span class="k">return</span> <span class="s2">&quot;_Invalid subtask identifier._&quot;</span>
850
+
851
+ <span class="c1"># Get the appropriate task body for delegation</span>
852
+ <span class="k">if</span> <span class="n">nested_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
853
+ <span class="c1"># Delegating a nested subtask</span>
854
+ <span class="n">current_task</span> <span class="o">=</span> <span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;nested_task&#39;</span><span class="p">]</span>
855
+ <span class="n">task_context</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;nested subtask &#39;</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="s2">&#39; within parent task &#39;</span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">&#39;parent_task&#39;</span><span class="p">][</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
856
+ <span class="k">else</span><span class="p">:</span>
857
+ <span class="c1"># Delegating a top-level subtask</span>
858
+ <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>
859
+ <span class="n">task_context</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;subtask &#39;</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="s2">&#39;&quot;</span>
860
+
861
+ <span class="n">subtask_body</span> <span class="o">=</span> <span class="n">current_task</span><span class="p">[</span><span class="s2">&quot;body&quot;</span><span class="p">]</span>
862
+
863
+ <span class="n">reminder</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;Important: you may see system instructions for the full process. However, you are to ONLY </span>
864
+ <span class="s2">do (or delegate) the specified part of the process and then return a task result. If you have a sub-checklist assigned,</span>
865
+ <span class="s2">use delegate_subtask as needed for complex checklist items or per user instructions.</span>
866
+
867
+ <span class="s2">You are working on </span><span class="si">{</span><span class="n">task_context</span><span class="si">}</span><span class="s2">.&quot;&quot;&quot;</span>
868
+
869
+ <span class="n">instructions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;You are working as part of a multi-step process. Please complete the following subtask:</span><span class="se">\n\n</span><span class="si">{</span><span class="n">subtask_body</span><span class="si">}</span><span class="se">\n\n</span><span class="si">{</span><span class="n">details</span><span class="si">}</span><span class="se">\n\n</span><span class="si">{</span><span class="n">reminder</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
870
+
871
+ <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
872
+ <span class="n">agent_name</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;name&quot;</span><span class="p">]</span>
873
+ <span class="k">else</span><span class="p">:</span>
874
+ <span class="n">agent_name</span> <span class="o">=</span> <span class="n">agent</span>
875
+
876
+ <span class="k">return</span> <span class="k">await</span> <span class="n">command_manager</span><span class="o">.</span><span class="n">delegate_task</span><span class="p">(</span><span class="n">instructions</span><span class="p">,</span> <span class="n">agent_name</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">context</span><span class="p">)</span></div>
877
+
878
+
879
+ </pre></div>
880
+ </article>
450
881
  </div>
451
- </section>
882
+ <footer>
883
+
884
+ <div class="related-pages">
885
+
886
+
887
+ </div>
888
+ <div class="bottom-of-page">
889
+ <div class="left-details">
890
+ <div class="copyright">
891
+ Copyright &#169; 2025, Jason Livesay
892
+ </div>
893
+ Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
894
+
895
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
896
+
897
+ </div>
898
+ <div class="right-details">
899
+
900
+ </div>
901
+ </div>
902
+
903
+ </footer>
904
+ </div>
905
+ <aside class="toc-drawer no-toc">
906
+
907
+
908
+
909
+ </aside>
452
910
  </div>
453
- <script>
454
- jQuery(function () {
455
- SphinxRtdTheme.Navigation.enable(true);
456
- });
457
- </script>
458
-
459
- </body>
911
+ </div><script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
912
+ <script src="../../../../_static/doctools.js?v=9bcbadda"></script>
913
+ <script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
914
+ <script src="../../../../_static/scripts/furo.js?v=46bd48cc"></script>
915
+ </body>
460
916
  </html>