aig-agent-scan 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. agent_scan/__init__.py +16 -0
  2. agent_scan/__main__.py +4 -0
  3. agent_scan/config/provider_config_en.json +254 -0
  4. agent_scan/config/provider_config_zh.json +254 -0
  5. agent_scan/core/__init__.py +18 -0
  6. agent_scan/core/agent.py +456 -0
  7. agent_scan/core/agent_adapter/__init__.py +18 -0
  8. agent_scan/core/agent_adapter/adapter.py +1662 -0
  9. agent_scan/core/agent_adapter/connectivity.py +23 -0
  10. agent_scan/core/agent_adapter/connectivity_schema.xml +32 -0
  11. agent_scan/core/agent_adapter/providers.yaml +292 -0
  12. agent_scan/core/base_agent.py +385 -0
  13. agent_scan/core/report/__init__.py +42 -0
  14. agent_scan/core/report/models.py +90 -0
  15. agent_scan/core/report/report.py +359 -0
  16. agent_scan/main.py +276 -0
  17. agent_scan/prompt/skills/agentic-supply-chain-detection/SKILL.md +84 -0
  18. agent_scan/prompt/skills/authorization-bypass-detection/SKILL.md +81 -0
  19. agent_scan/prompt/skills/cascading-failure-detection/SKILL.md +80 -0
  20. agent_scan/prompt/skills/data-leakage-detection/SKILL.md +85 -0
  21. agent_scan/prompt/skills/direct-injection-detection/SKILL.md +78 -0
  22. agent_scan/prompt/skills/file-path-traversal-detection/SKILL.md +96 -0
  23. agent_scan/prompt/skills/hardcoded-secret-detection/SKILL.md +97 -0
  24. agent_scan/prompt/skills/human-agent-trust-exploit-detection/SKILL.md +93 -0
  25. agent_scan/prompt/skills/indirect-injection-detection/SKILL.md +91 -0
  26. agent_scan/prompt/skills/inter-agent-comm-security-detection/SKILL.md +91 -0
  27. agent_scan/prompt/skills/memory-poisoning-detection/SKILL.md +95 -0
  28. agent_scan/prompt/skills/memory-rag-poisoning-detection/SKILL.md +174 -0
  29. agent_scan/prompt/skills/owasp-asi/SKILL.md +95 -0
  30. agent_scan/prompt/skills/tool-abuse-detection/SKILL.md +165 -0
  31. agent_scan/prompt/skills/unexpected-code-execution-detection/SKILL.md +82 -0
  32. agent_scan/prompt/skills/web-exfiltration-detection/SKILL.md +130 -0
  33. agent_scan/prompt/system/agent_security_reviewer.md +204 -0
  34. agent_scan/prompt/system/agent_vulnerability_detector.md +123 -0
  35. agent_scan/prompt/system/agents/build_preview.md +106 -0
  36. agent_scan/prompt/system/agents/code_audit.md +185 -0
  37. agent_scan/prompt/system/agents/dynamic/general_analyzing_prompt_template.md +83 -0
  38. agent_scan/prompt/system/agents/dynamic/malicious_behaviour_testing.md +108 -0
  39. agent_scan/prompt/system/agents/dynamic/project_summary.md +43 -0
  40. agent_scan/prompt/system/agents/dynamic/system_prompt.md +8 -0
  41. agent_scan/prompt/system/agents/dynamic/vulnerability_testing.md +216 -0
  42. agent_scan/prompt/system/agents/dynamic_verification.md +188 -0
  43. agent_scan/prompt/system/agents/mcp_opera.md +104 -0
  44. agent_scan/prompt/system/agents/vuln_review.md +253 -0
  45. agent_scan/prompt/system/compact.md +79 -0
  46. agent_scan/prompt/system/format_report.md +15 -0
  47. agent_scan/prompt/system/main.md +88 -0
  48. agent_scan/prompt/system/next_prompt.md +1 -0
  49. agent_scan/prompt/system/project_summary.md +178 -0
  50. agent_scan/prompt/system/skill_runner.md +128 -0
  51. agent_scan/prompt/system/system_prompt.md +76 -0
  52. agent_scan/py.typed +0 -0
  53. agent_scan/tools/__init__.py +42 -0
  54. agent_scan/tools/batch/__init__.py +19 -0
  55. agent_scan/tools/batch/batch.py +168 -0
  56. agent_scan/tools/batch/batch_schema.xml +41 -0
  57. agent_scan/tools/dialogue/__init__.py +20 -0
  58. agent_scan/tools/dialogue/dialogue.py +73 -0
  59. agent_scan/tools/dialogue/dialogue_schema.xml +20 -0
  60. agent_scan/tools/dialogue/scan.py +324 -0
  61. agent_scan/tools/dialogue/scan_schema.xml +76 -0
  62. agent_scan/tools/dispatcher.py +63 -0
  63. agent_scan/tools/finish/__init__.py +19 -0
  64. agent_scan/tools/finish/finish_actions.py +35 -0
  65. agent_scan/tools/finish/finish_actions_schema.xml +11 -0
  66. agent_scan/tools/registry.py +188 -0
  67. agent_scan/tools/skill/__init__.py +19 -0
  68. agent_scan/tools/skill/skill.py +203 -0
  69. agent_scan/tools/skill/skill_schema.xml +56 -0
  70. agent_scan/tools/task/__init__.py +19 -0
  71. agent_scan/tools/task/task.py +242 -0
  72. agent_scan/tools/task/task_schema.xml +48 -0
  73. agent_scan/tools/test_dispatcher.py +96 -0
  74. agent_scan/tools/thinking/__init__.py +19 -0
  75. agent_scan/tools/thinking/thinking_actions.py +73 -0
  76. agent_scan/tools/thinking/thinking_actions_schema.xml +85 -0
  77. agent_scan/utils/__init__.py +18 -0
  78. agent_scan/utils/aig_logger.py +181 -0
  79. agent_scan/utils/config.py +65 -0
  80. agent_scan/utils/extract_vuln.py +233 -0
  81. agent_scan/utils/file_utils.py +333 -0
  82. agent_scan/utils/llm.py +206 -0
  83. agent_scan/utils/llm_manager.py +253 -0
  84. agent_scan/utils/logging.py +50 -0
  85. agent_scan/utils/mcp_tools.py +357 -0
  86. agent_scan/utils/parse.py +269 -0
  87. agent_scan/utils/path_utils.py +174 -0
  88. agent_scan/utils/project_analyzer.py +138 -0
  89. agent_scan/utils/prompt_manager.py +71 -0
  90. agent_scan/utils/todo_manager.py +296 -0
  91. agent_scan/utils/tool_context.py +154 -0
  92. aig_agent_scan-0.1.0.dist-info/METADATA +438 -0
  93. aig_agent_scan-0.1.0.dist-info/RECORD +96 -0
  94. aig_agent_scan-0.1.0.dist-info/WHEEL +5 -0
  95. aig_agent_scan-0.1.0.dist-info/entry_points.txt +2 -0
  96. aig_agent_scan-0.1.0.dist-info/top_level.txt +1 -0
