mindroot 9.11.0__py3-none-any.whl → 9.12.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (415) hide show
  1. mindroot/coreplugins/home/templates/home.jinja2 +1 -0
  2. mindroot/docs/Makefile +20 -0
  3. mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
  4. mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
  5. mindroot/docs/_build/doctrees/environment.pickle +0 -0
  6. mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
  7. mindroot/docs/_build/doctrees/index.doctree +0 -0
  8. mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
  9. mindroot/docs/_build/doctrees/installation.doctree +0 -0
  10. mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
  11. mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
  12. mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
  13. mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
  14. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
  15. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
  16. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
  17. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
  18. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
  19. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
  20. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
  21. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
  22. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
  23. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
  24. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
  25. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
  26. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
  27. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
  28. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
  29. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
  30. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
  31. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
  32. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
  33. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
  34. mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
  35. mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
  36. mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
  37. mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
  38. mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
  39. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
  40. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
  41. mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
  42. mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
  43. mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
  44. mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
  45. mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
  46. mindroot/docs/_build/html/.buildinfo +4 -0
  47. mindroot/docs/_build/html/.buildinfo.bak +4 -0
  48. mindroot/docs/_build/html/_images/envvar.png +0 -0
  49. mindroot/docs/_build/html/_images/files.png +0 -0
  50. mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
  51. mindroot/docs/_build/html/_images/mood.png +0 -0
  52. mindroot/docs/_build/html/_images/moon.png +0 -0
  53. mindroot/docs/_build/html/_images/openrouter.png +0 -0
  54. mindroot/docs/_build/html/_images/restart.png +0 -0
  55. mindroot/docs/_build/html/_modules/index.html +425 -0
  56. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
  57. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
  58. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
  59. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
  60. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
  61. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
  62. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
  63. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
  64. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
  65. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
  66. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
  67. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
  68. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
  69. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
  70. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
  71. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
  72. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
  73. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
  74. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
  75. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
  76. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
  77. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
  78. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
  79. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
  80. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
  81. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
  82. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
  83. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
  84. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
  85. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
  86. mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
  87. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
  88. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
  89. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
  90. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
  91. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
  92. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
  93. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
  94. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
  95. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
  96. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
  97. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
  98. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
  99. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
  100. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
  101. mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
  102. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
  103. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
  104. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
  105. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
  106. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
  107. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
  108. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
  109. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
  110. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
  111. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
  112. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
  113. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
  114. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
  115. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
  116. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
  117. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
  118. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
  119. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
  120. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
  121. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
  122. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
  123. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
  124. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
  125. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
  126. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
  127. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
  128. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
  129. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
  130. mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
  131. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
  132. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
  133. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
  134. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
  135. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
  136. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
  137. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
  138. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
  139. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
  140. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
  141. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
  142. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
  143. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
  144. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
  145. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
  146. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
  147. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
  148. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
  149. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
  150. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
  151. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
  152. mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
  153. mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
  154. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
  155. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
  156. mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
  157. mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
  158. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
  159. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
  160. mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
  161. mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
  162. mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
  163. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
  164. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
  165. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
  166. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
  167. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
  168. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
  169. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
  170. mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
  171. mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
  172. mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
  173. mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
  174. mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
  175. mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
  176. mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
  177. mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
  178. mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
  179. mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
  180. mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
  181. mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
  182. mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
  183. mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
  184. mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
  185. mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
  186. mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
  187. mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
  188. mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
  189. mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
  190. mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
  191. mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
  192. mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
  193. mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
  194. mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
  195. mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
  196. mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
  197. mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
  198. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
  199. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
  200. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
  201. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
  202. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
  203. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
  204. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
  205. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
  206. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
  207. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
  208. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
  209. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
  210. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
  211. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
  212. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
  213. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
  214. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
  215. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
  216. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
  217. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
  218. mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
  219. mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
  220. mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
  221. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
  222. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
  223. mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
  224. mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
  225. mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
  226. mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
  227. mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
  228. mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
  229. mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
  230. mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  231. mindroot/docs/_build/html/_static/basic.css +906 -0
  232. mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
  233. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  234. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  235. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  236. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  237. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  238. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  239. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  240. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  241. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  242. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  243. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  244. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  245. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  246. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  247. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  248. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  249. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  250. mindroot/docs/_build/html/_static/css/theme.css +4 -0
  251. mindroot/docs/_build/html/_static/custom.css +19 -0
  252. mindroot/docs/_build/html/_static/debug.css +69 -0
  253. mindroot/docs/_build/html/_static/doctools.js +149 -0
  254. mindroot/docs/_build/html/_static/documentation_options.js +13 -0
  255. mindroot/docs/_build/html/_static/file.png +0 -0
  256. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  257. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  258. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  259. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  260. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  261. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  262. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  263. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  264. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  265. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  266. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  267. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  268. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  269. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  270. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  271. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  272. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  273. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  274. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  275. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  276. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  277. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  278. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  279. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  280. mindroot/docs/_build/html/_static/jquery.js +2 -0
  281. mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
  282. mindroot/docs/_build/html/_static/js/theme.js +1 -0
  283. mindroot/docs/_build/html/_static/js/versions.js +228 -0
  284. mindroot/docs/_build/html/_static/language_data.js +192 -0
  285. mindroot/docs/_build/html/_static/minus.png +0 -0
  286. mindroot/docs/_build/html/_static/plus.png +0 -0
  287. mindroot/docs/_build/html/_static/pygments.css +232 -0
  288. mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
  289. mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
  290. mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
  291. mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
  292. mindroot/docs/_build/html/_static/searchtools.js +635 -0
  293. mindroot/docs/_build/html/_static/skeleton.css +296 -0
  294. mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
  295. mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
  296. mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
  297. mindroot/docs/_build/html/_static/styles/furo.css +2 -0
  298. mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
  299. mindroot/docs/_build/html/chat_with_assistant.html +329 -0
  300. mindroot/docs/_build/html/developer_documentation.html +338 -0
  301. mindroot/docs/_build/html/genindex.html +4690 -0
  302. mindroot/docs/_build/html/getting_started.html +423 -0
  303. mindroot/docs/_build/html/index.html +357 -0
  304. mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
  305. mindroot/docs/_build/html/installation.html +330 -0
  306. mindroot/docs/_build/html/llm_api_key.html +337 -0
  307. mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
  308. mindroot/docs/_build/html/objects.inv +0 -0
  309. mindroot/docs/_build/html/programming_task.html +326 -0
  310. mindroot/docs/_build/html/py-modindex.html +1307 -0
  311. mindroot/docs/_build/html/search.html +307 -0
  312. mindroot/docs/_build/html/searchindex.js +1 -0
  313. mindroot/docs/_build/html/source/ahp.html +302 -0
  314. mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
  315. mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
  316. mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
  317. mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
  318. mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
  319. mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
  320. mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
  321. mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
  322. mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
  323. mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
  324. mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
  325. mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
  326. mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
  327. mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
  328. mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
  329. mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
  330. mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
  331. mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
  332. mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
  333. mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
  334. mindroot/docs/_build/html/source/mindroot.html +811 -0
  335. mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
  336. mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
  337. mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
  338. mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
  339. mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
  340. mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
  341. mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
  342. mindroot/docs/_build/html/source/modules.html +377 -0
  343. mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
  344. mindroot/docs/_build/html/starting_mindroot.html +325 -0
  345. mindroot/docs/_build/html/user_documentation.html +333 -0
  346. mindroot/docs/_static/custom.css +19 -0
  347. mindroot/docs/chat_with_assistant.rst +14 -0
  348. mindroot/docs/conf.py +54 -0
  349. mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
  350. mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
  351. mindroot/docs/data/equivalent_flags.json +1 -0
  352. mindroot/docs/data/mcp/servers.json +9 -0
  353. mindroot/docs/data/models.json +57 -0
  354. mindroot/docs/data/plugin_manifest.json +95 -0
  355. mindroot/docs/data/preferred_models.json +12 -0
  356. mindroot/docs/data/providers.json +62 -0
  357. mindroot/docs/developer_documentation.rst +26 -0
  358. mindroot/docs/envvar.png +0 -0
  359. mindroot/docs/files.png +0 -0
  360. mindroot/docs/getting_started.rst +139 -0
  361. mindroot/docs/index.rst +38 -0
  362. mindroot/docs/install_plugins_with_tools.rst +25 -0
  363. mindroot/docs/installation.rst +21 -0
  364. mindroot/docs/installopenrouter.png +0 -0
  365. mindroot/docs/llm_api_key.rst +22 -0
  366. mindroot/docs/llm_plugin_installation.rst +27 -0
  367. mindroot/docs/make.bat +35 -0
  368. mindroot/docs/mood.png +0 -0
  369. mindroot/docs/moon.png +0 -0
  370. mindroot/docs/openrouter.png +0 -0
  371. mindroot/docs/personas/local/Assistant/avatar.png +0 -0
  372. mindroot/docs/personas/local/Assistant/faceref.png +0 -0
  373. mindroot/docs/personas/local/Assistant/persona.json +7 -0
  374. mindroot/docs/programming_task.rst +10 -0
  375. mindroot/docs/restart.png +0 -0
  376. mindroot/docs/source/ahp.rst +7 -0
  377. mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
  378. mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
  379. mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
  380. mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
  381. mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
  382. mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
  383. mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
  384. mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
  385. mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
  386. mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
  387. mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
  388. mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
  389. mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
  390. mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
  391. mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
  392. mindroot/docs/source/mindroot.coreplugins.rst +35 -0
  393. mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
  394. mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
  395. mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
  396. mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
  397. mindroot/docs/source/mindroot.lib.auth.rst +29 -0
  398. mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
  399. mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
  400. mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
  401. mindroot/docs/source/mindroot.lib.providers.rst +61 -0
  402. mindroot/docs/source/mindroot.lib.rst +152 -0
  403. mindroot/docs/source/mindroot.registry.rst +29 -0
  404. mindroot/docs/source/mindroot.rst +54 -0
  405. mindroot/docs/source/modules.rst +7 -0
  406. mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
  407. mindroot/docs/starting_mindroot.rst +12 -0
  408. mindroot/docs/user_documentation.rst +16 -0
  409. mindroot/server.py +10 -1
  410. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
  411. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +415 -8
  412. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
  413. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
  414. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
  415. {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,409 @@
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="../../../../">
5
+ <head>
6
+ <meta charset="utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>mindroot.coreplugins.chat.widget_routes &mdash; MindRoot 9.10.0 documentation</title>
9
+ <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
10
+ <link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
11
+
12
+
13
+ <script src="../../../../_static/jquery.js?v=5d32c60e"></script>
14
+ <script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
15
+ <script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
16
+ <script src="../../../../_static/doctools.js?v=9bcbadda"></script>
17
+ <script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
18
+ <script src="../../../../_static/js/theme.js"></script>
19
+ <link rel="index" title="Index" href="../../../../genindex.html" />
20
+ <link rel="search" title="Search" href="../../../../search.html" />
21
+ </head>
22
+
23
+ <body class="wy-body-for-nav">
24
+ <div class="wy-grid-for-nav">
25
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
26
+ <div class="wy-side-scroll">
27
+ <div class="wy-side-nav-search" style="background: #343131" >
28
+
29
+
30
+
31
+ <a href="../../../../index.html" class="icon icon-home">
32
+ MindRoot
33
+ </a>
34
+ <div role="search">
35
+ <form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
36
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
37
+ <input type="hidden" name="check_keywords" value="yes" />
38
+ <input type="hidden" name="area" value="default" />
39
+ </form>
40
+ </div>
41
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
42
+ <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
43
+ <ul>
44
+ <li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
45
+ </ul>
46
+
47
+ </div>
48
+ </div>
49
+ </nav>
50
+
51
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
52
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
53
+ <a href="../../../../index.html">MindRoot</a>
54
+ </nav>
55
+
56
+ <div class="wy-nav-content">
57
+ <div class="rst-content">
58
+ <div role="navigation" aria-label="Page navigation">
59
+ <ul class="wy-breadcrumbs">
60
+ <li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
61
+ <li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
62
+ <li class="breadcrumb-item active">mindroot.coreplugins.chat.widget_routes</li>
63
+ <li class="wy-breadcrumbs-aside">
64
+ </li>
65
+ </ul>
66
+ <hr/>
67
+ </div>
68
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
69
+ <div itemprop="articleBody">
70
+
71
+ <h1>Source code for mindroot.coreplugins.chat.widget_routes</h1><div class="highlight"><pre>
72
+ <span></span><span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Request</span><span class="p">,</span> <span class="n">Response</span>
73
+ <span class="kn">from</span><span class="w"> </span><span class="nn">fastapi.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">HTMLResponse</span>
74
+ <span class="kn">from</span><span class="w"> </span><span class="nn">pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span>
75
+ <span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">List</span>
76
+ <span class="kn">from</span><span class="w"> </span><span class="nn">.widget_manager</span><span class="w"> </span><span class="kn">import</span> <span class="n">widget_manager</span>
77
+ <span class="kn">from</span><span class="w"> </span><span class="nn">lib.auth.api_key</span><span class="w"> </span><span class="kn">import</span> <span class="n">verify_api_key</span>
78
+ <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_manager</span>
79
+ <span class="kn">from</span><span class="w"> </span><span class="nn">lib.route_decorators</span><span class="w"> </span><span class="kn">import</span> <span class="n">public_route</span>
80
+ <span class="kn">import</span><span class="w"> </span><span class="nn">nanoid</span>
81
+ <span class="kn">from</span><span class="w"> </span><span class="nn">.services</span><span class="w"> </span><span class="kn">import</span> <span class="n">init_chat_session</span>
82
+ <span class="kn">from</span><span class="w"> </span><span class="nn">lib.session_files</span><span class="w"> </span><span class="kn">import</span> <span class="n">save_session_data</span>
83
+ <span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
84
+
85
+ <span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
86
+
87
+ <div class="viewcode-block" id="WidgetTokenCreate">
88
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.WidgetTokenCreate">[docs]</a>
89
+ <span class="k">class</span><span class="w"> </span><span class="nc">WidgetTokenCreate</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
90
+ <span class="n">api_key</span><span class="p">:</span> <span class="nb">str</span>
91
+ <span class="n">agent_name</span><span class="p">:</span> <span class="nb">str</span>
92
+ <span class="n">base_url</span><span class="p">:</span> <span class="nb">str</span>
93
+ <span class="n">description</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
94
+ <span class="n">styling</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></div>
95
+
96
+
97
+ <div class="viewcode-block" id="WidgetTokenResponse">
98
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.WidgetTokenResponse">[docs]</a>
99
+ <span class="k">class</span><span class="w"> </span><span class="nc">WidgetTokenResponse</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
100
+ <span class="n">token</span><span class="p">:</span> <span class="nb">str</span>
101
+ <span class="n">agent_name</span><span class="p">:</span> <span class="nb">str</span>
102
+ <span class="n">base_url</span><span class="p">:</span> <span class="nb">str</span>
103
+ <span class="n">description</span><span class="p">:</span> <span class="nb">str</span>
104
+ <span class="n">created_at</span><span class="p">:</span> <span class="nb">str</span>
105
+ <span class="n">created_by</span><span class="p">:</span> <span class="nb">str</span>
106
+ <span class="n">styling</span><span class="p">:</span> <span class="nb">dict</span></div>
107
+
108
+
109
+ <div class="viewcode-block" id="create_widget_token">
110
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.create_widget_token">[docs]</a>
111
+ <span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/widgets/create&quot;</span><span class="p">)</span>
112
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">create_widget_token</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">widget_request</span><span class="p">:</span> <span class="n">WidgetTokenCreate</span><span class="p">):</span>
113
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Create a new widget token.&quot;&quot;&quot;</span>
114
+ <span class="k">try</span><span class="p">:</span>
115
+ <span class="c1"># Verify the API key is valid</span>
116
+ <span class="n">api_key_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">verify_api_key</span><span class="p">(</span><span class="n">widget_request</span><span class="o">.</span><span class="n">api_key</span><span class="p">)</span>
117
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key_data</span><span class="p">:</span>
118
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Invalid API key&quot;</span><span class="p">)</span>
119
+
120
+ <span class="c1"># Verify the agent exists</span>
121
+ <span class="k">try</span><span class="p">:</span>
122
+ <span class="n">agent_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">get_agent_data</span><span class="p">(</span><span class="n">widget_request</span><span class="o">.</span><span class="n">agent_name</span><span class="p">)</span>
123
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">agent_data</span><span class="p">:</span>
124
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Agent not found&quot;</span><span class="p">)</span>
125
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
126
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Agent not found&quot;</span><span class="p">)</span>
127
+
128
+ <span class="c1"># Get the current user</span>
129
+ <span class="n">user</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span>
130
+
131
+ <span class="c1"># Create the widget token</span>
132
+ <span class="n">token</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">create_widget_token</span><span class="p">(</span>
133
+ <span class="n">api_key</span><span class="o">=</span><span class="n">widget_request</span><span class="o">.</span><span class="n">api_key</span><span class="p">,</span>
134
+ <span class="n">agent_name</span><span class="o">=</span><span class="n">widget_request</span><span class="o">.</span><span class="n">agent_name</span><span class="p">,</span>
135
+ <span class="n">base_url</span><span class="o">=</span><span class="n">widget_request</span><span class="o">.</span><span class="n">base_url</span><span class="p">,</span>
136
+ <span class="n">created_by</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">,</span>
137
+ <span class="n">description</span><span class="o">=</span><span class="n">widget_request</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
138
+ <span class="n">styling</span><span class="o">=</span><span class="n">widget_request</span><span class="o">.</span><span class="n">styling</span>
139
+ <span class="p">)</span>
140
+
141
+ <span class="k">return</span> <span class="p">{</span>
142
+ <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
143
+ <span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">token</span><span class="p">,</span>
144
+ <span class="s2">&quot;embed_url&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">widget_request</span><span class="o">.</span><span class="n">base_url</span><span class="si">}</span><span class="s2">/chat/embed/</span><span class="si">{</span><span class="n">token</span><span class="si">}</span><span class="s2">&quot;</span>
145
+ <span class="p">}</span>
146
+
147
+ <span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
148
+ <span class="k">raise</span>
149
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
150
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
151
+
152
+
153
+ <div class="viewcode-block" id="list_widget_tokens">
154
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.list_widget_tokens">[docs]</a>
155
+ <span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/widgets/list&quot;</span><span class="p">)</span>
156
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">list_widget_tokens</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
157
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;List widget tokens for the current user.&quot;&quot;&quot;</span>
158
+ <span class="k">try</span><span class="p">:</span>
159
+ <span class="n">user</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span>
160
+ <span class="n">widgets</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">list_widget_tokens</span><span class="p">(</span><span class="n">created_by</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">)</span>
161
+ <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;data&quot;</span><span class="p">:</span> <span class="n">widgets</span><span class="p">}</span>
162
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
163
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
164
+
165
+
166
+ <div class="viewcode-block" id="delete_widget_token">
167
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.delete_widget_token">[docs]</a>
168
+ <span class="nd">@router</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">&quot;/widgets/delete/</span><span class="si">{token}</span><span class="s2">&quot;</span><span class="p">)</span>
169
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">delete_widget_token</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
170
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Delete a widget token.&quot;&quot;&quot;</span>
171
+ <span class="k">try</span><span class="p">:</span>
172
+ <span class="c1"># Verify the widget exists and belongs to the user</span>
173
+ <span class="n">widget_config</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">get_widget_config</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
174
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">widget_config</span><span class="p">:</span>
175
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Widget token not found&quot;</span><span class="p">)</span>
176
+
177
+ <span class="n">user</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">user</span>
178
+ <span class="k">if</span> <span class="n">widget_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;created_by&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="p">:</span>
179
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">403</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Not authorized to delete this widget&quot;</span><span class="p">)</span>
180
+
181
+ <span class="n">success</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">delete_widget_token</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
182
+ <span class="k">if</span> <span class="n">success</span><span class="p">:</span>
183
+ <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Widget token deleted successfully&quot;</span><span class="p">}</span>
184
+ <span class="k">else</span><span class="p">:</span>
185
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Failed to delete widget token&quot;</span><span class="p">)</span>
186
+
187
+ <span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
188
+ <span class="k">raise</span>
189
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
190
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
191
+
192
+
193
+ <div class="viewcode-block" id="get_embed_script">
194
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.get_embed_script">[docs]</a>
195
+ <span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/chat/embed/</span><span class="si">{token}</span><span class="s2">&quot;</span><span class="p">)</span>
196
+ <span class="nd">@public_route</span><span class="p">()</span>
197
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_embed_script</span><span class="p">(</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
198
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate the secure embed script for a widget token.&quot;&quot;&quot;</span>
199
+ <span class="k">try</span><span class="p">:</span>
200
+ <span class="c1"># Validate the widget token</span>
201
+ <span class="n">widget_config</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">get_widget_config</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
202
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">widget_config</span><span class="p">:</span>
203
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Widget token not found&quot;</span><span class="p">)</span>
204
+
205
+ <span class="c1"># Generate the embed JavaScript</span>
206
+ <span class="n">base_url</span> <span class="o">=</span> <span class="n">widget_config</span><span class="p">[</span><span class="s2">&quot;base_url&quot;</span><span class="p">]</span>
207
+ <span class="n">styling</span> <span class="o">=</span> <span class="n">widget_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;styling&quot;</span><span class="p">,</span> <span class="p">{})</span>
208
+
209
+ <span class="c1"># Create the embed script that doesn&#39;t expose the API key</span>
210
+ <span class="n">embed_script</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&#39;&#39;</span>
211
+ <span class="s1">(function() </span><span class="se">{{</span>
212
+ <span class="s1"> const config = </span><span class="se">{{</span>
213
+ <span class="s1"> baseUrl: &quot;</span><span class="si">{</span><span class="n">base_url</span><span class="si">}</span><span class="s1">&quot;,</span>
214
+ <span class="s1"> token: &quot;</span><span class="si">{</span><span class="n">token</span><span class="si">}</span><span class="s1">&quot;,</span>
215
+ <span class="s1"> position: &quot;</span><span class="si">{</span><span class="n">styling</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bottom-right&#39;</span><span class="p">)</span><span class="si">}</span><span class="s1">&quot;,</span>
216
+ <span class="s1"> width: &quot;</span><span class="si">{</span><span class="n">styling</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;width&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;400px&#39;</span><span class="p">)</span><span class="si">}</span><span class="s1">&quot;,</span>
217
+ <span class="s1"> height: &quot;</span><span class="si">{</span><span class="n">styling</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;height&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;600px&#39;</span><span class="p">)</span><span class="si">}</span><span class="s1">&quot;,</span>
218
+ <span class="s1"> theme: &quot;</span><span class="si">{</span><span class="n">styling</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;theme&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;dark&#39;</span><span class="p">)</span><span class="si">}</span><span class="s1">&quot;</span>
219
+ <span class="s1"> </span><span class="se">}}</span><span class="s1">;</span>
220
+ <span class="s1"> </span>
221
+ <span class="s1"> let chatContainer = null;</span>
222
+ <span class="s1"> let chatIcon = null;</span>
223
+ <span class="s1"> let isLoaded = false;</span>
224
+ <span class="s1"> </span>
225
+ <span class="s1"> function createChatIcon() </span><span class="se">{{</span>
226
+ <span class="s1"> if (chatIcon) return;</span>
227
+ <span class="s1"> </span>
228
+ <span class="s1"> chatIcon = document.createElement(&quot;div&quot;);</span>
229
+ <span class="s1"> chatIcon.id = &quot;mindroot-chat-icon-&quot; + config.token;</span>
230
+ <span class="s1"> chatIcon.innerHTML = &quot;💬&quot;;</span>
231
+ <span class="s1"> </span>
232
+ <span class="s1"> const iconStyles = </span><span class="se">{{</span>
233
+ <span class="s1"> position: &quot;fixed&quot;,</span>
234
+ <span class="s1"> bottom: &quot;20px&quot;,</span>
235
+ <span class="s1"> right: config.position.includes(&quot;left&quot;) ? &quot;auto&quot; : &quot;20px&quot;,</span>
236
+ <span class="s1"> left: config.position.includes(&quot;left&quot;) ? &quot;20px&quot; : &quot;auto&quot;,</span>
237
+ <span class="s1"> width: &quot;60px&quot;,</span>
238
+ <span class="s1"> height: &quot;60px&quot;,</span>
239
+ <span class="s1"> background: &quot;#2196F3&quot;,</span>
240
+ <span class="s1"> borderRadius: &quot;50%&quot;,</span>
241
+ <span class="s1"> display: &quot;flex&quot;,</span>
242
+ <span class="s1"> alignItems: &quot;center&quot;,</span>
243
+ <span class="s1"> justifyContent: &quot;center&quot;,</span>
244
+ <span class="s1"> cursor: &quot;pointer&quot;,</span>
245
+ <span class="s1"> boxShadow: &quot;0 4px 12px rgba(0, 0, 0, 0.3)&quot;,</span>
246
+ <span class="s1"> zIndex: &quot;10000&quot;,</span>
247
+ <span class="s1"> fontSize: &quot;24px&quot;,</span>
248
+ <span class="s1"> color: &quot;white&quot;,</span>
249
+ <span class="s1"> transition: &quot;all 0.3s ease&quot;</span>
250
+ <span class="s1"> </span><span class="se">}}</span><span class="s1">;</span>
251
+ <span class="s1"> </span>
252
+ <span class="s1"> Object.assign(chatIcon.style, iconStyles);</span>
253
+ <span class="s1"> chatIcon.addEventListener(&quot;click&quot;, toggleChat);</span>
254
+ <span class="s1"> document.body.appendChild(chatIcon);</span>
255
+ <span class="s1"> </span><span class="se">}}</span>
256
+ <span class="s1"> </span>
257
+ <span class="s1"> function createChatContainer() </span><span class="se">{{</span>
258
+ <span class="s1"> if (chatContainer) return;</span>
259
+ <span class="s1"> </span>
260
+ <span class="s1"> chatContainer = document.createElement(&quot;div&quot;);</span>
261
+ <span class="s1"> chatContainer.id = &quot;mindroot-chat-container-&quot; + config.token;</span>
262
+ <span class="s1"> </span>
263
+ <span class="s1"> const containerStyles = </span><span class="se">{{</span>
264
+ <span class="s1"> position: &quot;fixed&quot;,</span>
265
+ <span class="s1"> bottom: &quot;90px&quot;,</span>
266
+ <span class="s1"> right: config.position.includes(&quot;left&quot;) ? &quot;auto&quot; : &quot;20px&quot;,</span>
267
+ <span class="s1"> left: config.position.includes(&quot;left&quot;) ? &quot;20px&quot; : &quot;auto&quot;,</span>
268
+ <span class="s1"> width: config.width,</span>
269
+ <span class="s1"> height: config.height,</span>
270
+ <span class="s1"> background: &quot;white&quot;,</span>
271
+ <span class="s1"> borderRadius: &quot;12px&quot;,</span>
272
+ <span class="s1"> boxShadow: &quot;0 8px 32px rgba(0, 0, 0, 0.3)&quot;,</span>
273
+ <span class="s1"> zIndex: &quot;10001&quot;,</span>
274
+ <span class="s1"> display: &quot;none&quot;,</span>
275
+ <span class="s1"> overflow: &quot;hidden&quot;</span>
276
+ <span class="s1"> </span><span class="se">}}</span><span class="s1">;</span>
277
+ <span class="s1"> </span>
278
+ <span class="s1"> Object.assign(chatContainer.style, containerStyles);</span>
279
+ <span class="s1"> document.body.appendChild(chatContainer);</span>
280
+ <span class="s1"> </span><span class="se">}}</span>
281
+ <span class="s1"> </span>
282
+ <span class="s1"> function toggleChat() </span><span class="se">{{</span>
283
+ <span class="s1"> if (!chatContainer) createChatContainer();</span>
284
+ <span class="s1"> </span>
285
+ <span class="s1"> const isVisible = chatContainer.style.display !== &quot;none&quot;;</span>
286
+ <span class="s1"> </span>
287
+ <span class="s1"> if (isVisible) </span><span class="se">{{</span>
288
+ <span class="s1"> chatContainer.style.display = &quot;none&quot;;</span>
289
+ <span class="s1"> </span><span class="se">}}</span><span class="s1"> else </span><span class="se">{{</span>
290
+ <span class="s1"> if (!isLoaded) </span><span class="se">{{</span>
291
+ <span class="s1"> // Create iframe and load the secure session</span>
292
+ <span class="s1"> const iframe = document.createElement(&quot;iframe&quot;);</span>
293
+ <span class="s1"> iframe.style.cssText = &quot;width: 100%; height: 100%; border: none; border-radius: 12px;&quot;;</span>
294
+ <span class="s1"> iframe.src = config.baseUrl + &quot;/chat/widget/&quot; + config.token + &quot;/session&quot;;</span>
295
+ <span class="s1"> chatContainer.appendChild(iframe);</span>
296
+ <span class="s1"> isLoaded = true;</span>
297
+ <span class="s1"> </span><span class="se">}}</span>
298
+ <span class="s1"> chatContainer.style.display = &quot;block&quot;;</span>
299
+ <span class="s1"> </span><span class="se">}}</span>
300
+ <span class="s1"> </span><span class="se">}}</span>
301
+ <span class="s1"> </span>
302
+ <span class="s1"> function init() </span><span class="se">{{</span>
303
+ <span class="s1"> if (document.readyState === &quot;loading&quot;) </span><span class="se">{{</span>
304
+ <span class="s1"> document.addEventListener(&quot;DOMContentLoaded&quot;, function() </span><span class="se">{{</span>
305
+ <span class="s1"> createChatIcon();</span>
306
+ <span class="s1"> </span><span class="se">}}</span><span class="s1">);</span>
307
+ <span class="s1"> </span><span class="se">}}</span><span class="s1"> else </span><span class="se">{{</span>
308
+ <span class="s1"> createChatIcon();</span>
309
+ <span class="s1"> </span><span class="se">}}</span>
310
+ <span class="s1"> </span><span class="se">}}</span>
311
+ <span class="s1"> </span>
312
+ <span class="s1"> init();</span>
313
+ <span class="se">}}</span><span class="s1">)();</span>
314
+ <span class="s1">&#39;&#39;&#39;</span>
315
+
316
+ <span class="k">return</span> <span class="n">Response</span><span class="p">(</span>
317
+ <span class="n">content</span><span class="o">=</span><span class="n">embed_script</span><span class="p">,</span>
318
+ <span class="n">media_type</span><span class="o">=</span><span class="s2">&quot;application/javascript&quot;</span><span class="p">,</span>
319
+ <span class="n">headers</span><span class="o">=</span><span class="p">{</span>
320
+ <span class="s2">&quot;Cache-Control&quot;</span><span class="p">:</span> <span class="s2">&quot;no-cache, no-store, must-revalidate&quot;</span><span class="p">,</span>
321
+ <span class="s2">&quot;Pragma&quot;</span><span class="p">:</span> <span class="s2">&quot;no-cache&quot;</span><span class="p">,</span>
322
+ <span class="s2">&quot;Expires&quot;</span><span class="p">:</span> <span class="s2">&quot;0&quot;</span>
323
+ <span class="p">}</span>
324
+ <span class="p">)</span>
325
+
326
+ <span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
327
+ <span class="k">raise</span>
328
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
329
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
330
+
331
+
332
+
333
+ <div class="viewcode-block" id="create_widget_session">
334
+ <a class="viewcode-back" href="../../../../source/mindroot.coreplugins.chat.html#mindroot.coreplugins.chat.widget_routes.create_widget_session">[docs]</a>
335
+ <span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/chat/widget/</span><span class="si">{token}</span><span class="s2">/session&quot;</span><span class="p">)</span>
336
+ <span class="nd">@public_route</span><span class="p">()</span>
337
+ <span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">create_widget_session</span><span class="p">(</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
338
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Create a secure chat session for a widget token.&quot;&quot;&quot;</span>
339
+ <span class="k">try</span><span class="p">:</span>
340
+ <span class="c1"># Validate the widget token</span>
341
+ <span class="n">widget_config</span> <span class="o">=</span> <span class="n">widget_manager</span><span class="o">.</span><span class="n">get_widget_config</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
342
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">widget_config</span><span class="p">:</span>
343
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Widget token not found&quot;</span><span class="p">)</span>
344
+
345
+ <span class="c1"># Verify the API key from the widget config</span>
346
+ <span class="n">api_key_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">verify_api_key</span><span class="p">(</span><span class="n">widget_config</span><span class="p">[</span><span class="s2">&quot;api_key&quot;</span><span class="p">])</span>
347
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key_data</span><span class="p">:</span>
348
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Invalid API key in widget configuration&quot;</span><span class="p">)</span>
349
+
350
+ <span class="c1"># Create mock user and generate session ID</span>
351
+ <span class="k">class</span><span class="w"> </span><span class="nc">MockUser</span><span class="p">:</span>
352
+ <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">):</span>
353
+ <span class="bp">self</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="n">username</span>
354
+ <span class="n">user</span> <span class="o">=</span> <span class="n">MockUser</span><span class="p">(</span><span class="n">api_key_data</span><span class="p">[</span><span class="s1">&#39;username&#39;</span><span class="p">])</span>
355
+ <span class="n">session_id</span> <span class="o">=</span> <span class="n">nanoid</span><span class="o">.</span><span class="n">generate</span><span class="p">()</span>
356
+ <span class="n">agent_name</span> <span class="o">=</span> <span class="n">widget_config</span><span class="p">[</span><span class="s2">&quot;agent_name&quot;</span><span class="p">]</span>
357
+
358
+ <span class="c1"># Initialize the chat session (this was missing!)</span>
359
+ <span class="k">await</span> <span class="n">init_chat_session</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">agent_name</span><span class="p">,</span> <span class="n">session_id</span><span class="p">)</span>
360
+
361
+ <span class="c1"># Create and save access token for authentication</span>
362
+ <span class="kn">from</span><span class="w"> </span><span class="nn">coreplugins.jwt_auth.middleware</span><span class="w"> </span><span class="kn">import</span> <span class="n">create_access_token</span>
363
+ <span class="n">token_data</span> <span class="o">=</span> <span class="n">create_access_token</span><span class="p">({</span><span class="s2">&quot;sub&quot;</span><span class="p">:</span> <span class="n">api_key_data</span><span class="p">[</span><span class="s1">&#39;username&#39;</span><span class="p">]})</span>
364
+ <span class="k">await</span> <span class="n">save_session_data</span><span class="p">(</span><span class="n">session_id</span><span class="p">,</span> <span class="s2">&quot;access_token&quot;</span><span class="p">,</span> <span class="n">token_data</span><span class="p">)</span>
365
+
366
+ <span class="c1"># Now redirect to the session WITHOUT exposing the API key</span>
367
+ <span class="n">redirect_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;/session/</span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">session_id</span><span class="si">}</span><span class="s2">?embed=true&quot;</span>
368
+
369
+ <span class="k">return</span> <span class="n">Response</span><span class="p">(</span>
370
+ <span class="n">status_code</span><span class="o">=</span><span class="mi">302</span><span class="p">,</span>
371
+ <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="n">redirect_url</span><span class="p">}</span>
372
+ <span class="p">)</span>
373
+
374
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
375
+ <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>
376
+ <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">trace</span><span class="p">)</span>
377
+ <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
378
+
379
+
380
+ </pre></div>
381
+
382
+ </div>
383
+ </div>
384
+ <footer>
385
+
386
+ <hr/>
387
+
388
+ <div role="contentinfo">
389
+ <p>&#169; Copyright 2025, Jason Livesay.</p>
390
+ </div>
391
+
392
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
393
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
394
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
395
+
396
+
397
+ </footer>
398
+ </div>
399
+ </div>
400
+ </section>
401
+ </div>
402
+ <script>
403
+ jQuery(function () {
404
+ SphinxRtdTheme.Navigation.enable(true);
405
+ });
406
+ </script>
407
+
408
+ </body>
409
+ </html>