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.
Files changed (331) hide show
  1. mindroot/coreplugins/admin/static/js/agent-form.js +26 -1
  2. mindroot/coreplugins/admin/static/js/persona-editor.js +14 -1
  3. mindroot/coreplugins/agent/agent.py +59 -18
  4. mindroot/coreplugins/agent/agent.py.bak +507 -0
  5. mindroot/coreplugins/agent/buagentz1.py +540 -0
  6. mindroot/coreplugins/agent/speech_to_speech.py +77 -0
  7. mindroot/coreplugins/agent/speech_to_speech.py.backup +46 -0
  8. mindroot/coreplugins/chat/buservices.py +625 -0
  9. mindroot/coreplugins/chat/buwidget_routes.py +287 -0
  10. mindroot/coreplugins/chat/commands.py +4 -0
  11. mindroot/coreplugins/chat/services.py +178 -8
  12. mindroot/coreplugins/chat/static/css/dark.css +90 -1
  13. mindroot/coreplugins/chat/static/css/default.css +90 -1
  14. mindroot/coreplugins/chat/static/css/light.css +724 -0
  15. mindroot/coreplugins/chat/static/css/mobile.css +37 -0
  16. mindroot/coreplugins/chat/static/js/chat.js +150 -89
  17. mindroot/coreplugins/chat/static/js/chatform.js +1 -1
  18. mindroot/coreplugins/chat/static/js/throttle.js +4 -2
  19. mindroot/coreplugins/chat/templates/chat.jinja2 +9 -1
  20. mindroot/coreplugins/chat/widget_routes.py +54 -10
  21. mindroot/coreplugins/check_list/helpers.py +221 -0
  22. mindroot/coreplugins/check_list/mod.py +435 -126
  23. mindroot/coreplugins/check_list/mod.py.backup +378 -0
  24. mindroot/coreplugins/check_list/mod.py.backup2 +506 -0
  25. mindroot/coreplugins/check_list/mod.py.backup3 +506 -0
  26. mindroot/coreplugins/check_list/mod_create_checklist_lol.py +756 -0
  27. mindroot/coreplugins/check_list/plugin_info.json +15 -0
  28. mindroot/coreplugins/jwt_auth/middleware.py +1 -1
  29. mindroot/docs/.env +1 -0
  30. mindroot/docs/.gitignore +1 -0
  31. mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
  32. mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
  33. mindroot/docs/_build/doctrees/embed_chat.doctree +0 -0
  34. mindroot/docs/_build/doctrees/environment.pickle +0 -0
  35. mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
  36. mindroot/docs/_build/doctrees/index.doctree +0 -0
  37. mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
  38. mindroot/docs/_build/doctrees/installation.doctree +0 -0
  39. mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
  40. mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
  41. mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
  42. mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
  43. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
  44. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
  45. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
  46. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
  47. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
  48. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
  49. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
  50. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
  51. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
  52. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
  53. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
  54. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
  55. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
  56. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
  57. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
  58. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
  59. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
  60. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
  61. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
  62. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
  63. mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
  64. mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
  65. mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
  66. mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
  67. mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
  68. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
  69. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
  70. mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
  71. mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
  72. mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
  73. mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
  74. mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
  75. mindroot/docs/_build/html/_images/apikey.png +0 -0
  76. mindroot/docs/_build/html/_images/chatwidgetx.png +0 -0
  77. mindroot/docs/_build/html/_images/disablechatavatar.png +0 -0
  78. mindroot/docs/_build/html/_images/widgetform.png +0 -0
  79. mindroot/docs/_build/html/_images/widgetonpage.png +0 -0
  80. mindroot/docs/_build/html/_modules/index.html +1 -0
  81. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +282 -86
  82. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +281 -88
  83. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +280 -84
  84. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +281 -88
  85. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +279 -86
  86. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +284 -91
  87. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +284 -91
  88. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +281 -88
  89. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +280 -84
  90. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +280 -87
  91. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +282 -86
  92. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +285 -89
  93. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +281 -88
  94. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +280 -87
  95. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +280 -87
  96. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +280 -87
  97. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +281 -88
  98. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +280 -84
  99. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +280 -87
  100. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +288 -89
  101. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +280 -87
  102. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +279 -86
  103. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +280 -87
  104. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +281 -88
  105. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +279 -86
  106. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +280 -87
  107. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +281 -88
  108. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +283 -90
  109. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +279 -86
  110. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +279 -86
  111. mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +669 -213
  112. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +280 -87
  113. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +281 -88
  114. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +281 -88
  115. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +279 -86
  116. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +279 -86
  117. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +279 -86
  118. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +280 -87
  119. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +284 -91
  120. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +280 -87
  121. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +280 -87
  122. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +280 -87
  123. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +280 -87
  124. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +281 -88
  125. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +280 -87
  126. mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +280 -87
  127. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +280 -87
  128. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +280 -87
  129. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +284 -91
  130. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +281 -88
  131. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +279 -86
  132. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +282 -86
  133. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +284 -91
  134. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +282 -86
  135. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +282 -89
  136. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +279 -86
  137. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +280 -87
  138. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +280 -84
  139. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +280 -84
  140. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +282 -86
  141. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +280 -84
  142. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +282 -86
  143. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +282 -86
  144. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +280 -84
  145. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +282 -86
  146. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +280 -84
  147. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +280 -84
  148. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +282 -86
  149. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +282 -86
  150. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +280 -84
  151. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +282 -86
  152. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +285 -89
  153. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +280 -84
  154. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +282 -86
  155. mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +282 -86
  156. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +280 -84
  157. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +282 -86
  158. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +280 -84
  159. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +285 -89
  160. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +282 -86
  161. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +280 -84
  162. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +280 -84
  163. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +280 -84
  164. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +282 -86
  165. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +282 -86
  166. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +282 -86
  167. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +282 -86
  168. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +282 -86
  169. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +285 -89
  170. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +282 -86
  171. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +282 -86
  172. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +280 -84
  173. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +282 -86
  174. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +282 -86
  175. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +282 -86
  176. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +282 -86
  177. mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +280 -84
  178. mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +282 -86
  179. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +285 -89
  180. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +282 -86
  181. mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +282 -86
  182. mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +285 -89
  183. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +440 -91
  184. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +282 -86
  185. mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +280 -84
  186. mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +282 -86
  187. mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +282 -86
  188. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +280 -84
  189. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +280 -84
  190. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +282 -86
  191. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +282 -86
  192. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +282 -86
  193. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +280 -84
  194. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +282 -86
  195. mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +282 -86
  196. mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +282 -87
  197. mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +280 -85
  198. mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +282 -87
  199. mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +294 -91
  200. mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +282 -87
  201. mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +285 -89
  202. mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +282 -86
  203. mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +282 -86
  204. mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +282 -86
  205. mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +343 -98
  206. mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +280 -84
  207. mindroot/docs/_build/html/_modules/mindroot/migrate.html +282 -86
  208. mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +282 -86
  209. mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +285 -89
  210. mindroot/docs/_build/html/_modules/mindroot/server.html +292 -87
  211. mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +282 -86
  212. mindroot/docs/_build/html/_modules/mindroot/server_prev.html +282 -86
  213. mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +21 -1
  214. mindroot/docs/_build/html/_sources/embed_chat.rst.txt +54 -0
  215. mindroot/docs/_build/html/_sources/user_documentation.rst.txt +6 -1
  216. mindroot/docs/_build/html/chat_with_assistant.html +1 -0
  217. mindroot/docs/_build/html/developer_documentation.html +45 -4
  218. mindroot/docs/_build/html/embed_chat.html +381 -0
  219. mindroot/docs/_build/html/genindex.html +9 -2
  220. mindroot/docs/_build/html/getting_started.html +19 -15
  221. mindroot/docs/_build/html/index.html +3 -0
  222. mindroot/docs/_build/html/install_plugins_with_tools.html +1 -0
  223. mindroot/docs/_build/html/installation.html +1 -0
  224. mindroot/docs/_build/html/llm_api_key.html +1 -0
  225. mindroot/docs/_build/html/llm_plugin_installation.html +1 -0
  226. mindroot/docs/_build/html/objects.inv +0 -0
  227. mindroot/docs/_build/html/programming_task.html +4 -3
  228. mindroot/docs/_build/html/py-modindex.html +2 -1
  229. mindroot/docs/_build/html/search.html +1 -0
  230. mindroot/docs/_build/html/searchindex.js +1 -1
  231. mindroot/docs/_build/html/source/ahp.html +1 -0
  232. mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +1 -0
  233. mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +16 -2
  234. mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1 -0
  235. mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +16 -2
  236. mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +91 -47
  237. mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +16 -2
  238. mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +1 -0
  239. mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +16 -2
  240. mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +16 -2
  241. mindroot/docs/_build/html/source/mindroot.coreplugins.html +3 -0
  242. mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +16 -2
  243. mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +16 -2
  244. mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +1 -0
  245. mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +1 -0
  246. mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1 -0
  247. mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +16 -2
  248. mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +16 -2
  249. mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +16 -2
  250. mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +16 -2
  251. mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +16 -2
  252. mindroot/docs/_build/html/source/mindroot.html +2 -0
  253. mindroot/docs/_build/html/source/mindroot.lib.auth.html +16 -2
  254. mindroot/docs/_build/html/source/mindroot.lib.html +36 -4
  255. mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +16 -2
  256. mindroot/docs/_build/html/source/mindroot.lib.plugins.html +16 -2
  257. mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +1 -0
  258. mindroot/docs/_build/html/source/mindroot.lib.providers.html +1 -0
  259. mindroot/docs/_build/html/source/mindroot.registry.html +16 -2
  260. mindroot/docs/_build/html/source/modules.html +16 -2
  261. mindroot/docs/_build/html/source/mr_agent_expert_instr.html +1 -0
  262. mindroot/docs/_build/html/starting_mindroot.html +1 -0
  263. mindroot/docs/_build/html/user_documentation.html +9 -0
  264. mindroot/docs/apikey.png +0 -0
  265. mindroot/docs/chatwidget1.png +0 -0
  266. mindroot/docs/chatwidgetx.png +0 -0
  267. mindroot/docs/developer_documentation.rst +21 -1
  268. mindroot/docs/disablechatavatar.png +0 -0
  269. mindroot/docs/embed_chat.rst +54 -0
  270. mindroot/docs/user_documentation.rst +6 -1
  271. mindroot/docs/widgetform.png +0 -0
  272. mindroot/docs/widgetonpage.png +0 -0
  273. mindroot/lib/buchatlog3.py +592 -0
  274. mindroot/lib/chatcontext.py +1 -0
  275. mindroot/lib/chatlog.py +195 -5
  276. mindroot/lib/logging/logfiles.py +1 -0
  277. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/METADATA +1 -1
  278. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/RECORD +282 -300
  279. mindroot/docs/_build/html/.buildinfo.bak +0 -4
  280. mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -123
  281. mindroot/docs/_build/html/_static/css/badge_only.css +0 -1
  282. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  283. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  284. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  285. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  286. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  287. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -2671
  288. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  289. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  290. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  291. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  292. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  293. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  294. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  295. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  296. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  297. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  298. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  299. mindroot/docs/_build/html/_static/css/theme.css +0 -4
  300. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  301. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  302. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  303. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  304. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  305. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  306. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  307. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  308. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  309. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  310. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  311. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  312. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  313. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  314. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  315. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  316. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  317. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  318. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  319. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  320. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  321. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  322. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  323. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  324. mindroot/docs/_build/html/_static/jquery.js +0 -2
  325. mindroot/docs/_build/html/_static/js/badge_only.js +0 -1
  326. mindroot/docs/_build/html/_static/js/theme.js +0 -1
  327. mindroot/docs/_build/html/_static/js/versions.js +0 -228
  328. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/WHEEL +0 -0
  329. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/entry_points.txt +0 -0
  330. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/licenses/LICENSE +0 -0
  331. {mindroot-9.22.0.dist-info → mindroot-10.14.0.dist-info}/top_level.txt +0 -0
