mindroot 9.22.0__py3-none-any.whl → 10.14.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.
- mindroot/coreplugins/admin/static/js/agent-form.js +26 -1
- mindroot/coreplugins/admin/static/js/persona-editor.js +14 -1
- mindroot/coreplugins/agent/agent.py +59 -18
- mindroot/coreplugins/agent/agent.py.bak +507 -0
- mindroot/coreplugins/agent/buagentz1.py +540 -0
- mindroot/coreplugins/agent/speech_to_speech.py +77 -0
- mindroot/coreplugins/agent/speech_to_speech.py.backup +46 -0
- mindroot/coreplugins/chat/buservices.py +625 -0
- mindroot/coreplugins/chat/buwidget_routes.py +287 -0
- mindroot/coreplugins/chat/commands.py +4 -0
- mindroot/coreplugins/chat/services.py +178 -8
- mindroot/coreplugins/chat/static/css/dark.css +90 -1
- mindroot/coreplugins/chat/static/css/default.css +90 -1
- mindroot/coreplugins/chat/static/css/light.css +724 -0
- mindroot/coreplugins/chat/static/css/mobile.css +37 -0
- mindroot/coreplugins/chat/static/js/chat.js +150 -89
- mindroot/coreplugins/chat/static/js/chatform.js +1 -1
- mindroot/coreplugins/chat/static/js/throttle.js +4 -2
- mindroot/coreplugins/chat/templates/chat.jinja2 +9 -1
- mindroot/coreplugins/chat/widget_routes.py +54 -10
- mindroot/coreplugins/check_list/helpers.py +221 -0
- mindroot/coreplugins/check_list/mod.py +435 -126
- mindroot/coreplugins/check_list/mod.py.backup +378 -0
- mindroot/coreplugins/check_list/mod.py.backup2 +506 -0
- mindroot/coreplugins/check_list/mod.py.backup3 +506 -0
- mindroot/coreplugins/check_list/mod_create_checklist_lol.py +756 -0
- mindroot/coreplugins/check_list/plugin_info.json +15 -0
- mindroot/coreplugins/jwt_auth/middleware.py +1 -1
- mindroot/docs/.env +1 -0
- mindroot/docs/.gitignore +1 -0
- mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
- mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
- mindroot/docs/_build/doctrees/embed_chat.doctree +0 -0
- mindroot/docs/_build/doctrees/environment.pickle +0 -0
- mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
- mindroot/docs/_build/doctrees/index.doctree +0 -0
- mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
- mindroot/docs/_build/doctrees/installation.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
- mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
- mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
- mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
- mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
- mindroot/docs/_build/html/_images/apikey.png +0 -0
- mindroot/docs/_build/html/_images/chatwidgetx.png +0 -0
- mindroot/docs/_build/html/_images/disablechatavatar.png +0 -0
- mindroot/docs/_build/html/_images/widgetform.png +0 -0
- mindroot/docs/_build/html/_images/widgetonpage.png +0 -0
- mindroot/docs/_build/html/_modules/index.html +1 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +284 -91
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +284 -91
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +288 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +283 -90
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +669 -213
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +284 -91
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +284 -91
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +281 -88
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +284 -91
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +282 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +279 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +280 -87
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +440 -91
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +282 -87
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +280 -85
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +282 -87
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +294 -91
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +282 -87
- mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +343 -98
- mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +280 -84
- mindroot/docs/_build/html/_modules/mindroot/migrate.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +285 -89
- mindroot/docs/_build/html/_modules/mindroot/server.html +292 -87
- mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +282 -86
- mindroot/docs/_build/html/_modules/mindroot/server_prev.html +282 -86
- mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +21 -1
- mindroot/docs/_build/html/_sources/embed_chat.rst.txt +54 -0
- mindroot/docs/_build/html/_sources/user_documentation.rst.txt +6 -1
- mindroot/docs/_build/html/chat_with_assistant.html +1 -0
- mindroot/docs/_build/html/developer_documentation.html +45 -4
- mindroot/docs/_build/html/embed_chat.html +381 -0
- mindroot/docs/_build/html/genindex.html +9 -2
- mindroot/docs/_build/html/getting_started.html +19 -15
- mindroot/docs/_build/html/index.html +3 -0
- mindroot/docs/_build/html/install_plugins_with_tools.html +1 -0
- mindroot/docs/_build/html/installation.html +1 -0
- mindroot/docs/_build/html/llm_api_key.html +1 -0
- mindroot/docs/_build/html/llm_plugin_installation.html +1 -0
- mindroot/docs/_build/html/objects.inv +0 -0
- mindroot/docs/_build/html/programming_task.html +4 -3
- mindroot/docs/_build/html/py-modindex.html +2 -1
- mindroot/docs/_build/html/search.html +1 -0
- mindroot/docs/_build/html/searchindex.js +1 -1
- mindroot/docs/_build/html/source/ahp.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +91 -47
- mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.html +3 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +16 -2
- mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +16 -2
- mindroot/docs/_build/html/source/mindroot.html +2 -0
- mindroot/docs/_build/html/source/mindroot.lib.auth.html +16 -2
- mindroot/docs/_build/html/source/mindroot.lib.html +36 -4
- mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +16 -2
- mindroot/docs/_build/html/source/mindroot.lib.plugins.html +16 -2
- mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +1 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.html +1 -0
- mindroot/docs/_build/html/source/mindroot.registry.html +16 -2
- mindroot/docs/_build/html/source/modules.html +16 -2
- mindroot/docs/_build/html/source/mr_agent_expert_instr.html +1 -0
- mindroot/docs/_build/html/starting_mindroot.html +1 -0
- mindroot/docs/_build/html/user_documentation.html +9 -0
- mindroot/docs/apikey.png +0 -0
- mindroot/docs/chatwidget1.png +0 -0
- mindroot/docs/chatwidgetx.png +0 -0
- mindroot/docs/developer_documentation.rst +21 -1
- mindroot/docs/disablechatavatar.png +0 -0
- mindroot/docs/embed_chat.rst +54 -0
- mindroot/docs/user_documentation.rst +6 -1
- mindroot/docs/widgetform.png +0 -0
- mindroot/docs/widgetonpage.png +0 -0
- mindroot/lib/buchatlog3.py +592 -0
- mindroot/lib/chatcontext.py +1 -0
- mindroot/lib/chatlog.py +195 -5
- mindroot/lib/logging/logfiles.py +1 -0
- {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/METADATA +1 -1
- {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/RECORD +282 -300
- mindroot/docs/_build/html/.buildinfo.bak +0 -4
- mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -123
- mindroot/docs/_build/html/_static/css/badge_only.css +0 -1
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -2671
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/theme.css +0 -4
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/jquery.js +0 -2
- mindroot/docs/_build/html/_static/js/badge_only.js +0 -1
- mindroot/docs/_build/html/_static/js/theme.js +0 -1
- mindroot/docs/_build/html/_static/js/versions.js +0 -228
- {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/WHEEL +0 -0
- {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.22.0.dist-info → mindroot-10.14.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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
</
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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="../../../../
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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">"""</span>
|
|
73
|
-
<span class="sd">checklist helper for an LLM
|
|
74
|
-
<span class="sd"
|
|
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 "##\tChecklist" 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['checklist']`.</span>
|
|
84
262
|
|
|
85
|
-
<span class="sd">•
|
|
86
|
-
<span class="sd"
|
|
87
|
-
<span class="sd"
|
|
88
|
-
<span class="sd"
|
|
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['checklist']`</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 third
|
|
269
|
+
<span class="sd">as tools. No third-party deps—only Python's `re` module.</span>
|
|
94
270
|
<span class="sd">"""</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="
|
|
102
|
-
|
|
103
|
-
<span class="n">
|
|
104
|
-
<span class="n">
|
|
105
|
-
<span class="n">
|
|
106
|
-
|
|
107
|
-
<span class="
|
|
108
|
-
<span class="
|
|
109
|
-
|
|
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">"""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"> """</span>
|
|
296
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"parsing:"</span><span class="p">)</span>
|
|
297
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"---------------------------------------------"</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">'---------------------------------------------'</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">'- [ ]'</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">'- [x]'</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">'- [X]'</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">"reference indent:"</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"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">):</span>
|
|
111
|
-
<span class="n">
|
|
112
|
-
<span class="
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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">'- [ ]'</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">'- [x]'</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">'- [X]'</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">"found task at indent:"</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">"reference indent:"</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">'- [x]'</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">'- [X]'</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">'- [ ]'</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"><</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">"checking line for body:"</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">"next_stripped:"</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">"next_indent:"</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">"reference_indent:"</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">'- [ ]'</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">'- [x]'</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">'- [X]'</span><span class="p">))</span> <span class="ow">and</span>
|
|
356
|
+
<span class="n">next_indent</span> <span class="o"><=</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">'#'</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">'label'</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
|
368
|
+
<span class="s1">'body'</span><span class="p">:</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</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">'done'</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
|
-
|
|
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">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
|
130
|
-
<span class="s2">"body"</span><span class="p">:</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</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">"done"</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">"""Extract
|
|
381
|
+
<span class="w"> </span><span class="sd">"""Extract checklist items from the entire markdown text.</span>
|
|
140
382
|
<span class="sd"> </span>
|
|
141
|
-
<span class="sd">
|
|
142
|
-
<span class="sd">
|
|
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 'Checklist' 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"> """</span>
|
|
147
|
-
<span class="
|
|
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">'#'</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">'#'</span><span class="p">))</span> <span class="o"><=</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">"</span><span class="se">\n</span><span class="s2">"</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">"""
|
|
413
|
+
<span class="w"> </span><span class="sd">"""Load checklist from instructions.</span>
|
|
198
414
|
<span class="sd"> </span>
|
|
199
|
-
<span class="sd">
|
|
200
|
-
<span class="sd"> </span>
|
|
201
|
-
<span class="sd"> Example:</span>
|
|
202
|
-
<span class="sd"> { "load_checklist_from_instructions": { "md": "Full instructions with embedded checklist" } }</span>
|
|
415
|
+
<span class="sd"> Processes the entire text and extracts top-level checklist items.</span>
|
|
203
416
|
<span class="sd"> """</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">"""Resolve a subtask_id to an index (0-based).</span>
|
|
426
|
+
<span class="w"> </span><span class="sd">"""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"> """</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">"cursor"</span><span class="p">]</span>
|
|
225
|
-
|
|
226
|
-
<span class="c1"># If it'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'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">"tasks"</span><span class="p">]):</span>
|
|
232
|
-
<span class="k">if</span> <span class="n">task</span><span class="p">[</span><span class="s2">"label"</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">"tasks"</span><span class="p">],</span> <span class="n">st</span><span class="p">[</span><span class="s2">"cursor"</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">"</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">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</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">'body'</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">"✅"</span> <span class="k">if</span> <span class="n">nested_task</span><span class="p">[</span><span class="s2">"done"</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"❌"</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">" </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">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
259
465
|
|
|
260
466
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</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"># ---------- module
|
|
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">"""</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"> { "complete_subtask": {} } # Complete current subtask</span>
|
|
279
486
|
<span class="sd"> { "complete_subtask": { "subtask_id": "Review documents" } } # Complete by label</span>
|
|
487
|
+
<span class="sd"> { "complete_subtask": { "subtask_id": "USP" } } # Complete nested subtask</span>
|
|
280
488
|
<span class="sd"> """</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">"_Context is required._"</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">"_No checklist found. Make sure to include a checklist in your instructions._"</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"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
300
508
|
<span class="k">return</span> <span class="s2">"_Invalid subtask identifier._"</span>
|
|
301
509
|
|
|
302
|
-
<span class="c1">#
|
|
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">'nested_task'</span><span class="p">][</span><span class="s1">'done'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
|
514
|
+
|
|
515
|
+
<span class="c1"># Update the parent task'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">"tasks"</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">'nested_index'</span><span class="p">],</span>
|
|
520
|
+
<span class="n">nested_info</span><span class="p">[</span><span class="s1">'parent_nested_tasks'</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">'body'</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">'done'</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">'parent_nested_tasks'</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">'done'</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">"cursor"</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">"tasks"</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">"Completed Nested Subtask: - [x] </span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">'nested_task'</span><span class="p">][</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2"> (within '</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">')"</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">"</span><span class="se">\n\n</span><span class="s2">Parent task '</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">' is now complete!"</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">"cursor"</span><span class="p">]</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
539
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</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">"</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">"tasks"</span><span class="p">][</span><span class="n">st</span><span class="p">[</span><span class="s1">'cursor'</span><span class="p">]]</span>
|
|
542
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"""</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">'cursor'</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">'label'</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">'body'</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">"""</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">"tasks"</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">"done"</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">"cursor"</span><span class="p">]</span> <span class="o">=</span> <span class="
|
|
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">"tasks"</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">"done"</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">"tasks"</span><span class="p">]),</span>
|
|
310
|
-
<span class="p">)</span>
|
|
555
|
+
<span class="n">st</span><span class="p">[</span><span class="s2">"cursor"</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">"tasks"</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">"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">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
|
|
@@ -315,15 +560,14 @@
|
|
|
315
560
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</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">"</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">"tasks"</span><span class="p">][</span><span class="n">st</span><span class="p">[</span><span class="s1">'cursor'</span><span class="p">]]</span>
|
|
318
|
-
<span class="k">return</span> <span class="sa">f</span><span class="s2">"""</span>
|
|
319
|
-
|
|
563
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"""</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">'cursor'</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">'label'</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">'body'</span><span class="p">]</span><span class="si">}</span>
|
|
320
568
|
|
|
321
|
-
<span class="
|
|
322
|
-
<span class="s2"> - [ ] </span><span class="si">{</span><span class="n">next_task</span><span class="p">[</span><span class="s1">'label'</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">'body'</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">"""</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"> """</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">"""</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"> { "goto_subtask": { "subtask_id": "Data analysis" } } # Go to
|
|
586
|
+
<span class="sd"> { "goto_subtask": { "subtask_id": "Data analysis" } } # Go to top-level task</span>
|
|
587
|
+
<span class="sd"> { "goto_subtask": { "subtask_id": "USP" } } # Go to nested task</span>
|
|
342
588
|
<span class="sd"> """</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">"_Context is required._"</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">"tasks"</span><span class="p">]:</span>
|
|
348
594
|
<span class="k">return</span> <span class="s2">"_No checklist found. Make sure to include a checklist in your instructions._"</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"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
352
598
|
<span class="k">return</span> <span class="s2">"_Invalid subtask identifier._"</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">"cursor"</span><span class="p">]</span> <span class="o">=</span> <span class="n">idx</span>
|
|
356
602
|
|
|
357
|
-
<span class="c1">#
|
|
358
|
-
<span class="
|
|
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">"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">"</span>
|
|
607
|
+
<span class="sa">f</span><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><span class="s2">"</span>
|
|
608
|
+
<span class="p">)</span>
|
|
359
609
|
|
|
360
|
-
<span class="c1">#
|
|
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">"tasks"</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">"✅"</span> <span class="k">if</span> <span class="n">current_task</span><span class="p">[</span><span class="s2">"done"</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"❌"</span>
|
|
362
613
|
<span class="k">return</span> <span class="p">(</span>
|
|
363
614
|
<span class="sa">f</span><span class="s2">"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">'label'</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</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">"""</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"> { "clear_subtask": {} } # Clear current subtask</span>
|
|
384
|
-
<span class="sd"> { "clear_subtask": { "subtask_id": "Review documents" } } # Clear by label</span>
|
|
636
|
+
<span class="sd"> { "clear_subtask": { "subtask_id": "Review documents" } } # Clear top-level by label</span>
|
|
637
|
+
<span class="sd"> { "clear_subtask": { "subtask_id": "USP" } } # Clear nested subtask</span>
|
|
385
638
|
<span class="sd"> """</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">"_Context is required._"</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">"tasks"</span><span class="p">]:</span>
|
|
391
644
|
<span class="k">return</span> <span class="s2">"_No checklist found. Make sure to include a checklist in your instructions._"</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"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
395
648
|
<span class="k">return</span> <span class="s2">"_Invalid subtask identifier._"</span>
|
|
396
649
|
|
|
397
|
-
<span class="c1">#
|
|
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">'nested_task'</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">'done'</span><span class="p">]</span>
|
|
655
|
+
<span class="n">nested_task</span><span class="p">[</span><span class="s1">'done'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
|
656
|
+
|
|
657
|
+
<span class="c1"># Update the parent task'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">"tasks"</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">'nested_index'</span><span class="p">],</span>
|
|
662
|
+
<span class="n">nested_info</span><span class="p">[</span><span class="s1">'parent_nested_tasks'</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">'body'</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">'done'</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">'done'</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"><=</span> <span class="n">st</span><span class="p">[</span><span class="s2">"cursor"</span><span class="p">]:</span>
|
|
673
|
+
<span class="n">st</span><span class="p">[</span><span class="s2">"cursor"</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">"Cleared"</span> <span class="k">if</span> <span class="n">was_done</span> <span class="k">else</span> <span class="s2">"Already clear"</span>
|
|
676
|
+
<span class="k">return</span> <span class="p">(</span>
|
|
677
|
+
<span class="sa">f</span><span class="s2">"</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">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2"> (within '</span><span class="si">{</span><span class="n">parent_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">')</span><span class="se">\n</span><span class="s2">"</span>
|
|
678
|
+
<span class="sa">f</span><span class="s2">"Current subtask is now Subtask </span><span class="si">{</span><span class="n">st</span><span class="p">[</span><span class="s1">'cursor'</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">"</span>
|
|
679
|
+
<span class="sa">f</span><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><span class="s2">"</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">"tasks"</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">"done"</span><span class="p">]</span>
|
|
400
685
|
<span class="n">task</span><span class="p">[</span><span class="s2">"done"</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
|
-
|
|
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">"""</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"> { "get_parsed_subtasks": {} } # Get all top-level subtasks</span>
|
|
738
|
+
<span class="sd"> { "get_parsed_subtasks": { "subtask_id": "Research phase" } } # Get nested subtasks from "Research phase"</span>
|
|
739
|
+
<span class="sd"> { "get_parsed_subtasks": { "subtask_id": "Core" } } # Get nested subtasks from "Core"</span>
|
|
740
|
+
<span class="sd"> """</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">"_Context is required._"</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">"tasks"</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">"Loading checklist from instructions..."</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">"instructions"</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">"Error loading checklist: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
753
|
+
<span class="k">return</span> <span class="s2">"_No checklist found. Make sure to include a checklist in your instructions._"</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">"tasks"</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">"index"</span><span class="p">:</span> <span class="n">i</span><span class="p">,</span>
|
|
761
|
+
<span class="s2">"label"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"label"</span><span class="p">],</span>
|
|
762
|
+
<span class="s2">"body"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"body"</span><span class="p">],</span>
|
|
763
|
+
<span class="s2">"done"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"done"</span><span class="p">]</span>
|
|
764
|
+
<span class="p">})</span>
|
|
765
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
766
|
+
<span class="s2">"source"</span><span class="p">:</span> <span class="s2">"top-level checklist"</span><span class="p">,</span>
|
|
767
|
+
<span class="s2">"subtasks"</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"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
773
|
+
<span class="k">return</span> <span class="s2">"_Invalid subtask identifier._"</span>
|
|
774
|
+
|
|
775
|
+
<span class="c1"># If it'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">'nested_task'</span><span class="p">]</span>
|
|
778
|
+
<span class="n">source_desc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"nested subtasks from '</span><span class="si">{</span><span class="n">target_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">' (within '</span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">'parent_task'</span><span class="p">][</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">')"</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">"tasks"</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">"nested subtasks from '</span><span class="si">{</span><span class="n">target_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">'"</span>
|
|
782
|
+
|
|
783
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Parsing nested subtasks from:"</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">"body"</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">"index"</span><span class="p">:</span> <span class="n">i</span><span class="p">,</span>
|
|
790
|
+
<span class="s2">"label"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"label"</span><span class="p">],</span>
|
|
791
|
+
<span class="s2">"body"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"body"</span><span class="p">],</span>
|
|
792
|
+
<span class="s2">"done"</span><span class="p">:</span> <span class="n">task</span><span class="p">[</span><span class="s2">"done"</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">"source"</span><span class="p">:</span> <span class="n">source_desc</span><span class="p">,</span>
|
|
797
|
+
<span class="s2">"parent_task"</span><span class="p">:</span> <span class="p">{</span>
|
|
798
|
+
<span class="s2">"index"</span><span class="p">:</span> <span class="n">idx</span><span class="p">,</span>
|
|
799
|
+
<span class="s2">"label"</span><span class="p">:</span> <span class="n">target_task</span><span class="p">[</span><span class="s2">"label"</span><span class="p">],</span>
|
|
800
|
+
<span class="s2">"done"</span><span class="p">:</span> <span class="n">target_task</span><span class="p">[</span><span class="s2">"done"</span><span class="p">]</span>
|
|
801
|
+
<span class="p">},</span>
|
|
802
|
+
<span class="s2">"subtasks"</span><span class="p">:</span> <span class="n">result</span>
|
|
803
|
+
<span class="p">}</span></div>
|
|
438
804
|
|
|
439
|
-
<div role="contentinfo">
|
|
440
|
-
<p>© 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
|
-
|
|
449
|
-
|
|
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">"""</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"> { "delegate_subtask": { "subtask_id": "Research", </span>
|
|
826
|
+
<span class="sd"> "details": "Session data in /data/sess_1234/" }} </span>
|
|
827
|
+
<span class="sd"> { "delegate_subtask": { "subtask_id": "USP", </span>
|
|
828
|
+
<span class="sd"> "details": "Focus on unique selling proposition analysis" }} </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"> """</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">"tasks"</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">"Loading checklist from instructions..."</span><span class="p">)</span>
|
|
837
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Agent is"</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">"instructions"</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">"Error loading checklist: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</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">"_No checklist found. Make sure to include a checklist in your instructions._"</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"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">idx</span> <span class="o">>=</span> <span class="nb">len</span><span class="p">(</span><span class="n">st</span><span class="p">[</span><span class="s2">"tasks"</span><span class="p">]):</span>
|
|
849
|
+
<span class="k">return</span> <span class="s2">"_Invalid subtask identifier._"</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">'nested_task'</span><span class="p">]</span>
|
|
855
|
+
<span class="n">task_context</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"nested subtask '</span><span class="si">{</span><span class="n">current_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">' within parent task '</span><span class="si">{</span><span class="n">nested_info</span><span class="p">[</span><span class="s1">'parent_task'</span><span class="p">][</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">'"</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">"tasks"</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">"subtask '</span><span class="si">{</span><span class="n">current_task</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span><span class="si">}</span><span class="s2">'"</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">"body"</span><span class="p">]</span>
|
|
862
|
+
|
|
863
|
+
<span class="n">reminder</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"""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">."""</span>
|
|
868
|
+
|
|
869
|
+
<span class="n">instructions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"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">"</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">"name"</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
|
-
|
|
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 © 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
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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>
|