Skip to content

Commit cbe81c5

Browse files
Merge main branch with path_utils changes and apply linter fixes
Co-authored-by: kevinbackhouse <4358136+kevinbackhouse@users.noreply.github.com>
1 parent 2164a1a commit cbe81c5

9 files changed

Lines changed: 91 additions & 94 deletions

File tree

src/seclab_taskflows/mcp_servers/codeql_python/mcp_server.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,34 @@
22
# SPDX-License-Identifier: MIT
33

44

5-
import logging
6-
7-
logging.basicConfig(
8-
level=logging.DEBUG,
9-
format="%(asctime)s - %(levelname)s - %(message)s",
10-
filename="logs/mcp_codeql_python.log",
11-
filemode="a",
12-
)
135
import csv
146
import importlib.resources
157
import json
8+
import logging
169
import os
1710
import subprocess
1811
from pathlib import Path
1912

2013
# from mcp.server.fastmcp import FastMCP, Context
2114
from fastmcp import FastMCP # use FastMCP 2.0
22-
23-
# from seclab_taskflow_agent.path_utils import mcp_data_dir
2415
from pydantic import Field
2516
from seclab_taskflow_agent.mcp_servers.codeql.client import _debug_log, run_query
17+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
2618
from sqlalchemy import create_engine
2719
from sqlalchemy.orm import Session
2820

2921
from ..utils import process_repo
3022
from .codeql_sqlite_models import Base, Source
3123

32-
MEMORY = Path(os.getenv("DATA_DIR", default="/app/data"))
33-
CODEQL_DBS_BASE_PATH = Path(os.getenv("CODEQL_DBS_BASE_PATH", default="/app/data"))
34-
# MEMORY = mcp_data_dir('seclab-taskflows', 'codeql', 'DATA_DIR')
35-
# CODEQL_DBS_BASE_PATH = mcp_data_dir('seclab-taskflows', 'codeql', 'CODEQL_DBS_BASE_PATH')
24+
logging.basicConfig(
25+
level=logging.DEBUG,
26+
format="%(asctime)s - %(levelname)s - %(message)s",
27+
filename=log_file_name("mcp_codeql_python.log"),
28+
filemode="a",
29+
)
30+
31+
MEMORY = mcp_data_dir("seclab-taskflows", "codeql", "DATA_DIR")
32+
CODEQL_DBS_BASE_PATH = mcp_data_dir("seclab-taskflows", "codeql", "CODEQL_DBS_BASE_PATH")
3633

3734
mcp = FastMCP("CodeQL-Python")
3835

src/seclab_taskflows/mcp_servers/gh_actions.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_gh_actions.log",
10-
filemode="a",
11-
)
12-
134
import json
5+
import logging
146
import os
15-
from pathlib import Path
167

178
import httpx
189
import yaml
1910
from fastmcp import FastMCP
2011
from pydantic import Field
12+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
2113
from sqlalchemy import create_engine
2214
from sqlalchemy.orm import DeclarativeBase, Mapped, Session, mapped_column
2315

16+
logging.basicConfig(
17+
level=logging.DEBUG,
18+
format="%(asctime)s - %(levelname)s - %(message)s",
19+
filename=log_file_name("mcp_gh_actions.log"),
20+
filemode="a",
21+
)
22+
2423

2524
class Base(DeclarativeBase):
2625
pass
@@ -56,7 +55,7 @@ def __repr__(self):
5655
if not GITHUB_PERSONAL_ACCESS_TOKEN:
5756
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("COPILOT_TOKEN")
5857

59-
ACTIONS_DB_DIR = Path(os.getenv("ACTIONS_DB_DIR", default="/app/my_data"))
58+
ACTIONS_DB_DIR = mcp_data_dir("seclab-taskflows", "gh_actions", "ACTIONS_DB_DIR")
6059

6160
engine = create_engine(f"sqlite:///{os.path.abspath(ACTIONS_DB_DIR)}/actions.db", echo=False)
6261
Base.metadata.create_all(engine, tables=[WorkflowUses.__table__])

src/seclab_taskflows/mcp_servers/gh_code_scanning.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_gh_code_scanning.log",
10-
filemode="a",
11-
)
124
import json
5+
import logging
136
import os
147
import re
158
import zipfile
@@ -20,20 +13,27 @@
2013
import httpx
2114
from fastmcp import FastMCP
2215
from pydantic import Field
16+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
2317
from sqlalchemy import create_engine
2418
from sqlalchemy.orm import Session
2519