@@ -1,74 +1,263 @@
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.lib.templates - MindRoot 9.10.0 documentation</title>
9
+ <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
10
+ <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=25af2a20" />
11
+ <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
12
+ <link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=f4b9d74b" />
13
+
14
+
1
15
 
2
16
 
3
- <!DOCTYPE html>
4
- <html class="writer-html5" lang="en" data-content_root="../../../">
5
- <head>
6
- <meta charset="utf-8" />
7
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
- <title>mindroot.lib.templates &mdash; MindRoot 9.10.0 documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
10
- <link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
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;
39
+
40
+ }
41
+ }
42
+ }
43
+ </style></head>
44
+ <body>
45
+
46
+ <script>
47
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
48
+ </script>
49
+
11
50
 
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
+
12
198
 
13
- <script src="../../../_static/jquery.js?v=5d32c60e"></script>
14
- <script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
15
- <script src="../../../_static/documentation_options.js?v=3c16008f"></script>
16
- <script src="../../../_static/doctools.js?v=9bcbadda"></script>
17
- <script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
18
- <script src="../../../_static/js/theme.js"></script>
19
- <link rel="index" title="Index" href="../../../genindex.html" />
20
- <link rel="search" title="Search" href="../../../search.html" />
21
- </head>
22
-
23
- <body class="wy-body-for-nav">
24
- <div class="wy-grid-for-nav">
25
- <nav data-toggle="wy-nav-shift" class="wy-nav-side">
26
- <div class="wy-side-scroll">
27
- <div class="wy-side-nav-search" style="background: #343131" >
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>
220
+ <ul>
221
+ <li class="toctree-l1"><a class="reference internal" href="../../../developer_documentation.html">Developer Documentation</a></li>
222
+ </ul>
28
223
 