agent_scan/__init__.py ADDED
@@ -0,0 +1,16 @@
1
+ """aig-agent-scan - AI Agent Security Scanning Tool.
2
+
3
+ A dynamic black-box security testing tool for running AI Agent platforms
4
+ (e.g., Dify, Coze, OpenAI-compatible applications). It connects to the target
5
+ agent via API, sends crafted test prompts, and analyzes responses to discover
6
+ security vulnerabilities.
7
+
8
+ Public API:
9
+ from agent_scan.core.agent import Agent
10
+ from agent_scan.utils.llm import LLM
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ __version__ = "0.1.0"
16
+ __all__ = ["__version__"]
agent_scan/__main__.py ADDED
@@ -0,0 +1,4 @@
1
+ from agent_scan.main import cli
2
+
3
+ if __name__ == "__main__":
4
+ cli()
@@ -0,0 +1,254 @@
1
+ {
2
+ "http": {
3
+ "name": "HTTP Endpoint",
4
+ "icon": "/images/agents-icon/http.webp",
5
+ "description": "Configure HTTP endpoint to send requests",
6
+ "fields": [
7
+ {
8
+ "field": "label",
9
+ "label": "Agent Name",
10
+ "type": "text",
11
+ "required": true,
12
+ "placeholder": "Enter a descriptive name for this agent(Letters and numbers only)",
13
+ "description": "A descriptive name for this agent"
14
+ },
15
+ {
16
+ "field": "url",
17
+ "label": "URL",
18
+ "type": "text",
19
+ "required": true,
20
+ "placeholder": "https://api.example.com/chat",
21
+ "description": "The HTTP endpoint URL to send requests to"
22
+ },
23
+ {
24
+ "field": "method",
25
+ "label": "HTTP Method",
26
+ "type": "select",
27
+ "required": true,
28
+ "options": [
29
+ { "label": "POST", "value": "POST" },
30
+ { "label": "GET", "value": "GET" },
31
+ { "label": "PUT", "value": "PUT" },
32
+ { "label": "PATCH", "value": "PATCH" },
33
+ { "label": "DELETE", "value": "DELETE" }
34
+ ],
35
+ "defaultValue": "POST",
36
+ "description": "HTTP request method"
37
+ },
38
+ {
39
+ "field": "headers",
40
+ "label": "Headers",
41
+ "type": "json",
42
+ "required": false,
43
+ "placeholder": "{\n \"Content-Type\": \"application/json\"\n}",
44
+ "defaultValue": "{\n \"Content-Type\": \"application/json\"\n}",
45
+ "rows": 4,
46
+ "description": "HTTP headers in JSON format"
47
+ },
48
+ {
49
+ "field": "body",
50
+ "label": "Request Body",
51
+ "type": "textarea",
52
+ "required": false,
53
+ "placeholder": "{\n \"message\": \"{{prompt}}\"\n}",
54
+ "defaultValue": "{\n \"message\": \"{{prompt}}\"\n}",
55
+ "rows": 6,
56
+ "description": "Request body template. Use {{prompt}} for the test input"
57
+ },
58
+ {
59
+ "field": "transform_response",
60
+ "label": "Response Parser",
61
+ "type": "text",
62
+ "required": false,
63
+ "placeholder": "json.choices[0].message.content",
64
+ "description": "JSONPath to extract the response (optional)"
65
+ },
66
+ {
67
+ "field": "timeout_ms",
68
+ "label": "Timeout (ms)",
69
+ "type": "number",
70
+ "required": false,
71
+ "min": 1000,
72
+ "max": 300000,
73
+ "step": 1000,
74
+ "defaultValue": 30000,
75
+ "description": "Request timeout in milliseconds"
76
+ }
77
+ ]
78
+ },
79
+ "dify": {
80
+ "name": "Dify AI",
81
+ "icon": "/images/agents-icon/dify.webp",
82
+ "description": "Configure Dify AI platform",
83
+ "fields": [
84
+ {
85
+ "field": "label",
86
+ "label": "Agent Name",
87
+ "type": "text",
88
+ "required": true,
89
+ "placeholder": "Enter a descriptive name for this agent(Letters and numbers only)",
90
+ "description": "A descriptive name for this agent"
91
+ },
92
+ {
93
+ "field": "extra.dify_type",
94
+ "label": "Dify Endpoint Type",
95
+ "type": "select",
96
+ "required": false,
97
+ "options": [
98
+ { "label": "Chat Messages", "value": "chat" },
99
+ { "label": "Workflow", "value": "workflow" }
100
+ ],
101
+ "defaultValue": "chat",
102
+ "description": "Chat Messages for conversational apps, Workflow for workflow execution"
103
+ },
104
+ {
105
+ "field": "apiBaseUrl",
106
+ "label": "API Base URL",
107
+ "type": "text",
108
+ "required": false,
109
+ "placeholder": "https://api.dify.ai/v1",
110
+ "description": "Dify API base URL. Leave empty to use default"
111
+ },
112
+ {
113
+ "field": "apiKey",
114
+ "label": "API-Key",
115
+ "type": "password",
116
+ "required": true,
117
+ "placeholder": "app-xxxx",
118
+ "description": "Dify API-Key"
119
+ },
120
+ {
121
+ "field": "extra.user",
122
+ "label": "User ID",
123
+ "type": "text",
124
+ "required": false,
125
+ "defaultValue": "agent-user",
126
+ "description": "User identifier for the conversation"
127
+ },
128
+ {
129
+ "field": "extra.conversation_id",
130
+ "label": "Conversation ID",
131
+ "type": "text",
132
+ "required": false,
133
+ "placeholder": "Leave empty to start a new conversation",
134
+ "description": "Leave empty to start a new conversation, or provide an existing conversation ID"
135
+ },
136
+ {
137
+ "field": "extra.inputs",
138
+ "label": "Custom Inputs",
139
+ "type": "json",
140
+ "required": false,
141
+ "placeholder": "{}",
142
+ "defaultValue": "{}",
143
+ "rows": 4,
144
+ "description": "Custom inputs that will be passed to the Dify app/workflow (JSON format)"
145
+ },
146
+ {
147
+ "field": "timeout_ms",
148
+ "label": "Timeout (ms)",
149
+ "type": "number",
150
+ "required": false,
151
+ "min": 1000,
152
+ "max": 300000,
153
+ "step": 1000,
154
+ "defaultValue": 60000,
155
+ "description": "Request timeout in milliseconds"
156
+ }
157
+ ]
158
+ },
159
+ "coze": {
160
+ "name": "Coze AI",
161
+ "icon": "/images/agents-icon/coze.png",
162
+ "description": "Configure Coze AI bot platform",
163
+ "fields": [
164
+ {
165
+ "field": "label",
166
+ "label": "Agent Name",
167
+ "type": "text",
168
+ "required": true,
169
+ "placeholder": "Enter a descriptive name for this agent(Letters and numbers only)",
170
+ "description": "A descriptive name for this agent"
171
+ },
172
+ {
173
+ "field": "extra.coze_region",
174
+ "label": "Coze Region",
175
+ "type": "select",
176
+ "required": false,
177
+ "options": [
178
+ { "label": "China (api.coze.cn)", "value": "coze-cn" },
179
+ { "label": "International (api.coze.com)", "value": "coze-com" }
180
+ ],
181
+ "defaultValue": "coze-cn",
182
+ "description": "Select the Coze API region"
183
+ },
184
+ {
185
+ "field": "extra.bot_id",
186
+ "label": "Bot ID",
187
+ "type": "text",
188
+ "required": true,
189
+ "placeholder": "Enter your Coze Bot ID",
190
+ "description": "Required. Your Coze bot ID from the Coze platform"
191
+ },
192
+ {
193
+ "field": "apiBaseUrl",
194
+ "label": "API Base URL",
195
+ "type": "text",
196
+ "required": false,
197
+ "placeholder": "https://api.coze.cn",
198
+ "description": "Coze API base URL. Leave empty to use default based on region"
199
+ },
200
+ {
201
+ "field": "apiKey",
202
+ "label": "API-Key",
203
+ "type": "password",
204
+ "required": true,
205
+ "placeholder": "pat_xxxx",
206
+ "description": "Coze API-Key"
207
+ },
208
+ {
209
+ "field": "extra.user_id",
210
+ "label": "User ID",
211
+ "type": "text",
212
+ "required": false,
213
+ "defaultValue": "agent-user",
214
+ "description": "User identifier for the conversation"
215
+ },
216
+ {
217
+ "field": "extra.conversation_id",
218
+ "label": "Conversation ID",
219
+ "type": "text",
220
+ "required": false,
221
+ "placeholder": "Leave empty to start a new conversation",
222
+ "description": "Leave empty to start a new conversation, or provide an existing conversation ID"
223
+ },
224
+ {
225
+ "field": "timeout_ms",
226
+ "label": "Timeout (ms)",
227
+ "type": "number",
228
+ "required": false,
229
+ "min": 1000,
230
+ "max": 300000,
231
+ "step": 1000,
232
+ "defaultValue": 120000,
233
+ "description": "Request timeout in milliseconds (default: 120000ms = 2 minutes)"
234
+ }
235
+ ]
236
+ },
237
+ "common": {
238
+ "name": "Common Configuration",
239
+ "description": "Common configuration options for all provider types",
240
+ "fields": [
241
+ {
242
+ "field": "delay",
243
+ "label": "Delay (ms)",
244
+ "type": "number",
245
+ "required": false,
246
+ "min": 0,
247
+ "max": 60000,
248
+ "step": 100,
249
+ "defaultValue": 0,
250
+ "description": "Delay between requests in milliseconds to simulate a real user"
251
+ }
252
+ ]
253
+ }
254
+ }
@@ -0,0 +1,254 @@
1
+ {
2
+ "http": {
3
+ "name": "HTTP接口",
4
+ "icon": "/images/agents-icon/http.webp",
5
+ "description": "配置HTTP端点以发送请求",
6
+ "fields": [
7
+ {
8
+ "field": "label",
9
+ "label": "Agent名称",
10
+ "type": "text",
11
+ "required": true,
12
+ "placeholder": "为此Agent输入自定义名称(支持英文及数字)",
13
+ "description": "此Agent的描述名称"
14
+ },
15
+ {
16
+ "field": "url",
17
+ "label": "URL",
18
+ "type": "text",
19
+ "required": true,
20
+ "placeholder": "https://api.example.com/chat",
21
+ "description": "要发送请求的HTTP端点URL"
22
+ },
23
+ {
24
+ "field": "method",
25
+ "label": "HTTP方法",
26
+ "type": "select",
27
+ "required": true,
28
+ "options": [
29
+ { "label": "POST", "value": "POST" },
30
+ { "label": "GET", "value": "GET" },
31
+ { "label": "PUT", "value": "PUT" },
32
+ { "label": "PATCH", "value": "PATCH" },
33
+ { "label": "DELETE", "value": "DELETE" }
34
+ ],
35
+ "defaultValue": "POST",
36
+ "description": "HTTP请求方法"
37
+ },
38
+ {
39
+ "field": "headers",
40
+ "label": "请求头",
41
+ "type": "json",
42
+ "required": false,
43
+ "placeholder": "{\n \"Content-Type\": \"application/json\"\n}",
44
+ "defaultValue": "{\n \"Content-Type\": \"application/json\"\n}",
45
+ "rows": 4,
46
+ "description": "JSON格式的HTTP请求头"
47
+ },
48
+ {
49
+ "field": "body",
50
+ "label": "请求体",
51
+ "type": "textarea",
52
+ "required": false,
53
+ "placeholder": "{\n \"message\": \"{{prompt}}\"\n}",
54
+ "defaultValue": "{\n \"message\": \"{{prompt}}\"\n}",
55
+ "rows": 6,
56
+ "description": "请求体模板。使用 {{prompt}} 作为测试输入的占位符"
57
+ },
58
+ {
59
+ "field": "transform_response",
60
+ "label": "响应解析器",
61
+ "type": "text",
62
+ "required": false,
63
+ "placeholder": "json.choices[0].message.content",
64
+ "description": "用于提取响应的JSONPath(可选)"
65
+ },
66
+ {
67
+ "field": "timeout_ms",
68
+ "label": "超时时间(毫秒)",
69
+ "type": "number",
70
+ "required": false,
71
+ "min": 1000,
72
+ "max": 300000,
73
+ "step": 1000,
74
+ "defaultValue": 30000,
75
+ "description": "请求超时时间(毫秒)"
76
+ }
77
+ ]
78
+ },
79
+ "dify": {
80
+ "name": "Dify AI",
81
+ "icon": "/images/agents-icon/dify.webp",
82
+ "description": "配置Dify AI平台",
83
+ "fields": [
84
+ {
85
+ "field": "label",
86
+ "label": "Agent名称",
87
+ "type": "text",
88
+ "required": true,
89
+ "placeholder": "为此Agent输入自定义名称(支持英文及数字)",
90
+ "description": "此Agent的描述名称"
91
+ },
92
+ {
93
+ "field": "extra.dify_type",
94
+ "label": "Dify端点类型",
95
+ "type": "select",
96
+ "required": false,
97
+ "options": [
98
+ { "label": "聊天消息", "value": "chat" },
99
+ { "label": "工作流", "value": "workflow" }
100
+ ],
101
+ "defaultValue": "chat",
102
+ "description": "聊天消息用于对话应用,工作流用于工作流执行"
103
+ },
104
+ {
105
+ "field": "apiBaseUrl",
106
+ "label": "API基础URL",
107
+ "type": "text",
108
+ "required": false,
109
+ "placeholder": "https://api.dify.ai/v1",
110
+ "description": "Dify API基础URL。留空使用默认值"
111
+ },
112
+ {
113
+ "field": "apiKey",
114
+ "label": "API-Key",
115
+ "type": "password",
116
+ "required": true,
117
+ "placeholder": "app-xxxx",
118
+ "description": "Dify API-Key"
119
+ },
120
+ {
121
+ "field": "extra.user",
122
+ "label": "用户ID",
123
+ "type": "text",
124
+ "required": false,
125
+ "defaultValue": "agent-user",
126
+ "description": "对话的用户标识符"
127
+ },
128
+ {
129
+ "field": "extra.conversation_id",
130
+ "label": "对话ID",
131
+ "type": "text",
132
+ "required": false,
133
+ "placeholder": "留空开始新对话",
134
+ "description": "留空开始新对话,或提供现有对话ID"
135
+ },
136
+ {
137
+ "field": "extra.inputs",
138
+ "label": "自定义输入",
139
+ "type": "json",
140
+ "required": false,
141
+ "placeholder": "{}",
142
+ "defaultValue": "{}",
143
+ "rows": 4,
144
+ "description": "将传递给Dify应用/工作流的自定义输入(JSON格式)"
145
+ },
146
+ {
147
+ "field": "timeout_ms",
148
+ "label": "超时时间(毫秒)",
149
+ "type": "number",
150
+ "required": false,
151
+ "min": 1000,
152
+ "max": 300000,
153
+ "step": 1000,
154
+ "defaultValue": 60000,
155
+ "description": "请求超时时间(毫秒)"
156
+ }
157
+ ]
158
+ },
159
+ "coze": {
160
+ "name": "Coze AI",
161
+ "icon": "/images/agents-icon/coze.png",
162
+ "description": "配置Coze AI机器人平台",
163
+ "fields": [
164
+ {
165
+ "field": "label",
166
+ "label": "Agent名称",
167
+ "type": "text",
168
+ "required": true,
169
+ "placeholder": "为此Agent输入自定义名称(支持英文及数字)",
170
+ "description": "此Agent的描述名称"
171
+ },
172
+ {
173
+ "field": "extra.coze_region",
174
+ "label": "Coze区域",
175
+ "type": "select",
176
+ "required": false,
177
+ "options": [
178
+ { "label": "中国 (api.coze.cn)", "value": "coze-cn" },
179
+ { "label": "国际 (api.coze.com)", "value": "coze-com" }
180
+ ],
181
+ "defaultValue": "coze-cn",
182
+ "description": "选择Coze API区域"
183
+ },
184
+ {
185
+ "field": "extra.bot_id",
186
+ "label": "Bot ID",
187
+ "type": "text",
188
+ "required": true,
189
+ "placeholder": "输入您的Coze Bot ID",
190
+ "description": "必填。来自Coze平台的Bot ID"
191
+ },
192
+ {
193
+ "field": "apiBaseUrl",
194
+ "label": "API基础URL",
195
+ "type": "text",
196
+ "required": false,
197
+ "placeholder": "https://api.coze.cn",
198
+ "description": "Coze API基础URL。留空根据区域使用默认值"
199
+ },
200
+ {
201
+ "field": "apiKey",
202
+ "label": "API-Key",
203
+ "type": "password",
204
+ "required": true,
205
+ "placeholder": "pat_xxxx",
206
+ "description": "Coze API-Key"
207
+ },
208
+ {
209
+ "field": "extra.user_id",
210
+ "label": "用户ID",
211
+ "type": "text",
212
+ "required": false,
213
+ "defaultValue": "agent-user",
214
+ "description": "对话的用户标识符"
215
+ },
216
+ {
217
+ "field": "extra.conversation_id",
218
+ "label": "对话ID",
219
+ "type": "text",
220
+ "required": false,
221
+ "placeholder": "留空开始新对话",
222
+ "description": "留空开始新对话,或提供现有对话ID"
223
+ },
224
+ {
225
+ "field": "timeout_ms",
226
+ "label": "超时时间(毫秒)",
227
+ "type": "number",
228
+ "required": false,
229
+ "min": 1000,
230
+ "max": 300000,
231
+ "step": 1000,
232
+ "defaultValue": 120000,
233
+ "description": "请求超时时间(毫秒,默认:120000ms = 2分钟)"
234
+ }
235
+ ]
236
+ },
237
+ "common": {
238
+ "name": "通用配置",
239
+ "description": "所有provider类型的通用配置选项",
240
+ "fields": [
241
+ {
242
+ "field": "delay",
243
+ "label": "延迟(毫秒)",
244
+ "type": "number",
245
+ "required": false,
246
+ "min": 0,
247
+ "max": 60000,
248
+ "step": 100,
249
+ "defaultValue": 0,
250
+ "description": "请求之间的延迟时间(毫秒),用于模拟真实用户"
251
+ }
252
+ ]
253
+ }
254
+ }
@@ -0,0 +1,18 @@
1
+ # Copyright (c) 2024-2026 Tencent Zhuque Lab. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Requirement: Any integration or derivative work must explicitly attribute
16
+ # Tencent Zhuque Lab (https://github.com/Tencent/AI-Infra-Guard) in its
17
+ # documentation or user interface, as detailed in the NOTICE file.
18
+