2620
from .alert_results_models import AlertFlowGraph, AlertResults, Base
2721

22+
logging.basicConfig(
23+
level=logging.DEBUG,
24+
format="%(asctime)s - %(levelname)s - %(message)s",
25+
filename=log_file_name("mcp_gh_code_scanning.log"),
26+
filemode="a",
27+
)
28+
2829
mcp = FastMCP("GitHubCodeScanning")
2930

3031
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN", default="")
3132
if not GITHUB_PERSONAL_ACCESS_TOKEN:
3233
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("COPILOT_TOKEN")
3334

34-
CODEQL_DBS_BASE_PATH = Path(os.getenv("CODEQL_DBS_BASE_PATH", default="/app/my_data"))
35-
36-
ALERT_RESULTS_DIR = Path(os.getenv("ALERT_RESULTS_DIR", default="/app/my_data"))
35+
CODEQL_DBS_BASE_PATH = mcp_data_dir("seclab-taskflows", "codeql", "CODEQL_DBS_BASE_PATH")
36+
ALERT_RESULTS_DIR = mcp_data_dir("seclab-taskflows", "gh_code_scanning", "ALERT_RESULTS_DIR")
3737

3838

3939
def parse_alert(alert: dict) -> dict:

src/seclab_taskflows/mcp_servers/gh_file_viewer.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_gh_file_viewer.log",
10-
filemode="a",
11-
)
12-
134
import json
5+
import logging
146
import os
157
import tempfile
168
import zipfile
@@ -20,9 +12,17 @@
2012
import httpx
2113
from fastmcp import FastMCP
2214
from pydantic import Field
15+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
2316
from sqlalchemy import create_engine
2417
from sqlalchemy.orm import DeclarativeBase, Mapped, Session, mapped_column
2518

19+
logging.basicConfig(
20+
level=logging.DEBUG,
21+
format="%(asctime)s - %(levelname)s - %(message)s",
22+
filename=log_file_name("mcp_gh_file_viewer.log"),
23+
filemode="a",
24+
)
25+
2626

2727
class Base(DeclarativeBase):
2828
pass
@@ -51,7 +51,7 @@ def __repr__(self):
5151
if not GITHUB_PERSONAL_ACCESS_TOKEN:
5252
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("COPILOT_TOKEN")
5353

54-
SEARCH_RESULT_DIR = Path(os.getenv("SEARCH_RESULTS_DIR", default="/app/my_data"))
54+
SEARCH_RESULT_DIR = mcp_data_dir("seclab-taskflows", "gh_file_viewer", "SEARCH_RESULTS_DIR")
5555

5656
engine = create_engine(f"sqlite:///{os.path.abspath(SEARCH_RESULT_DIR)}/search_result.db", echo=False)
5757
Base.metadata.create_all(engine, tables=[SearchResults.__table__])

src/seclab_taskflows/mcp_servers/ghsa.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
import logging
2-
3-
logging.basicConfig(
4-
level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s", filename="logs/mcp_ghsa.log", filemode="a"
5-
)
6-
71
import json
2+
import logging
83
import re
94
from urllib.parse import parse_qs, urlparse
105

116
from fastmcp import FastMCP
127
from pydantic import Field
8+
from seclab_taskflow_agent.path_utils import log_file_name
139

1410
from .gh_code_scanning import call_api
1511

12+
logging.basicConfig(
13+
level=logging.DEBUG,
14+
format="%(asctime)s - %(levelname)s - %(message)s",
15+
filename=log_file_name("mcp_ghsa.log"),
16+
filemode="a",
17+
)
18+
1619
mcp = FastMCP("GitHubRepoAdvisories")
1720

1821

src/seclab_taskflows/mcp_servers/local_file_viewer.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_local_file_viewer.log",
10-
filemode="a",
11-
)
12-
134
import json
5+
import logging
146
import os
157
import zipfile
168
from pathlib import Path
179

1810
from fastmcp import FastMCP
1911
from pydantic import Field
12+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
13+
14+
logging.basicConfig(
15+
level=logging.DEBUG,
16+
format="%(asctime)s - %(levelname)s - %(message)s",
17+
filename=log_file_name("mcp_local_file_viewer.log"),
18+
filemode="a",
19+
)
2020