29
-
30
-
31
- <a href="../../../index.html" class="icon icon-home">
32
- MindRoot
33
- </a>
34
- <div role="search">
35
- <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
36
- <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
37
- <input type="hidden" name="check_keywords" value="yes" />
38
- <input type="hidden" name="area" value="default" />
39
- </form>
40
224
  </div>
41
- </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
42
- <!-- Local TOC -->
43
- <div class="local-toc"></div>
44
- </div>
45
- </div>
46
- </nav>
47
-
48
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
49
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
50
- <a href="../../../index.html">MindRoot</a>
51
- </nav>
52
-
53
- <div class="wy-nav-content">
54
- <div class="rst-content">
55
- <div role="navigation" aria-label="Page navigation">
56
- <ul class="wy-breadcrumbs">
57
- <li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
58
- <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
59
- <li class="breadcrumb-item active">mindroot.lib.templates</li>
60
- <li class="wy-breadcrumbs-aside">
61
- </li>
62
- </ul>
63
- <hr/>
64
225
  </div>
65
- <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
66
- <div itemprop="articleBody">
67
-
68
- <h1>Source code for mindroot.lib.templates</h1><div class="highlight"><pre>
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.lib.templates</h1><div class="highlight"><pre>
69
257
  <span></span><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
70
258
  <span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
