sdlc-agent-4-enterprise-server 1.48.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 +146 -6
- package/README.md +3 -2
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.js +14 -0
- package/dist/config/index.js.map +1 -1
- package/dist/engine/parsers/embedding/EmbeddingBackend.d.ts +21 -0
- package/dist/engine/parsers/embedding/EmbeddingBackend.js +13 -0
- package/dist/engine/parsers/embedding/EmbeddingBackend.js.map +1 -0
- package/dist/engine/parsers/embedding/EmbeddingService.d.ts +39 -4
- package/dist/engine/parsers/embedding/EmbeddingService.js +74 -20
- package/dist/engine/parsers/embedding/EmbeddingService.js.map +1 -1
- package/dist/engine/parsers/embedding/HashEmbeddingBackend.d.ts +14 -0
- package/dist/engine/parsers/embedding/HashEmbeddingBackend.js +34 -0
- package/dist/engine/parsers/embedding/HashEmbeddingBackend.js.map +1 -0
- package/dist/engine/parsers/embedding/OnnxEmbeddingBackend.d.ts +29 -0
- package/dist/engine/parsers/embedding/OnnxEmbeddingBackend.js +50 -0
- package/dist/engine/parsers/embedding/OnnxEmbeddingBackend.js.map +1 -0
- package/dist/engine/parsers/signature-extractor.js +5 -3
- package/dist/engine/parsers/signature-extractor.js.map +1 -1
- package/dist/engine/query/query-layer.d.ts +25 -0
- package/dist/engine/query/query-layer.js +68 -3
- package/dist/engine/query/query-layer.js.map +1 -1
- package/dist/engine/tools/code-extract.d.ts +46 -0
- package/dist/engine/tools/code-extract.js +149 -0
- package/dist/engine/tools/code-extract.js.map +1 -0
- package/dist/engine/tools/code-intel-handlers.js +8 -2
- package/dist/engine/tools/code-intel-handlers.js.map +1 -1
- package/dist/engine/tools/code-locate.d.ts +43 -0
- package/dist/engine/tools/code-locate.js +44 -0
- package/dist/engine/tools/code-locate.js.map +1 -0
- package/dist/engine/tools/drawio-tool.js +21 -3
- package/dist/engine/tools/drawio-tool.js.map +1 -1
- package/dist/engine/tools/register-tools.d.ts +56 -0
- package/dist/engine/tools/register-tools.js +6 -0
- package/dist/engine/tools/register-tools.js.map +1 -1
- package/dist/modules/memory/MemoryModule.d.ts +2 -2
- package/dist/modules/memory/MemoryModule.js +13 -5
- package/dist/modules/memory/MemoryModule.js.map +1 -1
- package/dist/server/HttpServer.js +17 -11
- package/dist/server/HttpServer.js.map +1 -1
- package/dist/server/routes/admin/config.js +34 -1
- package/dist/server/routes/admin/config.js.map +1 -1
- package/dist/server/routes/api-index.d.ts +12 -0
- package/dist/server/routes/api-index.js +90 -15
- package/dist/server/routes/api-index.js.map +1 -1
- package/dist/shared/EventBus.d.ts +6 -0
- package/dist/shared/EventBus.js +6 -0
- package/dist/shared/EventBus.js.map +1 -1
- package/docker-compose.yml +4 -0
- package/package.json +2 -2
- package/scripts/precache-embedding-model.mjs +27 -0
- package/src/admin/middleware/rbac.middleware.ts +11 -0
- package/src/config/index.ts +14 -0
- package/src/engine/parsers/embedding/EmbeddingBackend.ts +24 -0
- package/src/engine/parsers/embedding/EmbeddingService.ts +81 -21
- package/src/engine/parsers/embedding/HashEmbeddingBackend.ts +35 -0
- package/src/engine/parsers/embedding/OnnxEmbeddingBackend.ts +92 -0
- package/src/engine/parsers/embedding/__tests__/EmbeddingService.test.ts +101 -0
- package/src/engine/parsers/signature-extractor.ts +5 -3
- package/src/engine/query/__tests__/list-class-methods.test.ts +165 -0
- package/src/engine/query/query-layer.ts +92 -4
- package/src/engine/tools/__tests__/code-extract.test.ts +169 -0
- package/src/engine/tools/__tests__/code-locate-tool.test.ts +77 -0
- package/src/engine/tools/__tests__/code-locate.test.ts +134 -0
- package/src/engine/tools/__tests__/drawio-tool.test.ts +41 -0
- package/src/engine/tools/code-extract.ts +162 -0
- package/src/engine/tools/code-intel-handlers.ts +7 -1
- package/src/engine/tools/code-locate.ts +67 -0
- package/src/engine/tools/drawio-tool.ts +23 -2
- package/src/engine/tools/register-tools.ts +6 -0
- package/src/modules/memory/MemoryModule.ts +12 -5
- package/src/server/HttpServer.ts +20 -14
- package/src/server/routes/__tests__/admin.test.ts +4 -1
- package/src/server/routes/__tests__/api-index-errors.test.ts +31 -0
- package/src/server/routes/admin/config.ts +31 -1
- package/src/server/routes/api-index.ts +96 -15
- package/src/shared/EventBus.ts +6 -0
- package/tests/e2e/sa4e-360-tools.e2e.test.ts +175 -0
package/Dockerfile
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
# =============================================================================
|
|
3
3
|
# SA4E-335 Backend Dockerfile — Node.js 22 + Hono Code Intelligence MCP Server
|
|
4
4
|
# -----------------------------------------------------------------------------
|
|
5
|
-
# Multi-stage build (
|
|
6
|
-
# `production` is the SOLE CI push target (TDD AD-2).
|
|
7
|
-
# reaches the runtime image.
|
|
5
|
+
# Multi-stage build (7 stages): base, deps, build, mcp-python, production,
|
|
6
|
+
# development, test. `production` is the SOLE CI push target (TDD AD-2).
|
|
7
|
+
# Build-only tooling never reaches the runtime image.
|
|
8
8
|
#
|
|
9
9
|
# Design decisions (TDD §3.2 / Security Review):
|
|
10
10
|
# - AD-1 : base = node:22-slim (Debian/glibc) so native modules such as
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
# - AD-6 : SA4E-44 capability items (draw.io CLI/Electron/xvfb, model pre-cache,
|
|
21
21
|
# SERVER_WORKSPACES_ROOT) are guarded behind build args and DEFAULT OFF
|
|
22
22
|
# (SEC-08) — a bare `docker build --target production .` must succeed.
|
|
23
|
+
# - MCP-1 : two stdio MCP child servers (markitdown-mcp, markdown-exporter-
|
|
24
|
+
# mcp-local) are built into isolated /opt venvs in `mcp-python` and
|
|
25
|
+
# shipped read-only on PATH, so the orchestration module spawns them
|
|
26
|
+
# by bare command name. The runtime gains ONLY the python3
|
|
27
|
+
# interpreter — no pip, no git, no pandoc (SEC-05; pypandoc-binary
|
|
28
|
+
# bundles its own pandoc, onnxruntime ships as a manylinux wheel).
|
|
23
29
|
# =============================================================================
|
|
24
30
|
|
|
25
31
|
# --- Build-time arguments (NO secrets — build args must never carry credentials, BR-17) ---
|
|
@@ -57,10 +63,102 @@ COPY package.json package-lock.json ./
|
|
|
57
63
|
RUN npm ci
|
|
58
64
|
COPY tsconfig.json ./
|
|
59
65
|
COPY src/ ./src/
|
|
66
|
+
COPY scripts/ ./scripts/
|
|
60
67
|
RUN npm run build
|
|
61
|
-
# (AD-6,
|
|
62
|
-
#
|
|
63
|
-
#
|
|
68
|
+
# (AD-6, SA4E-44 — now IMPLEMENTED) Pre-download the ONNX embedding model into
|
|
69
|
+
# TRANSFORMERS_CACHE so the runtime serves real semantic embeddings fully
|
|
70
|
+
# offline. EmbeddingService/OnnxEmbeddingBackend read the same cache dir at
|
|
71
|
+
# runtime (config embeddingCacheDir <- env TRANSFORMERS_CACHE). DEFAULT ON —
|
|
72
|
+
# semantic search is a core capability; set --build-arg BAKE_EMBEDDING_MODEL=false
|
|
73
|
+
# for slim builds (the runtime then logs an error and degrades to the sin-hash
|
|
74
|
+
# fallback unless a cache volume is mounted at /app/models-cache). `mkdir -p`
|
|
75
|
+
# guarantees the production COPY succeeds even when the download is skipped.
|
|
76
|
+
# Fail-fast: the precache script exits non-zero on download/inference errors.
|
|
77
|
+
ARG BAKE_EMBEDDING_MODEL=true
|
|
78
|
+
RUN mkdir -p /app/models-cache \
|
|
79
|
+
&& if [ "$BAKE_EMBEDDING_MODEL" = "true" ]; then \
|
|
80
|
+
TRANSFORMERS_CACHE=/app/models-cache node scripts/precache-embedding-model.mjs; \
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# -----------------------------------------------------------------------------
|
|
84
|
+
# mcp-python — builds the two stdio MCP child servers into isolated /opt venvs.
|
|
85
|
+
# The orchestration module (McpClientManager → TransportFactory) spawns stdio
|
|
86
|
+
# children by bare `command` name resolved on the PATH inherited by the backend
|
|
87
|
+
# process (documents/MCP-DB-CONFIG-REQUEST.md §9), so each server ships as a
|
|
88
|
+
# venv console script that production/development put on PATH:
|
|
89
|
+
# /opt/markitdown-venv/bin/markitdown-mcp (Microsoft MarkItDown)
|
|
90
|
+
# /opt/markdown-exporter-venv/bin/markdown-exporter-mcp-local
|
|
91
|
+
# Both servers are Python — markdown-exporter-mcp-local is NOT published to
|
|
92
|
+
# npm or PyPI (GitHub source only), so npm packaging is impossible by design.
|
|
93
|
+
# This stage derives from the SAME pinned node base as the runtime, so venv
|
|
94
|
+
# interpreters and native manylinux wheels (onnxruntime via markitdown[all]/
|
|
95
|
+
# magika, PyMuPDF, pillow, pandas; pypandoc-binary bundles pandoc → no apt
|
|
96
|
+
# pandoc needed) match the runtime ABI. `git` exists only here (SEC-05).
|
|
97
|
+
# -----------------------------------------------------------------------------
|
|
98
|
+
FROM base AS mcp-python
|
|
99
|
+
ARG MARKITDOWN_MCP_VERSION=0.0.1a7
|
|
100
|
+
# markdown-exporter-mcp-local has no PyPI release — pin the exact upstream
|
|
101
|
+
# commit (main @ 2026-04-07) for a hermetic build (git-source analogue of SEC-02).
|
|
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
|
|
120
|
+
# `python3` already exists in base (build toolchain); only the venv/ensurepip
|
|
121
|
+
# support is missing. One venv per server: independent dependency trees that
|
|
122
|
+
# are pinned, upgraded and Trivy-scanned separately.
|
|
123
|
+
RUN apt-get update \
|
|
124
|
+
&& apt-get install -y --no-install-recommends python3-venv \
|
|
125
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
126
|
+
RUN python3 -m venv /opt/markitdown-venv \
|
|
127
|
+
&& /opt/markitdown-venv/bin/pip install --no-cache-dir \
|
|
128
|
+
"markitdown-mcp==${MARKITDOWN_MCP_VERSION}" \
|
|
129
|
+
&& test -x /opt/markitdown-venv/bin/markitdown-mcp \
|
|
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}'" \
|
|
133
|
+
&& /opt/markitdown-venv/bin/python -m pip uninstall -y pip
|
|
134
|
+
# `mcp<2` constraint: upstream declares `mcp>=1.27.0` (unbounded) but its code
|
|
135
|
+
# imports `mcp.server.fastmcp` — an API REMOVED in mcp 2.x (FastMCP → MCPServer).
|
|
136
|
+
# The import probe below fails the build on exactly this class of drift
|
|
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).
|
|
149
|
+
RUN python3 -m venv /opt/markdown-exporter-venv \
|
|
150
|
+
&& /opt/markdown-exporter-venv/bin/pip install --no-cache-dir \
|
|
151
|
+
"markdown-exporter-mcp-local @ git+https://github.com/Zac-Chen-2001/markdown-exporter-mcp-local@${MARKDOWN_EXPORTER_MCP_REF}" \
|
|
152
|
+
"mcp>=1.27.0,<2.0.0" \
|
|
153
|
+
&& test -x /opt/markdown-exporter-venv/bin/markdown-exporter-mcp-local \
|
|
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}'" \
|
|
159
|
+
&& /opt/markdown-exporter-venv/bin/python -m pip uninstall -y pip
|
|
160
|
+
# Both venvs are copied root-owned READ-ONLY; stripping their bundled pip keeps
|
|
161
|
+
# the runtime image free of ANY package manager (SEC-05) and out of Trivy scans.
|
|
64
162
|
|
|
65
163
|
# -----------------------------------------------------------------------------
|
|
66
164
|
# production ★ — runtime image. SOLE CI push target. Minimal surface, non-root.
|
|
@@ -108,6 +206,31 @@ COPY --from=deps /app/node_modules ./node_modules
|
|
|
108
206
|
COPY --from=build /app/dist ./dist
|
|
109
207
|
COPY --from=build /app/package.json ./
|
|
110
208
|
|
|
209
|
+
# (AD-6, SA4E-44) Baked ONNX embedding model cache from the `build` stage.
|
|
210
|
+
# Read-only at runtime (read_only rootfs in compose) — a cache hit needs no
|
|
211
|
+
# writes; with BAKE_EMBEDDING_MODEL=false the dir is empty and the runtime
|
|
212
|
+
# degrades to the logged hash fallback (mount a volume here to allow download).
|
|
213
|
+
COPY --from=build /app/models-cache ./models-cache
|
|
214
|
+
ENV TRANSFORMERS_CACHE=/app/models-cache
|
|
215
|
+
|
|
216
|
+
# --- Stdio MCP child servers (spawned by orchestration via bare command) ----
|
|
217
|
+
# Python runtime only — pip/venv tooling and git stay out of the image (SEC-05).
|
|
218
|
+
# The venv trees built in `mcp-python` are copied root-owned read-only
|
|
219
|
+
# (world-executable: the non-root backend can execute but not modify its own
|
|
220
|
+
# child servers). In-container `mcp_servers` DB rows can use bare commands:
|
|
221
|
+
# { "command": "markitdown-mcp", "args": [] }
|
|
222
|
+
# { "command": "markdown-exporter-mcp-local", "args": [] }
|
|
223
|
+
RUN apt-get update \
|
|
224
|
+
&& apt-get install -y --no-install-recommends python3 \
|
|
225
|
+
&& apt-get clean \
|
|
226
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
227
|
+
COPY --from=mcp-python /opt/markitdown-venv /opt/markitdown-venv
|
|
228
|
+
COPY --from=mcp-python /opt/markdown-exporter-venv /opt/markdown-exporter-venv
|
|
229
|
+
# Console scripts resolve on the PATH inherited by the backend process and its
|
|
230
|
+
# stdio children; PYTHONUNBUFFERED keeps stderr logs streaming (no MCP breakage).
|
|
231
|
+
ENV PATH="/opt/markitdown-venv/bin:/opt/markdown-exporter-venv/bin:${PATH}"
|
|
232
|
+
ENV PYTHONUNBUFFERED=1
|
|
233
|
+
|
|
111
234
|
# Non-root runtime user (BR-05). Debian uses groupadd/useradd (not alpine addgroup).
|
|
112
235
|
# `-r` = system account, `nologin` shell = no interactive login.
|
|
113
236
|
RUN groupadd -g 1001 sa4e \
|
|
@@ -119,6 +242,13 @@ USER sa4e
|
|
|
119
242
|
ENV NODE_ENV=production
|
|
120
243
|
ENV PORT=48721
|
|
121
244
|
|
|
245
|
+
# SA4E-99 backpressure — max concurrent /api/index/source upload requests.
|
|
246
|
+
# Startup default only: hot-reloadable at runtime via the admin UI
|
|
247
|
+
# (Configuration → indexLimit.maxConcurrent — persisted, applied instantly via
|
|
248
|
+
# EventBus), and overridable per container with `docker run -e INDEX_CONCURRENCY_LIMIT=N`.
|
|
249
|
+
# 8 absorbs cloud DB/disk latency (local default stays 3) without unbounded flood.
|
|
250
|
+
ENV INDEX_CONCURRENCY_LIMIT=8
|
|
251
|
+
|
|
122
252
|
EXPOSE 48721
|
|
123
253
|
|
|
124
254
|
# Dependency-free health probe (SEC-12): node:22-slim does not ship `wget`, so a
|
|
@@ -139,6 +269,16 @@ COPY package.json package-lock.json ./
|
|
|
139
269
|
RUN npm ci
|
|
140
270
|
COPY tsconfig.json ./
|
|
141
271
|
COPY src/ ./src/
|
|
272
|
+
# (AD-6) Same baked embedding-model cache as production — dev containers embed
|
|
273
|
+
# with the real ONNX model instead of the sin-hash fallback.
|
|
274
|
+
COPY --from=build /app/models-cache ./models-cache
|
|
275
|
+
ENV TRANSFORMERS_CACHE=/app/models-cache
|
|
276
|
+
# Stdio MCP child servers — same venvs as production (see mcp-python stage);
|
|
277
|
+
# `base` already carries python3, so only the venv copies + PATH are needed.
|
|
278
|
+
COPY --from=mcp-python /opt/markitdown-venv /opt/markitdown-venv
|
|
279
|
+
COPY --from=mcp-python /opt/markdown-exporter-venv /opt/markdown-exporter-venv
|
|
280
|
+
ENV PATH="/opt/markitdown-venv/bin:/opt/markdown-exporter-venv/bin:${PATH}"
|
|
281
|
+
ENV PYTHONUNBUFFERED=1
|
|
142
282
|
RUN groupadd -g 1001 sa4e \
|
|
143
283
|
&& useradd -u 1001 -g sa4e -r -s /usr/sbin/nologin sa4e \
|
|
144
284
|
&& chown -R sa4e:sa4e /app
|
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.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.
|
|
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/dist/config/index.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ declare const UnifiedConfigSchema: z.ZodObject<{
|
|
|
5
5
|
port: z.ZodDefault<z.ZodNumber>;
|
|
6
6
|
host: z.ZodDefault<z.ZodString>;
|
|
7
7
|
onnxModelPath: z.ZodDefault<z.ZodString>;
|
|
8
|
+
embeddingModelId: z.ZodDefault<z.ZodString>;
|
|
9
|
+
embeddingCacheDir: z.ZodString;
|
|
10
|
+
embeddingQuantized: z.ZodDefault<z.ZodBoolean>;
|
|
8
11
|
logLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
|
|
9
12
|
viewerPort: z.ZodDefault<z.ZodNumber>;
|
|
10
13
|
watchEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -93,6 +96,9 @@ declare const UnifiedConfigSchema: z.ZodObject<{
|
|
|
93
96
|
host: string;
|
|
94
97
|
port: number;
|
|
95
98
|
onnxModelPath: string;
|
|
99
|
+
embeddingModelId: string;
|
|
100
|
+
embeddingCacheDir: string;
|
|
101
|
+
embeddingQuantized: boolean;
|
|
96
102
|
logLevel: "error" | "warn" | "info" | "debug";
|
|
97
103
|
viewerPort: number;
|
|
98
104
|
watchEnabled: boolean;
|
|
@@ -130,6 +136,7 @@ declare const UnifiedConfigSchema: z.ZodObject<{
|
|
|
130
136
|
dockerSocket?: string | undefined;
|
|
131
137
|
};
|
|
132
138
|
}, {
|
|
139
|
+
embeddingCacheDir: string;
|
|
133
140
|
workspace: string;
|
|
134
141
|
indexTempDir: string;
|
|
135
142
|
dbPath: string;
|
|
@@ -162,6 +169,8 @@ declare const UnifiedConfigSchema: z.ZodObject<{
|
|
|
162
169
|
host?: string | undefined;
|
|
163
170
|
port?: number | undefined;
|
|
164
171
|
onnxModelPath?: string | undefined;
|
|
172
|
+
embeddingModelId?: string | undefined;
|
|
173
|
+
embeddingQuantized?: boolean | undefined;
|
|
165
174
|
logLevel?: "error" | "warn" | "info" | "debug" | undefined;
|
|
166
175
|
viewerPort?: number | undefined;
|
|
167
176
|
watchEnabled?: boolean | undefined;
|
package/dist/config/index.js
CHANGED
|
@@ -42,7 +42,13 @@ export const DEFAULT_EXTENSIONS = [
|
|
|
42
42
|
const UnifiedConfigSchema = z.object({
|
|
43
43
|
port: z.number().min(1024).max(65535).default(48721),
|
|
44
44
|
host: z.string().default('0.0.0.0'),
|
|
45
|
+
// Legacy/deprecated — nothing loads a bare .onnx file anymore; kept for
|
|
46
|
+
// backward-compatible admin config output. See embeddingModelId below.
|
|
45
47
|
onnxModelPath: z.string().default('models/model.onnx'),
|
|
48
|
+
// SA4E-44 / AD-6 — real ONNX embeddings via transformers.js (EmbeddingService).
|
|
49
|
+
embeddingModelId: z.string().default('Xenova/paraphrase-multilingual-MiniLM-L12-v2'),
|
|
50
|
+
embeddingCacheDir: z.string(),
|
|
51
|
+
embeddingQuantized: z.boolean().default(true),
|
|
46
52
|
logLevel: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
47
53
|
viewerPort: z.number().default(3202),
|
|
48
54
|
watchEnabled: z.boolean().default(true),
|
|
@@ -158,6 +164,14 @@ export function loadConfig(overrides) {
|
|
|
158
164
|
port: resolvePort(),
|
|
159
165
|
host: process.env.CODE_INTEL_HOST || '0.0.0.0',
|
|
160
166
|
onnxModelPath: process.env.CODE_INTEL_ONNX_MODEL || 'models/model.onnx',
|
|
167
|
+
// SA4E-44 / AD-6 — ONNX embedding config (EmbeddingService/OnnxEmbeddingBackend).
|
|
168
|
+
// TRANSFORMERS_CACHE is the HF-standard env var; the Dockerfile bakes the
|
|
169
|
+
// model there at build time so the runtime image works fully offline.
|
|
170
|
+
embeddingModelId: process.env.CODE_INTEL_EMBEDDING_MODEL
|
|
171
|
+
|| 'Xenova/paraphrase-multilingual-MiniLM-L12-v2',
|
|
172
|
+
embeddingCacheDir: process.env.TRANSFORMERS_CACHE
|
|
173
|
+
|| path.join(codeIntelDir, 'models-cache'),
|
|
174
|
+
embeddingQuantized: envBool('CODE_INTEL_EMBEDDING_QUANTIZED', true),
|
|
161
175
|
logLevel: (process.env.CODE_INTEL_LOG_LEVEL || 'info'),
|
|
162
176
|
viewerPort: resolveViewerPort(),
|
|
163
177
|
watchEnabled: envBool('CODE_INTEL_WATCH', fileConfig.watchEnabled ?? true),
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingBackend.ts — strategy interface for embedding vector generation.
|
|
3
|
+
*
|
|
4
|
+
* SA4E-44 / AD-6: the service previously shipped ONLY a sin-hash pseudo-
|
|
5
|
+
* embedding fallback (deterministic but semantically meaningless). Real
|
|
6
|
+
* inference is provided by OnnxEmbeddingBackend (transformers.js on
|
|
7
|
+
* onnxruntime-node, CPU); the hash backend remains an explicitly-logged
|
|
8
|
+
* degraded fallback so indexing/search pipelines never crash when the model
|
|
9
|
+
* is unavailable.
|
|
10
|
+
*/
|
|
11
|
+
/** Canonical vector size — pgvector schema and DB blobs assume this dimension. */
|
|
12
|
+
export declare const EMBEDDING_DIMENSIONS = 384;
|
|
13
|
+
export type EmbeddingBackendKind = 'onnx' | 'hash';
|
|
14
|
+
export interface EmbeddingBackend {
|
|
15
|
+
/** Backend identifier — surfaced via admin config (`embedding.backend`). */
|
|
16
|
+
readonly kind: EmbeddingBackendKind;
|
|
17
|
+
/** Model identifier actually in use (sentinel name for the hash backend). */
|
|
18
|
+
readonly modelId: string;
|
|
19
|
+
/** Generate an EMBEDDING_DIMENSIONS-sized, L2-normalized vector for `text`. */
|
|
20
|
+
generate(text: string): Promise<number[]>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingBackend.ts — strategy interface for embedding vector generation.
|
|
3
|
+
*
|
|
4
|
+
* SA4E-44 / AD-6: the service previously shipped ONLY a sin-hash pseudo-
|
|
5
|
+
* embedding fallback (deterministic but semantically meaningless). Real
|
|
6
|
+
* inference is provided by OnnxEmbeddingBackend (transformers.js on
|
|
7
|
+
* onnxruntime-node, CPU); the hash backend remains an explicitly-logged
|
|
8
|
+
* degraded fallback so indexing/search pipelines never crash when the model
|
|
9
|
+
* is unavailable.
|
|
10
|
+
*/
|
|
11
|
+
/** Canonical vector size — pgvector schema and DB blobs assume this dimension. */
|
|
12
|
+
export const EMBEDDING_DIMENSIONS = 384;
|
|
13
|
+
//# sourceMappingURL=EmbeddingBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingBackend.js","sourceRoot":"","sources":["../../../../src/engine/parsers/embedding/EmbeddingBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC"}
|
|
@@ -1,15 +1,50 @@
|
|
|
1
|
+
import type { EmbeddingBackend, EmbeddingBackendKind } from './EmbeddingBackend.js';
|
|
2
|
+
/**
|
|
3
|
+
* EmbeddingService — facade over pluggable EmbeddingBackend strategies.
|
|
4
|
+
*
|
|
5
|
+
* SA4E-44 / AD-6: the previous implementation was ONLY the sin-hash fallback
|
|
6
|
+
* (no semantic quality). It now defaults to real ONNX inference
|
|
7
|
+
* (Xenova/paraphrase-multilingual-MiniLM-L12-v2, 384 dims, q8) via
|
|
8
|
+
* transformers.js and degrades to the hash backend ONLY when model loading or
|
|
9
|
+
* inference fails — logged loudly once, never silently. Call sites
|
|
10
|
+
* (TaskWorker, MemoryToolSearchService, ReindexService, LLMInitializer,
|
|
11
|
+
* index.ts tool ingestion) keep the original API.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: vectors from the two backends are NOT comparable. Switching
|
|
14
|
+
* backends invalidates stored vectors — run a full reindex so old (hash) and
|
|
15
|
+
* new (onnx) vectors are never mixed in similarity comparisons. The active
|
|
16
|
+
* backend is exposed to operators via admin config (`embedding.backend`).
|
|
17
|
+
*/
|
|
1
18
|
export declare class EmbeddingService {
|
|
2
19
|
private static instance;
|
|
20
|
+
private readonly hash;
|
|
21
|
+
private readonly logger;
|
|
22
|
+
private injectedBackend?;
|
|
23
|
+
private onnxBackend?;
|
|
24
|
+
private onnxFailed;
|
|
3
25
|
private constructor();
|
|
4
26
|
static getInstance(): EmbeddingService;
|
|
5
27
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
|
|
28
|
+
* Test/DI seam — replaces backend resolution entirely. An injected backend
|
|
29
|
+
* of kind 'onnx' still participates in the fail-over path (see generate).
|
|
30
|
+
*/
|
|
31
|
+
setBackend(backend: EmbeddingBackend): void;
|
|
32
|
+
/** Reset singleton state between unit tests (cheap, non-circular). */
|
|
33
|
+
static resetForTests(): void;
|
|
34
|
+
/** Active backend kind without triggering model loading. */
|
|
35
|
+
getBackendKind(): EmbeddingBackendKind;
|
|
36
|
+
/**
|
|
37
|
+
* Generate an embedding vector for `text`. On ONNX failure, permanently
|
|
38
|
+
* degrades to the hash fallback for this process lifetime (restart to retry)
|
|
39
|
+
* so indexing/search pipelines never crash — the degradation is logged at
|
|
40
|
+
* error level exactly once.
|
|
9
41
|
*/
|
|
10
42
|
generateEmbedding(text: string): Promise<number[]>;
|
|
11
43
|
/**
|
|
12
|
-
*
|
|
44
|
+
* Cosine similarity between two equal-length vectors.
|
|
45
|
+
* Throws on dimension mismatch rather than returning a wrong score.
|
|
13
46
|
*/
|
|
14
47
|
cosineSimilarity(a: number[], b: number[]): number;
|
|
48
|
+
/** Resolution order: failed→hash, injected, lazy ONNX (config-driven). */
|
|
49
|
+
private resolveBackend;
|
|
15
50
|
}
|
|
@@ -1,5 +1,30 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
import { loadConfig } from '../../../config/index.js';
|
|
3
|
+
import { HashEmbeddingBackend } from './HashEmbeddingBackend.js';
|
|
4
|
+
import { OnnxEmbeddingBackend } from './OnnxEmbeddingBackend.js';
|
|
5
|
+
/**
|
|
6
|
+
* EmbeddingService — facade over pluggable EmbeddingBackend strategies.
|
|
7
|
+
*
|
|
8
|
+
* SA4E-44 / AD-6: the previous implementation was ONLY the sin-hash fallback
|
|
9
|
+
* (no semantic quality). It now defaults to real ONNX inference
|
|
10
|
+
* (Xenova/paraphrase-multilingual-MiniLM-L12-v2, 384 dims, q8) via
|
|
11
|
+
* transformers.js and degrades to the hash backend ONLY when model loading or
|
|
12
|
+
* inference fails — logged loudly once, never silently. Call sites
|
|
13
|
+
* (TaskWorker, MemoryToolSearchService, ReindexService, LLMInitializer,
|
|
14
|
+
* index.ts tool ingestion) keep the original API.
|
|
15
|
+
*
|
|
16
|
+
* IMPORTANT: vectors from the two backends are NOT comparable. Switching
|
|
17
|
+
* backends invalidates stored vectors — run a full reindex so old (hash) and
|
|
18
|
+
* new (onnx) vectors are never mixed in similarity comparisons. The active
|
|
19
|
+
* backend is exposed to operators via admin config (`embedding.backend`).
|
|
20
|
+
*/
|
|
1
21
|
export class EmbeddingService {
|
|
2
22
|
static instance;
|
|
23
|
+
hash = new HashEmbeddingBackend();
|
|
24
|
+
logger = pino({ name: 'embedding-service' });
|
|
25
|
+
injectedBackend;
|
|
26
|
+
onnxBackend;
|
|
27
|
+
onnxFailed = false;
|
|
3
28
|
constructor() { }
|
|
4
29
|
static getInstance() {
|
|
5
30
|
if (!EmbeddingService.instance) {
|
|
@@ -8,33 +33,45 @@ export class EmbeddingService {
|
|
|
8
33
|
return EmbeddingService.instance;
|
|
9
34
|
}
|
|
10
35
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
36
|
+
* Test/DI seam — replaces backend resolution entirely. An injected backend
|
|
37
|
+
* of kind 'onnx' still participates in the fail-over path (see generate).
|
|
38
|
+
*/
|
|
39
|
+
setBackend(backend) {
|
|
40
|
+
this.injectedBackend = backend;
|
|
41
|
+
}
|
|
42
|
+
/** Reset singleton state between unit tests (cheap, non-circular). */
|
|
43
|
+
static resetForTests() {
|
|
44
|
+
EmbeddingService.instance = new EmbeddingService();
|
|
45
|
+
}
|
|
46
|
+
/** Active backend kind without triggering model loading. */
|
|
47
|
+
getBackendKind() {
|
|
48
|
+
if (this.onnxFailed)
|
|
49
|
+
return 'hash';
|
|
50
|
+
return this.injectedBackend?.kind ?? 'onnx';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generate an embedding vector for `text`. On ONNX failure, permanently
|
|
54
|
+
* degrades to the hash fallback for this process lifetime (restart to retry)
|
|
55
|
+
* so indexing/search pipelines never crash — the degradation is logged at
|
|
56
|
+
* error level exactly once.
|
|
14
57
|
*/
|
|
15
58
|
async generateEmbedding(text) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
for (let i = 0; i < text.length; i++) {
|
|
20
|
-
hash = ((hash << 5) - hash + text.charCodeAt(i)) | 0;
|
|
21
|
-
}
|
|
22
|
-
const seed = Math.abs(hash);
|
|
23
|
-
for (let i = 0; i < vectorSize; i++) {
|
|
24
|
-
const x = Math.sin(seed + i * 12.9898) * 43758.5453;
|
|
25
|
-
vector[i] = x - Math.floor(x);
|
|
59
|
+
const backend = this.resolveBackend();
|
|
60
|
+
try {
|
|
61
|
+
return await backend.generate(text);
|
|
26
62
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (backend.kind === 'onnx') {
|
|
65
|
+
this.onnxFailed = true;
|
|
66
|
+
this.logger.error({ err, modelId: backend.modelId }, 'ONNX embedding backend failed — degrading to sin-hash pseudo-embeddings (semantic quality lost) until restart. Check TRANSFORMERS_CACHE / model availability.');
|
|
67
|
+
return this.hash.generate(text);
|
|
32
68
|
}
|
|
69
|
+
throw err;
|
|
33
70
|
}
|
|
34
|
-
return vector;
|
|
35
71
|
}
|
|
36
72
|
/**
|
|
37
|
-
*
|
|
73
|
+
* Cosine similarity between two equal-length vectors.
|
|
74
|
+
* Throws on dimension mismatch rather than returning a wrong score.
|
|
38
75
|
*/
|
|
39
76
|
cosineSimilarity(a, b) {
|
|
40
77
|
if (a.length !== b.length)
|
|
@@ -51,5 +88,22 @@ export class EmbeddingService {
|
|
|
51
88
|
return 0;
|
|
52
89
|
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
53
90
|
}
|
|
91
|
+
/** Resolution order: failed→hash, injected, lazy ONNX (config-driven). */
|
|
92
|
+
resolveBackend() {
|
|
93
|
+
if (this.onnxFailed)
|
|
94
|
+
return this.hash;
|
|
95
|
+
if (this.injectedBackend)
|
|
96
|
+
return this.injectedBackend;
|
|
97
|
+
if (!this.onnxBackend) {
|
|
98
|
+
const cfg = loadConfig();
|
|
99
|
+
this.onnxBackend = new OnnxEmbeddingBackend({
|
|
100
|
+
modelId: cfg.embeddingModelId,
|
|
101
|
+
cacheDir: cfg.embeddingCacheDir,
|
|
102
|
+
quantized: cfg.embeddingQuantized,
|
|
103
|
+
logger: this.logger,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return this.onnxBackend;
|
|
107
|
+
}
|
|
54
108
|
}
|
|
55
109
|
//# sourceMappingURL=EmbeddingService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../../../src/engine/parsers/embedding/EmbeddingService.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../../../src/engine/parsers/embedding/EmbeddingService.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,QAAQ,CAAmB;IAEzB,IAAI,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAClC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACtD,eAAe,CAAoB;IACnC,WAAW,CAAwB;IACnC,UAAU,GAAG,KAAK,CAAC;IAE3B,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAAyB;QACzC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,sEAAsE;IAC/D,MAAM,CAAC,aAAa;QACzB,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrD,CAAC;IAED,4DAA4D;IACrD,cAAc;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAC;QACnC,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,iBAAiB,CAAC,IAAY;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACjC,+JAA+J,CAChK,CAAC;gBACF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,CAAW,EAAE,CAAW;QAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACzC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,0EAA0E;IAClE,cAAc;QACpB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC;gBAC1C,OAAO,EAAE,GAAG,CAAC,gBAAgB;gBAC7B,QAAQ,EAAE,GAAG,CAAC,iBAAiB;gBAC/B,SAAS,EAAE,GAAG,CAAC,kBAAkB;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type EmbeddingBackend } from './EmbeddingBackend.js';
|
|
2
|
+
/**
|
|
3
|
+
* HashEmbeddingBackend — deterministic sin-hash pseudo-embedding (fallback).
|
|
4
|
+
*
|
|
5
|
+
* NOT semantically meaningful: similar texts do NOT get similar vectors.
|
|
6
|
+
* Retained as a degraded mode so indexing/search pipelines keep working when
|
|
7
|
+
* the ONNX model cannot be loaded; every activation is logged as an error by
|
|
8
|
+
* EmbeddingService (never silent). Vector size: EMBEDDING_DIMENSIONS.
|
|
9
|
+
*/
|
|
10
|
+
export declare class HashEmbeddingBackend implements EmbeddingBackend {
|
|
11
|
+
readonly kind: "hash";
|
|
12
|
+
readonly modelId = "sin-hash-fallback";
|
|
13
|
+
generate(text: string): Promise<number[]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EMBEDDING_DIMENSIONS } from './EmbeddingBackend.js';
|
|
2
|
+
/**
|
|
3
|
+
* HashEmbeddingBackend — deterministic sin-hash pseudo-embedding (fallback).
|
|
4
|
+
*
|
|
5
|
+
* NOT semantically meaningful: similar texts do NOT get similar vectors.
|
|
6
|
+
* Retained as a degraded mode so indexing/search pipelines keep working when
|
|
7
|
+
* the ONNX model cannot be loaded; every activation is logged as an error by
|
|
8
|
+
* EmbeddingService (never silent). Vector size: EMBEDDING_DIMENSIONS.
|
|
9
|
+
*/
|
|
10
|
+
export class HashEmbeddingBackend {
|
|
11
|
+
kind = 'hash';
|
|
12
|
+
modelId = 'sin-hash-fallback';
|
|
13
|
+
async generate(text) {
|
|
14
|
+
const vector = new Array(EMBEDDING_DIMENSIONS).fill(0);
|
|
15
|
+
let hash = 0;
|
|
16
|
+
for (let i = 0; i < text.length; i++) {
|
|
17
|
+
hash = ((hash << 5) - hash + text.charCodeAt(i)) | 0;
|
|
18
|
+
}
|
|
19
|
+
const seed = Math.abs(hash);
|
|
20
|
+
for (let i = 0; i < EMBEDDING_DIMENSIONS; i++) {
|
|
21
|
+
const x = Math.sin(seed + i * 12.9898) * 43758.5453;
|
|
22
|
+
vector[i] = x - Math.floor(x);
|
|
23
|
+
}
|
|
24
|
+
// Normalize (unit length) so cosine similarity stays well-defined.
|
|
25
|
+
const norm = Math.sqrt(vector.reduce((s, v) => s + v * v, 0));
|
|
26
|
+
if (norm > 0) {
|
|
27
|
+
for (let i = 0; i < vector.length; i++) {
|
|
28
|
+
vector[i] /= norm;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return vector;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=HashEmbeddingBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HashEmbeddingBackend.js","sourceRoot":"","sources":["../../../../src/engine/parsers/embedding/HashEmbeddingBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAyB,MAAM,uBAAuB,CAAC;AAEpF;;;;;;;GAOG;AACH,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,MAAe,CAAC;IACvB,OAAO,GAAG,mBAAmB,CAAC;IAEhC,KAAK,CAAC,QAAQ,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,mEAAmE;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|