cmdbox 0.8.4.2__tar.gz → 0.8.4.4__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.
- {cmdbox-0.8.4.2/cmdbox.egg-info → cmdbox-0.8.4.4}/PKG-INFO +3 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/redis_client.py +3 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/__init__.py +30 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/dangerous_sequence.py +75 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/detection_malicious_keyword.py +72 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/detection_sql_injection.py +74 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/detection_template_injection.py +76 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/javascript_injection.py +93 -0
- cmdbox-0.8.4.4/cmdbox/app/features/cli/agent/prompt_injection_common.py +25 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_chat.py +35 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_audit_delete.py +4 -4
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_audit_search.py +5 -5
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_audit_write.py +6 -6
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_upload.py +6 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_initdata_install.py +12 -9
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_apikey_add.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_apikey_del.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_group_add.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_group_del.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_group_edit.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_group_list.py +27 -2
- cmdbox-0.8.4.4/cmdbox/app/features/cli/cmdbox_web_session_list.py +121 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_stop.py +1 -1
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_user_add.py +30 -4
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_user_del.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_user_edit.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_user_list.py +27 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_agent.py +17 -16
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_audit.py +19 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_exec_cmd.py +4 -1
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/filer.py +5 -4
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/options.py +5 -1
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/web.py +51 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/features.yml +8 -6
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/version.py +2 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_chat.js +150 -103
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/common.js +68 -0
- cmdbox-0.8.4.4/cmdbox/web/assets/status/main.js +29 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/status/status.css +5 -2
- cmdbox-0.8.4.2/cmdbox/web/assets/status/main.js → cmdbox-0.8.4.4/cmdbox/web/assets/status/status.js +62 -27
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/status.html +46 -12
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4/cmdbox.egg-info}/PKG-INFO +3 -2
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox.egg-info/SOURCES.txt +8 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox.egg-info/requires.txt +2 -1
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/pyproject.toml +2 -1
- cmdbox-0.8.4.2/cmdbox/extensions/sample_project/sample/app/features/web/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/LICENSE +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/MANIFEST.in +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/README.md +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/__main__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/a2a.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/app.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/azure_signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/azure_signin_proxy.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/azure_signin_saml.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/github_signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/google_signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/auth/signin_saml.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/client.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/common.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/cache.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/convert.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/limiter.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/loghandler.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/module.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/resdata.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/testable.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/commons/validator.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/edge.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/edge_tool.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/feature.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/_cmdbox_vision_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/_cmdbox_vision_predict.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/_cmdbox_vision_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/agent/agant_base.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/app/features/cli/agent → cmdbox-0.8.4.4/cmdbox/app/features/cli/audit}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/audit/audit_base.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox/cmdbox_base.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_a2asv_reload.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_a2asv_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_a2asv_stop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_agent_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_agent_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_agent_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_agent_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcp_client.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcp_proxy.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcpsv_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcpsv_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcpsv_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_mcpsv_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_runner_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_runner_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_runner_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_runner_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_session_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_agent_session_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_audit_createdb.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_copy.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_download.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_is.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_move.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_remove.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_http.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_server_info.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_client_time.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmd_check.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmd_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmd_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_down.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_exec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_info.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_logs.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_pgsql_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_pgsql_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_reboot.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_redis_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_redis_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_server_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_server_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_setup.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_uninstall.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_cmdbox_up.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_data_delete.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_data_insert.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_data_select.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_data_update.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_idx_create.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_idx_drop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_tbl_create.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_datasource_tbl_drop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_edge_config.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_edge_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_excel_cell_details.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_excel_cell_search.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_excel_cell_values.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_excel_sheet_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_chunklet.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_pdfplumber.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_extract_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_gui_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_gui_stop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_billing_calc.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_billing_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_counter.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_evidences.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_plan_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_plan_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_plan_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_plan_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_limiter_targets.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_chat.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_embed.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_llm_translation.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_mcpsv_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_mcpsv_stop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_omni_pred.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_build.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_regist.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_save.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_rag_search.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_server_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_server_start.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_server_stop.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_server_time.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_skill_create.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_skill_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_skill_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_skill_uninstall.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_test_gen_cli_docs.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_test_gen_cli_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_test_gen_test_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_test_run_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_tts_install.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_tts_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_tts_say.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_tts_uninstall.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_url_add.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_url_del.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_url_list.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_url_load.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_gencert.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_genpass.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/cmdbox_web_start.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/app/features/cli/audit → cmdbox-0.8.4.4/cmdbox/app/features/cli/datasource}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/datasource/datasource_base.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/app/features/cli/datasource → cmdbox-0.8.4.4/cmdbox/app/features/cli/excel}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/excel/excel_base.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/app/features/cli/excel → cmdbox-0.8.4.4/cmdbox/app/features/cli/rag}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/rag/rag_base.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/rag/rag_postgresql.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/rag/rag_sqlite.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/rag/rag_store.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/test/gen_cli_docs.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/test/gen_cli_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/test/gen_test_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/cli/test/run_spec.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_assets.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_audit_metrics.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_bbforce_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_copyright.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_del_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_del_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_do_signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_do_signout.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_exec_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_filer.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_filer_download.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_filer_upload.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_get_cmd_choices.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_get_cmds.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_get_modes.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_get_server_opt.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_gui.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_gui_callback.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_limiter.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_list_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_list_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_load_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_load_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_raw_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_raw_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_result.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_save_cmd.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_save_pipe.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_signin.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_status.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_url.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_user_data.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_users.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_usesignout.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/features/web/cmdbox_web_versions_cmdbox.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/mcp.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/app/server.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/autoload.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/cmdbox/Dockerfile +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/cmdbox/docker-compose.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/cmdbox/scripts/start.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/cmdbox/scripts/up.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/pgsql/Dockerfile +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/pgsql/scripts/down.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/pgsql/scripts/start.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/pgsql/scripts/up.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/redis/Dockerfile +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/redis/scripts/down.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/docker/redis/scripts/up.sh +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/cmdbox_initdata/client/.cmds/cmd-cmd_list.json +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/cmdbox_initdata/current/.cmdbox/user_list.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/cmdbox_initdata/server/.agent/translation.json +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/cmdbox_initdata/server/.datasource/datasource-ds_default.json +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/cmdbox_initdata/setup.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/.vscode/launch.json +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/requirements.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/__main__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/app/app.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/app/features/cli/rag → cmdbox-0.8.4.4/cmdbox/extensions/sample_project/sample/app/features/cli}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_client_time.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +0 -0
- {cmdbox-0.8.4.2/cmdbox/extensions/sample_project/sample/app/features/cli → cmdbox-0.8.4.4/cmdbox/extensions/sample_project/sample/app/features/web}/__init__.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/extensions/features.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/extensions/user_list.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/logconf_sample.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/version.py +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/web/assets/sample/favicon.ico +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/sample_project/sample/web/assets/sample/icon.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/extensions/user_list.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Authlib_1_7_2_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Jinja2_3_1_6_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Markdown_3_10_3_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_MarkupSafe_3_0_3_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Morfessor_2_0_6_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_PyJWT_2_13_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_PyYAML_6_0_3_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Pygments_2_21_0_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_SQLAlchemy_2_0_52_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_Sphinx_9_0_4_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_a2a-sdk_1_1_2_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiofile_3_12_3_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiohappyeyeballs_2_7_1_Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiohttp_3_14_3_Apache-2_0_AND_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiologic_0_17_1_ISC_License-ISCL.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiosignal_1_4_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_aiosqlite_0_22_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_alabaster_1_0_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_annotated-doc_0_0_5_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_annotated-types_0_8_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_anyio_4_14_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_argcomplete_3_7_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_async-timeout_5_0_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_asyncpg_0_31_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_attrs_26_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_babel_2_18_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_backports_tarfile_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_beartype_0_22_9_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_beautifulsoup4_4_15_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_boto3_1_43_78_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_botocore_1_43_78_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_build_1_5_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cachetools_7_1_7_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_caio_0_12_2_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_certifi_2026_7_22_Mozilla_Public_License_2_0-MPL_2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cffi_2_1_1_MIT-0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_charset-normalizer_3_5_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_chunklet-py_2_4_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_click_8_4_2_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cmdbox_0_8_3_3_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cobble_0_1_4_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_colorama_0_4_6_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cryptography_50_0_0_Apache-2_0_OR_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_culsans_0_11_0_ISC_License-ISCL.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_cyclopts_4_23_2_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_debugpy_1_8_21_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_defusedxml_0_7_1_Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_distro_1_9_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_dnspython_2_8_0_ISC_License-ISCL.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_docstring_parser_0_18_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_docutils_0_22_4_BSD_License-GNU_General_Public_License-GPL-Public_Domain.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_email-validator_2_3_0_The_Unlicense-Unlicense.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_et_xmlfile_2_0_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_exceptiongroup_1_3_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_fastapi_0_141_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_fastmcp-slim_3_4_7_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_fastmcp_3_4_7_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_fastuuid_0_14_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_filelock_3_32_3_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_frozenlist_1_8_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_fsspec_2026_7_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_ftfy_6_3_1_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_gevent_26_8_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_google-adk_2_7_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_google-api-core_2_34_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_google-auth_2_56_3_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_google-genai_2_19_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_googleapis-common-protos_1_75_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_graphviz_0_21_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_greenlet_3_5_5_MIT_AND_PSF-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_griffelib_2_2_0_ISC.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_gunicorn_26_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_h11_0_16_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_hf-xet_1_6_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_httpcore_1_0_9_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_httpx-sse_0_4_3_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_httpx_0_28_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_huggingface_hub_1_28_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_id_1_6_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_idna_3_19_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_imagesize_2_0_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_importlib_metadata_8_9_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_indic-nlp-library_0_92_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_iniconfig_2_3_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_installer_1_0_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_itsdangerous_2_2_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jaraco_classes_3_4_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jaraco_context_6_1_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jaraco_functools_4_6_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jiter_0_16_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jmespath_1_1_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_joserfc_1_7_4_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_json-rpc_1_15_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonpatch_1_33_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonpointer_3_1_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonref_1_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonschema-path_0_5_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonschema-specifications_2025_9_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_jsonschema_4_26_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_keyring_25_7_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langchain-classic_1_0_8_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langchain-community_0_4_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langchain-core_1_6_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langchain-protocol_0_0_18_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langchain-text-splitters_1_1_2_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_langsmith_0_11_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_litellm_1_98_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_loguru_0_7_3_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_lxml_6_1_2_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_mammoth_1_12_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_markdown-it-py_4_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_markdownify_1_2_3_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_mcp_1_29_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_mdurl_0_1_2_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_more-itertools_11_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_mpire_2_10_2_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_multidict_6_7_1_Apache_License_2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_nab-index_0_0_13_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_nab-python_0_0_13_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_nab-resolver_0_0_13_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_nh3_0_3_6_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_numpy_2_4_6_BSD-3-Clause_AND_0BSD_AND_MIT_AND_Zlib_AND_CC0-1_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_odfpy_1_4_1_Apache_Software_License-GNU_General_Public_License-GPL-GNU_Library_or_Lesser_General_Public_License-LGPL.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_openai_2_54_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_openapi-pydantic_0_5_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_openpyxl_3_1_5_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_opentelemetry-api_1_42_1_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_opentelemetry-sdk_1_42_1_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_opentelemetry-semantic-conventions_0_63b1_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_orjson_3_12_0_MPL-2_0_AND-Apache-2_0_OR_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_packaging_26_3_Apache-2_0_OR_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pandas_3_0_5_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pathable_0_6_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pdfminer_six_20260107_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pdfplumber_0_11_10_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pillow_12_3_0_MIT-CMU.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pip_24_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pipdeptree_4_2_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_platformdirs_4_11_3_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pluggy_1_6_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_plyer_2_1_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_prettytable_3_18_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_prompt_toolkit_3_0_53_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_propcache_0_5_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_proto-plus_1_28_3_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_protobuf_6_33_6_3-Clause_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_psycopg-binary_3_3_4_LGPL-3_0-only.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_psycopg-pool_3_3_1_LGPL-3_0-only.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_psycopg_3_3_4_LGPL-3_0-only.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_py-key-value-aio_0_4_5_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_py3langid_0_3_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pyasn1_0_6_4_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pyasn1_modules_0_4_2_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pycparser_3_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pycryptodome_3_23_0_BSD_License-Public_Domain.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pydantic-settings_2_15_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pydantic_2_13_4_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pydantic_core_2_46_4_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pylatexenc_2_10_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pypdfium2_5_13_0_BSD-3-Clause-Apache-2_0-dependency_licenses.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pyperclip_1_11_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pyproject_hooks_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pytest_9_1_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_python-dateutil_2_9_0_post0_Apache_Software_License-BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_python-docx_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_python-dotenv_1_2_3_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_python-multipart_0_0_32_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pywin32-ctypes_0_2_3_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_pywin32_312_Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_questionary_2_1_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_radicli_0_0_26_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_readme_renderer_45_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_redis_8_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_referencing_0_37_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_regex_2026_7_19_Apache-2_0_AND_CNRI-Python.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_requests-toolbelt_1_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_requests_2_34_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_retrie_0_3_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_rfc3986_2_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_rich-rst_2_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_rich_15_0_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_roman-numerals_4_1_0_0BSD_OR_CC0-1_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_rpds-py_2026_6_3_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_s3transfer_0_19_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sentencex_1_0_30_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_setuptools_65_5_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_shellingham_1_5_4_ISC_License-ISCL.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_six_1_17_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sniffio_1_3_1_Apache_Software_License-MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_snowballstemmer_3_1_1_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_soupsieve_2_9_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx-argparse_0_6_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx-intl_2_3_2_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx-last-updated-by-git_0_3_8_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx-sitemap_2_9_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx_fontawesome_0_0_6_GNU_General_Public_License_v2-GPLv2.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinx_rtd_theme_3_1_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-applehelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-devhelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-htmlhelp_2_1_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-jquery_4_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-jsmath_1_0_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-qthelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sphinxcontrib-serializinghtml_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sqlite-vec_0_1_9_MIT_License-Apache_License-Version_2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_sse-starlette_3_4_8_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_starlette_1_6_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_starsessions_2_2_1_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_striprtf_0_0_33_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tabulate2_1_10_2_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tabulate_0_10_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tenacity_9_1_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tiktoken_0_14_0_MIT_License-Copyright-c-2022_OpenAI-Shantanu_Jain-Permission_is_hereby_granted-free_of_charge-to_any_per.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tokenizers_0_23_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tomli_2_4_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tomli_w_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tqdm_4_70_0_MPL-2_0_AND_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_truststore_0_10_4_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_twine_7_0_0_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_typer_0_27_1_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_typing-inspection_0_4_4_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_typing_extensions_4_16_0_PSF-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tzdata_2026_3_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_tzlocal_5_4_4_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_uncalled-for_0_4_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_urllib3_2_7_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_uuid_utils_0_17_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_uvicorn_0_52_4_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_watchdog_6_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_watchfiles_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_wcwidth_0_8_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_websockets_15_0_1_BSD_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_wheel_0_48_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_win32_setctime_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_wrapt_2_3_0_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_wsproto_1_3_2_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_xxhash_4_0_1_BSD-2-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_yarl_1_24_5_Apache-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_yasbd-lib_0_15_1_MPL-2_0.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_zipp_4_1_0_MIT.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_zope_event_6_2_ZPL-2_1.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_zope_interface_8_6_ZPL-2_1.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/LICENSE_zstandard_0_25_0_BSD-3-Clause.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/licenses/files.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/logconf_cmdbox.yml +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/agent.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_chat_input.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_document.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_ext.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_files.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_files.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_history.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_logo.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_logo.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_logo.svg +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_navbar.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_agent.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_agent.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_datasource.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_datasource.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_embed.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_embed.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_extract.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_extract.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_llm.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_llm.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_mcpsv.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_mcpsv.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_rag.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_rag.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_runner.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_runner.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_skill.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_skill.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_settings_tts.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/agent_sidebar_content.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/agent/main.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/apexcharts/apexcharts.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/apexcharts/apexcharts.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/bootstrap/bootstrap.bundle.min.5.3.0.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/bootstrap/bootstrap.min.5.3.0.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/audit.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/color_mode.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/color_mode_ext.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/favicon.ico +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/filer_modal.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/icon.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/icon.svg +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/list_cmd.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/list_pipe.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/main.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/open_capture.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/open_output_json.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/result.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/signin.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/svgicon.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/users.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/view_raw.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/cmdbox/view_result.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/encodingjs/LICENSE.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/encodingjs/encoding.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/encodingjs/encoding.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/filer/filer.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/filer/main.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/filer/main.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/highlight/default.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/highlight/highlight.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/highlight/styles/tokyo-night-dark.min.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery/jquery.min.3.2.0.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-linedtextarea/README.md +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea-license.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-resizable/jquery-resizable.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/AUTHORS.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/LICENSE.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/jquery-ui.min.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/jquery-ui.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/jquery-ui.structure.min.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/jquery-ui.theme.min.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/jquery-ui/package.json +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/css/lightbox.min.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/images/close.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/images/loading.gif +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/images/next.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/images/prev.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/lightbox2/js/lightbox.min.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/limiter/limiter.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/limiter/limiter_plan.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/limiter/main.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/marked/marked.umd.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/split-pane/split-pane.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/split-pane/split-pane.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/tree-menu/css/tree-menu.css +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/tree-menu/image/file.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/tree-menu/image/folder-close.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/tree-menu/image/folder-open.png +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets/tree-menu/js/tree-menu.js +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/assets_license_list.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/audit.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/filer.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/gui.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/limiter.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/result.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/signin.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/users.html +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox/web/voicevox_license_list.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox.egg-info/dependency_links.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox.egg-info/entry_points.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/cmdbox.egg-info/top_level.txt +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/setup.cfg +0 -0
- {cmdbox-0.8.4.2 → cmdbox-0.8.4.4}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmdbox
|
|
3
|
-
Version: 0.8.4.
|
|
3
|
+
Version: 0.8.4.4
|
|
4
4
|
Summary: cmdbox: It is a command line application with a plugin mechanism.
|
|
5
5
|
Author-email: hamacom2004jp <hamacom2004jp@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -56,8 +56,9 @@ Requires-Dist: pydantic<3.0.0,>=2.0.0; extra == "agent-mcp"
|
|
|
56
56
|
Requires-Dist: fastmcp>=2.14.4; extra == "agent-mcp"
|
|
57
57
|
Requires-Dist: mcp<2.0.0,>=1.24.0; extra == "agent-mcp"
|
|
58
58
|
Provides-Extra: agent-adk
|
|
59
|
-
Requires-Dist: google-adk
|
|
59
|
+
Requires-Dist: google-adk<2.9,>=2.8; extra == "agent-adk"
|
|
60
60
|
Requires-Dist: a2a-sdk>=1.0.0; extra == "agent-adk"
|
|
61
|
+
Requires-Dist: culsans>=0.11.0; extra == "agent-adk"
|
|
61
62
|
Requires-Dist: litellm>=1.82.6; extra == "agent-adk"
|
|
62
63
|
Provides-Extra: agent-mem
|
|
63
64
|
Provides-Extra: rag
|
|
@@ -96,6 +96,9 @@ class RedisClient(object):
|
|
|
96
96
|
def keys(self, pattern:str):
|
|
97
97
|
return self.redis_cli.keys(pattern)
|
|
98
98
|
|
|
99
|
+
def get(self, name:str):
|
|
100
|
+
return self.redis_cli.get(name)
|
|
101
|
+
|
|
99
102
|
def check_server(self, find_svname:bool=False, retry_count:int=20, retry_interval:int=5, outstatus:bool=False):
|
|
100
103
|
"""
|
|
101
104
|
Redisサーバーにpingを送信し、応答があるか確認する
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
プロンプトインジェクション検知パッケージ
|
|
3
|
+
|
|
4
|
+
複数の検知プラグインとユーティリティクラスを提供します。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# 共通定義(常にインポート可能)
|
|
8
|
+
from .prompt_injection_common import PromptInjectionException
|
|
9
|
+
|
|
10
|
+
# プラグインクラス(google.adk が利用可能な環境でのみインポート)
|
|
11
|
+
try:
|
|
12
|
+
from .detection_sql_injection import SQLInjectionDetectionPlugin
|
|
13
|
+
from .javascript_injection import JavaScriptInjectionPlugin
|
|
14
|
+
from .detection_template_injection import TemplateInjectionDetectionPlugin
|
|
15
|
+
from .detection_malicious_keyword import MaliciousKeywordDetectionPlugin
|
|
16
|
+
from .dangerous_sequence import DangerousSequencePlugin
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
'PromptInjectionException',
|
|
20
|
+
'SQLInjectionDetectionPlugin',
|
|
21
|
+
'JavaScriptInjectionPlugin',
|
|
22
|
+
'TemplateInjectionDetectionPlugin',
|
|
23
|
+
'MaliciousKeywordDetectionPlugin',
|
|
24
|
+
'DangerousSequencePlugin',
|
|
25
|
+
]
|
|
26
|
+
except ImportError:
|
|
27
|
+
# google.adk が利用不可の場合は、共通定義のみをエクスポート
|
|
28
|
+
__all__ = [
|
|
29
|
+
'PromptInjectionException',
|
|
30
|
+
]
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""
|
|
2
|
+
危険な文字シーケンス検知プラグイン
|
|
3
|
+
|
|
4
|
+
SQL コメント、ヌルバイト、16進数エスケープなどの危険な文字パターンを検知します。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
11
|
+
from google.adk.events import Event
|
|
12
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DangerousSequencePlugin(BasePlugin):
|
|
16
|
+
"""危険な文字シーケンスを検知して無害化するプラグイン"""
|
|
17
|
+
|
|
18
|
+
PATTERNS = [
|
|
19
|
+
(r"(?i)(--\s+|#\s+|;)", lambda m: " "), # SQL コメント・コマンド区切り → スペース
|
|
20
|
+
(r"(\x00|\x1a)", lambda m: ""), # ヌルバイト・ファイル終端 → 削除
|
|
21
|
+
(r"(\\x[0-9a-f]{2})", lambda m: "[hex]"), # 16進数エスケープ → テキスト化
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
def __init__(self, logger: logging.Logger):
|
|
25
|
+
super().__init__(name='dangerous_sequence')
|
|
26
|
+
self.logger = logger
|
|
27
|
+
|
|
28
|
+
def sanitize_text(self, text: str) -> str:
|
|
29
|
+
"""指定されたテキストを危険な文字シーケンスから無害化"""
|
|
30
|
+
sanitized_text = text
|
|
31
|
+
for pattern, replacement in self.PATTERNS:
|
|
32
|
+
try:
|
|
33
|
+
if re.search(pattern, sanitized_text):
|
|
34
|
+
matches = re.findall(pattern, sanitized_text)
|
|
35
|
+
self.logger.warning(
|
|
36
|
+
f"Dangerous sequences detected and sanitized: {matches}"
|
|
37
|
+
)
|
|
38
|
+
sanitized_text = re.sub(pattern, replacement, sanitized_text)
|
|
39
|
+
except re.error:
|
|
40
|
+
continue
|
|
41
|
+
return sanitized_text
|
|
42
|
+
|
|
43
|
+
async def on_user_message_callback(self, *, invocation_context, user_message):
|
|
44
|
+
"""ユーザーメッセージをチェックして危険な文字シーケンスを無害化"""
|
|
45
|
+
message_text = None
|
|
46
|
+
if user_message.parts and len(user_message.parts) > 0:
|
|
47
|
+
part = user_message.parts[0]
|
|
48
|
+
if hasattr(part, 'text') and part.text:
|
|
49
|
+
message_text = part.text
|
|
50
|
+
if message_text:
|
|
51
|
+
sanitized_text = self.sanitize_text(message_text)
|
|
52
|
+
# メッセージが無害化された場合はテキストを更新
|
|
53
|
+
if sanitized_text != message_text:
|
|
54
|
+
if hasattr(user_message.parts[0], 'text'):
|
|
55
|
+
user_message.parts[0].text = sanitized_text
|
|
56
|
+
self.logger.info("User message has been sanitized")
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
async def on_event_callback(self, *, invocation_context: InvocationContext, event: Event) -> Optional[Event]:
|
|
60
|
+
"""イベントをチェックして危険な文字シーケンスを無害化"""
|
|
61
|
+
# イベントのコンテンツをチェック
|
|
62
|
+
if hasattr(event, 'content') and event.content:
|
|
63
|
+
content = event.content
|
|
64
|
+
# コンテンツがテキストを持つか確認
|
|
65
|
+
if hasattr(content, 'parts') and content.parts and len(content.parts) > 0:
|
|
66
|
+
part = content.parts[0]
|
|
67
|
+
if hasattr(part, 'text') and part.text:
|
|
68
|
+
original_text = part.text
|
|
69
|
+
sanitized_text = self.sanitize_text(original_text)
|
|
70
|
+
# テキストが無害化された場合はイベントを更新
|
|
71
|
+
if sanitized_text != original_text:
|
|
72
|
+
if hasattr(part, 'text'):
|
|
73
|
+
part.text = sanitized_text
|
|
74
|
+
self.logger.info("Event response has been sanitized")
|
|
75
|
+
return event
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
悪意のあるキーワード検知プラグイン
|
|
3
|
+
|
|
4
|
+
危険なキーワードやコマンドのパターンを検知します。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
11
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
12
|
+
from google.adk.events import Event
|
|
13
|
+
from .prompt_injection_common import PromptInjectionException
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class MaliciousKeywordDetectionPlugin(BasePlugin):
|
|
17
|
+
"""悪意のあるキーワードを検知するプラグイン"""
|
|
18
|
+
|
|
19
|
+
PATTERNS = [
|
|
20
|
+
r"(?i)\b(drop\s+database|truncate\s+table|exec\s+xp_|sp_oacreate)",
|
|
21
|
+
r"(?i)(\bignore\b|\bby\s+pass\b|\badmin\b.*?\bpassword\b)",
|
|
22
|
+
r"(?i)(union\s+all\s+select)",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
def __init__(self, logger: logging.Logger):
|
|
26
|
+
super().__init__(name='malicious_keyword_detection')
|
|
27
|
+
self.logger = logger
|
|
28
|
+
|
|
29
|
+
async def on_user_message_callback(self, *, invocation_context, user_message):
|
|
30
|
+
"""ユーザーメッセージをチェックして悪意のあるキーワードを検知"""
|
|
31
|
+
message_text = None
|
|
32
|
+
if user_message.parts and len(user_message.parts) > 0:
|
|
33
|
+
part = user_message.parts[0]
|
|
34
|
+
if hasattr(part, 'text') and part.text:
|
|
35
|
+
message_text = part.text
|
|
36
|
+
|
|
37
|
+
if message_text:
|
|
38
|
+
for pattern in self.PATTERNS:
|
|
39
|
+
try:
|
|
40
|
+
match = re.search(pattern, message_text)
|
|
41
|
+
if match:
|
|
42
|
+
raise PromptInjectionException(
|
|
43
|
+
f"Malicious keyword detected: {match.group(0)[:50]}",
|
|
44
|
+
'Malicious Keywords',
|
|
45
|
+
match.group(0)
|
|
46
|
+
)
|
|
47
|
+
except re.error:
|
|
48
|
+
continue
|
|
49
|
+
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
async def on_event_callback(self, *, invocation_context: InvocationContext, event: Event) -> Optional[Event]:
|
|
53
|
+
"""イベントをチェックして悪意のあるキーワードを検知"""
|
|
54
|
+
# イベントのコンテンツをチェック
|
|
55
|
+
if hasattr(event, 'content') and event.content:
|
|
56
|
+
content = event.content
|
|
57
|
+
# コンテンツがテキストを持つか確認
|
|
58
|
+
if hasattr(content, 'parts') and content.parts and len(content.parts) > 0:
|
|
59
|
+
part = content.parts[0]
|
|
60
|
+
if hasattr(part, 'text') and part.text:
|
|
61
|
+
text = part.text
|
|
62
|
+
# パターンマッチングを実行
|
|
63
|
+
for pattern in self.PATTERNS:
|
|
64
|
+
try:
|
|
65
|
+
match = re.search(pattern, text)
|
|
66
|
+
if match:
|
|
67
|
+
self.logger.warning(
|
|
68
|
+
f"Malicious keyword detected in event response: {match.group(0)[:50]}"
|
|
69
|
+
)
|
|
70
|
+
except re.error:
|
|
71
|
+
continue
|
|
72
|
+
return event
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SQL インジェクション検知プラグイン
|
|
3
|
+
|
|
4
|
+
SQL インジェクション攻撃パターンを検知し、PromptInjectionException を発生させます。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
11
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
12
|
+
from google.adk.events import Event
|
|
13
|
+
from .prompt_injection_common import PromptInjectionException
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SQLInjectionDetectionPlugin(BasePlugin):
|
|
17
|
+
"""SQL インジェクション攻撃を検知するプラグイン"""
|
|
18
|
+
|
|
19
|
+
PATTERNS = [
|
|
20
|
+
r"(?i)\b(union|select|insert|update|delete|drop|create|alter|exec|execute)\b.*?(?:from|into|values|set|where|;)",
|
|
21
|
+
r"(?i)('\s*or\s*'|'\s*or\s*1\s*=\s*1|--\s*|;.*?(union|select|insert))",
|
|
22
|
+
r"(?i)(\bor\b\s*1\s*=\s*1|\bor\b\s*true\b)",
|
|
23
|
+
r"(?i)(xp_cmdshell|exec\s+sp_|sp_executesql)",
|
|
24
|
+
r"(?i)(sqlmap|' and '1'='1)",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
def __init__(self, logger: logging.Logger):
|
|
28
|
+
super().__init__(name='sql_injection_detection')
|
|
29
|
+
self.logger = logger
|
|
30
|
+
|
|
31
|
+
async def on_user_message_callback(self, *, invocation_context, user_message):
|
|
32
|
+
"""ユーザーメッセージをチェックして SQL インジェクションを検知"""
|
|
33
|
+
message_text = None
|
|
34
|
+
if user_message.parts and len(user_message.parts) > 0:
|
|
35
|
+
part = user_message.parts[0]
|
|
36
|
+
if hasattr(part, 'text') and part.text:
|
|
37
|
+
message_text = part.text
|
|
38
|
+
|
|
39
|
+
if message_text:
|
|
40
|
+
for pattern in self.PATTERNS:
|
|
41
|
+
try:
|
|
42
|
+
match = re.search(pattern, message_text)
|
|
43
|
+
if match:
|
|
44
|
+
raise PromptInjectionException(
|
|
45
|
+
f"SQL injection detected: {match.group(0)[:50]}",
|
|
46
|
+
'SQL Injection',
|
|
47
|
+
match.group(0)
|
|
48
|
+
)
|
|
49
|
+
except re.error:
|
|
50
|
+
continue
|
|
51
|
+
|
|
52
|
+
return None
|
|
53
|
+
|
|
54
|
+
async def on_event_callback(self, *, invocation_context: InvocationContext, event: Event) -> Optional[Event]:
|
|
55
|
+
"""イベントをチェックして SQL インジェクションを検知"""
|
|
56
|
+
# イベントのコンテンツをチェック
|
|
57
|
+
if hasattr(event, 'content') and event.content:
|
|
58
|
+
content = event.content
|
|
59
|
+
# コンテンツがテキストを持つか確認
|
|
60
|
+
if hasattr(content, 'parts') and content.parts and len(content.parts) > 0:
|
|
61
|
+
part = content.parts[0]
|
|
62
|
+
if hasattr(part, 'text') and part.text:
|
|
63
|
+
text = part.text
|
|
64
|
+
# パターンマッチングを実行
|
|
65
|
+
for pattern in self.PATTERNS:
|
|
66
|
+
try:
|
|
67
|
+
match = re.search(pattern, text)
|
|
68
|
+
if match:
|
|
69
|
+
self.logger.warning(
|
|
70
|
+
f"SQL injection detected in event response: {match.group(0)[:50]}"
|
|
71
|
+
)
|
|
72
|
+
except re.error:
|
|
73
|
+
continue
|
|
74
|
+
return event
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Jinja2 テンプレートインジェクション検知プラグイン
|
|
3
|
+
|
|
4
|
+
Jinja2 テンプレートエンジンを対象とした SSTI(Server-Side Template Injection)パターンを検知します。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
11
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
12
|
+
from google.adk.events import Event
|
|
13
|
+
from .prompt_injection_common import PromptInjectionException
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TemplateInjectionDetectionPlugin(BasePlugin):
|
|
17
|
+
"""Jinja2/テンプレートインジェクション攻撃を検知するプラグイン"""
|
|
18
|
+
|
|
19
|
+
PATTERNS = [
|
|
20
|
+
r"\{\{.*?__.*?\}\}",
|
|
21
|
+
r"\{\{.*?self\._TemplateModule__dict__.*?\}\}",
|
|
22
|
+
r"\{%.*?import.*?%\}",
|
|
23
|
+
r"\{\{.*?config\.items\(\).*?\}\}",
|
|
24
|
+
r"\{\{.*?request\.environ.*?\}\}",
|
|
25
|
+
r"{{.*?popen.*?}}",
|
|
26
|
+
r"{{.*?system.*?}}",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
def __init__(self, logger: logging.Logger):
|
|
30
|
+
super().__init__(name='template_injection_detection')
|
|
31
|
+
self.logger = logger
|
|
32
|
+
|
|
33
|
+
async def on_user_message_callback(self, *, invocation_context, user_message):
|
|
34
|
+
"""ユーザーメッセージをチェックして Jinja2 テンプレートインジェクションを検知"""
|
|
35
|
+
message_text = None
|
|
36
|
+
if user_message.parts and len(user_message.parts) > 0:
|
|
37
|
+
part = user_message.parts[0]
|
|
38
|
+
if hasattr(part, 'text') and part.text:
|
|
39
|
+
message_text = part.text
|
|
40
|
+
|
|
41
|
+
if message_text:
|
|
42
|
+
for pattern in self.PATTERNS:
|
|
43
|
+
try:
|
|
44
|
+
match = re.search(pattern, message_text, re.DOTALL)
|
|
45
|
+
if match:
|
|
46
|
+
raise PromptInjectionException(
|
|
47
|
+
f"Template injection detected: {match.group(0)[:50]}",
|
|
48
|
+
'Template Injection',
|
|
49
|
+
match.group(0)
|
|
50
|
+
)
|
|
51
|
+
except re.error:
|
|
52
|
+
continue
|
|
53
|
+
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
async def on_event_callback(self, *, invocation_context: InvocationContext, event: Event) -> Optional[Event]:
|
|
57
|
+
"""イベントをチェックして Jinja2 テンプレートインジェクションを検知"""
|
|
58
|
+
# イベントのコンテンツをチェック
|
|
59
|
+
if hasattr(event, 'content') and event.content:
|
|
60
|
+
content = event.content
|
|
61
|
+
# コンテンツがテキストを持つか確認
|
|
62
|
+
if hasattr(content, 'parts') and content.parts and len(content.parts) > 0:
|
|
63
|
+
part = content.parts[0]
|
|
64
|
+
if hasattr(part, 'text') and part.text:
|
|
65
|
+
text = part.text
|
|
66
|
+
# パターンマッチングを実行
|
|
67
|
+
for pattern in self.PATTERNS:
|
|
68
|
+
try:
|
|
69
|
+
match = re.search(pattern, text, re.DOTALL)
|
|
70
|
+
if match:
|
|
71
|
+
self.logger.warning(
|
|
72
|
+
f"Template injection detected in event response: {match.group(0)[:50]}"
|
|
73
|
+
)
|
|
74
|
+
except re.error:
|
|
75
|
+
continue
|
|
76
|
+
return event
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
JavaScript/HTML インジェクション無害化プラグイン
|
|
3
|
+
|
|
4
|
+
XSS(クロスサイトスクリプティング)および HTML インジェクション攻撃パターンを無害化します。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import html
|
|
9
|
+
import logging
|
|
10
|
+
from typing import Optional
|
|
11
|
+
from google.adk.plugins.base_plugin import BasePlugin
|
|
12
|
+
from google.adk.agents.invocation_context import InvocationContext
|
|
13
|
+
from google.adk.events import Event
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class JavaScriptInjectionPlugin(BasePlugin):
|
|
17
|
+
"""JavaScript/HTML インジェクション攻撃を無害化するプラグイン"""
|
|
18
|
+
|
|
19
|
+
# JavaScript 検出パターン
|
|
20
|
+
JS_PATTERNS = [
|
|
21
|
+
(r"javascript:", re.IGNORECASE),
|
|
22
|
+
(r"on\w+\s*=\s*[\"']?.*?[\"']", re.IGNORECASE),
|
|
23
|
+
(r"eval\s*\(", re.IGNORECASE),
|
|
24
|
+
(r"new\s+Function\s*\(", re.IGNORECASE),
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
def __init__(self, logger: logging.Logger):
|
|
28
|
+
super().__init__(name='javascript_injection')
|
|
29
|
+
self.logger = logger
|
|
30
|
+
|
|
31
|
+
def sanitize_text(self, text: str) -> str:
|
|
32
|
+
"""指定されたテキストを JavaScript/HTML インジェクションから無害化"""
|
|
33
|
+
sanitized_text = text
|
|
34
|
+
dangerous_detected = False
|
|
35
|
+
|
|
36
|
+
# JavaScript パターンの検出
|
|
37
|
+
for pattern, flags in self.JS_PATTERNS:
|
|
38
|
+
try:
|
|
39
|
+
if re.search(pattern, sanitized_text, flags):
|
|
40
|
+
dangerous_detected = True
|
|
41
|
+
matches = re.findall(pattern, sanitized_text, flags)
|
|
42
|
+
self.logger.warning(
|
|
43
|
+
f"JavaScript injection detected: {matches}"
|
|
44
|
+
)
|
|
45
|
+
except re.error:
|
|
46
|
+
continue
|
|
47
|
+
|
|
48
|
+
# HTML タグの検出(<, > が含まれている)
|
|
49
|
+
if '<' in sanitized_text or '>' in sanitized_text:
|
|
50
|
+
dangerous_detected = True
|
|
51
|
+
self.logger.warning("HTML content detected and will be escaped")
|
|
52
|
+
|
|
53
|
+
# HTML 特殊文字をエスケープして無害化
|
|
54
|
+
if dangerous_detected:
|
|
55
|
+
sanitized_text = html.escape(sanitized_text, quote=True)
|
|
56
|
+
|
|
57
|
+
return sanitized_text
|
|
58
|
+
|
|
59
|
+
async def on_user_message_callback(self, *, invocation_context, user_message):
|
|
60
|
+
"""ユーザーメッセージをチェックして JavaScript インジェクションを無害化"""
|
|
61
|
+
message_text = None
|
|
62
|
+
if user_message.parts and len(user_message.parts) > 0:
|
|
63
|
+
part = user_message.parts[0]
|
|
64
|
+
if hasattr(part, 'text') and part.text:
|
|
65
|
+
message_text = part.text
|
|
66
|
+
|
|
67
|
+
if message_text:
|
|
68
|
+
sanitized_text = self.sanitize_text(message_text)
|
|
69
|
+
# メッセージが無害化された場合はテキストを更新
|
|
70
|
+
if sanitized_text != message_text:
|
|
71
|
+
if hasattr(user_message.parts[0], 'text'):
|
|
72
|
+
user_message.parts[0].text = sanitized_text
|
|
73
|
+
self.logger.info("User message has been sanitized")
|
|
74
|
+
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
async def on_event_callback(self, *, invocation_context: InvocationContext, event: Event) -> Optional[Event]:
|
|
78
|
+
"""イベントをチェックして JavaScript/HTML インジェクションを無害化"""
|
|
79
|
+
# イベントのコンテンツをチェック
|
|
80
|
+
if hasattr(event, 'content') and event.content:
|
|
81
|
+
content = event.content
|
|
82
|
+
# コンテンツがテキストを持つか確認
|
|
83
|
+
if hasattr(content, 'parts') and content.parts and len(content.parts) > 0:
|
|
84
|
+
part = content.parts[0]
|
|
85
|
+
if hasattr(part, 'text') and part.text:
|
|
86
|
+
original_text = part.text
|
|
87
|
+
sanitized_text = self.sanitize_text(original_text)
|
|
88
|
+
# テキストが無害化された場合はイベントを更新
|
|
89
|
+
if sanitized_text != original_text:
|
|
90
|
+
if hasattr(part, 'text'):
|
|
91
|
+
part.text = sanitized_text
|
|
92
|
+
self.logger.info("Event response has been sanitized")
|
|
93
|
+
return event
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any
|
|
2
|
+
|
|
3
|
+
class PromptInjectionException(Exception):
|
|
4
|
+
"""プロンプトインジェクション検知時の例外"""
|
|
5
|
+
|
|
6
|
+
def __init__(
|
|
7
|
+
self,
|
|
8
|
+
message: str,
|
|
9
|
+
pattern_type: Optional[str] = None,
|
|
10
|
+
matched_content: Optional[str] = None,
|
|
11
|
+
):
|
|
12
|
+
self.pattern_type = pattern_type
|
|
13
|
+
self.matched_content = matched_content
|
|
14
|
+
super().__init__(message)
|
|
15
|
+
|
|
16
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
17
|
+
"""例外情報を辞書形式で取得"""
|
|
18
|
+
return {
|
|
19
|
+
'error': 'Prompt Injection Detected',
|
|
20
|
+
'pattern_type': self.pattern_type,
|
|
21
|
+
'message': str(self),
|
|
22
|
+
'matched_content': (
|
|
23
|
+
self.matched_content[:50] if self.matched_content else None
|
|
24
|
+
),
|
|
25
|
+
}
|
|
@@ -2,7 +2,15 @@ from cmdbox.app import common, client, options
|
|
|
2
2
|
from cmdbox.app.auth import signin
|
|
3
3
|
from cmdbox.app.commons import convert, limiter, redis_client, resdata, validator
|
|
4
4
|
from cmdbox.app.features.cli import cmdbox_tts_say
|
|
5
|
-
from cmdbox.app.features.cli.agent import
|
|
5
|
+
from cmdbox.app.features.cli.agent import (
|
|
6
|
+
agant_base,
|
|
7
|
+
SQLInjectionDetectionPlugin,
|
|
8
|
+
JavaScriptInjectionPlugin,
|
|
9
|
+
TemplateInjectionDetectionPlugin,
|
|
10
|
+
MaliciousKeywordDetectionPlugin,
|
|
11
|
+
DangerousSequencePlugin,
|
|
12
|
+
PromptInjectionException,
|
|
13
|
+
)
|
|
6
14
|
from cmdbox.app.options import Options
|
|
7
15
|
from contextlib import aclosing
|
|
8
16
|
from pathlib import Path
|
|
@@ -741,6 +749,9 @@ class AgentChat(agant_base.AgentBase, validator.Validator, limiter.LimitedFeatur
|
|
|
741
749
|
agent_session:Any, reskey:str) -> List[Any]:
|
|
742
750
|
"""
|
|
743
751
|
Runner用のプラグインを作成します。
|
|
752
|
+
|
|
753
|
+
Google ADK 公式の BasePlugin インターフェースを使用して、
|
|
754
|
+
プロンプトインジェクション攻撃を検知・遮断するプラグインを作成します。
|
|
744
755
|
|
|
745
756
|
Args:
|
|
746
757
|
logger (logging.Logger): ロガー
|
|
@@ -753,7 +764,14 @@ class AgentChat(agant_base.AgentBase, validator.Validator, limiter.LimitedFeatur
|
|
|
753
764
|
Returns:
|
|
754
765
|
List[Any]: 作成したプラグインのリスト
|
|
755
766
|
"""
|
|
756
|
-
|
|
767
|
+
plugins = [
|
|
768
|
+
SQLInjectionDetectionPlugin(logger),
|
|
769
|
+
JavaScriptInjectionPlugin(logger),
|
|
770
|
+
TemplateInjectionDetectionPlugin(logger),
|
|
771
|
+
MaliciousKeywordDetectionPlugin(logger),
|
|
772
|
+
DangerousSequencePlugin(logger),
|
|
773
|
+
]
|
|
774
|
+
return plugins
|
|
757
775
|
|
|
758
776
|
def prepare_agent_conf(self, agent_conf:Dict[str, Any], payload:Dict[str, Any]) -> Dict[str, Any]:
|
|
759
777
|
"""
|
|
@@ -822,6 +840,21 @@ class AgentChat(agant_base.AgentBase, validator.Validator, limiter.LimitedFeatur
|
|
|
822
840
|
Returns:
|
|
823
841
|
int: ステータス
|
|
824
842
|
"""
|
|
843
|
+
try:
|
|
844
|
+
# プロンプトインジェクション検知エラーの場合は特別なメッセージを返す
|
|
845
|
+
if isinstance(exc, PromptInjectionException):
|
|
846
|
+
msg = dict(warn=dict(
|
|
847
|
+
error='Prompt Injection Attack Detected',
|
|
848
|
+
message=str(exc),
|
|
849
|
+
pattern=exc.pattern_type,
|
|
850
|
+
detail='Your message contains suspicious patterns that could be used for prompt injection attacks. Please review your input.'
|
|
851
|
+
))
|
|
852
|
+
logger.warning(f"Prompt injection detected: {exc.to_dict()}", exc_info=True)
|
|
853
|
+
redis_cli.rpush(reskey, msg)
|
|
854
|
+
return self.RESP_WARN
|
|
855
|
+
except Exception as inner_exc:
|
|
856
|
+
logger.debug(f"Error processing exception type check: {inner_exc}")
|
|
857
|
+
# その他の例外は通常処理
|
|
825
858
|
msg = dict(warn=f"{self.get_mode()}_{self.get_cmd()}: {exc}")
|
|
826
859
|
logger.warning(f"{self.get_mode()}_{self.get_cmd()}: {exc}", exc_info=True)
|
|
827
860
|
redis_cli.rpush(reskey, msg)
|
|
@@ -204,7 +204,7 @@ class AuditDelete(audit_base.AuditBase, validator.Validator):
|
|
|
204
204
|
def delete(self, reskey:str,
|
|
205
205
|
delete_audit_type:str, delete_clmsg_id:str, delete_clmsg_sdate:str, delete_clmsg_edate:str,
|
|
206
206
|
delete_clmsg_src:str, delete_clmsg_title:str, delete_clmsg_user:str, delete_clmsg_body:Dict[str, Any],
|
|
207
|
-
|
|
207
|
+
delete_clmsg_tag:List[str], delete_svmsg_id:str, delete_svmsg_sdate:str, delete_svmsg_edate:str,
|
|
208
208
|
pg_enabled:bool, pg_host:str, pg_port:int, pg_user:str, pg_password:str, pg_dbname:str,
|
|
209
209
|
data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient) -> int:
|
|
210
210
|
"""
|
|
@@ -220,7 +220,7 @@ class AuditDelete(audit_base.AuditBase, validator.Validator):
|
|
|
220
220
|
delete_clmsg_title (str): クライアントメッセージのタイトル
|
|
221
221
|
delete_clmsg_user (str): クライアントメッセージの発生させたユーザー
|
|
222
222
|
delete_clmsg_body (Dict[str, Any]): クライアントメッセージの本文
|
|
223
|
-
|
|
223
|
+
delete_clmsg_tag (List[str]): クライアントメッセージのタグ
|
|
224
224
|
delete_svmsg_id (str): サーバーメッセージID
|
|
225
225
|
delete_svmsg_sdate (str): サーバーメッセージ発生日時(開始)
|
|
226
226
|
delete_svmsg_edate (str): サーバーメッセージ発生日時(終了)
|
|
@@ -272,8 +272,8 @@ class AuditDelete(audit_base.AuditBase, validator.Validator):
|
|
|
272
272
|
for key, value in delete_clmsg_body.items():
|
|
273
273
|
where.append(f"clmsg_body->>'{key}' LIKE {'%s' if pg_enabled else '?'}")
|
|
274
274
|
params.append(value)
|
|
275
|
-
if
|
|
276
|
-
for tag in
|
|
275
|
+
if delete_clmsg_tag:
|
|
276
|
+
for tag in delete_clmsg_tag:
|
|
277
277
|
where.append(f"clmsg_tag like {'%s' if pg_enabled else '?'}")
|
|
278
278
|
params.append(f'%{tag}%')
|
|
279
279
|
if delete_svmsg_id and delete_svmsg_id != 'None':
|
|
@@ -277,7 +277,7 @@ class AuditSearch(audit_base.AuditBase, validator.Validator):
|
|
|
277
277
|
def search(self, reskey:str, select:Dict[str, str], select_date_format:str, groupby:List[str], groupby_date_format:str, sort:Dict[str, str], offset:int, limit:int,
|
|
278
278
|
filter_audit_type:List[str], filter_clmsg_id:str, filter_clmsg_sdate:str, filter_clmsg_edate:str,
|
|
279
279
|
filter_clmsg_src:str, filter_clmsg_title:str, filter_clmsg_user:str, filter_clmsg_body:Dict[str, Any],
|
|
280
|
-
exclude_clmsg_body:Dict[str, Any],
|
|
280
|
+
exclude_clmsg_body:Dict[str, Any], filter_clmsg_tag:List[str], filter_svmsg_id:str, filter_svmsg_sdate:str, filter_svmsg_edate:str,
|
|
281
281
|
pg_enabled:bool, pg_host:str, pg_port:int, pg_user:str, pg_password:str, pg_dbname:str,
|
|
282
282
|
data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient) -> int:
|
|
283
283
|
"""
|
|
@@ -301,7 +301,7 @@ class AuditSearch(audit_base.AuditBase, validator.Validator):
|
|
|
301
301
|
filter_clmsg_user (str): クライアントメッセージの発生させたユーザー
|
|
302
302
|
filter_clmsg_body (Dict[str, Any]): クライアントメッセージの本文
|
|
303
303
|
exclude_clmsg_body (Dict[str, Any]): 除外条件のクライアントメッセージの本文
|
|
304
|
-
|
|
304
|
+
filter_clmsg_tag (List[str]): クライアントメッセージのタグ
|
|
305
305
|
filter_svmsg_id (str): サーバーメッセージID
|
|
306
306
|
filter_svmsg_sdate (str): サーバーメッセージ発生日時(開始)
|
|
307
307
|
filter_svmsg_edate (str): サーバーメッセージ発生日時(終了)
|
|
@@ -407,14 +407,14 @@ class AuditSearch(audit_base.AuditBase, validator.Validator):
|
|
|
407
407
|
for key, value in exclude_clmsg_body.items():
|
|
408
408
|
where.append(f"(clmsg_body->>'{key}' IS NULL OR clmsg_body->>'{key}' NOT LIKE {'%s' if pg_enabled else '?'})")
|
|
409
409
|
params.append(value)
|
|
410
|
-
if
|
|
411
|
-
for tag in
|
|
410
|
+
if filter_clmsg_tag:
|
|
411
|
+
for tag in filter_clmsg_tag:
|
|
412
412
|
if not tag: continue
|
|
413
413
|
if pg_enabled:
|
|
414
414
|
where.append(f"clmsg_tag ?| %s")
|
|
415
415
|
params.append(f'{tag}')
|
|
416
416
|
else:
|
|
417
|
-
where.append(f"clmsg_tag like
|
|
417
|
+
where.append(f"clmsg_tag like ?")
|
|
418
418
|
params.append(f'%{tag}%')
|
|
419
419
|
if filter_svmsg_id and filter_svmsg_id != 'None':
|
|
420
420
|
where.append(f'svmsg_id={"%s" if pg_enabled else "?"}')
|