sdlc-agent-4-enterprise-server 1.53.0 → 1.53.1

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.
package/Dockerfile CHANGED
@@ -100,6 +100,23 @@ ARG MARKITDOWN_MCP_VERSION=0.0.1a7
100
100
  # markdown-exporter-mcp-local has no PyPI release — pin the exact upstream
101
101
  # commit (main @ 2026-04-07) for a hermetic build (git-source analogue of SEC-02).
102
102
  ARG MARKDOWN_EXPORTER_MCP_REF=1429b6a94767a709f7f5119219ca5951042d9d3c
103
+ # SA4E-360 follow-up: Debian's python3-venv/ensurepip bundles setuptools
104
+ # 66.1.1 into EVERY venv it creates, and setuptools itself VENDORS
105
+ # jaraco.context/wheel under setuptools/_vendor — Trivy flags BOTH layers:
106
+ # - setuptools 66.1.1 (ensurepip bundle): CVE-2024-6345 (fix 70.0.0) +
107
+ # CVE-2025-47273 (fix 78.1.1) — 2 HIGH per venv
108
+ # - setuptools 78.1.1 (first bump): vendored jaraco.context 5.3.0
109
+ # (CVE-2026-23949, fix 6.1.0) + vendored wheel 0.45.1 (CVE-2026-24049,
110
+ # fix 0.46.2) — 2 more HIGH per venv, surfaced by a fresh Trivy DB
111
+ # 84.0.0 clears all four: it is free of the two setuptools CVEs and vendors
112
+ # jaraco.context 6.1.0 + wheel 0.46.3 (>= both fix versions). setuptools >=81
113
+ # removed pkg_resources; a grep of both /opt venvs (SA4E-360) showed NO
114
+ # runtime package imports pkg_resources — only setuptools internals and
115
+ # unreachable onnxruntime benchmark scripts — so the removal is safe here.
116
+ # The version is asserted via importlib.metadata (robust across setuptools
117
+ # versions). Drop the override once the pinned base image bundles a fixed
118
+ # setuptools.
119
+ ARG SETUPTOOLS_VERSION=84.0.0
103
120
  # `python3` already exists in base (build toolchain); only the venv/ensurepip
104
121
  # support is missing. One venv per server: independent dependency trees that
105
122
  # are pinned, upgraded and Trivy-scanned separately.
@@ -111,17 +128,34 @@ RUN python3 -m venv /opt/markitdown-venv \
111
128
  "markitdown-mcp==${MARKITDOWN_MCP_VERSION}" \
112
129
  && test -x /opt/markitdown-venv/bin/markitdown-mcp \
113
130
  && /opt/markitdown-venv/bin/python -c "import markitdown_mcp" \
131
+ && /opt/markitdown-venv/bin/pip install --no-cache-dir "setuptools==${SETUPTOOLS_VERSION}" \
132
+ && /opt/markitdown-venv/bin/python -c "from importlib.metadata import version; assert version('setuptools') == '${SETUPTOOLS_VERSION}'" \
114
133
  && /opt/markitdown-venv/bin/python -m pip uninstall -y pip
115
134
  # `mcp<2` constraint: upstream declares `mcp>=1.27.0` (unbounded) but its code
116
135
  # imports `mcp.server.fastmcp` — an API REMOVED in mcp 2.x (FastMCP → MCPServer).
117
136
  # The import probe below fails the build on exactly this class of drift
118
137
  # (verified: unconstrained pip resolved mcp 2.3.0 → ModuleNotFoundError).
138
+ # `pillow==12.3.0` override (SA4E-360): upstream pins `pillow~=12.1.1`, which
139
+ # resolves to 12.1.1 — carrying 16 HIGH CVEs that fail the production Trivy
140
+ # gate. PEP 440 `~=12.1.1` means >=12.1.1,<12.2, so it does NOT admit the
141
+ # fixed 12.3.0 (which markitdown-venv already runs on the same Python 3.11
142
+ # base). The force-upgrade AFTER the main install therefore triggers a pip
143
+ # metadata conflict warning ("markdown-exporter-mcp-local 0.1.0 requires
144
+ # pillow~=12.1.1 ... incompatible") — EXPECTED and non-fatal: pip installs
145
+ # the requested version and exits 0. Trivy reads the installed 12.3.0
146
+ # metadata, clearing all 16 CVEs. The PIL version probe fails the build if
147
+ # resolution ever regresses to 12.1.1. Remove this override once upstream
148
+ # releases an officially fixed pin (e.g. pillow~=12.3).
119
149
  RUN python3 -m venv /opt/markdown-exporter-venv \
120
150
  && /opt/markdown-exporter-venv/bin/pip install --no-cache-dir \
121
151
  "markdown-exporter-mcp-local @ git+https://github.com/Zac-Chen-2001/markdown-exporter-mcp-local@${MARKDOWN_EXPORTER_MCP_REF}" \
122
152
  "mcp>=1.27.0,<2.0.0" \
123
153
  && test -x /opt/markdown-exporter-venv/bin/markdown-exporter-mcp-local \
124
154
  && /opt/markdown-exporter-venv/bin/python -c "import markdown_exporter_mcp.server, md_exporter" \
