cmdbox 0.6.0__tar.gz → 0.6.0.2__tar.gz

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 cmdbox might be problematic. Click here for more details.

Files changed (376) hide show
  1. {cmdbox-0.6.0/cmdbox.egg-info → cmdbox-0.6.0.2}/PKG-INFO +1 -1
  2. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/common.py +14 -11
  3. cmdbox-0.6.0.2/cmdbox/app/commons/loghandler.py +153 -0
  4. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/agent_base.py +11 -9
  5. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/audit_base.py +16 -4
  6. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_start.py +3 -2
  7. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_agent.py +12 -0
  8. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_do_signout.py +3 -3
  9. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_exec_cmd.py +3 -3
  10. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_signin.py +2 -1
  11. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/options.py +7 -7
  12. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/web.py +6 -9
  13. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/extensions/features.yml +18 -0
  14. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/logconf_sample.yml +14 -1
  15. {cmdbox-0.6.0/cmdbox/extensions/sample_project/sample → cmdbox-0.6.0.2/cmdbox}/extensions/user_list.yml +2 -1
  16. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_audit.yml +9 -4
  17. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_client.yml +9 -4
  18. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_cmdbox.yml +9 -4
  19. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_edge.yml +9 -4
  20. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_gui.yml +8 -3
  21. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_server.yml +8 -3
  22. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/logconf_web.yml +8 -3
  23. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/version.py +3 -3
  24. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/agent.js +5 -2
  25. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/common.js +1 -1
  26. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/main.js +17 -3
  27. {cmdbox-0.6.0 → cmdbox-0.6.0.2/cmdbox.egg-info}/PKG-INFO +1 -1
  28. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox.egg-info/SOURCES.txt +0 -1
  29. cmdbox-0.6.0/cmdbox/app/commons/loghandler.py +0 -104
  30. cmdbox-0.6.0/cmdbox/logconf_agent.yml +0 -38
  31. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/LICENSE +0 -0
  32. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/MANIFEST.in +0 -0
  33. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/README.md +0 -0
  34. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/__init__.py +0 -0
  35. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/__main__.py +0 -0
  36. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/__init__.py +0 -0
  37. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/app.py +0 -0
  38. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/__init__.py +0 -0
  39. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/azure_signin.py +0 -0
  40. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/azure_signin_saml.py +0 -0
  41. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/github_signin.py +0 -0
  42. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/google_signin.py +0 -0
  43. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/signin.py +0 -0
  44. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/auth/signin_saml.py +0 -0
  45. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/client.py +0 -0
  46. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/commons/convert.py +0 -0
  47. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/commons/module.py +0 -0
  48. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/commons/redis_client.py +0 -0
  49. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/edge.py +0 -0
  50. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/edge_tool.py +0 -0
  51. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/feature.py +0 -0
  52. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_audit_createdb.py +0 -0
  53. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_audit_delete.py +0 -0
  54. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_audit_search.py +0 -0
  55. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_audit_write.py +0 -0
  56. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_copy.py +0 -0
  57. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_download.py +0 -0
  58. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_list.py +0 -0
  59. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +0 -0
  60. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_move.py +0 -0
  61. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_remove.py +0 -0
  62. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +0 -0
  63. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_file_upload.py +0 -0
  64. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_client_server_info.py +0 -0
  65. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_cmd_list.py +0 -0
  66. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_cmd_load.py +0 -0
  67. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_edge_config.py +0 -0
  68. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_edge_start.py +0 -0
  69. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_gui_start.py +0 -0
  70. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_gui_stop.py +0 -0
  71. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_server_list.py +0 -0
  72. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_server_start.py +0 -0
  73. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_server_stop.py +0 -0
  74. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_apikey_add.py +0 -0
  75. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_apikey_del.py +0 -0
  76. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_gencert.py +0 -0
  77. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_genpass.py +0 -0
  78. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_group_add.py +0 -0
  79. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_group_del.py +0 -0
  80. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_group_edit.py +0 -0
  81. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_group_list.py +0 -0
  82. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_stop.py +0 -0
  83. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_user_add.py +0 -0
  84. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_user_del.py +0 -0
  85. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_user_edit.py +0 -0
  86. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/cli/cmdbox_web_user_list.py +0 -0
  87. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_assets.py +0 -0
  88. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_audit.py +0 -0
  89. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_audit_metrics.py +0 -0
  90. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_bbforce_cmd.py +0 -0
  91. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_copyright.py +0 -0
  92. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_del_cmd.py +0 -0
  93. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_del_pipe.py +0 -0
  94. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_do_signin.py +0 -0
  95. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_exec_pipe.py +0 -0
  96. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_filer download.py +0 -0
  97. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_filer.py +0 -0
  98. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_filer_upload.py +0 -0
  99. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_get_cmd_choices.py +0 -0
  100. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_get_cmds.py +0 -0
  101. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_get_modes.py +0 -0
  102. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_get_server_opt.py +0 -0
  103. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_gui.py +0 -0
  104. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_gui_callback.py +0 -0
  105. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_list_cmd.py +0 -0
  106. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_list_pipe.py +0 -0
  107. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_load_cmd.py +0 -0
  108. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_load_pipe.py +0 -0
  109. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_raw_cmd.py +0 -0
  110. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_raw_pipe.py +0 -0
  111. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_result.py +0 -0
  112. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_save_cmd.py +0 -0
  113. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_save_pipe.py +0 -0
  114. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_user_data.py +0 -0
  115. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_users.py +0 -0
  116. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_usesignout.py +0 -0
  117. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_versions_cmdbox.py +0 -0
  118. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/features/web/cmdbox_web_versions_used.py +0 -0
  119. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/filer.py +0 -0
  120. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/app/server.py +0 -0
  121. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/config.yml +0 -0
  122. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/features.yml +0 -0
  123. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/.vscode/launch.json +0 -0
  124. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/requirements.txt +0 -0
  125. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/__init__.py +0 -0
  126. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/__main__.py +0 -0
  127. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/app/app.py +0 -0
  128. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/app/features/cli/__init__.py +0 -0
  129. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_client_time.py +0 -0
  130. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +0 -0
  131. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/app/features/web/__init__.py +0 -0
  132. {cmdbox-0.6.0/cmdbox → cmdbox-0.6.0.2/cmdbox/extensions/sample_project/sample}/extensions/user_list.yml +0 -0
  133. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/version.py +0 -0
  134. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/favicon.ico +0 -0
  135. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/icon.png +0 -0
  136. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.Authlib.1.5.2(BSD License).txt +0 -0
  137. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.Deprecated.1.2.18(MIT License).txt +0 -0
  138. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.Jinja2.3.1.6(BSD License).txt +0 -0
  139. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.MarkupSafe.3.0.2(BSD License).txt +0 -0
  140. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.PyYAML.6.0.2(MIT License).txt +0 -0
  141. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.Pygments.2.19.1(BSD License).txt +0 -0
  142. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.SQLAlchemy.2.0.40(MIT License).txt +0 -0
  143. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.Sphinx.8.2.3(UNKNOWN).txt +0 -0
  144. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.aiohappyeyeballs.2.6.1(Python Software Foundation License).txt +0 -0
  145. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.aiohttp.3.11.18(Apache Software License).txt +0 -0
  146. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.aiosignal.1.3.2(Apache Software License).txt +0 -0
  147. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.alabaster.1.0.0(BSD License).txt +0 -0
  148. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.annotated-types.0.7.0(MIT License).txt +0 -0
  149. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.anyio.4.9.0(MIT License).txt +0 -0
  150. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.argcomplete.3.6.2(Apache Software License).txt +0 -0
  151. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.async-timeout.5.0.1(Apache Software License).txt +0 -0
  152. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.attrs.25.3.0(UNKNOWN).txt +0 -0
  153. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.babel.2.17.0(BSD License).txt +0 -0
  154. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.backports.tarfile.1.2.0(MIT License).txt +0 -0
  155. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.cachetools.5.5.2(MIT License).txt +0 -0
  156. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.certifi.2025.4.26(Mozilla Public License 2.0 (MPL 2.0)).txt +0 -0
  157. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.cffi.1.17.1(MIT License).txt +0 -0
  158. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.charset-normalizer.3.4.2(MIT License).txt +0 -0
  159. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.click.8.2.0(UNKNOWN).txt +0 -0
  160. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.colorama.0.4.6(BSD License).txt +0 -0
  161. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.cryptography.44.0.3(Apache Software License; BSD License).txt +0 -0
  162. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.distro.1.9.0(Apache Software License).txt +0 -0
  163. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.docstring_parser.0.16(MIT License).txt +0 -0
  164. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.docutils.0.21.2(BSD License; GNU General Public License (GPL); Public Domain; Python Software Foundation License).txt +0 -0
  165. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.fastapi.0.115.12(MIT License).txt +0 -0
  166. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.filelock.3.18.0(The Unlicense (Unlicense)).txt +0 -0
  167. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.frozenlist.1.6.0(Apache-2.0).txt +0 -0
  168. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.fsspec.2025.3.2(BSD License).txt +0 -0
  169. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.gevent.25.4.2(MIT).txt +0 -0
  170. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-adk.0.5.0(Apache Software License).txt +0 -0
  171. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-api-core.2.24.2(Apache Software License).txt +0 -0
  172. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-api-python-client.2.169.0(Apache Software License).txt +0 -0
  173. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-auth-httplib2.0.2.0(Apache Software License).txt +0 -0
  174. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-auth.2.40.1(Apache Software License).txt +0 -0
  175. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-aiplatform.1.92.0(Apache 2.0).txt +0 -0
  176. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-bigquery.3.31.0(Apache Software License).txt +0 -0
  177. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-core.2.4.3(Apache Software License).txt +0 -0
  178. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-resource-manager.1.14.2(Apache Software License).txt +0 -0
  179. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-secret-manager.2.23.3(Apache Software License).txt +0 -0
  180. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-speech.2.32.0(Apache Software License).txt +0 -0
  181. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-storage.2.19.0(Apache Software License).txt +0 -0
  182. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-cloud-trace.1.16.1(Apache Software License).txt +0 -0
  183. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-crc32c.1.7.1(Apache 2.0).txt +0 -0
  184. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-genai.1.14.0(Apache Software License).txt +0 -0
  185. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.google-resumable-media.2.7.2(Apache Software License).txt +0 -0
  186. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.googleapis-common-protos.1.70.0(Apache Software License).txt +0 -0
  187. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.graphviz.0.20.3(MIT License).txt +0 -0
  188. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.greenlet.3.2.2(MIT AND Python-2.0).txt +0 -0
  189. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.grpc-google-iam-v1.0.14.2(Apache Software License).txt +0 -0
  190. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.grpcio-status.1.71.0(Apache Software License).txt +0 -0
  191. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.grpcio.1.71.0(Apache Software License).txt +0 -0
  192. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.gunicorn.23.0.0(MIT License).txt +0 -0
  193. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.h11.0.16.0(MIT License).txt +0 -0
  194. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.httpcore.1.0.9(BSD License).txt +0 -0
  195. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.httplib2.0.22.0(MIT License).txt +0 -0
  196. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.httptools.0.6.4(MIT License).txt +0 -0
  197. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.httpx-sse.0.4.0(MIT).txt +0 -0
  198. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.httpx.0.28.1(BSD License).txt +0 -0
  199. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.huggingface-hub.0.31.1(Apache Software License).txt +0 -0
  200. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.id.1.5.0(Apache Software License).txt +0 -0
  201. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.idna.3.10(BSD License).txt +0 -0
  202. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.imagesize.1.4.1(MIT License).txt +0 -0
  203. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.importlib_metadata.8.6.1(Apache Software License).txt +0 -0
  204. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.itsdangerous.2.2.0(BSD License).txt +0 -0
  205. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jaraco.classes.3.4.0(MIT License).txt +0 -0
  206. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jaraco.context.6.0.1(MIT License).txt +0 -0
  207. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jaraco.functools.4.1.0(MIT License).txt +0 -0
  208. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jiter.0.9.0(MIT License).txt +0 -0
  209. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jsonschema-specifications.2025.4.1(UNKNOWN).txt +0 -0
  210. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.jsonschema.4.23.0(MIT License).txt +0 -0
  211. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.keyring.25.6.0(MIT License).txt +0 -0
  212. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.litellm.1.69.0(MIT License).txt +0 -0
  213. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.markdown-it-py.3.0.0(MIT License).txt +0 -0
  214. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.mcp.1.8.0(MIT License).txt +0 -0
  215. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.mdurl.0.1.2(MIT License).txt +0 -0
  216. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.more-itertools.10.7.0(MIT License).txt +0 -0
  217. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.multidict.6.4.3(Apache Software License).txt +0 -0
  218. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.nh3.0.2.21(MIT).txt +0 -0
  219. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.numpy.2.2.5(BSD License).txt +0 -0
  220. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.openai.1.75.0(Apache Software License).txt +0 -0
  221. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.opentelemetry-api.1.33.0(Apache Software License).txt +0 -0
  222. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.opentelemetry-exporter-gcp-trace.1.9.0(Apache Software License).txt +0 -0
  223. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.opentelemetry-resourcedetector-gcp.1.9.0a0(Apache Software License).txt +0 -0
  224. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.opentelemetry-sdk.1.33.0(Apache Software License).txt +0 -0
  225. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.opentelemetry-semantic-conventions.0.54b0(Apache Software License).txt +0 -0
  226. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.packaging.25.0(Apache Software License; BSD License).txt +0 -0
  227. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pillow.11.2.1(UNKNOWN).txt +0 -0
  228. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pip.24.0(MIT License).txt +0 -0
  229. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.plyer.2.1.0(MIT License).txt +0 -0
  230. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.prettytable.3.16.0(UNKNOWN).txt +0 -0
  231. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.prompt_toolkit.3.0.51(BSD License).txt +0 -0
  232. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.propcache.0.3.1(Apache Software License).txt +0 -0
  233. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.proto-plus.1.26.1(Apache Software License).txt +0 -0
  234. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.protobuf.5.29.4(3-Clause BSD License).txt +0 -0
  235. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.psycopg-binary.3.2.7(GNU Lesser General Public License v3 (LGPLv3)).txt +0 -0
  236. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.psycopg.3.2.7(GNU Lesser General Public License v3 (LGPLv3)).txt +0 -0
  237. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pyasn1.0.6.1(BSD License).txt +0 -0
  238. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pyasn1_modules.0.4.2(BSD License).txt +0 -0
  239. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pycparser.2.22(BSD License).txt +0 -0
  240. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pycryptodome.3.22.0(BSD License; Public Domain).txt +0 -0
  241. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pydantic-settings.2.9.1(MIT License).txt +0 -0
  242. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pydantic.2.11.4(MIT License).txt +0 -0
  243. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pydantic_core.2.33.2(MIT License).txt +0 -0
  244. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pyparsing.3.2.3(MIT License).txt +0 -0
  245. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pystray.0.19.5(GNU Lesser General Public License v3 (LGPLv3)).txt +0 -0
  246. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.python-dateutil.2.9.0.post0(Apache Software License; BSD License).txt +0 -0
  247. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.python-dotenv.1.1.0(BSD License).txt +0 -0
  248. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.python-multipart.0.0.20(Apache Software License).txt +0 -0
  249. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.pywin32-ctypes.0.2.3(BSD-3-Clause).txt +0 -0
  250. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.questionary.2.1.0(MIT License).txt +0 -0
  251. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.readme_renderer.44.0(Apache Software License).txt +0 -0
  252. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.redis.6.0.0(MIT License).txt +0 -0
  253. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.referencing.0.36.2(UNKNOWN).txt +0 -0
  254. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.regex.2024.11.6(Apache Software License).txt +0 -0
  255. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.requests-toolbelt.1.0.0(Apache Software License).txt +0 -0
  256. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.requests.2.32.3(Apache Software License).txt +0 -0
  257. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.rfc3986.2.0.0(Apache Software License).txt +0 -0
  258. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.rich.14.0.0(MIT License).txt +0 -0
  259. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.roman-numerals-py.3.1.0(CC0 1.0 Universal (CC0 1.0) Public Domain Dedication; Zero-Clause BSD (0BSD)).txt +0 -0
  260. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.rpds-py.0.24.0(MIT).txt +0 -0
  261. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.rsa.4.9.1(Apache Software License).txt +0 -0
  262. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.setuptools.65.5.0(MIT License).txt +0 -0
  263. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.shapely.2.1.0(BSD License).txt +0 -0
  264. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.six.1.17.0(MIT License).txt +0 -0
  265. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sniffio.1.3.1(Apache Software License; MIT License).txt +0 -0
  266. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.snowballstemmer.3.0.1(BSD License).txt +0 -0
  267. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinx-intl.2.3.1(BSD License).txt +0 -0
  268. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinx-rtd-theme.3.0.2(MIT License).txt +0 -0
  269. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinx-sitemap.2.6.0(MIT License).txt +0 -0
  270. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinx_fontawesome.0.0.6(GNU General Public License v2 (GPLv2)).txt +0 -0
  271. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-applehelp.2.0.0(BSD License).txt +0 -0
  272. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-devhelp.2.0.0(BSD License).txt +0 -0
  273. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-htmlhelp.2.1.0(BSD License).txt +0 -0
  274. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-jquery.4.1(BSD License).txt +0 -0
  275. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-jsmath.1.0.1(BSD License).txt +0 -0
  276. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-qthelp.2.0.0(BSD License).txt +0 -0
  277. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sphinxcontrib-serializinghtml.2.0.0(BSD License).txt +0 -0
  278. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.sse-starlette.2.3.4(BSD License).txt +0 -0
  279. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.starlette.0.46.2(BSD License).txt +0 -0
  280. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tabulate.0.9.0(MIT License).txt +0 -0
  281. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tiktoken.0.9.0(MIT License).txt +0 -0
  282. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tokenizers.0.21.1(Apache Software License).txt +0 -0
  283. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tomli.2.2.1(MIT License).txt +0 -0
  284. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tqdm.4.67.1(MIT License; Mozilla Public License 2.0 (MPL 2.0)).txt +0 -0
  285. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.twine.6.1.0(Apache Software License).txt +0 -0
  286. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.typing-inspection.0.4.0(MIT License).txt +0 -0
  287. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.typing_extensions.4.13.2(UNKNOWN).txt +0 -0
  288. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tzdata.2025.2(Apache Software License).txt +0 -0
  289. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.tzlocal.5.3.1(MIT License).txt +0 -0
  290. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.uritemplate.4.1.1(Apache Software License; BSD License).txt +0 -0
  291. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.urllib3.2.4.0(UNKNOWN).txt +0 -0
  292. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.uvicorn.0.34.2(BSD License).txt +0 -0
  293. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.watchfiles.1.0.5(MIT License).txt +0 -0
  294. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.wcwidth.0.2.13(MIT License).txt +0 -0
  295. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.websockets.15.0.1(BSD License).txt +0 -0
  296. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.wheel.0.45.1(MIT License).txt +0 -0
  297. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.wrapt.1.17.2(BSD License).txt +0 -0
  298. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.yarl.1.20.0(Apache Software License).txt +0 -0
  299. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.zipp.3.21.0(MIT License).txt +0 -0
  300. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.zope.event.5.0(Zope Public License).txt +0 -0
  301. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/LICENSE.zope.interface.7.2(Zope Public License).txt +0 -0
  302. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/licenses/files.txt +0 -0
  303. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/agent.html +0 -0
  304. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/apexcharts/apexcharts.css +0 -0
  305. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/apexcharts/apexcharts.min.js +0 -0
  306. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/bootstrap/bootstrap.bundle.min.5.3.0.js +0 -0
  307. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/bootstrap/bootstrap.min.5.3.0.css +0 -0
  308. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/audit.js +0 -0
  309. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/color_mode.css +0 -0
  310. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/favicon.ico +0 -0
  311. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/filer_modal.js +0 -0
  312. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/icon.png +0 -0
  313. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/list_cmd.js +0 -0
  314. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/list_pipe.js +0 -0
  315. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/open_capture.js +0 -0
  316. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/open_output_json.js +0 -0
  317. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/result.js +0 -0
  318. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/signin.js +0 -0
  319. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/users.js +0 -0
  320. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/view_raw.js +0 -0
  321. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/cmdbox/view_result.js +0 -0
  322. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/encodingjs/LICENSE.txt +0 -0
  323. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/encodingjs/encoding.js +0 -0
  324. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/encodingjs/encoding.min.js +0 -0
  325. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/filer/filer.js +0 -0
  326. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/filer/main.css +0 -0
  327. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/filer/main.js +0 -0
  328. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/highlight/default.css +0 -0
  329. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/highlight/highlight.min.js +0 -0
  330. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/highlight/styles/tokyo-night-dark.min.css +0 -0
  331. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery/jquery.min.3.2.0.js +0 -0
  332. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-linedtextarea/README.md +0 -0
  333. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea-license.txt +0 -0
  334. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.css +0 -0
  335. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.html +0 -0
  336. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.js +0 -0
  337. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-resizable/jquery-resizable.min.js +0 -0
  338. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/AUTHORS.txt +0 -0
  339. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/LICENSE.txt +0 -0
  340. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  341. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  342. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  343. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  344. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  345. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  346. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.css +0 -0
  347. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.js +0 -0
  348. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/jquery-ui.structure.min.css +0 -0
  349. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/jquery-ui.theme.min.css +0 -0
  350. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/jquery-ui/package.json +0 -0
  351. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/css/lightbox.min.css +0 -0
  352. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/images/close.png +0 -0
  353. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/images/loading.gif +0 -0
  354. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/images/next.png +0 -0
  355. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/images/prev.png +0 -0
  356. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/lightbox2/js/lightbox.min.js +0 -0
  357. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/split-pane/split-pane.css +0 -0
  358. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/split-pane/split-pane.js +0 -0
  359. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/tree-menu/css/tree-menu.css +0 -0
  360. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/tree-menu/image/file.png +0 -0
  361. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/tree-menu/image/folder-close.png +0 -0
  362. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/tree-menu/image/folder-open.png +0 -0
  363. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets/tree-menu/js/tree-menu.js +0 -0
  364. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/assets_license_list.txt +0 -0
  365. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/audit.html +0 -0
  366. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/filer.html +0 -0
  367. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/gui.html +0 -0
  368. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/result.html +0 -0
  369. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/signin.html +0 -0
  370. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox/web/users.html +0 -0
  371. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox.egg-info/dependency_links.txt +0 -0
  372. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox.egg-info/entry_points.txt +0 -0
  373. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox.egg-info/requires.txt +0 -0
  374. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/cmdbox.egg-info/top_level.txt +0 -0
  375. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/setup.cfg +0 -0
  376. {cmdbox-0.6.0 → cmdbox-0.6.0.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cmdbox
3
- Version: 0.6.0
3
+ Version: 0.6.0.2
4
4
  Summary: cmdbox: It is a command line application with a plugin mechanism.
5
5
  Home-page: https://github.com/hamacom2004jp/cmdbox
6
6
  Download-URL: https://github.com/hamacom2004jp/cmdbox
@@ -93,32 +93,35 @@ def save_yml(yml_path:Path, data:dict) -> None:
93
93
  with open(yml_path, 'w') as f:
94
94
  yaml.dump(data, f, default_flow_style=False, sort_keys=False)
95
95
 
96
- def reset_logger(name:str, stderr:bool=False, fmt:str='%(message)s') -> None:
96
+ def reset_logger(name:str, stderr:bool=False, fmt:str='[%(asctime)s] %(levelname)s - %(message)s', datefmt:str='%Y-%m-%d %H:%M:%S') -> None:
97
97
  """
98
98
  指定されたロガーのハンドラをクリアし、新しいハンドラを追加します。
99
99
  Args:
100
100
  name (str): ロガーの名前
101
101
  stderr (bool, optional): 標準エラー出力を使用するかどうか. Defaults to False.
102
- fmt (str, optional): ログフォーマット. Defaults to '%(message)s'.
102
+ fmt (str, optional): ログフォーマット. Defaults to '[%(asctime)s] %(levelname)s - %(message)s'.
103
+ datefmt (str, optional): 日時フォーマット. Defaults to '%Y-%m-%d %H:%M:%S'.
103
104
  """
104
105
  logger = logging.getLogger(name)
105
106
  logger.handlers.clear()
106
107
  logger.propagate = False
107
- logger.addHandler(create_log_handler(stderr, fmt))
108
+ logger.addHandler(create_log_handler(stderr, fmt, datefmt))
108
109
 
109
- def create_log_handler(stderr:bool=False, fmt:str='%(message)s') -> logging.Handler:
110
+ def create_log_handler(stderr:bool=False, fmt:str='[%(asctime)s] %(levelname)s - %(message)s', datefmt:str='%Y-%m-%d %H:%M:%S') -> logging.Handler:
110
111
  """
111
112
  ログハンドラを生成します。
112
113
 
113
114
  Args:
114
115
  stderr (bool, optional): 標準エラー出力を使用するかどうか. Defaults to False.
115
- fmt (str, optional): ログフォーマット. Defaults to '%(message)s'.
116
+ fmt (str, optional): ログフォーマット. Defaults to '[%(asctime)s] %(levelname)s - %(message)s'.
117
+ datefmt (str, optional): 日時フォーマット. Defaults to '%Y-%m-%d %H:%M:%S'.
116
118
  Returns:
117
119
  logging.Handler: ログハンドラ
118
120
  """
119
- formatter = logging.Formatter(fmt)
120
- handler = RichHandler(console=Console(stderr=stderr), show_path=False, omit_repeated_times=False,
121
- tracebacks_word_wrap=False, log_time_format='[%Y-%m-%d %H:%M]')
121
+ formatter = logging.Formatter(fmt, datefmt)
122
+ #handler = RichHandler(console=Console(stderr=stderr), show_path=False, omit_repeated_times=False,
123
+ # tracebacks_word_wrap=False, log_time_format='[%Y-%m-%d %H:%M]')
124
+ handler = loghandler.ColorfulStreamHandler(sys.stdout if not stderr else sys.stderr)
122
125
  handler.setFormatter(formatter)
123
126
  return handler
124
127
 
@@ -132,7 +135,9 @@ def create_console(stderr:bool=False, file=None) -> Console:
132
135
  Returns:
133
136
  Console: コンソール
134
137
  """
135
- console = Console(stderr=stderr, file=file, log_time=True, log_path=False, log_time_format='[%Y-%m-%d %H:%M]')
138
+ console = Console(height=False,
139
+ soft_wrap=False, stderr=stderr, file=file, log_time=True, log_path=False, log_time_format='[%Y-%m-%d %H:%M:%S]')
140
+ #console = Console(soft_wrap=True, stderr=stderr, file=file, log_time=True, log_path=False, log_time_format='[%Y-%m-%d %H:%M:%S]')
136
141
  return console
137
142
 
138
143
  def default_logger(debug:bool=False, ver=version, webcall:bool=False) -> logging.Logger:
@@ -149,8 +154,6 @@ def default_logger(debug:bool=False, ver=version, webcall:bool=False) -> logging
149
154
  """
150
155
  logger = logging.getLogger(ver.__appid__)
151
156
  if not webcall:
152
- #formatter = logging.Formatter('%(levelname)s[%(asctime)s] - %(message)s')
153
- #handler = loghandler.ColorfulStreamHandler(sys.stdout)
154
157
  handler = create_log_handler()
155
158
  handler.setLevel(logging.DEBUG if debug else logging.INFO)
156
159
  logger.addHandler(handler)
@@ -0,0 +1,153 @@
1
+ from rich.console import Console
2
+ from rich import highlighter
3
+ from rich.theme import Theme
4
+ import re
5
+ import logging
6
+ import logging.handlers
7
+
8
+ class Colors:
9
+ S = "\033["
10
+ D = ";"
11
+ E = "m"
12
+ # https://pkg.go.dev/github.com/whitedevops/colors
13
+ ResetAll = 0
14
+
15
+ Bold = 1
16
+ Dim = 2
17
+ Underlined = 4
18
+ Blink = 5
19
+ Reverse = 7
20
+ Hidden = 8
21
+
22
+ ResetBold = 21
23
+ ResetDim = 22
24
+ ResetUnderlined = 24
25
+ ResetBlink = 25
26
+ ResetReverse = 27
27
+ ResetHidden = 28
28
+
29
+ Default = 39
30
+ Black = 30
31
+ Red = 31
32
+ Green = 32
33
+ Yellow = 33
34
+ Blue = 34
35
+ Magenta = 35
36
+ Cyan = 36
37
+ LightGray = 37
38
+ DarkGray = 90
39
+ LightRed = 91
40
+ LightGreen = 92
41
+ LightYellow = 93
42
+ LightBlue = 94
43
+ LightMagenta = 95
44
+ LightCyan = 96
45
+ White = 97
46
+
47
+ BackgroundDefault = 49
48
+ BackgroundBlack = 40
49
+ BackgroundRed = 41
50
+ BackgroundGreen = 42
51
+ BackgroundYellow = 43
52
+ BackgroundBlue = 44
53
+ BackgroundMagenta = 45
54
+ BackgroundCyan = 46
55
+ BackgroundLightGray = 47
56
+ BackgroundDarkGray = 100
57
+ BackgroundLightRed = 101
58
+ BackgroundLightGreen = 102
59
+ BackgroundLightYellow = 103
60
+ BackgroundLightBlue = 104
61
+ BackgroundLightMagenta = 105
62
+ BackgroundLightCyan = 106
63
+ BackgroundWhite = 107
64
+
65
+ _colorize_suffix = S + str(ResetAll) + E
66
+
67
+ product_word = re.compile(r"CMDBOX|IINFER|USOUND|GAIAN|GAIC|WITSHAPE", re.IGNORECASE)
68
+ success_word = re.compile(r"SUCCESS|OK|PASSED|DONE|COMPLETE|START|FINISH|OPEN|CONNECTED|ALLOW|EXEC", re.IGNORECASE)
69
+ warning_word = re.compile(r"WARNING|WARN|CAUTION|NOTICE|STOP|DISCONNECTED|DENY", re.IGNORECASE)
70
+ error_word = re.compile(r"ERROR|ALERT|CRITICAL|FATAL|ABORT|FAILED", re.IGNORECASE)
71
+
72
+ def colorize(s:str, *colors:int) -> str:
73
+ return Colors.S + Colors.D.join(map(str, [Colors.ResetAll]+list(colors))) + Colors.E + s + Colors._colorize_suffix
74
+
75
+ def colorize_msg(msg) -> str:
76
+ msg = Colors.success_word.sub(colorize(r"\g<0>", Colors.Green), msg)
77
+ msg = Colors.warning_word.sub(colorize(r"\g<0>", Colors.Yellow), msg)
78
+ msg = Colors.error_word.sub(colorize(r"\g<0>", Colors.Red), msg)
79
+ msg = Colors.product_word.sub(colorize(r"\g<0>", Colors.LightBlue), msg)
80
+ return msg
81
+
82
+ level_mapping = {
83
+ logging.DEBUG: f"{colorize('DEBUG', Colors.Bold, Colors.Cyan)}",
84
+ logging.INFO: f"{colorize('INFO', Colors.Bold, Colors.Green)} ",
85
+ logging.WARNING: f"{colorize('WARN', Colors.Bold, Colors.Yellow)} ",
86
+ logging.ERROR: f"{colorize('ERROR', Colors.Bold, Colors.Red)}",
87
+ logging.CRITICAL:f"{colorize('FATAL', Colors.Bold, Colors.LightGray, Colors.BackgroundRed)}"}
88
+
89
+ level_mapping_nc = {
90
+ logging.DEBUG: f"DEBUG",
91
+ logging.INFO: f"INFO ",
92
+ logging.WARNING: f"WARN ",
93
+ logging.ERROR: f"ERROR",
94
+ logging.CRITICAL:f"FATAL"}
95
+
96
+ theme=Theme({
97
+ "repr.log_debug": "bold cyan",
98
+ "repr.log_info": "bold green",
99
+ "repr.log_warn": "bold Yellow",
100
+ "repr.log_error": "bold red",
101
+ "repr.log_fatal": "bold red reverse",
102
+ "repr.log_product": "dodger_blue2 reverse",
103
+ "repr.log_success": "green",})
104
+
105
+ class LogLevelHighlighter(highlighter.ReprHighlighter):
106
+ def __init__(self):
107
+ #self.highlights = []
108
+ self.highlights.append(r"(?P<log_debug>DEBUG)")
109
+ self.highlights.append(r"(?P<log_info>INFO)")
110
+ self.highlights.append(r"(?P<log_warn>WARN|WARNING|WARN|CAUTION|NOTICE|STOP|DISCONNECTED|DENY)")
111
+ self.highlights.append(r"(?P<log_error>ERROR|ALERT|ABORT|FAILED)")
112
+ self.highlights.append(r"(?P<log_fatal>FATAL|CRITICAL)")
113
+ self.highlights.append(r"(?P<log_product>CMDBOX|IINFER|USOUND|GAIAN|GAIC|WITSHAPE)")
114
+ self.highlights.append(r"(?P<log_success>SUCCESS|OK|PASSED|DONE|COMPLETE|START|FINISH|OPEN|CONNECTED|ALLOW|EXEC)")
115
+ """
116
+ self.highlights.append(r"(?P<tag_start><)(?P<tag_name>[-\w.:|]*)(?P<tag_contents>[\w\W]*)(?P<tag_end>>)")
117
+ self.highlights.append(r'(?P<attrib_name>[\w_]{1,50})=(?P<attrib_value>"?[\w_]+"?)?')
118
+ self.highlights.append(r"(?P<brace>[][{}()])")
119
+ self.highlights.append(highlighter._combine_regex(
120
+ r"(?P<ipv4>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})",
121
+ r"(?P<ipv6>([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})",
122
+ r"(?P<eui64>(?:[0-9A-Fa-f]{1,2}-){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){3}[0-9A-Fa-f]{4})",
123
+ r"(?P<eui48>(?:[0-9A-Fa-f]{1,2}-){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})",
124
+ r"(?P<uuid>[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})",
125
+ r"(?P<call>[\w.]*?)\(",
126
+ r"\b(?P<bool_true>True)\b|\b(?P<bool_false>False)\b|\b(?P<none>None)\b",
127
+ r"(?P<ellipsis>\.\.\.)",
128
+ r"(?P<number_complex>(?<!\w)(?:\-?[0-9]+\.?[0-9]*(?:e[-+]?\d+?)?)(?:[-+](?:[0-9]+\.?[0-9]*(?:e[-+]?\d+)?))?j)",
129
+ r"(?P<number>(?<!\w)\-?[0-9]+\.?[0-9]*(e[-+]?\d+?)?\b|0x[0-9a-fA-F]*)",
130
+ r"(?P<path>\B(/[-\w._+]+)*\/)(?P<filename>[-\w._+]*)?",
131
+ r"(?<![\\\w])(?P<str>b?'''.*?(?<!\\)'''|b?'.*?(?<!\\)'|b?\"\"\".*?(?<!\\)\"\"\"|b?\".*?(?<!\\)\")",
132
+ r"(?P<url>(file|https|http|ws|wss)://[-0-9a-zA-Z$_+!`(),.?/;:&=%#~@]*)",
133
+ ))
134
+ """
135
+ self.highlights = [re.compile(h, re.IGNORECASE) for h in self.highlights]
136
+
137
+ class ColorfulStreamHandler(logging.StreamHandler):
138
+ console = Console(soft_wrap=True, height=True, highlighter=LogLevelHighlighter(), theme=theme)
139
+
140
+ def emit(self, record: logging.LogRecord) -> None:
141
+ #record.levelname = level_mapping[record.levelno]
142
+ #record.asctime = colorize(record.asctime, Colors.Bold)
143
+ #record.msg = colorize_msg(record.msg)
144
+ #super().emit(record)
145
+ record.levelname = level_mapping_nc[record.levelno]
146
+ record.msg = self.format(record)
147
+ self.console.print(record.msg)
148
+
149
+ class TimedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
150
+ def emit(self, record: logging.LogRecord) -> None:
151
+ record.levelname = level_mapping_nc[record.levelno]
152
+ super().emit(record)
153
+
@@ -30,7 +30,8 @@ class AgentBase(feature.ResultEdgeFeature):
30
30
  dict(opt="agent", type=Options.T_STR, default="no", required=False, multi=False, hide=False, choice=["no", "use"],
31
31
  discription_ja="エージェントを使用するかどうかを指定します。",
32
32
  discription_en="Specifies whether the agent is used.",
33
- choice_show=dict(use=["agent_name", "agent_description", "agent_instruction", "agent_session_store", "llmprov"],)),
33
+ choice_show=dict(use=["agent_name", "agent_description", "agent_instruction", "agent_session_store", "llmprov",
34
+ "mcp_listen_port", "mcp_ssl_listen_port"],)),
34
35
  dict(opt="agent_name", type=Options.T_STR, default=self.ver.__appid__, required=False, multi=False, hide=False, choice=None,
35
36
  discription_ja="エージェント名を指定します。",
36
37
  discription_en="Specifies the agent name."),