71
259
  <span class="kn">from</span><span class="w"> </span><span class="nn">jinja2</span><span class="w"> </span><span class="kn">import</span> <span class="n">Environment</span><span class="p">,</span> <span class="n">FileSystemLoader</span><span class="p">,</span> <span class="n">ChoiceLoader</span>
260
+ <span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
72
261
  <span class="kn">from</span><span class="w"> </span><span class="nn">.plugins</span><span class="w"> </span><span class="kn">import</span> <span class="n">list_enabled</span><span class="p">,</span> <span class="n">get_plugin_path</span>
73
262
  <span class="kn">from</span><span class="w"> </span><span class="nn">.parent_templates</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_parent_templates_env</span>
74
263
  <span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
@@ -313,6 +502,7 @@
313
502
  <span class="k">return</span> <span class="n">alt_path</span>
314
503
  <span class="k">return</span> <span class="kc">None</span></div>
315
504
 
505
+
316
506
  <div class="viewcode-block" id="find_plugin_template">
317
507
  <a class="viewcode-back" href="../../../source/mindroot.lib.html#mindroot.lib.templates.find_plugin_template">[docs]</a>
318
508
  <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">find_plugin_template</span><span class="p">(</span><span class="n">page_name</span><span class="p">,</span> <span class="n">plugins</span><span class="p">):</span>
