Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@avcodes/harbor

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@avcodes/harbor - npm Package Compare versions

Comparing version
0.3.22
to
0.3.28
+14
.github/agents/new-service.agent.md
---
description: 'This agent can drive implementation of a new service in Harbor.'
tools: ['vscode', 'execute', 'read', 'edit', 'search', 'web', 'chromedevtools/chrome-devtools-mcp/*', 'context7/*', 'deepwiki-mcp/*', 'agent', 'todo']
---
Agent carefully reads and follows the instructions in the file [.github/copilot-new-service.md] to create a new service in Harbor.
### Agent Workflow
- Read the instructions in [.github/copilot-new-service.md] thoroughly.
- Research information about the new service that was provided by the user.
- Use Plan agent to plan the implementation
- Orchestrate the implementation of the new service by breaking down the tasks into manageable steps.
- Delegate writing a documentation to a dedicated sub-agent thread, ensure to refer it to the [./.github/copilot-new-service.md] guide. Ensure that the agent will follow example from 2.3.52 in terms of format and structure.
- Test the implementation based on the service type: CLI - via terminal, Web - via Chrome Automation.
services:
drawio:
container_name: ${HARBOR_CONTAINER_PREFIX}.drawio
image: ${HARBOR_DRAWIO_IMAGE}:${HARBOR_DRAWIO_VERSION}
env_file:
- ./.env
- ./drawio/override.env
ports:
- ${HARBOR_DRAWIO_HOST_PORT}:3000
environment:
- AI_PROVIDER=${HARBOR_DRAWIO_AI_PROVIDER}
- AI_MODEL=${HARBOR_DRAWIO_AI_MODEL}
- TEMPERATURE=${HARBOR_DRAWIO_TEMPERATURE}
- ACCESS_CODE_LIST=${HARBOR_DRAWIO_ACCESS_CODE}
- OPENAI_API_KEY=${HARBOR_OPENAI_KEY}
- ANTHROPIC_API_KEY=${HARBOR_ANTHROPIC_KEY}
- GOOGLE_GENERATIVE_AI_API_KEY=${HARBOR_GOOGLE_KEY}
- DEEPSEEK_API_KEY=${HARBOR_DEEPSEEK_API_KEY}
networks:
- harbor-network
services:
karakeep:
container_name: ${HARBOR_CONTAINER_PREFIX}.karakeep
image: ${HARBOR_KARAKEEP_IMAGE}:${HARBOR_KARAKEEP_VERSION}
restart: unless-stopped
env_file:
- ./.env
- ./karakeep/override.env
depends_on:
- karakeep-chrome
- karakeep-meilisearch
ports:
- ${HARBOR_KARAKEEP_HOST_PORT}:3000
volumes:
- ${HARBOR_KARAKEEP_WORKSPACE}:/data
environment:
- NEXTAUTH_SECRET=${HARBOR_KARAKEEP_NEXTAUTH_SECRET}
- NEXTAUTH_URL=http://localhost:${HARBOR_KARAKEEP_HOST_PORT}
- MEILI_ADDR=http://karakeep-meilisearch:7700
- MEILI_MASTER_KEY=${HARBOR_KARAKEEP_MEILI_MASTER_KEY}
- BROWSER_WEB_URL=http://karakeep-chrome:9222
- DATA_DIR=/data
- OPENAI_API_KEY=${HARBOR_OPENAI_KEY:-}
- INFERENCE_TEXT_MODEL=${HARBOR_KARAKEEP_INFERENCE_TEXT_MODEL:-}
- INFERENCE_IMAGE_MODEL=${HARBOR_KARAKEEP_INFERENCE_IMAGE_MODEL:-}
- INFERENCE_CONTEXT_LENGTH=${HARBOR_KARAKEEP_INFERENCE_CONTEXT_LENGTH:-8192}
networks:
- harbor-network
karakeep-chrome:
container_name: ${HARBOR_CONTAINER_PREFIX}.karakeep-chrome
image: ${HARBOR_KARAKEEP_CHROME_IMAGE}:${HARBOR_KARAKEEP_CHROME_VERSION}
restart: unless-stopped
env_file:
- ./.env
- ./karakeep/override.env
command:
- --no-sandbox
- --disable-gpu
- --disable-dev-shm-usage
- --remote-debugging-address=0.0.0.0
- --remote-debugging-port=9222
- --hide-scrollbars
networks:
- harbor-network
karakeep-meilisearch:
container_name: ${HARBOR_CONTAINER_PREFIX}.karakeep-meilisearch
image: ${HARBOR_KARAKEEP_MEILI_IMAGE}:${HARBOR_KARAKEEP_MEILI_VERSION}
restart: unless-stopped
env_file:
- ./.env
- ./karakeep/override.env
environment:
- MEILI_MASTER_KEY=${HARBOR_KARAKEEP_MEILI_MASTER_KEY}
- MEILI_NO_ANALYTICS=true
volumes:
- ${HARBOR_KARAKEEP_WORKSPACE}/meilisearch:/meili_data
networks:
- harbor-network
services:
mindsdb:
container_name: ${HARBOR_CONTAINER_PREFIX}.mindsdb
image: ${HARBOR_MINDSDB_IMAGE}:${HARBOR_MINDSDB_VERSION}
env_file:
- ./.env
- ./mindsdb/override.env
volumes:
- ${HARBOR_MINDSDB_WORKSPACE}:/root/mdb_storage
ports:
- ${HARBOR_MINDSDB_HOST_PORT}:47334
- ${HARBOR_MINDSDB_MYSQL_HOST_PORT}:47335
environment:
- MINDSDB_APIS=${HARBOR_MINDSDB_APIS}
- MINDSDB_USERNAME=${HARBOR_MINDSDB_USERNAME}
- MINDSDB_PASSWORD=${HARBOR_MINDSDB_PASSWORD}
- MKL_SERVICE_FORCE_INTEL=1
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:47334/api/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- harbor-network
services:
netdata:
container_name: ${HARBOR_CONTAINER_PREFIX}.netdata
image: ${HARBOR_NETDATA_IMAGE}:${HARBOR_NETDATA_VERSION}
env_file:
- ./.env
- ./netdata/override.env
ports:
- ${HARBOR_NETDATA_HOST_PORT}:19999
pid: host
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- ${HARBOR_NETDATA_WORKSPACE}/config:/etc/netdata
- ${HARBOR_NETDATA_WORKSPACE}/lib:/var/lib/netdata
- ${HARBOR_NETDATA_WORKSPACE}/cache:/var/cache/netdata
- /:/host/root:ro,rslave
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- harbor-network
services:
onyx:
image: nginx:1.25.5-alpine
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx
env_file:
- ./.env
- ./onyx/override.env
volumes:
- ./onyx/nginx/app.conf.template:/etc/nginx/conf.d/app.conf.template:ro
- ./onyx/nginx/run-nginx.sh:/docker-entrypoint-mount.sh:ro
entrypoint: ["sh", "-c", "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh"]
environment:
ONYX_BACKEND_API_HOST: onyx-api
ONYX_WEB_SERVER_HOST: onyx-web
depends_on:
- onyx-api
- onyx-web
ports:
- ${HARBOR_ONYX_HOST_PORT}:80
networks:
- harbor-network
restart: unless-stopped
onyx-web:
image: onyxdotapp/onyx-web-server:${HARBOR_ONYX_VERSION}
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.web
env_file:
- ./.env
- ./onyx/override.env
environment:
INTERNAL_URL: http://onyx-api:8080
NEXT_PUBLIC_DISABLE_STREAMING: ${HARBOR_ONYX_DISABLE_STREAMING:-false}
NEXT_TELEMETRY_DISABLED: 1
depends_on:
- onyx-api
networks:
- harbor-network
restart: unless-stopped
onyx-api:
image: onyxdotapp/onyx-backend:${HARBOR_ONYX_VERSION}
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.api
command: >
/bin/sh -c "
alembic upgrade head &&
echo 'Starting Onyx API Server' &&
uvicorn onyx.main:app --host 0.0.0.0 --port 8080"
env_file:
- ./.env
- ./onyx/override.env
environment:
AUTH_TYPE: ${HARBOR_ONYX_AUTH_TYPE:-disabled}
POSTGRES_HOST: onyx-db
POSTGRES_USER: ${HARBOR_ONYX_DB_USER:-postgres}
POSTGRES_PASSWORD: ${HARBOR_ONYX_DB_PASSWORD:-onyx}
POSTGRES_DB: ${HARBOR_ONYX_DB_NAME:-onyx}
VESPA_HOST: onyx-index
REDIS_HOST: onyx-cache
MODEL_SERVER_HOST: ${HARBOR_ONYX_MODEL_SERVER_HOST:-}
MODEL_SERVER_PORT: ${HARBOR_ONYX_MODEL_SERVER_PORT:-11434}
DISABLE_MODEL_SERVER: ${HARBOR_ONYX_DISABLE_MODEL_SERVER:-true}
S3_ENDPOINT_URL: http://onyx-minio:9000
S3_AWS_ACCESS_KEY_ID: ${HARBOR_ONYX_MINIO_USER:-minioadmin}
S3_AWS_SECRET_ACCESS_KEY: ${HARBOR_ONYX_MINIO_PASSWORD:-minioadmin}
DO_NOT_TRACK: "true"
DANSWER_RUNNING_IN_DOCKER: "true"
ENV_SEED_CONFIGURATION: '{"llms":[{"name":"Harbor Ollama","provider":"ollama_chat","api_base":"http://ollama:11434","default_model_name":"${HARBOR_ONYX_DEFAULT_MODEL:-llama3.2:3b}","fast_default_model_name":"${HARBOR_ONYX_FAST_MODEL:-llama3.2:3b}","is_public":true,"api_key_changed":true,"model_configurations":[]}]}'
volumes:
- ${HARBOR_ONYX_WORKSPACE}/api_logs:/var/log/onyx
depends_on:
onyx-db:
condition: service_healthy
onyx-index:
condition: service_started
onyx-cache:
condition: service_started
onyx-minio:
condition: service_started
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- harbor-network
restart: unless-stopped
onyx-background:
image: onyxdotapp/onyx-backend:${HARBOR_ONYX_VERSION}
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.background
command: >
/bin/sh -c "/app/scripts/supervisord_entrypoint.sh"
env_file:
- ./.env
- ./onyx/override.env
environment:
USE_LIGHTWEIGHT_BACKGROUND_WORKER: "true"
AUTH_TYPE: ${HARBOR_ONYX_AUTH_TYPE:-disabled}
POSTGRES_HOST: onyx-db
POSTGRES_USER: ${HARBOR_ONYX_DB_USER:-postgres}
POSTGRES_PASSWORD: ${HARBOR_ONYX_DB_PASSWORD:-onyx}
POSTGRES_DB: ${HARBOR_ONYX_DB_NAME:-onyx}
VESPA_HOST: onyx-index
REDIS_HOST: onyx-cache
MODEL_SERVER_HOST: ${HARBOR_ONYX_MODEL_SERVER_HOST:-}
MODEL_SERVER_PORT: ${HARBOR_ONYX_MODEL_SERVER_PORT:-11434}
INDEXING_MODEL_SERVER_HOST: ${HARBOR_ONYX_MODEL_SERVER_HOST:-}
DISABLE_MODEL_SERVER: ${HARBOR_ONYX_DISABLE_MODEL_SERVER:-true}
S3_ENDPOINT_URL: http://onyx-minio:9000
S3_AWS_ACCESS_KEY_ID: ${HARBOR_ONYX_MINIO_USER:-minioadmin}
S3_AWS_SECRET_ACCESS_KEY: ${HARBOR_ONYX_MINIO_PASSWORD:-minioadmin}
DO_NOT_TRACK: "true"
DANSWER_RUNNING_IN_DOCKER: "true"
ENV_SEED_CONFIGURATION: '{"llms":[{"name":"Harbor Ollama","provider":"ollama_chat","api_base":"http://ollama:11434","default_model_name":"${HARBOR_ONYX_DEFAULT_MODEL:-llama3.2:3b}","fast_default_model_name":"${HARBOR_ONYX_FAST_MODEL:-llama3.2:3b}","is_public":true,"api_key_changed":true,"model_configurations":[]}]}'
volumes:
- ${HARBOR_ONYX_WORKSPACE}/background_logs:/var/log/onyx
depends_on:
onyx-db:
condition: service_healthy
onyx-index:
condition: service_started
onyx-cache:
condition: service_started
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- harbor-network
restart: unless-stopped
onyx-db:
image: postgres:15.2-alpine
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.db
env_file:
- ./.env
- ./onyx/override.env
environment:
POSTGRES_USER: ${HARBOR_ONYX_DB_USER:-postgres}
POSTGRES_PASSWORD: ${HARBOR_ONYX_DB_PASSWORD:-onyx}
POSTGRES_DB: ${HARBOR_ONYX_DB_NAME:-onyx}
command: -c max_connections=250
volumes:
- ${HARBOR_ONYX_WORKSPACE}/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${HARBOR_ONYX_DB_USER:-postgres}"]
interval: 5s
timeout: 5s
retries: 5
networks:
- harbor-network
restart: unless-stopped
onyx-cache:
image: redis:7.4-alpine
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.cache
command: redis-server --save "" --appendonly no
tmpfs:
- /data
networks:
- harbor-network
restart: unless-stopped
onyx-index:
image: vespaengine/vespa:${HARBOR_ONYX_VESPA_VERSION}
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.index
environment:
VESPA_SKIP_UPGRADE_CHECK: "true"
volumes:
- ${HARBOR_ONYX_WORKSPACE}/vespa:/opt/vespa/var
networks:
- harbor-network
restart: unless-stopped
onyx-minio:
image: minio/minio:${HARBOR_ONYX_MINIO_VERSION}
container_name: ${HARBOR_CONTAINER_PREFIX}.onyx.minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${HARBOR_ONYX_MINIO_USER:-minioadmin}
MINIO_ROOT_PASSWORD: ${HARBOR_ONYX_MINIO_PASSWORD:-minioadmin}
volumes:
- ${HARBOR_ONYX_WORKSPACE}/minio:/data
networks:
- harbor-network
restart: unless-stopped
services:
presenton:
container_name: ${HARBOR_CONTAINER_PREFIX}.presenton
image: ${HARBOR_PRESENTON_IMAGE}:${HARBOR_PRESENTON_VERSION}
ports:
- ${HARBOR_PRESENTON_HOST_PORT}:80
volumes:
- ./presenton/app_data:/app_data
- ${HARBOR_OLLAMA_CACHE}:/root/.ollama
- ${HARBOR_HF_CACHE}:/app/models
- ${HARBOR_LLAMACPP_CACHE}:/root/.cache/llama.cpp
env_file:
- ./.env
- ./presenton/override.env
environment:
- CAN_CHANGE_KEYS=${HARBOR_PRESENTON_CAN_CHANGE_KEYS}
- LLM=${HARBOR_PRESENTON_LLM}
- OPENAI_API_KEY=${HARBOR_PRESENTON_OPENAI_API_KEY}
- OPENAI_MODEL=${HARBOR_PRESENTON_OPENAI_MODEL}
- GOOGLE_API_KEY=${HARBOR_PRESENTON_GOOGLE_API_KEY}
- GOOGLE_MODEL=${HARBOR_PRESENTON_GOOGLE_MODEL}
- ANTHROPIC_API_KEY=${HARBOR_PRESENTON_ANTHROPIC_API_KEY}
- ANTHROPIC_MODEL=${HARBOR_PRESENTON_ANTHROPIC_MODEL}
- OLLAMA_URL=${HARBOR_PRESENTON_OLLAMA_URL}
- OLLAMA_MODEL=${HARBOR_PRESENTON_OLLAMA_MODEL}
- CUSTOM_LLM_URL=${HARBOR_PRESENTON_CUSTOM_LLM_URL}
- CUSTOM_LLM_API_KEY=${HARBOR_PRESENTON_CUSTOM_LLM_API_KEY}
- CUSTOM_MODEL=${HARBOR_PRESENTON_CUSTOM_MODEL}
- IMAGE_PROVIDER=${HARBOR_PRESENTON_IMAGE_PROVIDER}
- PEXELS_API_KEY=${HARBOR_PRESENTON_PEXELS_API_KEY}
- EXTENDED_REASONING=${HARBOR_PRESENTON_EXTENDED_REASONING}
- WEB_GROUNDING=${HARBOR_PRESENTON_WEB_GROUNDING}
- TOOL_CALLS=${HARBOR_PRESENTON_TOOL_CALLS}
- DISABLE_THINKING=${HARBOR_PRESENTON_DISABLE_THINKING}
- DATABASE_URL=${HARBOR_PRESENTON_DATABASE_URL}
- DISABLE_ANONYMOUS_TRACKING=${HARBOR_PRESENTON_DISABLE_ANONYMOUS_TRACKING}
networks:
- harbor-network
services:
resume-matcher-backend:
container_name: ${HARBOR_CONTAINER_PREFIX}.resume-matcher-backend
build:
context: ${HARBOR_RESUME_MATCHER_GIT_REF}
dockerfile_inline: |
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV UV_CACHE_DIR=/tmp/uv-cache
RUN apt-get update && apt-get install -y --no-install-recommends curl build-essential && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir uv
WORKDIR /app
COPY apps/backend/ .
RUN sed -i 's/==[0-9.]*//g' pyproject.toml && rm -f uv.lock
RUN uv lock && uv sync
RUN if [ ! -f .env ] && [ -f .env.sample ]; then cp .env.sample .env; fi
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=30s CMD curl -f http://localhost:8000/ping || exit 1
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--timeout-keep-alive", "300"]
ports:
- ${HARBOR_RESUME_MATCHER_BACKEND_HOST_PORT}:8000
env_file:
- ./.env
- ./resume-matcher/override.env
environment:
- SESSION_SECRET_KEY=${HARBOR_RESUME_MATCHER_SESSION_SECRET}
- SYNC_DATABASE_URL=sqlite:///./app.db
- ASYNC_DATABASE_URL=sqlite+aiosqlite:///./app.db
- LLM_PROVIDER=${HARBOR_RESUME_MATCHER_LLM_PROVIDER}
- LL_MODEL=${HARBOR_RESUME_MATCHER_LLM_MODEL}
- EMBEDDING_PROVIDER=${HARBOR_RESUME_MATCHER_EMBEDDING_PROVIDER}
- EMBEDDING_MODEL=${HARBOR_RESUME_MATCHER_EMBEDDING_MODEL}
- ALLOWED_ORIGINS=["http://localhost:${HARBOR_RESUME_MATCHER_HOST_PORT}", "http://localhost:3000", "http://resume-matcher:3000"]
volumes:
- ${HARBOR_RESUME_MATCHER_WORKSPACE}/data:/app/data
networks:
- harbor-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
resume-matcher:
container_name: ${HARBOR_CONTAINER_PREFIX}.resume-matcher
build:
context: ${HARBOR_RESUME_MATCHER_GIT_REF}
dockerfile_inline: |
FROM node:18-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY apps/frontend/package*.json ./
RUN npm ci
FROM node:18-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY apps/frontend/ .
ARG NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_API_URL=$$NEXT_PUBLIC_API_URL
ENV NEXT_TELEMETRY_DISABLED=1
RUN printf "import type { NextConfig } from 'next';\nconst nextConfig: NextConfig = {\n output: 'standalone',\n eslint: { ignoreDuringBuilds: true },\n typescript: { ignoreBuildErrors: true },\n};\nexport default nextConfig;\n" > next.config.ts
RUN find . -name 'layout.tsx' -path '*/app/*' -exec sh -c 'grep -L "export const dynamic" "$$1" && echo "export const dynamic = \"force-dynamic\";" >> "$$1"' _ {} \; 2>/dev/null || true
RUN npm run build
FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
RUN mkdir .next && chown nextjs:nodejs .next
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]
args:
- NEXT_PUBLIC_API_URL=http://localhost:${HARBOR_RESUME_MATCHER_BACKEND_HOST_PORT}
ports:
- ${HARBOR_RESUME_MATCHER_HOST_PORT}:3000
env_file:
- ./.env
- ./resume-matcher/override.env
environment:
- NODE_ENV=production
- NEXT_PUBLIC_API_URL=http://localhost:${HARBOR_RESUME_MATCHER_BACKEND_HOST_PORT}
depends_on:
resume-matcher-backend:
condition: service_healthy
networks:
- harbor-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:3000"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
services:
sim:
container_name: ${HARBOR_CONTAINER_PREFIX}.sim
image: ${HARBOR_SIM_IMAGE}:${HARBOR_SIM_VERSION}
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- ${HARBOR_SIM_HOST_PORT}:3000
deploy:
resources:
limits:
memory: 8G
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://${HARBOR_SIM_DB_USER}:${HARBOR_SIM_DB_PASSWORD}@sim-postgres:5432/${HARBOR_SIM_DB_NAME}
- BETTER_AUTH_URL=http://host.docker.internal:${HARBOR_SIM_HOST_PORT}
- NEXT_PUBLIC_APP_URL=http://host.docker.internal:${HARBOR_SIM_HOST_PORT}
- BETTER_AUTH_SECRET=${HARBOR_SIM_AUTH_SECRET}
- ENCRYPTION_KEY=${HARBOR_SIM_ENCRYPTION_KEY}
- INTERNAL_API_SECRET=${HARBOR_SIM_INTERNAL_API_SECRET}
- OLLAMA_URL=${HARBOR_SIM_OLLAMA_URL:-http://host.docker.internal:11434}
- SOCKET_SERVER_URL=http://sim-realtime:3002
- NEXT_PUBLIC_SOCKET_URL=http://host.docker.internal:${HARBOR_SIM_REALTIME_HOST_PORT}
env_file:
- ./.env
- ./sim/override.env
depends_on:
sim-postgres:
condition: service_healthy
sim-migrations:
condition: service_completed_successfully
sim-realtime:
condition: service_healthy
healthcheck:
test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3000']
interval: 90s
timeout: 5s
retries: 3
start_period: 10s
networks:
- harbor-network
sim-realtime:
container_name: ${HARBOR_CONTAINER_PREFIX}.sim-realtime
image: ${HARBOR_SIM_REALTIME_IMAGE}:${HARBOR_SIM_VERSION}
restart: unless-stopped
ports:
- ${HARBOR_SIM_REALTIME_HOST_PORT}:3002
deploy:
resources:
limits:
memory: 8G
environment:
- DATABASE_URL=postgresql://${HARBOR_SIM_DB_USER}:${HARBOR_SIM_DB_PASSWORD}@sim-postgres:5432/${HARBOR_SIM_DB_NAME}
- NEXT_PUBLIC_APP_URL=http://localhost:${HARBOR_SIM_HOST_PORT}
- BETTER_AUTH_URL=http://localhost:${HARBOR_SIM_HOST_PORT}
- BETTER_AUTH_SECRET=${HARBOR_SIM_AUTH_SECRET}
env_file:
- ./.env
- ./sim/override.env
depends_on:
sim-postgres:
condition: service_healthy
healthcheck:
test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3002/health']
interval: 90s
timeout: 5s
retries: 3
start_period: 10s
networks:
- harbor-network
sim-migrations:
container_name: ${HARBOR_CONTAINER_PREFIX}.sim-migrations
image: ${HARBOR_SIM_MIGRATIONS_IMAGE}:${HARBOR_SIM_VERSION}
working_dir: /app/packages/db
environment:
- DATABASE_URL=postgresql://${HARBOR_SIM_DB_USER}:${HARBOR_SIM_DB_PASSWORD}@sim-postgres:5432/${HARBOR_SIM_DB_NAME}
env_file:
- ./.env
- ./sim/override.env
depends_on:
sim-postgres:
condition: service_healthy
command: ['bun', 'run', 'db:migrate']
restart: 'no'
networks:
- harbor-network
sim-postgres:
container_name: ${HARBOR_CONTAINER_PREFIX}.sim-postgres
image: ${HARBOR_SIM_DB_IMAGE}:${HARBOR_SIM_DB_VERSION}
restart: unless-stopped
ports:
- ${HARBOR_SIM_DB_HOST_PORT}:5432
environment:
- POSTGRES_USER=${HARBOR_SIM_DB_USER}
- POSTGRES_PASSWORD=${HARBOR_SIM_DB_PASSWORD}
- POSTGRES_DB=${HARBOR_SIM_DB_NAME}
volumes:
- ${HARBOR_SIM_WORKSPACE}/postgres:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${HARBOR_SIM_DB_USER}']
interval: 5s
timeout: 5s
retries: 5
networks:
- harbor-network
services:
drawio:
environment:
- AI_PROVIDER=ollama
- OLLAMA_BASE_URL=${HARBOR_OLLAMA_INTERNAL_URL}/v1
services:
karakeep:
environment:
- OLLAMA_BASE_URL=${HARBOR_OLLAMA_INTERNAL_URL}
services:
mindsdb:
environment:
- LLM_FUNCTION_BASE_URL=http://llamacpp:8080/v1
- OPENAI_API_KEY=sk-llamacpp
services:
mindsdb:
environment:
- LLM_FUNCTION_BASE_URL=${HARBOR_OLLAMA_INTERNAL_URL}/v1
- LLM_FUNCTION_MODEL=${HARBOR_MINDSDB_OLLAMA_MODEL}
- OPENAI_API_KEY=sk-ollama
services:
mindsdb:
environment:
- LLM_FUNCTION_BASE_URL=http://vllm:8000/v1
- OPENAI_API_KEY=sk-vllm
# This file is generated by seed-cdi.ts script,
# any updates will be overwritten.
services:
presenton:
deploy:
resources:
reservations:
devices:
- driver: cdi
capabilities: [gpu]
device_ids:
- nvidia.com/gpu=all
services:
presenton:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
services:
presenton:
environment:
- LLM=ollama
- OLLAMA_URL=http://localhost:33821
- OLLAMA_MODEL=${HARBOR_PRESENTON_OLLAMA_MODEL:-llama3.1:8b}
services:
resume-matcher-backend:
environment:
- OLLAMA_HOST=${HARBOR_OLLAMA_INTERNAL_URL}
- LLM_PROVIDER=ollama
- LLM_BASE_URL=${HARBOR_OLLAMA_INTERNAL_URL}
- EMBEDDING_PROVIDER=ollama
- EMBEDDING_BASE_URL=${HARBOR_OLLAMA_INTERNAL_URL}
services:
sim:
environment:
- OLLAMA_URL=${HARBOR_OLLAMA_INTERNAL_URL}
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
drawio:
labels:
- "traefik.enable=true"
- "traefik.http.routers.drawio.rule=Host(`drawio.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.drawio.loadbalancer.server.port=3000"
- "traefik.http.routers.drawio.entrypoints=websecure"
- "traefik.http.routers.drawio.tls=true"
- "traefik.http.routers.drawio.service=drawio"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
karakeep:
labels:
- "traefik.enable=true"
- "traefik.http.routers.karakeep.rule=Host(`karakeep.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.karakeep.loadbalancer.server.port=3000"
- "traefik.http.routers.karakeep.entrypoints=websecure"
- "traefik.http.routers.karakeep.tls=true"
- "traefik.http.routers.karakeep.service=karakeep"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
mindsdb:
labels:
- "traefik.enable=true"
- "traefik.http.routers.mindsdb.rule=Host(`mindsdb.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.mindsdb.loadbalancer.server.port=47334"
- "traefik.http.routers.mindsdb.entrypoints=websecure"
- "traefik.http.routers.mindsdb.tls=true"
- "traefik.http.routers.mindsdb.service=mindsdb"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
netdata:
labels:
- "traefik.enable=true"
- "traefik.http.routers.netdata.rule=Host(`netdata.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.netdata.loadbalancer.server.port=19999"
- "traefik.http.routers.netdata.entrypoints=websecure"
- "traefik.http.routers.netdata.tls=true"
- "traefik.http.routers.netdata.service=netdata"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
onyx:
labels:
- "traefik.enable=true"
- "traefik.http.routers.onyx.rule=Host(`onyx.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.onyx.loadbalancer.server.port=80"
- "traefik.http.routers.onyx.entrypoints=websecure"
- "traefik.http.routers.onyx.tls=true"
- "traefik.http.routers.onyx.service=onyx"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
presenton:
labels:
- "traefik.enable=true"
- "traefik.http.routers.presenton.rule=Host(`presenton.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.presenton.loadbalancer.server.port=80"
- "traefik.http.routers.presenton.entrypoints=websecure"
- "traefik.http.routers.presenton.tls=true"
- "traefik.http.routers.presenton.service=presenton"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
resume-matcher:
labels:
- "traefik.enable=true"
- "traefik.http.routers.resume-matcher.rule=Host(`resume-matcher.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.resume-matcher.loadbalancer.server.port=3000"
- "traefik.http.routers.resume-matcher.entrypoints=websecure"
- "traefik.http.routers.resume-matcher.tls=true"
- "traefik.http.routers.resume-matcher.service=resume-matcher"
networks:
- traefik-public
# This file is generated by seed-traefik.ts script,
# any updates will be overwritten.
services:
sim:
labels:
- "traefik.enable=true"
- "traefik.http.routers.sim.rule=Host(`sim.${HARBOR_TRAEFIK_DOMAIN}`)"
- "traefik.http.services.sim.loadbalancer.server.port=3000"
- "traefik.http.routers.sim.entrypoints=websecure"
- "traefik.http.routers.sim.tls=true"
- "traefik.http.routers.sim.service=sim"
networks:
- traefik-public
### [Presenton](https://github.com/presenton/presenton)
> Handle: `presenton`<br/>
> URL: [http://localhost:34531](http://localhost:34531)
![GitHub stars](https://img.shields.io/github/stars/presenton/presenton?style=social)
![GitHub forks](https://img.shields.io/github/forks/presenton/presenton?style=social)
![GitHub language count](https://img.shields.io/github/languages/count/presenton/presenton)
![GitHub top language](https://img.shields.io/github/languages/top/presenton/presenton)
![GitHub last commit](https://img.shields.io/github/last-commit/presenton/presenton?color=red)
![Presenton Screenshot](./harbor-presenton.png)
Presenton is an open-source AI presentation generator that creates professional presentations from text prompts or documents. It's a self-hosted alternative to Gamma.ai, Beautiful.ai, and Decktopus.
**Key Features:**
- 🎨 **Custom Templates & Themes** - Create unlimited presentation designs with HTML and Tailwind CSS
- 🤖 **AI Template Generation** - Generate templates from existing PowerPoint documents
- 📝 **Flexible Generation** - Build presentations from prompts or uploaded documents
- 💾 **Export Ready** - Save as PowerPoint (PPTX) and PDF with professional formatting
- 🔌 **Built-In MCP Server** - Generate presentations over Model Context Protocol
- 🔑 **Bring Your Own Key** - Use your own API keys for OpenAI, Google Gemini, Anthropic Claude, or any compatible provider
- 🦙 **Ollama Integration** - Run open-source models locally with full privacy
- 🔗 **OpenAI API Compatible** - Connect to any OpenAI-compatible endpoint
- 🎨 **Multi-Provider Support** - Mix and match text and image generation providers
- 🖼️ **Versatile Image Generation** - Choose from DALL-E 3, Gemini Flash, Pexels, or Pixabay
- 🌐 **Runs Locally** - All processing happens on your device, no cloud dependencies
## Starting
```bash
# [Optional] Pre-pull the image
# might take a while as it bundles Ollama + GPU support
harbor pull presenton
# Start the service with web UI
harbor up presenton --open
# Or start with Ollama for local inference
harbor up presenton ollama --open
```
## Usage
- By default, Harbor will connect Presenton to included Ollama instance
- When connecting to other included backends - you may use `custom` LLM option
- Since Presenton runs from within Browser - ensure to use public URLs for the services, e.g. `harbor url ollama`, `harbor url llamacpp`, etc.
- Harbor shares Ollama/LlamaCPP/HuggingFace Cache with Presenton
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# The port on the host where Presenton will be available
HARBOR_PRESENTON_HOST_PORT=34531
# Docker image and version
HARBOR_PRESENTON_IMAGE="ghcr.io/presenton/presenton"
HARBOR_PRESENTON_VERSION="latest"
# Allow users to change API keys in the UI
HARBOR_PRESENTON_CAN_CHANGE_KEYS="true"
# LLM Provider Configuration
# Options: "openai", "google", "anthropic", "ollama", "custom"
HARBOR_PRESENTON_LLM=""
# OpenAI Configuration
HARBOR_PRESENTON_OPENAI_API_KEY=""
HARBOR_PRESENTON_OPENAI_MODEL=""
# Google Gemini Configuration
HARBOR_PRESENTON_GOOGLE_API_KEY=""
HARBOR_PRESENTON_GOOGLE_MODEL=""
# Anthropic Claude Configuration
HARBOR_PRESENTON_ANTHROPIC_API_KEY=""
HARBOR_PRESENTON_ANTHROPIC_MODEL=""
# Ollama Configuration (auto-configured when running with Ollama)
HARBOR_PRESENTON_OLLAMA_URL=""
HARBOR_PRESENTON_OLLAMA_MODEL=""
# Custom OpenAI-compatible API
HARBOR_PRESENTON_CUSTOM_LLM_URL=""
HARBOR_PRESENTON_CUSTOM_LLM_API_KEY=""
HARBOR_PRESENTON_CUSTOM_MODEL=""
# Image Provider Configuration
# Options: "pexels", "pixabay", "dalle", "gemini"
HARBOR_PRESENTON_IMAGE_PROVIDER="pexels"
HARBOR_PRESENTON_PEXELS_API_KEY=""
# Feature Flags
HARBOR_PRESENTON_EXTENDED_REASONING="false"
HARBOR_PRESENTON_WEB_GROUNDING="false"
HARBOR_PRESENTON_TOOL_CALLS="false"
HARBOR_PRESENTON_DISABLE_THINKING="false"
# Database URL (optional, for external database)
HARBOR_PRESENTON_DATABASE_URL=""
# Privacy
HARBOR_PRESENTON_DISABLE_ANONYMOUS_TRACKING="true"
```
### Using with OpenAI
```bash
# Configure OpenAI
harbor config set presenton.llm openai
harbor config set presenton.openai_api_key sk-your-key
harbor config set presenton.openai_model gpt-4
# Start Presenton
harbor up presenton --open
```
### Using with Ollama (Local Models)
When running Presenton with Ollama, Harbor automatically configures the connection:
```bash
# Start both services together
harbor up presenton ollama --open
# Ollama URL and default model are automatically configured
# You can change the model in the UI or via config:
harbor config set presenton.ollama_model llama3.1:8b
```
### Using with Google Gemini
```bash
# Configure Google Gemini
harbor config set presenton.llm google
harbor config set presenton.google_api_key your-api-key
harbor config set presenton.google_model gemini-pro
harbor up presenton --open
```
### Using with Anthropic Claude
```bash
# Configure Anthropic
harbor config set presenton.llm anthropic
harbor config set presenton.anthropic_api_key sk-ant-your-key
harbor config set presenton.anthropic_model claude-3-sonnet-20240229
harbor up presenton --open
```
### Using with Custom OpenAI-Compatible APIs
```bash
# Configure custom endpoint (e.g., vLLM, TabbyAPI, etc.)
harbor config set presenton.llm custom
harbor config set presenton.custom_llm_url http://your-api:8000/v1
harbor config set presenton.custom_llm_api_key your-key
harbor config set presenton.custom_model your-model-name
harbor up presenton --open
```
### Image Generation
Presenton can use various image providers:
```bash
# Using Pexels (free, no API key required for basic use)
harbor config set presenton.image_provider pexels
harbor config set presenton.pexels_api_key your-pexels-key
# Using DALL-E (requires OpenAI API key)
harbor config set presenton.image_provider dalle
# Using Gemini Flash (requires Google API key)
harbor config set presenton.image_provider gemini
# Using Pixabay
harbor config set presenton.image_provider pixabay
```
## Troubleshooting
### Service won't start
- Check if port 34531 is available: `lsof -i :34531`
- Check logs: `harbor logs presenton`
- Ensure you have an LLM provider configured
### No LLM provider configured
- Configure at least one LLM provider (OpenAI, Gemini, Anthropic, Ollama, or custom)
- Or start with Ollama: `harbor up presenton ollama`
### Images not generating
- Ensure you have an image provider configured
- For Pexels, get a free API key at https://www.pexels.com/api/
- Or disable image generation in the UI
### Presentations not persisting
- Check that `./presenton/app_data` directory exists and is writable
- Verify volume mount in `harbor logs presenton`
## See Also
- [Official Presenton Documentation](https://docs.presenton.ai)
- [Ollama Backend](./2.2.1-Backend:-Ollama.md)
- [Harbor Config Reference](./3.-Harbor-CLI-Reference.md#harbor-config)
### [Onyx](https://github.com/onyx-dot-app/onyx)
> Handle: `onyx`<br/>
> URL: [http://localhost:34601](http://localhost:34601)
![Onyx Screenshot](./harbor-onyx.png)
Onyx (formerly Danswer) is an open-source AI platform that combines a Chat UI with powerful RAG capabilities. It's a self-hostable alternative to enterprise knowledge management and AI assistant platforms.
**Key Features:**
- **40+ connectors**: Slack, Google Drive, Notion, Confluence, GitHub, and more
- **Chat UI**: Full-featured chat interface with conversation history
- **RAG**: Retrieval-augmented generation with Vespa search engine
- **MCP support**: Model Context Protocol for tool integration
- **Multi-user**: Authentication and user management
- **OpenAI-compatible**: Works with any OpenAI API-compatible backend
## Starting
```bash
# Pull the images
harbor pull onyx
# Start Onyx with Ollama
harbor up ollama onyx --open
```
- First startup takes several minutes while Vespa initializes its search indices
- Onyx comes pre-configured to use Harbor's Ollama as the LLM backend
- Monitor Vespa initialization with `harbor logs onyx-index`
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Main UI port (nginx reverse proxy)
HARBOR_ONYX_HOST_PORT 34601
# Persistent data directory
HARBOR_ONYX_WORKSPACE ./onyx/data
# Image versions
HARBOR_ONYX_VERSION latest
HARBOR_ONYX_VESPA_VERSION 8.277.17
HARBOR_ONYX_MINIO_VERSION latest
# Authentication (disabled, basic, google_oauth, oidc)
HARBOR_ONYX_AUTH_TYPE disabled
# Database configuration
HARBOR_ONYX_DB_USER postgres
HARBOR_ONYX_DB_PASSWORD harbor_onyx_db_password
HARBOR_ONYX_DB_NAME onyx
# MinIO storage
HARBOR_ONYX_MINIO_USER minioadmin
HARBOR_ONYX_MINIO_PASSWORD harbor_onyx_minio_password
# LLM configuration (seeded on first start)
HARBOR_ONYX_DEFAULT_MODEL llama3.2:3b
HARBOR_ONYX_FAST_MODEL llama3.2:3b
```
### Volumes
Onyx persists data in the following directories:
- `onyx/data/db/` - PostgreSQL database
- `onyx/data/vespa/` - Vespa search indices
- `onyx/data/minio/` - MinIO object storage
## Integration with Harbor
Onyx comes **pre-configured to use Harbor's Ollama** as the default LLM backend:
```bash
# Start both services - ready to chat immediately
harbor up ollama onyx
```
To change the default model:
```bash
# Set a different default model
harbor config set onyx.default_model qwen2.5:7b
# Pull the model in Ollama
harbor ollama pull qwen2.5:7b
# Restart with fresh database to apply seed config
harbor down onyx && rm -rf onyx/data/db && harbor up onyx
```
> **Note:** Seed configuration is only applied on fresh database initialization. After initial setup, configure models via the Onyx Admin UI under **Configuration → LLM**.
## Troubleshooting
### Check Logs
```bash
# All services
harbor logs onyx
# Specific service
harbor logs onyx-api
harbor logs onyx-background
harbor logs onyx-index
```
### Database Issues
If migrations fail or database is corrupted:
```bash
# Stop services
harbor down onyx
# Remove database (WARNING: destroys all data)
rm -rf onyx/data/db
# Restart
harbor up onyx
```
### Memory Issues
Vespa search engine requires significant memory. Recommended minimum **8GB RAM** for the host system. If containers crash due to OOM, check available memory.
## Links
- [Official Documentation](https://docs.onyx.app/)
- [GitHub Repository](https://github.com/onyx-dot-app/onyx)
- [Connector List](https://docs.onyx.app/connectors/overview)
### [Karakeep](https://github.com/karakeep-app/karakeep)
> Handle: `karakeep`<br/>
> URL: [http://localhost:34541](http://localhost:34541)
![Karakeep screenshot](./harbor-karakeep.png)
Karakeep is an open-source, self-hosted bookmark manager with AI-powered automatic tagging. Save and organize links, notes, images, and PDFs with full-text search powered by Meilisearch.
#### Starting
```bash
# Start the service
harbor up karakeep
# Open in browser
harbor open karakeep
# With Ollama for AI tagging
harbor up karakeep ollama
```
#### Configuration
##### Environment Variables
The following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config) or in `karakeep/override.env`:
```bash
# Host port (default: 34541)
HARBOR_KARAKEEP_HOST_PORT
# Docker image settings
HARBOR_KARAKEEP_IMAGE # default: ghcr.io/karakeep-app/karakeep
HARBOR_KARAKEEP_VERSION # default: release (or pin to specific version like 0.29.0)
# Chrome container for web crawling
HARBOR_KARAKEEP_CHROME_IMAGE # default: gcr.io/zenika-hub/alpine-chrome
HARBOR_KARAKEEP_CHROME_VERSION # default: 124
# Meilisearch for full-text search
HARBOR_KARAKEEP_MEILI_IMAGE # default: getmeili/meilisearch
HARBOR_KARAKEEP_MEILI_VERSION # default: v1.13.3
# Security keys (change these!)
HARBOR_KARAKEEP_NEXTAUTH_SECRET # JWT signing secret
HARBOR_KARAKEEP_MEILI_MASTER_KEY # Meilisearch authentication key
# Data directory
HARBOR_KARAKEEP_WORKSPACE # default: ./karakeep/data
```
##### AI Tagging with Ollama
When running with Ollama, Karakeep will automatically use it for AI-powered tagging:
```bash
harbor up karakeep ollama
```
You can configure the inference models in `karakeep/override.env`:
```bash
# Text model for tagging (must support chat completion)
INFERENCE_TEXT_MODEL=qwen3-vl:8b
# Image model for visual content (must support vision)
INFERENCE_IMAGE_MODEL=qwen3-vl:8b
```
Or set them via Harbor CLI:
```bash
harbor config set karakeep.inference_text_model qwen3-vl:8b
harbor config set karakeep.inference_image_model qwen3-vl:8b
```
##### AI Tagging with OpenAI
Set your OpenAI API key via Harbor:
```bash
harbor config set openai.key <your-api-key>
```
##### Additional Configuration
For more configuration options (OCR, crawling, webhooks, etc.), see the [Karakeep Configuration Docs](https://docs.karakeep.app/configuration).
#### Volumes
- `./karakeep/data` - Bookmark data, assets, and database
- `./karakeep/data/meilisearch` - Search index data
### [Netdata](https://github.com/netdata/netdata)
> Handle: `netdata`<br/>
> URL: [http://localhost:34551](http://localhost:34551)
![Netdata Screenshot](./harbor-netdata.png)
Real-time infrastructure monitoring and troubleshooting. Netdata collects thousands of metrics from systems, hardware, containers, and applications with zero configuration. It provides beautiful, interactive, real-time dashboards with per-second granularity.
## Starting
```bash
# [Optional] Pre-pull the Netdata image
harbor pull netdata
# Start the service
harbor up netdata --open
```
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Port for Netdata web UI
HARBOR_NETDATA_HOST_PORT 34551
# Docker image
HARBOR_NETDATA_IMAGE netdata/netdata
HARBOR_NETDATA_VERSION stable
# Workspace for persistent data
HARBOR_NETDATA_WORKSPACE ./netdata
```
### Volumes
Netdata requires extensive access to host resources for monitoring:
| Path | Purpose |
|------|---------|
| `./netdata/config` | Netdata configuration files |
| `./netdata/lib` | Persistent library data |
| `./netdata/cache` | Cache for metrics |
| `/` | Host filesystem (read-only, for disk monitoring) |
| `/proc` | Process information |
| `/sys` | System information |
| `/var/log` | Log files |
| `/var/run/docker.sock` | Docker container monitoring |
### Security Notes
Netdata runs with elevated privileges for comprehensive monitoring:
- **`pid: host`** - Access to host PID namespace for process monitoring
- **`SYS_PTRACE`** - Required for process tracing
- **`SYS_ADMIN`** - Required for cgroup and network monitoring
- **`apparmor:unconfined`** - Disabled AppArmor for full access
These capabilities are required for Netdata's core functionality. If you need a more restricted setup, consider running Netdata directly on the host instead.
## Customizing Netdata
After starting the service, you can edit the configuration by:
1) Placing custom config files in `$(harbor home)/netdata/config/netdata.conf`
2) Using built-in `edit-config` script inside the container:
```bash
# Access the container
harbor exec netdata bash
# Edit configuration
cd /etc/netdata
./edit-config netdata.conf
# After editing, restart the service
harbor restart netdata
```
## Docker Tags
| Tag | Description |
|-----|-------------|
| `stable` | Most recently published stable build |
| `edge` | Most recently published nightly build |
| `latest` | Most recent build (stable or nightly) |
| `vX.Y.Z` | Specific version (e.g., v1.40.0) |
### [Resume Matcher](https://github.com/srbhr/Resume-Matcher)
> Handle: `resume-matcher`<br/>
> URL: [http://localhost:34561](http://localhost:34561)
![Resume Matcher Screenshot](./harbor-resume-matcher.png)
Resume Matcher is an AI-powered tool for comparing resumes against job descriptions. It analyzes resumes in PDF/DOCX format, extracts keywords, compares them with job descriptions, and provides improvement suggestions using local LLMs via Ollama.
**Key Features:**
- **Resume Analysis**: Upload resumes in PDF or DOCX format for automated parsing
- **Keyword Extraction**: Identifies key skills and qualifications from resumes and job descriptions
- **Match Scoring**: Compares resume content against job requirements
- **AI Suggestions**: Provides improvement recommendations using local LLMs
- **Local Processing**: All data stays on your machine with Ollama-powered inference
**Architecture:**
- FastAPI backend (Python 3.12, uv package manager) on port 34562
- Next.js frontend (Node.js 18) on port 34561
- SQLite database for persistent storage
- Ollama integration for LLM and embeddings
## Starting
```bash
# Start Resume Matcher with Ollama
harbor up resume-matcher ollama
# Open in browser
harbor open resume-matcher
```
The first startup will:
1. Build both frontend and backend containers
2. Pull the required Ollama models (`gemma3:4b` for LLM, `bge-m3` for embeddings)
See [troubleshooting guide](./1.-Harbor-User-Guide#troubleshooting) if you encounter any issues.
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Frontend UI port
HARBOR_RESUME_MATCHER_HOST_PORT 34561
# Backend API port
HARBOR_RESUME_MATCHER_BACKEND_HOST_PORT 34562
# Git reference for building
HARBOR_RESUME_MATCHER_GIT_REF "https://github.com/srbhr/Resume-Matcher.git#main"
# Workspace directory for data persistence
HARBOR_RESUME_MATCHER_WORKSPACE "./resume-matcher"
# Session secret (change in production)
HARBOR_RESUME_MATCHER_SESSION_SECRET "harbor_resume_matcher_secret_change_me"
# LLM configuration
HARBOR_RESUME_MATCHER_LLM_PROVIDER "ollama"
HARBOR_RESUME_MATCHER_LLM_MODEL "gemma3:4b"
# Embedding configuration
HARBOR_RESUME_MATCHER_EMBEDDING_PROVIDER "ollama"
HARBOR_RESUME_MATCHER_EMBEDDING_MODEL "bge-m3:latest"
```
### Volumes
Resume Matcher persists data in the following directories:
- `resume-matcher/data/` - Uploaded resumes, job descriptions, and SQLite database
### Ollama Integration
When running with Ollama, Harbor automatically configures the connection between Resume Matcher and Ollama. Ensure the required models are available:
```bash
# Pull the LLM model
harbor pull gemma3:4b
harbor ollama pull gemma3:4b
# Pull the embedding model
harbor ollama pull bge-m3:latest
```
You can customize the models via configuration:
```bash
# Use a different LLM
harbor config set resume-matcher.llm.model llama3.2:3b
# Use a different embedding model
harbor config set resume-matcher.embedding.model nomic-embed-text:latest
```
### [Next AI Draw.io](https://github.com/DayuanJiang/next-ai-draw-io)
> Handle: `drawio`<br/>
> URL: [http://localhost:34571](http://localhost:34571)
![Next AI Draw.io Screenshot](./harbor-drawio.png)
Next AI Draw.io is an AI-powered diagram creation tool that integrates with draw.io. It lets you create, modify, and enhance diagrams through natural language commands and AI-assisted visualization.
**Key Features:**
- **Natural Language Diagrams**: Create diagrams by describing them in plain English
- **Image Replication**: Upload an image and let AI replicate it as an editable diagram
- **File Upload Support**: Import PDFs and text files to generate diagrams from content
- **Cloud Architecture**: Create AWS, GCP, and Azure architecture diagrams with AI assistance
- **Multi-Provider AI**: Works with Ollama, OpenAI, Anthropic, Google, and DeepSeek
- **Animated Connectors**: Add animated connections between diagram elements
## Starting
```bash
# [Optional] Pull the image
harbor pull drawio
# Start with Ollama (default configuration)
harbor up drawio ollama
# Open in browser
harbor open drawio
```
- When running with Ollama, Harbor automatically configures the connection via `compose.x.drawio.ollama.yml`.
- Despite Harbor sets configuration variables as required per service documentation, they might still reset in the UI, in that instance, please re-enter them.<br/>
<img src="./harbor-drawio-settings.png" alt="Settings" width="200">
- ⚠️ The smallest model that was able to generate simple diagrams was `qwen3:30b`
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Main UI port
HARBOR_DRAWIO_HOST_PORT 34571
# Docker image
HARBOR_DRAWIO_IMAGE ghcr.io/dayuanjiang/next-ai-draw-io
HARBOR_DRAWIO_VERSION latest
# AI provider: ollama, openai, anthropic, google, deepseek
HARBOR_DRAWIO_AI_PROVIDER ollama
# Model to use for diagram generation
HARBOR_DRAWIO_AI_MODEL gemma3:4b
# Temperature for AI responses (leave empty for default)
HARBOR_DRAWIO_TEMPERATURE
# Optional access code to protect the UI
HARBOR_DRAWIO_ACCESS_CODE
```
### API Keys
Drawio uses the common Harbor API keys for external providers:
```bash
# OpenAI
HARBOR_OPENAI_KEY
# Anthropic
HARBOR_ANTHROPIC_KEY
# Google
HARBOR_GOOGLE_KEY
# DeepSeek
HARBOR_DEEPSEEK_API_KEY
```
Set these globally to use across multiple Harbor services.
### Using with Harbor Ollama
The default configuration uses Ollama with `llama3.2:latest`. When started alongside Ollama, Harbor automatically configures the Ollama URL:
```bash
# Start with Ollama
harbor up drawio ollama
# Pull the model if needed
harbor ollama pull llama3.2:latest
```
To use a different model:
```bash
harbor config set drawio.ai.model mistral:latest
```
### Using with OpenAI
```bash
# Set provider and common API key
harbor config set drawio.ai.provider openai
harbor config set openai.key sk-your-api-key
# Optionally set a specific model
harbor config set drawio.ai.model gpt-4o
# Start without Ollama
harbor up drawio
```
### Using with Anthropic
```bash
# Set provider and common API key
harbor config set drawio.ai.provider anthropic
harbor config set anthropic.key sk-ant-your-api-key
# Optionally set a specific model
harbor config set drawio.ai.model claude-sonnet-4-20250514
# Start
harbor up drawio
```
## Notes
**Model Recommendations:**
- For general diagrams: `llama3.2:latest` or similar models work well
- For cloud architecture diagrams (AWS, GCP, Azure): Claude Sonnet models are recommended for better accuracy with complex infrastructure patterns
**Access Protection:**
- Set `HARBOR_DRAWIO_ACCESS_CODE` to require a code before accessing the UI
- Useful when exposing the service externally
### [MindsDB](https://github.com/mindsdb/mindsdb)
> Handle: `mindsdb`<br/>
> URL: [http://localhost:34581](http://localhost:34581)
![MindsDB Screenshot](./harbor-mindsdb.png)
MindsDB is an AI platform that enables querying AI models using SQL. Harbor integrates MindsDB with local LLM backends (Ollama, llama.cpp, vLLM) so you can build AI-powered applications without external API dependencies.
## Starting
```bash
# Start MindsDB with Ollama
harbor up mindsdb ollama
# Or with other backends
harbor up mindsdb llamacpp
harbor up mindsdb vllm
```
## Configuration
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Ports
HARBOR_MINDSDB_HOST_PORT 34581
HARBOR_MINDSDB_MYSQL_HOST_PORT 34582
# Docker image
HARBOR_MINDSDB_IMAGE mindsdb/mindsdb
HARBOR_MINDSDB_VERSION latest
# Persistent storage
HARBOR_MINDSDB_WORKSPACE ./mindsdb/data
# APIs to expose (http, mysql, postgres)
HARBOR_MINDSDB_APIS http,mysql
# Authentication (optional)
HARBOR_MINDSDB_USERNAME ""
HARBOR_MINDSDB_PASSWORD ""
# Default Ollama model for LLM() function
HARBOR_MINDSDB_OLLAMA_MODEL llama3.1:8b
```
## LLM Integration
When running MindsDB with a Harbor LLM backend, the `LLM()` function is automatically configured:
| Backend | Base URL | Model | API Key |
|---------|----------|-------|---------|
| Ollama | `http://ollama:11434/v1` | `HARBOR_MINDSDB_OLLAMA_MODEL` | `sk-ollama` |
| llama.cpp | `http://llamacpp:8080/v1` | (loaded model) | `sk-llamacpp` |
| vLLM | `http://vllm:8000/v1` | (loaded model) | `sk-vllm` |
### Using LLM() Function
```sql
-- Text generation
SELECT LLM('What is the capital of France?');
-- Process data
SELECT LLM('Summarize: ' || content) FROM articles;
```
### Creating Agents
Agents query data sources using natural language. Specify the Harbor backend configuration:
```sql
CREATE AGENT mindsdb.my_agent
USING
model = {
"provider": "ollama",
"model_name": "llama3.1:8b",
"api_key": "sk-ollama",
"base_url": "http://ollama:11434"
},
data = {
"tables": ["my_database.my_table"]
};
```
### Creating ML Engines
Create ML engines to use Harbor backends in models:
```sql
-- Ollama engine
CREATE ML_ENGINE ollama_engine
FROM ollama
USING
ollama_serve_url = 'http://ollama:11434';
-- llama.cpp (OpenAI-compatible)
CREATE ML_ENGINE llamacpp_engine
FROM openai
USING
openai_api_base = 'http://llamacpp:8080/v1',
openai_api_key = 'sk-llamacpp';
-- vLLM (OpenAI-compatible)
CREATE ML_ENGINE vllm_engine
FROM openai
USING
openai_api_base = 'http://vllm:8000/v1',
openai_api_key = 'sk-vllm';
```
> **Note**: The `LLM()` function configuration is separate from the "Default MindsDB Configuration" UI settings. UI settings (Settings → Models) are for agents/knowledge bases and persist in `./mindsdb/data`.
## Connecting to Harbor Services
Use Docker network hostnames to connect MindsDB to other Harbor services:
```sql
-- Connect to a database running in Harbor
CREATE DATABASE harbor_postgres
WITH ENGINE = 'postgres',
PARAMETERS = {
"host": "postgres",
"port": "5432",
"database": "mydb",
"user": "user",
"password": "password"
};
```
## MySQL API
Connect to MindsDB using MySQL clients for BI tools and integrations:
```bash
mysql -h 127.0.0.1 -P 34582
```
### [Sim Studio](https://github.com/simstudioai/sim)
> Handle: `sim`<br/>
> URL: [http://localhost:34591](http://localhost:34591)
![Sim Studio Screenshot](./harbor-sim.png)
Sim Studio is an open-source platform for building and deploying AI agent workflows. It provides a visual canvas editor where you can connect agents, tools, and blocks to create complex AI pipelines. The platform includes an AI Copilot that helps generate nodes and fix errors, plus support for vector databases enabling document uploads and RAG capabilities.
**Key Features:**
- **Visual Canvas Editor**: Drag-and-drop interface to connect agents, tools, and blocks
- **Vector Database Support**: Upload documents and enable RAG capabilities with pgvector
- **Real-time WebSocket**: Live updates and streaming responses
- **Extensible Blocks**: Connect various AI providers and tools
## Starting
```bash
# Start Sim Studio
harbor up sim
# With Ollama for local models
harbor up sim ollama
```
- Open the Sim Studio interface at [http://localhost:34591](http://localhost:34591)
- On first start, you'll need to create an account
- Harbor connects Sim Studio to Ollama automatically if both are running together, so local Ollama's models should be visible in LLM nodes in Sim Studio
- ⚠️ Unfortunately Sim Studio Copilot (to help authoring workflows) requires their cloud service and cannot be self-hosted
## Configuration
### Environment Variables
Following options can be set via [`harbor config`](./3.-Harbor-CLI-Reference.md#harbor-config):
```bash
# Main application port
HARBOR_SIM_HOST_PORT 34591
# WebSocket server port
HARBOR_SIM_REALTIME_HOST_PORT 34592
# PostgreSQL database port
HARBOR_SIM_DB_HOST_PORT 34593
# Workspace directory for persistent data
HARBOR_SIM_WORKSPACE ./sim
# Main application image
HARBOR_SIM_IMAGE ghcr.io/simstudioai/simstudio
HARBOR_SIM_VERSION latest
# WebSocket server image
HARBOR_SIM_REALTIME_IMAGE ghcr.io/simstudioai/realtime
# Database migrations image
HARBOR_SIM_MIGRATIONS_IMAGE ghcr.io/simstudioai/migrations
# Database configuration
HARBOR_SIM_DB_IMAGE pgvector/pgvector
HARBOR_SIM_DB_VERSION pg17
HARBOR_SIM_DB_NAME simstudio
HARBOR_SIM_DB_USER postgres
HARBOR_SIM_DB_PASSWORD harbor_sim_postgres_password
# Security (auto-generated if not set)
HARBOR_SIM_AUTH_SECRET # Authentication secret (32 characters)
HARBOR_SIM_ENCRYPTION_KEY # Encryption key (32 characters)
# Ollama integration (auto-configured when running with Ollama)
HARBOR_SIM_OLLAMA_URL # Ollama API URL for local models
```
### Volumes
Sim Studio persists data in the following directories:
- `sim/db/` - PostgreSQL database with pgvector
## Integration with Harbor
Sim Studio can integrate with other Harbor services:
- Use Ollama for local model inference in agent workflows
- Access other Harbor LLM backends via API calls
- Connect to Harbor services via internal network
When running Sim Studio together with Ollama, Harbor automatically configures the connection:
```bash
harbor up sim ollama
```
This sets `HARBOR_SIM_OLLAMA_URL` to point to the Ollama service.
## Troubleshooting
### Check Logs
```bash
# All services
harbor logs sim
# Specific service
docker logs harbor.sim
docker logs harbor.sim-realtime
```
### Database Issues
If migrations fail or database is corrupted:
```bash
# Stop services
harbor down sim
# Remove database (WARNING: destroys all data)
rm -rf sim/db
# Restart
harbor up sim
```
## Links
- [GitHub Repository](https://github.com/simstudioai/sim)
- [Website](https://sim.ai)

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

# This file can be used for additional environment variables
# specifically for the 'drawio' service.
# You can also use the "harbor env" command to set these variables.
# This file can be used for additional environment variables
# specifically for the 'karakeep' service.
# You can also use the "harbor env" command to set these variables.
# MindsDB service environment variables
# Configure APIs to expose (http, mysql, postgres)
# MINDSDB_APIS=http,mysql
# Optional authentication
# MINDSDB_USERNAME=admin
# MINDSDB_PASSWORD=
# This file can be used for additional environment variables
# specifically for the 'netdata' service.
# You can also use the "harbor env" command to set these variables.

Sorry, the diff of this file is not supported yet

#!/bin/sh
set -e
export ONYX_BACKEND_API_HOST="${ONYX_BACKEND_API_HOST:-onyx-api}"
export ONYX_WEB_SERVER_HOST="${ONYX_WEB_SERVER_HOST:-onyx-web}"
echo "Using API server host: $ONYX_BACKEND_API_HOST"
echo "Using web server host: $ONYX_WEB_SERVER_HOST"
envsubst '$ONYX_BACKEND_API_HOST $ONYX_WEB_SERVER_HOST' < /etc/nginx/conf.d/app.conf.template > /etc/nginx/conf.d/default.conf
echo "Waiting for API server to be ready..."
max_attempts=120
attempt=1
while [ $attempt -le $max_attempts ]; do
if wget -q --spider "http://${ONYX_BACKEND_API_HOST}:8080/health" 2>/dev/null; then
echo "API server is ready!"
break
fi
echo "Attempt $attempt/$max_attempts: API server not ready yet..."
sleep 5
attempt=$((attempt + 1))
done
if [ $attempt -gt $max_attempts ]; then
echo "Warning: API server did not become ready in time, starting nginx anyway..."
fi
echo "Starting nginx..."
exec nginx -g "daemon off;"
# Onyx Service Configuration
# --------------------------
# These variables are already set in Harbor's default profile.
# You can override them here for service-specific configuration.
# Onyx-specific environment variables can be set here.
# See https://github.com/onyx-dot-app/onyx for full documentation.
# Example overrides (uncomment to use):
# GEN_AI_MODEL_PROVIDER=ollama
# GEN_AI_MODEL_VERSION=llama3.1
# This file can be used for additional environment variables
# specifically for the 'presenton' service.
# You can also use the "harbor env" command to set these variables.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

# Resume Matcher backend configuration
SESSION_SECRET_KEY=${HARBOR_RESUME_MATCHER_SESSION_SECRET}
SYNC_DATABASE_URL=sqlite:///./app.db
ASYNC_DATABASE_URL=sqlite+aiosqlite:///./app.db
PYTHONDONTWRITEBYTECODE=1
# LLM Configuration (populated by Ollama cross-file or manual config)
LLM_PROVIDER=${HARBOR_RESUME_MATCHER_LLM_PROVIDER:-ollama}
LL_MODEL=${HARBOR_RESUME_MATCHER_LLM_MODEL:-gemma3:4b}
EMBEDDING_PROVIDER=${HARBOR_RESUME_MATCHER_EMBEDDING_PROVIDER:-ollama}
EMBEDDING_MODEL=${HARBOR_RESUME_MATCHER_EMBEDDING_MODEL:-bge-m3:latest}
# This file can be used for additional environment variables
# specifically for the 'sim' service.
# You can also use the "harbor env" command to set these variables.
# Optional: Copilot API key for AI-assisted workflow building
# Get your key from https://sim.ai → Settings → Copilot
COPILOT_API_KEY=
# Optional: Additional AI provider API keys
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
+11
-1

@@ -195,3 +195,9 @@ # Adding new service

\`\`\`bash
List all HARBOR_${HANDLE}_* variables with descriptions.
List all HARBOR_${HANDLE}_* variables with descriptions. Example:
# Main UI port
HARBOR_SERVICE_HOST_PORT 00000
# Workspace directory for persistent data
HARBOR_SERVICE_WORKSPACE ./service
\`\`\`

@@ -203,2 +209,6 @@

**Validation:**
- Documentation explains how to start the service, refers to troubleshooting guide
- Documentation refers to Harbor CLI commands, not Docker commands
### Step 8: Add to .gitignore (if needed)

@@ -205,0 +215,0 @@

@@ -13,2 +13,9 @@ #!/usr/bin/env bash

# cd to wiki and push the docs
cd ../harbor.wiki
git add .
git commit -m "chore: docs"
git push origin master
cd ../harbor
# echo "NPM Publish..."

@@ -15,0 +22,0 @@ # npm publish --access public

+1
-1

@@ -9,3 +9,3 @@ // deno run -A ./.scripts/seed.ts

const VERSION = "0.3.22";
const VERSION = "0.3.28";

@@ -12,0 +12,0 @@ type ValueSeed = {

@@ -15,2 +15,3 @@ You will not confuse this project with the Harbor container registry. This is a different project with the same name.

- `/.scripts` - scripts for development tasks, written in Deno and Bash
- `/profiles/default.env` - default harbor config that will be distributed to the users

@@ -21,2 +22,3 @@ The CLI is already installed globally for your tests, you may run `harbor <command>` directly.

harbor help
harbor ps # list running services
harbor build <service>

@@ -28,2 +30,21 @@ harbor logs <service> # tails by default

Refer to [CLI Reference](./docs/3.-Harbor-CLI-Reference.md) for more details.
Refer to [CLI Reference](./docs/3.-Harbor-CLI-Reference.md) for more details.
### Running dev scripts
You will always use `harbor` CLI to run project dev scripts, for example:
```bash
harbor dev scaffold <service_name>
harbor dev docs
harbor dev seeed
```
This means that you're not allowed to run those scripts with `deno run` directly.
### Updating default profile
When you make changes to the `default.env`, you then need to update the current profile with:
```bash
harbor config update
```
{
"name": "@avcodes/harbor-app",
"private": true,
"version": "0.3.22",
"version": "0.3.28",
"type": "module",

@@ -6,0 +6,0 @@ "scripts": {

[package]
name = "harbor-app"
version = "0.3.22"
version = "0.3.28"
description = "A companion app for Harbor LLM toolkit"

@@ -6,0 +6,0 @@ authors = ["av"]

{
"$schema": "https://schema.tauri.app/config/2.4.0",
"productName": "Harbor",
"version": "0.3.22",
"version": "0.3.28",
"identifier": "com.harbor.app",

@@ -6,0 +6,0 @@ "build": {

@@ -568,2 +568,50 @@

},
presenton: {
name: 'Presenton',
tags: [HST.frontend],
wikiUrl: `${wikiUrl}/2.1.13-Frontend-Presenton`,
tooltip: 'Open-source AI presentation generator with custom layouts, multi-model support, and PDF/PPTX export.'
},
karakeep: {
name: 'Karakeep',
tags: [HST.satellite],
wikiUrl: `${wikiUrl}/2.3.53-Satellite-Karakeep`,
tooltip: 'Self-hosted bookmark manager with AI-powered automatic tagging via OpenAI or Ollama.'
},
netdata: {
name: 'Netdata',
tags: [HST.satellite],
wikiUrl: `${wikiUrl}/2.3.54-Satellite-Netdata`,
tooltip: 'Real-time infrastructure monitoring with per-second metrics for systems, containers, and applications.'
},
'resume-matcher': {
name: 'Resume Matcher',
tags: [HST.satellite],
wikiUrl: `${wikiUrl}/2.3.55-Satellite-Resume-Matcher`,
tooltip: 'AI-powered tool for comparing resumes against job descriptions using local LLMs via Ollama.'
},
drawio: {
name: 'Drawio',
tags: [HST.satellite],
wikiUrl: `${wikiUrl}/2.3.56-Satellite-Drawio`,
tooltip: 'AI-powered diagram creation tool - generate draw.io diagrams from natural language.'
},
mindsdb: {
name: 'MindsDB',
tags: [HST.satellite, HST.api],
wikiUrl: `${wikiUrl}/2.3.57-Satellite-MindsDB`,
tooltip: 'AI platform for integrating ML models with data sources via HTTP and MySQL APIs.',
},
sim: {
name: 'Sim Studio',
tags: [HST.satellite, HST.workflows],
wikiUrl: `${wikiUrl}/2.3.58-Satellite-Sim-Studio`,
tooltip: 'Open-source platform to build and deploy AI agent workflows with visual canvas editor.',
},
onyx: {
name: 'Onyx',
tags: [HST.frontend, HST.workflows, HST.tools],
wikiUrl: `${wikiUrl}/2.1.14-Frontend-Onyx`,
tooltip: 'Open Source AI Platform with Chat UI, RAG, MCP support, and 40+ document connectors.',
},
};

@@ -8,2 +8,2 @@

dependencies = ["fastapi==0.111.0","uvicorn[standard]==0.30.6","requests==2.32.3","aiohttp==3.10.5","litellm==1.65.7","mcp==1.6.0","cachetools==5.5.2","asyncache==0.3.1","openai","websockets==15.0.1"]
version = "0.3.22"
version = "0.3.28"

@@ -32,2 +32,7 @@ # klmbr - Kalambur

- `remove_vowel` - removes vowels from the input
- `invert_180` - inverts characters 180 degrees
- `unicode_lookalike` - replaces characters with Unicode lookalikes from other scripts
- `homoglyph` - replaces characters with visually identical homoglyphs
- `zero_width` - inserts zero-width characters after the character
- `zalgo` - adds multiple combining marks to create zalgo text effect
- `strat` - strategy for selection of the messages to rewrite. Default is `match`

@@ -59,2 +64,7 @@ - `all` - match all messages

harbor boost klmbr mods add remove_vowel
harbor boost klmbr mods add invert_180
harbor boost klmbr mods add unicode_lookalike
harbor boost klmbr mods add homoglyph
harbor boost klmbr mods add zero_width
harbor boost klmbr mods add zalgo

@@ -142,2 +152,80 @@ # Change the selection strategy

unicode_lookalike_map = {
'a': 'а', # Cyrillic
'c': 'с', # Cyrillic
'e': 'е', # Cyrillic
'o': 'ο', # Greek omicron
'p': 'р', # Cyrillic
'x': 'х', # Cyrillic
'y': 'у', # Cyrillic
'A': 'А', # Cyrillic
'B': 'В', # Cyrillic
'C': 'С', # Cyrillic
'E': 'Ε', # Greek
'H': 'Η', # Greek
'I': 'Ι', # Greek
'K': 'Κ', # Greek
'M': 'Μ', # Greek
'N': 'Ν', # Greek
'O': 'Ο', # Greek
'P': 'Ρ', # Greek
'T': 'Τ', # Greek
'X': 'Χ', # Greek
'Y': 'Υ', # Greek
'Z': 'Ζ', # Greek
}
homoglyph_map = {
'a': 'а', # Cyrillic a
'e': 'е', # Cyrillic e
'o': 'о', # Cyrillic o
'p': 'р', # Cyrillic r
'c': 'с', # Cyrillic s
'y': 'у', # Cyrillic u
'x': 'х', # Cyrillic h
'i': 'і', # Cyrillic i
'j': 'ј', # Cyrillic j
's': 'ѕ', # Cyrillic dze
'A': 'А', # Cyrillic A
'B': 'В', # Cyrillic V
'C': 'С', # Cyrillic S
'E': 'Е', # Cyrillic E
'H': 'Н', # Cyrillic N
'I': 'І', # Cyrillic I
'J': 'Ј', # Cyrillic J
'K': 'К', # Cyrillic K
'M': 'М', # Cyrillic M
'O': 'О', # Cyrillic O
'P': 'Р', # Cyrillic P
'S': 'Ѕ', # Cyrillic S
'T': 'Т', # Cyrillic T
'X': 'Х', # Cyrillic Kh
'Y': 'Υ', # Greek Upsilon
}
zero_width_chars = [
'\u200B', # Zero Width Space
'\u200C', # Zero Width Non-Joiner
'\u200D', # Zero Width Joiner
'\uFEFF', # Zero Width No-Break Space
]
zalgo_marks = [
# Combining marks above
'\u0300', '\u0301', '\u0302', '\u0303', '\u0304', '\u0305', '\u0306',
'\u0307', '\u0308', '\u0309', '\u030A', '\u030B', '\u030C', '\u030D',
'\u030E', '\u030F', '\u0310', '\u0311', '\u0312', '\u0313', '\u0314',
'\u0315', '\u031A', '\u031B', '\u033D', '\u033E', '\u033F', '\u0340',
'\u0341', '\u0342', '\u0343', '\u0344', '\u0346',
# Combining marks below
'\u0316', '\u0317', '\u0318', '\u0319', '\u031C', '\u031D', '\u031E',
'\u031F', '\u0320', '\u0321', '\u0322', '\u0323', '\u0324', '\u0325',
'\u0326', '\u0327', '\u0328', '\u0329', '\u032A', '\u032B', '\u032C',
'\u032D', '\u032E', '\u032F', '\u0330', '\u0331', '\u0332', '\u0333',
'\u0339', '\u033A', '\u033B', '\u033C', '\u0345', '\u0347', '\u0348',
'\u0349', '\u034D', '\u034E',
# Combining marks through
'\u0335', '\u0336', '\u0337', '\u0338',
]
punctuation = ".,!?;:"

@@ -190,2 +278,28 @@

def unicode_lookalike(chars, idx):
if is_standalone_vowel(chars, idx):
return chars[idx]
return unicode_lookalike_map.get(chars[idx], chars[idx])
def homoglyph(chars, idx):
if is_standalone_vowel(chars, idx):
return chars[idx]
return homoglyph_map.get(chars[idx], chars[idx])
def zero_width(chars, idx):
return chars[idx] + random.choice(zero_width_chars)
def zalgo(chars, idx):
if chars[idx].isalpha():
num_marks = random.randint(1, 3)
marks = ''.join(random.choice(zalgo_marks) for _ in range(num_marks))
return chars[idx] + marks
return chars[idx]
mods = {

@@ -197,2 +311,6 @@ "capitalize": capitalize,

"invert_180": invert_180,
"unicode_lookalike": unicode_lookalike,
"homoglyph": homoglyph,
"zero_width": zero_width,
"zalgo": zalgo,
}

@@ -273,1 +391,25 @@

await llm.stream_final_completion(chat=chat)
if __name__ == "__main__":
sample = "Which company created Hacker News?"
print("Original:", sample)
print()
# Test with all mods
modified, mapping = modify_text(text=sample, percentage=30, mods=[
"all",
# "diacritic",
# "remove_vowel",
# "invert_180",
# "unicode_lookalike",
# "homoglyph",
# "zero_width",
# "zalgo",
])
double_modified, _ = modify_text(
text=modified, percentage=30, mods=["all"]
)
print()
print("All mods (100%):", modified)
print("Double modified:", double_modified)

@@ -0,7 +1,9 @@

from typing import TYPE_CHECKING
import random
import re
from chat import Chat
if TYPE_CHECKING:
from chat import Chat
def percentage(chat: Chat, **kwargs):
def percentage(chat: 'Chat', **kwargs):
percentage = kwargs.get("percentage", 50)

@@ -14,3 +16,3 @@ nodes = chat.plain()

def match(chat: Chat, **kwargs):
def match(chat: 'Chat', **kwargs):
substring = kwargs.get("substring", "")

@@ -34,19 +36,19 @@ role = kwargs.get("role", "")

def user(chat: Chat):
def user(chat: 'Chat'):
return match(chat, role="user")
def all(chat: Chat):
def all(chat: 'Chat'):
return chat.plain()
def first(chat: Chat):
def first(chat: 'Chat'):
return match(chat, index=0)
def last(chat: Chat):
def last(chat: 'Chat'):
return match(chat, index=-1)
def any(chat: Chat):
def any(chat: 'Chat'):
return [random.choice(chat.plain())]

@@ -66,3 +68,3 @@

def apply_strategy(chat: Chat, strategy: str, params: dict):
def apply_strategy(chat: 'Chat', strategy: str, params: dict):
return selection_strategies[strategy](chat, **params)

@@ -69,0 +71,0 @@

services:
llamacpp:
image: ghcr.io/ggerganov/llama.cpp:full
image: ${HARBOR_LLAMACPP_IMAGE}:server
container_name: ${HARBOR_CONTAINER_PREFIX}.llamacpp

@@ -15,3 +15,2 @@ env_file:

command: >
--server
${HARBOR_LLAMACPP_MODEL_SPECIFIER}

@@ -18,0 +17,0 @@ ${HARBOR_LLAMACPP_EXTRA_ARGS}

services:
llamacpp:
image: ghcr.io/ggerganov/llama.cpp:full-cuda
image: ${HARBOR_LLAMACPP_IMAGE}:server-cuda
deploy:

@@ -5,0 +5,0 @@ resources:

@@ -281,2 +281,23 @@ ![Harbor splash](https://raw.githubusercontent.com/av/harbor/main/docs/harbor-2.png)

### Custom Cache Locations
By default, Harbor stores service caches in standard locations (e.g., `~/.ollama`, `~/.cache/huggingface`). You can customize these paths, for example to keep everything relative to your Harbor installation:
```bash
harbor config set hf.cache $(harbor home)/__cache/hf
harbor config set llamacpp.cache $(harbor home)/__cache/llamacpp
harbor config set ollama.cache $(harbor home)/__cache/ollama
harbor config set vllm.cache $(harbor home)/__cache/vllm
harbor config set txtai.cache $(harbor home)/__cache/txtai
harbor config set parllama.cache $(harbor home)/__cache/parllama
harbor config set lmeval.cache $(harbor home)/__cache/lmeval
```
This is useful when you want a self-contained Harbor installation or need to manage disk space on specific volumes.
> [!TIP]
> See all available cache options with `harbor config ls | grep CACHE`
For more details, see [`harbor home`](./3.-Harbor-CLI-Reference#harbor-home) and [`harbor config`](./3.-Harbor-CLI-Reference#harbor-config) in the CLI Reference.
## Harbor Profiles

@@ -283,0 +304,0 @@

@@ -1,168 +0,715 @@

## Installation
## Installing Harbor
Harbor lets you run local LLMs and 50+ AI services with simple commands. Get Open WebUI + Ollama running in minutes.
> [!NOTE]
> Harbor is still a young project (hence the 0.x.x versioning), installation and some features might not work as expected. Please report any issues you encounter.
> Harbor is in active development (v0.x). Join our [Discord](https://discord.gg/8nDRphrhSF) for support.
- [Preparing your system](#preparing-your-system)
- [Harbor CLI](#harbor-cli)
- [Unsafe install](#unsafe-install)
- [Manual install](#manual-install)
- [Harbor App](#harbor-app)
- [Prerequisites](#prerequisites)
- [Install Harbor App](#install-harbor-app)
- [Linux](#linux)
- [MacOS](#macos)
- [MacOS Installation Issue](#macos-installation-issue)
### At a Glance
### Preparing your system
| Path | Time | Prerequisites | Best For |
|------|------|---------------|----------|
| [Quick Start](#quick-start) | 5 min | Docker + Git | Docker users |
| [Complete Install](#complete-installation-guide) | 15-30 min | Just a computer | New to Docker |
| [GPU Setup](#gpu-acceleration-optional) | +10 min | NVIDIA GPU | Optional boost |
Harbor is a containerized toolkit that runs on top of Docker. This approach is what enables Harbor to support such a wide range of services and platforms. The drawback is that you'll need to have Docker installed and configured on your system. Please go through below checklist line-by-line to ensure that your system is ready for Harbor.
---
- All Platforms
- Ensure you have at least 10GB of free disk space. Harbor is lightweight, but the services it runs in Docker typically might come with a multi-GB image size (especially ones with CUDA).
- On Windows - [enable WSL2](https://learn.microsoft.com/en-us/windows/wsl/install)
- All Platforms - [install git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- All Platforms - [install Docker](https://docs.docker.com/engine/install/)
- On Linux - complete post-install for [`docker` without `sudo`](httpws://docs.docker.com/engine/install/linux-postinstall/)
- On Windows - [enable Docker in WSL2](https://docs.docker.com/desktop/wsl/#enabling-docker-support-in-wsl-2-distros)
- With Nvidia GPU - [install NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation)
- Enables GPU pass-through for supported services
- On Windows - install the Container Toolkit under WSL2 following Linux instructions
- All Platforms - [install Docker Compose plugin](https://docs.docker.com/compose/install/)
- Harbor requires Docker Compose [2.23.1](https://docs.docker.com/compose/releases/release-notes/#2231) or newer
- All Platforms - Bash-compatible shell 3.2 or newer
- Should be available on WSL2, MacOS and Linux platforms out of the box
- Harbor sometimes uses features from newer Bash - please report any issues you encounter
## Table of Contents
- [Quick Start](#quick-start)
- [Complete Installation Guide](#complete-installation-guide)
- [Windows](#-windows-installation)
- [macOS](#-macos-installation)
- [Linux](#-linux-installation)
- [GPU Acceleration (Optional)](#gpu-acceleration-optional)
- [Harbor CLI Installation Methods](#harbor-cli-installation-methods)
- [Quick Install Script](#quick-install-script-recommended)
- [Package Managers](#via-package-manager)
- [Manual Install](#manual-install)
- [Harbor App (GUI)](#harbor-app-gui)
- [Troubleshooting](#troubleshooting)
---
## Quick Start
**For users who already have Docker and Git installed.**
### Prerequisites Check
- [ ] Docker installed and running (`docker --version`)
- [ ] Docker Compose 2.23.1+ installed (`docker compose version`)
- [ ] Git installed (`git --version`)
- [ ] 10GB+ free disk space
### Install Harbor
Choose your preferred method:
**Quick Install Script (Recommended)**
```bash
curl https://av.codes/get-harbor.sh | bash
```
**Or via Package Manager**
```bash
npm install -g @avcodes/harbor # Node.js users
pipx install llm-harbor # Python users
```
### Verify Installation
```bash
harbor --version
harbor doctor # Check system compatibility
```
### Start Using Harbor
```bash
harbor up # Start default services (Ollama + Open WebUI)
harbor open # Open in browser
```
> [!TIP]
> First launch requires creating a local admin account for Open WebUI.
**✓ Done! What's next?**
- [Harbor User Guide](./1.-Harbor-User-Guide)
- [Available Services](./2.-Services)
- [CLI Reference](./3.-Harbor-CLI-Reference)
---
## Complete Installation Guide
**New to Docker?** No problem. Choose your platform below for step-by-step instructions.
Harbor is a containerized toolkit that runs on top of Docker. This enables Harbor to support so many services and work across platforms. The sections below guide you through setting up Docker and all prerequisites.
<details>
<summary><b>🪟 Windows Installation</b></summary>
### Windows Installation (15-25 minutes)
**What you'll need:**
- Windows 10/11 (64-bit)
- 20GB free disk space
- Administrator access
**Why WSL2?** Harbor uses WSL2 (Windows Subsystem for Linux) to run Docker on Windows. Think of it as a lightweight Linux environment inside Windows.
#### Step 1: Install WSL2 (5 minutes)
Open PowerShell as Administrator and run:
```powershell
wsl --install
```
Restart your computer when prompted.
**Verify:**
```bash
wsl --version
```
You should see WSL version information ✓
#### Step 2: Install Docker Desktop (10 minutes)
- [ ] Download [Docker Desktop for Windows](https://docs.docker.com/desktop/install/windows-install/)
- [ ] Run the installer
- [ ] During installation, ensure "Use WSL 2 instead of Hyper-V" is checked
- [ ] Restart your computer
- [ ] Launch Docker Desktop
- [ ] In Docker Desktop settings, go to Resources → WSL Integration
- [ ] Enable integration with your default WSL distro
**Verify** (in WSL2 terminal):
```bash
docker --version
docker compose version
docker run hello-world
```
You should see "Hello from Docker!" ✓
#### Step 3: Install Git (2 minutes)
In your WSL2 terminal:
```bash
sudo apt update && sudo apt install git -y
```
**Verify:**
```bash
git --version
```
#### Step 4: Install Harbor (5 minutes)
Follow the [Harbor CLI installation methods](#harbor-cli-installation-methods) below.
**✓ Success! What's next?**
- Run `harbor doctor` to verify everything is working
- Try `harbor up` to start default services
- [Learn more about Harbor](./1.-Harbor-User-Guide)
**Common Issues:**
- **Docker Desktop not starting?** Ensure virtualization is enabled in BIOS
- **WSL not installing?** You may need to enable Windows features manually
- **Permission issues?** Ensure Docker integration is enabled for your WSL distro
</details>
<details>
<summary><b>🍎 macOS Installation</b></summary>
### macOS Installation (15-20 minutes)
**What you'll need:**
- macOS 11 (Big Sur) or newer
- 20GB free disk space
- Administrator access
> [!NOTE]
> MacOS: some services do not ship ARM64 images. GPU pass-through is not supported on MacOS.
> **ARM64 Limitation:** Some services don't ship ARM64 images (Apple Silicon). GPU pass-through is not supported on macOS.
Once the CLI is installed, you can also use [`harbor doctor`](./3.-Harbor-CLI-Reference#harbor-doctor) command to troubleshoot installation issues.
#### Step 1: Install Docker Desktop (10 minutes)
### Harbor CLI
- [ ] Download [Docker Desktop for Mac](https://docs.docker.com/desktop/install/mac-install/)
- Choose Apple Silicon or Intel based on your Mac
- [ ] Open the `.dmg` file and drag Docker to Applications
- [ ] Launch Docker from Applications
- [ ] Follow the setup wizard
- [ ] Grant the requested permissions
#### Installation methods
**Verify** (in Terminal):
```bash
docker --version
docker compose version
docker run hello-world
```
Harbor CLI can be installed in multiple ways that are listed below.
You should see "Hello from Docker!" ✓
- [Unsafe one-liner](#unsafe-one-liner)
- [Package Managers](#package-managers)
- On Windows - ensure to install within WSL2
- [Manual install](#manual-install)
#### Step 2: Install Git (2 minutes)
#### Unsafe one-liner
Git typically comes pre-installed on macOS. Verify:
```bash
git --version
```
- Runs the install script directly from the internet (make sure you understand the risks)
- Will clone the Harbor repository to your home directory
- Will write to your shell profile to add bin folder to the path
If not installed, macOS will prompt you to install Command Line Tools.
Or install via Homebrew:
```bash
brew install git
```
#### Step 3: Install Harbor (5 minutes)
Follow the [Harbor CLI installation methods](#harbor-cli-installation-methods) below.
**✓ Success! What's next?**
- Run `harbor doctor` to verify everything is working
- Try `harbor up` to start default services
- [Learn more about Harbor](./1.-Harbor-User-Guide)
**Common Issues:**
- **Docker Desktop not starting?** Check System Preferences → Privacy & Security
- **Permission errors?** Grant Full Disk Access to Docker in System Preferences
- **ARM64 service not available?** Check [available services](./2.-Services) for ARM64 support
</details>
<details>
<summary><b>🐧 Linux Installation</b></summary>
### Linux Installation (15-20 minutes)
**What you'll need:**
- Ubuntu 20.04+, Debian 11+, Fedora 35+, or similar
- 20GB free disk space
- Sudo access
#### Step 1: Install Docker (10 minutes)
**Ubuntu/Debian:**
```bash
# Add Docker's official GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
```
**Fedora:**
```bash
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo systemctl start docker
sudo systemctl enable docker
```
**Configure Docker to run without sudo:**
```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
**Verify:**
```bash
docker --version
docker compose version
docker run hello-world
```
You should see "Hello from Docker!" ✓
#### Step 2: Install Git (2 minutes)
**Ubuntu/Debian:**
```bash
sudo apt-get install git -y
```
**Fedora:**
```bash
sudo dnf install git -y
```
**Verify:**
```bash
git --version
```
#### Step 3: Install Harbor (5 minutes)
Follow the [Harbor CLI installation methods](#harbor-cli-installation-methods) below.
**✓ Success! What's next?**
- Run `harbor doctor` to verify everything is working
- Try `harbor up` to start default services
- [Learn more about Harbor](./1.-Harbor-User-Guide)
**Common Issues:**
- **Permission denied?** Ensure you've added your user to the docker group and logged out/in
- **Docker service not starting?** Try `sudo systemctl status docker`
- **Old Docker version?** Ensure Docker Compose 2.23.1+ is installed
</details>
---
## GPU Acceleration (Optional)
**Should you set this up?**
- ✓ You have an NVIDIA GPU
- ✓ You want 3-10x faster inference for local LLMs
### Installing NVIDIA Container Toolkit
**Linux:**
```bash
# Add NVIDIA Container Toolkit repository
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
```
**Windows (WSL2):**
Follow the Linux instructions above inside your WSL2 terminal.
**Verify:**
```bash
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
```
You should see your GPU information ✓
**✓ GPU Enabled!** Harbor will automatically use GPU for supported services when available.
---
## Harbor CLI Installation Methods
Choose your preferred installation method. All methods work equally well.
### Quick Install Script (Recommended)
This automated script:
- Clones Harbor to `~/.harbor`
- Adds Harbor to your PATH
- Works on Linux, macOS, and Windows (WSL2)
```bash
curl https://av.codes/get-harbor.sh | bash
```
#### Package Managers
> [!TIP]
> Want to review the script first? `curl https://av.codes/get-harbor.sh | less`
Please note that installation via package managers is _experimental_ and might differ from the "native" installation via the script or manual method.
> [!TIP]
> Need a custom install location? See [Manual Install](#manual-install) below.
**NPM**
**On Windows:** Run this inside your WSL2 terminal, not PowerShell.
---
### Via Package Manager
**NPM** (for Node.js developers)
```bash
# Note the "global" flag
npm install -g @avcodes/harbor
```
**PyPI**
**PyPI** (for Python developers)
```bash
# Use pipx as harbor is a CLI tool
pipx install llm-harbor
```
#### Manual install
> [!NOTE]
> Package versions may lag slightly behind the latest git releases.
Same as above, just done by you.
**On Windows:** Install within WSL2 environment.
---
### Manual Install
Same as the quick install script, but manual. You can install Harbor to any location:
```bash
git clone https://github.com/av/harbor.git && cd harbor
# Default location
git clone https://github.com/av/harbor.git ~/.harbor
cd ~/.harbor
# [Optional] make Harbor CLI available globally
# Otherwise, call this .sh file instead of `harbor`
# Or a custom location
git clone https://github.com/av/harbor.git /path/to/harbor
cd /path/to/harbor
# Make Harbor CLI available globally
./harbor.sh ln
# Verify installation
harbor --version
```
#### Verify
The `harbor update` command works the same way regardless of install location.
> [!TIP]
> Use [`harbor home`](./3.-Harbor-CLI-Reference#harbor-home) to reference the install path in scripts and commands.
**Troubleshooting:**
- If `harbor` command not found after install, restart your shell
- On some systems, you may need to manually add `~/.harbor/bin` to PATH
---
### Verify Your Installation
After installing via any method:
```bash
# Check the installation
# Check Harbor version
harbor --version
harbor --help
# Run doctor script to
# check if all requirements are met
# Check system compatibility
harbor doctor
# [Optional] Start default services
# Initial download of the docker images might take a while
# If you have container toolkit installed, GPU will
# be automatically used for supported services.
# View available commands
harbor --help
```
**Expected output from `harbor doctor`:**
- ✓ Docker installed and running
- ✓ Docker Compose 2.23.1 or newer
- ✓ Git installed
- ✓ Sufficient disk space
**✓ Installation Complete!**
**Next steps:**
```bash
# Start default services (Ollama + Open WebUI)
harbor up
# [Optional] open Webui in the browser
# Open in browser
harbor open
# Browse available services
harbor services
```
> [!NOTE]
> First launch of the [Open WebUI](./2.1.1-Frontend:-Open-WebUI) will require you to create a local admin account. Harbor keeps such auth requirements on by default because it also supports [exposing your local stack to the internet](./3.-Harbor-CLI-Reference#harbor-tunnels).
> [!TIP]
> First launch requires creating a local admin account for Open WebUI. This is required because Harbor supports [exposing your services to the internet](./3.-Harbor-CLI-Reference#harbor-tunnels).
#### Next Steps
**Learn more:**
- [Harbor User Guide](./1.-Harbor-User-Guide) - How to use Harbor
- [Available Services](./2.-Services) - Browse 50+ services
- [CLI Reference](./3.-Harbor-CLI-Reference) - Complete command reference
- [Harbor User Guide](./1.-Harbor-User-Guide)
- [Harbor CLI Reference](./3.-Harbor-CLI-Reference)
- [Harbor Services](./2.-Services)
---
### Harbor App
## Troubleshooting
> [!NOTE]
> Harbor App is even younger than the CLI and might have more issues. Please report any issues you encounter.
### harbor doctor
#### Prerequisites
The `harbor doctor` command checks your system for common issues:
```bash
harbor doctor
```
This will verify:
- Docker installation and daemon status
- Docker Compose version compatibility
- Git installation
- Disk space availability
- File permissions
- Bash version
### Common Issues
**"docker: command not found"**
- Docker is not installed or not in PATH
- On Windows: Make sure you're running commands in WSL2, not PowerShell
- Solution: Follow the [Complete Installation Guide](#complete-installation-guide) for your platform
**"Cannot connect to the Docker daemon"**
- Docker Desktop is not running
- Solution: Start Docker Desktop and wait for it to fully initialize
**"docker compose: command not found" or version too old**
- Docker Compose plugin not installed or outdated
- Solution: Install/update Docker Compose plugin (minimum version 2.23.1)
- Check version: `docker compose version`
**"Permission denied" when running docker commands**
- On Linux: User not in docker group
- Solution: `sudo usermod -aG docker $USER` then log out and back in
- On Windows/macOS: Docker Desktop permissions issue
**Services fail to start with GPU errors**
- NVIDIA Container Toolkit not properly installed
- Solution: See [GPU Acceleration](#gpu-acceleration-optional) section
- Or skip GPU: Harbor works great on CPU
**"harbor: command not found" after installation**
- PATH not updated or shell not restarted
- Solution: Restart your terminal or run `source ~/.bashrc` (or `~/.zshrc`)
- Manual fix: Add `~/.harbor/bin` to your PATH
**Services download slowly or fail**
- Large Docker images (especially with CUDA)
- Solution: Be patient, first download can take 10-30 minutes depending on your internet
- Retry: `harbor down && harbor up`
**Need more help?**
- Join our [Discord community](https://discord.gg/8nDRphrhSF)
- Check [GitHub Issues](https://github.com/av/harbor/issues)
- Read the [CLI Reference](./3.-Harbor-CLI-Reference)
---
## Harbor App (GUI)
**Alternative to the command-line interface.**
Harbor App provides a graphical interface for managing Harbor services. It's built on top of the Harbor CLI.
> [!NOTE]
> As for the moment, Harbor App is available but not tested on Windows. Contributions are welcome! You can still use the Harbor CLI with WSL2.
> Harbor App is in beta. The CLI is more stable and feature-complete. Windows support is untested.
- [Harbor CLI v0.2.0 or newer](#harbor-cli), installed and available globally
### When to Use Harbor App
#### Install Harbor App
**Use Harbor App if you:**
- Prefer graphical interfaces over command-line
- Want visual service management
- Are comfortable with beta software
#### Linux
**Use Harbor CLI if you:**
- Comfortable with terminal commands
- Want the most stable experience
- Need all features and latest updates
- Are on Windows (CLI works great in WSL2)
Depending on your distribution, download the latest `.deb` or `.AppImage` package from the [latest release](https://github.com/av/harbor/releases/latest) and install it.
### Prerequisites
#### MacOS
- [ ] Harbor CLI v0.2.0+ installed and available globally
- [ ] Harbor CLI working correctly (`harbor doctor` passes)
- [ ] macOS or Linux (Windows support untested)
I don't have an Apple developer account and consequently can't sign apps. As a result - to run the app, you'dd need to bypass the quarantine after downloading it.
### Installation by Platform
- Download the `Harbor_aarch64.app.tar.gz` from the [releases page](https://github.com/av/harbor/releases)
- Run the `.tar.gz` file - it'll be extracted in-place, you'll see the `Harbor.app` file in the same directory
- Open the terminal in the same directory and run the following command
<details>
<summary><b>🐧 Linux</b></summary>
Download the package for your distribution from the [latest release](https://github.com/av/harbor/releases/latest):
**Debian/Ubuntu (.deb)**
```bash
# Download the .deb file from releases
sudo dpkg -i Harbor_*.deb
# If dependencies missing:
sudo apt-get install -f
```
**AppImage (Universal)**
```bash
# Download the .AppImage file from releases
chmod +x Harbor_*.AppImage
./Harbor_*.AppImage
```
**✓ Launch Harbor App from your applications menu or run the AppImage.**
</details>
<details>
<summary><b>🍎 macOS</b></summary>
**Important:** Harbor App is not code-signed. You'll need to bypass macOS security.
#### Installation Steps
1. Download `Harbor_aarch64.app.tar.gz` from [releases page](https://github.com/av/harbor/releases/latest)
2. Extract the archive (double-click the `.tar.gz` file)
3. You'll see `Harbor.app` in the same directory
4. Open Terminal in that directory and run:
```bash
sudo xattr -d com.apple.quarantine ./Harbor.app
```
You'll be prompted for your system password. After that, you can run the app from the file. Optionally, you might also copy it to your "Applications" folder for easier access.
5. Enter your system password when prompted
6. Launch Harbor.app by double-clicking it
7. (Optional) Move to Applications folder for easier access
After these actions, you should have the Harbor App running on your system.
**✓ Harbor App is now ready to use!**
![Harbor App on MacOS](./harbor-app-macos.png)
![Harbor App on macOS](./harbor-app-macos.png)
#### Windows
**Troubleshooting:**
- **"damaged and can't be opened":** Run the `xattr` command above
- **App opens but shows nothing:** Run `harbor doctor` to check CLI installation
- **Can't find Harbor.app:** Make sure you extracted the .tar.gz file
> [!NOTE] Harbor App requires Harbor CLI installed and configured to function
</details>
Download `.msi` or `setup.exe` and run the installer. The app should be available in the start menu after installation. If the App opens but nothing is displayed, please check [`harbor doctor`](./3.-Harbor-CLI-Reference#harbor-doctor) to troubleshoot the issue.
<details>
<summary><b>🪟 Windows</b></summary>
#### Next Steps
> [!WARNING]
> Harbor App on Windows is untested. We recommend using Harbor CLI in WSL2 instead.
- [Harbor App](./1.1-Harbor-App)
- [Harbor Services](./2.-Services)
If you want to try the Windows app:
1. Download `.msi` or `setup.exe` from [releases page](https://github.com/av/harbor/releases/latest)
2. Run the installer
3. Launch from Start Menu
**Requirements:**
- Harbor CLI must be installed in WSL2
- Docker Desktop must be running
**If the app opens but shows nothing:**
- Run `harbor doctor` in WSL2 to verify CLI installation
- Check that Docker Desktop is running
- Check Windows-WSL2 networking
**Having issues?** Use Harbor CLI in WSL2 for the best Windows experience.
</details>
---
### Next Steps with Harbor App
After installation:
1. **Launch the app** - Should detect your Harbor CLI installation
2. **Browse services** - See all 50+ available services
3. **Start services** - Click to start Ollama, Open WebUI, or any service
4. **Monitor status** - View running services and their logs
**Learn more:**
- [Harbor App Guide](./1.1-Harbor-App)
- [Available Services](./2.-Services)
---
## Additional Resources
### System Requirements Summary
**Minimum:**
- 10GB free disk space (more recommended for multiple services)
- 8GB RAM (16GB+ recommended for LLMs)
- Docker 20.10+
- Docker Compose 2.23.1+
- Bash 3.2+
**Recommended:**
- 50GB+ free disk space
- 16GB+ RAM
- NVIDIA GPU (optional, for faster inference)
- SSD storage (for better performance)
### Bash Version Check
Harbor requires Bash 3.2 or newer (available by default on most systems):
```bash
bash --version
```
If you encounter Bash-related issues, please [report them](https://github.com/av/harbor/issues).
### Getting Help
- **Discord:** Join our [community server](https://discord.gg/8nDRphrhSF) for live support
- **GitHub Issues:** Report bugs or request features at [github.com/av/harbor/issues](https://github.com/av/harbor/issues)
- **Documentation:** Browse the [Harbor Wiki](https://github.com/av/harbor/wiki)
- **CLI Reference:** See all commands in [Harbor CLI Reference](./3.-Harbor-CLI-Reference)
### What's Next?
Now that Harbor is installed:
1. **Learn the basics:** [Harbor User Guide](./1.-Harbor-User-Guide)
2. **Explore services:** [Browse 50+ services](./2.-Services)
3. **Master the CLI:** [Complete CLI Reference](./3.-Harbor-CLI-Reference)
4. **Join the community:** [Discord](https://discord.gg/8nDRphrhSF)
**Popular first services to try:**
- [Open WebUI](./2.1.1-Frontend:-Open-WebUI) - ChatGPT-like interface
- [Ollama](./2.2.1-Backend:-Ollama) - Run local LLMs
- [ComfyUI](./2.-Services) - Image generation
- [n8n](./2.-Services) - Workflow automation
Welcome to Harbor! 🚢

@@ -44,2 +44,5 @@

- [Onyx](https://github.com/av/harbor/wiki/2.1.14-Frontend-Onyx) <span style="opacity: 0.5;">`Frontend`, `Workflows`, `Tools`</span><br/>
Open Source AI Platform with Chat UI, RAG, MCP support, and 40+ document connectors.
- [Open WebUI](https://github.com/av/harbor/wiki/2.1.1-Frontend:-Open-WebUI) <span style="opacity: 0.5;">`Frontend`</span><br/>

@@ -54,2 +57,5 @@ widely adopted and feature rich web interface for interacting with LLMs. Supports OpenAI-compatible and Ollama backends, multi-users, multi-model chats, custom prompts, TTS, Web RAG, RAG, and much much more.

- [Presenton](https://github.com/av/harbor/wiki/2.1.13-Frontend-Presenton) <span style="opacity: 0.5;">`Frontend`</span><br/>
Open-source AI presentation generator with custom layouts, multi-model support, and PDF/PPTX export.
# Backends

@@ -150,2 +156,5 @@

- [Drawio](https://github.com/av/harbor/wiki/2.3.56-Satellite-Drawio) <span style="opacity: 0.5;">`Satellite`</span><br/>
AI-powered diagram creation tool - generate draw.io diagrams from natural language.
- [Fabric](https://github.com/av/harbor/wiki/2.3.10-Satellite:-fabric) <span style="opacity: 0.5;">`Satellite`, `CLI`</span><br/>

@@ -172,2 +181,5 @@ LLM-driven processing of the text data in the terminal.

- [Karakeep](https://github.com/av/harbor/wiki/2.3.53-Satellite-Karakeep) <span style="opacity: 0.5;">`Satellite`</span><br/>
Self-hosted bookmark manager with AI-powered automatic tagging via OpenAI or Ollama.
- [KoboldCpp](https://github.com/av/harbor/wiki/2.2.16-Backend:-KoboldCpp) <span style="opacity: 0.5;">`Satellite`, `Frontend`, `Backend`</span><br/>

@@ -212,2 +224,5 @@ KoboldCpp is an easy-to-use AI text-generation software for GGML and GGUF models.

- [MindsDB](https://github.com/av/harbor/wiki/2.3.57-Satellite-MindsDB) <span style="opacity: 0.5;">`Satellite`, `API`</span><br/>
AI platform for integrating ML models with data sources via HTTP and MySQL APIs.
- [Morphic](https://github.com/av/harbor/wiki/2.3.34-Satellite-Morphic) <span style="opacity: 0.5;">`Satellite`</span><br/>

@@ -219,2 +234,5 @@ An AI-powered search engine with a generative UI, similar to Perplexity and Perplexica.

- [Netdata](https://github.com/av/harbor/wiki/2.3.54-Satellite-Netdata) <span style="opacity: 0.5;">`Satellite`</span><br/>
Real-time infrastructure monitoring with per-second metrics for systems, containers, and applications.
- [OmniParser](https://github.com/av/harbor/wiki/2.3.30-Satellite:-OmniParser) <span style="opacity: 0.5;">`Satellite`</span><br/>

@@ -253,5 +271,11 @@ A simple screen parsing tool towards pure vision based GUI agent.

- [Resume Matcher](https://github.com/av/harbor/wiki/2.3.55-Satellite-Resume-Matcher) <span style="opacity: 0.5;">`Satellite`</span><br/>
AI-powered tool for comparing resumes against job descriptions using local LLMs via Ollama.
- [SearXNG](https://github.com/av/harbor/wiki/2.3.1-Satellite:-SearXNG) <span style="opacity: 0.5;">`Satellite`</span><br/>
A privacy-respecting, hackable metasearch engine. Highly configurable and can be used for Web RAG use-cases.
- [Sim Studio](https://github.com/av/harbor/wiki/2.3.58-Satellite-Sim-Studio) <span style="opacity: 0.5;">`Satellite`, `Workflows`</span><br/>
Open-source platform to build and deploy AI agent workflows with visual canvas editor.
- [SQL Chat](https://github.com/av/harbor/wiki/2.3.35-Satellite-SQL-Chat) <span style="opacity: 0.5;">`Satellite`</span><br/>

@@ -258,0 +282,0 @@ Chat-based SQL client, which uses natural language to communicate with the database.

@@ -105,4 +105,4 @@ ### [Windmill](https://github.com/windmill-labs/windmill)

# Specific service
docker logs harbor.windmill-server
docker logs harbor.windmill-worker
harbor logs windmill-server
harbor logs windmill-worker
```

@@ -109,0 +109,0 @@

@@ -225,2 +225,7 @@ # Harbor Boost Modules

- `remove_vowel` - removes vowels from the input
- `invert_180` - inverts characters 180 degrees
- `unicode_lookalike` - replaces characters with Unicode lookalikes from other scripts
- `homoglyph` - replaces characters with visually identical homoglyphs
- `zero_width` - inserts zero-width characters after the character
- `zalgo` - adds multiple combining marks to create zalgo text effect
- `strat` - strategy for selection of the messages to rewrite. Default is `match`

@@ -252,2 +257,7 @@ - `all` - match all messages

harbor boost klmbr mods add remove_vowel
harbor boost klmbr mods add invert_180
harbor boost klmbr mods add unicode_lookalike
harbor boost klmbr mods add homoglyph
harbor boost klmbr mods add zero_width
harbor boost klmbr mods add zalgo

@@ -254,0 +264,0 @@ # Change the selection strategy

{
"name": "@avcodes/harbor",
"version": "0.3.22",
"version": "0.3.28",
"description": "Effortlessly run LLM backends, APIs, frontends, and services with one command.",

@@ -5,0 +5,0 @@ "private": false,

@@ -123,2 +123,3 @@ # ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

HARBOR_LLAMACPP_HOST_PORT=33831
HARBOR_LLAMACPP_IMAGE="ghcr.io/ggml-org/llama.cpp"
HARBOR_LLAMACPP_GGUF=""

@@ -677,3 +678,2 @@ HARBOR_LLAMACPP_MODEL="https://huggingface.co/microsoft/Phi-3.5-mini-instruct-gguf/blob/main/Phi-3-mini-4k-instruct-q4.gguf"

HARBOR_BROWSERUSE_VNC_PASSWORD="youvncpassword"
HARBOR_BROWSERUSE_OPEN_URL="http://localhost:34501"
HARBOR_BROWSERUSE_API_KEY=""

@@ -709,2 +709,120 @@ HARBOR_BROWSERUSE_ANTHROPIC_API_KEY=""

# Presenton
HARBOR_PRESENTON_HOST_PORT=34531
HARBOR_PRESENTON_IMAGE="ghcr.io/presenton/presenton"
HARBOR_PRESENTON_VERSION="latest"
HARBOR_PRESENTON_CAN_CHANGE_KEYS="true"
HARBOR_PRESENTON_LLM="ollama"
HARBOR_PRESENTON_OLLAMA_URL=""
HARBOR_PRESENTON_OLLAMA_MODEL=""
HARBOR_PRESENTON_OPENAI_API_KEY=""
HARBOR_PRESENTON_OPENAI_MODEL=""
HARBOR_PRESENTON_GOOGLE_API_KEY=""
HARBOR_PRESENTON_GOOGLE_MODEL=""
HARBOR_PRESENTON_ANTHROPIC_API_KEY=""
HARBOR_PRESENTON_ANTHROPIC_MODEL=""
HARBOR_PRESENTON_CUSTOM_LLM_URL=""
HARBOR_PRESENTON_CUSTOM_LLM_API_KEY=""
HARBOR_PRESENTON_CUSTOM_MODEL=""
HARBOR_PRESENTON_IMAGE_PROVIDER="pexels"
HARBOR_PRESENTON_PEXELS_API_KEY=""
HARBOR_PRESENTON_EXTENDED_REASONING="false"
HARBOR_PRESENTON_WEB_GROUNDING="false"
HARBOR_PRESENTON_TOOL_CALLS="true"
HARBOR_PRESENTON_DISABLE_THINKING="false"
HARBOR_PRESENTON_DATABASE_URL=""
HARBOR_PRESENTON_DISABLE_ANONYMOUS_TRACKING="true"
# Karakeep
HARBOR_KARAKEEP_HOST_PORT=34541
HARBOR_KARAKEEP_IMAGE="ghcr.io/karakeep-app/karakeep"
HARBOR_KARAKEEP_VERSION="release"
HARBOR_KARAKEEP_CHROME_IMAGE="gcr.io/zenika-hub/alpine-chrome"
HARBOR_KARAKEEP_CHROME_VERSION="124"
HARBOR_KARAKEEP_MEILI_IMAGE="getmeili/meilisearch"
HARBOR_KARAKEEP_MEILI_VERSION="v1.13.3"
HARBOR_KARAKEEP_NEXTAUTH_SECRET="harbor_karakeep_secret_change_me"
HARBOR_KARAKEEP_MEILI_MASTER_KEY="harbor_karakeep_meili_key_change_me"
HARBOR_KARAKEEP_WORKSPACE="./karakeep/data"
HARBOR_KARAKEEP_INFERENCE_TEXT_MODEL=""
HARBOR_KARAKEEP_INFERENCE_IMAGE_MODEL=""
HARBOR_KARAKEEP_INFERENCE_CONTEXT_LENGTH=8192
# Netdata
HARBOR_NETDATA_HOST_PORT=34551
HARBOR_NETDATA_IMAGE="netdata/netdata"
HARBOR_NETDATA_VERSION="stable"
HARBOR_NETDATA_WORKSPACE="./netdata"
# Skip the new splash screen
HARBOR_NETDATA_OPEN_URL="http://localhost:34551/v3"
# Resume Matcher
HARBOR_RESUME_MATCHER_HOST_PORT=34561
HARBOR_RESUME_MATCHER_BACKEND_HOST_PORT=34562
HARBOR_RESUME_MATCHER_GIT_REF="https://github.com/srbhr/Resume-Matcher.git#main"
HARBOR_RESUME_MATCHER_WORKSPACE="./resume-matcher"
HARBOR_RESUME_MATCHER_SESSION_SECRET="harbor_resume_matcher_secret_change_me"
HARBOR_RESUME_MATCHER_LLM_PROVIDER="ollama"
HARBOR_RESUME_MATCHER_LLM_MODEL="gemma3:4b"
HARBOR_RESUME_MATCHER_EMBEDDING_PROVIDER="ollama"
HARBOR_RESUME_MATCHER_EMBEDDING_MODEL="bge-m3:latest"
# Drawio
HARBOR_DRAWIO_HOST_PORT=34571
HARBOR_DRAWIO_IMAGE="ghcr.io/dayuanjiang/next-ai-draw-io"
HARBOR_DRAWIO_VERSION="latest"
HARBOR_DRAWIO_AI_PROVIDER="ollama"
HARBOR_DRAWIO_AI_MODEL="qwen3:30b"
HARBOR_DRAWIO_TEMPERATURE=""
HARBOR_DRAWIO_ACCESS_CODE=""
# MindsDB
HARBOR_MINDSDB_HOST_PORT=34581
HARBOR_MINDSDB_MYSQL_HOST_PORT=34582
HARBOR_MINDSDB_IMAGE="mindsdb/mindsdb"
HARBOR_MINDSDB_VERSION="latest"
HARBOR_MINDSDB_WORKSPACE="./mindsdb/data"
HARBOR_MINDSDB_APIS="http,mysql"
HARBOR_MINDSDB_USERNAME=""
HARBOR_MINDSDB_PASSWORD=""
HARBOR_MINDSDB_OLLAMA_MODEL="llama3.1:8b"
# Sim Studio
HARBOR_SIM_HOST_PORT=34591
HARBOR_SIM_REALTIME_HOST_PORT=34592
HARBOR_SIM_DB_HOST_PORT=34593
HARBOR_SIM_IMAGE="ghcr.io/simstudioai/simstudio"
HARBOR_SIM_REALTIME_IMAGE="ghcr.io/simstudioai/realtime"
HARBOR_SIM_MIGRATIONS_IMAGE="ghcr.io/simstudioai/migrations"
HARBOR_SIM_VERSION="latest"
HARBOR_SIM_DB_IMAGE="pgvector/pgvector"
HARBOR_SIM_DB_VERSION="pg17"
HARBOR_SIM_WORKSPACE="./sim"
HARBOR_SIM_DB_NAME="simstudio"
HARBOR_SIM_DB_USER="postgres"
HARBOR_SIM_DB_PASSWORD="harbor_sim_postgres_password"
HARBOR_SIM_AUTH_SECRET="harbor_sim_auth_secret_change_me_32chars"
HARBOR_SIM_ENCRYPTION_KEY="harbor_sim_encryption_key_change_me_32ch"
HARBOR_SIM_INTERNAL_API_SECRET="harbor_sim_internal_api_secret_32char"
HARBOR_SIM_OLLAMA_URL=""
# Onyx (RAG Platform)
HARBOR_ONYX_HOST_PORT=34601
HARBOR_ONYX_VERSION="latest"
HARBOR_ONYX_VESPA_VERSION="8.277.17"
HARBOR_ONYX_MINIO_VERSION="latest"
HARBOR_ONYX_WORKSPACE="./onyx/data"
HARBOR_ONYX_AUTH_TYPE="disabled"
HARBOR_ONYX_DB_USER="postgres"
HARBOR_ONYX_DB_PASSWORD="harbor_onyx_db_password"
HARBOR_ONYX_DB_NAME="onyx"
HARBOR_ONYX_MINIO_USER="minioadmin"
HARBOR_ONYX_MINIO_PASSWORD="harbor_onyx_minio_password"
HARBOR_ONYX_MODEL_SERVER_HOST=""
HARBOR_ONYX_MODEL_SERVER_PORT=11434
HARBOR_ONYX_DISABLE_MODEL_SERVER="true"
HARBOR_ONYX_DISABLE_STREAMING="false"
HARBOR_ONYX_DEFAULT_MODEL="llama3.2:3b"
HARBOR_ONYX_FAST_MODEL="llama3.2:3b"
# ============================================

@@ -721,2 +839,3 @@ # Service Configuration.

ANONYMIZED_TELEMETRY=false
DISABLE_ANONYMOUS_TRACKING=true

@@ -723,0 +842,0 @@ # Open WebUI

[tool.poetry]
name = "llm-harbor"
version = "0.3.22"
version = "0.3.28"
description = "Effortlessly run LLM backends, APIs, frontends, and services with one command."

@@ -12,3 +12,3 @@ repository = "https://github.com/av/harbor"

classifiers = ["Topic :: Utilities","Topic :: Scientific/Engineering :: Artificial Intelligence","Environment :: Console","License :: OSI Approved :: Apache Software License"]
include = [".aider.chat.history.md",".editorconfig",".github/FUNDING.yml",".github/copilot-new-service.md",".github/workflows/app-release.yml",".github/workflows/bench-docker.yml",".github/workflows/boost-docker.yml",".gitignore",".scripts/app.ts",".scripts/comment.ts",".scripts/deno.json",".scripts/deno.lock",".scripts/docs-to-app.ts",".scripts/docs.ts",".scripts/fluid.sh",".scripts/inliner.ts",".scripts/nbs.sh",".scripts/promx.sh",".scripts/release.sh",".scripts/scaffold.ts",".scripts/seed-cdi.ts",".scripts/seed-traefik.ts",".scripts/seed.ts",".scripts/terser.sh",".style.yapf",".vscode/settings.json","AGENTS.md","LICENSE","README.md","RELEASE.md","agent/.gitignore","agent/Dockerfile","agent/docker/services.d/agent.sh","agent/override.env","agent/requirements.txt","agent/src/agent.py","agent/src/chat.py","agent/src/chat_node.py","agent/src/config.py","agent/src/format.py","agent/src/llm.py","agent/src/log.py","agent/src/main.py","agent/src/tasks/chat_to_goal.py","agent/src/tasks/direct.py","agent/src/tasks/next_step.py","agent/src/tasks/plan.py","agent/src/tasks/refine.py","agentzero/.gitignore","agentzero/override.env","aichat/Dockerfile","aichat/configs/aichat.airllm.yml","aichat/configs/aichat.aphrodite.yml","aichat/configs/aichat.config.yml","aichat/configs/aichat.dify.yml","aichat/configs/aichat.ktransformers.yml","aichat/configs/aichat.litellm.yml","aichat/configs/aichat.llamacpp.yml","aichat/configs/aichat.mistralrs.yml","aichat/configs/aichat.ollama.yml","aichat/configs/aichat.sglang.yml","aichat/configs/aichat.tabbyapi.yml","aichat/configs/aichat.vllm.yml","aichat/override.env","aichat/start_aichat.sh","aider/configs/aider.airllm.yml","aider/configs/aider.aphrodite.yml","aider/configs/aider.config.yml","aider/configs/aider.dify.yml","aider/configs/aider.ktransformers.yml","aider/configs/aider.litellm.yml","aider/configs/aider.llamacpp.yml","aider/configs/aider.mistralrs.yml","aider/configs/aider.ollama.yml","aider/configs/aider.sglang.yml","aider/configs/aider.tabbyapi.yml","aider/configs/aider.vllm.yml","aider/override.env","aider/start_aider.sh","airllm/Dockerfile","airllm/override.env","airllm/server.py","airweave/.gitignore","airweave/override.env","anythingllm/override.env","aphrodite/override.env","app/.editorconfig","app/.gitignore","app/README.md","app/app-icon.png","app/bun.lockb","app/index.html","app/package.json","app/postcss.config.js","app/public/tauri.svg","app/public/vite.svg","app/src-tauri/.gitignore","app/src-tauri/Cargo.lock","app/src-tauri/Cargo.toml","app/src-tauri/build.rs","app/src-tauri/capabilities/default.json","app/src-tauri/capabilities/desktop.json","app/src-tauri/icons/128x128.png","app/src-tauri/icons/128x128@2x.png","app/src-tauri/icons/32x32.png","app/src-tauri/icons/Square107x107Logo.png","app/src-tauri/icons/Square142x142Logo.png","app/src-tauri/icons/Square150x150Logo.png","app/src-tauri/icons/Square284x284Logo.png","app/src-tauri/icons/Square30x30Logo.png","app/src-tauri/icons/Square310x310Logo.png","app/src-tauri/icons/Square44x44Logo.png","app/src-tauri/icons/Square71x71Logo.png","app/src-tauri/icons/Square89x89Logo.png","app/src-tauri/icons/StoreLogo.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png","app/src-tauri/icons/icon.icns","app/src-tauri/icons/icon.ico","app/src-tauri/icons/icon.png","app/src-tauri/icons/ios/AppIcon-20x20@1x.png","app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png","app/src-tauri/icons/ios/AppIcon-20x20@2x.png","app/src-tauri/icons/ios/AppIcon-20x20@3x.png","app/src-tauri/icons/ios/AppIcon-29x29@1x.png","app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png","app/src-tauri/icons/ios/AppIcon-29x29@2x.png","app/src-tauri/icons/ios/AppIcon-29x29@3x.png","app/src-tauri/icons/ios/AppIcon-40x40@1x.png","app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png","app/src-tauri/icons/ios/AppIcon-40x40@2x.png","app/src-tauri/icons/ios/AppIcon-40x40@3x.png","app/src-tauri/icons/ios/AppIcon-512@2x.png","app/src-tauri/icons/ios/AppIcon-60x60@2x.png","app/src-tauri/icons/ios/AppIcon-60x60@3x.png","app/src-tauri/icons/ios/AppIcon-76x76@1x.png","app/src-tauri/icons/ios/AppIcon-76x76@2x.png","app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png","app/src-tauri/src/lib.rs","app/src-tauri/src/main.rs","app/src-tauri/src/tray.rs","app/src-tauri/tauri.conf.json","app/src/.gitignore","app/src/App.tsx","app/src/AppContent.tsx","app/src/AppRoutes.tsx","app/src/AppSidebar.tsx","app/src/BackButton.tsx","app/src/Button.tsx","app/src/ConfirmModal.tsx","app/src/DataClass.tsx","app/src/HarborLogo.tsx","app/src/IconButton.tsx","app/src/Icons.tsx","app/src/Loading.tsx","app/src/LostSquirrel.tsx","app/src/Modal.tsx","app/src/OverlayContext.tsx","app/src/ScrollToTop.tsx","app/src/SearchInput.tsx","app/src/Section.tsx","app/src/ServiceTags.tsx","app/src/assets/font/Inter-Black.woff2","app/src/assets/font/Inter-BlackItalic.woff2","app/src/assets/font/Inter-Bold.woff2","app/src/assets/font/Inter-BoldItalic.woff2","app/src/assets/font/Inter-ExtraBold.woff2","app/src/assets/font/Inter-ExtraBoldItalic.woff2","app/src/assets/font/Inter-ExtraLight.woff2","app/src/assets/font/Inter-ExtraLightItalic.woff2","app/src/assets/font/Inter-Italic.woff2","app/src/assets/font/Inter-Light.woff2","app/src/assets/font/Inter-LightItalic.woff2","app/src/assets/font/Inter-Medium.woff2","app/src/assets/font/Inter-MediumItalic.woff2","app/src/assets/font/Inter-Regular.woff2","app/src/assets/font/Inter-SemiBold.woff2","app/src/assets/font/Inter-SemiBoldItalic.woff2","app/src/assets/font/Inter-Thin.woff2","app/src/assets/font/Inter-ThinItalic.woff2","app/src/assets/font/InterDisplay-Black.woff2","app/src/assets/font/InterDisplay-BlackItalic.woff2","app/src/assets/font/InterDisplay-Bold.woff2","app/src/assets/font/InterDisplay-BoldItalic.woff2","app/src/assets/font/InterDisplay-ExtraBold.woff2","app/src/assets/font/InterDisplay-ExtraBoldItalic.woff2","app/src/assets/font/InterDisplay-ExtraLight.woff2","app/src/assets/font/InterDisplay-ExtraLightItalic.woff2","app/src/assets/font/InterDisplay-Italic.woff2","app/src/assets/font/InterDisplay-Light.woff2","app/src/assets/font/InterDisplay-LightItalic.woff2","app/src/assets/font/InterDisplay-Medium.woff2","app/src/assets/font/InterDisplay-MediumItalic.woff2","app/src/assets/font/InterDisplay-Regular.woff2","app/src/assets/font/InterDisplay-SemiBold.woff2","app/src/assets/font/InterDisplay-SemiBoldItalic.woff2","app/src/assets/font/InterDisplay-Thin.woff2","app/src/assets/font/InterDisplay-ThinItalic.woff2","app/src/assets/font/InterVariable-Italic.woff2","app/src/assets/font/InterVariable.woff2","app/src/cli/CLI.tsx","app/src/config/Config.tsx","app/src/config/ConfigNameModal.tsx","app/src/config/HarborConfig.ts","app/src/config/HarborConfigEditor.tsx","app/src/config/HarborConfigEntryEditor.tsx","app/src/config/HarborConfigSectionEditor.tsx","app/src/config/useHarborConfig.ts","app/src/configMetadata.tsx","app/src/font.css","app/src/home/Doctor.tsx","app/src/home/Home.tsx","app/src/home/ServiceCard.tsx","app/src/home/ServiceList.tsx","app/src/home/Version.tsx","app/src/home/useServiceList.tsx","app/src/localStorage.ts","app/src/main.css","app/src/main.tsx","app/src/service/ServiceActions.tsx","app/src/service/ServiceDescription.tsx","app/src/service/ServiceDetails.tsx","app/src/service/ServiceDocs.tsx","app/src/service/ServiceHandle.tsx","app/src/service/ServiceName.tsx","app/src/service/useCurrentService.ts","app/src/serviceActions.tsx","app/src/serviceMetadata.ts","app/src/settings/ProfileSelector.tsx","app/src/settings/Settings.tsx","app/src/squirrel.css","app/src/tags.css","app/src/theme.tsx","app/src/useArrayState.ts","app/src/useAutostart.tsx","app/src/useCalled.tsx","app/src/useDebounceCallback.tsx","app/src/useGlobalKeydown.tsx","app/src/useHarbor.tsx","app/src/useInvoke.tsx","app/src/useOpen.tsx","app/src/useSearch.tsx","app/src/useSelectedProfile.tsx","app/src/useSharedState.tsx","app/src/useStoredState.tsx","app/src/useUnmount.ts","app/src/utils.tsx","app/src/vite-env.d.ts","app/tailwind.config.js","app/tsconfig.json","app/tsconfig.node.json","app/vite.config.ts","autogpt/backends/autogpt.ollama.yml","autogpt/override.env","bench/Dockerfile","bench/defaultTasks.yml","bench/override.env","bench/src/bench.ts","bench/src/config.ts","bench/src/deps.ts","bench/src/judge.ts","bench/src/llm.ts","bench/src/log.ts","bench/src/report.ts","bench/src/run.ts","bench/src/runner.ts","bench/src/task.ts","bench/src/tasks.ts","bench/src/tsconfig.json","bench/src/utils.ts","bionicgpt/override.env","bionicgpt/start_envoy.sh","bolt/.env.local","bolt/Dockerfile","bolt/model.ts","bolt/override.env","boost/.dockerignore","boost/.python-version","boost/Dockerfile","boost/README.md","boost/override.env","boost/pyproject.toml","boost/src/chat.py","boost/src/chat_node.py","boost/src/config.py","boost/src/custom_modules/.gitkeep","boost/src/custom_modules/3t.py","boost/src/custom_modules/ambi.py","boost/src/custom_modules/artifacts/dnd.html","boost/src/custom_modules/artifacts/dnd_mini.html","boost/src/custom_modules/artifacts/dot.html","boost/src/custom_modules/artifacts/dot_mini.html","boost/src/custom_modules/artifacts/fluid.html","boost/src/custom_modules/artifacts/fluid/.gitignore","boost/src/custom_modules/artifacts/fluid/color.ts","boost/src/custom_modules/artifacts/fluid/config.ts","boost/src/custom_modules/artifacts/fluid/fluid.ts","boost/src/custom_modules/artifacts/fluid/graph.ts","boost/src/custom_modules/artifacts/fluid/index.pug","boost/src/custom_modules/artifacts/fluid/index.ts","boost/src/custom_modules/artifacts/fluid/listener.ts","boost/src/custom_modules/artifacts/fluid/package-lock.json","boost/src/custom_modules/artifacts/fluid/package.json","boost/src/custom_modules/artifacts/fluid/pointer.ts","boost/src/custom_modules/artifacts/fluid/utils.ts","boost/src/custom_modules/artifacts/fluid/viewport.ts","boost/src/custom_modules/artifacts/fluid/visualisation.ts","boost/src/custom_modules/artifacts/fluid/webgl.ts","boost/src/custom_modules/artifacts/fluid_mini.html","boost/src/custom_modules/artifacts/graph.html","boost/src/custom_modules/artifacts/graph_mini.html","boost/src/custom_modules/artifacts/nbs.html","boost/src/custom_modules/artifacts/nbs_mini.html","boost/src/custom_modules/artifacts/ponder.html","boost/src/custom_modules/artifacts/ponder_mini.html","boost/src/custom_modules/artifacts/promx/.gitignore","boost/src/custom_modules/artifacts/promx/index.css","boost/src/custom_modules/artifacts/promx/index.pug","boost/src/custom_modules/artifacts/promx/index.ts","boost/src/custom_modules/artifacts/promx/listener.ts","boost/src/custom_modules/artifacts/promx/package.json","boost/src/custom_modules/artifacts/promx/utils.ts","boost/src/custom_modules/artifacts/promx_mini.html","boost/src/custom_modules/artifacts/tokens.html","boost/src/custom_modules/artifacts/tokens_mini.html","boost/src/custom_modules/cea.py","boost/src/custom_modules/cex.py","boost/src/custom_modules/clarity.py","boost/src/custom_modules/crystal.py","boost/src/custom_modules/cssv.py","boost/src/custom_modules/discussurl.py","boost/src/custom_modules/example.py","boost/src/custom_modules/fml.py","boost/src/custom_modules/gact.py","boost/src/custom_modules/grug.py","boost/src/custom_modules/l33t.py","boost/src/custom_modules/meow.py","boost/src/custom_modules/ow.py","boost/src/custom_modules/pad.py","boost/src/custom_modules/pdsv.py","boost/src/custom_modules/polyglot.py","boost/src/custom_modules/recpl.py","boost/src/custom_modules/stcl.py","boost/src/custom_modules/tmsv.py","boost/src/custom_modules/tri.py","boost/src/custom_modules/unstable.py","boost/src/custom_modules/usv.py","boost/src/custom_modules/webui_artifact.py","boost/src/custom_modules/wswp.py","boost/src/debouncer.py","boost/src/events.py","boost/src/format.py","boost/src/llm.py","boost/src/llm_registry.py","boost/src/log.py","boost/src/main.py","boost/src/mapper.py","boost/src/middleware/request_id.py","boost/src/middleware/request_state.py","boost/src/mods.py","boost/src/modules/autotemp.py","boost/src/modules/concept.py","boost/src/modules/dnd.py","boost/src/modules/dot.py","boost/src/modules/eli5.py","boost/src/modules/g1.py","boost/src/modules/klmbr.py","boost/src/modules/markov.py","boost/src/modules/mcts.py","boost/src/modules/nbs.py","boost/src/modules/ponder.py","boost/src/modules/promx.py","boost/src/modules/r0.py","boost/src/modules/rcn.py","boost/src/modules/supersummer.py","boost/src/selection.py","boost/src/state.py","boost/src/tools/registry.py","boost/tests/protocol.http","boost/tests/variables.http","boost/uv.lock","browseruse/.dockerignore","browseruse/Dockerfile","browseruse/override.env","chatnio/.gitignore","chatnio/Dockerfile","chatnio/config/config.base.yml","chatnio/config/config.ollama.yml","chatnio/config/config.override.yml","chatnio/config/config.searxng.yml","chatnio/override.env","chatnio/start_chatnio.sh","chatui/configs/chatui.airllm.yml","chatui/configs/chatui.aphrodite.yml","chatui/configs/chatui.config.yml","chatui/configs/chatui.dify.yml","chatui/configs/chatui.litellm.yml","chatui/configs/chatui.llamacpp.yml","chatui/configs/chatui.mistralrs.yml","chatui/configs/chatui.ollama.yml","chatui/configs/chatui.searxng.yml","chatui/configs/chatui.tabbyapi.yml","chatui/configs/chatui.vllm.yml","chatui/envify.js","chatui/override.env","chatui/start_chatui.sh","cmdh/Dockerfile","cmdh/harbor.prompt","cmdh/ollama.ts","cmdh/override.env","cmdh/system.prompt","comfyui/.gitignore","comfyui/.gitkeep","comfyui/default-workflow.json","comfyui/override.env","comfyui/provisioning.sh","compose.agent.yml","compose.agentzero.yml","compose.aichat.yml","compose.aider.yml","compose.airllm.yml","compose.airweave.yml","compose.anythingllm.yml","compose.aphrodite.yml","compose.autogpt.yml","compose.bench.yml","compose.bionicgpt.yml","compose.bolt.yml","compose.boost.yml","compose.browseruse.yml","compose.cfd.yml","compose.chatnio.yml","compose.chatui.yml","compose.cmdh.yml","compose.comfyui.yml","compose.dify.yml","compose.docling.yml","compose.fabric.yml","compose.flowise.yml","compose.gptme.yml","compose.gum.yml","compose.hf.yml","compose.hfdownloader.yml","compose.hollama.yml","compose.jupyter.yml","compose.k6.yml","compose.kobold.yml","compose.ktransformers.yml","compose.langflow.yml","compose.langfuse.yml","compose.latentscope.yml","compose.ldr.yml","compose.librechat.yml","compose.libretranslate.yml","compose.litellm.yml","compose.litlytics.yml","compose.llamacpp.yml","compose.llamaswap.yml","compose.lmdeploy.yml","compose.lmeval.yml","compose.lobechat.yml","compose.localai.yml","compose.mcp-inspector.yml","compose.mcpo.yml","compose.metamcp.yml","compose.mikupad.yml","compose.mistralrs.yml","compose.modularmax.yml","compose.morphic.yml","compose.n8n.yml","compose.nexa.yml","compose.ol1.yml","compose.ollama.yml","compose.omnichain.yml","compose.omniparser.yml","compose.openhands.yml","compose.opint.yml","compose.optillm.yml","compose.oterm.yml","compose.parler.yml","compose.parllama.yml","compose.perplexica.yml","compose.perplexideez.yml","compose.pipelines.yml","compose.plandex.yml","compose.promptfoo.yml","compose.qdrant.yml","compose.qrgen.yml","compose.raglite.yml","compose.repopack.yml","compose.searxng.morphic.yml","compose.sglang.yml","compose.speaches.yml","compose.sqlchat.yml","compose.stt.yml","compose.supergateway.yml","compose.tabbyapi.yml","compose.textgrad.yml","compose.tgi.yml","compose.traefik.yml","compose.tts.yml","compose.txtairag.yml","compose.unsloth.yml","compose.vllm.yml","compose.webtop.yml","compose.webui.yml","compose.windmill.yml","compose.x.agentzero.ollama.yml","compose.x.aichat.ktransformers.yml","compose.x.aichat.ollama.yml","compose.x.aider.airllm.yml","compose.x.aider.aphrodite.yml","compose.x.aider.cdi.yml","compose.x.aider.dify.yml","compose.x.aider.ktransformers.yml","compose.x.aider.litellm.yml","compose.x.aider.llamacpp.yml","compose.x.aider.mistralrs.yml","compose.x.aider.nvidia.yml","compose.x.aider.ollama.yml","compose.x.aider.sglang.yml","compose.x.aider.tabbyapi.yml","compose.x.aider.vllm.yml","compose.x.anythingllm.llamacpp.yml","compose.x.anythingllm.ollama.yml","compose.x.anythingllm.searxng.yml","compose.x.aphrodite.cdi.yml","compose.x.aphrodite.nvidia.yml","compose.x.boost.airllm.yml","compose.x.boost.aphrodite.yml","compose.x.boost.dify.yml","compose.x.boost.ktransformers.yml","compose.x.boost.litellm.yml","compose.x.boost.llamacpp.yml","compose.x.boost.mistralrs.yml","compose.x.boost.ollama.yml","compose.x.boost.omnichain.yml","compose.x.boost.sglang.yml","compose.x.boost.tabbyapi.yml","compose.x.boost.vllm.yml","compose.x.browseruse.ollama.yml","compose.x.chatnio.ollama.yml","compose.x.chatnio.searxng.yml","compose.x.chatui.airllm.yml","compose.x.chatui.aphrodite.yml","compose.x.chatui.dify.yml","compose.x.chatui.litellm.yml","compose.x.chatui.llamacpp.yml","compose.x.chatui.mistralrs.yml","compose.x.chatui.ollama.yml","compose.x.chatui.searxng.yml","compose.x.chatui.tabbyapi.yml","compose.x.chatui.vllm.yml","compose.x.cmdh.harbor.yml","compose.x.cmdh.llamacpp.yml","compose.x.cmdh.ollama.yml","compose.x.cmdh.tgi.yml","compose.x.comfyui.cdi.yml","compose.x.comfyui.nvidia.yml","compose.x.docling.cdi.yml","compose.x.docling.nvidia.yml","compose.x.fabric.ollama.yml","compose.x.gptme.ollama.yml","compose.x.jupyter.cdi.yml","compose.x.jupyter.nvidia.yml","compose.x.kobold.cdi.yml","compose.x.kobold.nvidia.yml","compose.x.ktransformers.cdi.yml","compose.x.ktransformers.nvidia.yml","compose.x.langflow.litellm.yml","compose.x.ldr.ollama.yml","compose.x.ldr.searxng.yml","compose.x.litellm.langfuse.yml","compose.x.litellm.optillm.yml","compose.x.litellm.tgi.yml","compose.x.litellm.vllm.yml","compose.x.llamacpp.cdi.yml","compose.x.llamacpp.nvidia.yml","compose.x.llamaswap.cdi.yml","compose.x.llamaswap.nvidia.yml","compose.x.lmdeploy.cdi.yml","compose.x.lmdeploy.nvidia.yml","compose.x.lmeval.cdi.yml","compose.x.lmeval.nvidia.yml","compose.x.lobechat.ollama.yml","compose.x.localai.cdi.yml","compose.x.localai.nvidia.yml","compose.x.localai.rocm.yml","compose.x.mcpo.mcp-server-time.yml","compose.x.mcpo.metamcp.yml","compose.x.mistralrs.cdi.yml","compose.x.mistralrs.nvidia.yml","compose.x.morphic.ollama.yml","compose.x.nexa.cdi.yml","compose.x.nexa.nvidia.yml","compose.x.ollama.cdi.yml","compose.x.ollama.nvidia.yml","compose.x.ollama.rocm.yml","compose.x.ollama.webui.yml","compose.x.openhands.ollama.yml","compose.x.opint.aphrodite.yml","compose.x.opint.litellm.yml","compose.x.opint.llamacpp.yml","compose.x.opint.mistralrs.yml","compose.x.opint.ollama.yml","compose.x.opint.tabbyapi.yml","compose.x.opint.vllm.yml","compose.x.optillm.airllm.yml","compose.x.optillm.aphrodite.yml","compose.x.optillm.boost.yml","compose.x.optillm.cdi.yml","compose.x.optillm.dify.yml","compose.x.optillm.ktransformers.yml","compose.x.optillm.litellm.yml","compose.x.optillm.llamacpp.yml","compose.x.optillm.mistralrs.yml","compose.x.optillm.nexa.yml","compose.x.optillm.nvidia.yml","compose.x.optillm.ollama.yml","compose.x.optillm.omnichain.yml","compose.x.optillm.pipelines.yml","compose.x.optillm.sglang.yml","compose.x.optillm.tabbyapi.yml","compose.x.optillm.vllm.yml","compose.x.oterm.ollama.yml","compose.x.parler.cdi.yml","compose.x.parler.nvidia.yml","compose.x.parllama.ollama.yml","compose.x.perplexica.ollama.yml","compose.x.perplexica.searxng.yml","compose.x.perplexideez.mdc.yml","compose.x.perplexideez.ollama.yml","compose.x.perplexideez.searxng.yml","compose.x.plandex.litellm.yml","compose.x.plandex.llamacpp.yml","compose.x.plandex.ollama.yml","compose.x.promptfoo.ollama.yml","compose.x.raglite.ollama.yml","compose.x.raglite.vllm.yml","compose.x.sglang.cdi.yml","compose.x.sglang.nvidia.yml","compose.x.speaches.cdi.yml","compose.x.speaches.nvidia.yml","compose.x.sqlchat.ollama.yml","compose.x.stt.cdi.yml","compose.x.stt.nvidia.yml","compose.x.tabbyapi.cdi.yml","compose.x.tabbyapi.nvidia.yml","compose.x.textgrad.cdi.yml","compose.x.textgrad.nvidia.yml","compose.x.tgi.cdi.yml","compose.x.tgi.nvidia.yml","compose.x.traefik.agent.yml","compose.x.traefik.agentzero.yml","compose.x.traefik.aichat.yml","compose.x.traefik.aider.yml","compose.x.traefik.airllm.yml","compose.x.traefik.airweave.yml","compose.x.traefik.anythingllm.yml","compose.x.traefik.aphrodite.yml","compose.x.traefik.autogpt.yml","compose.x.traefik.bionicgpt.yml","compose.x.traefik.bolt.yml","compose.x.traefik.boost.yml","compose.x.traefik.browseruse.yml","compose.x.traefik.chatnio.yml","compose.x.traefik.chatui.yml","compose.x.traefik.comfyui.yml","compose.x.traefik.dify.yml","compose.x.traefik.docling.yml","compose.x.traefik.flowise.yml","compose.x.traefik.hollama.yml","compose.x.traefik.jupyter.yml","compose.x.traefik.k6.yml","compose.x.traefik.kobold.yml","compose.x.traefik.ktransformers.yml","compose.x.traefik.langflow.yml","compose.x.traefik.langfuse.yml","compose.x.traefik.latentscope.yml","compose.x.traefik.ldr.yml","compose.x.traefik.librechat.yml","compose.x.traefik.libretranslate.yml","compose.x.traefik.litellm.yml","compose.x.traefik.litlytics.yml","compose.x.traefik.llamacpp.yml","compose.x.traefik.llamaswap.yml","compose.x.traefik.lmdeploy.yml","compose.x.traefik.lobechat.yml","compose.x.traefik.localai.yml","compose.x.traefik.mcp-inspector.yml","compose.x.traefik.mcpo.yml","compose.x.traefik.metamcp.yml","compose.x.traefik.mikupad.yml","compose.x.traefik.mistralrs.yml","compose.x.traefik.modularmax.yml","compose.x.traefik.morphic.yml","compose.x.traefik.n8n.yml","compose.x.traefik.nexa.yml","compose.x.traefik.ol1.yml","compose.x.traefik.ollama.yml","compose.x.traefik.omnichain.yml","compose.x.traefik.omniparser.yml","compose.x.traefik.openhands.yml","compose.x.traefik.optillm.yml","compose.x.traefik.parler.yml","compose.x.traefik.perplexica.yml","compose.x.traefik.perplexideez.yml","compose.x.traefik.pipelines.yml","compose.x.traefik.plandex.yml","compose.x.traefik.promptfoo.yml","compose.x.traefik.qdrant.yml","compose.x.traefik.raglite.yml","compose.x.traefik.sglang.yml","compose.x.traefik.speaches.yml","compose.x.traefik.sqlchat.yml","compose.x.traefik.stt.yml","compose.x.traefik.tabbyapi.yml","compose.x.traefik.textgrad.yml","compose.x.traefik.tgi.yml","compose.x.traefik.tts.yml","compose.x.traefik.txtairag.yml","compose.x.traefik.unsloth.yml","compose.x.traefik.vllm.yml","compose.x.traefik.webtop.yml","compose.x.traefik.webui.yml","compose.x.tts.cdi.yml","compose.x.tts.nvidia.yml","compose.x.txtairag.cdi.yml","compose.x.txtairag.nvidia.yml","compose.x.txtairag.ollama.yml","compose.x.unsloth.cdi.yml","compose.x.unsloth.nvidia.yml","compose.x.vllm.cdi.yml","compose.x.vllm.nvidia.yml","compose.x.webui.agent.yml","compose.x.webui.airllm.yml","compose.x.webui.aphrodite.yml","compose.x.webui.boost.yml","compose.x.webui.comfyui.yml","compose.x.webui.dify.yml","compose.x.webui.kobold.yml","compose.x.webui.ktransformers.yml","compose.x.webui.litellm.yml","compose.x.webui.llamacpp.yml","compose.x.webui.llamaswap.yml","compose.x.webui.mcpo.metamcp.yml","compose.x.webui.mistralrs.yml","compose.x.webui.modularmax.yml","compose.x.webui.nexa.yml","compose.x.webui.ollama.yml","compose.x.webui.omnichain.yml","compose.x.webui.optillm.yml","compose.x.webui.parler.yml","compose.x.webui.pipelines.yml","compose.x.webui.searxng.ollama.yml","compose.x.webui.searxng.yml","compose.x.webui.sglang.yml","compose.x.webui.speaches.yml","compose.x.webui.stt.yml","compose.x.webui.tabbyapi.yml","compose.x.webui.tts.yml","compose.x.webui.vllm.yml","compose.yml","deno.lock","dify/certbot/README.md","dify/certbot/docker-entrypoint.sh","dify/certbot/update-cert.template.txt","dify/nginx/conf.d/default.conf.template","dify/nginx/docker-entrypoint.sh","dify/nginx/https.conf.template","dify/nginx/nginx.conf.template","dify/nginx/proxy.conf.template","dify/nginx/ssl/.gitkeep","dify/openai/Dockerfile","dify/openai/app.js","dify/openai/package.json","dify/override.env","dify/ssrf_proxy/docker-entrypoint.sh","dify/ssrf_proxy/squid.conf.template","docling/override.env","docs/1.-Harbor-User-Guide.md","docs/1.0.-Installing-Harbor.md","docs/1.1-Harbor-App.md","docs/1.2-Tools.md","docs/2.-Services.md","docs/2.1.1-Frontend&colon-Open-WebUI.md","docs/2.1.10-Frontend&colon-Chat-Nio.md","docs/2.1.11-Frontend&colon-Mikupad.md","docs/2.1.12-Frontend-oterm.md","docs/2.1.2-Frontend&colon-ComfyUI.md","docs/2.1.3-Frontend&colon-LibreChat.md","docs/2.1.4-Frontend&colon-ChatUI.md","docs/2.1.5-Frontend&colon-Lobe-Chat.md","docs/2.1.6-Frontend&colon-hollama.md","docs/2.1.7-Frontend&colon-parllama.md","docs/2.1.8-Frontend&colon-BionicGPT.md","docs/2.1.9-Frontend&colon-AnythingLLM.md","docs/2.2.1-Backend&colon-Ollama.md","docs/2.2.10-Backend&colon-lmdeploy.md","docs/2.2.11-Backend&colon-AirLLM.md","docs/2.2.12-Backend&colon-SGLang.md","docs/2.2.13-Backend&colon-KTransformers.md","docs/2.2.14-Backend&colon-Speaches.md","docs/2.2.15-Backend&colon-Nexa-SDK.md","docs/2.2.16-Backend&colon-KoboldCpp.md","docs/2.2.17-Backend-Modular-MAX.md","docs/2.2.2-Backend&colon-llama.cpp.md","docs/2.2.3-Backend&colon-vLLM.md","docs/2.2.4-Backend&colon-TabbyAPI.md","docs/2.2.5-Backend&colon-Aphrodite-Engine.md","docs/2.2.6-Backend&colon-mistral.rs.md","docs/2.2.7-Backend&colon-openedai-speech.md","docs/2.2.8-Backend&colon-Parler.md","docs/2.2.9-Backend&colon-text-generation-inference.md","docs/2.3.1-Satellite&colon-SearXNG.md","docs/2.3.10-Satellite&colon-fabric.md","docs/2.3.11-Satellite&colon-txtai-RAG.md","docs/2.3.12-Satellite&colon-TextGrad.md","docs/2.3.13-Satellite&colon-aider.md","docs/2.3.14-Satellite&colon-aichat.md","docs/2.3.15-Satellite&colon-AutoGPT.md","docs/2.3.16-Satellite&colon-omnichain.md","docs/2.3.17-Satellite&colon-lm-evaluation-harness.md","docs/2.3.18-Satellite&colon-JupyterLab.md","docs/2.3.19-Satellite&colon-ol1.md","docs/2.3.2-Satellite&colon-Perplexica.md","docs/2.3.20-Satellite&colon-OpenHands.md","docs/2.3.21-Satellite&colon-LitLytics.md","docs/2.3.22-Satellite&colon-Repopack.md","docs/2.3.23-Satellite&colon-n8n.md","docs/2.3.24-Satellite&colon-Bolt.new.md","docs/2.3.25-Satellite&colon-Open-WebUI-Pipelines.md","docs/2.3.26-Satellite&colon-Qdrant.md","docs/2.3.27-Satellite&colon-K6.md","docs/2.3.28-Satellite&colon-Promptfoo.md","docs/2.3.29-Satellite&colon-Webtop.md","docs/2.3.3-Satellite&colon-Dify.md","docs/2.3.30-Satellite&colon-OmniParser.md","docs/2.3.31-Satellite&colon-Flowise.md","docs/2.3.32-Satellite&colon-LangFlow.md","docs/2.3.33-Satellite&colon-OptiLLM.md","docs/2.3.34-Satellite-Morphic.md","docs/2.3.35-Satellite-SQL-Chat.md","docs/2.3.36-Satellite-gptme.md","docs/2.3.37-Satellite-traefik.md","docs/2.3.38-Satellite-Latent-Scope.md","docs/2.3.39-Satellite-RAGLite.md","docs/2.3.4-Satellite&colon-Plandex.md","docs/2.3.40-Satellite-llamaswap.md","docs/2.3.41-Satellite-libretranslate.md","docs/2.3.42-Satellite-metamcp.md","docs/2.3.43-Satellite-mcpo.md","docs/2.3.44-Satellite-supergateway.md","docs/2.3.45-Satellite-Local-Deep-Research.md","docs/2.3.46-Satellite-LocalAI.md","docs/2.3.47-Satellite-Agent-Zero.md","docs/2.3.48-Satellite-Airweave.md","docs/2.3.49-Satellite-Docling.md","docs/2.3.5-Satellite&colon-LiteLLM.md","docs/2.3.50-Satellite-Browser-Use.md","docs/2.3.51-Satellite-Unsloth.md","docs/2.3.52-Satellite-Windmill.md","docs/2.3.6-Satellite&colon-langfuse.md","docs/2.3.7-Satellite&colon-Open-Interpreter.md","docs/2.3.8-Satellite&colon-cloudflared.md","docs/2.3.9-Satellite&colon-cmdh.md","docs/3.-Harbor-CLI-Reference.md","docs/4.-Compatibility.md","docs/5.1.-Harbor-Bench.md","docs/5.2.-Harbor-Boost.md","docs/5.2.1.-Harbor-Boost-Custom-Modules.md","docs/5.2.2-Harbor-Boost-Configuration.md","docs/5.2.3-Harbor-Boost-Modules.md","docs/6.-Harbor-Compose-Setup.md","docs/7.-Adding-A-New-Service.md","docs/README.md","docs/_Footer.md","docs/anythingllm.png","docs/bench-report.png","docs/bench-superset.png","docs/bionicgpt.png","docs/bolt-local-qwen.png","docs/bolt-openailike.png","docs/boost-autotemp.png","docs/boost-behavior.png","docs/boost-concept.png","docs/boost-custom-example.png","docs/boost-dnd.png","docs/boost-dot.png","docs/boost-klmbr.png","docs/boost-markov.png","docs/boost-nbs.png","docs/boost-ponder.png","docs/boost-promx.png","docs/boost-r0.png","docs/boost-unstable.png","docs/boost.png","docs/chatnio-searxng.png","docs/chatui-searxng.png","docs/dify-harbor.png","docs/dify-ollama.png","docs/dify-sample-webllama.yml","docs/dify-sample-webrag.yml","docs/dify-searxng.png","docs/dify-webui.png","docs/flowise.png","docs/g1-reasoning.png","docs/gptme.png","docs/harbor-2.png","docs/harbor-agentzero.png","docs/harbor-airllm.png","docs/harbor-airweave.png","docs/harbor-app-2.png","docs/harbor-app-3.png","docs/harbor-app-4.png","docs/harbor-app-5.png","docs/harbor-app-6.png","docs/harbor-app-7.png","docs/harbor-app-8.png","docs/harbor-app-macos.png","docs/harbor-app.png","docs/harbor-arch-diag.png","docs/harbor-boost.png","docs/harbor-browseruse.gif","docs/harbor-comfyui-update.png","docs/harbor-docling.png","docs/harbor-history.gif","docs/harbor-k6.png","docs/harbor-latentscope.png","docs/harbor-ldr.png","docs/harbor-libretranslate.png","docs/harbor-metamcp.png","docs/harbor-morphic.png","docs/harbor-ollama-models.png","docs/harbor-oterm.png","docs/harbor-raglite.png","docs/harbor-tools.png","docs/harbor-top.png","docs/harbor-traefik.png","docs/harbor-unsloth.png","docs/harbor-webtop.png","docs/harbor-webui-json.png","docs/harbor-windmill.png","docs/image.png","docs/ktransformers-webui.png","docs/langflow.png","docs/langfuse.png","docs/litlytics-config.png","docs/litlytics.png","docs/mcp-inspector.png","docs/mcpo.png","docs/mikupad.png","docs/nexa-webui-error.png","docs/nexa-webui-workaround.png","docs/ol1.png","docs/omnichain-import.png","docs/omnichain.png","docs/omniparser.png","docs/openhands-config.png","docs/optillm.png","docs/parllama.png","docs/plandex-exec.png","docs/promptfoo-2.png","docs/promptfoo.png","docs/qr.png","docs/seaxng-webrag.png","docs/sqlchat.png","docs/tunnels.png","docs/txtairag.png","docs/webui-boost-status.png","docs/webui-pipelines-2.png","docs/webui-pipelines.png","fabric/override.env","flowise/.gitignore","flowise/override.env","gptme/Dockerfile","gptme/config.toml","gptme/override.env","gum/Dockerfile","harbor.sh","harbor/__init__.py","hf/Dockerfile","hf/override.env","hfdownloader/Dockerfile","hfdownloader/override.env","http-catalog/agent.http","http-catalog/airllm.http","http-catalog/aphrodite.http","http-catalog/boost.http","http-catalog/comfyui.http","http-catalog/dify.http","http-catalog/hf.http","http-catalog/kobold.http","http-catalog/ktransformers.http","http-catalog/langfuse.http","http-catalog/litellm.http","http-catalog/llamacpp.http","http-catalog/llamaswap.http","http-catalog/mistral.http","http-catalog/mistralrs.http","http-catalog/modularmax.http","http-catalog/nexa.http","http-catalog/ollama.http","http-catalog/ollama/completions.http","http-catalog/omnichain.http","http-catalog/optillm.http","http-catalog/parler.http","http-catalog/perplexideez.http","http-catalog/plandex.http","http-catalog/sglang.http","http-catalog/speaches.http","http-catalog/stt.http","http-catalog/tabbyapi.http","http-catalog/tgi.http","http-catalog/tts.http","http-catalog/vllm.http","http-catalog/webui.http","install.sh","jupyter/Dockerfile","jupyter/override.env","jupyter/workspace/000-sample.ipynb","k6/.gitignore","k6/dashboards/k6-load-testing-results_rev3.json","k6/dashboards/k6-openai-tokens_rev1.json","k6/docker-compose.yaml","k6/grafana-dashboard.yaml","k6/grafana-datasource.yaml","k6/override.env","k6/scripts/concurrent-prefix-caching.js","k6/scripts/example.js","k6/scripts/helpers/config.js","k6/scripts/helpers/http.js","k6/scripts/helpers/ollamaHttp.js","k6/scripts/helpers/openaiGeneric.js","k6/scripts/helpers/utils.js","k6/scripts/ollama.js","k6/scripts/openai-api-throughput.js","k6/scripts/payloads/completions.js","k6/scripts/payloads/ollama.js","kobold/.gitignore","kobold/override.env","ktransformers/Dockerfile","ktransformers/chat.py","ktransformers/override.env","langflow/.gitignore","langflow/override.env","langfuse/.gitignore","langfuse/.gitkeep","langfuse/override.env","latentscope/.gitignore","latentscope/Dockerfile","latentscope/override.env","ldr/.gitignore","ldr/override.env","librechat/.env","librechat/.gitignore","librechat/.gitkeep","librechat/librechat.yml","librechat/override.env","librechat/start_librechat.sh","libretranslate/.gitignore","libretranslate/override.env","litellm/litellm.config.yaml","litellm/litellm.langfuse.yaml","litellm/litellm.optillm.yaml","litellm/litellm.tgi.yaml","litellm/litellm.vllm.yaml","litellm/override.env","litellm/start_litellm.sh","litlytics/override.env","llamacpp/data/templates/tars.jinja","llamacpp/override.env","llamaswap/config.yaml","llamaswap/override.env","lmeval/Dockerfile","lmeval/override.env","lobechat/override.env","localai/.gitignore","localai/override.env","mcp/.gitignore","mcp/inspector-entrypoint.sh","mcp/override.env","mcpo/configs/mcpo.mcp-server-fetch.json","mcpo/configs/mcpo.mcp-server-time.json","mcpo/configs/mcpo.metamcp.json","mcpo/configs/mcpo.override.json","mcpo/override.env","mcpo/start_mcpo.sh","metamcp/.gitignore","metamcp/override.env","metamcp/start-sse.mjs","mikupad/override.env","modularmax/override.env","morphic/.gitignore","morphic/override.env","n8n/.gitignore","n8n/backup/credentials/9LdDQI9lblNjIGIZ.json","n8n/backup/workflows/6K7zSSBeRa0z1hi6.json","n8n/override.env","nexa/Dockerfile","nexa/nvidia.sh","nexa/override.env","nexa/proxy.Dockerfile","nexa/proxy_server.py","ol1/Dockerfile","ol1/README.md","ol1/app.py","ol1/override.env","ollama/.gitkeep","ollama/init_entrypoint.sh","ollama/modelfiles/README.md","ollama/modelfiles/flowaicom-flow-judge.Modelfile","ollama/modelfiles/gemma3-qat-tools.Modelfile","ollama/modelfiles/hargent.Modelfile","ollama/modelfiles/llama3.1_8b.Modelfile","ollama/modelfiles/llama3.1_q6k_48k.Modelfile","ollama/modelfiles/qwen2.5_7b_q8_32k.Modelfile","ollama/modelfiles/qwen2.5_7b_q8_48k.Modelfile","ollama/modelfiles/qwen2.5_q6k_32k.Modelfile","ollama/modelfiles/tars.Modelfile","ollama/override.env","omnichain/Dockerfile","omnichain/custom_nodes/example/example.maker.js","omnichain/entrypoint.sh","omnichain/examples/HarborChat.json","omnichain/files/harbor.prompt","omnichain/openai.ts","omnichain/override.env","omniparser/Dockerfile","omniparser/override.env","open-webui/configs/config.agent.json","open-webui/configs/config.airllm.json","open-webui/configs/config.aphrodite.json","open-webui/configs/config.boost.json","open-webui/configs/config.comfyui.json","open-webui/configs/config.dify.json","open-webui/configs/config.json","open-webui/configs/config.kobold.json","open-webui/configs/config.ktransformers.json","open-webui/configs/config.litellm.json","open-webui/configs/config.llamacpp.json","open-webui/configs/config.llamaswap.json","open-webui/configs/config.mistralrs.json","open-webui/configs/config.modularmax.json","open-webui/configs/config.nexa.json","open-webui/configs/config.ollama.json","open-webui/configs/config.omnichain.json","open-webui/configs/config.optillm.json","open-webui/configs/config.override.json","open-webui/configs/config.parler.json","open-webui/configs/config.pipelines.json","open-webui/configs/config.searxng.json","open-webui/configs/config.sglang.json","open-webui/configs/config.speaches.json","open-webui/configs/config.stt.json","open-webui/configs/config.tabbyapi.json","open-webui/configs/config.tts.json","open-webui/configs/config.vllm.json","open-webui/configs/config.x.mcpo.metamcp.json","open-webui/configs/config.x.searxng.ollama.json","open-webui/extras/artifact.py","open-webui/extras/mcts.py","open-webui/override.env","open-webui/start_webui.sh","openhands/.gitignore","openhands/override.env","openinterpreter/Dockerfile","openinterpreter/override.env","optillm/.gitignore","optillm/override.env","oterm/.gitignore","oterm/Dockerfile","oterm/override.env","package.json","parler/main.py","parler/override.env","parllama/Dockerfile","parllama/override.env","perplexica/override.env","perplexica/source.config.toml","perplexideez/.gitignore","perplexideez/override.env","pipelines/override.env","plandex/Dockerfile","plandex/override.env","poetry.lock","profiles/default.env","promptfoo/.gitignore","promptfoo/README.md","promptfoo/evals/hf/README.md","promptfoo/evals/hf/deno.json","promptfoo/evals/hf/deno.lock","promptfoo/evals/hf/generate.ts","promptfoo/evals/hf/promptfoo-errors.log","promptfoo/evals/hf/promptfooconfig.yaml","promptfoo/evals/hf/queries.ts","promptfoo/evals/hf/tests/category_sample.yaml","promptfoo/evals/hf/tests/challenge.yaml","promptfoo/evals/hf/tests/gpqa_diamond.yaml","promptfoo/evals/hf/tests/validate.yaml","promptfoo/evals/mini-mmlu-pro/generate.ts","promptfoo/examples/bias/README.md","promptfoo/examples/bias/promptfooconfig.yaml","promptfoo/examples/hello-promptfoo/README.md","promptfoo/examples/hello-promptfoo/promptfooconfig.yaml","promptfoo/examples/misguided/README.md","promptfoo/examples/misguided/promptfooconfig.yaml","promptfoo/examples/temp-test/README.md","promptfoo/examples/temp-test/promptfooconfig.yaml","promptfoo/override.env","pyproject.toml","qdrant/override.env","qrgen/Dockerfile","qrgen/gen.ts","raglite/.gitignore","raglite/Dockerfile","raglite/override.env","repopack/Dockerfile","repopack/override.env","requirements.sh","routines/.vscode/settings.json","routines/config.ts","routines/deno.json","routines/deno.lock","routines/docker.ts","routines/envManager.ts","routines/manageTools.ts","routines/mergeComposeFiles.ts","routines/paths.ts","routines/tsconfig.json","routines/types.ts","routines/utils.ts","searxng/override.env","searxng/settings.yml","searxng/settings.yml.new","searxng/uwsgi.ini","searxng/uwsgi.ini.new","shared/README.md","shared/harbor_entrypoint.sh","shared/json_config_merger.py","shared/proxy_user.sh","shared/yaml_config_merger.js","shared/yaml_config_merger.py","speaches/init_entrypoint.ts","speaches/override.env","sqlchat/override.env","stt/override.env","supergateway/override.env","tabbyapi/api_tokens.yml","tabbyapi/config.yml","tabbyapi/override.env","tabbyapi/start_tabbyapi.sh","textgrad/Dockerfile","textgrad/override.env","textgrad/workspace/000-sample.ipynb","tgi/override.env","tools/config.yaml","traefik/acme.json","traefik/override.env","traefik/traefik.yml","tts/config/pre_process_map.yaml","tts/config/voice_to_speaker.yaml","tts/override.env","txtairag/rag.py","unsloth/.gitignore","unsloth/override.env","vllm/Dockerfile","vllm/override.env","webtop/.gitignore","webtop/Dockerfile","webtop/init/create_symlink.sh","webtop/init/fix_desktop_app.sh","webtop/init/provision_docker_groups.sh","webtop/override.env","windmill/.gitignore","windmill/Caddyfile","windmill/override.env","yarn.lock"]
include = [".aider.chat.history.md",".editorconfig",".github/FUNDING.yml",".github/agents/new-service.agent.md",".github/copilot-new-service.md",".github/workflows/app-release.yml",".github/workflows/bench-docker.yml",".github/workflows/boost-docker.yml",".gitignore",".scripts/app.ts",".scripts/comment.ts",".scripts/deno.json",".scripts/deno.lock",".scripts/docs-to-app.ts",".scripts/docs.ts",".scripts/fluid.sh",".scripts/inliner.ts",".scripts/nbs.sh",".scripts/promx.sh",".scripts/release.sh",".scripts/scaffold.ts",".scripts/seed-cdi.ts",".scripts/seed-traefik.ts",".scripts/seed.ts",".scripts/terser.sh",".style.yapf",".vscode/settings.json","AGENTS.md","LICENSE","README.md","RELEASE.md","agent/.gitignore","agent/Dockerfile","agent/docker/services.d/agent.sh","agent/override.env","agent/requirements.txt","agent/src/agent.py","agent/src/chat.py","agent/src/chat_node.py","agent/src/config.py","agent/src/format.py","agent/src/llm.py","agent/src/log.py","agent/src/main.py","agent/src/tasks/chat_to_goal.py","agent/src/tasks/direct.py","agent/src/tasks/next_step.py","agent/src/tasks/plan.py","agent/src/tasks/refine.py","agentzero/.gitignore","agentzero/override.env","aichat/Dockerfile","aichat/configs/aichat.airllm.yml","aichat/configs/aichat.aphrodite.yml","aichat/configs/aichat.config.yml","aichat/configs/aichat.dify.yml","aichat/configs/aichat.ktransformers.yml","aichat/configs/aichat.litellm.yml","aichat/configs/aichat.llamacpp.yml","aichat/configs/aichat.mistralrs.yml","aichat/configs/aichat.ollama.yml","aichat/configs/aichat.sglang.yml","aichat/configs/aichat.tabbyapi.yml","aichat/configs/aichat.vllm.yml","aichat/override.env","aichat/start_aichat.sh","aider/configs/aider.airllm.yml","aider/configs/aider.aphrodite.yml","aider/configs/aider.config.yml","aider/configs/aider.dify.yml","aider/configs/aider.ktransformers.yml","aider/configs/aider.litellm.yml","aider/configs/aider.llamacpp.yml","aider/configs/aider.mistralrs.yml","aider/configs/aider.ollama.yml","aider/configs/aider.sglang.yml","aider/configs/aider.tabbyapi.yml","aider/configs/aider.vllm.yml","aider/override.env","aider/start_aider.sh","airllm/Dockerfile","airllm/override.env","airllm/server.py","airweave/.gitignore","airweave/override.env","anythingllm/override.env","aphrodite/override.env","app/.editorconfig","app/.gitignore","app/README.md","app/app-icon.png","app/bun.lockb","app/index.html","app/package.json","app/postcss.config.js","app/public/tauri.svg","app/public/vite.svg","app/src-tauri/.gitignore","app/src-tauri/Cargo.lock","app/src-tauri/Cargo.toml","app/src-tauri/build.rs","app/src-tauri/capabilities/default.json","app/src-tauri/capabilities/desktop.json","app/src-tauri/icons/128x128.png","app/src-tauri/icons/128x128@2x.png","app/src-tauri/icons/32x32.png","app/src-tauri/icons/Square107x107Logo.png","app/src-tauri/icons/Square142x142Logo.png","app/src-tauri/icons/Square150x150Logo.png","app/src-tauri/icons/Square284x284Logo.png","app/src-tauri/icons/Square30x30Logo.png","app/src-tauri/icons/Square310x310Logo.png","app/src-tauri/icons/Square44x44Logo.png","app/src-tauri/icons/Square71x71Logo.png","app/src-tauri/icons/Square89x89Logo.png","app/src-tauri/icons/StoreLogo.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png","app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png","app/src-tauri/icons/icon.icns","app/src-tauri/icons/icon.ico","app/src-tauri/icons/icon.png","app/src-tauri/icons/ios/AppIcon-20x20@1x.png","app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png","app/src-tauri/icons/ios/AppIcon-20x20@2x.png","app/src-tauri/icons/ios/AppIcon-20x20@3x.png","app/src-tauri/icons/ios/AppIcon-29x29@1x.png","app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png","app/src-tauri/icons/ios/AppIcon-29x29@2x.png","app/src-tauri/icons/ios/AppIcon-29x29@3x.png","app/src-tauri/icons/ios/AppIcon-40x40@1x.png","app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png","app/src-tauri/icons/ios/AppIcon-40x40@2x.png","app/src-tauri/icons/ios/AppIcon-40x40@3x.png","app/src-tauri/icons/ios/AppIcon-512@2x.png","app/src-tauri/icons/ios/AppIcon-60x60@2x.png","app/src-tauri/icons/ios/AppIcon-60x60@3x.png","app/src-tauri/icons/ios/AppIcon-76x76@1x.png","app/src-tauri/icons/ios/AppIcon-76x76@2x.png","app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png","app/src-tauri/src/lib.rs","app/src-tauri/src/main.rs","app/src-tauri/src/tray.rs","app/src-tauri/tauri.conf.json","app/src/.gitignore","app/src/App.tsx","app/src/AppContent.tsx","app/src/AppRoutes.tsx","app/src/AppSidebar.tsx","app/src/BackButton.tsx","app/src/Button.tsx","app/src/ConfirmModal.tsx","app/src/DataClass.tsx","app/src/HarborLogo.tsx","app/src/IconButton.tsx","app/src/Icons.tsx","app/src/Loading.tsx","app/src/LostSquirrel.tsx","app/src/Modal.tsx","app/src/OverlayContext.tsx","app/src/ScrollToTop.tsx","app/src/SearchInput.tsx","app/src/Section.tsx","app/src/ServiceTags.tsx","app/src/assets/font/Inter-Black.woff2","app/src/assets/font/Inter-BlackItalic.woff2","app/src/assets/font/Inter-Bold.woff2","app/src/assets/font/Inter-BoldItalic.woff2","app/src/assets/font/Inter-ExtraBold.woff2","app/src/assets/font/Inter-ExtraBoldItalic.woff2","app/src/assets/font/Inter-ExtraLight.woff2","app/src/assets/font/Inter-ExtraLightItalic.woff2","app/src/assets/font/Inter-Italic.woff2","app/src/assets/font/Inter-Light.woff2","app/src/assets/font/Inter-LightItalic.woff2","app/src/assets/font/Inter-Medium.woff2","app/src/assets/font/Inter-MediumItalic.woff2","app/src/assets/font/Inter-Regular.woff2","app/src/assets/font/Inter-SemiBold.woff2","app/src/assets/font/Inter-SemiBoldItalic.woff2","app/src/assets/font/Inter-Thin.woff2","app/src/assets/font/Inter-ThinItalic.woff2","app/src/assets/font/InterDisplay-Black.woff2","app/src/assets/font/InterDisplay-BlackItalic.woff2","app/src/assets/font/InterDisplay-Bold.woff2","app/src/assets/font/InterDisplay-BoldItalic.woff2","app/src/assets/font/InterDisplay-ExtraBold.woff2","app/src/assets/font/InterDisplay-ExtraBoldItalic.woff2","app/src/assets/font/InterDisplay-ExtraLight.woff2","app/src/assets/font/InterDisplay-ExtraLightItalic.woff2","app/src/assets/font/InterDisplay-Italic.woff2","app/src/assets/font/InterDisplay-Light.woff2","app/src/assets/font/InterDisplay-LightItalic.woff2","app/src/assets/font/InterDisplay-Medium.woff2","app/src/assets/font/InterDisplay-MediumItalic.woff2","app/src/assets/font/InterDisplay-Regular.woff2","app/src/assets/font/InterDisplay-SemiBold.woff2","app/src/assets/font/InterDisplay-SemiBoldItalic.woff2","app/src/assets/font/InterDisplay-Thin.woff2","app/src/assets/font/InterDisplay-ThinItalic.woff2","app/src/assets/font/InterVariable-Italic.woff2","app/src/assets/font/InterVariable.woff2","app/src/cli/CLI.tsx","app/src/config/Config.tsx","app/src/config/ConfigNameModal.tsx","app/src/config/HarborConfig.ts","app/src/config/HarborConfigEditor.tsx","app/src/config/HarborConfigEntryEditor.tsx","app/src/config/HarborConfigSectionEditor.tsx","app/src/config/useHarborConfig.ts","app/src/configMetadata.tsx","app/src/font.css","app/src/home/Doctor.tsx","app/src/home/Home.tsx","app/src/home/ServiceCard.tsx","app/src/home/ServiceList.tsx","app/src/home/Version.tsx","app/src/home/useServiceList.tsx","app/src/localStorage.ts","app/src/main.css","app/src/main.tsx","app/src/service/ServiceActions.tsx","app/src/service/ServiceDescription.tsx","app/src/service/ServiceDetails.tsx","app/src/service/ServiceDocs.tsx","app/src/service/ServiceHandle.tsx","app/src/service/ServiceName.tsx","app/src/service/useCurrentService.ts","app/src/serviceActions.tsx","app/src/serviceMetadata.ts","app/src/settings/ProfileSelector.tsx","app/src/settings/Settings.tsx","app/src/squirrel.css","app/src/tags.css","app/src/theme.tsx","app/src/useArrayState.ts","app/src/useAutostart.tsx","app/src/useCalled.tsx","app/src/useDebounceCallback.tsx","app/src/useGlobalKeydown.tsx","app/src/useHarbor.tsx","app/src/useInvoke.tsx","app/src/useOpen.tsx","app/src/useSearch.tsx","app/src/useSelectedProfile.tsx","app/src/useSharedState.tsx","app/src/useStoredState.tsx","app/src/useUnmount.ts","app/src/utils.tsx","app/src/vite-env.d.ts","app/tailwind.config.js","app/tsconfig.json","app/tsconfig.node.json","app/vite.config.ts","autogpt/backends/autogpt.ollama.yml","autogpt/override.env","bench/Dockerfile","bench/defaultTasks.yml","bench/override.env","bench/src/bench.ts","bench/src/config.ts","bench/src/deps.ts","bench/src/judge.ts","bench/src/llm.ts","bench/src/log.ts","bench/src/report.ts","bench/src/run.ts","bench/src/runner.ts","bench/src/task.ts","bench/src/tasks.ts","bench/src/tsconfig.json","bench/src/utils.ts","bionicgpt/override.env","bionicgpt/start_envoy.sh","bolt/.env.local","bolt/Dockerfile","bolt/model.ts","bolt/override.env","boost/.dockerignore","boost/.python-version","boost/Dockerfile","boost/README.md","boost/override.env","boost/pyproject.toml","boost/src/chat.py","boost/src/chat_node.py","boost/src/config.py","boost/src/custom_modules/.gitkeep","boost/src/custom_modules/3t.py","boost/src/custom_modules/ambi.py","boost/src/custom_modules/artifacts/dnd.html","boost/src/custom_modules/artifacts/dnd_mini.html","boost/src/custom_modules/artifacts/dot.html","boost/src/custom_modules/artifacts/dot_mini.html","boost/src/custom_modules/artifacts/fluid.html","boost/src/custom_modules/artifacts/fluid/.gitignore","boost/src/custom_modules/artifacts/fluid/color.ts","boost/src/custom_modules/artifacts/fluid/config.ts","boost/src/custom_modules/artifacts/fluid/fluid.ts","boost/src/custom_modules/artifacts/fluid/graph.ts","boost/src/custom_modules/artifacts/fluid/index.pug","boost/src/custom_modules/artifacts/fluid/index.ts","boost/src/custom_modules/artifacts/fluid/listener.ts","boost/src/custom_modules/artifacts/fluid/package-lock.json","boost/src/custom_modules/artifacts/fluid/package.json","boost/src/custom_modules/artifacts/fluid/pointer.ts","boost/src/custom_modules/artifacts/fluid/utils.ts","boost/src/custom_modules/artifacts/fluid/viewport.ts","boost/src/custom_modules/artifacts/fluid/visualisation.ts","boost/src/custom_modules/artifacts/fluid/webgl.ts","boost/src/custom_modules/artifacts/fluid_mini.html","boost/src/custom_modules/artifacts/graph.html","boost/src/custom_modules/artifacts/graph_mini.html","boost/src/custom_modules/artifacts/nbs.html","boost/src/custom_modules/artifacts/nbs_mini.html","boost/src/custom_modules/artifacts/ponder.html","boost/src/custom_modules/artifacts/ponder_mini.html","boost/src/custom_modules/artifacts/promx/.gitignore","boost/src/custom_modules/artifacts/promx/index.css","boost/src/custom_modules/artifacts/promx/index.pug","boost/src/custom_modules/artifacts/promx/index.ts","boost/src/custom_modules/artifacts/promx/listener.ts","boost/src/custom_modules/artifacts/promx/package.json","boost/src/custom_modules/artifacts/promx/utils.ts","boost/src/custom_modules/artifacts/promx_mini.html","boost/src/custom_modules/artifacts/tokens.html","boost/src/custom_modules/artifacts/tokens_mini.html","boost/src/custom_modules/cea.py","boost/src/custom_modules/cex.py","boost/src/custom_modules/clarity.py","boost/src/custom_modules/crystal.py","boost/src/custom_modules/cssv.py","boost/src/custom_modules/discussurl.py","boost/src/custom_modules/example.py","boost/src/custom_modules/fml.py","boost/src/custom_modules/gact.py","boost/src/custom_modules/grug.py","boost/src/custom_modules/l33t.py","boost/src/custom_modules/meow.py","boost/src/custom_modules/ow.py","boost/src/custom_modules/pad.py","boost/src/custom_modules/pdsv.py","boost/src/custom_modules/polyglot.py","boost/src/custom_modules/recpl.py","boost/src/custom_modules/stcl.py","boost/src/custom_modules/tmsv.py","boost/src/custom_modules/tri.py","boost/src/custom_modules/unstable.py","boost/src/custom_modules/usv.py","boost/src/custom_modules/webui_artifact.py","boost/src/custom_modules/wswp.py","boost/src/debouncer.py","boost/src/events.py","boost/src/format.py","boost/src/llm.py","boost/src/llm_registry.py","boost/src/log.py","boost/src/main.py","boost/src/mapper.py","boost/src/middleware/request_id.py","boost/src/middleware/request_state.py","boost/src/mods.py","boost/src/modules/autotemp.py","boost/src/modules/concept.py","boost/src/modules/dnd.py","boost/src/modules/dot.py","boost/src/modules/eli5.py","boost/src/modules/g1.py","boost/src/modules/klmbr.py","boost/src/modules/markov.py","boost/src/modules/mcts.py","boost/src/modules/nbs.py","boost/src/modules/ponder.py","boost/src/modules/promx.py","boost/src/modules/r0.py","boost/src/modules/rcn.py","boost/src/modules/supersummer.py","boost/src/selection.py","boost/src/state.py","boost/src/tools/registry.py","boost/tests/protocol.http","boost/tests/variables.http","boost/uv.lock","browseruse/.dockerignore","browseruse/Dockerfile","browseruse/override.env","chatnio/.gitignore","chatnio/Dockerfile","chatnio/config/config.base.yml","chatnio/config/config.ollama.yml","chatnio/config/config.override.yml","chatnio/config/config.searxng.yml","chatnio/override.env","chatnio/start_chatnio.sh","chatui/configs/chatui.airllm.yml","chatui/configs/chatui.aphrodite.yml","chatui/configs/chatui.config.yml","chatui/configs/chatui.dify.yml","chatui/configs/chatui.litellm.yml","chatui/configs/chatui.llamacpp.yml","chatui/configs/chatui.mistralrs.yml","chatui/configs/chatui.ollama.yml","chatui/configs/chatui.searxng.yml","chatui/configs/chatui.tabbyapi.yml","chatui/configs/chatui.vllm.yml","chatui/envify.js","chatui/override.env","chatui/start_chatui.sh","cmdh/Dockerfile","cmdh/harbor.prompt","cmdh/ollama.ts","cmdh/override.env","cmdh/system.prompt","comfyui/.gitignore","comfyui/.gitkeep","comfyui/default-workflow.json","comfyui/override.env","comfyui/provisioning.sh","compose.agent.yml","compose.agentzero.yml","compose.aichat.yml","compose.aider.yml","compose.airllm.yml","compose.airweave.yml","compose.anythingllm.yml","compose.aphrodite.yml","compose.autogpt.yml","compose.bench.yml","compose.bionicgpt.yml","compose.bolt.yml","compose.boost.yml","compose.browseruse.yml","compose.cfd.yml","compose.chatnio.yml","compose.chatui.yml","compose.cmdh.yml","compose.comfyui.yml","compose.dify.yml","compose.docling.yml","compose.drawio.yml","compose.fabric.yml","compose.flowise.yml","compose.gptme.yml","compose.gum.yml","compose.hf.yml","compose.hfdownloader.yml","compose.hollama.yml","compose.jupyter.yml","compose.k6.yml","compose.karakeep.yml","compose.kobold.yml","compose.ktransformers.yml","compose.langflow.yml","compose.langfuse.yml","compose.latentscope.yml","compose.ldr.yml","compose.librechat.yml","compose.libretranslate.yml","compose.litellm.yml","compose.litlytics.yml","compose.llamacpp.yml","compose.llamaswap.yml","compose.lmdeploy.yml","compose.lmeval.yml","compose.lobechat.yml","compose.localai.yml","compose.mcp-inspector.yml","compose.mcpo.yml","compose.metamcp.yml","compose.mikupad.yml","compose.mindsdb.yml","compose.mistralrs.yml","compose.modularmax.yml","compose.morphic.yml","compose.n8n.yml","compose.netdata.yml","compose.nexa.yml","compose.ol1.yml","compose.ollama.yml","compose.omnichain.yml","compose.omniparser.yml","compose.onyx.yml","compose.openhands.yml","compose.opint.yml","compose.optillm.yml","compose.oterm.yml","compose.parler.yml","compose.parllama.yml","compose.perplexica.yml","compose.perplexideez.yml","compose.pipelines.yml","compose.plandex.yml","compose.presenton.yml","compose.promptfoo.yml","compose.qdrant.yml","compose.qrgen.yml","compose.raglite.yml","compose.repopack.yml","compose.resume-matcher.yml","compose.searxng.morphic.yml","compose.sglang.yml","compose.sim.yml","compose.speaches.yml","compose.sqlchat.yml","compose.stt.yml","compose.supergateway.yml","compose.tabbyapi.yml","compose.textgrad.yml","compose.tgi.yml","compose.traefik.yml","compose.tts.yml","compose.txtairag.yml","compose.unsloth.yml","compose.vllm.yml","compose.webtop.yml","compose.webui.yml","compose.windmill.yml","compose.x.agentzero.ollama.yml","compose.x.aichat.ktransformers.yml","compose.x.aichat.ollama.yml","compose.x.aider.airllm.yml","compose.x.aider.aphrodite.yml","compose.x.aider.cdi.yml","compose.x.aider.dify.yml","compose.x.aider.ktransformers.yml","compose.x.aider.litellm.yml","compose.x.aider.llamacpp.yml","compose.x.aider.mistralrs.yml","compose.x.aider.nvidia.yml","compose.x.aider.ollama.yml","compose.x.aider.sglang.yml","compose.x.aider.tabbyapi.yml","compose.x.aider.vllm.yml","compose.x.anythingllm.llamacpp.yml","compose.x.anythingllm.ollama.yml","compose.x.anythingllm.searxng.yml","compose.x.aphrodite.cdi.yml","compose.x.aphrodite.nvidia.yml","compose.x.boost.airllm.yml","compose.x.boost.aphrodite.yml","compose.x.boost.dify.yml","compose.x.boost.ktransformers.yml","compose.x.boost.litellm.yml","compose.x.boost.llamacpp.yml","compose.x.boost.mistralrs.yml","compose.x.boost.ollama.yml","compose.x.boost.omnichain.yml","compose.x.boost.sglang.yml","compose.x.boost.tabbyapi.yml","compose.x.boost.vllm.yml","compose.x.browseruse.ollama.yml","compose.x.chatnio.ollama.yml","compose.x.chatnio.searxng.yml","compose.x.chatui.airllm.yml","compose.x.chatui.aphrodite.yml","compose.x.chatui.dify.yml","compose.x.chatui.litellm.yml","compose.x.chatui.llamacpp.yml","compose.x.chatui.mistralrs.yml","compose.x.chatui.ollama.yml","compose.x.chatui.searxng.yml","compose.x.chatui.tabbyapi.yml","compose.x.chatui.vllm.yml","compose.x.cmdh.harbor.yml","compose.x.cmdh.llamacpp.yml","compose.x.cmdh.ollama.yml","compose.x.cmdh.tgi.yml","compose.x.comfyui.cdi.yml","compose.x.comfyui.nvidia.yml","compose.x.docling.cdi.yml","compose.x.docling.nvidia.yml","compose.x.drawio.ollama.yml","compose.x.fabric.ollama.yml","compose.x.gptme.ollama.yml","compose.x.jupyter.cdi.yml","compose.x.jupyter.nvidia.yml","compose.x.karakeep.ollama.yml","compose.x.kobold.cdi.yml","compose.x.kobold.nvidia.yml","compose.x.ktransformers.cdi.yml","compose.x.ktransformers.nvidia.yml","compose.x.langflow.litellm.yml","compose.x.ldr.ollama.yml","compose.x.ldr.searxng.yml","compose.x.litellm.langfuse.yml","compose.x.litellm.optillm.yml","compose.x.litellm.tgi.yml","compose.x.litellm.vllm.yml","compose.x.llamacpp.cdi.yml","compose.x.llamacpp.nvidia.yml","compose.x.llamaswap.cdi.yml","compose.x.llamaswap.nvidia.yml","compose.x.lmdeploy.cdi.yml","compose.x.lmdeploy.nvidia.yml","compose.x.lmeval.cdi.yml","compose.x.lmeval.nvidia.yml","compose.x.lobechat.ollama.yml","compose.x.localai.cdi.yml","compose.x.localai.nvidia.yml","compose.x.localai.rocm.yml","compose.x.mcpo.mcp-server-time.yml","compose.x.mcpo.metamcp.yml","compose.x.mindsdb.llamacpp.yml","compose.x.mindsdb.ollama.yml","compose.x.mindsdb.vllm.yml","compose.x.mistralrs.cdi.yml","compose.x.mistralrs.nvidia.yml","compose.x.morphic.ollama.yml","compose.x.nexa.cdi.yml","compose.x.nexa.nvidia.yml","compose.x.ollama.cdi.yml","compose.x.ollama.nvidia.yml","compose.x.ollama.rocm.yml","compose.x.ollama.webui.yml","compose.x.openhands.ollama.yml","compose.x.opint.aphrodite.yml","compose.x.opint.litellm.yml","compose.x.opint.llamacpp.yml","compose.x.opint.mistralrs.yml","compose.x.opint.ollama.yml","compose.x.opint.tabbyapi.yml","compose.x.opint.vllm.yml","compose.x.optillm.airllm.yml","compose.x.optillm.aphrodite.yml","compose.x.optillm.boost.yml","compose.x.optillm.cdi.yml","compose.x.optillm.dify.yml","compose.x.optillm.ktransformers.yml","compose.x.optillm.litellm.yml","compose.x.optillm.llamacpp.yml","compose.x.optillm.mistralrs.yml","compose.x.optillm.nexa.yml","compose.x.optillm.nvidia.yml","compose.x.optillm.ollama.yml","compose.x.optillm.omnichain.yml","compose.x.optillm.pipelines.yml","compose.x.optillm.sglang.yml","compose.x.optillm.tabbyapi.yml","compose.x.optillm.vllm.yml","compose.x.oterm.ollama.yml","compose.x.parler.cdi.yml","compose.x.parler.nvidia.yml","compose.x.parllama.ollama.yml","compose.x.perplexica.ollama.yml","compose.x.perplexica.searxng.yml","compose.x.perplexideez.mdc.yml","compose.x.perplexideez.ollama.yml","compose.x.perplexideez.searxng.yml","compose.x.plandex.litellm.yml","compose.x.plandex.llamacpp.yml","compose.x.plandex.ollama.yml","compose.x.presenton.cdi.yml","compose.x.presenton.nvidia.yml","compose.x.presenton.ollama.yml","compose.x.promptfoo.ollama.yml","compose.x.raglite.ollama.yml","compose.x.raglite.vllm.yml","compose.x.resume-matcher.ollama.yml","compose.x.sglang.cdi.yml","compose.x.sglang.nvidia.yml","compose.x.sim.ollama.yml","compose.x.speaches.cdi.yml","compose.x.speaches.nvidia.yml","compose.x.sqlchat.ollama.yml","compose.x.stt.cdi.yml","compose.x.stt.nvidia.yml","compose.x.tabbyapi.cdi.yml","compose.x.tabbyapi.nvidia.yml","compose.x.textgrad.cdi.yml","compose.x.textgrad.nvidia.yml","compose.x.tgi.cdi.yml","compose.x.tgi.nvidia.yml","compose.x.traefik.agent.yml","compose.x.traefik.agentzero.yml","compose.x.traefik.aichat.yml","compose.x.traefik.aider.yml","compose.x.traefik.airllm.yml","compose.x.traefik.airweave.yml","compose.x.traefik.anythingllm.yml","compose.x.traefik.aphrodite.yml","compose.x.traefik.autogpt.yml","compose.x.traefik.bionicgpt.yml","compose.x.traefik.bolt.yml","compose.x.traefik.boost.yml","compose.x.traefik.browseruse.yml","compose.x.traefik.chatnio.yml","compose.x.traefik.chatui.yml","compose.x.traefik.comfyui.yml","compose.x.traefik.dify.yml","compose.x.traefik.docling.yml","compose.x.traefik.drawio.yml","compose.x.traefik.flowise.yml","compose.x.traefik.hollama.yml","compose.x.traefik.jupyter.yml","compose.x.traefik.k6.yml","compose.x.traefik.karakeep.yml","compose.x.traefik.kobold.yml","compose.x.traefik.ktransformers.yml","compose.x.traefik.langflow.yml","compose.x.traefik.langfuse.yml","compose.x.traefik.latentscope.yml","compose.x.traefik.ldr.yml","compose.x.traefik.librechat.yml","compose.x.traefik.libretranslate.yml","compose.x.traefik.litellm.yml","compose.x.traefik.litlytics.yml","compose.x.traefik.llamacpp.yml","compose.x.traefik.llamaswap.yml","compose.x.traefik.lmdeploy.yml","compose.x.traefik.lobechat.yml","compose.x.traefik.localai.yml","compose.x.traefik.mcp-inspector.yml","compose.x.traefik.mcpo.yml","compose.x.traefik.metamcp.yml","compose.x.traefik.mikupad.yml","compose.x.traefik.mindsdb.yml","compose.x.traefik.mistralrs.yml","compose.x.traefik.modularmax.yml","compose.x.traefik.morphic.yml","compose.x.traefik.n8n.yml","compose.x.traefik.netdata.yml","compose.x.traefik.nexa.yml","compose.x.traefik.ol1.yml","compose.x.traefik.ollama.yml","compose.x.traefik.omnichain.yml","compose.x.traefik.omniparser.yml","compose.x.traefik.openhands.yml","compose.x.traefik.optillm.yml","compose.x.traefik.parler.yml","compose.x.traefik.perplexica.yml","compose.x.traefik.perplexideez.yml","compose.x.traefik.pipelines.yml","compose.x.traefik.plandex.yml","compose.x.traefik.presenton.yml","compose.x.traefik.promptfoo.yml","compose.x.traefik.qdrant.yml","compose.x.traefik.raglite.yml","compose.x.traefik.resume-matcher.yml","compose.x.traefik.sglang.yml","compose.x.traefik.sim.yml","compose.x.traefik.speaches.yml","compose.x.traefik.sqlchat.yml","compose.x.traefik.stt.yml","compose.x.traefik.tabbyapi.yml","compose.x.traefik.textgrad.yml","compose.x.traefik.tgi.yml","compose.x.traefik.tts.yml","compose.x.traefik.txtairag.yml","compose.x.traefik.unsloth.yml","compose.x.traefik.vllm.yml","compose.x.traefik.webtop.yml","compose.x.traefik.webui.yml","compose.x.traefik.windmill.yml","compose.x.tts.cdi.yml","compose.x.tts.nvidia.yml","compose.x.txtairag.cdi.yml","compose.x.txtairag.nvidia.yml","compose.x.txtairag.ollama.yml","compose.x.unsloth.cdi.yml","compose.x.unsloth.nvidia.yml","compose.x.vllm.cdi.yml","compose.x.vllm.nvidia.yml","compose.x.webui.agent.yml","compose.x.webui.airllm.yml","compose.x.webui.aphrodite.yml","compose.x.webui.boost.yml","compose.x.webui.comfyui.yml","compose.x.webui.dify.yml","compose.x.webui.kobold.yml","compose.x.webui.ktransformers.yml","compose.x.webui.litellm.yml","compose.x.webui.llamacpp.yml","compose.x.webui.llamaswap.yml","compose.x.webui.mcpo.metamcp.yml","compose.x.webui.mistralrs.yml","compose.x.webui.modularmax.yml","compose.x.webui.nexa.yml","compose.x.webui.ollama.yml","compose.x.webui.omnichain.yml","compose.x.webui.optillm.yml","compose.x.webui.parler.yml","compose.x.webui.pipelines.yml","compose.x.webui.searxng.ollama.yml","compose.x.webui.searxng.yml","compose.x.webui.sglang.yml","compose.x.webui.speaches.yml","compose.x.webui.stt.yml","compose.x.webui.tabbyapi.yml","compose.x.webui.tts.yml","compose.x.webui.vllm.yml","compose.yml","deno.lock","dify/certbot/README.md","dify/certbot/docker-entrypoint.sh","dify/certbot/update-cert.template.txt","dify/nginx/conf.d/default.conf.template","dify/nginx/docker-entrypoint.sh","dify/nginx/https.conf.template","dify/nginx/nginx.conf.template","dify/nginx/proxy.conf.template","dify/nginx/ssl/.gitkeep","dify/openai/Dockerfile","dify/openai/app.js","dify/openai/package.json","dify/override.env","dify/ssrf_proxy/docker-entrypoint.sh","dify/ssrf_proxy/squid.conf.template","docling/override.env","docs/1.-Harbor-User-Guide.md","docs/1.0.-Installing-Harbor.md","docs/1.1-Harbor-App.md","docs/1.2-Tools.md","docs/2.-Services.md","docs/2.1.1-Frontend&colon-Open-WebUI.md","docs/2.1.10-Frontend&colon-Chat-Nio.md","docs/2.1.11-Frontend&colon-Mikupad.md","docs/2.1.12-Frontend-oterm.md","docs/2.1.13-Frontend-Presenton.md","docs/2.1.14-Frontend-Onyx.md","docs/2.1.2-Frontend&colon-ComfyUI.md","docs/2.1.3-Frontend&colon-LibreChat.md","docs/2.1.4-Frontend&colon-ChatUI.md","docs/2.1.5-Frontend&colon-Lobe-Chat.md","docs/2.1.6-Frontend&colon-hollama.md","docs/2.1.7-Frontend&colon-parllama.md","docs/2.1.8-Frontend&colon-BionicGPT.md","docs/2.1.9-Frontend&colon-AnythingLLM.md","docs/2.2.1-Backend&colon-Ollama.md","docs/2.2.10-Backend&colon-lmdeploy.md","docs/2.2.11-Backend&colon-AirLLM.md","docs/2.2.12-Backend&colon-SGLang.md","docs/2.2.13-Backend&colon-KTransformers.md","docs/2.2.14-Backend&colon-Speaches.md","docs/2.2.15-Backend&colon-Nexa-SDK.md","docs/2.2.16-Backend&colon-KoboldCpp.md","docs/2.2.17-Backend-Modular-MAX.md","docs/2.2.2-Backend&colon-llama.cpp.md","docs/2.2.3-Backend&colon-vLLM.md","docs/2.2.4-Backend&colon-TabbyAPI.md","docs/2.2.5-Backend&colon-Aphrodite-Engine.md","docs/2.2.6-Backend&colon-mistral.rs.md","docs/2.2.7-Backend&colon-openedai-speech.md","docs/2.2.8-Backend&colon-Parler.md","docs/2.2.9-Backend&colon-text-generation-inference.md","docs/2.3.1-Satellite&colon-SearXNG.md","docs/2.3.10-Satellite&colon-fabric.md","docs/2.3.11-Satellite&colon-txtai-RAG.md","docs/2.3.12-Satellite&colon-TextGrad.md","docs/2.3.13-Satellite&colon-aider.md","docs/2.3.14-Satellite&colon-aichat.md","docs/2.3.15-Satellite&colon-AutoGPT.md","docs/2.3.16-Satellite&colon-omnichain.md","docs/2.3.17-Satellite&colon-lm-evaluation-harness.md","docs/2.3.18-Satellite&colon-JupyterLab.md","docs/2.3.19-Satellite&colon-ol1.md","docs/2.3.2-Satellite&colon-Perplexica.md","docs/2.3.20-Satellite&colon-OpenHands.md","docs/2.3.21-Satellite&colon-LitLytics.md","docs/2.3.22-Satellite&colon-Repopack.md","docs/2.3.23-Satellite&colon-n8n.md","docs/2.3.24-Satellite&colon-Bolt.new.md","docs/2.3.25-Satellite&colon-Open-WebUI-Pipelines.md","docs/2.3.26-Satellite&colon-Qdrant.md","docs/2.3.27-Satellite&colon-K6.md","docs/2.3.28-Satellite&colon-Promptfoo.md","docs/2.3.29-Satellite&colon-Webtop.md","docs/2.3.3-Satellite&colon-Dify.md","docs/2.3.30-Satellite&colon-OmniParser.md","docs/2.3.31-Satellite&colon-Flowise.md","docs/2.3.32-Satellite&colon-LangFlow.md","docs/2.3.33-Satellite&colon-OptiLLM.md","docs/2.3.34-Satellite-Morphic.md","docs/2.3.35-Satellite-SQL-Chat.md","docs/2.3.36-Satellite-gptme.md","docs/2.3.37-Satellite-traefik.md","docs/2.3.38-Satellite-Latent-Scope.md","docs/2.3.39-Satellite-RAGLite.md","docs/2.3.4-Satellite&colon-Plandex.md","docs/2.3.40-Satellite-llamaswap.md","docs/2.3.41-Satellite-libretranslate.md","docs/2.3.42-Satellite-metamcp.md","docs/2.3.43-Satellite-mcpo.md","docs/2.3.44-Satellite-supergateway.md","docs/2.3.45-Satellite-Local-Deep-Research.md","docs/2.3.46-Satellite-LocalAI.md","docs/2.3.47-Satellite-Agent-Zero.md","docs/2.3.48-Satellite-Airweave.md","docs/2.3.49-Satellite-Docling.md","docs/2.3.5-Satellite&colon-LiteLLM.md","docs/2.3.50-Satellite-Browser-Use.md","docs/2.3.51-Satellite-Unsloth.md","docs/2.3.52-Satellite-Windmill.md","docs/2.3.53-Satellite-Karakeep.md","docs/2.3.54-Satellite-Netdata.md","docs/2.3.55-Satellite-Resume-Matcher.md","docs/2.3.56-Satellite-Drawio.md","docs/2.3.57-Satellite-MindsDB.md","docs/2.3.58-Satellite-Sim-Studio.md","docs/2.3.6-Satellite&colon-langfuse.md","docs/2.3.7-Satellite&colon-Open-Interpreter.md","docs/2.3.8-Satellite&colon-cloudflared.md","docs/2.3.9-Satellite&colon-cmdh.md","docs/3.-Harbor-CLI-Reference.md","docs/4.-Compatibility.md","docs/5.1.-Harbor-Bench.md","docs/5.2.-Harbor-Boost.md","docs/5.2.1.-Harbor-Boost-Custom-Modules.md","docs/5.2.2-Harbor-Boost-Configuration.md","docs/5.2.3-Harbor-Boost-Modules.md","docs/6.-Harbor-Compose-Setup.md","docs/7.-Adding-A-New-Service.md","docs/README.md","docs/_Footer.md","docs/anythingllm.png","docs/bench-report.png","docs/bench-superset.png","docs/bionicgpt.png","docs/bolt-local-qwen.png","docs/bolt-openailike.png","docs/boost-autotemp.png","docs/boost-behavior.png","docs/boost-concept.png","docs/boost-custom-example.png","docs/boost-dnd.png","docs/boost-dot.png","docs/boost-klmbr.png","docs/boost-markov.png","docs/boost-nbs.png","docs/boost-ponder.png","docs/boost-promx.png","docs/boost-r0.png","docs/boost-unstable.png","docs/boost.png","docs/chatnio-searxng.png","docs/chatui-searxng.png","docs/dify-harbor.png","docs/dify-ollama.png","docs/dify-sample-webllama.yml","docs/dify-sample-webrag.yml","docs/dify-searxng.png","docs/dify-webui.png","docs/flowise.png","docs/g1-reasoning.png","docs/gptme.png","docs/harbor-2.png","docs/harbor-agentzero.png","docs/harbor-airllm.png","docs/harbor-airweave.png","docs/harbor-app-2.png","docs/harbor-app-3.png","docs/harbor-app-4.png","docs/harbor-app-5.png","docs/harbor-app-6.png","docs/harbor-app-7.png","docs/harbor-app-8.png","docs/harbor-app-macos.png","docs/harbor-app.png","docs/harbor-arch-diag.png","docs/harbor-boost.png","docs/harbor-browseruse.gif","docs/harbor-comfyui-update.png","docs/harbor-docling.png","docs/harbor-drawio-settings.png","docs/harbor-drawio.png","docs/harbor-history.gif","docs/harbor-k6.png","docs/harbor-karakeep.png","docs/harbor-latentscope.png","docs/harbor-ldr.png","docs/harbor-libretranslate.png","docs/harbor-metamcp.png","docs/harbor-mindsdb.png","docs/harbor-morphic.png","docs/harbor-netdata.png","docs/harbor-ollama-models.png","docs/harbor-onyx.png","docs/harbor-oterm.png","docs/harbor-presenton.png","docs/harbor-raglite.png","docs/harbor-resume-matcher.png","docs/harbor-sim.png","docs/harbor-tools.png","docs/harbor-top.png","docs/harbor-traefik.png","docs/harbor-unsloth.png","docs/harbor-webtop.png","docs/harbor-webui-json.png","docs/harbor-windmill.png","docs/image.png","docs/ktransformers-webui.png","docs/langflow.png","docs/langfuse.png","docs/litlytics-config.png","docs/litlytics.png","docs/mcp-inspector.png","docs/mcpo.png","docs/mikupad.png","docs/nexa-webui-error.png","docs/nexa-webui-workaround.png","docs/ol1.png","docs/omnichain-import.png","docs/omnichain.png","docs/omniparser.png","docs/openhands-config.png","docs/optillm.png","docs/parllama.png","docs/plandex-exec.png","docs/promptfoo-2.png","docs/promptfoo.png","docs/qr.png","docs/seaxng-webrag.png","docs/sqlchat.png","docs/tunnels.png","docs/txtairag.png","docs/webui-boost-status.png","docs/webui-pipelines-2.png","docs/webui-pipelines.png","drawio/override.env","fabric/override.env","flowise/.gitignore","flowise/override.env","gptme/Dockerfile","gptme/config.toml","gptme/override.env","gum/Dockerfile","harbor.sh","harbor/__init__.py","hf/Dockerfile","hf/override.env","hfdownloader/Dockerfile","hfdownloader/override.env","http-catalog/agent.http","http-catalog/airllm.http","http-catalog/aphrodite.http","http-catalog/boost.http","http-catalog/comfyui.http","http-catalog/dify.http","http-catalog/hf.http","http-catalog/kobold.http","http-catalog/ktransformers.http","http-catalog/langfuse.http","http-catalog/litellm.http","http-catalog/llamacpp.http","http-catalog/llamaswap.http","http-catalog/mistral.http","http-catalog/mistralrs.http","http-catalog/modularmax.http","http-catalog/nexa.http","http-catalog/ollama.http","http-catalog/ollama/completions.http","http-catalog/omnichain.http","http-catalog/optillm.http","http-catalog/parler.http","http-catalog/perplexideez.http","http-catalog/plandex.http","http-catalog/sglang.http","http-catalog/speaches.http","http-catalog/stt.http","http-catalog/tabbyapi.http","http-catalog/tgi.http","http-catalog/tts.http","http-catalog/vllm.http","http-catalog/webui.http","install.sh","jupyter/Dockerfile","jupyter/override.env","jupyter/workspace/000-sample.ipynb","k6/.gitignore","k6/dashboards/k6-load-testing-results_rev3.json","k6/dashboards/k6-openai-tokens_rev1.json","k6/docker-compose.yaml","k6/grafana-dashboard.yaml","k6/grafana-datasource.yaml","k6/override.env","k6/scripts/concurrent-prefix-caching.js","k6/scripts/example.js","k6/scripts/helpers/config.js","k6/scripts/helpers/http.js","k6/scripts/helpers/ollamaHttp.js","k6/scripts/helpers/openaiGeneric.js","k6/scripts/helpers/utils.js","k6/scripts/ollama.js","k6/scripts/openai-api-throughput.js","k6/scripts/payloads/completions.js","k6/scripts/payloads/ollama.js","karakeep/.gitignore","karakeep/override.env","kobold/.gitignore","kobold/override.env","ktransformers/Dockerfile","ktransformers/chat.py","ktransformers/override.env","langflow/.gitignore","langflow/override.env","langfuse/.gitignore","langfuse/.gitkeep","langfuse/override.env","latentscope/.gitignore","latentscope/Dockerfile","latentscope/override.env","ldr/.gitignore","ldr/override.env","librechat/.env","librechat/.gitignore","librechat/.gitkeep","librechat/librechat.yml","librechat/override.env","librechat/start_librechat.sh","libretranslate/.gitignore","libretranslate/override.env","litellm/litellm.config.yaml","litellm/litellm.langfuse.yaml","litellm/litellm.optillm.yaml","litellm/litellm.tgi.yaml","litellm/litellm.vllm.yaml","litellm/override.env","litellm/start_litellm.sh","litlytics/override.env","llamacpp/data/templates/tars.jinja","llamacpp/override.env","llamaswap/config.yaml","llamaswap/override.env","lmeval/Dockerfile","lmeval/override.env","lobechat/override.env","localai/.gitignore","localai/override.env","mcp/.gitignore","mcp/inspector-entrypoint.sh","mcp/override.env","mcpo/configs/mcpo.mcp-server-fetch.json","mcpo/configs/mcpo.mcp-server-time.json","mcpo/configs/mcpo.metamcp.json","mcpo/configs/mcpo.override.json","mcpo/override.env","mcpo/start_mcpo.sh","metamcp/.gitignore","metamcp/override.env","metamcp/start-sse.mjs","mikupad/override.env","mindsdb/.gitignore","mindsdb/override.env","modularmax/override.env","morphic/.gitignore","morphic/override.env","n8n/.gitignore","n8n/backup/credentials/9LdDQI9lblNjIGIZ.json","n8n/backup/workflows/6K7zSSBeRa0z1hi6.json","n8n/override.env","netdata/.gitignore","netdata/override.env","nexa/Dockerfile","nexa/nvidia.sh","nexa/override.env","nexa/proxy.Dockerfile","nexa/proxy_server.py","ol1/Dockerfile","ol1/README.md","ol1/app.py","ol1/override.env","ollama/.gitkeep","ollama/init_entrypoint.sh","ollama/modelfiles/README.md","ollama/modelfiles/flowaicom-flow-judge.Modelfile","ollama/modelfiles/gemma3-qat-tools.Modelfile","ollama/modelfiles/hargent.Modelfile","ollama/modelfiles/llama3.1_8b.Modelfile","ollama/modelfiles/llama3.1_q6k_48k.Modelfile","ollama/modelfiles/qwen2.5_7b_q8_32k.Modelfile","ollama/modelfiles/qwen2.5_7b_q8_48k.Modelfile","ollama/modelfiles/qwen2.5_q6k_32k.Modelfile","ollama/modelfiles/tars.Modelfile","ollama/override.env","omnichain/Dockerfile","omnichain/custom_nodes/example/example.maker.js","omnichain/entrypoint.sh","omnichain/examples/HarborChat.json","omnichain/files/harbor.prompt","omnichain/openai.ts","omnichain/override.env","omniparser/Dockerfile","omniparser/override.env","onyx/.gitignore","onyx/nginx/app.conf.template","onyx/nginx/run-nginx.sh","onyx/override.env","open-webui/configs/config.agent.json","open-webui/configs/config.airllm.json","open-webui/configs/config.aphrodite.json","open-webui/configs/config.boost.json","open-webui/configs/config.comfyui.json","open-webui/configs/config.dify.json","open-webui/configs/config.json","open-webui/configs/config.kobold.json","open-webui/configs/config.ktransformers.json","open-webui/configs/config.litellm.json","open-webui/configs/config.llamacpp.json","open-webui/configs/config.llamaswap.json","open-webui/configs/config.mistralrs.json","open-webui/configs/config.modularmax.json","open-webui/configs/config.nexa.json","open-webui/configs/config.ollama.json","open-webui/configs/config.omnichain.json","open-webui/configs/config.optillm.json","open-webui/configs/config.override.json","open-webui/configs/config.parler.json","open-webui/configs/config.pipelines.json","open-webui/configs/config.searxng.json","open-webui/configs/config.sglang.json","open-webui/configs/config.speaches.json","open-webui/configs/config.stt.json","open-webui/configs/config.tabbyapi.json","open-webui/configs/config.tts.json","open-webui/configs/config.vllm.json","open-webui/configs/config.x.mcpo.metamcp.json","open-webui/configs/config.x.searxng.ollama.json","open-webui/extras/artifact.py","open-webui/extras/mcts.py","open-webui/override.env","open-webui/start_webui.sh","openhands/.gitignore","openhands/override.env","openinterpreter/Dockerfile","openinterpreter/override.env","optillm/.gitignore","optillm/override.env","oterm/.gitignore","oterm/Dockerfile","oterm/override.env","package.json","parler/main.py","parler/override.env","parllama/Dockerfile","parllama/override.env","perplexica/override.env","perplexica/source.config.toml","perplexideez/.gitignore","perplexideez/override.env","pipelines/override.env","plandex/Dockerfile","plandex/override.env","poetry.lock","presenton/.gitignore","presenton/override.env","profiles/default.env","promptfoo/.gitignore","promptfoo/README.md","promptfoo/evals/hf/README.md","promptfoo/evals/hf/deno.json","promptfoo/evals/hf/deno.lock","promptfoo/evals/hf/generate.ts","promptfoo/evals/hf/promptfoo-errors.log","promptfoo/evals/hf/promptfooconfig.yaml","promptfoo/evals/hf/queries.ts","promptfoo/evals/hf/tests/category_sample.yaml","promptfoo/evals/hf/tests/challenge.yaml","promptfoo/evals/hf/tests/gpqa_diamond.yaml","promptfoo/evals/hf/tests/validate.yaml","promptfoo/evals/mini-mmlu-pro/generate.ts","promptfoo/examples/bias/README.md","promptfoo/examples/bias/promptfooconfig.yaml","promptfoo/examples/hello-promptfoo/README.md","promptfoo/examples/hello-promptfoo/promptfooconfig.yaml","promptfoo/examples/misguided/README.md","promptfoo/examples/misguided/promptfooconfig.yaml","promptfoo/examples/temp-test/README.md","promptfoo/examples/temp-test/promptfooconfig.yaml","promptfoo/override.env","pyproject.toml","qdrant/override.env","qrgen/Dockerfile","qrgen/gen.ts","raglite/.gitignore","raglite/Dockerfile","raglite/override.env","repopack/Dockerfile","repopack/override.env","requirements.sh","resume-matcher/.gitignore","resume-matcher/Dockerfile.backend","resume-matcher/Dockerfile.frontend","resume-matcher/override.env","routines/.vscode/settings.json","routines/config.ts","routines/deno.json","routines/deno.lock","routines/docker.ts","routines/envManager.ts","routines/manageTools.ts","routines/mergeComposeFiles.ts","routines/paths.ts","routines/tsconfig.json","routines/types.ts","routines/utils.ts","searxng/override.env","searxng/settings.yml","searxng/settings.yml.new","searxng/uwsgi.ini","searxng/uwsgi.ini.new","shared/README.md","shared/harbor_entrypoint.sh","shared/json_config_merger.py","shared/proxy_user.sh","shared/yaml_config_merger.js","shared/yaml_config_merger.py","sim/.gitignore","sim/override.env","speaches/init_entrypoint.ts","speaches/override.env","sqlchat/override.env","stt/override.env","supergateway/override.env","tabbyapi/api_tokens.yml","tabbyapi/config.yml","tabbyapi/override.env","tabbyapi/start_tabbyapi.sh","textgrad/Dockerfile","textgrad/override.env","textgrad/workspace/000-sample.ipynb","tgi/override.env","tools/config.yaml","traefik/acme.json","traefik/override.env","traefik/traefik.yml","tts/config/pre_process_map.yaml","tts/config/voice_to_speaker.yaml","tts/override.env","txtairag/rag.py","unsloth/.gitignore","unsloth/override.env","vllm/Dockerfile","vllm/override.env","webtop/.gitignore","webtop/Dockerfile","webtop/init/create_symlink.sh","webtop/init/fix_desktop_app.sh","webtop/init/provision_docker_groups.sh","webtop/override.env","windmill/.gitignore","windmill/Caddyfile","windmill/override.env","yarn.lock"]

@@ -15,0 +15,0 @@ [[tool.poetry.packages]]

@@ -23,3 +23,3 @@ ![Harbor project logo](https://github.com/av/harbor/raw/main/docs/harbor-2.png)

Harbor is a containerized LLM toolkit that allows you to run LLM backends, frontends and related useful services. It consists of a CLI and a companion App.
Harbor is a CLI and companion app that lets you spin up a complete local LLM stack—backends like Ollama, llama.cpp, or vLLM, frontends like Open WebUI, plus supporting services like SearXNG for web search, Speaches for voice chat, and ComfyUI for image generation—all pre-wired to work together with a single `harbor up` command. No manual setup: just pick the services you want and Harbor handles the Docker Compose orchestration, configuration, and cross-service connectivity so you can focus on actually using your models.

@@ -26,0 +26,0 @@ ![Screenshot of Harbor CLI and App together](https://github.com/av/harbor/wiki/harbor-app-3.png)

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display