@@ -43,26 +44,26 @@ class AgentBase(feature.ResultEdgeFeature):
43
44
  dict(opt="agent_session_store", type=Options.T_STR, default=None, required=False, multi=False, hide=False, choice=['memory', 'sqlite', 'postgresql'],
44
45
  discription_ja="エージェントのセッションを保存する方法を指定します。",
45
46
  discription_en="Specify how the agent's session is to be saved.",
46
- choice_show=dict(postgresql=["pg_host", "pg_port", "pg_user", "pg_password", "pg_dbname"]),),
47
+ choice_show=dict(postgresql=["agent_pg_host", "agent_pg_port", "agent_pg_user", "agent_pg_password", "agent_pg_dbname"]),),
47
48
  dict(opt="mcp_listen_port", type=Options.T_INT, default="9081", required=False, multi=False, hide=False, choice=None,
48
49
  discription_ja="省略した時は `9081` を使用します。",
49
50
  discription_en="If omitted, `9081` is used."),
50
51
  dict(opt="mcp_ssl_listen_port", type=Options.T_INT, default="9443", required=False, multi=False, hide=False, choice=None,
51
52
  discription_ja="省略した時は `9443` を使用します。",
52
53
  discription_en="If omitted, `9443` is used."),
53
- dict(opt="pg_host", type=Options.T_STR, default='localhost', required=False, multi=False, hide=True, choice=None, web="mask",
54
+ dict(opt="agent_pg_host", type=Options.T_STR, default='localhost', required=False, multi=False, hide=False, choice=None, web="mask",
54
55
  discription_ja="postgresqlホストを指定する。",
55
56
  discription_en="Specify the postgresql host."),
56
- dict(opt="pg_port", type=Options.T_INT, default=5432, required=False, multi=False, hide=True, choice=None, web="mask",
57
+ dict(opt="agent_pg_port", type=Options.T_INT, default=5432, required=False, multi=False, hide=False, choice=None, web="mask",
57
58
  discription_ja="postgresqlのポートを指定する。",
58
59
  discription_en="Specify the postgresql port."),
59
- dict(opt="pg_user", type=Options.T_STR, default='postgres', required=False, multi=False, hide=True, choice=None, web="mask",
60
+ dict(opt="agent_pg_user", type=Options.T_STR, default='postgres', required=False, multi=False, hide=False, choice=None, web="mask",
60
61
  discription_ja="postgresqlのユーザー名を指定する。",
61
62
  discription_en="Specify the postgresql user name."),
62
- dict(opt="pg_password", type=Options.T_STR, default='postgres', required=False, multi=False, hide=True, choice=None, web="mask",
63
+ dict(opt="agent_pg_password", type=Options.T_STR, default='postgres', required=False, multi=False, hide=False, choice=None, web="mask",
63
64
  discription_ja="postgresqlのパスワードを指定する。",
64
65
  discription_en="Specify the postgresql password."),
65
- dict(opt="pg_dbname", type=Options.T_STR, default='agent', required=False, multi=False, hide=True, choice=None,
66
+ dict(opt="agent_pg_dbname", type=Options.T_STR, default='agent', required=False, multi=False, hide=False, choice=None,
66
67
  discription_ja="postgresqlデータベース名を指定します。",
67
68
  discription_en="Specify the postgresql database name."),
68
69
  dict(opt="llmprov", type=Options.T_STR, default=None, required=False, multi=False, hide=False,
@@ -306,9 +307,10 @@ class AgentBase(feature.ResultEdgeFeature):
306
307
  agent = Agent(
307
308
  name=args.agent_name,
308
309
  model=LiteLlm(
309
- model=args.llmmodel,
310
- endpoint=args.llmendpoint,
310
+ model=f"ollama/{args.llmmodel}",
311
+ api_base=args.llmendpoint,
311
312
  temperature=args.llmtemperature,
313
+ stream=True
312
314
  ),
313
315
  description=description,
314
316
  instruction=instruction,
@@ -84,12 +84,18 @@ class AuditBase(feature.ResultEdgeFeature):
84
84
  Any: データベース接続オブジェクト
85
85
  """
86
86
  if pg_enabled:
87
+ if logger.level == logging.DEBUG:
88
+ logger.debug(f"Initializing database with pg_enabled={pg_enabled}, pg_host={pg_host}, pg_port={pg_port}, pg_user={pg_user}, pg_dbname={pg_dbname}")
87
89
  constr = f"host={pg_host} port={pg_port} user={pg_user} password={pg_password} dbname={pg_dbname} connect_timeout=60"
88
90
  conn = psycopg.connect(constr, autocommit=False)
89
91
  cursor = conn.cursor()
90
92
  try:
91
93
  cursor.execute("SELECT count(*) FROM information_schema.tables WHERE table_name='audit'")
92
- if cursor.fetchone()[0] == 0:
94
+ row = cursor.fetchone()
95
+ if logger.level == logging.DEBUG:
96
+ logger.debug(f"SQL query: SELECT count(*) FROM information_schema.tables WHERE table_name='audit'")
97
+ logger.debug(f"SQL row : {row}")
98
+ if row[0] == 0:
93
99
  # テーブルが存在しない場合は作成
94
100
  cursor.execute('''
95
101
  CREATE TABLE IF NOT EXISTS audit (
@@ -107,16 +113,22 @@ class AuditBase(feature.ResultEdgeFeature):
107
113
  )
108
114
  ''')
109
115
  finally:
116
+ conn.commit()
110
117
  cursor.close()
111
- conn.rollback()
112
118
  else:
113
119
  db_path = data_dir / '.audit' / 'audit.db'
120
+ if logger.level == logging.DEBUG:
121
+ logger.debug(f"Initializing database with db_path={db_path}")
114
122
  db_path.parent.mkdir(parents=True, exist_ok=True)
115
123
  conn = sqlite3.connect(db_path)
116
124
  cursor = conn.cursor()
117
125
  try:
118
- cursor.execute('SELECT COUNT(*) FROM sqlite_master WHERE TYPE="table" AND NAME="audit"')
119
- if cursor.fetchone()[0] == 0:
126
+ cursor.execute("SELECT COUNT(*) FROM sqlite_master WHERE TYPE='table' AND NAME='audit'")
127
+ row = cursor.fetchone()
128
+ if logger.level == logging.DEBUG:
129
+ logger.debug(f"SQL query: SELECT COUNT(*) FROM sqlite_master WHERE TYPE='table' AND NAME='audit'")
130
+ logger.debug(f"SQL row : {row}")
131
+ if row[0] == 0:
120
132
  # テーブルが存在しない場合は作成
121
133
  cursor.execute('''
122
134
  CREATE TABLE IF NOT EXISTS audit (
@@ -167,11 +167,12 @@ class WebStart(feature.UnsupportEdgeFeature, agent_base.AgentBase):
167
167
  assets=args.assets, signin_html=args.signin_html, signin_file=args.signin_file, gui_mode=args.gui_mode)
168
168
  agent_runner = None
169
169
  mcp = None
170
+ logger.info(f"Agent={args.agent}")
170
171
  if args.agent=='use':
171
172
  if args.agent_session_store == 'sqlite':
172
- args.agent_session_dburl = "sqlite:" + pathname2url(str(w.agent_path / 'session.db'))
173
+ args.agent_session_dburl = "sqlite://" + pathname2url(str(w.agent_path / 'session.db'))
173
174
  elif args.agent_session_store == 'postgresql':
174
- args.agent_session_dburl = f"postgresql+psycopg://{args.pg_user}:{args.pg_password}@{args.pg_host}:{args.pg_port}/{args.pg_dbname}"
175
+ args.agent_session_dburl = f"postgresql+psycopg://{args.agent_pg_user}:{args.agent_pg_password}@{args.agent_pg_host}:{args.agent_pg_port}/{args.agent_pg_dbname}"
175
176
  else:
176
177
  args.agent_session_dburl = None
177
178
  agent_runner, mcp = self.init_agent_runner(logger, args)
@@ -13,6 +13,7 @@ from typing import Dict, Any, Tuple, List, Union
13
13
  import locale
14
14
  import logging
15
15
  import json
16
+ import re
16
17
  import time
17
18
  import traceback
18
19
 
@@ -160,6 +161,15 @@ class Agent(feature.WebFeature):
160
161
  agent_session = await web.create_agent_session(web.agent_runner.session_service, user_id, session_id=session_id)
161
162
  startmsg = "こんにちは!何かお手伝いできることはありますか?" if is_japan else "Hello! Is there anything I can help you with?"
162
163
  yield json.dumps(dict(message=startmsg), default=common.default_json_enc)
164
+ def _replace_match(match_obj):
165
+ json_str = match_obj.group(0)
166
+ try:
167
+ data = json.loads(json_str) # ユニコード文字列をエンコード
168
+ return json.dumps(data, ensure_ascii=False, default=common.default_json_enc)
169
+ except json.JSONDecodeError:
170
+ return json_str
171
+ json_pattern = re.compile(r'\{.*?\}')
172
+
163
173
  from google.genai import types
164
174
  while True:
165
175
  outputs = None
@@ -205,6 +215,8 @@ class Agent(feature.WebFeature):
205
215
  elif event.actions and event.actions.escalate:
206
216
  msg = f"Agent escalated: {event.error_message or 'No specific message.'}"
207
217
  if msg:
218
+ msg = json_pattern.sub(_replace_match, msg)
219
+
208
220
  outputs['message'] = msg
209
221
  web.options.audit_exec(sock, web, body=dict(agent_session=agent_session.id, result=msg))
210
222
  yield json.dumps(outputs, default=common.default_json_enc)
@@ -13,9 +13,9 @@ class DoSignout(feature.WebFeature):
13
13
  web (Web): Webオブジェクト
14
14
  app (FastAPI): FastAPIオブジェクト
15
15
  """
16
- @app.get('/dosignout/{next}', response_class=HTMLResponse)
17
- @app.post('/dosignout/{next}', response_class=HTMLResponse)
18
- async def do_signout(next, req:Request, res:Response):
16
+ @app.api_route('/dosignout/{next}', methods=['GET', 'POST'], response_class=HTMLResponse)
17
+ @app.api_route('/{full_path:path}/dosignout/{next}/', methods=['GET', 'POST'], response_class=HTMLResponse)
18
+ async def do_signout(next, req:Request, res:Response, full_path:str=None):
19
19
  if 'signin' in req.session:
20
20
  web.options.audit_exec(req, res, web, body=dict(msg='Signout.'), audit_type='auth')
21
21
  for key in list(req.session.keys()).copy():
@@ -182,7 +182,7 @@ class ExecCmd(cmdbox_web_load_cmd.LoadCmd):
182
182
  console = common.create_console(file=old_stdout)
183
183
 
184
184
  try:
185
- console.log(f'EXEC: {opt_list}\n'[:logsize])
185
+ console.log(f'EXEC - {opt_list}\n'[:logsize])
186
186
  status, ret_main, obj = cmdbox_app.main(args_list=[common.chopdq(o) for o in opt_list], file_dict=file_dict, webcall=True)
187
187
  if isinstance(obj, server.Server):
188
188
  cmdbox_app.sv = obj
@@ -209,11 +209,11 @@ class ExecCmd(cmdbox_web_load_cmd.LoadCmd):
209
209
  output = [dict(warn=f'The captured stdout was discarded because its size was larger than {capture_maxsize} bytes.')]
210
210
  else:
211
211
  output = [dict(warn='capture_stdout is off.')]
212
- console.log(f'EXEC: {output}'[:logsize])
212
+ old_stdout.write(f'EXEC OUTPUT => {output}'[:logsize]) # コマンド実行時のアウトプットはカラーリングしない
213
213
  except Exception as e:
214
214
  web.logger.disabled = False # ログ出力を有効にする
215
215
  msg = f'exec_cmd error. {traceback.format_exc()}'
216
- console.log(f'EXEC: {msg}'[:logsize])
216
+ console.log(f'EXEC - {msg}'[:logsize])
217
217
  web.logger.warning(msg)
218
218
  output = [dict(warn=f'<pre>{html.escape(traceback.format_exc())}</pre>')]
219
219
  sys.stdout = old_stdout
@@ -24,7 +24,8 @@ class Signin(feature.WebFeature):
24
24
  web.signin_html_data = f.read()
25
25
 
26
26
  @app.api_route('/signin/{next}', methods=['GET', 'POST'], response_class=HTMLResponse)
27
- async def _signin(next:str, req:Request, res:Response):
27
+ @app.api_route('/{full_path:path}/signin/{next}', methods=['GET', 'POST'], response_class=HTMLResponse)
28
+ async def _signin(next:str, req:Request, res:Response, full_path:str=None):
28
29
  signin.Signin._enable_cors(req, res)
29
30
  res.headers['Access-Control-Allow-Origin'] = '*'
30
31
  return web.signin_html_data
@@ -632,6 +632,11 @@ class Options:
632
632
  if 'enabled' not in yml['audit']:
633
633
  raise Exception('features.yml is invalid. (The audit element must have "enabled" specified.)')
634
634
  if not yml['audit']['enabled']: return
635
+ # フューチャーのoptions
636
+ if 'options' not in yml['audit']:
637
+ raise Exception('features.yml is invalid. (The audit element must have "options" specified.)')
638
+ self.audit_write_args = yml['audit']['options'].copy()
639
+ self.audit_search_args = yml['audit']['options'].copy()
635
640
  # writeフューチャー
636
641
  if 'write' not in yml['audit']:
637
642
  raise Exception('features.yml is invalid. (The audit element must have "write" specified.)')
@@ -642,6 +647,8 @@ class Options:
642
647
  raise Exception('features.yml is invalid. (The audit.write element must have "cmd" specified.)')
643
648
  cmd = yml['audit']['write']['cmd']
644
649
  self.audit_write:feature.Feature = self.get_cmd_attr(mode, cmd, 'feature')
650
+ self.audit_write_args['mode'] = mode
651
+ self.audit_write_args['cmd'] = cmd
645
652
  # searchフューチャー
646
653
  if 'search' not in yml['audit']:
647
654
  raise Exception('features.yml is invalid. (The audit element must have "search" specified.)')
@@ -652,13 +659,6 @@ class Options:
652
659
  raise Exception('features.yml is invalid. (The audit.search element must have "cmd" specified.)')
653
660
  cmd = yml['audit']['search']['cmd']
654
661
  self.audit_search:feature.Feature = self.get_cmd_attr(mode, cmd, 'feature')
655
- # フューチャーのoptions
656
- if 'options' not in yml['audit']:
657
- raise Exception('features.yml is invalid. (The audit element must have "options" specified.)')
658
- self.audit_write_args = yml['audit']['options'].copy()
659
- self.audit_write_args['mode'] = mode
660
- self.audit_write_args['cmd'] = cmd
661
- self.audit_search_args = yml['audit']['options'].copy()
662
662
  self.audit_search_args['mode'] = mode
663
663
  self.audit_search_args['cmd'] = cmd
664
664
  self.audit_loaded = True
@@ -900,19 +900,16 @@ class ThreadedUvicorn:
900
900
  self.logger = logger
901
901
  self.guvicorn_config = guvicorn_config
902
902
  self.force_uvicorn = True if platform.system() == "Windows" else force_uvicorn
903
- stderr_handler = common.create_log_handler(stderr=True)
904
- stdout_handler = common.create_log_handler(stderr=False)
903
+ # loggerの設定
904
+ common.reset_logger("uvicorn")
905
+ common.reset_logger("uvicorn.error")
906
+ common.reset_logger("uvicorn.access")
907
+ #common.reset_logger("gunicorn.error")
908
+ #common.reset_logger("gunicorn.access")
905
909
  if self.force_uvicorn:
906
- # loggerの設定
907
- common.reset_logger("uvicorn")
908
- common.reset_logger("uvicorn.error")
909
- common.reset_logger("uvicorn.access")
910
910
  self.server = uvicorn.Server(config)
911
911
  self.thread = RaiseThread(daemon=True, target=self.server.run)
912
912
  else:
913
- # loggerの設定
914
- common.reset_logger("gunicorn.error")
915
- common.reset_logger("gunicorn.access")
916
913
 
917
914
  from gunicorn.app.wsgiapp import WSGIApplication
918
915
  class App(WSGIApplication):
@@ -46,6 +46,24 @@ aliases: # Specify the alias for the specified co
46
46
  # e.g. /{1}_exec
47
47
  move: # Specify whether to move the regular expression group of the source to the target.
48
48
  # e.g. true
49
+ agentrule: # Specifies a list of rules that determine which commands the agent can execute.
50
+ policy: deny # Specify the default policy for the rule. The value can be allow or deny.
51
+ rules: # Specify the rules for the commands that the agent can execute according to the group to which the user belongs.
52
+ - mode: audit # Specify the "mode" as the condition for applying the rule.
53
+ cmds: [search, write] # Specify the "cmd" to which the rule applies. Multiple items can be specified in a list.
54
+ rule: allow # Specifies whether the specified command is allowed or not. Values are allow or deny.
55
+ - mode: client
56
+ cmds: [file_copy, file_download, file_list, file_mkdir, file_move, file_remove, file_rmdir, file_upload, server_info]
57
+ rule: allow
58
+ - mode: cmd
59
+ cmds: [list, load]
60
+ rule: allow
61
+ - mode: server
62
+ cmds: [list]
63
+ rule: allow
64
+ - mode: web
65
+ cmds: [gencert, genpass, group_list, user_list]
66
+ rule: allow
49
67
  audit:
50
68
  enabled: true # Specify whether to enable the audit function.
51
69
  write:
@@ -2,7 +2,11 @@ version: 1
2
2
 
3
3
  formatters:
4
4
  fmt:
5
- format: '%(levelname)s[%(asctime)s] - %(message)s'
5
+ format: '[%(asctime)s] %(levelname)s - %(message)s'
6
+ datefmt: '%Y-%m-%d %H:%M:%S'
7
+ class: logging.Formatter
8
+ fmt_rich:
9
+ format: '%(message)s'
6
10
  class: logging.Formatter
7
11
  handlers:
8
12
  std:
@@ -10,6 +14,14 @@ handlers:
10
14
  level: INFO
11
15
  formatter: fmt
12
16
  stream: ext://sys.stdout
17
+ rich:
18
+ class: rich.logging.RichHandler
19
+ level: INFO
20
+ formatter: fmt_rich
21
+ show_path: false
22
+ omit_repeated_times: false
23
+ tracebacks_word_wrap: false
24
+ log_time_format: '[%Y-%m-%d %H:%M]'
13
25
  sample:
14
26
  class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
15
27
  level: INFO
@@ -24,6 +36,7 @@ loggers:
24
36
  handlers: [sample, std]
25
37
  level: INFO
26
38
  qualname: sample
39
+ propagate: false
27
40
 
28
41
  #root:
29
42
  # handlers: [sample, std]
@@ -74,7 +74,8 @@ pathrule: # List of RESTAPI rules, rules that determine whe
74
74
  - groups: [user]
75
75
  paths: [/signin, /assets, /bbforce_cmd, /copyright, /dosignin, /dosignout, /password/change,
76
76
  /gui/user_data/load, /gui/user_data/save, /gui/user_data/delete,
77
- /exec_cmd, /exec_pipe, /filer, /gui, /get_server_opt, /usesignout, /versions_cmdbox, /versions_used]
77
+ /agent, /mcp,
78
+ /exec_cmd, /exec_pipe, /filer, /result, /gui, /get_server_opt, /usesignout, /versions_cmdbox, /versions_used]
78
79
  rule: allow
79
80
  - groups: [readonly]
80
81
  paths: [/gui/del_cmd, /gui/del_pipe, /gui/save_cmd, /gui/save_pipe]
@@ -2,13 +2,19 @@ version: 1
2
2
 
3
3
  formatters:
4
4
  fmt:
5
- format: '%(levelname)s[%(asctime)s] - %(message)s'
5
+ format: '[%(asctime)s] %(levelname)s - %(message)s'
6
+ datefmt: '%Y-%m-%d %H:%M:%S'
6
7
  class: logging.Formatter
7
8
  fmt_rich:
8
9
  format: '%(message)s'
9
10
  class: logging.Formatter
10
11
  handlers:
11
12
  std:
13
+ class: cmdbox.app.commons.loghandler.ColorfulStreamHandler
14
+ level: INFO
15
+ formatter: fmt
16
+ stream: ext://sys.stdout
17
+ rich:
12
18
  class: rich.logging.RichHandler
13
19
  level: INFO
14
20
  formatter: fmt_rich
@@ -16,9 +22,8 @@ handlers:
16
22
  omit_repeated_times: false
17
23
  tracebacks_word_wrap: false
18
24
  log_time_format: '[%Y-%m-%d %H:%M]'
19
- #stream: ext://sys.stdout
20
25
  audit:
21
- class: logging.handlers.TimedRotatingFileHandler
26
+ class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
22
27
  level: INFO
23
28
  formatter: fmt
24
29
  backupCount: 5
@@ -28,7 +33,7 @@ handlers:
28
33
 
29
34
  loggers:
30
35
  audit:
31
- handlers: [audit]
36
+ handlers: [audit, std]
32
37
  level: INFO
33
38
  qualname: audit
34
39
  propagate: false
@@ -2,13 +2,19 @@ version: 1
2
2
 
3
3
  formatters:
4
4
  fmt:
5
- format: '%(levelname)s[%(asctime)s] - %(message)s'
5
+ format: '[%(asctime)s] %(levelname)s - %(message)s'
6
+ datefmt: '%Y-%m-%d %H:%M:%S'
6
7
  class: logging.Formatter
7
8
  fmt_rich:
8
9
  format: '%(message)s'
9
10
  class: logging.Formatter
10
11
  handlers:
11
12
  std:
13
+ class: cmdbox.app.commons.loghandler.ColorfulStreamHandler
14
+ level: INFO
15
+ formatter: fmt
16
+ stream: ext://sys.stdout
17
+ rich:
12
18
  class: rich.logging.RichHandler
13
19
  level: INFO
14
20
  formatter: fmt_rich
@@ -16,9 +22,8 @@ handlers:
16
22
  omit_repeated_times: false
17
23
  tracebacks_word_wrap: false
18
24
  log_time_format: '[%Y-%m-%d %H:%M]'
19
- #stream: ext://sys.stdout
20
25
  client:
21
- class: logging.handlers.TimedRotatingFileHandler
26
+ class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
22
27
  level: INFO
23
28
  formatter: fmt
24
29
  backupCount: 5
@@ -28,7 +33,7 @@ handlers:
28
33
 
29
34
  loggers:
30
35
  client:
31
- handlers: [client]
36
+ handlers: [client, std]
32
37
  level: INFO
33
38
  qualname: client
34
39
  propagate: false