@@ -397,9 +587,6 @@
397
587
  <span class="c1">#print(f&quot;Found inject template at: {path}&quot;)</span>
398
588
  <span class="n">templates</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;inject&#39;</span><span class="p">,</span> <span class="s1">&#39;template&#39;</span><span class="p">:</span> <span class="n">env</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">content</span><span class="p">)})</span>
399
589
  <span class="k">break</span>
400
- <span class="c1">#else:</span>
401
- <span class="c1">#</span>
402
- <span class="c1"># print(f&quot;Inject template not found at: {path}&quot;)</span>
403
590
 
404
591
  <span class="c1"># Check override templates</span>
405
592
  <span class="n">override_paths</span> <span class="o">=</span> <span class="p">[</span>
@@ -414,8 +601,16 @@
414
601
  <span class="c1"># Load template content with translation support</span>
415
602
  <span class="n">content</span> <span class="o">=</span> <span class="n">load_template_with_translation</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
416
603
  <span class="k">if</span> <span class="n">content</span><span class="p">:</span>
417
- <span class="c1">#print(f&quot;Found override template at: {path}&quot;)</span>
418
- <span class="n">templates</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="s1">&#39;template&#39;</span><span class="p">:</span> <span class="n">env</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">content</span><span class="p">)})</span>
604
+ <span class="c1"># Detect top-of-file pragma to assume unspecified blocks are blank</span>
605
+ <span class="c1"># Accepted forms (case-insensitive):</span>
606
+ <span class="c1"># {# assume-blank #}, {# assume_blank #}, {# assume-blank: true #}, {# assume_blank: true #}</span>
607
+ <span class="n">assume_blank</span> <span class="o">=</span> <span class="kc">False</span>
608
+ <span class="n">head</span> <span class="o">=</span> <span class="n">content</span><span class="p">[:</span><span class="mi">2048</span><span class="p">]</span>
609
+ <span class="n">pragma_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\s*\{#\s*(assume[-_]blank)(?:\s*true)?\s*#\}\s*&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
610
+ <span class="k">if</span> <span class="n">pragma_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">head</span><span class="p">):</span>
611
+ <span class="n">assume_blank</span> <span class="o">=</span> <span class="kc">True</span>
612
+ <span class="n">content</span> <span class="o">=</span> <span class="n">pragma_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
613
+ <span class="n">templates</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="s1">&#39;template&#39;</span><span class="p">:</span> <span class="n">env</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">content</span><span class="p">),</span> <span class="s1">&#39;assume_blank&#39;</span><span class="p">:</span> <span class="n">assume_blank</span><span class="p">})</span>
419
614
  <span class="k">break</span>
420
615
 
421
616
  <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
@@ -426,7 +621,7 @@
426
621
 
427
622
  <div class="viewcode-block" id="collect_content">
428
623
  <a class="viewcode-back" href="../../../source/mindroot.lib.html#mindroot.lib.templates.collect_content">[docs]</a>
429
- <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">collect_content</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">blocks</span><span class="p">,</span> <span class="n">template_type</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
624
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">collect_content</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">blocks</span><span class="p">,</span> <span class="n">template_type</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">assume_blank</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
430
625
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;Collect content from child templates.</span>
431
626
  <span class="sd"> </span>
432
627
  <span class="sd"> Args:</span>
@@ -434,19 +629,30 @@
434
629
  <span class="sd"> blocks (list): List of block names</span>
435
630
  <span class="sd"> template_type (str): Type of template (&#39;inject&#39; or &#39;override&#39;)</span>
436
631
  <span class="sd"> data (dict): Template context data</span>
632
+ <span class="sd"> assume_blank (bool): If True and type is &#39;override&#39;, unspecified blocks are blanked</span>
437
633
  <span class="sd"> </span>
438
634
  <span class="sd"> Returns:</span>
439
635
  <span class="sd"> dict: Collected content by block</span>
440
636
  <span class="sd"> &quot;&quot;&quot;</span>
441
637
  <span class="n">content</span> <span class="o">=</span> <span class="p">{</span><span class="n">block</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;inject&#39;</span><span class="p">:</span> <span class="p">[],</span> <span class="s1">&#39;override&#39;</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> <span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">blocks</span><span class="p">}</span>
638
+
639
+ <span class="c1"># Get blocks that are actually defined in this template</span>
640
+ <span class="n">defined_blocks</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">template</span><span class="o">.</span><span class="n">blocks</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
641
+
442
642
  <span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">blocks</span><span class="p">:</span>
443
- <span class="k">if</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">template</span><span class="o">.</span><span class="n">blocks</span><span class="p">:</span>
643
+ <span class="k">if</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">defined_blocks</span><span class="p">:</span>
644
+ <span class="c1"># Block is explicitly defined in the template</span>
444
645
  <span class="n">block_content</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">template</span><span class="o">.</span><span class="n">blocks</span><span class="p">[</span><span class="n">block</span><span class="p">](</span><span class="n">template</span><span class="o">.</span><span class="n">new_context</span><span class="p">(</span><span class="n">data</span><span class="p">)))</span>
445
-
646
+
446
647
  <span class="k">if</span> <span class="n">template_type</span> <span class="o">==</span> <span class="s1">&#39;override&#39;</span><span class="p">:</span>
447
648
  <span class="n">content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">block_content</span>
448
649
  <span class="k">else</span><span class="p">:</span>
449
650
  <span class="n">content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;inject&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">block_content</span><span class="p">)</span>
651
+ <span class="k">elif</span> <span class="n">template_type</span> <span class="o">==</span> <span class="s1">&#39;override&#39;</span> <span class="ow">and</span> <span class="n">assume_blank</span><span class="p">:</span>
652
+ <span class="c1"># Block is NOT defined in override template, but assume_blank is True</span>
653
+ <span class="c1"># So we treat it as if it was defined but empty</span>
654
+ <span class="n">content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
655
+
450
656
  <span class="k">return</span> <span class="n">content</span></div>
451
657
 
452
658
 
@@ -463,6 +669,35 @@
463
669
  <span class="sd"> Returns:</span>
464
670
  <span class="sd"> str: Rendered HTML</span>
465
671
  <span class="sd"> &quot;&quot;&quot;</span>
672
+ <span class="c1"># Check for assume-blank pragma and render directly if found</span>
673
+ <span class="k">for</span> <span class="n">plugin</span> <span class="ow">in</span> <span class="n">plugins</span><span class="p">:</span>
674
+ <span class="n">plugin_path</span> <span class="o">=</span> <span class="n">get_plugin_path</span><span class="p">(</span><span class="n">plugin</span><span class="p">)</span>
675
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">plugin_path</span><span class="p">:</span>
676
+ <span class="k">continue</span>
677
+
678
+ <span class="n">last_part</span> <span class="o">=</span> <span class="n">plugin_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
679
+ <span class="n">override_paths</span> <span class="o">=</span> <span class="p">[</span>
680
+ <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">page_name</span><span class="si">}</span><span class="s1">.jinja2&#39;</span><span class="p">),</span>
681
+ <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">&#39;src&#39;</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">page_name</span><span class="si">}</span><span class="s1">.jinja2&#39;</span><span class="p">),</span>
682
+ <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">&#39;src&#39;</span><span class="p">,</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">page_name</span><span class="si">}</span><span class="s1">.jinja2&#39;</span><span class="p">),</span>
683
+ <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">&#39;src&#39;</span><span class="p">,</span> <span class="n">last_part</span><span class="p">,</span> <span class="s1">&#39;override&#39;</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">page_name</span><span class="si">}</span><span class="s1">.jinja2&#39;</span><span class="p">)</span>
684
+ <span class="p">]</span>
685
+
686
+ <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">override_paths</span><span class="p">:</span>
687
+ <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
688
+ <span class="n">content</span> <span class="o">=</span> <span class="n">load_template_with_translation</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
689
+ <span class="k">if</span> <span class="n">content</span><span class="p">:</span>
690
+ <span class="c1"># Check for assume-blank pragma</span>
691
+ <span class="n">head</span> <span class="o">=</span> <span class="n">content</span><span class="p">[:</span><span class="mi">2048</span><span class="p">]</span>
692
+ <span class="n">pragma_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\s*\{#\s*(assume[-_]blank)(?:\s*true)?\s*#\}\s*&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
693
+ <span class="k">if</span> <span class="n">pragma_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">head</span><span class="p">):</span>
694
+ <span class="c1"># Found assume-blank! Just render this template directly</span>
695
+ <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Found assume-blank pragma in </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">, rendering directly without parent&quot;</span><span class="p">)</span>
696
+ <span class="n">content</span> <span class="o">=</span> <span class="n">pragma_re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Remove pragma</span>
697
+ <span class="n">template</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
698
+ <span class="k">return</span> <span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">context</span><span class="p">)</span> <span class="c1"># Return early!</span>
699
+
700
+ <span class="c1"># If no assume-blank pragma found, continue with normal processing</span>
466
701
  <span class="c1"># Load parent template with translation support</span>
467
702
  <span class="n">parent_template</span> <span class="o">=</span> <span class="kc">None</span>
468
703
  <span class="n">parent_template_path</span> <span class="o">=</span> <span class="kc">None</span>
@@ -507,21 +742,23 @@
507
742
 
508
743
  <span class="k">for</span> <span class="n">child_template_info</span> <span class="ow">in</span> <span class="n">child_templates</span><span class="p">:</span>
509
744
  <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;calling collect_content&quot;</span><span class="p">)</span>
745
+ <span class="c1"># Pass assume_blank flag to collect_content</span>
510
746
  <span class="n">child_content</span> <span class="o">=</span> <span class="k">await</span> <span class="n">collect_content</span><span class="p">(</span>
511
747
  <span class="n">child_template_info</span><span class="p">[</span><span class="s1">&#39;template&#39;</span><span class="p">],</span>
512
748
  <span class="n">parent_blocks</span><span class="p">,</span>
513
749
  <span class="n">child_template_info</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">],</span>
514
- <span class="n">context</span>
750
+ <span class="n">context</span><span class="p">,</span>
751
+ <span class="n">child_template_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;assume_blank&#39;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
515
752
  <span class="p">)</span>
516
753
  <span class="k">for</span> <span class="n">block</span><span class="p">,</span> <span class="n">content</span> <span class="ow">in</span> <span class="n">child_content</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
517
- <span class="k">if</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]:</span>
754
+ <span class="k">if</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># Check for None specifically, empty string is valid</span>
518
755
  <span class="n">all_content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]</span>