2121
mcp = FastMCP("LocalFileViewer")
2222

23-
LOCAL_GH_DIR = Path(os.getenv("LOCAL_GH_DIR", default="/app/my_data"))
23+
LOCAL_GH_DIR = mcp_data_dir("seclab-taskflows", "local_file_viewer", "LOCAL_GH_DIR")
2424

2525

2626
def is_subdirectory(directory, potential_subdirectory):

src/seclab_taskflows/mcp_servers/local_gh_resources.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_local_gh_resources.log",
10-
filemode="a",
11-
)
12-
134
import json
5+
import logging
146
import os
157
from pathlib import Path
168

179
import aiofiles
1810
import httpx
1911
from fastmcp import FastMCP
12+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
13+
14+
logging.basicConfig(
15+
level=logging.DEBUG,
16+
format="%(asctime)s - %(levelname)s - %(message)s",
17+
filename=log_file_name("mcp_local_gh_resources.log"),
18+
filemode="a",
19+
)
2020

2121
mcp = FastMCP("LocalGHResources")
2222

2323
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN")
2424
if not GITHUB_PERSONAL_ACCESS_TOKEN:
2525
GITHUB_PERSONAL_ACCESS_TOKEN = os.getenv("COPILOT_TOKEN")
2626

27-
LOCAL_GH_DIR = Path(os.getenv("LOCAL_GH_DIR", default="/app/my_data"))
27+
LOCAL_GH_DIR = mcp_data_dir("seclab-taskflows", "local_gh_resources", "LOCAL_GH_DIR")
2828

2929

3030
def is_subdirectory(directory, potential_subdirectory):

src/seclab_taskflows/mcp_servers/repo_context.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_repo_context.log",
10-
filemode="a",
11-
)
12-
134
import json
14-
import os
5+
import logging
156
from pathlib import Path
167

178
from fastmcp import FastMCP
189
from pydantic import Field
10+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
1911
from sqlalchemy import create_engine
2012
from sqlalchemy.orm import Session
2113

2214
from .repo_context_models import Application, ApplicationIssue, AuditResult, Base, EntryPoint, UserAction, WebEntryPoint
2315
from .utils import process_repo
2416

25-
MEMORY = Path(os.getenv("REPO_CONTEXT_DIR", default="/app/my_data"))
17+
logging.basicConfig(
18+
level=logging.DEBUG,
19+
format="%(asctime)s - %(levelname)s - %(message)s",
20+
filename=log_file_name("mcp_repo_context.log"),
21+
filemode="a",
22+
)
23+
24+
MEMORY = mcp_data_dir("seclab-taskflows", "repo_context", "REPO_CONTEXT_DIR")
2625

2726

2827
def app_to_dict(result):

src/seclab_taskflows/mcp_servers/report_alert_state.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
# SPDX-FileCopyrightText: 2025 GitHub
22
# SPDX-License-Identifier: MIT
33

4-
import logging
5-
6-
logging.basicConfig(
7-
level=logging.DEBUG,
8-
format="%(asctime)s - %(levelname)s - %(message)s",
9-
filename="logs/mcp_report_alert_state.log",
10-
filemode="a",
11-
)
12-
134
import json
14-
import os
5+
import logging
156
from pathlib import Path
167
from typing import Any
178

189
from fastmcp import FastMCP
1910
from pydantic import Field
11+
from seclab_taskflow_agent.path_utils import log_file_name, mcp_data_dir
2012
from sqlalchemy import create_engine
2113
from sqlalchemy.orm import Session
2214

2315
from .alert_results_models import AlertFlowGraph, AlertResults, Base
2416

17+
logging.basicConfig(
18+
level=logging.DEBUG,
19+
format="%(asctime)s - %(levelname)s - %(message)s",
20+
filename=log_file_name("mcp_report_alert_state.log"),
21+
filemode="a",
22+
)
23+
2524

2625
def result_to_dict(result):
2726
return {
@@ -62,7 +61,7 @@ def remove_line_numbers(location: str) -> str:
6261
return ":".join(parts[:-4])
6362

6463

65-
MEMORY = Path(os.getenv("ALERT_RESULTS_DIR", default="/app/my_data"))
64+
MEMORY = mcp_data_dir("seclab-taskflows", "report_alert_state", "ALERT_RESULTS_DIR")
6665

6766

6867
class ReportAlertStateBackend:

0 commit comments

Comments
 (0)