feat: Go backend, enhanced search, new widgets, Docker deploy

Major changes:
- Add Go backend (backend/) with microservices architecture
- Enhanced master-agents-svc: reranker, content-classifier, stealth-crawler,
  proxy-manager, media-search, fastClassifier, language detection
- New web-svc widgets: KnowledgeCard, ProductCard, ProfileCard, VideoCard,
  UnifiedCard, CardGallery, InlineImageGallery, SourcesPanel, RelatedQuestions
- Improved discover-svc with discover-db integration
- Docker deployment improvements (Caddyfile, vendor.sh, BUILD.md)
- Library-svc: project_id schema migration
- Remove deprecated finance-svc and travel-svc
- Localization improvements across services

Made-with: Cursor
This commit is contained in:
home
2026-02-27 04:15:32 +03:00
parent 328d968f3f
commit 06fe57c765
285 changed files with 53132 additions and 1871 deletions

View File

@@ -1,7 +1,9 @@
# syntax=docker/dockerfile:1
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY --from=npm-cache / /tmp/npm-cache
RUN npm install --cache /tmp/npm-cache --prefer-offline --no-audit
COPY tsconfig.json ./
COPY src ./src
RUN npm run build
@@ -9,7 +11,8 @@ RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --omit=dev
COPY --from=npm-cache / /tmp/npm-cache
RUN npm install --omit=dev --cache /tmp/npm-cache --prefer-offline --no-audit
COPY --from=builder /app/dist ./dist
EXPOSE 3001
CMD ["node", "dist/index.js"]

View File

@@ -62,7 +62,7 @@ async function searchSearxng(
if (options.pageno != null) params.set('pageno', String(options.pageno));
const url = `${base.startsWith('http') ? base : 'http://' + base}/search?${params.toString()}`;
const controller = new AbortController();
const t = setTimeout(() => controller.abort(), 15000);
const t = setTimeout(() => controller.abort(), 25000);
const res = await fetch(url, {
signal: controller.signal,
headers: {
@@ -132,7 +132,7 @@ app.get<{
const engines = req.query.engines ?? '';
const language = req.query.language ?? '';
const pageno = parseInt(req.query.pageno ?? '1', 10);
const hash = queryHash(q, categories + engines + language);
const hash = queryHash(q, categories + engines + language + String(pageno));
const cacheKey = `search:${hash}`;
try {
const cached = await redis.get(cacheKey);