519
756
  <span class="k">else</span><span class="p">:</span>
520
757
  <span class="n">all_content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;inject&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">content</span><span class="p">[</span><span class="s1">&#39;inject&#39;</span><span class="p">])</span>
521
758
 
522
759
  <span class="n">combined_template_str</span> <span class="o">=</span> <span class="s1">&#39;{</span><span class="si">% e</span><span class="s1">xtends layout_template %}</span><span class="se">\n</span><span class="s1">&#39;</span>
523
760
  <span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">all_content</span><span class="p">:</span>
524
- <span class="k">if</span> <span class="n">all_content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;override&#39;</span><span class="p">]:</span>
761
+ <span class="k">if</span> <span class="n">all_content</span><span class="p">[</span><span class="n">block</span><span class="p">][</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># Check for None, empty string is valid override</span>
525
762
  <span class="n">combined_template_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="se">{{</span><span class="s1">% block </span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1"> %</span><span class="se">}}\n</span><span class="s1"> </span><span class="se">{{{{</span><span class="s1"> combined_</span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1">_override|safe </span><span class="se">}}}}\n{{</span><span class="s1">% endblock %</span><span class="se">}}\n</span><span class="s1">&#39;</span>
526
763
  <span class="k">else</span><span class="p">:</span>
527
764
  <span class="n">combined_template_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="se">{{</span><span class="s1">% block </span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1"> %</span><span class="se">}}\n</span><span class="s1"> </span><span class="se">{{{{</span><span class="s1"> super() </span><span class="se">}}}}\n</span><span class="s1"> </span><span class="se">{{{{</span><span class="s1"> combined_</span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1">_inject|safe </span><span class="se">}}}}\n{{</span><span class="s1">% endblock %</span><span class="se">}}\n</span><span class="s1">&#39;</span>
