cmdbox 0.6.3.2__py3-none-any.whl → 0.6.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cmdbox might be problematic. Click here for more details.
- cmdbox/app/app.py +22 -7
- cmdbox/app/common.py +9 -6
- cmdbox/app/commons/loghandler.py +101 -20
- cmdbox/app/commons/redis_client.py +1 -1
- cmdbox/app/edge.py +2 -4
- cmdbox/app/feature.py +1 -1
- cmdbox/app/features/cli/cmdbox_agent_mcp_client.py +175 -0
- cmdbox/app/features/cli/cmdbox_agent_mcp_proxy.py +96 -0
- cmdbox/app/features/cli/cmdbox_audit_createdb.py +224 -224
- cmdbox/app/features/cli/cmdbox_audit_delete.py +4 -4
- cmdbox/app/features/cli/cmdbox_audit_search.py +4 -4
- cmdbox/app/features/cli/cmdbox_audit_write.py +6 -8
- cmdbox/app/features/cli/cmdbox_client_file_copy.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_download.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_list.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_move.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_remove.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_file_upload.py +3 -3
- cmdbox/app/features/cli/cmdbox_client_http.py +7 -6
- cmdbox/app/features/cli/cmdbox_client_server_info.py +4 -4
- cmdbox/app/features/cli/cmdbox_cmd_list.py +4 -4
- cmdbox/app/features/cli/cmdbox_cmd_load.py +5 -5
- cmdbox/app/features/cli/cmdbox_edge_config.py +1 -1
- cmdbox/app/features/cli/cmdbox_edge_start.py +3 -3
- cmdbox/app/features/cli/cmdbox_mcp_client.py +174 -174
- cmdbox/app/features/cli/cmdbox_mcp_proxy.py +96 -96
- cmdbox/app/features/cli/cmdbox_server_list.py +3 -3
- cmdbox/app/features/cli/cmdbox_server_start.py +103 -103
- cmdbox/app/features/cli/cmdbox_server_stop.py +6 -6
- cmdbox/app/features/cli/cmdbox_tts_install.py +317 -0
- cmdbox/app/features/cli/cmdbox_tts_say.py +179 -0
- cmdbox/app/features/cli/cmdbox_tts_start.py +329 -0
- cmdbox/app/features/cli/cmdbox_tts_stop.py +108 -0
- cmdbox/app/features/cli/cmdbox_web_apikey_add.py +91 -91
- cmdbox/app/features/cli/cmdbox_web_apikey_del.py +91 -91
- cmdbox/app/features/cli/cmdbox_web_gencert.py +7 -7
- cmdbox/app/features/cli/cmdbox_web_genpass.py +168 -168
- cmdbox/app/features/cli/cmdbox_web_group_add.py +94 -94
- cmdbox/app/features/cli/cmdbox_web_group_del.py +87 -87
- cmdbox/app/features/cli/cmdbox_web_group_edit.py +94 -94
- cmdbox/app/features/cli/cmdbox_web_group_list.py +87 -87
- cmdbox/app/features/cli/cmdbox_web_start.py +236 -235
- cmdbox/app/features/cli/cmdbox_web_stop.py +72 -72
- cmdbox/app/features/cli/cmdbox_web_user_add.py +104 -104
- cmdbox/app/features/cli/cmdbox_web_user_del.py +87 -87
- cmdbox/app/features/cli/cmdbox_web_user_edit.py +104 -104
- cmdbox/app/features/cli/cmdbox_web_user_list.py +87 -87
- cmdbox/app/features/web/cmdbox_web_agent.py +16 -4
- cmdbox/app/features/web/cmdbox_web_get_cmd_choices.py +10 -2
- cmdbox/app/features/web/cmdbox_web_save_cmd.py +1 -0
- cmdbox/app/features/web/cmdbox_web_versions_used.py +4 -0
- cmdbox/app/filer.py +9 -9
- cmdbox/app/mcp.py +19 -8
- cmdbox/app/options.py +52 -47
- cmdbox/app/server.py +224 -224
- cmdbox/app/web.py +39 -17
- cmdbox/extensions/features.yml +7 -1
- cmdbox/extensions/sample_project/sample/app/features/cli/sample_client_time.py +2 -2
- cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +3 -3
- cmdbox/licenses/LICENSE_APScheduler_3_11_0_MIT_License.txt +19 -0
- cmdbox/licenses/LICENSE_SQLAlchemy_2_0_43_MIT.txt +19 -0
- cmdbox/licenses/LICENSE_Werkzeug_3_1_1_BSD_License.txt +28 -0
- cmdbox/licenses/LICENSE_absolufy-imports_0_3_1_MIT_License.txt +21 -0
- cmdbox/licenses/LICENSE_anyio_4_10_0_UNKNOWN.txt +20 -0
- cmdbox/licenses/{LICENSE_typer_0_16_0_MIT_License.txt → LICENSE_backoff_2_2_1_MIT_License.txt} +1 -1
- cmdbox/licenses/LICENSE_certifi_2025_8_3_Mozilla_Public_License_2_0-MPL_2_0.txt +20 -0
- cmdbox/licenses/LICENSE_charset-normalizer_3_4_3_MIT.txt +21 -0
- cmdbox/licenses/LICENSE_cryptography_45_0_6_Apache-2_0_OR_BSD-3-Clause.txt +3 -0
- cmdbox/licenses/LICENSE_cyclopts_3_22_5_Apache_Software_License.txt +201 -0
- cmdbox/licenses/LICENSE_fastapi-sso_0_18_0_MIT_License.txt +21 -0
- cmdbox/licenses/LICENSE_fastmcp_2_11_3_Apache_Software_License.txt +201 -0
- cmdbox/licenses/LICENSE_google-adk_1_9_0_Apache_Software_License.txt +202 -0
- cmdbox/licenses/LICENSE_google-genai_1_28_0_Apache_Software_License.txt +202 -0
- cmdbox/licenses/LICENSE_google-genai_1_29_0_Apache_Software_License.txt +202 -0
- cmdbox/licenses/LICENSE_greenlet_3_2_4_MIT_AND_Python-2_0.txt +30 -0
- cmdbox/licenses/LICENSE_isodate_0_7_2_BSD_License.txt +26 -0
- cmdbox/licenses/LICENSE_lazy-object-proxy_1_11_0_BSD_License.txt +20 -0
- cmdbox/licenses/LICENSE_litellm-enterprise_0_1_19_UNKNOWN.txt +37 -0
- cmdbox/licenses/LICENSE_litellm_1_75_5_post1_MIT_License.txt +26 -0
- cmdbox/licenses/LICENSE_markdown-it-py_4_0_0_MIT_License.txt +21 -0
- cmdbox/licenses/LICENSE_mcp_1_12_4_MIT_License.txt +21 -0
- cmdbox/licenses/LICENSE_multidict_6_6_4_Apache_License_2_0.txt +13 -0
- cmdbox/licenses/LICENSE_oauthlib_3_3_1_BSD-3-Clause.txt +27 -0
- cmdbox/licenses/LICENSE_openai_1_99_9_Apache_Software_License.txt +201 -0
- cmdbox/licenses/LICENSE_openapi-core_0_19_5_BSD_License.txt +29 -0
- cmdbox/licenses/LICENSE_openapi-schema-validator_0_6_3_BSD_License.txt +29 -0
- cmdbox/licenses/LICENSE_openapi-spec-validator_0_7_2_Apache_Software_License.txt +201 -0
- cmdbox/licenses/LICENSE_opentelemetry-api_1_36_0_UNKNOWN.txt +201 -0
- cmdbox/licenses/LICENSE_opentelemetry-sdk_1_36_0_UNKNOWN.txt +201 -0
- cmdbox/licenses/LICENSE_opentelemetry-semantic-conventions_0_57b0_UNKNOWN.txt +201 -0
- cmdbox/licenses/LICENSE_orjson_3_11_1_Apache_Software_License-MIT_License.txt +201 -0
- cmdbox/licenses/LICENSE_parse_1_20_2_MIT_License.txt +19 -0
- cmdbox/licenses/LICENSE_pathable_0_4_4_Apache_Software_License.txt +201 -0
- cmdbox/licenses/{LICENSE_pillow_11_2_1_UNKNOWN.txt → LICENSE_pillow_11_3_0_UNKNOWN.txt} +393 -3
- cmdbox/licenses/LICENSE_pyperclip_1_9_0_BSD_License.txt +27 -0
- cmdbox/licenses/LICENSE_redis_6_4_0_MIT_License.txt +21 -0
- cmdbox/licenses/LICENSE_rfc3339-validator_0_1_4_MIT_License.txt +22 -0
- cmdbox/licenses/LICENSE_rich-rst_1_3_1_MIT_License.txt +7 -0
- cmdbox/licenses/LICENSE_rpds-py_0_27_0_UNKNOWN.txt +19 -0
- cmdbox/licenses/{LICENSE_setuptools_65_5_0_MIT_License.txt → LICENSE_setuptools_80_9_0_UNKNOWN.txt} +0 -2
- cmdbox/licenses/LICENSE_sphinx-intl_2_3_2_UNKNOWN.txt +25 -0
- cmdbox/licenses/LICENSE_tenacity_9_1_2_Apache_Software_License.txt +202 -0
- cmdbox/licenses/LICENSE_tiktoken_0_11_0_MIT_License-Copyright-c-2022_OpenAI-Shantanu_Jain-Permission_is_hereby_granted-free_of_charge-to_any_per.txt +21 -0
- cmdbox/licenses/LICENSE_tokenizers_0_21_4_Apache_Software_License.txt +1 -0
- cmdbox/licenses/LICENSE_voicevox_core_0_16_0_MIT.txt +20 -0
- cmdbox/licenses/LICENSE_watchdog_6_0_0_Apache_Software_License.txt +16 -0
- cmdbox/licenses/{LICENSE_httptools_0_6_4_MIT_License.txt → LICENSE_wsproto_1_2_0_MIT_License.txt} +3 -3
- cmdbox/licenses/files.txt +69 -50
- cmdbox/logconf_cmdbox.yml +136 -0
- cmdbox/version.py +2 -2
- cmdbox/web/agent.html +16 -2
- cmdbox/web/assets/cmdbox/agent.js +226 -1
- cmdbox/web/assets/cmdbox/common.js +20 -25
- cmdbox/web/assets/cmdbox/svgicon.js +18 -0
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info}/METADATA +29 -20
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info}/RECORD +158 -118
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info}/WHEEL +1 -1
- cmdbox/config.yml +0 -3
- cmdbox/licenses/LICENSE_shellingham_1_5_4_ISC_License-ISCL.txt +0 -13
- cmdbox/licenses/LICENSE_watchfiles_1_1_0_MIT_License.txt +0 -21
- cmdbox/logconf_audit.yml +0 -43
- cmdbox/logconf_client.yml +0 -43
- cmdbox/logconf_edge.yml +0 -43
- cmdbox/logconf_gui.yml +0 -43
- cmdbox/logconf_mcp.yml +0 -43
- cmdbox/logconf_server.yml +0 -43
- cmdbox/logconf_web.yml +0 -43
- /cmdbox/licenses/{LICENSE_Authlib_1_6_0_BSD_License.txt → LICENSE_Authlib_1_6_1_BSD_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_SQLAlchemy_2_0_41_MIT.txt → LICENSE_SQLAlchemy_2_0_42_MIT.txt} +0 -0
- /cmdbox/licenses/{LICENSE_aiohttp_3_12_13_Apache-2_0.txt → LICENSE_aiohttp_3_12_15_Apache-2_0_AND_MIT.txt} +0 -0
- /cmdbox/licenses/{LICENSE_aiosignal_1_3_2_Apache_Software_License.txt → LICENSE_aiosignal_1_4_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_certifi_2025_6_15_Mozilla_Public_License_2_0-MPL_2_0.txt → LICENSE_certifi_2025_7_14_Mozilla_Public_License_2_0-MPL_2_0.txt} +0 -0
- /cmdbox/licenses/{LICENSE_cryptography_45_0_4_Apache-2_0_OR_BSD-3-Clause.txt → LICENSE_cryptography_45_0_5_Apache-2_0_OR_BSD-3-Clause.txt} +0 -0
- /cmdbox/licenses/{LICENSE_docstring_parser_0_16_MIT_License.txt → LICENSE_docstring_parser_0_17_0_MIT_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_fastapi_0_115_14_MIT_License.txt → LICENSE_fastapi_0_116_1_MIT_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_fastmcp_2_10_1_Apache_Software_License.txt → LICENSE_fastmcp_2_11_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_fsspec_2025_5_1_BSD_License.txt → LICENSE_fsspec_2025_7_0_BSD_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_google-adk_1_5_0_Apache_Software_License.txt → LICENSE_google-adk_1_10_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_google-api-python-client_2_174_0_Apache_Software_License.txt → LICENSE_google-api-python-client_2_177_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_huggingface-hub_0_33_1_Apache_Software_License.txt → LICENSE_google-api-python-client_2_178_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_google-cloud-aiplatform_1_100_0_Apache_2_0.txt → LICENSE_google-cloud-aiplatform_1_106_0_Apache_2_0.txt} +0 -0
- /cmdbox/licenses/{LICENSE_google-cloud-bigquery_3_34_0_Apache_Software_License.txt → LICENSE_google-cloud-aiplatform_1_108_0_Apache_2_0.txt} +0 -0
- /cmdbox/licenses/{LICENSE_google-genai_1_23_0_Apache_Software_License.txt → LICENSE_google-cloud-bigquery_3_35_1_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_grpcio-status_1_73_1_Apache_Software_License.txt → LICENSE_grpcio-status_1_74_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_grpcio_1_73_1_Apache_Software_License.txt → LICENSE_grpcio_1_74_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_opentelemetry-api_1_34_1_Apache_Software_License.txt → LICENSE_huggingface-hub_0_34_3_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_opentelemetry-sdk_1_34_1_Apache_Software_License.txt → LICENSE_huggingface-hub_0_34_4_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_opentelemetry-semantic-conventions_0_55b1_Apache_Software_License.txt → LICENSE_jsonschema-path_0_3_4_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_jsonschema_4_24_0_UNKNOWN.txt → LICENSE_jsonschema_4_25_0_UNKNOWN.txt} +0 -0
- /cmdbox/licenses/{LICENSE_litellm_1_73_6_MIT_License.txt → LICENSE_litellm_1_74_12_MIT_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_mcp_1_10_1_MIT_License.txt → LICENSE_mcp_1_12_3_MIT_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_multidict_6_6_2_Apache_License_2_0.txt → LICENSE_multidict_6_6_3_Apache_License_2_0.txt} +0 -0
- /cmdbox/licenses/{LICENSE_nh3_0_2_21_MIT.txt → LICENSE_nh3_0_3_0_MIT.txt} +0 -0
- /cmdbox/licenses/{LICENSE_numpy_2_3_1_BSD_License.txt → LICENSE_numpy_2_3_2_BSD_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_openai_1_93_0_Apache_Software_License.txt → LICENSE_openai_1_98_0_Apache_Software_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_tokenizers_0_21_2_Apache_Software_License.txt → LICENSE_pywin32_311_Python_Software_Foundation_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_regex_2024_11_6_Apache_Software_License.txt → LICENSE_regex_2025_7_34_UNKNOWN.txt} +0 -0
- /cmdbox/licenses/{LICENSE_rich_14_0_0_MIT_License.txt → LICENSE_rich_14_1_0_MIT_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_rpds-py_0_25_1_MIT.txt → LICENSE_rpds-py_0_26_0_MIT.txt} +0 -0
- /cmdbox/licenses/{LICENSE_sse-starlette_2_3_6_BSD_License.txt → LICENSE_sse-starlette_3_0_2_UNKNOWN.txt} +0 -0
- /cmdbox/licenses/{LICENSE_starlette_0_46_2_BSD_License.txt → LICENSE_starlette_0_47_2_BSD_License.txt} +0 -0
- /cmdbox/licenses/{LICENSE_typing_extensions_4_14_0_UNKNOWN.txt → LICENSE_typing_extensions_4_14_1_UNKNOWN.txt} +0 -0
- /cmdbox/licenses/{LICENSE_zope_event_5_1_Zope_Public_License.txt → LICENSE_zope_event_5_1_1_Zope_Public_License.txt} +0 -0
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info}/entry_points.txt +0 -0
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info/licenses}/LICENSE +0 -0
- {cmdbox-0.6.3.2.dist-info → cmdbox-0.6.4.1.dist-info}/top_level.txt +0 -0
cmdbox/logconf_cmdbox.yml
CHANGED
|
@@ -22,6 +22,30 @@ handlers:
|
|
|
22
22
|
omit_repeated_times: false
|
|
23
23
|
tracebacks_word_wrap: false
|
|
24
24
|
log_time_format: '[%Y-%m-%d %H:%M]'
|
|
25
|
+
audit:
|
|
26
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
27
|
+
level: INFO
|
|
28
|
+
formatter: fmt
|
|
29
|
+
backupCount: 5
|
|
30
|
+
when : 'D'
|
|
31
|
+
encoding : 'utf-8'
|
|
32
|
+
filename: .logs/cmdbox_audit.log
|
|
33
|
+
client:
|
|
34
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
35
|
+
level: INFO
|
|
36
|
+
formatter: fmt
|
|
37
|
+
backupCount: 5
|
|
38
|
+
when : 'D'
|
|
39
|
+
encoding : 'utf-8'
|
|
40
|
+
filename: .logs/cmdbox_client.log
|
|
41
|
+
cmd:
|
|
42
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
43
|
+
level: INFO
|
|
44
|
+
formatter: fmt
|
|
45
|
+
backupCount: 5
|
|
46
|
+
when : 'D'
|
|
47
|
+
encoding : 'utf-8'
|
|
48
|
+
filename: .logs/cmdbox_cmd.log
|
|
25
49
|
cmdbox:
|
|
26
50
|
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
27
51
|
level: INFO
|
|
@@ -30,13 +54,125 @@ handlers:
|
|
|
30
54
|
when : 'D'
|
|
31
55
|
encoding : 'utf-8'
|
|
32
56
|
filename: .logs/cmdbox.log
|
|
57
|
+
edge:
|
|
58
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
59
|
+
level: INFO
|
|
60
|
+
formatter: fmt
|
|
61
|
+
backupCount: 5
|
|
62
|
+
when : 'D'
|
|
63
|
+
encoding : 'utf-8'
|
|
64
|
+
filename: .logs/cmdbox_edge.log
|
|
65
|
+
gui:
|
|
66
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
67
|
+
level: INFO
|
|
68
|
+
formatter: fmt
|
|
69
|
+
backupCount: 5
|
|
70
|
+
when : 'D'
|
|
71
|
+
encoding : 'utf-8'
|
|
72
|
+
filename: .logs/cmdbox_gui.log
|
|
73
|
+
mcp:
|
|
74
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
75
|
+
level: INFO
|
|
76
|
+
formatter: fmt
|
|
77
|
+
backupCount: 5
|
|
78
|
+
when : 'D'
|
|
79
|
+
encoding : 'utf-8'
|
|
80
|
+
filename: .logs/cmdbox_mcp.log
|
|
81
|
+
server:
|
|
82
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
83
|
+
level: INFO
|
|
84
|
+
formatter: fmt
|
|
85
|
+
backupCount: 5
|
|
86
|
+
when : 'D'
|
|
87
|
+
encoding : 'utf-8'
|
|
88
|
+
filename: .logs/cmdbox_server.log
|
|
89
|
+
tts:
|
|
90
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
91
|
+
level: INFO
|
|
92
|
+
formatter: fmt
|
|
93
|
+
backupCount: 5
|
|
94
|
+
when : 'D'
|
|
95
|
+
encoding : 'utf-8'
|
|
96
|
+
filename: .logs/cmdbox_tts.log
|
|
97
|
+
web:
|
|
98
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
99
|
+
level: INFO
|
|
100
|
+
formatter: fmt
|
|
101
|
+
backupCount: 5
|
|
102
|
+
when : 'D'
|
|
103
|
+
encoding : 'utf-8'
|
|
104
|
+
filename: .logs/cmdbox_web.log
|
|
105
|
+
logcl:
|
|
106
|
+
class: logging.handlers.SocketHandler
|
|
107
|
+
level: INFO
|
|
108
|
+
formatter: fmt
|
|
109
|
+
host: 'localhost'
|
|
110
|
+
port: 9020
|
|
111
|
+
logsv:
|
|
112
|
+
class: cmdbox.app.commons.loghandler.TimedRotatingFileHandler
|
|
113
|
+
level: INFO
|
|
114
|
+
formatter: fmt
|
|
115
|
+
backupCount: 5
|
|
116
|
+
when : 'D'
|
|
117
|
+
encoding : 'utf-8'
|
|
118
|
+
filename: .logs/cmdbox_logsv.log
|
|
33
119
|
|
|
34
120
|
loggers:
|
|
121
|
+
audit:
|
|
122
|
+
handlers: [audit, std]
|
|
123
|
+
level: INFO
|
|
124
|
+
qualname: audit
|
|
125
|
+
propagate: false
|
|
126
|
+
client:
|
|
127
|
+
handlers: [client, std]
|
|
128
|
+
level: INFO
|
|
129
|
+
qualname: client
|
|
130
|
+
propagate: false
|
|
131
|
+
cmd:
|
|
132
|
+
handlers: [cmd, std]
|
|
133
|
+
level: INFO
|
|
134
|
+
qualname: cmd
|
|
135
|
+
propagate: false
|
|
35
136
|
cmdbox:
|
|
36
137
|
handlers: [cmdbox, std]
|
|
37
138
|
level: INFO
|
|
38
139
|
qualname: cmdbox
|
|
39
140
|
propagate: false
|
|
141
|
+
edge:
|
|
142
|
+
handlers: [edge, std]
|
|
143
|
+
level: INFO
|
|
144
|
+
qualname: edge
|
|
145
|
+
propagate: false
|
|
146
|
+
gui:
|
|
147
|
+
handlers: [gui, std]
|
|
148
|
+
level: INFO
|
|
149
|
+
qualname: gui
|
|
150
|
+
propagate: false
|
|
151
|
+
mcp:
|
|
152
|
+
handlers: [mcp, std]
|
|
153
|
+
level: INFO
|
|
154
|
+
qualname: mcp
|
|
155
|
+
propagate: false
|
|
156
|
+
server:
|
|
157
|
+
handlers: [server, std]
|
|
158
|
+
level: INFO
|
|
159
|
+
qualname: server
|
|
160
|
+
propagate: false
|
|
161
|
+
tts:
|
|
162
|
+
handlers: [tts, std]
|
|
163
|
+
level: INFO
|
|
164
|
+
qualname: tts
|
|
165
|
+
propagate: false
|
|
166
|
+
web:
|
|
167
|
+
handlers: [web, std]
|
|
168
|
+
level: INFO
|
|
169
|
+
qualname: web
|
|
170
|
+
propagate: false
|
|
171
|
+
logsv:
|
|
172
|
+
handlers: [logsv]
|
|
173
|
+
level: INFO
|
|
174
|
+
qualname: logsv
|
|
175
|
+
propagate: false
|
|
40
176
|
|
|
41
177
|
#root:
|
|
42
178
|
# handlers: [std]
|
cmdbox/version.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
|
|
3
|
-
dt_now = datetime.datetime(2025,
|
|
3
|
+
dt_now = datetime.datetime(2025, 8, 13)
|
|
4
4
|
days_ago = (datetime.datetime.now() - dt_now).days
|
|
5
5
|
__appid__ = 'cmdbox'
|
|
6
6
|
__title__ = 'cmdbox (Command Development Application)'
|
|
7
|
-
__version__ = '0.6.
|
|
7
|
+
__version__ = '0.6.4.1'
|
|
8
8
|
__copyright__ = f'Copyright © 2023-{dt_now.strftime("%Y")} hamacom2004jp'
|
|
9
9
|
__pypiurl__ = 'https://pypi.org/project/cmdbox/'
|
|
10
10
|
__srcurl__ = 'https://github.com/hamacom2004jp/cmdbox'
|
cmdbox/web/agent.html
CHANGED
|
@@ -67,6 +67,14 @@
|
|
|
67
67
|
</button>
|
|
68
68
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
|
69
69
|
<ul class="navbar-nav me-auto">
|
|
70
|
+
<!--li class="nav-item dropdown">
|
|
71
|
+
<a class="nav-link dropdown-toggle" href="#" id="toolMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
72
|
+
Tool
|
|
73
|
+
</a>
|
|
74
|
+
<ul class="dropdown-menu toolmenu" aria-labelledby="toolMenuLink">
|
|
75
|
+
<li><a class="dropdown-item" href="#" onclick="agent.llmsetting();">LLM Setting</a></li>
|
|
76
|
+
</ul>
|
|
77
|
+
</li-->
|
|
70
78
|
<li class="nav-item dropdown">
|
|
71
79
|
<a class="nav-link dropdown-toggle" href="#" id="viewMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
72
80
|
View
|
|
@@ -141,10 +149,16 @@
|
|
|
141
149
|
<div class="w-100 d-flex justify-content-center">
|
|
142
150
|
<div class="chat-input mt-2" style="width:800px;">
|
|
143
151
|
<div class="chat-group w-100 p-2">
|
|
144
|
-
<
|
|
145
|
-
|
|
152
|
+
<button id="btn_say" class="btn btn_hover p-1" type="button" style="border:0px;" disabled="disabled">
|
|
153
|
+
<svg class="bi bi-say" width="24" height="24" fill="currentColor"><use href="#btn_megaphone"></use></svg>
|
|
154
|
+
</button>
|
|
155
|
+
<textarea id="user_msg" class="form-control d-inline-block align-middle" rows="1" style="width:calc(100% - 120px);border:0px;box-shadow:none;resize:none;field-sizing:content;"></textarea>
|
|
156
|
+
<button id="btn_user_msg" class="btn btn_hover p-1" type="button" style="border:0px;" disabled="disabled">
|
|
146
157
|
<svg class="bi bi-send" width="24" height="24" fill="currentColor"><use href="#btn_send"></use></svg>
|
|
147
158
|
</button>
|
|
159
|
+
<button id="btn_rec" class="btn btn_hover p-1" type="button" style="border:0px;" disabled="disabled">
|
|
160
|
+
<svg class="bi bi-mic" width="24" height="24" fill="currentColor"><use href="#btn_mic"></use></svg>
|
|
161
|
+
</button>
|
|
148
162
|
</div>
|
|
149
163
|
</div>
|
|
150
164
|
</div>
|
|
@@ -28,11 +28,16 @@ agent.format_agent_message = (container, messages, txt, message) => {
|
|
|
28
28
|
if (!start || start.length < 0) {
|
|
29
29
|
// JSON開始部分が無い場合はそのまま表示
|
|
30
30
|
const msg = message.replace(/\n/g, '<br/>');
|
|
31
|
+
agent.say.say(msg);
|
|
31
32
|
txt.append(msg);
|
|
32
33
|
break;
|
|
33
34
|
}
|
|
34
35
|
start = message.substring(0, start.index);
|
|
35
|
-
if (start)
|
|
36
|
+
if (start) {
|
|
37
|
+
const msg = start.replace(/\n/g, '<br/>');
|
|
38
|
+
agent.say.say(msg);
|
|
39
|
+
txt.append(msg);
|
|
40
|
+
}
|
|
36
41
|
message = message.replace(start+regs_start.source, '');
|
|
37
42
|
|
|
38
43
|
// JSON内容部分を探す
|
|
@@ -92,6 +97,83 @@ agent.recursive_json_parse = (jobj) => {
|
|
|
92
97
|
}
|
|
93
98
|
});
|
|
94
99
|
};
|
|
100
|
+
agent.say = {};
|
|
101
|
+
agent.say.model = 'ずんだもんノーマル';
|
|
102
|
+
agent.say.start = ()=> {
|
|
103
|
+
const opt = cmdbox.get_server_opt(false, $('#filer_form'));
|
|
104
|
+
opt['mode'] = 'tts';
|
|
105
|
+
opt['cmd'] = 'start';
|
|
106
|
+
opt['tts_engine'] = 'voicevox';
|
|
107
|
+
opt['voicevox_model'] = agent.say.model;
|
|
108
|
+
cmdbox.show_loading();
|
|
109
|
+
return cmdbox.sv_exec_cmd(opt).then(res => {
|
|
110
|
+
if (res && res['success']) res = [res];
|
|
111
|
+
cmdbox.hide_loading();
|
|
112
|
+
if (!res[0] || !res[0]['success']) {
|
|
113
|
+
if (res[0] && res[0]['warn']) throw res[0]['warn'];
|
|
114
|
+
else if (res['warn']) throw res['warn'];
|
|
115
|
+
throw res;
|
|
116
|
+
}
|
|
117
|
+
if (res[0]['success']['data']) return res[0]['success']['data'];
|
|
118
|
+
return res[0]['success'];
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
agent.say.stop = () => {
|
|
122
|
+
const opt = cmdbox.get_server_opt(false, $('#filer_form'));
|
|
123
|
+
opt['mode'] = 'tts';
|
|
124
|
+
opt['cmd'] = 'stop';
|
|
125
|
+
opt['tts_engine'] = 'voicevox';
|
|
126
|
+
opt['voicevox_model'] = agent.say.model;
|
|
127
|
+
cmdbox.show_loading();
|
|
128
|
+
return cmdbox.sv_exec_cmd(opt).then(res => {
|
|
129
|
+
if (res && res['success']) res = [res];
|
|
130
|
+
cmdbox.hide_loading();
|
|
131
|
+
if (!res[0] || !res[0]['success']) {
|
|
132
|
+
if (res[0] && res[0]['warn']) throw res[0]['warn'];
|
|
133
|
+
else if (res['warn']) throw res['warn'];
|
|
134
|
+
throw res;
|
|
135
|
+
}
|
|
136
|
+
if (res[0]['success']['data']) return res[0]['success']['data'];
|
|
137
|
+
return res[0]['success'];
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
agent.say.isStart = () => {
|
|
141
|
+
const btn_say = $('#btn_say');
|
|
142
|
+
return btn_say.hasClass('say_on')
|
|
143
|
+
};
|
|
144
|
+
agent.say.say = (tts_text) => {
|
|
145
|
+
if (!agent.say.isStart()) return;
|
|
146
|
+
const opt = cmdbox.get_server_opt(false, $('#filer_form'));
|
|
147
|
+
opt['mode'] = 'tts';
|
|
148
|
+
opt['cmd'] = 'say';
|
|
149
|
+
opt['tts_engine'] = 'voicevox';
|
|
150
|
+
opt['voicevox_model'] = agent.say.model;
|
|
151
|
+
opt['tts_text'] = tts_text.replace(/<br\s*\/?>/g, '\n'); // <br>タグを改行に変換
|
|
152
|
+
cmdbox.show_loading();
|
|
153
|
+
return cmdbox.sv_exec_cmd(opt).then(async (res) => {
|
|
154
|
+
if (res && res['success']) res = [res];
|
|
155
|
+
cmdbox.hide_loading();
|
|
156
|
+
if (!res[0] || !res[0]['success']) {
|
|
157
|
+
if (res[0] && res[0]['warn']) throw res[0]['warn'];
|
|
158
|
+
throw res;
|
|
159
|
+
}
|
|
160
|
+
if (!res[0]['success']['data']) {
|
|
161
|
+
throw res[0]['success'];
|
|
162
|
+
}
|
|
163
|
+
// 音声データを再生
|
|
164
|
+
const binary_string = window.atob(res[0]['success']['data']);
|
|
165
|
+
const bytesArray = new Uint8Array(binary_string.length);
|
|
166
|
+
for (let i = 0; i < binary_string.length; i++) {
|
|
167
|
+
bytesArray[i] = binary_string.charCodeAt(i);
|
|
168
|
+
}
|
|
169
|
+
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
|
170
|
+
const audioBuffer = await audioContext.decodeAudioData(bytesArray.buffer);
|
|
171
|
+
const source = audioContext.createBufferSource();
|
|
172
|
+
source.buffer = audioBuffer;
|
|
173
|
+
source.connect(audioContext.destination);
|
|
174
|
+
source.start(0);
|
|
175
|
+
});
|
|
176
|
+
};
|
|
95
177
|
agent.init_form = async () => {
|
|
96
178
|
const container = $('#message_container');
|
|
97
179
|
const histories = $('#histories');
|
|
@@ -109,7 +191,9 @@ agent.init_form = async () => {
|
|
|
109
191
|
clearInterval(agent.chat_callback_ping_handler);
|
|
110
192
|
}
|
|
111
193
|
messages.attr('data-session_id', session_id);
|
|
194
|
+
const btn_say = $('#btn_say');
|
|
112
195
|
const btn_user_msg = $('#btn_user_msg');
|
|
196
|
+
const btn_rec = $('#btn_rec');
|
|
113
197
|
const user_msg = $('#user_msg');
|
|
114
198
|
let message_id = null;
|
|
115
199
|
btn_user_msg.prop('disabled', true); // 初期状態で送信ボタンを無効化
|
|
@@ -134,6 +218,104 @@ agent.init_form = async () => {
|
|
|
134
218
|
// メッセージ一覧を一番下までスクロール
|
|
135
219
|
container.scrollTop(container.prop('scrollHeight'));
|
|
136
220
|
});
|
|
221
|
+
// sayボタンのクリックイベント
|
|
222
|
+
btn_say.off('click').on('click', async () => {
|
|
223
|
+
if (agent.say.isStart()) {
|
|
224
|
+
agent.say.stop().then((msg) => {
|
|
225
|
+
//cmdbox.message(msg);
|
|
226
|
+
btn_say.removeClass('say_on');
|
|
227
|
+
btn_say.find('use').attr('href', '#btn_megaphone');
|
|
228
|
+
}).catch((err) => {
|
|
229
|
+
cmdbox.message(err);
|
|
230
|
+
if (err.startsWith('VoiceVox model is not running:')) {
|
|
231
|
+
btn_say.removeClass('say_on');
|
|
232
|
+
btn_say.find('use').attr('href', '#btn_megaphone');
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
agent.say.start().then((msg) => {
|
|
238
|
+
//cmdbox.message(msg);
|
|
239
|
+
agent.say.say(msg);
|
|
240
|
+
btn_say.addClass('say_on');
|
|
241
|
+
btn_say.find('use').attr('href', '#btn_megaphone_fill');
|
|
242
|
+
}).catch((err) => {
|
|
243
|
+
cmdbox.message(err);
|
|
244
|
+
if (err.startsWith('VoiceVox model is already running:')) {
|
|
245
|
+
btn_say.addClass('say_on');
|
|
246
|
+
btn_say.find('use').attr('href', '#btn_megaphone_fill');
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
// recボタンのクリックイベント
|
|
251
|
+
btn_rec.off('click').on('click', async () => {
|
|
252
|
+
// 録音を終了
|
|
253
|
+
if (btn_rec.hasClass('rec_on')) {
|
|
254
|
+
btn_rec.removeClass('rec_on');
|
|
255
|
+
btn_rec.find('use').attr('href', '#btn_mic');
|
|
256
|
+
// 録音中を停止
|
|
257
|
+
if (agent.recognition) {
|
|
258
|
+
agent.recognition.stop();
|
|
259
|
+
const transcript = user_msg.val();
|
|
260
|
+
transcript && $('#btn_user_msg').click(); // 録音が終了したら自動的にメッセージを送信
|
|
261
|
+
}
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// 録音を開始
|
|
265
|
+
const SpeechRecognition = window.webkitSpeechRecognition || window.SpeechRecognition;
|
|
266
|
+
if (!SpeechRecognition) {
|
|
267
|
+
cmdbox.message({'error':'Speech Recognition API is not supported in this browser.'});
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
btn_rec.addClass('rec_on');
|
|
271
|
+
btn_rec.find('use').attr('href', '#btn_mic_fill');
|
|
272
|
+
let finalTranscript = user_msg.val();
|
|
273
|
+
agent.recognition = new SpeechRecognition();
|
|
274
|
+
agent.recognition.lang = 'ja-JP'; // 言語設定
|
|
275
|
+
agent.recognition.interimResults = true; // 中間結果を取得する
|
|
276
|
+
agent.recognition.maxAlternatives = 1; // 最小の候補数
|
|
277
|
+
agent.recognition.continuous = false; // 連続認識を無効にする
|
|
278
|
+
agent.recognition.onresult = (event) => {
|
|
279
|
+
let interimTranscript = '';
|
|
280
|
+
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
281
|
+
let transcript = event.results[i][0].transcript;
|
|
282
|
+
console.log(`transcript: ${transcript}`);
|
|
283
|
+
if (event.results[i].isFinal) {
|
|
284
|
+
finalTranscript += transcript;
|
|
285
|
+
} else {
|
|
286
|
+
interimTranscript = transcript;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
user_msg.val(finalTranscript + interimTranscript);
|
|
290
|
+
};
|
|
291
|
+
agent.recognition.onerror = (event) => {
|
|
292
|
+
console.error(`Speech Recognition error: ${event.error}`);
|
|
293
|
+
if (event.error === 'no-speech') {
|
|
294
|
+
agent.recognition.restart();
|
|
295
|
+
return; // no-speechエラーは無視して再度認識を開始
|
|
296
|
+
}
|
|
297
|
+
btn_rec.removeClass('rec_on');
|
|
298
|
+
btn_rec.find('use').attr('href', '#btn_mic');
|
|
299
|
+
cmdbox.message({'error':`Speech Recognition error: ${event.error}`});
|
|
300
|
+
};
|
|
301
|
+
agent.recognition.onend = () => {
|
|
302
|
+
// 連続認識を無効にしているので、認識が終了したら再稼働させる。
|
|
303
|
+
console.log(`onend event triggered.`);
|
|
304
|
+
agent.recognition.restart();
|
|
305
|
+
};
|
|
306
|
+
agent.recognition.restart = () => {
|
|
307
|
+
if (btn_rec.hasClass('rec_on')) {
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
try {
|
|
310
|
+
agent.recognition.start();
|
|
311
|
+
} catch (error) {
|
|
312
|
+
console.error(`Error restarting recognition: ${error}`);
|
|
313
|
+
}
|
|
314
|
+
}, 100);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
agent.recognition.start();
|
|
318
|
+
});
|
|
137
319
|
// ws接続
|
|
138
320
|
const protocol = window.location.protocol.endsWith('s:') ? 'wss' : 'ws';
|
|
139
321
|
const host = window.location.hostname;
|
|
@@ -164,7 +346,9 @@ agent.init_form = async () => {
|
|
|
164
346
|
ws.send('ping');
|
|
165
347
|
agent.chat_reconnect_count = 0; // pingが成功したら再接続回数をリセット
|
|
166
348
|
};
|
|
349
|
+
btn_say.prop('disabled', false);
|
|
167
350
|
btn_user_msg.prop('disabled', false);
|
|
351
|
+
btn_rec.prop('disabled', false);
|
|
168
352
|
agent.chat_callback_ping_handler = setInterval(() => {ping();}, ping_interval);
|
|
169
353
|
};
|
|
170
354
|
ws.onerror = (e) => {
|
|
@@ -311,6 +495,47 @@ agent.delete_session = async (session_id) => {
|
|
|
311
495
|
if (res.status != 200) cmdbox.message({'error':`${res.status}: ${res.statusText}`});
|
|
312
496
|
return await res.json();
|
|
313
497
|
}
|
|
498
|
+
agent.llmsetting = async () => {
|
|
499
|
+
const user = await cmdbox.user_info();
|
|
500
|
+
if (!user) {
|
|
501
|
+
cmdbox.message('user not found');
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
const llmsetting_modal = $('#llmsetting_modal').length?$('#llmsetting_modal'):$(`<div id="llmsetting_modal" class="modal" tabindex="-1" style="display: none;" aria-hidden="true"/>`);
|
|
505
|
+
llmsetting_modal.html('');
|
|
506
|
+
const daialog = $(`<div class="modal-dialog modal-lg ui-draggable ui-draggable-handle"/>`).appendTo(llmsetting_modal);
|
|
507
|
+
const form = $(`<form id="llmsetting_form" class="modal-content novalidate"/>`).appendTo(daialog);
|
|
508
|
+
const header = $(`<div class="modal-header"/>`).appendTo(form);
|
|
509
|
+
header.append('<h5 class="modal-title">LLM Setting</h5>');
|
|
510
|
+
header.append('<button type="button" class="btn btn_close p-0 m-0" data-bs-dismiss="modal" aria-label="Close" style="margin-left: 0px;">'
|
|
511
|
+
+'<svg class="bi bi-x" width="24" height="24" fill="currentColor"><use href="#btn_x"></use></svg>'
|
|
512
|
+
+'</button>');
|
|
513
|
+
const body = $(`<div class="modal-body"/>`).appendTo(form);
|
|
514
|
+
const row_content = $(`<div class="row row_content"/>`).appendTo(body);
|
|
515
|
+
const appid = $(`.navbar-brand`).text();
|
|
516
|
+
const llmsetting_choices = async () => {
|
|
517
|
+
const res = await fetch('agent/llmsetting');
|
|
518
|
+
if (res.status != 200) cmdbox.message({'error':`${res.status}: ${res.statusText}`});
|
|
519
|
+
return await res.json();
|
|
520
|
+
};
|
|
521
|
+
const llmsetting_rows = await llmsetting_choices();
|
|
522
|
+
row_content.html('');
|
|
523
|
+
// 表示オプションを追加
|
|
524
|
+
llmsetting_rows.filter(row => !row.hide).forEach((row, i) => cmdbox.add_form_func(i, llmsetting_modal, row_content, row, null));
|
|
525
|
+
// 高度なオプションを表示するリンクを追加
|
|
526
|
+
const show_link = $('<div class="text-center card-hover mb-3"><a href="#">[ advanced options ]</a></div>');
|
|
527
|
+
show_link.click(() => row_content.find('.row_content_hide').toggle());
|
|
528
|
+
row_content.append(show_link);
|
|
529
|
+
// 非表示オプションを追加
|
|
530
|
+
llmsetting_rows.filter(row => row.hide).forEach((row, i) => cmdbox.add_form_func(i, llmsetting_modal, row_content, row, null));
|
|
531
|
+
// フッターを追加
|
|
532
|
+
const footer = $(`<div class="modal-footer"/>`).appendTo(form);
|
|
533
|
+
// 閉じるボタンを追加
|
|
534
|
+
const close_btn = $('<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>').appendTo(footer);
|
|
535
|
+
llmsetting_modal.appendTo('body');
|
|
536
|
+
daialog.draggable({cursor:'move',cancel:'.modal-body'});
|
|
537
|
+
llmsetting_modal.modal('show');
|
|
538
|
+
};
|
|
314
539
|
$(() => {
|
|
315
540
|
// カラーモード対応
|
|
316
541
|
cmdbox.change_color_mode();
|
|
@@ -262,24 +262,6 @@ cmdbox.editapikey = async () => {
|
|
|
262
262
|
daialog.draggable({cursor:'move',cancel:'.modal-body'});
|
|
263
263
|
editapikey_modal.modal('show');
|
|
264
264
|
};
|
|
265
|
-
cmdbox.agentsetting = async () => {
|
|
266
|
-
const user = await cmdbox.user_info();
|
|
267
|
-
if (!user) {
|
|
268
|
-
cmdbox.message('user not found');
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
const agentsetting_modal = $('#agentsetting_modal').length?$('#agentsetting_modal'):$(`<div id="agentsetting_modal" class="modal" tabindex="-1" style="display: none;" aria-hidden="true"/>`);
|
|
272
|
-
agentsetting_modal.html('');
|
|
273
|
-
const daialog = $(`<div class="modal-dialog ui-draggable ui-draggable-handle"/>`).appendTo(agentsetting_modal);
|
|
274
|
-
const form = $(`<form id="agentsetting_form" class="modal-content novalidate"/>`).appendTo(daialog);
|
|
275
|
-
const header = $(`<div class="modal-header"/>`).appendTo(form);
|
|
276
|
-
header.append('<h5 class="modal-title">Agent Setting</h5>');
|
|
277
|
-
header.append('<button type="button" class="btn btn_close p-0 m-0" data-bs-dismiss="modal" aria-label="Close" style="margin-left: 0px;">'
|
|
278
|
-
+'<svg class="bi bi-x" width="24" height="24" fill="currentColor"><use href="#btn_x"></use></svg>'
|
|
279
|
-
+'</button>');
|
|
280
|
-
const body = $(`<div class="modal-body"/>`).appendTo(form);
|
|
281
|
-
const row_content = $(`<div class="row row_content"/>`).appendTo(body);
|
|
282
|
-
};
|
|
283
265
|
/**
|
|
284
266
|
* 現在のユーザーのパスワード変更
|
|
285
267
|
*/
|
|
@@ -409,10 +391,6 @@ $(()=>{
|
|
|
409
391
|
const editapikey_item = $(`<li><a class="dropdown-item editapikey-menu-item" href="#" onclick="cmdbox.editapikey();">Edit ApiKey</a></li>`);
|
|
410
392
|
user_info_menu.find('.dropdown-menu').append(editapikey_item);
|
|
411
393
|
}
|
|
412
|
-
/*if (!user_info_menu.find('.dropdown-menu .agentsetting-menu-item').length) {
|
|
413
|
-
const agentsetting_item = $(`<li><a class="dropdown-item agentsetting-menu-item" href="#" onclick="cmdbox.agentsetting();">Agent Setting</a></li>`);
|
|
414
|
-
user_info_menu.find('.dropdown-menu').append(agentsetting_item);
|
|
415
|
-
}*/
|
|
416
394
|
if (!user_info_menu.find('.dropdown-menu .signout-menu-item').length) {
|
|
417
395
|
const parts = location.pathname.split('/');
|
|
418
396
|
const sitepath = parts[parts.length-1];
|
|
@@ -1282,6 +1260,11 @@ cmdbox.add_form_func = (i, cmd_modal, row_content, row, next_elem, lcolsize=12,
|
|
|
1282
1260
|
}
|
|
1283
1261
|
else {
|
|
1284
1262
|
// 選択肢がある場合
|
|
1263
|
+
let select_html = '<select class="form-select row_content_template_select"></select>';
|
|
1264
|
+
if (row.choice_edit){
|
|
1265
|
+
select_html = `<input type="text" class="form-control row_content_key row_content_template_input">`;
|
|
1266
|
+
select_html+= `<datalist class="row_content_template_select"></datalist>`;
|
|
1267
|
+
}
|
|
1285
1268
|
if(row.type=='dict') {
|
|
1286
1269
|
if (Array.isArray(row.choice)) {
|
|
1287
1270
|
elem = $(`<div class="col-${lcolsize} mb-3">` // row_content_template_dict_choice
|
|
@@ -1289,7 +1272,7 @@ cmdbox.add_form_func = (i, cmd_modal, row_content, row, next_elem, lcolsize=12,
|
|
|
1289
1272
|
+'<label class="input-group-text row_content_template_title">title</label>'
|
|
1290
1273
|
+'<input type="text" class="form-control row_content_key row_content_template_input">'
|
|
1291
1274
|
+'<label class="input-group-text">=</label>'
|
|
1292
|
-
+
|
|
1275
|
+
+ select_html
|
|
1293
1276
|
+'</div></div>');
|
|
1294
1277
|
}
|
|
1295
1278
|
else {
|
|
@@ -1298,14 +1281,14 @@ cmdbox.add_form_func = (i, cmd_modal, row_content, row, next_elem, lcolsize=12,
|
|
|
1298
1281
|
+'<label class="input-group-text row_content_template_title">title</label>'
|
|
1299
1282
|
+'<select class="form-select row_content_key row_content_template_select"></select>'
|
|
1300
1283
|
+'<label class="input-group-text">=</label>'
|
|
1301
|
-
+
|
|
1284
|
+
+ select_html
|
|
1302
1285
|
+'</div></div>');
|
|
1303
1286
|
}
|
|
1304
1287
|
} else {
|
|
1305
1288
|
elem = $(`<div class="col-${scolsize} mb-3">` // row_content_template_choice
|
|
1306
1289
|
+'<div class="input-group">'
|
|
1307
1290
|
+'<label class="input-group-text row_content_template_title">title</label>'
|
|
1308
|
-
+
|
|
1291
|
+
+ select_html
|
|
1309
1292
|
+'</div></div>');
|
|
1310
1293
|
}
|
|
1311
1294
|
if (next_elem) next_elem.after(elem);
|
|
@@ -1386,6 +1369,14 @@ cmdbox.add_form_func = (i, cmd_modal, row_content, row, next_elem, lcolsize=12,
|
|
|
1386
1369
|
if (row.web=='mask' || row.web=='readonly') {
|
|
1387
1370
|
input_elem.attr('disabled', 'disabled');
|
|
1388
1371
|
}
|
|
1372
|
+
// 選択肢編集可能な場合はinputのIDを参考にdatalistのIDを設定
|
|
1373
|
+
if (row.choice_edit) {
|
|
1374
|
+
input_elem.each((i, e) => {
|
|
1375
|
+
const elem = $(e), elem_id = elem.attr('id');
|
|
1376
|
+
elem.next().attr('id', elem_id + '_options');
|
|
1377
|
+
elem.attr('list', elem_id + '_options');
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1389
1380
|
// ファイルタイプの場合はファイラーモーダルを開くボタンを追加
|
|
1390
1381
|
if(row.type=='file'){
|
|
1391
1382
|
const btn = $('<button class="btn btn-secondary" type="button">file</button>');
|
|
@@ -1456,6 +1447,10 @@ cmdbox.add_form_func = (i, cmd_modal, row_content, row, next_elem, lcolsize=12,
|
|
|
1456
1447
|
} else {
|
|
1457
1448
|
title.addClass('text-decoration-underline');
|
|
1458
1449
|
}
|
|
1450
|
+
if (row.opt=='help') {
|
|
1451
|
+
elem.find(':input').prop('disabled', true);
|
|
1452
|
+
elem.find('.row_content_template_title').remove();
|
|
1453
|
+
}
|
|
1459
1454
|
}
|
|
1460
1455
|
/**
|
|
1461
1456
|
* コマンド選択肢取得
|
|
@@ -118,5 +118,23 @@ init_svgicons = () => {
|
|
|
118
118
|
`<symbol id="azure" viewBox="0 0 16 16">`
|
|
119
119
|
+`<path d="M7.462 0H0v7.19h7.462zM16 0H8.538v7.19H16zM7.462 8.211H0V16h7.462zm8.538 0H8.538V16H16z"/>`
|
|
120
120
|
+`</symbol>`);
|
|
121
|
+
svgicons.insertAdjacentHTML('beforeend',
|
|
122
|
+
`<symbol id="btn_megaphone" viewBox="0 0 16 16">`
|
|
123
|
+
+`<path d="M13 2.5a1.5 1.5 0 0 1 3 0v11a1.5 1.5 0 0 1-3 0v-.214c-2.162-1.241-4.49-1.843-6.912-2.083l.405 2.712A1 1 0 0 1 5.51 15.1h-.548a1 1 0 0 1-.916-.599l-1.85-3.49-.202-.003A2.014 2.014 0 0 1 0 9V7a2.02 2.02 0 0 1 1.992-2.013 75 75 0 0 0 2.483-.075c3.043-.154 6.148-.849 8.525-2.199zm1 0v11a.5.5 0 0 0 1 0v-11a.5.5 0 0 0-1 0m-1 1.35c-2.344 1.205-5.209 1.842-8 2.033v4.233q.27.015.537.036c2.568.189 5.093.744 7.463 1.993zm-9 6.215v-4.13a95 95 0 0 1-1.992.052A1.02 1.02 0 0 0 1 7v2c0 .55.448 1.002 1.006 1.009A61 61 0 0 1 4 10.065m-.657.975 1.609 3.037.01.024h.548l-.002-.014-.443-2.966a68 68 0 0 0-1.722-.082z"/>`
|
|
124
|
+
+`</symbol>`);
|
|
125
|
+
svgicons.insertAdjacentHTML('beforeend',
|
|
126
|
+
`<symbol id="btn_megaphone_fill" viewBox="0 0 16 16">`
|
|
127
|
+
+`<path d="M13 2.5a1.5 1.5 0 0 1 3 0v11a1.5 1.5 0 0 1-3 0zm-1 .724c-2.067.95-4.539 1.481-7 1.656v6.237a25 25 0 0 1 1.088.085c2.053.204 4.038.668 5.912 1.56zm-8 7.841V4.934c-.68.027-1.399.043-2.008.053A2.02 2.02 0 0 0 0 7v2c0 1.106.896 1.996 1.994 2.009l.496.008a64 64 0 0 1 1.51.048m1.39 1.081q.428.032.85.078l.253 1.69a1 1 0 0 1-.983 1.187h-.548a1 1 0 0 1-.916-.599l-1.314-2.48a66 66 0 0 1 1.692.064q.491.026.966.06"/>`
|
|
128
|
+
+`</symbol>`);
|
|
129
|
+
svgicons.insertAdjacentHTML('beforeend',
|
|
130
|
+
`<symbol id="btn_mic" viewBox="0 0 16 16">`
|
|
131
|
+
+`<path d="M3.5 6.5A.5.5 0 0 1 4 7v1a4 4 0 0 0 8 0V7a.5.5 0 0 1 1 0v1a5 5 0 0 1-4.5 4.975V15h3a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1h3v-2.025A5 5 0 0 1 3 8V7a.5.5 0 0 1 .5-.5"/>`
|
|
132
|
+
+`<path d="M10 8a2 2 0 1 1-4 0V3a2 2 0 1 1 4 0zM8 0a3 3 0 0 0-3 3v5a3 3 0 0 0 6 0V3a3 3 0 0 0-3-3"/>`
|
|
133
|
+
+`</symbol>`);
|
|
134
|
+
svgicons.insertAdjacentHTML('beforeend',
|
|
135
|
+
`<symbol id="btn_mic_fill" viewBox="0 0 16 16">`
|
|
136
|
+
+`<path d="M5 3a3 3 0 0 1 6 0v5a3 3 0 0 1-6 0z"/>`
|
|
137
|
+
+`<path d="M3.5 6.5A.5.5 0 0 1 4 7v1a4 4 0 0 0 8 0V7a.5.5 0 0 1 1 0v1a5 5 0 0 1-4.5 4.975V15h3a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1h3v-2.025A5 5 0 0 1 3 8V7a.5.5 0 0 1 .5-.5"/>`
|
|
138
|
+
+`</symbol>`);
|
|
121
139
|
};
|
|
122
140
|
init_svgicons();
|