codemie-test-harness 0.1.169__py3-none-any.whl → 0.1.170__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 codemie-test-harness might be problematic. Click here for more details.

@@ -0,0 +1,64 @@
1
+ """Workflow CLI commands for executing and managing workflows."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ import click
7
+
8
+ from codemie_test_harness.tests.utils.client_factory import get_client
9
+ from ..constants import CONSOLE
10
+
11
+
12
+ @click.group(name="workflow")
13
+ def workflow_cmd():
14
+ """Interact with CodeMie workflows."""
15
+ pass
16
+
17
+
18
+ @workflow_cmd.command(name="execute")
19
+ @click.option(
20
+ "--workflow-id",
21
+ required=True,
22
+ help="Workflow ID to execute",
23
+ )
24
+ @click.option(
25
+ "--user-input",
26
+ "-i",
27
+ default="",
28
+ help="User input for the workflow execution (optional)",
29
+ )
30
+ def execute_cmd(
31
+ workflow_id: str,
32
+ user_input: str,
33
+ ):
34
+ """Execute a workflow.
35
+
36
+ Example:
37
+ codemie-test-harness workflow execute --workflow-id "wf_123"
38
+ codemie-test-harness workflow execute --workflow-id "wf_123" --user-input "process this data"
39
+ """
40
+ try:
41
+ client = get_client()
42
+
43
+ CONSOLE.print(f"[yellow]Executing workflow {workflow_id}...[/yellow]")
44
+ if user_input:
45
+ CONSOLE.print(f"[blue]User input: {user_input}[/blue]")
46
+
47
+ # Execute workflow
48
+ response = client.workflows.run(workflow_id=workflow_id, user_input=user_input)
49
+
50
+ # Display response
51
+ CONSOLE.print("[green]Workflow execution started successfully![/green]")
52
+
53
+ if hasattr(response, "execution_id"):
54
+ CONSOLE.print(f"[cyan]Execution ID: {response.execution_id}[/cyan]")
55
+
56
+ if hasattr(response, "status"):
57
+ CONSOLE.print(f"[cyan]Status: {response.status}[/cyan]")
58
+
59
+ # Display the full response for debugging
60
+ CONSOLE.print(f"[dim]Response: {response}[/dim]")
61
+
62
+ except Exception as e:
63
+ CONSOLE.print(f"[red]Error executing workflow: {e}[/red]")
64
+ raise click.ClickException(str(e))
@@ -12,13 +12,16 @@ CONFIG_FILE = CONFIG_DIR / "test-harness.json"
12
12
  KEY_AUTH_SERVER_URL = "AUTH_SERVER_URL"
13
13
  KEY_AUTH_CLIENT_ID = "AUTH_CLIENT_ID"
14
14
  KEY_AUTH_CLIENT_SECRET = "AUTH_CLIENT_SECRET"
15
+ KEY_AUTH_PASSWORD = "AUTH_PASSWORD"
16
+ KEY_AUTH_USERNAME = "AUTH_USERNAME"
15
17
  KEY_AUTH_REALM_NAME = "AUTH_REALM_NAME"
16
18
  KEY_CODEMIE_API_DOMAIN = "CODEMIE_API_DOMAIN"
17
19
  KEY_MARKS = "PYTEST_MARKS"
18
20
  KEY_XDIST_N = "PYTEST_N"
19
21
  KEY_RERUNS = "PYTEST_RERUNS"
20
22
 
21
- # Integrations / external systems
23
+ # === COMPLETE INTEGRATION CREDENTIALS KEYS ===
24
+ # Version Control Systems (GitLab, GitHub)
22
25
  KEY_GIT_ENV = "GIT_ENV" # e.g. gitlab or github
23
26
  # GitLab
24
27
  KEY_GITLAB_URL = "GITLAB_URL"
@@ -29,14 +32,115 @@ KEY_GITLAB_PROJECT_ID = "GITLAB_PROJECT_ID"
29
32
  KEY_GITHUB_URL = "GITHUB_URL"
30
33
  KEY_GITHUB_TOKEN = "GITHUB_TOKEN"
31
34
  KEY_GITHUB_PROJECT = "GITHUB_PROJECT"
32
- # JIRA
35
+
36
+ # Project Management (JIRA, Confluence)
37
+ # JIRA Server
33
38
  KEY_JIRA_URL = "JIRA_URL"
34
39
  KEY_JIRA_TOKEN = "JIRA_TOKEN"
35
- KEY_JQL = "JQL"
36
- # Confluence
40
+ KEY_JQL = "JIRA_JQL"
41
+ # JIRA Cloud
42
+ KEY_JIRA_CLOUD_URL = "JIRA_CLOUD_URL"
43
+ KEY_JIRA_CLOUD_EMAIL = "JIRA_CLOUD_EMAIL"
44
+ KEY_JIRA_CLOUD_TOKEN = "JIRA_CLOUD_TOKEN"
45
+ KEY_JIRA_CLOUD_JQL = "JIRA_CLOUD_JQL"
46
+ # Confluence Server
37
47
  KEY_CONFLUENCE_URL = "CONFLUENCE_URL"
38
48
  KEY_CONFLUENCE_TOKEN = "CONFLUENCE_TOKEN"
39
- KEY_CQL = "CQL"
49
+ KEY_CQL = "CONFLUENCE_CQL"
50
+ # Confluence Cloud
51
+ KEY_CONFLUENCE_CLOUD_URL = "CONFLUENCE_CLOUD_URL"
52
+ KEY_CONFLUENCE_CLOUD_EMAIL = "CONFLUENCE_CLOUD_EMAIL"
53
+ KEY_CONFLUENCE_CLOUD_TOKEN = "CONFLUENCE_CLOUD_TOKEN"
54
+ KEY_CONFLUENCE_CLOUD_CQL = "CONFLUENCE_CLOUD_CQL"
55
+
56
+ # Cloud Providers (AWS, Azure, GCP)
57
+ # AWS
58
+ KEY_AWS_ACCESS_KEY_ID = "AWS_ACCESS_KEY_ID"
59
+ KEY_AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY"
60
+ KEY_AWS_REGION = "AWS_REGION"
61
+ KEY_AWS_SESSION_TOKEN = "AWS_SESSION_TOKEN"
62
+ # Azure
63
+ KEY_AZURE_CLIENT_ID = "AZURE_CLIENT_ID"
64
+ KEY_AZURE_CLIENT_SECRET = "AZURE_CLIENT_SECRET"
65
+ KEY_AZURE_TENANT_ID = "AZURE_TENANT_ID"
66
+ KEY_AZURE_SUBSCRIPTION_ID = "AZURE_SUBSCRIPTION_ID"
67
+ # GCP
68
+ KEY_GCP_SA_KEY_BASE64 = "GCP_SA_KEY_BASE64"
69
+
70
+ # Development Tools (Azure DevOps, ServiceNow, Keycloak, SonarQube)
71
+ # Azure DevOps
72
+ KEY_AZURE_DEVOPS_URL = "AZURE_DEVOPS_URL"
73
+ KEY_AZURE_DEVOPS_TOKEN = "AZURE_DEVOPS_TOKEN"
74
+ KEY_AZURE_DEVOPS_PROJECT_NAME = "AZURE_DEVOPS_PROJECT_NAME"
75
+ KEY_AZURE_DEVOPS_ORGANIZATION_NAME = "AZURE_DEVOPS_ORGANIZATION_NAME"
76
+ # ServiceNow
77
+ KEY_SERVICENOW_URL = "SERVICENOW_URL"
78
+ KEY_SERVICENOW_TOKEN = "SERVICENOW_TOKEN"
79
+ # Keycloak
80
+ KEY_KEYCLOAK_URL = "KEYCLOAK_URL"
81
+ KEY_KEYCLOAK_REALM = "KEYCLOAK_REALM"
82
+ KEY_KEYCLOAK_CLIENT_ID = "KEYCLOAK_CLIENT_ID"
83
+ KEY_KEYCLOAK_CLIENT_SECRET = "KEYCLOAK_CLIENT_SECRET"
84
+ # SonarQube Server
85
+ KEY_SONAR_URL = "SONAR_URL"
86
+ KEY_SONAR_TOKEN = "SONAR_TOKEN"
87
+ KEY_SONAR_PROJECT_KEY = "SONAR_PROJECT_KEY"
88
+ # SonarCloud
89
+ KEY_SONAR_CLOUD_URL = "SONAR_CLOUD_URL"
90
+ KEY_SONAR_CLOUD_TOKEN = "SONAR_CLOUD_TOKEN"
91
+ KEY_SONAR_CLOUD_PROJECT_KEY = "SONAR_CLOUD_PROJECT_KEY"
92
+
93
+ # Notifications (Email/Gmail, OAuth, Telegram)
94
+ # Email/Gmail
95
+ KEY_GMAIL_URL = "GMAIL_URL"
96
+ KEY_SMTP_USERNAME = "SMTP_USERNAME"
97
+ KEY_SMTP_PASSWORD = "SMTP_PASSWORD"
98
+ # OAuth
99
+ KEY_OAUTH_URL = "OAUTH_URL"
100
+ KEY_OAUTH_CLIENT_ID = "OAUTH_CLIENT_ID"
101
+ KEY_OAUTH_CLIENT_SECRET = "OAUTH_CLIENT_SECRET"
102
+ KEY_OAUTH_REFRESH_TOKEN = "OAUTH_REFRESH_TOKEN"
103
+ # Telegram
104
+ KEY_TELEGRAM_TOKEN = "TELEGRAM_TOKEN"
105
+ KEY_TELEGRAM_CHAT_ID = "TELEGRAM_CHAT_ID"
106
+
107
+ # Research Tools (Kubernetes, Report Portal, Elasticsearch)
108
+ # Kubernetes
109
+ KEY_KUBERNETES_URL = "KUBERNETES_URL"
110
+ KEY_KUBERNETES_TOKEN = "KUBERNETES_TOKEN"
111
+ # Report Portal
112
+ KEY_REPORT_PORTAL_URL = "REPORT_PORTAL_URL"
113
+ KEY_REPORT_PORTAL_API_KEY = "REPORT_PORTAL_API_KEY"
114
+ KEY_REPORT_PORTAL_PROJECT = "REPORT_PORTAL_PROJECT"
115
+ # Elasticsearch
116
+ KEY_ELASTICSEARCH_URL = "ELASTICSEARCH_URL"
117
+ KEY_ELASTICSEARCH_API_KEY_ID = "ELASTICSEARCH_API_KEY_ID"
118
+ KEY_ELASTICSEARCH_API_KEY = "ELASTICSEARCH_API_KEY"
119
+
120
+ # Data Management (SQL databases, LiteLLM)
121
+ # LiteLLM
122
+ KEY_LITE_LLM_API_KEY = "LITE_LLM_API_KEY"
123
+ # MySQL
124
+ KEY_MYSQL_DIALECT = "MYSQL_DIALECT"
125
+ KEY_MYSQL_URL = "MYSQL_URL"
126
+ KEY_MYSQL_PORT = "MYSQL_PORT"
127
+ KEY_MYSQL_DATABASE_NAME = "MYSQL_DATABASE_NAME"
128
+ KEY_MYSQL_USERNAME = "MYSQL_USERNAME"
129
+ KEY_MYSQL_PASSWORD = "MYSQL_PASSWORD"
130
+ # PostgreSQL
131
+ KEY_POSTGRES_DIALECT = "POSTGRES_DIALECT"
132
+ KEY_POSTGRES_URL = "POSTGRES_URL"
133
+ KEY_POSTGRES_PORT = "POSTGRES_PORT"
134
+ KEY_POSTGRES_DATABASE_NAME = "POSTGRES_DATABASE_NAME"
135
+ KEY_POSTGRES_USERNAME = "POSTGRES_USERNAME"
136
+ KEY_POSTGRES_PASSWORD = "POSTGRES_PASSWORD"
137
+ # MSSQL
138
+ KEY_MSSQL_DIALECT = "MSSQL_DIALECT"
139
+ KEY_MSSQL_URL = "MSSQL_URL"
140
+ KEY_MSSQL_PORT = "MSSQL_PORT"
141
+ KEY_MSSQL_DATABASE_NAME = "MSSQL_DATABASE_NAME"
142
+ KEY_MSSQL_USERNAME = "MSSQL_USERNAME"
143
+ KEY_MSSQL_PASSWORD = "MSSQL_PASSWORD"
40
144
 
41
145
  DEFAULT_MARKS = "smoke"
42
146
  DEFAULT_XDIST_N = 8
@@ -46,11 +150,14 @@ AUTH_KEYS = [
46
150
  KEY_AUTH_SERVER_URL,
47
151
  KEY_AUTH_CLIENT_ID,
48
152
  KEY_AUTH_CLIENT_SECRET,
153
+ KEY_AUTH_USERNAME,
154
+ KEY_AUTH_PASSWORD,
49
155
  KEY_AUTH_REALM_NAME,
50
156
  KEY_CODEMIE_API_DOMAIN,
51
157
  ]
52
158
 
53
- INTEGRATION_KEYS = [
159
+ # === CREDENTIAL CATEGORIES ===
160
+ VERSION_CONTROL_KEYS = [
54
161
  KEY_GIT_ENV,
55
162
  KEY_GITLAB_URL,
56
163
  KEY_GITLAB_TOKEN,
@@ -59,10 +166,282 @@ INTEGRATION_KEYS = [
59
166
  KEY_GITHUB_URL,
60
167
  KEY_GITHUB_TOKEN,
61
168
  KEY_GITHUB_PROJECT,
169
+ ]
170
+
171
+ PROJECT_MANAGEMENT_KEYS = [
172
+ # JIRA Server
62
173
  KEY_JIRA_URL,
63
174
  KEY_JIRA_TOKEN,
64
175
  KEY_JQL,
176
+ # JIRA Cloud
177
+ KEY_JIRA_CLOUD_URL,
178
+ KEY_JIRA_CLOUD_EMAIL,
179
+ KEY_JIRA_CLOUD_TOKEN,
180
+ KEY_JIRA_CLOUD_JQL,
181
+ # Confluence Server
65
182
  KEY_CONFLUENCE_URL,
66
183
  KEY_CONFLUENCE_TOKEN,
67
184
  KEY_CQL,
185
+ # Confluence Cloud
186
+ KEY_CONFLUENCE_CLOUD_URL,
187
+ KEY_CONFLUENCE_CLOUD_EMAIL,
188
+ KEY_CONFLUENCE_CLOUD_TOKEN,
189
+ KEY_CONFLUENCE_CLOUD_CQL,
190
+ ]
191
+
192
+ CLOUD_PROVIDERS_KEYS = [
193
+ # AWS
194
+ KEY_AWS_ACCESS_KEY_ID,
195
+ KEY_AWS_SECRET_ACCESS_KEY,
196
+ KEY_AWS_REGION,
197
+ KEY_AWS_SESSION_TOKEN,
198
+ # Azure
199
+ KEY_AZURE_CLIENT_ID,
200
+ KEY_AZURE_CLIENT_SECRET,
201
+ KEY_AZURE_TENANT_ID,
202
+ KEY_AZURE_SUBSCRIPTION_ID,
203
+ # GCP
204
+ KEY_GCP_SA_KEY_BASE64,
205
+ ]
206
+
207
+ DEVELOPMENT_TOOLS_KEYS = [
208
+ # Azure DevOps
209
+ KEY_AZURE_DEVOPS_URL,
210
+ KEY_AZURE_DEVOPS_TOKEN,
211
+ KEY_AZURE_DEVOPS_PROJECT_NAME,
212
+ KEY_AZURE_DEVOPS_ORGANIZATION_NAME,
213
+ # ServiceNow
214
+ KEY_SERVICENOW_URL,
215
+ KEY_SERVICENOW_TOKEN,
216
+ # Keycloak
217
+ KEY_KEYCLOAK_URL,
218
+ KEY_KEYCLOAK_REALM,
219
+ KEY_KEYCLOAK_CLIENT_ID,
220
+ KEY_KEYCLOAK_CLIENT_SECRET,
221
+ # SonarQube Server
222
+ KEY_SONAR_URL,
223
+ KEY_SONAR_TOKEN,
224
+ KEY_SONAR_PROJECT_KEY,
225
+ # SonarCloud
226
+ KEY_SONAR_CLOUD_URL,
227
+ KEY_SONAR_CLOUD_TOKEN,
228
+ KEY_SONAR_CLOUD_PROJECT_KEY,
229
+ ]
230
+
231
+ NOTIFICATIONS_KEYS = [
232
+ # Email/Gmail
233
+ KEY_GMAIL_URL,
234
+ KEY_SMTP_USERNAME,
235
+ KEY_SMTP_PASSWORD,
236
+ # OAuth
237
+ KEY_OAUTH_URL,
238
+ KEY_OAUTH_CLIENT_ID,
239
+ KEY_OAUTH_CLIENT_SECRET,
240
+ KEY_OAUTH_REFRESH_TOKEN,
241
+ # Telegram
242
+ KEY_TELEGRAM_TOKEN,
243
+ KEY_TELEGRAM_CHAT_ID,
244
+ ]
245
+
246
+ RESEARCH_TOOLS_KEYS = [
247
+ # Kubernetes
248
+ KEY_KUBERNETES_URL,
249
+ KEY_KUBERNETES_TOKEN,
250
+ # Report Portal
251
+ KEY_REPORT_PORTAL_URL,
252
+ KEY_REPORT_PORTAL_API_KEY,
253
+ KEY_REPORT_PORTAL_PROJECT,
254
+ # Elasticsearch
255
+ KEY_ELASTICSEARCH_URL,
256
+ KEY_ELASTICSEARCH_API_KEY_ID,
257
+ KEY_ELASTICSEARCH_API_KEY,
68
258
  ]
259
+
260
+ DATA_MANAGEMENT_KEYS = [
261
+ # LiteLLM
262
+ KEY_LITE_LLM_API_KEY,
263
+ # MySQL
264
+ KEY_MYSQL_DIALECT,
265
+ KEY_MYSQL_URL,
266
+ KEY_MYSQL_PORT,
267
+ KEY_MYSQL_DATABASE_NAME,
268
+ KEY_MYSQL_USERNAME,
269
+ KEY_MYSQL_PASSWORD,
270
+ # PostgreSQL
271
+ KEY_POSTGRES_DIALECT,
272
+ KEY_POSTGRES_URL,
273
+ KEY_POSTGRES_PORT,
274
+ KEY_POSTGRES_DATABASE_NAME,
275
+ KEY_POSTGRES_USERNAME,
276
+ KEY_POSTGRES_PASSWORD,
277
+ # MSSQL
278
+ KEY_MSSQL_DIALECT,
279
+ KEY_MSSQL_URL,
280
+ KEY_MSSQL_PORT,
281
+ KEY_MSSQL_DATABASE_NAME,
282
+ KEY_MSSQL_USERNAME,
283
+ KEY_MSSQL_PASSWORD,
284
+ ]
285
+
286
+ # Combined lists for backwards compatibility
287
+ INTEGRATION_KEYS = (
288
+ VERSION_CONTROL_KEYS
289
+ + PROJECT_MANAGEMENT_KEYS
290
+ + CLOUD_PROVIDERS_KEYS
291
+ + DEVELOPMENT_TOOLS_KEYS
292
+ + NOTIFICATIONS_KEYS
293
+ + RESEARCH_TOOLS_KEYS
294
+ + DATA_MANAGEMENT_KEYS
295
+ )
296
+
297
+ # Category mapping for CLI
298
+ CREDENTIAL_CATEGORIES = {
299
+ "version-control": {
300
+ "name": "Version Control Systems",
301
+ "description": "GitLab, GitHub, and other version control platforms",
302
+ "keys": VERSION_CONTROL_KEYS,
303
+ },
304
+ "code-base": {
305
+ "name": "Code Base",
306
+ "description": "SonarQube and code analysis tools",
307
+ "keys": [
308
+ KEY_SONAR_URL,
309
+ KEY_SONAR_TOKEN,
310
+ KEY_SONAR_PROJECT_KEY,
311
+ KEY_SONAR_CLOUD_URL,
312
+ KEY_SONAR_CLOUD_TOKEN,
313
+ KEY_SONAR_CLOUD_PROJECT_KEY,
314
+ ],
315
+ },
316
+ "project-management": {
317
+ "name": "Project Management",
318
+ "description": "JIRA, Confluence, and project management tools",
319
+ "keys": PROJECT_MANAGEMENT_KEYS,
320
+ },
321
+ "cloud": {
322
+ "name": "Cloud",
323
+ "description": "AWS, GCP cloud services and Kubernetes configurations",
324
+ "keys": [
325
+ # AWS
326
+ KEY_AWS_ACCESS_KEY_ID,
327
+ KEY_AWS_SECRET_ACCESS_KEY,
328
+ KEY_AWS_REGION,
329
+ KEY_AWS_SESSION_TOKEN,
330
+ # GCP
331
+ KEY_GCP_SA_KEY_BASE64,
332
+ # Kubernetes
333
+ KEY_KUBERNETES_URL,
334
+ KEY_KUBERNETES_TOKEN,
335
+ # Azure Cloud
336
+ KEY_AZURE_CLIENT_ID,
337
+ KEY_AZURE_CLIENT_SECRET,
338
+ KEY_AZURE_TENANT_ID,
339
+ KEY_AZURE_SUBSCRIPTION_ID,
340
+ ],
341
+ },
342
+ "azure-devops": {
343
+ "name": "Azure DevOps",
344
+ "description": "Azure DevOps and Azure cloud platform services",
345
+ "keys": [
346
+ # Azure DevOps
347
+ KEY_AZURE_DEVOPS_URL,
348
+ KEY_AZURE_DEVOPS_TOKEN,
349
+ KEY_AZURE_DEVOPS_PROJECT_NAME,
350
+ KEY_AZURE_DEVOPS_ORGANIZATION_NAME,
351
+ ],
352
+ },
353
+ "access-management": {
354
+ "name": "Access Management",
355
+ "description": "Keycloak and identity management systems",
356
+ "keys": [
357
+ KEY_KEYCLOAK_URL,
358
+ KEY_KEYCLOAK_REALM,
359
+ KEY_KEYCLOAK_CLIENT_ID,
360
+ KEY_KEYCLOAK_CLIENT_SECRET,
361
+ ],
362
+ },
363
+ "notification-systems": {
364
+ "name": "Notification Systems",
365
+ "description": "Email, OAuth, Telegram, and communication platforms",
366
+ "keys": NOTIFICATIONS_KEYS,
367
+ },
368
+ "data-management": {
369
+ "name": "Data Management",
370
+ "description": "SQL databases, Elasticsearch, and data storage systems",
371
+ "keys": DATA_MANAGEMENT_KEYS
372
+ + [
373
+ KEY_ELASTICSEARCH_URL,
374
+ KEY_ELASTICSEARCH_API_KEY_ID,
375
+ KEY_ELASTICSEARCH_API_KEY,
376
+ ],
377
+ },
378
+ "it-service-management": {
379
+ "name": "IT Service Management",
380
+ "description": "ServiceNow and IT service management platforms",
381
+ "keys": [
382
+ KEY_SERVICENOW_URL,
383
+ KEY_SERVICENOW_TOKEN,
384
+ ],
385
+ },
386
+ "quality-assurance": {
387
+ "name": "Quality Assurance",
388
+ "description": "Report Portal and quality assurance tools",
389
+ "keys": [
390
+ KEY_REPORT_PORTAL_URL,
391
+ KEY_REPORT_PORTAL_API_KEY,
392
+ KEY_REPORT_PORTAL_PROJECT,
393
+ ],
394
+ },
395
+ }
396
+
397
+ # Sensitive fields that should be masked in input/output
398
+ SENSITIVE_KEYS = {
399
+ KEY_AUTH_CLIENT_SECRET,
400
+ KEY_AUTH_PASSWORD,
401
+ KEY_GITLAB_TOKEN,
402
+ KEY_GITHUB_TOKEN,
403
+ KEY_JIRA_TOKEN,
404
+ KEY_JIRA_CLOUD_TOKEN,
405
+ KEY_CONFLUENCE_TOKEN,
406
+ KEY_CONFLUENCE_CLOUD_TOKEN,
407
+ KEY_AWS_SECRET_ACCESS_KEY,
408
+ KEY_AWS_SESSION_TOKEN,
409
+ KEY_AZURE_CLIENT_SECRET,
410
+ KEY_GCP_SA_KEY_BASE64,
411
+ KEY_AZURE_DEVOPS_TOKEN,
412
+ KEY_SERVICENOW_TOKEN,
413
+ KEY_KEYCLOAK_CLIENT_SECRET,
414
+ KEY_SONAR_TOKEN,
415
+ KEY_SONAR_CLOUD_TOKEN,
416
+ KEY_SMTP_PASSWORD,
417
+ KEY_OAUTH_CLIENT_SECRET,
418
+ KEY_OAUTH_REFRESH_TOKEN,
419
+ KEY_TELEGRAM_TOKEN,
420
+ KEY_KUBERNETES_TOKEN,
421
+ KEY_REPORT_PORTAL_API_KEY,
422
+ KEY_ELASTICSEARCH_API_KEY,
423
+ KEY_LITE_LLM_API_KEY,
424
+ KEY_MYSQL_PASSWORD,
425
+ KEY_POSTGRES_PASSWORD,
426
+ KEY_MSSQL_PASSWORD,
427
+ }
428
+
429
+
430
+ def is_sensitive_key(key: str) -> bool:
431
+ """Check if a credential key contains sensitive information."""
432
+ return key in SENSITIVE_KEYS
433
+
434
+
435
+ def mask_sensitive_value(value: str, show_real: bool = False) -> str:
436
+ """Mask sensitive credential values for display.
437
+
438
+ Args:
439
+ value: The value to potentially mask
440
+ show_real: If True, return the real value instead of masking
441
+ """
442
+ if show_real:
443
+ return value
444
+
445
+ if not value or len(value) < 4:
446
+ return "*" * len(value) if value else ""
447
+ return value[:2] + "*" * (len(value) - 4) + value[-2:]
@@ -43,3 +43,12 @@ def ensure_env_from_config(keys: list[str]) -> None:
43
43
  for k in keys:
44
44
  if k not in os.environ and k in cfg:
45
45
  os.environ[k] = str(cfg[k])
46
+
47
+
48
+ def unset_config_key(key: str) -> bool:
49
+ cfg = load_config()
50
+ if key in cfg:
51
+ del cfg[key]
52
+ save_config(cfg)
53
+ return True
54
+ return False
@@ -6,8 +6,8 @@ from codemie_test_harness.tests.test_data.pm_tools_test_data import (
6
6
  RESPONSE_FOR_JIRA_TOOL,
7
7
  CONFLUENCE_TOOL_PROMPT,
8
8
  RESPONSE_FOR_CONFLUENCE_TOOL,
9
- JIRA_CLOUD_TOOL_PROMPT,
10
9
  RESPONSE_FOR_JIRA_CLOUD_TOOL,
10
+ JIRA_CLOUD_TOOL_PROMPT,
11
11
  CONFLUENCE_CLOUD_TOOL_PROMPT,
12
12
  RESPONSE_FOR_CONFLUENCE_CLOUD_TOOL,
13
13
  )
@@ -3,7 +3,7 @@ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
3
3
  WorkflowsPage,
4
4
  )
5
5
  from codemie_test_harness.tests.utils.base_utils import get_random_name
6
- from tests import TEST_USER
6
+ from codemie_test_harness.tests import TEST_USER
7
7
 
8
8
 
9
9
  @pytest.mark.workflow_ui
@@ -183,21 +183,6 @@ class CredentialsManager:
183
183
  "aws_path": "subscription_id",
184
184
  },
185
185
  # === GCP CREDENTIALS ===
186
- "GCP_PROJECT_ID": {
187
- "env": "GCP_PROJECT_ID",
188
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
189
- "aws_path": "projectId",
190
- },
191
- "GCP_CLIENT_EMAIL": {
192
- "env": "GCP_CLIENT_EMAIL",
193
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
194
- "aws_path": "clientEmail",
195
- },
196
- "GCP_PRIVATE_KEY": {
197
- "env": "GCP_PRIVATE_KEY",
198
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
199
- "aws_path": "privateKey",
200
- },
201
186
  "GCP_SA_KEY_BASE64": {
202
187
  "env": "GCP_SA_KEY_BASE64",
203
188
  "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: codemie-test-harness
3
- Version: 0.1.169
3
+ Version: 0.1.170
4
4
  Summary: Autotest for CodeMie backend and UI
5
5
  Author: Anton Yeromin
6
6
  Author-email: anton_yeromin@epam.com
@@ -13,7 +13,7 @@ Requires-Dist: aws-assume-role-lib (>=2.10.0,<3.0.0)
13
13
  Requires-Dist: boto3 (>=1.39.8,<2.0.0)
14
14
  Requires-Dist: click (>=8.1.7,<9.0.0)
15
15
  Requires-Dist: codemie-plugins (>=0.1.123,<0.2.0)
16
- Requires-Dist: codemie-sdk-python (==0.1.169)
16
+ Requires-Dist: codemie-sdk-python (==0.1.170)
17
17
  Requires-Dist: pytest (>=8.4.1,<9.0.0)
18
18
  Requires-Dist: pytest-playwright (>=0.7.0,<0.8.0)
19
19
  Requires-Dist: pytest-reportportal (>=5.5.2,<6.0.0)
@@ -1,13 +1,15 @@
1
1
  codemie_test_harness/.env,sha256=qwCZaT0wIqswimUpuny4SfHOG6FsLClAAtjddztA3GQ,177
2
2
  codemie_test_harness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  codemie_test_harness/cli/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
4
- codemie_test_harness/cli/cli.py,sha256=KayyiNCsfF1dFunqOEwC_DM3c5GWl8E9rx-_Tw5TMwA,5969
4
+ codemie_test_harness/cli/cli.py,sha256=xLYYc8yIZ_6YNccWt5eNNy_-Xcnv3BJP27BTZ63LvxE,4160
5
5
  codemie_test_harness/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- codemie_test_harness/cli/commands/config_cmd.py,sha256=iCV7qJZrESIKZQdg_AmhuPz1EZLN2s-UpbdzzIjrVEU,1353
6
+ codemie_test_harness/cli/commands/assistant_cmd.py,sha256=LuAWMFuZPYdP51dNcqjalur8CHobkSVlt49f97cgJEg,3076
7
+ codemie_test_harness/cli/commands/config_cmd.py,sha256=fmeU3TYmjtbpsbfyEuOmjHDi502xAw4Pc5tWdSfeyVY,22477
7
8
  codemie_test_harness/cli/commands/run_cmd.py,sha256=T5js1hwHKi1QuF-kLwP3c-GMtiO9QO15H3JJc7nzpp4,1052
8
- codemie_test_harness/cli/constants.py,sha256=956_apPJ4MjhnKo1ZtDooXCd2N89J3vyAB-J9-SOr7U,1637
9
+ codemie_test_harness/cli/commands/workflow_cmd.py,sha256=QwT_6DAyjeWBZiamvGuBBi6JKh9Cu-wS756xClWmpzI,1784
10
+ codemie_test_harness/cli/constants.py,sha256=ktce9RjSa3YcsXH4fISbIDhfbek3bVJ5FuWdIcEZsdI,12459
9
11
  codemie_test_harness/cli/runner.py,sha256=5VAL4noqiKrGjo5oYVJKzt4QNmkZFTe1Mw6Mll9uGfc,2349
10
- codemie_test_harness/cli/utils.py,sha256=NlRa8VFbXTbD74jfUaSqbccGNu2R1dUIg8d5SyDTmIM,1136
12
+ codemie_test_harness/cli/utils.py,sha256=CcF3Ww4Aphbh8V3dlUH96-GkL7ccSVCmqra9Yqo5hXE,1304
11
13
  codemie_test_harness/pytest.ini,sha256=Tqi0sGis9Dwhg6Y0OEEx-S8aXRONezUUXsWt6fdjEnA,223
12
14
  codemie_test_harness/tests/__init__.py,sha256=CX5mbH_1RzwetK14moYQ0KCoUBPQMGkI14Fg8tAUJ0A,782
13
15
  codemie_test_harness/tests/assistant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -154,7 +156,7 @@ codemie_test_harness/tests/test_data/openapi.json,sha256=X4uqtfjpTUuMifefQRf8mHI
154
156
  codemie_test_harness/tests/test_data/output_schema_test_data.py,sha256=4l7AvXbMl9hIvoFxu1LPPSGz9hb5Uz2_is4zTm77ARY,261
155
157
  codemie_test_harness/tests/test_data/plugin_tools_test_data.py,sha256=bVamztyQ4bAVo1CRSrtu6f5H-gkjhAN2nq5Jbc0erqM,4168
156
158
  codemie_test_harness/tests/test_data/pm_tools_test_data.py,sha256=ctPwLSJYy7xPg4B-uwAAhRwIogdxTgBn-PPY2rN0llc,3248
157
- codemie_test_harness/tests/test_data/project_management_test_data.py,sha256=Sd5MEO0hnUeyF-WIIGW4qEAHR5hvhJcs0DE1ytqdveM,1692
159
+ codemie_test_harness/tests/test_data/project_management_test_data.py,sha256=oBOh18LbXKntdsifoktc-d-3M7Kyl8j0q7qumdHuTYU,1692
158
160
  codemie_test_harness/tests/test_data/report_portal_tools_test_data.py,sha256=P3Z1B1-iNxXAcMIFlb9robhHQSXQtzSRUz59ivvTrG8,13646
159
161
  codemie_test_harness/tests/test_data/research_tools_test_data.py,sha256=FtOhWp7PbRdw36IUIa46OBbE2wy8yKZkpI6uwCfSoXQ,4745
160
162
  codemie_test_harness/tests/test_data/servicenow_tools_test_data.py,sha256=PKw9zEYSNcQM1KApCSjsBiA_3Py0bNQI7clqw8cmT-s,1983
@@ -226,7 +228,7 @@ codemie_test_harness/tests/ui/workflows/test_edit_workflow.py,sha256=RQIV5fSd3xv
226
228
  codemie_test_harness/tests/ui/workflows/test_workflow_details.py,sha256=PCEiclg1o_EfEbWLs7zAtvGmqwceoOJfb3Y-_sTjpqA,15392
227
229
  codemie_test_harness/tests/ui/workflows/test_workflow_executions_page.py,sha256=4E-dPJrXSMiBiE9ZVHW4Ln6H121KbtEUa-vF1KXPGyU,12667
228
230
  codemie_test_harness/tests/ui/workflows/test_workflow_templates.py,sha256=qDHv5z8NrBGsKx0tiK9aft_M9-98k7TY1OSm1FKPV9s,4680
229
- codemie_test_harness/tests/ui/workflows/test_workflows.py,sha256=-tEYwIze1HNztzhx_yJy9xcwHLAnSZj_vU4UzlwUBfg,3820
231
+ codemie_test_harness/tests/ui/workflows/test_workflows.py,sha256=3QBt03AVL5_QoIMrJMPatG1ZblePV2_P3AJwZcBXDX8,3841
230
232
  codemie_test_harness/tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
233
  codemie_test_harness/tests/utils/assistant_utils.py,sha256=jy3dFF4ZiT22Wippl1a5jIEAAyJ71P0ss8AIHPefz6k,6511
232
234
  codemie_test_harness/tests/utils/aws_parameters_store.py,sha256=YAVpvwElkKZJZvzSVxtOue1Gjs-kvSBS2y5QvIlz484,3267
@@ -234,7 +236,7 @@ codemie_test_harness/tests/utils/base_utils.py,sha256=eDUBV7kj4X-aSVOB7YKHfO9fqP
234
236
  codemie_test_harness/tests/utils/client_factory.py,sha256=xGta0ZaVYzWfwJ4cu3f89KkGc_R5Bq-9lqnhr57x_2w,972
235
237
  codemie_test_harness/tests/utils/constants.py,sha256=ZNyM5wERHFN-c8TCvBcxCdFf0As9TOpr22YvLCMHArE,1116
236
238
  codemie_test_harness/tests/utils/conversation_utils.py,sha256=SWj6TBWOQoX5Yh6Wk63yHQFveRXgK1mpLb3PUKAa57A,648
237
- codemie_test_harness/tests/utils/credentials_manager.py,sha256=cRMs68A7x1A-L3X00N_9GFGXK5UnN58aHkWkMfe6IIM,52816
239
+ codemie_test_harness/tests/utils/credentials_manager.py,sha256=oR3HngDhrrsCCbNZ7AAIu-dKq2tcSA0N0eWqZmZPr9E,52282
238
240
  codemie_test_harness/tests/utils/datasource_utils.py,sha256=_jx1IrRR5rmQxXsal5z4nwX9vgupdVdgNL0vH-2nJ8A,12685
239
241
  codemie_test_harness/tests/utils/env_resolver.py,sha256=25776Aq9oIDcDzGtfFs07lj7eldeFgmsocxeS3RUclE,4280
240
242
  codemie_test_harness/tests/utils/env_utils.py,sha256=9tyVgxKfYqdtSoo9dRTScOZWjAUm82_65JjaKggcwCg,3999
@@ -358,7 +360,7 @@ codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/__init__.
358
360
  codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/test_workflow_with_servicenow_tools.py,sha256=vq6tucNBxiNIQSmIj_pYiiPm0lipU9X3kzeCd6xEbRM,966
359
361
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
362
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/test_workflow_with_vcs_tools.py,sha256=uD2qs361j6Egp4UumfoQ4gC24-NioXfiW0IF53N9hVA,1175
361
- codemie_test_harness-0.1.169.dist-info/METADATA,sha256=PffHy-1ACIQtG2AsNfKTzekxNj-cUh92rs4sKbAd2iw,8998
362
- codemie_test_harness-0.1.169.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
363
- codemie_test_harness-0.1.169.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
364
- codemie_test_harness-0.1.169.dist-info/RECORD,,
363
+ codemie_test_harness-0.1.170.dist-info/METADATA,sha256=q_eS_gM6w7uH0iZYwKZSmZU_uGzK1cG8GMFl7pWVdDI,8998
364
+ codemie_test_harness-0.1.170.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
365
+ codemie_test_harness-0.1.170.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
366
+ codemie_test_harness-0.1.170.dist-info/RECORD,,