@@ -543,7 +780,7 @@
543
780
  <span class="k">else</span><span class="p">:</span>
544
781
  <span class="n">combined_inject</span><span class="p">[</span><span class="sa">f</span><span class="s1">&#39;combined_</span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1">_inject&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
545
782
 
546
- <span class="k">if</span> <span class="s1">&#39;override&#39;</span> <span class="ow">in</span> <span class="n">content</span> <span class="ow">and</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]:</span>
783
+ <span class="k">if</span> <span class="s1">&#39;override&#39;</span> <span class="ow">in</span> <span class="n">content</span> <span class="ow">and</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
547
784
  <span class="n">combined_override</span><span class="p">[</span><span class="sa">f</span><span class="s1">&#39;combined_</span><span class="si">{</span><span class="n">block</span><span class="si">}</span><span class="s1">_override&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">content</span><span class="p">[</span><span class="s1">&#39;override&#39;</span><span class="p">]</span>
548
785
 
549
786
  <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;in render combined, context is&quot;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
@@ -646,32 +883,40 @@
646
883
  <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;h1&gt;Error Rendering Page&lt;/h1&gt;&lt;p&gt;</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&lt;/p&gt;&lt;pre&gt;</span><span class="si">{</span><span class="n">trace</span><span class="si">}</span><span class="s2">&lt;/pre&gt;&quot;</span></div>
647
884
 
648
885
  </pre></div>
649
-
650
- </div>
886
+ </article>
887
+ </div>
888
+ <footer>
889
+
890
+ <div class="related-pages">
891
+
892
+
893
+ </div>
894
+ <div class="bottom-of-page">
895
+ <div class="left-details">
896
+ <div class="copyright">
897
+ Copyright &#169; 2025, Jason Livesay
898
+ </div>
899
+ Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
900
+
901
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
902
+
903
+ </div>
904
+ <div class="right-details">
905
+
651
906
  </div>
652
- <footer>
653
-
654
- <hr/>
655
-
656
- <div role="contentinfo">
657
- <p>&#169; Copyright 2025, Jason Livesay.</p>
658
- </div>
659
-
660
- Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
661
- <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
662
- provided by <a href="https://readthedocs.org">Read the Docs</a>.
663
-
664
-
665
- </footer>
666
907
  </div>
667
- </div>
668
- </section>
908
+
909
+ </footer>
910
+ </div>
911
+ <aside class="toc-drawer no-toc">
912
+
913
+
914
+
915
+ </aside>
669
916
  </div>
670
- <script>
671
- jQuery(function () {
672
- SphinxRtdTheme.Navigation.enable(true);
673
- });
674
- </script>
675
-
676
- </body>
917
+ </div><script src="../../../_static/documentation_options.js?v=3c16008f"></script>
918
+ <script src="../../../_static/doctools.js?v=9bcbadda"></script>
919
+ <script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
920
+ <script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
921
+ </body>
677
922
  </html>