sdlc-agent-4-enterprise-server 1.53.0 → 1.53.2
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 +34 -0
- package/README.md +3 -2
- package/package.json +1 -1
- package/src/engine/tools/__tests__/code-extract.test.ts +9 -2
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.
|
|
9
|
+
<img src="https://img.shields.io/badge/version-1.53.2-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.
|
|
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
|
@@ -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
|
|