155
+ && /opt/markdown-exporter-venv/bin/pip install --no-cache-dir "pillow==12.3.0" \
156
+ && /opt/markdown-exporter-venv/bin/python -c "import PIL; assert PIL.__version__ == '12.3.0'" \
157
+ && /opt/markdown-exporter-venv/bin/pip install --no-cache-dir "setuptools==${SETUPTOOLS_VERSION}" \
158
+ && /opt/markdown-exporter-venv/bin/python -c "from importlib.metadata import version; assert version('setuptools') == '${SETUPTOOLS_VERSION}'" \
125
159
  && /opt/markdown-exporter-venv/bin/python -m pip uninstall -y pip
126
160
  # Both venvs are copied root-owned READ-ONLY; stripping their bundled pip keeps
127
161
  # the runtime image free of ANY package manager (SEC-05) and out of Trivy scans.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.48.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.53.0-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
@@ -38,7 +38,7 @@ Server starts at **http://localhost:48721**. Verify it's running:
38
38
 
39
39
  ```bash
40
40
  curl http://localhost:48721/health
41
- # → {"status":"healthy","version":"1.48.0","uptime":5,"tools_loaded":52}
41
+ # → {"status":"healthy","version":"1.53.0","uptime":5,"tools_loaded":52}
42
42
  ```
43
43
 
44
44
  ### Development Mode (auto-reload)
@@ -233,6 +233,7 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
233
233
 
234
234
  | Version | Date | Ticket | Changes |
235
235
  |---------|------|--------|---------|
236
+ | 1.53.0 | 2026-10-15 | SA4E-360 | Version sync with extension release v1.53.0 (Multi-Resolution Context Supply P1 — skeleton + agentic loading, UAT-verified; backend runtime unchanged).
236
237
  | 1.48.0 | 2026-10-10 | SA4E-341 | Version sync (E2E testing framework delivered in standalone `e2e/` package — no backend runtime changes). Also includes SA4E-335 DB-layer 6 bugfixes (memoized id-column check, literal-safe placeholder translation, identifier quoting SQLi guard, safeExec SQLSTATE filter, writable test-backend data dir), SA4E-349 auth 401 fail-loud fixes, SA4E-350 Pega '@baseclass' appliesTo passthrough fix, enrichment retry scoped via X-Project-Id + runtime settings module. |
237
238
  | 1.47.1 | 2026-10-04 | — | Fix Docker CI fail (Trivy CVE-2026-103111 libpcre2-8-0 HIGH), defensive JSON parse on `/auth/refresh`, SA4E-100 Pega BELONGS_TO edges. |
238
239
  | 1.47.0 | 2026-10-02 | — | New endpoint `GET /api/v1/enrichment/failures?limit=N` (clamp 1–1000, default 200) returns full FAILED enrichment task list from `pending_tasks` with resolved source, error, retry count, timestamp (`PendingTaskRepository.listFailedDetailed`). Surfaces ingest failures to the extension beyond the 10-item status tooltip. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdlc-agent-4-enterprise-server",
3
- "version": "1.53.0",
3
+ "version": "1.53.1",
4
4
  "description": "Code Intelligence MCP Server — multi-agent SDLC pipeline with semantic memory, code graph, and draw.io integration",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -110,9 +110,16 @@ describe('code_extract_signatures — fail-soft batch + caps (E2E-API-06)', () =
110
110
  });
111
111
 
112
112
  // STC E2E-API-07 — backend containment twin, 4 attack vectors (SEC-360-04)
113
+ // NOTE (platform): `C:\...` absolute and `..\..` backslash-traversal vectors
114
+ // only carry attack semantics on a win32 host — on posix, backslashes are
115
+ // literal filename characters, so those inputs resolve STRICTLY INSIDE the
116
+ // root (path.resolve posix semantics) and rejecting them would be wrong.
117
+ // Cross-platform vectors (`/etc/passwd`, `//server/share`, `sub/../../x`)
118
+ // stay unguarded and run on every platform.
119
+ const IS_WIN = process.platform === 'win32';
113
120
  describe('SEC-360-04 — resolveContainedFile rejects all 4 attack layers', () => {
114
121
  it('BV-03: absolute path outside the workspace root is rejected', () => {
115
- expect(resolveContainedFile(root, 'C:\\projects\\secrets.txt')).toBeNull();
122
+ if (IS_WIN) expect(resolveContainedFile(root, 'C:\\projects\\secrets.txt')).toBeNull();
116
123
  expect(resolveContainedFile(root, '/etc/passwd')).toBeNull();
117
124
  });
118
125
 
@@ -126,7 +133,7 @@ describe('SEC-360-04 — resolveContainedFile rejects all 4 attack layers', () =
126
133
  });
127
134
 
128
135
  it('BV-06: dotdot traversal is rejected (lexical isWithin, layer 3)', () => {
129
- expect(resolveContainedFile(root, '..\\..\\secrets.txt')).toBeNull();
136
+ if (IS_WIN) expect(resolveContainedFile(root, '..\\..\\secrets.txt')).toBeNull();
130
137
  expect(resolveContainedFile(root, 'sub/../../secrets.txt')).toBeNull();
131
138
  });
132
139